From da93c190c5f7b2e79b23aadb8eb1c7ab88a40082 Mon Sep 17 00:00:00 2001 From: Playtester Date: Fri, 15 Apr 2022 09:00:53 +0200 Subject: [PATCH] Correct Implementation of NPC_CHANGEUNDEAD (#6837) - Fixes #6832 - NPC_CHANGEUNDEAD is now a single target attack skill - 100% physical, undead property damage - When it deals damage, 10%*skill_lv chance to cause SC_CHANGEUNDEAD for 60 seconds - Skill range is 2 - All NPC status skills now have 120% hit rate --- db/pre-re/skill_db.yml | 9 ++++----- src/map/battle.cpp | 10 +++++++++- src/map/skill.cpp | 12 ++++-------- 3 files changed, 17 insertions(+), 14 deletions(-) diff --git a/db/pre-re/skill_db.yml b/db/pre-re/skill_db.yml index 4e10453e8f..97e73f84da 100644 --- a/db/pre-re/skill_db.yml +++ b/db/pre-re/skill_db.yml @@ -9389,16 +9389,15 @@ Body: Name: NPC_CHANGEUNDEAD Description: Undead Attribute Change MaxLevel: 5 - Type: Magic + Type: Weapon TargetType: Attack - DamageFlags: - NoDamage: true Flags: IsNpc: true - Range: 9 + Range: -2 + Hit: Single HitCount: 1 Element: Undead - Duration1: 30000 + Duration2: 60000 Status: ChangeUndead - Id: 349 Name: NPC_POWERUP diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 95f546527a..04cae6c4e0 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -2972,9 +2972,17 @@ static bool is_attack_hitting(struct Damage* wd, struct block_list *src, struct case NPC_POISONATTACK: case NPC_HOLYATTACK: case NPC_DARKNESSATTACK: - case NPC_UNDEADATTACK: case NPC_TELEKINESISATTACK: + case NPC_UNDEADATTACK: + case NPC_CHANGEUNDEAD: case NPC_EARTHQUAKE: + case NPC_POISON: + case NPC_BLINDATTACK: + case NPC_SILENCEATTACK: + case NPC_STUNATTACK: + case NPC_PETRIFYATTACK: + case NPC_CURSEATTACK: + case NPC_SLEEPATTACK: case NPC_BLEEDING: hitrate += hitrate * 20 / 100; break; diff --git a/src/map/skill.cpp b/src/map/skill.cpp index bd5c0bd238..038e7e2f50 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -1645,6 +1645,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1 case NPC_BLEEDING: sc_start(src,bl,SC_BLEEDING,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); break; + case NPC_CHANGEUNDEAD: + sc_start(src, bl, SC_CHANGEUNDEAD, (10 * skill_lv), skill_lv, skill_get_time2(skill_id, skill_lv)); + break; case NPC_ACIDBREATH: sc_start(src,bl,SC_POISON,70,skill_lv,skill_get_time2(skill_id,skill_lv)); break; @@ -4989,6 +4992,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_DARKNESSATTACK: case NPC_TELEKINESISATTACK: case NPC_UNDEADATTACK: + case NPC_CHANGEUNDEAD: case NPC_ARMORBRAKE: case NPC_WEAPONBRAKER: case NPC_HELMBRAKE: @@ -9416,14 +9420,6 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui sc_start2(src,bl, type, 100, skill_lv, skill_get_ele(skill_id,skill_lv), skill_get_time(skill_id, skill_lv))); break; - case NPC_CHANGEUNDEAD: - //This skill should fail if target is wearing bathory/evil druid card [Brainstorm] - //TO-DO This is ugly, fix it - if(tstatus->def_ele==ELE_UNDEAD || tstatus->def_ele==ELE_DARK) break; - clif_skill_nodamage(src,bl,skill_id,skill_lv, - sc_start2(src,bl, type, 100, skill_lv, skill_get_ele(skill_id,skill_lv), - skill_get_time(skill_id, skill_lv))); - break; case NPC_PROVOCATION: clif_skill_nodamage(src,bl,skill_id,skill_lv,1);