summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-10-31 15:08:07 +0000
committerskotlex <skotlex@54d463be-8e91-2dee-dedb-b68131a5f0ec>2006-10-31 15:08:07 +0000
commite4da0000fd29b3effb80404bfebdc0f89b8a67f3 (patch)
tree03cbe84bcc8f74b7e08eaeed5eec8eb1e0fb1e8f /src
parenta5004de8f46964efc661b5fc0c4b298ba8cd5024 (diff)
downloadhercules-e4da0000fd29b3effb80404bfebdc0f89b8a67f3.tar.gz
hercules-e4da0000fd29b3effb80404bfebdc0f89b8a67f3.tar.bz2
hercules-e4da0000fd29b3effb80404bfebdc0f89b8a67f3.tar.xz
hercules-e4da0000fd29b3effb80404bfebdc0f89b8a67f3.zip
- Added a check to prevent adding negative damage to the total accumulated damage in mob_damage.
- 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. git-svn-id: https://rathena.svn.sourceforge.net/svnroot/rathena/trunk@9107 54d463be-8e91-2dee-dedb-b68131a5f0ec
Diffstat (limited to 'src')
-rw-r--r--src/map/mob.c15
1 files changed, 12 insertions, 3 deletions
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]