diff options
author | shennetsind <ind@henn.et> | 2013-02-15 01:16:28 -0200 |
---|---|---|
committer | shennetsind <ind@henn.et> | 2013-02-15 01:16:28 -0200 |
commit | a244b61804209ec8a836d8d3f1b7220b2bfec990 (patch) | |
tree | 843c8a8f6809dc209fb443cf6212e2af99f9cf25 /src/map/skill.c | |
parent | 74c31098137aae3e0bfc962e4685a7050409df78 (diff) | |
download | hercules-a244b61804209ec8a836d8d3f1b7220b2bfec990.tar.gz hercules-a244b61804209ec8a836d8d3f1b7220b2bfec990.tar.bz2 hercules-a244b61804209ec8a836d8d3f1b7220b2bfec990.tar.xz hercules-a244b61804209ec8a836d8d3f1b7220b2bfec990.zip |
Fixed Bug #7039
Status effects no longer propagate with magical reflection (e.g. when frost diver is reflected there is no chance that target will be frozen)
http://hercules.ws/board/tracker/issue-7039-frost-diver/
Signed-off-by: shennetsind <ind@henn.et>
Diffstat (limited to 'src/map/skill.c')
-rw-r--r-- | src/map/skill.c | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/map/skill.c b/src/map/skill.c index b37d28e3c..86a03b64b 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -2192,6 +2192,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds struct map_session_data *sd, *tsd; int type,damage,rdamage=0; int8 rmdamage=0;//magic reflected + bool additional_effects = true; if(skill_id > 0 && !skill_lv) return 0; @@ -2272,7 +2273,8 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds sc->data[SC_SPIRIT]->val3 = skill_id; sc->data[SC_SPIRIT]->val4 = dsrc->id; } - } + } else if( type != 2 ) /* Kaite bypasses */ + additional_effects = false; /** * Official Magic Reflection Behavior : damage reflected depends on gears caster wears, not target @@ -2618,7 +2620,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds { //Instant damage if( !sc || (!sc->data[SC_DEVOTION] && skill_id != CR_REFLECTSHIELD) ) status_fix_damage(src,bl,damage,dmg.dmotion); //Deal damage before knockback to allow stuff like firewall+storm gust combo. - if( !status_isdead(bl) ) + if( !status_isdead(bl) && additional_effects ) skill_additional_effect(src,bl,skill_id,skill_lv,dmg.flag,dmg.dmg_lv,tick); if( damage > 0 ) //Counter status effects [Skotlex] skill_counter_additional_effect(src,bl,skill_id,skill_lv,dmg.flag,tick); @@ -2692,10 +2694,9 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds //Delayed damage must be dealt after the knockback (it needs to know actual position of target) if (dmg.amotion) - battle_delay_damage(tick, dmg.amotion,src,bl,dmg.flag,skill_id,skill_lv,damage,dmg.dmg_lv,dmg.dmotion); + battle_delay_damage(tick, dmg.amotion,src,bl,dmg.flag,skill_id,skill_lv,damage,dmg.dmg_lv,dmg.dmotion, additional_effects); - if( sc && sc->data[SC_DEVOTION] && skill_id != PA_PRESSURE ) - { + if( sc && sc->data[SC_DEVOTION] && skill_id != PA_PRESSURE ) { struct status_change_entry *sce = sc->data[SC_DEVOTION]; struct block_list *d_bl = map_id2bl(sce->val1); @@ -2707,8 +2708,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds if(!rmdamage){ clif_damage(d_bl,d_bl, gettick(), 0, 0, damage, 0, 0, 0); status_fix_damage(NULL,d_bl, damage, 0); - } - else{//Reflected magics are done directly on the target not on paladin + } else{ //Reflected magics are done directly on the target not on paladin //This check is only for magical skill. //For BF_WEAPON skills types track var rdamage and function battle_calc_return_damage clif_damage(bl,bl, gettick(), 0, 0, damage, 0, 0, 0); @@ -2750,7 +2750,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds map_foreachinshootrange(battle_damage_area,bl,skill_get_splash(LG_REFLECTDAMAGE,1),BL_CHAR,tick,bl,dmg.amotion,sstatus->dmotion,rdamage,tstatus->race); } else { if( dmg.amotion ) - battle_delay_damage(tick, dmg.amotion,bl,src,0,CR_REFLECTSHIELD,0,rdamage,ATK_DEF,0); + battle_delay_damage(tick, dmg.amotion,bl,src,0,CR_REFLECTSHIELD,0,rdamage,ATK_DEF,0,additional_effects); else status_fix_damage(bl,src,rdamage,0); clif_damage(src,src,tick, dmg.amotion,0,rdamage,1,4,0); // in aegis damage reflected is shown in single hit. |