diff options
-rw-r--r-- | Changelog-Trunk.txt | 9 | ||||
-rw-r--r-- | conf-tmpl/battle/exp.conf | 2 | ||||
-rw-r--r-- | src/map/mob.c | 15 |
3 files changed, 23 insertions, 3 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index 946b0df2a..ef3ff982f 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,15 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK.
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
+2006/10/31
+ * Added a check to prevent adding negative damage to the total accumulated
+ damage in mob_damage. It could fix some exploits, even though mob_damage
+ should never be invoked with negative damage anyway. [Skotlex]
+ * Implemented the property where the first attacker get's double exp-share
+ than the others. Due to the way exp calculation is done, this bonus will
+ not apply when you use exp_calc_type 1 (damage/max_hp) instead of the
+ default (damage/total-damage). For now this bonus is done after calculating
+ who is the MVP character instead of before. [Skotlex]
2006/10/30
* Fixed a little bug in event enqueue code [Toms]
* Updated the code so mobs can use ChainAction as a targetted skill.
diff --git a/conf-tmpl/battle/exp.conf b/conf-tmpl/battle/exp.conf index eba10c4a7..cdbebe3ec 100644 --- a/conf-tmpl/battle/exp.conf +++ b/conf-tmpl/battle/exp.conf @@ -47,6 +47,8 @@ max_exp_gain_rate: 0 //Method of calculating earned experience when defeating a monster:
//0 - jAthena's (uses damage given / total damage as damage ratio)
//1 - eAthena's (uses damage given / max_hp as damage ratio)
+//NOTE: Using type 1 disables the bonus where the first attacker gets
+// his share of the exp doubled when multiple people attack the mob.
exp_calc_type: 0
//Experience increase per attacker. That is, every additional attacker to the
diff --git a/src/map/mob.c b/src/map/mob.c index fe0b323ee..9442adddf 100644 --- a/src/map/mob.c +++ b/src/map/mob.c @@ -1594,14 +1594,15 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage) { int char_id = 0, flag = 0; - md->tdmg+=damage; //Store total damage... - if(md->guardian_data && md->guardian_data->number < MAX_GUARDIANS) // guardian hp update [Valaris] (updated by [Skotlex]) md->guardian_data->castle->guardian[md->guardian_data->number].hp = md->status.hp; if (battle_config.show_mob_info&3) clif_charnameack (0, &md->bl); + if (damage > 0) //Store total damage... + md->tdmg+=damage; + if (!src) return; @@ -1675,7 +1676,8 @@ void mob_damage(struct mob_data *md, struct block_list *src, int damage) md->dmglog[i].flag= flag; break; } - if(md->dmglog[i].dmg<mindmg){ + if(md->dmglog[i].dmg<mindmg && i) + { //Never overwrite first hit slot (he gets double exp bonus) minpos=i; mindmg=md->dmglog[i].dmg; } @@ -1785,6 +1787,13 @@ int mob_dead(struct mob_data *md, struct block_list *src, int type) } count = i; //Total number of attackers. + if(!battle_config.exp_calc_type && count > 1) + { //Apply first-attacker 200% exp share bonus + //TODO: Determine if this should go before calculating the MVP player instead of after. + md->tdmg += md->dmglog[0].dmg; + md->dmglog[0].dmg<<=1; + } + if(!(type&2) && //No exp (!map[md->bl.m].flag.pvp || battle_config.pvp_exp) && //Pvp no exp rule [MouseJstr] (!md->master_id || !md->special_state.ai) && //Only player-summoned mobs do not give exp. [Skotlex] |