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
This commit is contained in:
Playtester 2022-04-15 09:00:53 +02:00 committed by GitHub
parent 4845a128ba
commit da93c190c5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 17 additions and 14 deletions

View File

@ -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

View File

@ -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;

View File

@ -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);