diff options
-rw-r--r-- | Changelog-Trunk.txt | 1 | ||||
-rw-r--r-- | src/map/battle.c | 8 | ||||
-rw-r--r-- | src/map/skill.c | 16 |
3 files changed, 16 insertions, 9 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index e7a2ea99f..962ce1842 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -9,6 +9,7 @@ IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. - Equipment breaking behaves exactly like coma. - Skill's self damage may now causes coma, equipment breaking and autospell/autoscript. - GrandCross now allows you to drain hp/sp. + - Splash attack doesn't cause any status effects or autocasts any more. 09/05/20 * Now fiberlocking a fiberlocked target doesn't renew the timer but instead increases its fireweakness [Inkfish] - This makes doublecasting firebolts on a double fiberlocked target having double damage from both 2 bolts possible = =(bugreport:3061) diff --git a/src/map/battle.c b/src/map/battle.c index f26a56b89..410413e7b 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -1044,9 +1044,11 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src,struct blo s_ele = s_ele_ = wflag; //element comes in flag. break; - case LK_SPIRALPIERCE: - if (!sd) nk &= ~NK_NO_ELEFIX; //forced neutral for monsters - break; + // TODO: A patch here doesn't work anymore since mechanism has changed. + // If mob's spiral pierce is forced neutral is under investigation. + //case LK_SPIRALPIERCE: + // if (!sd) nk &= ~NK_NO_ELEFIX; //forced neutral for monsters + // break; } if(!skill_num) diff --git a/src/map/skill.c b/src/map/skill.c index bb18f0e12..208b6afd5 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -550,6 +550,8 @@ int skill_additional_effect (struct block_list* src, struct block_list *bl, int { case 0: // Normal attacks (no skill used) { + if( !(attack_type&BF_WEAPON) ) + break; // If a normal attack is not a weapon attack, it's splash damage. [Inkfish] if(sd) { // Automatic trigger of Blitz Beat if (pc_isfalcon(sd) && sd->status.weapon == W_BOW && (skill=pc_checkskill(sd,HT_BLITZBEAT))>0 && @@ -1568,8 +1570,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds if (sc && sc->data[SC_TRICKDEAD] && !(sstatus->mode&MD_BOSS)) return 0; - dmg=battle_calc_attack(attack_type,src,bl,skillid,skilllv,flag&0xFFF); - attack_type|=dmg.flag; //Add on the rest of attack properties. + dmg = battle_calc_attack(attack_type,src,bl,skillid,skilllv,flag&0xFFF); //Skotlex: Adjusted to the new system if(src->type==BL_PET) @@ -1589,7 +1590,7 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds } } - if (attack_type&BF_MAGIC) { + if (dmg.flag&BF_MAGIC) { if( !(sstatus->mode&MD_BOSS) && (dmg.damage || dmg.damage2) && skill_magic_reflect(src, bl, src==dsrc) ) { //Magic reflection, switch caster/target struct block_list *tbl = bl; @@ -1829,13 +1830,16 @@ int skill_attack (int attack_type, struct block_list* src, struct block_list *ds ud->attackabletime = tick + type; } + if( !skillid && flag&1 ) + dmg.flag &= ~BF_WEAPON; // hack to make splash attack not trigger anything else. + if( !dmg.amotion ) { //Instant damage status_fix_damage(src,bl,damage,dmg.dmotion); //Deal damage before knockback to allow stuff like firewall+storm gust combo. if( !status_isdead(bl) ) - skill_additional_effect(src,bl,skillid,skilllv,attack_type,dmg.dmg_lv,tick); + skill_additional_effect(src,bl,skillid,skilllv,dmg.flag,dmg.dmg_lv,tick); if( damage > 0 ) //Counter status effects [Skotlex] - skill_counter_additional_effect(dsrc,bl,skillid,skilllv,attack_type,tick); + skill_counter_additional_effect(dsrc,bl,skillid,skilllv,dmg.flag,tick); } //Only knockback if it's still alive, otherwise a "ghost" is left behind. [Skotlex] @@ -1854,7 +1858,7 @@ 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,attack_type,skillid,skilllv,damage,dmg.dmg_lv,dmg.dmotion); + battle_delay_damage(tick, dmg.amotion,src,bl,dmg.flag,skillid,skilllv,damage,dmg.dmg_lv,dmg.dmotion); if(skillid == RG_INTIMIDATE && damage > 0 && !(tstatus->mode&MD_BOSS)) { int rate = 50 + skilllv * 5; |