diff options
Diffstat (limited to 'src/map')
-rw-r--r-- | src/map/battle.c | 2 | ||||
-rw-r--r-- | src/map/battle.h | 1 | ||||
-rw-r--r-- | src/map/mob.c | 62 | ||||
-rw-r--r-- | src/map/skill.c | 2 |
4 files changed, 42 insertions, 25 deletions
diff --git a/src/map/battle.c b/src/map/battle.c index 765ce9443..ea80e803c 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -5308,6 +5308,7 @@ static const struct { { "motd_type", &battle_config.motd_type}, // [celest] { "allow_atcommand_when_mute", &battle_config.allow_atcommand_when_mute}, // [celest] { "finding_ore_rate", &battle_config.finding_ore_rate}, // [celest] + { "exp_calc_type", &battle_config.exp_calc_type}, // [celest] //SQL-only options start #ifndef TXT_ONLY @@ -5567,6 +5568,7 @@ void battle_set_defaults() { battle_config.finding_ore_rate = 100; battle_config.castrate_dex_scale = 150; battle_config.area_size = 14; + battle_config.exp_calc_type = 1; //SQL-only options start #ifndef TXT_ONLY diff --git a/src/map/battle.h b/src/map/battle.h index bd22b9341..021346294 100644 --- a/src/map/battle.h +++ b/src/map/battle.h @@ -356,6 +356,7 @@ extern struct Battle_Config { int motd_type; // [celest] int allow_atcommand_when_mute; // [celest] int finding_ore_rate; // orn + int exp_calc_type; #ifndef TXT_ONLY /* SQL-only options */ int mail_system; // [Valaris] diff --git a/src/map/mob.c b/src/map/mob.c index f9b049254..c6b772209 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -2369,31 +2369,45 @@ int mob_damage(struct block_list *src,struct mob_data *md,int damage,int type) struct party *p; if(tmpsd[i]==NULL || tmpsd[i]->bl.m != md->bl.m || pc_isdead(tmpsd[i])) continue; -/* jAthena's exp formula - // per = ((double)md->dmglog[i].dmg)*(9.+(double)((count > 6)? 6:count))/10./((double)max_hp) * dmg_rate; - per = ((double)md->dmglog[i].dmg)*(9.+(double)((count > 6)? 6:count))/10./tdmg; - temp = ((double)mob_db[md->class].base_exp * (double)battle_config.base_exp_rate / 100. * per); - base_exp = (temp > 2147483647.)? 0x7fffffff:(int)temp; - if(mob_db[md->class].base_exp > 0 && base_exp < 1) base_exp = 1; - if(base_exp < 0) base_exp = 0; - temp = ((double)mob_db[md->class].job_exp * (double)battle_config.job_exp_rate / 100. * per); - job_exp = (temp > 2147483647.)? 0x7fffffff:(int)temp; - if(mob_db[md->class].job_exp > 0 && job_exp < 1) job_exp = 1; - if(job_exp < 0) job_exp = 0; -*/ -//eAthena's exp formula rather than jAthena's - per=(double)md->dmglog[i].dmg*256*(9+(double)((count > 6)? 6:count))/10/(double)max_hp; - if(per>512) per=512; - if(per<1) per=1; - base_exp=mob_db[md->class].base_exp*per/256; - - if(base_exp < 1) base_exp = 1; - if(sd && md && battle_config.pk_mode==1 && (mob_db[md->class].lv - sd->status.base_level >= 20)) { - base_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris] + + if (battle_config.exp_calc_type == 0) { + // jAthena's exp formula + // per = ((double)md->dmglog[i].dmg)*(9.+(double)((count > 6)? 6:count))/10./((double)max_hp) * dmg_rate; + per = ((double)md->dmglog[i].dmg)*(9.+(double)((count > 6)? 6:count))/10./tdmg; + temp = (double)mob_db[md->class].base_exp * per; + base_exp = (temp > 2147483647.)? 0x7fffffff:(int)temp; + if(mob_db[md->class].base_exp > 0 && base_exp < 1) base_exp = 1; + if(base_exp < 0) base_exp = 0; + temp = (double)mob_db[md->class].job_exp * per; + job_exp = (temp > 2147483647.)? 0x7fffffff:(int)temp; + if(mob_db[md->class].job_exp > 0 && job_exp < 1) job_exp = 1; + if(job_exp < 0) job_exp = 0; } - job_exp=mob_db[md->class].job_exp*per/256; - if(job_exp < 1) job_exp = 1; - if(sd && md && battle_config.pk_mode==1 && (mob_db[md->class].lv - sd->status.base_level >= 20)) { + else if (battle_config.exp_calc_type == 1) { + //eAthena's exp formula rather than jAthena's + per=(double)md->dmglog[i].dmg*256*(9+(double)((count > 6)? 6:count))/10/(double)max_hp; + if(per>512) per=512; + if(per<1) per=1; + base_exp=mob_db[md->class].base_exp*per/256; + if(base_exp < 1) base_exp = 1; + job_exp=mob_db[md->class].job_exp*per/256; + if(job_exp < 1) job_exp = 1; + } + else { + //eAthena's exp formula rather than jAthena's, but based on total damage dealt + per=(double)md->dmglog[i].dmg*256*(9+(double)((count > 6)? 6:count))/10/tdmg; + if(per>512) per=512; + if(per<1) per=1; + base_exp=mob_db[md->class].base_exp*per/256; + if(base_exp < 1) base_exp = 1; + job_exp=mob_db[md->class].job_exp*per/256; + if(job_exp < 1) job_exp = 1; + } + + if(sd && battle_config.pk_mode && (mob_db[md->class].lv - sd->status.base_level >= 20)) { + base_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris] + } + if(sd && battle_config.pk_mode && (mob_db[md->class].lv - sd->status.base_level >= 20)) { job_exp*=1.15; // pk_mode additional exp if monster >20 levels [Valaris] } if(md->master_id || (md->state.special_mob_ai >= 1 && battle_config.alchemist_summon_reward != 1)) { // for summoned creatures [Valaris] diff --git a/src/map/skill.c b/src/map/skill.c index 1e1c373cb..711a89f76 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -6717,7 +6717,7 @@ int skill_castend_pos( int tid, unsigned int tick, int id,int data ) case HT_TALKIEBOX: case PF_SPIDERWEB: /* スパイダ?ウェッブ */ case WZ_ICEWALL: - range = 1; + range = 2; break; case AL_WARP: range = 0; |