Page 1 of 4

Automatic Skill Level Detection

Posted: 04 Sep 2013, 20:20
by xlr82xs
Is anyone interested in this ?

IE a modification to the attackSkillSlot config block that lets you put in skill damage formulas (potentially hooked into things like MATK and ATK if I can be bothered) for the various skills you have, and then have the "optimal" skill level selected ?

For example, for Fire Bolt, damage is MATK * Level, so if a mob only has x hp left, case the lowest level of Fire Bolt that will do that much damage (or the highest level available if nothing will one hit kill)

I ask mainly to determine if I will roll this as a plugin or a patch.

I've currently got a very simple version of this running as a modification to the monsterDB plugin (which is natural, as you need it to determine monster element and current hp) with the config block setup like

Code: Select all

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY, Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 1
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY, Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 2
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY, Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 3
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY, Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 4
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 1 * 1.5
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 2 * 1.5
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 3 * 1.5
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
	skillFormula $matkav * 4 * 1.5
}

attackSkillSlot Cold Bolt {
	lvl 5
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
}
Which is plenty clean enough for me, but if people are interested, I'll actually put some thought into simplifying the configuration.

Re: Automatic Skill Level Detection

Posted: 05 Sep 2013, 00:45
by xlr82xs

Code: Select all

attackSkillSlot Fire Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula (($matkav+45)*1)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula (($matkav+45)*2)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula (($matkav+45)*3)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula ((($matkav+45)*1)*1.5)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula ((($matkav+45)*2)*1.5)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula ((($matkav+45)*3)*1.5)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula (($matkav+45)*1)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula (($matkav+45)*2)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula (($matkav+45)*3)*1.75
}


attackSkillSlot Fire Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula ((($matkav+45)*1)*1.5)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula ((($matkav+45)*2)*1.5)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula ((($matkav+45)*3)*1.5)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula (($matkav+45)*1)*2
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula (($matkav+45)*2)*2
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula (($matkav+45)*3)*2
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula ((($matkav+45)*1)*1.5)*2
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula ((($matkav+45)*2)*1.5)*2
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula ((($matkav+45)*3)*1.5)*2
}

attackSkillSlot Fire Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav+45)*1)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav+45)*2)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav+45)*3)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav+45)*4)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav+45)*1)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav+45)*2)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav+45)*3)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav+45)*4)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav+45)*1)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav+45)*2)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav+45)*3)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav+45)*4)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav+45)*1)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav+45)*2)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav+45)*3)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav+45)*4)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav+45)*1)*2
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav+45)*2)*2
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav+45)*3)*2
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav+45)*4)*2
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav+45)*1)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav+45)*2)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav+45)*3)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 8
	whenStatusInactive EFST_POSTDELAY
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav+45)*4)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 5
	dist 8
	whenStatusInactive EFST_POSTDELAY
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
}
For anyone running with Fire and Cold bolt max levels 4 and 5 respectively.

I should probably at some point take MDEF into account.


in monsterDB.pl

Code: Select all

	my $matkav = int((($char->{lv} / 4) + ($char->{int} + $char->{int_bonus}) + (($char->{int} + $char->{int_bonus}) / 2) + (($char->{dex} + $char->{dex_bonus}) / 5) + (($char->{luk} + $char->{luk_bonus}) / 3)) + (($char->{lv} / 4) + ($char->{int} + $char->{int_bonus}) + (($char->{int} + $char->{int_bonus}) / 2) + (($char->{dex} + $char->{dex_bonus}) / 5) + (($char->{luk} + $char->{luk_bonus}) / 3))/abs((($char->{lv} / 4) + ($char->{int} + $char->{int_bonus}) + (($char->{int} + $char->{int_bonus}) / 2) + (($char->{dex} + $char->{dex_bonus}) / 5) + (($char->{luk} + $char->{luk_bonus}) / 3))*2)) + $char->{attack_magic_min};
		
	if ($config{$args->{prefix} . '_damageFormula'}
	&& !inRange(($monsterInfo->[0] + $args->{monster}->{deltaHp}),'<='.eval($config{$args->{prefix} . '_damageFormula'}))) {
		return $args->{return} = 0;
	}
	
	if ($config{$args->{prefix} . '_damageFormula'}
	&& inRange(($monsterInfo->[0] + $args->{monster}->{deltaHp}),'<= '.eval($config{$args->{prefix} . '_damageFormula'}))) {
		my $formula = int(eval($config{$args->{prefix} . '_damageFormula'}));
		debug("I think my damage will be around : $formula\n", 'monsterDB', 0);
	}

I need to update this to calculate weapon mATK correctly, aswell as equipment mATK bonuses

Re: Automatic Skill Level Detection

Posted: 05 Sep 2013, 20:05
by xlr82xs

Code: Select all

You are now attacking Monster Drosera (1)
You are casting Fire Bolt on Monster Drosera (1) (Delay: 909ms)
[ 86/ 95] You use Fire Bolt (Lv: 4) on Monster Drosera (1) (Dmg: 1216) (Delay: 520ms) (HP: 9662/10878)
You are now: EFST_POSTDELAY (Duration: 1.6s)
You are no longer: EFST_POSTDELAY
You are casting Mystical Amplification on yourself (Delay: 700ms)
You are now: Mystical Amplification (Duration: 30s)
You use Mystical Amplification on yourself (Lv: 10)
You are casting Fire Bolt on Monster Drosera (1) (Delay: 909ms)
You are no longer: Mystical Amplification
[ 86/ 91] You use Fire Bolt (Lv: 4) on Monster Drosera (1) (Dmg: 1900) (Delay: 520ms) (HP: 7762/10878)
You are now: EFST_POSTDELAY (Duration: 1.6s)
You are no longer: EFST_POSTDELAY
You are casting Mystical Amplification on yourself (Delay: 700ms)
You are now: Mystical Amplification (Duration: 30s)
You use Mystical Amplification on yourself (Lv: 10)
You are casting Fire Bolt on Monster Drosera (1) (Delay: 909ms)
You are no longer: Mystical Amplification
[ 86/ 90] You use Fire Bolt (Lv: 4) on Monster Drosera (1) (Dmg: 2112) (Delay: 520ms) (HP: 5650/10878)
You are now: EFST_POSTDELAY (Duration: 1.6s)
You are no longer: EFST_POSTDELAY
You are casting Mystical Amplification on yourself (Delay: 700ms)
You are now: Mystical Amplification (Duration: 30s)
You use Mystical Amplification on yourself (Lv: 10)
You are casting Fire Bolt on Monster Drosera (1) (Delay: 909ms)
You are no longer: Mystical Amplification
[ 87/ 88] You use Fire Bolt (Lv: 4) on Monster Drosera (1) (Dmg: 1960) (Delay: 520ms) (HP: 3690/10878)
You are now: EFST_POSTDELAY (Duration: 1.6s)
You are no longer: EFST_POSTDELAY
You are casting Mystical Amplification on yourself (Delay: 700ms)
You are now: Mystical Amplification (Duration: 30s)
You use Mystical Amplification on yourself (Lv: 10)
You are casting Fire Bolt on Monster Drosera (1) (Delay: 909ms)
You are no longer: Mystical Amplification
[ 87/ 87] You use Fire Bolt (Lv: 4) on Monster Drosera (1) (Dmg: 2184) (Delay: 520ms) (HP: 1506/10878)
You are now: EFST_POSTDELAY (Duration: 1.6s)
You are no longer: EFST_POSTDELAY
You are casting Mystical Amplification on yourself (Delay: 700ms)
You are now: Mystical Amplification (Duration: 30s)
You use Mystical Amplification on yourself (Lv: 10)
You are casting Fire Bolt on Monster Drosera (1) (Delay: 545ms)
You are no longer: Mystical Amplification
[ 88/ 86] You use Fire Bolt (Lv: 2) on Monster Drosera (1) (Dmg: 1104) (Delay: 520ms) (HP: 402/10878)
You are now: EFST_POSTDELAY (Duration: 1.2s)
You are no longer: EFST_POSTDELAY
You are casting Mystical Amplification on yourself (Delay: 700ms)
You are now: Mystical Amplification (Duration: 30s)
You use Mystical Amplification on yourself (Lv: 10)
You are casting Fire Bolt on Monster Drosera (1) (Delay: 363ms)
You are no longer: Mystical Amplification
[ 88/ 83] You use Fire Bolt (Lv: 1) on Monster Drosera (1) (Dmg: 490) (Delay: 520ms) (HP: -88/10878)
You are now: EFST_POSTDELAY (Duration: 1s)
You use Soul Drain on Monster Drosera (1) (Lv: 10)
You have gained 1552/1163 (0.16%/0.16%) Exp
It gets the skill level wrong sometimes, which is why I need to get around to implementing mDEF calculations, which will probably happen over the weekend.
I'm also going to change it so it automatically detects the element level, so it can calculate the damage enhancement.

Would people prefer this to be hard coded, or specified in config.txt ?

Or of course if I don't get some responses to this in the next couple of days, I'll just merge it back into ClosedKore and go back to not talking to people.

Re: Automatic Skill Level Detection

Posted: 12 Sep 2013, 11:25
by franibaflo
Wow that's a very interesting project and I for one am very intrigued by this. This would be a great leap for openkore. No more need to manually adjust skill levels, make macros, and have countless duplicate blocks. In my honest opinion it would be better if it were a plugin since the need search for and input each formula calculations to every block would be quite tiring. So, if you have the free time do make this project a reality! I'd be happy to volunteer as a tester if you need one :).

Btw, I've already came accross with monsterDB before but never really got the chance to use it. Can you give me some tips with regards to it or even point me into the right direction? Because as far as my botting with mages can go, the following lines are the best I could contribute/come up with (it's even without attack damage calculations!!!):

Code: Select all

##### Elemental Properties #####
#Neutral - weak vs. (100) Everything // Ghost
	AGAV, G_AGAV, EVENT_ALARM, G_ALARM, ALARM, ALICE, G_ALICE, ALICEL, G_ALICEL, ALIOT, G_ALIOT, ALIZA, G_ALIZA, ANCIENT_MIMIC, META_ANT_EGG, ANT_EGG, ANTLER_SCARABA_EGG, I_ANTLER_SCARABA_EGG, APOCALIPS, ARCHDAM, G_ARCHDAM, ARCHER_GUARDIAN, AUNOE, BARRICADE_, BARRICADE, OBJ_A2, BOMBPORING, BOW_GUARDIAN, BYORGUE, B_S_GUARDIAN, B_B_GUARDIAN, ANTONIO_, CHUNG_E, C_TOWER_MANAGER, G_C_TOWER_MANAGER, COBALT_MINERAL, COOKIE, CREEPER, CRUISER, G_CRUISER, CRYSTAL_6, CRYSTAL_9, CRYSTAL_5, CRYSTAL_7, CRYSTAL_8, DEATHWORD, DIMIK, DRAGON_EGG, OBJ_FLAG_B, CRYSTAL_2, G_ECHIO, ECHIO, ECLIPSE, ECLIPSE_P, ELDER, G_ELDER, ENGKANTO, EVIL_CLOUD_HERMIT, G_EVIL_CLOUD_HERMIT, FANAT, CRYSTAL_3, OBJ_B, OBJ_A, A_MOBSTER, GARDEN_WATCHER, GOLEM, G_GOLEM, EVENT_GOURD, S_EMPEL_1, S_EMPEL_2, HEAVY_METALING, HELL_APOCALIPS, IRON_FIST, ISILLA, KARAKASA, G_KARAKASA, KNIGHT_GUARDIAN, OBJ_FLAG_A, EVENT_LUDE, LUNATIC, R_LUNATIC, A_LUNATIC, MEDUSA, G_MEDUSA, MEGALITH, G_MEGALITH, METALING, G_MIMIC, MIMIC, MIMING, MINERAL, MOBSTER, EVENT_MOBSTER, MYSTCASE, NOVUS, NOVUS_, NYDHOG_MEMORY1_1, NYDHOG_MEMORY2_2, NYDHOG_MEMORY1_2, NYDHOG_MEMORY3_1, NYDHOG_MEMORY2_1, NYDHOG_MEMORY3_2, OBSERVATION, HORN_SCARABA_EGG, I_HORN_SCARABA_EGG, OWL_BARON, OWL_DUKE, PECOPECO_EGG, PERMETER, PHENDARK, PHREEONI, RAKE_SCARABA_EGG, I_RAKE_SCARABA_EGG, RICE_CAKE_BOY, RIDEWORD, RSX_0806, RYBIO, SAGEWORM, SASQUATCH, STALACTIC_GOLEM, SWORD_GUARDIAN, TAO_GUNKA, TEDDY_BEAR, THE_PAPER, THIEF_BUG, HORN_SCARABA2_EGG, I_HORN_SCARABA2_EGG, VANBERK, VENATU_1, VIOLY, WASTE_STOVE, ZHERLTHSH, ZAKUDAM, 
#Water - weak vs. (200) Wind / (100) Earth
	ALLIGATOR, AMBERNITE, ANOLIAN, AQUA_ELEMENTAL, VAVAYAGA, CORNUTUS, CRAB, DEVIACE, DIMIK_2, FREEZER, FUR_SEAL, GARM, GARM_BABY, GAZETI, GEMINI, GOBLIN_5, HARWORD, HYDRA, IARA, ICE_TITAN, ICEICLE, KAPHA, KING_DRAMOH, KTULLANUX, KUKRE, MAGNOLIA, MARC, MARIN, MARINA, MARINE_SPHERE, MARSE, MASTERING, MERMAN, OBEAUNE, PHEN, PHYLLA, PIRANHA, PLANKTON, PLASMA_B, PORING, RED_ERUMA, RHYNCHO, RODA_FROG, SEE_OTTER, SHELLFISH, SIORAVA, SIROMA, SNOWIER, SOHEE, SPORE, E_HYDRA, STROUF, SWORD_FISH, THARA_FROG, TOAD, UZHAS, VADON, VENATU_4, G_HARWORD, 
#Earth - weak vs. (200) Fire / (100) Water
	ALNOLDI, AMON_RA, ANCIENT_TREE, ANDRE, ANTLER_SCARABA, I_ANTLER_SCARABA, ARCLOUSE, ARMAIA, ASTER, KIND_OF_BEETLE, BIGFOOT, BRADIUM_GOLEM, CARAMEL, CATERPILLAR, CLOCK, COCO, CURUPIRA, DENIRO, DIMIK_3, DISGUISE, DRACO, DRACO_EGG, DRILLER, DROSERA, DRYAD, DUNEYRR, FABRE, FERUS_, FLORA, GALAPAGO, GEOGRAPHER, GIEARTH, GOBLIN_4, GOPINICH, GREEN_IGUANA, GULLINBURSTI, HARDROCK_MOMMOTH, HILLSRION, HODE, HORN, INCREASE_SOIL, JAGUAR, KILLER_MANTIS, KNOCKER, LEAF_CAT, LEIB_OLMAI, LES, LI_ME_MANG_RYANG,  LIVE_PEACH_TREE, MANDRAGORA, MANTIS, MARTIN, MAVKA, MAYA, MAYA_PUPLE, MOLE, MUKA, MUSCIPULAR, NAGA, NERAID, OBSIDIAN, HORN_SCARABA, I_HORN_SCARABA, ORC_ARCHER, ORC_BABY, ORK_HERO, ORC_LADY, ORC_LORD, I_ORC_ARCHER, ORK_WARRIOR, PARUS, PETIT, PIERE, PINGUICULA, PITMAN, PLASMA_G, PORCELLIO, PUPA, QUEEN_SCARABA, I_QUEEN_SCARABA, RAFFLESIA, RAKE_SCARABA, I_RAKE_SCARABA, RATA, ROCKER, SAND_MAN, SAVAGE, SAVAGE_BABE, I_ORC_LADY, SLEEPER, SMOKIE, SNAKE, SOLDIER_GUARDIAN, SOLIDER, SPRING_RABBIT, STAPO, STING, TATACHO, TENDRILRION, TENGU, TRI_JOINT, TURTLE_GENERAL, HORN_SCARABA2, I_HORN_SCARABA2, VAGABOND_WOLF, VENATU_3, VITATA, VOCAL, B_HARWORD, WILOW, WOLF, WOOD_GOBLIN, WOODEN_GOLEM, WOOTAN_SHOOTER, WORM_TAIL, YOYO, 
#Fire - weak vs. (200) Water / (100) Wind
	BANASPATY, BLAZZER, BOITATA, BRILIGHT, BUTOIJO, CAT_O_NINE_TAIL, CENDRAWASIH, CHEPET, CHIMERA, CHOCO, DELETER, DELETER_, DESERT_WOLF, DESERT_WOLF_B, DIMIK_4, DROPS, EDDGA, ELDER_WILOW, EXPLOSION, FERUS, FRILLDORA, GAJOMART, GIG, GOAT, GOBLIN_2, GOLDEN_BUG, GRAND_PECO, GREATEST_GENERAL, GRIZZLY, HEADLESS_MULE, HEATER, HIGH_ORC, HORONG, IFRIT, IMP, JAKK, KAHO, KASA, KOBOLD_3, KOBOLD_ARCHER, LAVA_GOLEM, G_SEYREN, B_SEYREN, MAGMARING, MAJORUROS, MARDUK, METALLER, MINOROUS, MOONLIGHT, MUTANT_DRAGON, NINE_TAIL, PASANA, PECOPECO, PICKY, PICKY_, PLASMA_R, I_HIGH_ORC, SALAMANDER, SCORPION, SEYREN, STONE_SHOOTER, WILD_GINSENG, WOOTAN_FIGHTER, B_YGNIZEM, YGNIZEM, ZEROM, 
#Wind - weak vs. (200) Earth / (100) Fire
	ACIDUS_, ANGRA_MANTIS, ANOPHELES, ASSULTER, BACSOJIN_, BEHOLDER, BEHOLDER_MASTER, BLOOD_BUTTERFLY, BREEZE, CARAT, CHONCHON, CHUNG_E_, CIVIL_SERVANT, CONDOR, CREAMY, CREMY_FEAR, DANCING_DRAGON, DIMIK_1, DOLOMEDES, DRAGON_FLY, DRAGON_TAIL, DUSTINESS, GALION, GARGOYLE, GIANT_HONET, GOBLIN_1, GOBLIN_LEADER, GRYPHON, HARPY, HILL_WIND_1, HILL_WIND, HORNET, HUNTER_FLY, JOKER, KAVAC, KNIGHT_OF_WINDSTORM, KOBOLD_1, KOBOLD_LEADER, LADY_TANEE, LITTLE_FATUM, LUCIOLA_VESPA, MISTRESS, PANZER_GOBLIN, PARASITE, PETIT_, POM_SPIDER, PUNK, RAGGLER, ROTAR_ZAIRO, ROWEEN, SEEKER, SHECIL, G_SHECIL, B_SHECIL, STAINER, STEAM_GOBLIN, STEEL_CHONCHON, STEM_WORM, TOUCAN, VENATU_2, WANDER_MAN, WILD_ROSE, WIND_GHOST, 
#Poison - weak vs. (125) Holy
	ANACONDAQ, ANCIENT_WORM, ARGIOPE, ARGOS, G_EREMES, B_EREMES, CENTIPEDE, CENTIPEDE_LARVA, COMODO, CRAMP, PINGUICULA_D, DEMON_PUNGUS, EREMES, GIANT_SPIDER, GOBLIN_3, GOBLIN_ARCHER, KOBOLD_2, MYST, NEPENTHES, PENOMENA, POISON_SPORE, POISON_TOAD, POPORING, SIDE_WINDER, UNGOLIANT, VENOMOUS, WHIKEBAIN,
#Holy - weak vs. (200) Shadow / (175) Undead
	ACIDUS, ANGELING, ARCHANGELING, COOKIE_XMAS, CORNUS, EMPELIUM, EREND, FAKE_ANGEL, B_MAGALETA, G_MAGALETA, MAGALETA, SHELTER, SKEGGIOLD_, SKEGGIOLD, SOLACE, G_RANDGRIS, RANDGRIS, APOCALIPS_H, 
#Shadow - weak vs. (200) Holy
	AM_MUT, ATROCE, BANSHEE, BANSHEE_MASTER, BAPHOMET, BAPHOMET_, BATHORY, BLOODY_KNIGHT, BLOODY_MURDERER, CONSTANT, G_CONSTANT, DARK_FRAME, DARK_SHADOW, DETALE, DEVILING, DEVIRUCHI, DIABOLIC, DOKEBI, DOPPELGANGER, DRACULA, DRAINLIAR, ENTWEIHEN, EXECUTIONER, FALLINGBISHOP, FARMILIAR, G_FRUS, FRUS, GIBBET, BAPHOMET_I, GREMLIN, HELL_POODLE, HODREMLIN, HYDRO, HYLOZOIST, INCANTATION_SAMURAI, MOROCC_1, MOROCC_2, INCUBUS, INJUSTICE, ISIS, KIEL_, KNIGHT_OF_ABYSS, LEAK, LOLI_RURI, LORD_OF_DEATH, LOST_DRAGON, MATYR, MINI_DEMON, MIYABI_NINGYO, MYSTELTAINN, S_NYDHOG, NIGHTMARE_TERROR, PEST, PHARAOH, PLASMA_P, RAYDRIC, RAYDRIC_ARCHER, REQUIEM, RETRIBUTION, SHINOBI, G_SKOGUL, SKOGUL, SUCCUBUS, TAMRUAN, TAROU, THIEF_BUG_EGG, THIEF_BUG_, THIEF_BUG__, G_ENTWEIHEN_M, G_ENTWEIHEN_S, G_ENTWEIHEN_R, TIRFING, WICKED_NYMPH, MOROCC_, ZENORC, ZIPPER_BEAR, 
#Ghost - weak vs. (200) Ghost / (100) Everything  // Neutral and Poison
	BABY_LEOPARD, BEELZEBUB, EGGYRA, DARK_SNAKE_LORD, FLAME_SKULL, GHOSTRING, WHISPER_BOSS, GLOOMUNDERNIGHT, G_KATRINN, B_KATRINN, MOROCC_4, KATRINN, KRABEN, MARIONETTE, NAGHT_SIEGER, NIGHTMARE, NOXIOUS, PLASMA_Y, RAWREL, THANATOS, G_THA_DESPERO, THA_DESPERO, G_THA_DOLOR, THA_DOLOR, G_THA_MAERO, THA_MAERO, THA_ODIUM, G_THA_ODIUM, G_ENTWEIHEN_H, WHISPER, WHISPER_, 
#Undead - weak vs. (200) Fire, Holy / (175) Ghost / (150) Water
	ANCIENT_MUMMY, ANTIQUE_FIRELOCK, ANUBIS, ARCHER_SKELETON, BON_GUN, DARK_ILLUSION, DARK_LORD, I_ORC_SKELETON, DRAKE, DULLAHAN, EVIL_DRUID, GHOUL, G_DARK_PRIEST, HYEGUN, MOROCC_3, KHALITZBURG, LUDE, MEGALODON, MUMMY, MUNAK, NECROMANCER, ORC_SKELETON, ORC_ZOMBIE, OSIRIS, PIRATE_SKEL, QUVE, RAGGED_ZOMBIE, REMOVAL, SKELETON, SKELETON_GENERAL, SKEL_PRISONER, SKEL_WORKER, SOLDIER_SKELETON, VERIT, WRAITH, G_WRAITH, WRAITH_DEAD, ZOMBIE, ZOMBIE_MASTER, ZOMBIE_PRISONER, ZOMBIE_SLAUGHTER, 
	
	
##### Size #####
#Small
	, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
#Medium
	, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , 
#Large // Ghost
	ACIDUS, ACIDUS_, AMBERNITE, AMON_RA, ANCIENT_MIMIC, ANCIENT_TREE, ANCIENT_WORM, ANUBIS, APOCALIPS, AQUA_ELEMENTAL, ARCHDAM, ARCHER_GUARDIAN, ARGIOPE, ARGOS, ATROCE, BACSOJIN_, BAPHOMET, BARRICADE, BIGFOOT, BLOODY_KNIGHT, BLOODY_MURDERER, BOITATA, BOW_GUARDIAN, BRADIUM_GOLEM, BUTOIJO, CHIMERA, C_TOWER_MANAGER, DARK_ILLUSION, DARK_LORD, DETALE, DOLOMEDES, DRACULA, EDDGA, ELDER, EVIL_CLOUD_HERMIT, EVIL_DRUID, EXECUTIONER, FERUS_, FERUS, FLORA, GARM, GIANT_SPIDER, GIBBET, GOLDEN_BUG, GOLEM, GOPINICH, GRAND_PECO, BAPHOMET_I, GREMLIN, GRIZZLY, GRYPHON, GULLINBURSTI, HARDROCK_MOMMOTH, HEADLESS_MULE, HELL_APOCALIPS, HIGH_ORC, HYDRO, ICE_TITAN, IFRIT, INCANTATION_SAMURAI, MOROCC_1, ISIS, JOKER, KASA, KHALITZBURG, KING_DRAMOH, KNIGHT_GUARDIAN, KNIGHT_OF_ABYSS, KNIGHT_OF_WINDSTORM, KTULLANUX, LADY_TANEE, LAVA_GOLEM, LEAK, LEIB_OLMAI, LOLI_RURI, LORD_OF_DEATH, LOST_DRAGON, MAJORUROS, MARDUK, MAYA, MAYA_PUPLE, MEGALITH, MINOROUS, MUKA, MUTANT_DRAGON, MYST, MYSTELTAINN, NAGA, S_NYDHOG, NIGHTMARE_TERROR, ORK_HERO, ORC_LORD, OWL_BARON, OWL_DUKE, PECOPECO, PHARAOH, PHENDARK, PHREEONI, PITMAN, QUEEN_SCARABA, I_QUEEN_SCARABA, RAYDRIC, ROTAR_ZAIRO, RSX_0806, RYBIO, I_HIGH_ORC, SALAMANDER, SASQUATCH, SAVAGE, SNOWIER, STALACTIC_GOLEM, STROUF, SWORD_GUARDIAN, SWORD_FISH, TAMRUAN, TAO_GUNKA, TENGU, TURTLE_GENERAL, UNGOLIANT, G_RANDGRIS, RANDGRIS, APOCALIPS_H, WASTE_STOVE, WOODEN_GOLEM, MOROCC_, G_WRAITH, WRAITH, WRAITH_DEAD, ZAKUDAM, 

##### Race #####
# Undead
	ANCIENT_MUMMY, ANTIQUE_FIRELOCK, ARCHER_SKELETON, BON_GUN, I_ORC_SKELETON, DRAKE, DULLAHAN, EVIL_DRUID, GHOUL, HYEGUN, INJUSTICE, KHALITZBURG, LUDE, MEGALODON, MUMMY, MUNAK, NECROMANCER, ORC_SKELETON, ORC_ZOMBIE, OSIRIS, PIRATE_SKEL, PITMAN, QUVE, RAGGED_ZOMBIE, REMOVAL, SKELETON, SKELETON_GENERAL, SKEL_PRISONER, SKEL_WORKER, SOLDIER_SKELETON, G_THA_DESPERO, THA_DESPERO, THA_DOLOR, G_THA_DOLOR, G_THA_MAERO, THA_MAERO, THA_ODIUM, G_THA_ODIUM, VERIT, WHISPER_, WRAITH, G_WRAITH, WRAITH_DEAD, ZOMBIE, ZOMBIE_MASTER, ZOMBIE_PRISONER, ZOMBIE_SLAUGHTER, 
	ANCIENT_MUMMY, ANTIQUE_FIRELOCK, ANUBIS, ARCHER_SKELETON, BON_GUN, DARK_ILLUSION, DARK_LORD, I_ORC_SKELETON, DRAKE, DULLAHAN, EVIL_DRUID, GHOUL, G_DARK_PRIEST, HYEGUN, MOROCC_3, KHALITZBURG, LUDE, MEGALODON, MUMMY, MUNAK, NECROMANCER, ORC_SKELETON, ORC_ZOMBIE, OSIRIS, PIRATE_SKEL, QUVE, RAGGED_ZOMBIE, REMOVAL, SKELETON, SKELETON_GENERAL, SKEL_PRISONER, SKEL_WORKER, SOLDIER_SKELETON, VERIT, WRAITH, G_WRAITH, WRAITH_DEAD, ZOMBIE, ZOMBIE_MASTER, ZOMBIE_PRISONER, ZOMBIE_SLAUGHTER, 
# Demon
	ALICEL, G_ALICEL, G_ALIOT, ALIOT, AM_MUT, BANSHEE, BANSHEE_MASTER, BAPHOMET, BAPHOMET_, BEELZEBUB, BLAZZER, BUTOIJO, CARAT, CAT_O_NINE_TAIL, G_CONSTANT, CURUPIRA, DARK_FRAME, DARK_ILLUSION, DARK_LORD, DEMON_PUNGUS, DEVILING, DEVIRUCHI, DIABOLIC, DISGUISE, DOKEBI, DOPPELGANGER, DRACULA, ENTWEIHEN, EREMES, FALLINGBISHOP, FLAME_SKULL, G_FRUS, FRUS, GARGOYLE, GAZETI, GHOSTRING, WHISPER_BOSS, GIBBET, GIEARTH, BAPHOMET_I, GREMLIN, HARPY, HEADLESS_MULE, HELL_POODLE, G_DARK_PRIEST, HODREMLIN, HYLOZOIST, IMP, MOROCC_2, MOROCC_3, MOROCC_4, INCUBUS, ISIS, KAHO, KNOCKER, LEAK, LI_ME_MANG_RYANG, LOLI_RURI, LORD_OF_DEATH, MAGNOLIA, MARIONETTE, MEDUSA, MINI_DEMON, MIYABI_NINGYO, MOONLIGHT, NAGHT_SIEGER, NIGHTMARE, NIGHTMARE_TERROR, OWL_BARON, OWL_DUKE, RAYDRIC_ARCHER, RYBIO, SEYREN, G_SKOGUL, SKOGUL, SOHEE, SUCCUBUS, TAMRUAN, TAO_GUNKA, TENGU, THANATOS, G_ENTWEIHEN_M, G_ENTWEIHEN_S, G_ENTWEIHEN_H, G_ENTWEIHEN_R, WANDER_MAN, WHISPER, WICKED_NYMPH, WIND_GHOST, MOROCC_, 
	
	
	
	, , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,
AND YES I KNOW my "code" is incomplete XD.

Re: Automatic Skill Level Detection

Posted: 13 Sep 2013, 00:30
by xlr82xs
Ah, the monsterDB.txt that comes with the original plugin is horribly out of date, and the few posts I've seen on the forums link to either old, or not english databases for conversion.

I can't remember where exactly I got the copy of the database I'm using, I just compared values from a few online databases that seemed accurate and googled for a mob_db.txt that matched them.
I THINK it was https://cronusemulator.svn.sourceforge. ... mob_db.txt

I ran that through iMikeLance's MonsterDB converter, had some issues if I recall correctly, kicked it, ended up using this code in the end (which might be original, might not be, IDK)

Code: Select all

#!/usr/bin/perl -w

############################
# eAthena/Cronus to MonsterDB monster table converter by iMikeLance
############################
use utf8;
use strict;
use warnings;

# Renewal mon_db: https://cronusemulator.svn.sourceforge.net/svnroot/cronusemulator/Server/branches/Renewal/db/mob_db.txt
# Pre-renewal mon_db: https://cronusemulator.svn.sourceforge.net/svnroot/cronusemulator/Server/trunk/db/mob_db.txt

open DB, "<", "mob_db.txt" or die "Are you sure that mob_db.txt exists? Internal error: ".$!;
open EXT, ">", "monsterDB.txt" or die $!;

while (<DB>) {
        $_ =~  s/\/\///g;
        if ($_ =~ /^(\d+),\w+,(\w+ ?)+,(\w+ ?)+,\d+,(\d+),\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,\d+,(\d+),(\d+),(\d+),.*/) { # eA/Cronus syntax
                print EXT $1." ".$4." ".$5." ".$6." ".$7."\n";
        }
}

close(DB);
close(EXT);

print "Finished !\n";
which gives

Code: Select all

1001 153 0 4 23
1002 60 1 3 21
1003 100000 0 4 22
1004 90 0 4 24
1005 427 0 2 27
1006 1 0 0 1
1007 72 0 4 22
1008 66 0 4 22
1009 114 1 2 24
1010 91 1 3 22
1011 57 0 4 24
1012 160 1 5 21
1013 1219 1 2 22
1014 280 1 3 21
1015 234 1 1 29
1016 1646 1 1 29
1017 170 1 4 27
1018 378 0 4 24
1019 446 2 2 23
1020 156 1 3 62
1021 583 1 4 27
1022 28600 2 0 40
1023 1434 1 7 22
1024 200 1 3 22
1025 217 1 2 22
1026 2445 1 1 29
1027 600 1 2 22
1028 804 1 1 29
1029 2092 2 6 27
1030 8510 1 2 25
1031 524 1 3 25
1032 1944 1 1 29
1033 599 1 3 43
1034 1157 1 5 41
1035 2050 0 4 44
1036 2614 1 1 49
1037 2736 1 2 25
1038 475840 1 1 89
1039 668000 2 6 67
1040 2245 2 0 60
1041 2155 1 1 49
1042 1199 0 4 24
1043 1452 0 5 22
1044 2158 1 5 41
1045 2522 1 5 41
1046 380000 1 6 67
1047 75 0 0 60
1048 344 0 4 27
1049 95 0 2 23
1050 89 0 2 23
1051 354 0 4 60
1052 185 1 4 22
1053 531 1 4 27
1054 595 1 4 27
1055 468 2 3 22
1056 591 0 2 22
1057 898 0 2 22
1058 1687 1 4 23
1059 378000 0 4 84
1060 587 2 2 22
1061 2872 2 6 68
1062 69 1 3 26
1063 55 0 2 60
1064 1335 1 1 29
1065 3052 2 5 61
1066 1252 0 5 21
1067 1450 0 5 21
1068 854 0 3 41
1069 2600 2 5 41
1070 1111 0 5 21
1071 1411 1 1 29
1072 7045 1 6 83
1073 1233 0 5 21
1074 1680 0 5 21
1075 77 0 5 22
1076 612 1 1 29
1077 456 1 3 25
1078 10 0 3 22
1079 10 0 3 22
1080 10 0 3 22
1081 10 0 3 22
1082 10 0 3 22
1083 20 0 3 26
1084 15 0 3 22
1085 15 0 3 22
1086 222750 2 4 43
1087 362000 2 7 42
1088 3317 1 4 22
1089 660 1 5 21
1090 1260 1 3 21
1091 1035 0 4 24
1092 8203 1 2 22
1093 625 1 2 60
1094 340 2 4 21
1095 724 0 4 22
1096 19800 1 8 86
1097 530 0 0 60
1098 18826 2 7 49
1099 3105 2 4 25
1100 1005 2 4 25
1102 5242 1 7 27
1103 518 0 2 22
1104 836 0 2 22
1105 671 0 4 22
1106 9447 1 2 23
1107 140 0 2 23
1108 3135 1 5 81
1109 8912 0 6 27
1110 2820 0 6 27
1111 1162 0 2 47
1112 804500 1 1 29
1113 45 1 3 23
1114 2026 0 4 44
1115 247500 2 2 23
1116 1676 1 0 48
1117 5149 2 1 89
1118 2301 2 3 22
1119 1821 1 2 23
1120 26700 1 6 88
1121 1118 0 6 22
1122 1058 1 7 24
1123 931 1 7 23
1124 930 1 7 25
1125 1494 1 7 22
1126 2342 1 7 21
1127 2676 1 2 42
1128 705 1 4 22
1129 2304 0 0 83
1130 2054 1 0 43
1131 6022 2 7 84
1132 23986 2 1 29
1133 10483 1 7 44
1134 9152 1 7 45
1135 9078 1 7 43
1136 2179 1 7 45
1137 2179 1 7 43
1138 1984 0 6 21
1139 2719 1 4 22
1140 2893 2 7 23
1141 1209 0 3 41
1142 1924 0 3 41
1143 7166 0 6 68
1144 1456 0 5 41
1145 1056 0 2 42
1146 2087 1 2 27
1147 380000 2 4 82
1148 10045 1 6 40
1149 1893 2 2 43
1150 324000 1 6 63
1151 1223 2 0 25
1152 2077 1 1 29
1153 1908 1 1 29
1154 3510 1 7 43
1155 5799 1 9 22
1156 3556 1 9 24
1157 500000 2 7 67
1158 1963 1 5 41
1159 300000 2 2 60
1160 696 0 4 22
1161 1232 0 3 61
1162 5819 0 3 22
1163 18408 2 7 47
1164 3089 1 7 27
1165 2887 1 0 62
1166 2301 2 2 42
1167 180 0 2 22
1168 6354 2 7 23
1169 1240 1 1 29
1170 2875 1 6 21
1171 1245 0 4 42
1172 2047 0 4 42
1173 1217 0 4 42
1174 365 0 4 24
1175 420 0 2 27
1176 756 0 4 22
1177 1816 1 7 27
1178 2687 1 7 23
1179 1109 0 6 68
1180 2783 1 2 63
1181 1000 2 9 89
1182 15 0 3 22
1183 67 0 4 24
1184 30 0 4 22
1185 1796 0 1 28
1186 2570 0 6 48
1187 2 1 0 20
1188 2510 1 1 29
1189 4835 1 7 22
1190 552000 2 7 82
1191 1939 1 0 60
1192 5168 2 1 89
1193 5562 1 0 60
1194 10020 1 4 42
1195 3222 0 0 60
1196 9194 1 1 69
1197 8045 1 1 69
1198 12090 1 6 89
1199 3869 0 3 24
1200 61350 1 7 60
1201 8700 2 6 40
1202 11000 2 7 40
1203 70000 2 0 87
1204 59000 1 0 67
1205 40200 2 0 47
1206 15547 1 5 41
1207 10143 1 0 62
1208 19307 1 6 24
1209 3898 0 2 45
1210 6088 1 4 23
1211 2772 0 4 23
1212 4221 1 4 60
1213 4193 2 7 43
1214 1080 0 2 23
1215 4530 1 3 24
1216 4589 1 5 25
1219 23297 2 7 87
1220 1716 1 2 23
1221 2092 2 2 42
1222 6890 2 7 43
1223 1400 1 7 22
1224 665 1 3 25
1225 4278 0 2 23
1226 3893 1 7 44
1227 1176 1 7 24
1228 3347 1 5 41
1229 63 0 4 22
1230 427 0 4 22
1231 595 0 4 24
1232 420 0 0 60
1233 531 2 2 23
1234 879 0 2 22
1235 1400 1 7 22
1236 420 0 0 60
1237 688 0 4 22
1238 733 0 4 22
1239 760 0 4 22
1240 80 0 2 23
1241 83 0 2 23
1242 987 1 3 41
1243 3163 2 2 60
1244 3581 1 0 43
1245 1176 1 7 24
1246 733 0 7 46
1247 10 1 3 66
1248 919 1 0 60
1249 879 1 0 60
1250 4950 1 7 23
1251 630500 2 0 84
1252 1275500 2 2 81
1253 8772 1 6 64
1254 1148 0 2 24
1255 9550 0 2 22
1256 5747 0 2 47
1257 7952 1 1 47
1258 1575 0 7 25
1259 60720 2 2 84
1260 3520 1 6 67
1261 2682 0 2 24
1262 50706 2 9 43
1263 4008 1 6 64
1264 2940 1 7 61
1265 666 0 7 60
1266 1509 0 5 22
1267 9222 1 6 44
1268 68500 2 0 87
1269 5556 1 0 42
1270 6400 2 0 80
1271 2430 1 2 21
1272 1190900 2 6 89
1273 1520 1 7 42
1274 2451 2 0 80
1275 9230 1 7 60
1276 4437 1 6 47
1277 1575 1 0 43
1278 2590 2 0 80
1279 2530 0 4 22
1280 2241 1 7 44
1281 2872 0 2 60
1282 11053 0 7 23
1283 26406 2 2 63
1284 5000 2 3 21
1285 28634 2 7 80
1286 30214 2 7 80
1287 15670 0 4 22
1288 700 0 8 26
1289 77670 2 4 82
1290 6720 1 1 29
1291 10035 2 1 89
1292 19402 0 6 27
1293 3420 0 4 24
1294 7650 1 4 22
1295 21000 2 6 60
1296 13520 1 7 44
1297 27157 1 1 49
1298 8780 1 1 29
1299 21692 1 7 24
1300 5555 0 4 22
1301 3530 0 6 27
1302 29255 2 6 89
1303 3960 0 4 24
1304 4680 2 4 25
1305 4140 2 4 25
1306 6050 2 2 22
1308 1471 1 7 44
1309 3825 0 0 83
1310 11801 2 2 43
1311 7080 2 2 42
1312 1442000 2 2 42
1313 2253 1 7 20
1314 6575 1 2 40
1315 8977 1 7 44
1316 8768 1 2 42
1317 1371 1 2 21
1318 8180 1 2 43
1319 9990 1 2 41
1320 7381 2 6 60
1321 4680 1 4 44
1322 6684 1 2 42
1323 1820 1 2 61
1324 0 0 0 20
1325 0 0 0 20
1326 0 0 0 20
1327 0 0 0 20
1328 0 0 0 20
1329 0 0 0 20
1330 0 0 0 20
1331 0 0 0 20
1332 0 0 0 20
1333 0 0 0 20
1334 0 0 0 20
1335 0 0 0 20
1336 0 0 0 20
1337 0 0 0 20
1338 0 0 0 20
1339 0 0 0 20
1340 0 0 0 20
1341 0 0 0 20
1342 0 0 0 20
1343 0 0 0 20
1344 0 0 0 20
1345 0 0 0 20
1346 0 0 0 20
1347 0 0 0 20
1348 0 0 0 20
1349 0 0 0 20
1350 0 0 0 20
1351 0 0 0 20
1352 0 0 0 20
1353 0 0 0 20
1354 0 0 0 20
1355 0 0 0 20
1356 0 0 0 20
1357 0 0 0 20
1358 0 0 0 20
1359 0 0 0 20
1360 0 0 0 20
1361 0 0 0 20
1362 0 0 0 20
1363 0 0 0 20
1364 8977 1 7 44
1365 22090 2 0 60
1366 8452 2 0 83
1367 8121 1 6 43
1368 3866 1 3 62
1369 3150 2 2 43
1370 24960 1 6 67
1371 10988 0 8 66
1372 3980 1 2 63
1373 603883 2 6 67
1374 28000 1 6 67
1375 8500 1 0 60
1376 4423 1 6 64
1377 7341 2 7 80
1378 6466 0 6 65
1379 13289 2 6 67
1380 2719 1 2 22
1381 2241 2 2 63
1382 10572 0 6 47
1383 7813 0 2 63
1384 10000 1 9 43
1385 10000 1 9 43
1386 5160 1 0 42
1387 8721 0 2 43
1388 25100 1 8 66
1389 350000 2 6 87
1390 20557 1 7 40
1391 1221 0 2 22
1392 1088 2 0 44
1393 5176 1 1 49
1394 534 1 1 29
1395 15 0 0 20
1396 15 0 0 20
1397 15 0 0 20
1398 15 0 0 20
1399 1264000 2 6 67
1400 3092 1 0 60
1401 8000 1 7 67
1402 4876 1 2 45
1403 7524 1 1 49
1404 5188 1 6 27
1405 10196 2 6 42
1406 5470 1 5 21
1407 1 0 0 1
1408 7030 1 4 44
1409 2098 0 7 20
1410 8777 1 3 42
1412 8266 2 0 40
1413 6052 0 3 43
1415 2590 0 2 28
1416 8491 1 6 67
1417 6620 1 2 27
1418 1101000 2 2 68
1419 427 0 2 27
1420 3040 1 1 29
1421 4828 2 6 27
1422 5242 0 4 44
1423 5118 1 1 49
1424 4929 1 2 25
1425 3952 1 5 41
1426 6900 1 5 41
1427 2872 2 6 68
1428 665 1 3 25
1429 4382 2 4 25
1430 1117 2 4 25
1432 1716 1 2 23
1433 8912 0 6 27
1434 1162 0 2 47
1435 16506 2 1 89
1436 3581 1 0 43
1437 12450 2 7 84
1438 23986 2 1 29
1439 4193 2 7 43
1440 6136 1 3 24
1441 7256 1 5 25
1442 3163 2 2 60
1443 919 1 0 60
1444 4950 1 7 23
1445 1020 0 2 24
1446 7600 1 1 47
1447 27800 2 2 84
1448 7500 1 6 67
1449 62600 2 9 43
1450 4820 1 6 64
1451 12300 1 7 41
1452 2000 1 7 42
1453 5250 1 6 47
1454 2300 0 4 22
1455 2560 0 7 23
1456 32600 2 2 63
1457 2472 1 4 22
1458 2893 2 7 23
1459 3222 0 6 68
1460 2585 1 2 27
1461 7431 2 2 43
1462 2278 1 1 29
1463 1568 1 1 29
1464 3510 1 7 43
1465 6881 1 9 22
1466 5747 1 9 24
1467 8613 2 7 47
1468 3089 1 7 27
1469 2872 1 1 29
1470 1109 1 7 23
1471 2783 1 2 63
1472 3520 1 1 29
1473 4835 1 7 22
1474 1939 1 0 60
1475 10999 2 1 89
1476 10647 1 0 60
1477 10020 1 4 42
1478 11638 0 0 60
1479 8691 1 1 69
1480 11280 1 1 69
1481 3620 0 3 24
1482 18300 1 7 60
1483 9572 2 6 40
1484 22729 2 7 40
1485 33350 2 0 87
1486 29900 1 0 67
1487 28980 2 0 47
1488 18960 1 5 41
1489 9500 1 0 62
1490 19307 1 6 24
1491 2820 0 6 27
1492 901000 2 7 67
1493 3640 1 3 82
1494 2061 0 4 22
1495 2101 1 3 63
1497 3914 2 3 82
1498 3096 1 7 42
1499 2327 1 7 43
1500 3222 1 3 44
1503 12999 2 6 27
1504 18546 1 1 49
1505 15280 2 6 87
1506 13895 1 6 82
1507 14099 2 7 67
1508 11090 0 1 29
1509 11574 0 1 29
1510 12000 0 6 47
1511 319000 2 7 62
1512 6996 1 1 49
1513 5292 1 2 44
1514 3943 1 9 44
1515 10016 1 2 41
1516 5335 1 0 62
1517 5187 1 6 62
1518 56380 2 7 41
1519 23900 1 7 40
1520 400 1 3 21
1521 10000 1 7 60
1522 27157 1 1 49
1523 3852 1 1 49
1524 2590 0 2 28
1525 5415 1 7 27
1526 8082 1 4 44
1527 18600 2 0 80
1528 11050 1 0 42
1529 254993 2 2 68
1530 320096 2 6 87
1531 8266 2 0 40
1532 8054 0 2 63
1533 9114 1 2 21
1534 1176 1 7 24
1535 1034 1 7 23
1536 1034 1 7 25
1537 1359 1 7 22
1538 1952 1 7 21
1539 20152 1 7 24
1540 3900 2 0 60
1541 3632 1 0 43
1542 218652 2 7 67
1543 7892 1 5 21
1544 3092 1 0 60
1545 3893 1 7 44
1546 2179 1 7 45
1547 2179 1 7 43
1548 18313 1 7 44
1549 24324 2 0 83
1550 8905 1 3 42
1551 5034 0 5 41
1552 6300 1 6 27
1553 3745 2 0 25
1554 22605 2 6 67
1555 5188 1 3 44
1556 6629 1 2 45
1557 1209 2 0 44
1558 2887 1 0 62
1559 1109 0 4 23
1560 8000 1 7 67
1561 641 0 2 22
1562 2334 1 1 29
1563 16940 2 6 42
1564 8491 1 6 67
1565 6900 0 3 43
1566 10035 2 1 89
1567 22598 2 4 25
1568 55000 1 8 86
1569 57870 2 0 87
1570 3898 0 2 45
1571 19192 1 5 81
1572 55 1 3 23
1573 21592 2 7 80
1574 693 1 3 43
1575 2092 2 3 22
1576 73300 1 6 88
1577 1750 0 7 25
1578 1939 0 0 83
1579 660 0 3 41
1580 17281 1 6 67
1581 3016 1 4 22
1582 16890 1 6 87
1583 1252000 2 6 60
1584 3195 2 6 67
1585 6000 1 3 21
1586 2635 0 2 22
1587 2901 1 0 48
1588 1400 1 7 22
1589 405 1 3 62
1590 8071 1 3 62
1591 2334 0 2 60
1592 8000 1 7 20
1593 8613 1 1 69
1594 9990 1 2 41
1595 987 1 3 41
1596 10234 2 6 67
1597 3950 1 6 64
1598 8252 1 6 43
1599 2570 0 6 48
1600 8180 1 2 43
1601 6575 1 2 40
1602 8768 1 2 42
1603 587 2 2 22
1604 3960 0 4 24
1605 29255 2 6 89
1606 10016 1 2 41
1607 1176 1 7 24
1608 595 1 4 27
1609 9136 1 9 44
1610 2872 1 1 89
1611 3520 1 1 89
1612 9981 1 1 89
1613 4300 0 0 20
1614 8300 0 0 40
1615 10088 0 0 42
1616 7208 2 1 42
1617 7400 2 0 20
1618 17070 2 4 45
1619 5544 0 4 62
1620 5430 1 0 68
1621 4770 1 0 25
1622 7238 0 0 60
1624 7400 2 0 20
1625 5544 0 4 62
1626 286900 1 6 69
1627 7238 0 4 64
1628 6228 0 2 42
1629 2870 1 2 64
1630 720500 2 7 64
1631 3901 1 7 44
1632 20313 2 6 47
1633 19280 0 0 44
1634 194962 1 6 63
1635 190525 1 6 85
1637 220800 1 7 66
1638 190255 1 7 64
1639 219780 1 7 68
1640 2680000 1 7 83
1641 1230000 1 7 85
1642 3750000 1 7 82
1643 2800000 1 7 86
1644 4140000 1 7 84
1645 4500000 1 7 68
1646 4680000 1 7 83
1647 4230000 1 7 85
1648 6750000 1 7 82
1649 4800000 1 7 86
1650 4140000 1 7 84
1651 4500000 1 7 68
1652 44327 1 7 43
1653 43191 1 7 65
1654 46878 1 7 62
1655 42764 1 7 46
1656 43079 1 7 44
1657 40282 1 7 48
1658 2910088 1 7 43
1659 43191 1 7 65
1660 46878 1 7 62
1661 42764 1 7 46
1662 43079 1 7 44
1663 40282 1 7 48
1664 8000 1 0 40
1665 7500 1 0 40
1666 7100 1 0 40
1667 7800 1 0 40
1668 20700 2 7 60
1669 10000 1 0 40
1670 17552 1 0 44
1671 23840 1 0 41
1672 21920 1 0 42
1673 16940 1 0 43
1674 80000 2 0 63
1675 12717 1 0 43
1676 15900 1 0 40
1677 14717 1 0 44
1678 21040 1 0 42
1679 21810 1 0 41
1680 9100 1 2 64
1682 32235 1 1 49
1683 7000 1 0 43
1684 20700 2 8 60
1685 3802000 2 2 46
1686 1122 0 7 22
1687 2090 1 2 42
1688 360000 2 3 64
1689 253221 2 7 64
1690 6684 1 2 42
1691 2901 1 0 48
1692 6755 1 0 64
1693 20600 0 0 88
1694 16789 0 0 83
1695 24975 0 0 82
1696 18955 0 0 87
1697 24651 0 0 81
1698 16390 1 0 60
1699 14700 2 0 60
1700 34538 1 8 80
1701 27000 1 8 66
1702 22152 1 8 67
1703 24729 1 8 66
1704 40200 2 1 88
1705 41111 2 1 88
1706 42599 1 1 88
1707 45000 0 1 88
1708 1445660 2 6 88
1709 40200 2 1 88
1710 41111 2 1 88
1711 42599 1 1 88
1712 45000 0 1 88
1713 48430 2 9 46
1714 25668 2 9 43
1715 6670 0 9 20
1716 40718 2 9 44
1717 39054 2 9 42
1718 5028 0 9 20
1719 6005000 2 9 67
1720 41500 2 9 47
1721 20990 1 9 40
1722 10310 1 0 43
1723 30000 1 7 64
1724 8000 1 0 40
1725 50 1 3 21
1726 60 0 2 60
1727 182 0 2 22
1728 164 0 2 23
1730 7360 0 6 27
1731 12000000 2 8 48
1732 0 0 0 20
1733 523000 1 0 47
1735 18000 1 6 60
1736 15669 1 6 60
1737 14450 1 7 60
1738 12050 0 0 67
1739 18000 1 6 60
1740 15669 1 6 60
1741 2090 0 7 46
1742 9222 1 6 44
1743 879 1 0 60
1744 2682 0 2 24
1745 1000 0 6 67
1746 15000 1 7 60
1747 471 1 2 22
1748 1109 1 2 25
1749 10045 1 6 40
1750 100 0 3 22
1751 2205000 2 8 86
1752 34240 1 6 67
1753 39520 1 6 67
1754 53290 0 8 46
1755 52280 0 8 46
1756 41500 2 9 47
1757 48430 2 9 46
1758 25668 2 9 43
1759 40718 2 9 44
1760 39054 2 9 42
1761 34240 1 6 67
1762 39520 1 6 67
1763 100200 0 8 46
1764 103000 0 8 46
1765 1005000 2 8 86
1766 128430 0 8 66
1767 128430 0 8 66
1768 3005000 2 0 68
1769 40000 1 7 80
1770 31620 1 7 80
1771 24605 1 7 80
1772 26324 1 7 80
1773 23182 1 6 67
1774 24500 0 0 64
1775 13934 2 0 41
1776 11910 0 0 61
1777 20820 2 0 61
1778 14000 1 6 21
1779 2626000 2 2 81
1780 12550 1 3 22
1781 10878 1 3 22
1782 7385 1 2 24
1783 8821 1 2 44
1784 8805 0 0 42
1785 1502000 2 2 67
1786 40000 1 7 80
1787 31620 1 7 80
1788 20820 2 0 61
1789 1012 0 0 41
1790 1333 0 3 22
1791 8821 1 2 44
1792 1000 0 0 20
1793 2451 2 0 80
1794 7385 1 2 24
1795 800000 2 8 28
1796 13050 1 7 80
1797 21000 1 7 80
1798 0 0 0 20
1799 347590 1 7 83
1800 211230 1 7 85
1801 310000 1 7 81
1802 182910 1 7 86
1803 209000 1 7 84
1804 189920 1 7 68
1805 1647590 1 7 83
1806 1411230 1 7 85
1807 1460000 1 7 82
1808 1092910 1 7 86
1809 1349000 1 7 84
1810 1069920 1 7 68
1811 641 0 2 22
1812 15 0 0 20
1813 1880000 2 8 28
1814 30000 1 2 63
1815 20 1 0 20
1816 1000 1 0 20
1817 8880000 2 8 48
1818 10647 1 0 60
1819 5415 1 7 27
1820 1619 2 2 22
1821 1716 1 2 23
1822 6666 0 6 27
1823 8636 1 2 41
1824 20199 1 2 41
1825 1176 1 7 24
1826 3745 2 0 25
1827 3163 2 2 60
1828 20 2 2 42
1829 70000 2 7 80
1830 63000 2 7 80
1831 80390 2 0 63
1832 6935000 2 0 83
1833 70128 2 0 63
1834 80390 2 0 63
1835 70128 2 0 63
1836 13079 0 0 43
1837 36830 0 6 63
1838 43900 0 6 22
1839 92544 1 7 20
1840 500 2 2 42
1845 0 0 0 20
1846 999 0 0 26
1847 10000000 1 8 28
1848 45000 2 6 67
1849 125000 1 1 89
1850 175000 2 7 82
1851 2253 1 7 20
1852 120 0 8 66
1853 120 0 8 66
1854 610 2 3 22
1855 665 1 3 25
1856 3195 0 6 21
1857 742 1 3 41
1858 354 0 3 61
1859 405 1 3 62
1860 817 0 2 22
1861 4278 0 2 23
1862 1109 0 2 42
1863 4500 1 2 42
1864 40440 1 1 69
1865 38574 1 1 69
1866 17168 0 6 27
1867 48666 1 6 47
1868 48666 1 6 47
1869 21276 0 6 68
1870 91304 1 1 89
1871 5655000 1 6 47
1872 502000 0 4 84
1873 6805000 0 6 88
1874 4805000 2 6 88
1875 43000 1 1 89
1876 99000000 2 6 67
1877 15 0 0 20
1878 20 0 3 26
1879 1800 1 2 60
1880 5499 1 3 62
1881 6216 1 3 82
1883 7140 1 7 61
1884 5421 1 3 62
1885 1120500 2 2 62
1886 5421 1 3 62
1887 8636 1 2 41
1888 15199 1 2 41
1890 299321 2 2 62
1891 1005000 2 8 86
1892 23470 2 6 87
1893 36140 2 7 87
1894 100000 0 3 68
1895 88402 1 6 63
1896 47280 1 7 68
1897 668000 2 6 67
1898 434 1 1 29
1899 457599 2 7 80
1900 241212 2 7 80
1901 8000 0 8 26
1902 49 0 0 26
1903 49 0 0 26
1904 1000000 0 0 20
1905 120000 2 0 20
1906 150 2 0 20
1907 120000 0 0 20
1908 120000 0 0 20
1909 250 2 0 20
1910 250 2 0 20
1911 150 2 0 20
1912 150 2 0 20
1913 150 2 0 20
1914 250 2 0 20
1915 250 2 0 20
1916 7000000 2 6 87
1917 5000000 2 6 87
1918 63900 2 8 27
1919 64922 1 6 67
1920 94800 1 6 69
1921 77389 1 6 68
1922 63900 2 8 27
1923 64922 1 6 67
1924 94800 1 6 69
1925 77389 1 6 68
1926 300 1 0 43
1927 100 0 6 68
1928 500 0 6 27
1929 4520500 2 6 67
1930 3000500 0 7 20
1931 3567700 2 8 28
1932 100 0 0 42
1933 300000 1 8 80
1934 10000 1 3 22
1935 10000 1 3 22
1936 10000 1 3 22
1937 12050 0 0 67
1938 0 0 0 20
1939 0 0 0 20
1940 0 0 0 20
1941 0 0 0 20
1942 0 0 0 20
1943 0 0 0 20
1944 0 0 0 20
1945 0 0 0 20
1946 0 0 0 20
1947 500500 0 7 20
1948 11200 1 7 43
1949 457599 2 7 80
1950 241212 2 7 80
1951 15 0 0 20
1952 15 0 0 20
1953 15 0 0 20
1954 15 0 0 20
1955 0 0 0 20
1956 5000000 2 6 88
1957 2400500 1 6 87
1958 2400500 0 6 87
1959 350000 0 6 87
1960 2400500 0 6 87
1961 2400500 0 6 87
1962 15 1 7 20
1963 23900 1 7 40
1964 2000 2 2 68
1965 4000 0 2 24
1966 7800 1 6 67
1967 7800 1 7 43
1968 11990 2 5 61
1969 6900 1 5 41
1970 3952 1 5 41
1971 1017 0 5 21
1972 2087 0 3 41
1973 50 1 3 21
1974 20320 1 6 47
1975 10135 1 0 44
1976 15800 1 0 40
1977 11500 0 0 20
1978 22100 2 0 60
1979 17200 2 7 60
1980 633600 1 7 22
1981 111111 2 7 43
1982 62000 1 7 22
1983 80087 1 1 29
1984 50058 1 7 42
1985 5176 1 7 47
1986 33336 1 2 22
1987 24992 1 4 45
1988 15099 1 3 45
1989 21422 0 2 22
1990 1900944 2 2 62
1991 1397451 2 2 42
1992 20722 1 2 66
1993 21099 2 2 42
1994 12466 1 4 24
1995 13058 0 3 62
1996 253221 2 7 64
1997 33336 1 2 22
1998 21422 0 2 22
1999 20667 0 4 45
2000 7000 1 7 20
2001 7000 1 7 20
2002 8000 1 2 42
2003 56380 2 7 41
2004 16029 1 6 67
2005 8200 0 0 81
2006 5900 0 0 87
2007 5700 0 0 83
2008 4000000 2 6 48
2009 2000000 1 6 48
2010 500000 2 6 28
2011 99999 1 1 49
2012 99999 1 1 29
2013 20099 1 9 22
2014 100000 1 9 82
2015 17002 0 3 45
2016 33209 2 0 81
2017 58299 1 7 62
2018 63342 2 7 62
2019 388933 2 3 62
2020 337220 1 0 61
2021 345560 1 0 61
2023 434300 0 0 87
2024 45739 2 0 42
2025 15 1 0 20
2026 552500 1 7 80
2027 434300 0 0 87
2028 741 2 2 43
2029 15 2 2 43
2030 240000 2 6 89
2031 120000 1 7 47
2032 8578 0 6 27
2033 299 0 3 22
2034 164 0 2 23
2035 200000 1 0 20
2036 11280 1 1 69
2037 5000 1 8 66
2038 10000 1 8 66
2039 28980 2 0 47
2040 29900 1 0 67
2041 33350 2 0 87
2042 50000 1 0 20
2043 50000 1 0 20
2044 50000 1 0 20
2045 50000 1 0 20
2046 50000 1 0 20
2047 46708 1 2 42
2048 8780 0 3 45
2049 45200 2 0 42
2050 33220 2 0 81
2051 50 1 3 21
2052 50 1 3 21
2053 50 1 3 21
2054 50 1 3 21
2055 50 1 3 21
2056 50 1 3 21
2057 3898 0 2 45
2058 50 1 3 21
2059 50 1 3 21
2060 50 1 3 21
2061 50 1 3 21
2062 50 1 3 21
2063 50 1 3 21
2064 50 1 3 21
2065 50 1 3 21
2066 50 1 3 21
2067 50 1 3 21
2068 1283990 2 2 63
2069 5890 1 5 61
2070 4522 2 5 61
2071 6620 2 6 63
2072 3914 1 2 42
2073 3640 1 2 44
2074 3096 1 7 22
2075 50 1 3 21
2076 50 1 3 21
2077 50 1 3 21
2078 50 1 3 21
2079 50 1 3 21
2080 50 1 3 21
2081 50 1 3 21
2082 4522 2 5 61
2085 62600 1 4 42
2086 67700 1 4 42
2087 2441600 2 4 62
2090 69000 0 4 20
2091 72000 0 4 20
2092 54591 2 4 64
2093 50 1 3 21
2094 50 1 3 21
2095 50 1 3 21
2096 50 1 3 21
2097 50 1 3 21
2098 50 1 3 21
2099 50 1 3 21
2100 50 1 3 21
2101 50 1 3 21
2102 50 1 3 21
2103 50 1 3 21
2104 50 1 3 21
2105 50 1 3 21
2106 50 1 3 21
2107 50 1 3 21
2108 50 1 3 21
2109 50 1 3 21
2110 50 1 3 21
2111 50 1 3 21
2112 50 1 3 21
2113 50 1 3 21
2114 50 1 3 21
2115 50 1 3 21
2116 50 1 3 21
2117 50 1 3 21
2118 50 1 3 21
2119 50 1 3 21
2120 50 1 3 21
2121 50 1 3 21
2122 50 1 3 21
2123 50 1 3 21
2124 50 1 3 21
2125 50 1 3 21
2126 50 1 3 21
2127 50 1 3 21
2128 50 1 3 21
2129 50 1 3 21
2130 50 1 3 21
2131 608920 2 9 67
2132 122110 1 4 84
2133 91720 1 4 64
2134 86990 0 2 62
2135 1000 0 0 20
2136 85100 0 7 64
2137 81200 0 0 20
2138 10 0 0 20
2139 10 0 0 20
2140 10 0 0 20
2141 10 0 0 20
2142 10 0 0 20
2143 10 0 0 20
2144 62600 1 4 42
2145 67700 1 4 42
2147 50 1 3 21
2148 50 1 3 21
2149 50 1 3 21
2150 10 1 3 21
2151 5149 1 3 22
2152 4002 1 2 65
2153 5556 1 8 23
2154 4680 0 0 63
2155 7524 2 6 43
2156 1265288 2 6 47
2157 4680 0 0 63
2158 50 1 3 21
2159 50 1 3 21
2160 50 1 3 21
2163 250400 1 4 42
2164 270800 1 4 42
2165 6441600 2 4 62
2168 138000 0 4 20
2169 144000 0 4 20
2170 250400 1 4 42
2171 270800 1 4 42
2174 120000 0 5 21
2175 120000 0 5 41
2176 120000 0 5 21
2177 160000 0 5 21
2178 160000 0 5 21
2179 160000 0 5 21
2180 50 1 3 21
2181 50 1 3 21
2182 50 1 3 21
2183 50 1 3 21
2184 50 1 3 21
2185 50 1 3 21
2186 2200000 2 5 41
2187 2200000 2 5 41
2188 2200000 2 5 41
2189 2200000 2 5 41
2190 2200000 2 5 41
2191 50 1 3 21
2192 50 1 3 21
2193 50 1 3 21
2194 500000 2 5 41
2195 50 1 3 21
2196 50 1 3 21
2197 9900 1 5 41
2198 28800 2 5 41
2199 6500 0 0 21
2200 50 1 3 21
2201 24002 1 5 41
2202 5602800 2 5 81
2203 25211 0 5 41
2204 22050 1 5 41
2205 50 1 3 21
2206 39190 2 5 81
2207 50 1 3 21
2208 50 1 3 21
2209 50 1 3 21
2210 50 1 3 21
2211 50 1 3 21
2212 50 1 3 21
2213 50 1 3 21
2214 50 1 3 21
2215 50 1 3 21
2216 50 1 3 21
2217 50 1 3 21
2218 5 1 3 21
2219 20 1 3 21
2220 50 1 3 21
2221 416300 1 7 66
2222 253175 1 7 63
2223 202516 1 7 68
2224 233650 1 7 61
2225 213541 1 6 65
2226 204962 1 7 64
2227 204962 1 7 64
2228 50 1 7 66
2229 50 1 7 63
2230 50 1 7 68
2231 50 1 7 61
2232 50 1 6 65
2233 50 1 7 64
2234 50 1 7 64
2235 50 1 7 86
2236 50 1 7 83
2237 50 1 7 68
2238 50 1 7 81
2239 50 1 7 85
2240 50 1 7 84
2241 50 1 7 84
2242 551578 1 6 20
2243 274531 0 6 20
2244 3481505 1 7 68
Which I am using right now, and seems to be accurate atleast on iRO in terms of the mobs I'm farming.
Call that "monsterDB.txt" and dump it in tables

put the monsterDB.pl plugin in your plugins folder

I'm currently using the following modification, however, it will be getting re-written so I don't have to have a HUGE amount of config boxes in my config.txt I'm just trying to figure out how I want to specify the skill damages without them being specified in config.txt

Code: Select all

############################
# MonsterDB plugin for OpenKore by Damokles
#
# This software is open source, licensed under the GNU General Public
# License, version 2.
#
# This plugin extends all functions which use 'checkMonsterCondition'.
# Basically these are AttackSkillSlot, equipAuto, AttackComboSlot, monsterSkill.
#
# Following new checks are possible:
#
# target_Element (list)
# target_notElement (list)
# target_Race (list)
# target_notRace (list)
# target_Size (list)
# target_notSize (list)
# target_hpLeft (range)
#
# In equipAuto you have to leave the target_ part,
# this is due some coding inconsistency in the funtions.pl
#
# You can use monsterEquip if you think that equipAuto is to slow.
# It supports the new equip syntax. It is event-driven and is called
# when a monster: is attacked, changes status, changes element
#
# Note: It will check all monsterEquip blocks but it respects priority.
# If you check in the first block for element fire and in the second
# for race Demi-Human and in both you use different arrows but in the
# Demi-Human block you use a bow, it will take the arrows form the first
# matching block and equip the bow since the fire block didn't specified it.
#
#
# Note: monsterEquip will modify your attackEquip_{slot} so don't be surprised
# about having other attackEquips as you set before.
#
# Be careful with right and leftHand those slots will not be checked for
# two-handed weapons that may conflict.
#
# Example:
# monsterEquip {
# 	target_Element Earth
# 	equip_arrow Fire Arrow
# }
#
# For the element names just scroll a bit down and you'll find it.
# You can check for element Lvls too, eg. target_Element Dark4
#
# $Revision: 5549 $
# $Id: monsterDB.pl 5549 2007-03-21 00:55:47Z h4rry_84 $
############################

package monsterDB;

use strict;
use Plugins;
use Globals;
use Settings;
use Log qw(message warning error debug);
use Misc qw(bulkConfigModify);
use Translation qw(T TF);
use Utils;


Plugins::register('monsterDB', 'extends Monster infos', \&onUnload);
my $hooks = Plugins::addHooks(
	['checkMonsterCondition', \&extendedCheck, undef],
	['packet_skilluse', \&onPacketSkillUse, undef],
	['packet/skill_use_no_damage', \&onPacketSkillUseNoDamage, undef],
	['packet_attack', \&onPacketAttack, undef],
	['attack_start', \&onAttackStart, undef],
	['changed_status', \&onStatusChange, undef],
);


my @monsterDB;
my @element_lut = qw(Neutral Water Earth Fire Wind Poison Holy Dark Sense Undead);
my @race_lut = qw(Formless Undead Brute Plant Insect Fish Demon Demi-Human Angel Dragon);
my @size_lut = qw(Small Medium Large);
my %skillChangeElement = qw(
	NPC_CHANGEWATER Water
	NPC_CHANGEGROUND Earth
	NPC_CHANGEFIRE Fire
	NPC_CHANGEWIND Wind
	NPC_CHANGEPOISON Poison
	NPC_CHANGEHOLY Holy
	NPC_CHANGEDARKNESS Dark
	NPC_CHANGETELEKINESIS Sense
);

debug ("MonsterDB: Finished init.\n",'monsterDB',2);
loadMonDB(); # Load MonsterDB into Memory

sub onUnload {
	Plugins::delHooks($hooks);
	@monsterDB = undef;
}

sub loadMonDB {
	@monsterDB = undef;
	my @temp;
	debug ("MonsterDB: Loading DataBase\n",'monsterDB',2);
	my $file = Settings::getTableFilename('monsterDB.txt');
	error ("MonsterDB: cannot load $file\n",'monsterDB',0) unless (-r $file);
	{ open my $fp, '<', $file; @temp = <$fp> }
	my $i = 0;
	foreach my $line (@temp) {
		next unless ($line =~ /(\d{4})\s+(\d+)\s+(\d)\s+(\d)\s+(\d+)/);
		$monsterDB[(int($1) - 1000)] = [$2,$3,$4,$5];
		$i++;
	}
	message TF("%d monsters in database\n", $i), 'monsterDB';
}

sub extendedCheck {
	my (undef, $args) = @_;

	return 0 if !$args->{monster} || $args->{monster}->{nameID} eq '';

	my $monsterInfo = $monsterDB[(int($args->{monster}->{nameID}) - 1000)];

	if (!defined $monsterInfo) {
		debug("monsterDB: Monster {$args->{monster}->{name}} not found\n", 'monsterDB', 2);
		return 0;
	} #return if monster is not in DB


	my $element = $element_lut[($monsterInfo->[3] % 10)];
	my $element_lvl = int($monsterInfo->[3] / 20);
	my $race = $race_lut[$monsterInfo->[2]];
	my $size = $size_lut[$monsterInfo->[1]];

	if ($args->{monster}->{element} && $args->{monster}->{element} ne '') {
		$element = $args->{monster}->{element};
		debug("monsterDB: Monster $args->{monster}->{name} has changed element to $args->{monster}->{element}\n", 'monsterDB', 3);
	}

	if ($args->{monster}->statusActive('BODYSTATE_STONECURSE, BODYSTATE_STONECURSE_ING')) {
		$element = 'Earth';
		debug("monsterDB: Monster $args->{monster}->{name} is petrified changing element to Earth\n", 'monsterDB', 3);
	}

	if ($args->{monster}->statusActive('BODYSTATE_FREEZING')) {
		$element = 'Water';
		debug("monsterDB: Monster $args->{monster}->{name} is frozen changing element to Water\n", 'monsterDB', 3);
	}

	if ($config{$args->{prefix} . '_Element'}
	&& (!existsInList($config{$args->{prefix} . '_Element'},$element)
		&& !existsInList($config{$args->{prefix} . '_Element'},$element.$element_lvl))) {
	return $args->{return} = 0;
	}

	if ($config{$args->{prefix} . '_notElement'}
	&& (existsInList($config{$args->{prefix} . '_notElement'},$element)
		|| existsInList($config{$args->{prefix} . '_notElement'},$element.$element_lvl))) {
	return $args->{return} = 0;
	}

	if ($config{$args->{prefix} . '_Race'}
	&& !existsInList($config{$args->{prefix} . '_Race'},$race)) {
	return $args->{return} = 0;
	}

	if ($config{$args->{prefix} . '_notRace'}
	&& existsInList($config{$args->{prefix} . '_notRace'},$race)) {
	return $args->{return} = 0;
	}

	if ($config{$args->{prefix} . '_Size'}
	&& !existsInList($config{$args->{prefix} . '_Size'},$size)) {
	return $args->{return} = 0;
	}

	if ($config{$args->{prefix} . '_notSize'}
	&& existsInList($config{$args->{prefix} . '_notSize'},$size)) {
	return $args->{return} = 0;
	}

	if ($config{$args->{prefix} . '_hpLeft'}
	&& !inRange(($monsterInfo->[0] + $args->{monster}->{deltaHp}),$config{$args->{prefix} . '_hpLeft'})) {
	return $args->{return} = 0;
	}
	
	my $matkstatus = int((($char->{lv} / 4) + ($char->{int} + $char->{int_bonus}) + (($char->{int} + $char->{int_bonus}) / 2) + (($char->{dex} + $char->{dex_bonus}) / 5) + (($char->{luk} + $char->{luk_bonus}) / 3)) + (($char->{lv} / 4) + ($char->{int} + $char->{int_bonus}) + (($char->{int} + $char->{int_bonus}) / 2) + (($char->{dex} + $char->{dex_bonus}) / 5) + (($char->{luk} + $char->{luk_bonus}) / 3))/abs((($char->{lv} / 4) + ($char->{int} + $char->{int_bonus}) + (($char->{int} + $char->{int_bonus}) / 2) + (($char->{dex} + $char->{dex_bonus}) / 5) + (($char->{luk} + $char->{luk_bonus}) / 3))*2));
	my $matkav = $char->{attack_magic_max} + $matkstatus;
	my $formula = int(eval($config{$args->{prefix} . '_damageFormula'}));

	if ($config{$args->{prefix} . '_damageFormula'}
	&& inRange(($monsterInfo->[0] + $args->{monster}->{deltaHp}),'>= '.$formula)) {
		debug("Rejected spell : $formula\n", 'monsterDB', 1);
		return $args->{return} = 0;
	}
	
	if ($config{$args->{prefix} . '_damageFormula'}
	&& inRange(($monsterInfo->[0] + $args->{monster}->{deltaHp}),'< '.$formula)) {
		debug("I think my damage will be around : $formula\n", 'monsterDB', 1);
		return $args->{return} = 1;
	}
	
	return 1;
}

sub onPacketSkillUse { monsterHp($monsters{$_[1]->{targetID}}, $_[1]->{disp}) if $_[1]->{disp} }

sub onPacketSkillUseNoDmg {
	my (undef,$args) = @_;
	return 1 unless $monsters{$args->{targetID}} && $monsters{$args->{targetID}}{nameID};
	if (
		$args->{targetID} eq $args->{sourceID} && $args->{targetID} ne $accountID
		&& $skillChangeElement{$args->{skillID}}
	) {
		$monsters{$args->{targetID}}{element} = $skillChangeElement{$args->{skillID}};
		monsterEquip($monsters{$args->{targetID}});
		return 1;
	}
}

sub onPacketAttack { monsterHp($monsters{$_[1]->{targetID}}, $_[1]->{msg}) if $_[1]->{msg} }

sub monsterHp {
	my ($monster, $message) = @_;
	return 1 unless $monster && $monster->{nameID};
	
	return 1 unless my $monsterInfo = $monsterDB[(int($monster->{nameID}) - 1000)];
	$$message =~ s~(?=\n)~TF(" (HP: %d/%d)", $monsterInfo->[0] + $monster->{deltaHp}, $monsterInfo->[0])~se;
}

sub onAttackStart {
	my (undef,$args) = @_;
	monsterEquip($monsters{$args->{ID}});
}

sub onStatusChange {
	my (undef, $args) = @_;

	return unless $args->{changed};
	my $actor = $args->{actor};
	return unless (UNIVERSAL::isa($actor, 'Actor::Monster'));
	my $index = binFind(\@ai_seq, 'attack');
	return unless defined $index;
	return unless $ai_seq_args[$index]->{target} == $actor->{ID};
	monsterEquip($actor);
}

sub monsterEquip {
	my $monster = shift;
	return unless $monster;
	my %equip_list;

	my %args = ('monster' => $monster);
	my $slot;

	for (my $i=0;exists $config{"monsterEquip_$i"};$i++) {
		$args{prefix} = "monsterEquip_${i}_target";
		if (extendedCheck(undef,\%args)) {
			foreach $slot (%equipSlot_lut) {
				if ($config{"monsterEquip_${i}_equip_$slot"}
				&& !$equip_list{"attackEquip_$slot"}
				&& defined Actor::Item::get($config{"monsterEquip_${i}_equip_$slot"})) {
					$equip_list{"attackEquip_$slot"} = $config{"monsterEquip_${i}_equip_$slot"};
					debug "monsterDB: using ".$config{"monsterEquip_${i}_equip_$slot"}."\n",'monsterDB';
				}
			}
		}
	}
	foreach (keys %equip_list) {
		$config{$_} = $equip_list{$_};
	}
	Actor::Item::scanConfigAndEquip('attackEquip');
}

1;
Which ties in with my current skill set as

Code: Select all

useSelf_skill Energy Coat {
	lvl 1
	whenStatusInactive Energy Coat, Action Delay
	notOnAction attack
	inLockOnly 1
	notWhileSitting 1
	notInTown 1
}

useSelf_skill Mystical Amplification {
	lvl 10
	sp > 50
	whenStatusInactive Amplify Magic Power, Action Delay
	onAction attack
	notInTown 1
}

attackSkillSlot Quagmire {
	lvl 10
	dist 10
	sp > 10%
	maxAttempts 2
	maxUses 1
	aggressives > 3
	target_whenNotGround Quagmire
	target_whenStatusInactive Frozen
}


attackSkillSlot Sight {
	lvl 1
	target_whenStatusActive Hide,Cloaking
	isSelfSkill 1
	dist 1.5
	timeout 30
}

attackSkillSlot Sightrasher {
	lvl 2
	whenStatusActive Sight
	aggressives >= 3
	dist 1.5
	timeout 30
}

attackSkillSlot Fire Ball {
	lvl 10
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	notInTown 1
	target_Element Earth
	aggressives >= 3
}

attackSkillSlot Lightning Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Water
	target_damageFormula (($matkav - 30)*1)*1.5
}

attackSkillSlot Lightning Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Water
	target_damageFormula (($matkav - 30)*2)*1.5
}

attackSkillSlot Jupitel Thunder {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Water
	target_damageFormula (($matkav - 30)*3)*1.5
}

attackSkillSlot Jupitel Thunder {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Water
	target_damageFormula (($matkav - 30)*4)*1.5
}

attackSkillSlot Jupitel Thunder {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Water
	target_damageFormula (($matkav - 30)*5)*1.5
}

attackSkillSlot Jupitel Thunder {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Water
	target_damageFormula (($matkav - 30)*6)*1.5
}

attackSkillSlot Jupitel Thunder {
	lvl 5
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Water
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula (($matkav - 30)*1)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula (($matkav - 30)*2)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula (($matkav - 30)*3)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula ((($matkav - 30)*1)*1.5)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula ((($matkav - 30)*2)*1.5)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth1
	target_damageFormula ((($matkav - 30)*3)*1.5)*1.5
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula (($matkav - 30)*1)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula (($matkav - 30)*2)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula (($matkav - 30)*3)*1.75
}


attackSkillSlot Fire Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula ((($matkav - 30)*1)*1.5)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula ((($matkav - 30)*2)*1.5)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth2
	target_damageFormula ((($matkav - 30)*3)*1.5)*1.75
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula (($matkav - 30)*1)*2
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula (($matkav - 30)*2)*2
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula (($matkav - 30)*3)*2
}

attackSkillSlot Fire Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula ((($matkav - 30)*1)*1.5)*2
}

attackSkillSlot Fire Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula ((($matkav - 30)*2)*1.5)*2
}

attackSkillSlot Fire Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth3, Earth4
	target_damageFormula ((($matkav - 30)*3)*1.5)*2
}

attackSkillSlot Fire Bolt {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Earth
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav - 30)*1)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav - 30)*2)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav - 30)*3)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula (($matkav - 30)*4)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav - 30)*1)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav - 30)*2)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav - 30)*3)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire1
	target_damageFormula ((($matkav - 30)*4)*1.5)*1.5
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav - 30)*1)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav - 30)*2)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav - 30)*3)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula (($matkav - 30)*4)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav - 30)*1)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav - 30)*2)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav - 30)*3)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire2
	target_damageFormula ((($matkav - 30)*4)*1.5)*1.75
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav - 30)*1)*2
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav - 30)*2)*2
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav - 30)*3)*2
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula (($matkav - 30)*4)*2
}

attackSkillSlot Cold Bolt {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav - 30)*1)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav - 30)*2)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav - 30)*3)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 4
	dist 10
	whenStatusInactive Action Delay
	whenStatusActive Mystical Amplification
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire3, Fire4
	target_damageFormula ((($matkav - 30)*4)*1.5)*2
}

attackSkillSlot Cold Bolt {
	lvl 5
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Fire
}



attackSkillSlot Heaven's Drive {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	monsters Dragon Fly
}

attackSkillSlot Heaven's Drive {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	target_Element Air
	target_aggressives > 2
}

attackSkillSlot Earth Spike {
	lvl 1
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Air
	target_hpLeft < 216
}

attackSkillSlot Earth Spike {
	lvl 2
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Air
	target_hpLeft < 432
}

attackSkillSlot Earth Spike {
	lvl 3
	dist 10
	whenStatusInactive Action Delay
	sp > 10
	inLockOnly 1
	notInTown 1
	target_Element Air
	target_hpLeft >= 432
}

attackSkillSlot Frost Diver {
	lvl 10
	dist 10
	whenStatusInactive Action Delay
	target_whenStatusInactive Frozen
	maxUses 1
}

attackSkillSlot Soul Strike {
	lvl 7
	whenStatusInactive Action Delay
	dist 10
	sp > 10
}
But, as I said, this needs to be optimised.
And I need to port over the rest of the formula for calculating equipment and weapon based MATK
And I need to find the formula for monster MDEF
And I should probably change it so it knows the elemental modifiers instead of them being specified in the config blocks.

But, we're getting there.

You can tell where I haven't bothered updating my config block yet.

I think the most important thing I'll be working on first is getting the eMATK and wMATK code ported over, which should improve the accuracy alot.

Also, I'll probably make some changes to the update script and plugin so it can detect if a monster is immovable or not, which will help out with quagmire.

and maybe tie into the runFromTarget section of config.txt so you can tell it to "run" from immovable mobs to maintain distance, (standing next to a geographer is such a give away) but not from fast annoying things like familiars.

Re: Automatic Skill Level Detection

Posted: 13 Sep 2013, 21:57
by franibaflo
Finally some clarity! Thanks for the very detailed and informative reply! I can't fathom why this plugin (monsterDB) isn't getting a lot of attention given its promises. And the few who seem have some knowledge about it have became silent or inactive.

Finally the monster database was successfully loaded (I can't believe that I missed out regarding where to put the monsterDB.txt - so stupid of me). For the mob_db.txt can you check the link below. I think it's more updated since the last monster number is 2380 instead of 2125 from cronus.
https://code.google.com/p/rathena/sourc ... xt?r=15394

Thanks also for the modified monsterDB.pl, though still incomplete, it's what I'm currently using. It loaded successfully on openkore startup but I still haven't been able to test it as of typing although I'm pretty sure it would be a great improvement for my mage type characters :D.

If there's anything I can be of help with, just let me know although I know pretty much nothing regarding making plugins and scripting - I only have a know-how on using openkore and some minor macros (for now). But for support, I'm with you all the way!

Btw, I've also informed other people from our server (Muspell http://www.muspellonline.com/) regarding what you're doing and they seem intrigued as well.

Props to you and your goals mate! I'm very much looking forward to your updates. Keep up the good work!

Re: Automatic Skill Level Detection

Posted: 16 Sep 2013, 17:24
by xlr82xs
So I haven't tracked down all the formula for calculating wMATK and eMATK yet, but I have thrown together the data structure for calculating the elemental damage multiplier.

Code: Select all

#!/usr/bin/perl

use 5.010;
use strict;
use warnings;
use Data::Dumper;

my @element_lut = qw(Neutral Water Earth Fire Wind Poison Holy Shadow Ghost Undead);
my %element_modifiers;

my %raw_modifiers;
$raw_modifiers{lvl1} = "
100     100     100     100     100     100     100     100     25      100
100     25      100     150     50      100     75      100     100     100
100     100     100     50      150     100     75      100     100     100
100     50      150     25      100     100     75      100     100     125
100     175     50      100     25      100     75      100     100     100
100     100     125     125     125     0       75      50      100     -25
100     100     100     100     100     100     0       125     100     150
100     100     100     100     100     50      125     0       100     -25
25      100     100     100     100     100     75      75      125     100
100     100     100     100     100     50      100     0       100     0";

$raw_modifiers{lvl2} = "
100     100     100     100     100     100     100     100     25      100
100     0       100     175     25      100     50      75      100     100
100     100     50      25      175     100     50      75      100     100
100     25      175     0       100     100     50      75      100     150
100     175     25      100     0       100     50      75      100     100
100     75      125     125     125     0       50      25      75      -50
100     100     100     100     100     100     -25     150     100     175
100     100     100     100     100     25      150     -25     100     -50
0       75      75      75      75      75      50      50      150     125
100     75      75      75      75      25      125     0       100     0";

$raw_modifiers{lvl3} = "
100     100     100     100     100     100     100     100     0       100
100     -25     100     200     0       100     25      50      100     125
100     100     0       0       200     100     25      50      100     75
100     0       200     -25     100     100     25      50      100     175
100     200     0       100     -25     100     25      50      100     100
100     50      100     100     100     0       25      0       50      -75
100     100     100     100     100     125     -50     175     100     200
100     100     100     100     100     0       175     -50     100     -75
0       50      50      50      50      50      25      25      175     150
100     50      50      50      50      0       150     0       100     0
";

$raw_modifiers{lvl4} = "
100     100     100     100     100     100     100     100     0       100
100     -50     100     200     0       75      0       25      100     150
100     100     -25     0       200     75      0       25      100     50
100     0       200     -50     100     75      0       25      100     200
100     200     0       100     -50     75      0       25      100     100
100     25      75      75      75      0       0       -25     25      -100
100     75      75      75      75      125     -100    200     100     200
100     75      75      75      75      -25     200     -100    100     -100
0       25      25      25      25      25      0       0       200     175
100     25      25      25      25      -25     175     0       100     0
";

for my $tlevel (1 .. 4) {
		my $x;
        foreach (split /^/ , $raw_modifiers{'lvl'.$tlevel}) {
                next unless m/^\w+/;
                my $base = $element_lut[$x++];
                my @emodifiers = ( split );
                for my $i (0 .. $#element_lut) {
                        $element_modifiers{$element_lut[$i],$tlevel}->{$base} = $emodifiers[$i] / 100;
                }
        }
		delete $raw_modifiers{'lvl'.$tlevel};
}
undef %raw_modifiers;

# can be accessed now as $element_modifiers{"target_element"}{"skill_element"} which returns a multiplier
Also, can someone using a more average machine give me some stats on how badly generating the hash of hashes like this hurts your machine ?

Code: Select all

  % time perl test.pl
perl test.pl  0.02s user 0.00s system 85% cpu 0.031 total

Re: Automatic Skill Level Detection

Posted: 16 Sep 2013, 21:30
by xlr82xs
Also, does anyone know if the formula in http://calc.irowiki.org/js/functions/magicAttack.js are correct ?
Cause I really don't want to spend all the time porting them over to fit in the plugin system just to find out they are wrong ;)

Re: Automatic Skill Level Detection

Posted: 17 Sep 2013, 04:23
by franibaflo
Can the data structure for calculating the elemental damage multiplier be used already? If yes, where should I put those lines of code in the monsterDB.pl? Still a noob sorry.

Btw, I've been trying to input target_damageFormula per skill per element level and boy does it take up so much lines!!! REALLY REALLY LOOKING FORWARD TO THIS PLUGIN OF YOURS! :D
Also, can someone using a more average machine give me some stats on how badly generating the hash of hashes like this hurts your machine ?

Code: Select all

  % time perl test.pl
perl test.pl  0.02s user 0.00s system 85% cpu 0.031 total
I have an i5-2410m cpu in my laptop (if you can consider that average) and I'm willing to lend a hand in benchmarking your codes; however, like above, I don't have an idea how to do so. Any guides?
xlr82xs wrote:Also, does anyone know if the formula in http://calc.irowiki.org/js/functions/magicAttack.js are correct ?
Cause I really don't want to spend all the time porting them over to fit in the plugin system just to find out they are wrong ;)
I don't really know that much about coding +_+. Mods and Devs help here please!!!

Re: Automatic Skill Level Detection

Posted: 17 Sep 2013, 05:34
by xlr82xs
Pretty sure the mods and devs don't like me anymore.

The multiplier code itself is working, but it really needs the damage calculation stuff to be updated to actually be useful.
I'll probably have a basic implementation finished tonight, but I'm still struggling on figuring out how to avoid having to have one useAttackSkill block per level of each skill/spell you know.

And I've been thinking about the skill formula thing, there are fairly large differences pre/post renewal, and also pre/post renewal balance patch, so rather than having to maintain all of that, I'm pretty sure I'll do something simple like force people to work out the formulas themselves and specify them in the config file.

But, I'll have it take care of the Mystic Amplification side of things, so you won't have to double up on config blocks.