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 Name: NPC_CHANGEUNDEAD
Description: Undead Attribute Change Description: Undead Attribute Change
MaxLevel: 5 MaxLevel: 5
Type: Magic Type: Weapon
TargetType: Attack TargetType: Attack
DamageFlags:
NoDamage: true
Flags: Flags:
IsNpc: true IsNpc: true
Range: 9 Range: -2
Hit: Single
HitCount: 1 HitCount: 1
Element: Undead Element: Undead
Duration1: 30000 Duration2: 60000
Status: ChangeUndead Status: ChangeUndead
- Id: 349 - Id: 349
Name: NPC_POWERUP 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_POISONATTACK:
case NPC_HOLYATTACK: case NPC_HOLYATTACK:
case NPC_DARKNESSATTACK: case NPC_DARKNESSATTACK:
case NPC_UNDEADATTACK:
case NPC_TELEKINESISATTACK: case NPC_TELEKINESISATTACK:
case NPC_UNDEADATTACK:
case NPC_CHANGEUNDEAD:
case NPC_EARTHQUAKE: 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: case NPC_BLEEDING:
hitrate += hitrate * 20 / 100; hitrate += hitrate * 20 / 100;
break; break;

View File

@ -1645,6 +1645,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
case NPC_BLEEDING: case NPC_BLEEDING:
sc_start(src,bl,SC_BLEEDING,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv)); sc_start(src,bl,SC_BLEEDING,(20*skill_lv),skill_lv,skill_get_time2(skill_id,skill_lv));
break; 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: case NPC_ACIDBREATH:
sc_start(src,bl,SC_POISON,70,skill_lv,skill_get_time2(skill_id,skill_lv)); sc_start(src,bl,SC_POISON,70,skill_lv,skill_get_time2(skill_id,skill_lv));
break; break;
@ -4989,6 +4992,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
case NPC_DARKNESSATTACK: case NPC_DARKNESSATTACK:
case NPC_TELEKINESISATTACK: case NPC_TELEKINESISATTACK:
case NPC_UNDEADATTACK: case NPC_UNDEADATTACK:
case NPC_CHANGEUNDEAD:
case NPC_ARMORBRAKE: case NPC_ARMORBRAKE:
case NPC_WEAPONBRAKER: case NPC_WEAPONBRAKER:
case NPC_HELMBRAKE: 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), sc_start2(src,bl, type, 100, skill_lv, skill_get_ele(skill_id,skill_lv),
skill_get_time(skill_id, skill_lv))); skill_get_time(skill_id, skill_lv)));
break; 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: case NPC_PROVOCATION:
clif_skill_nodamage(src,bl,skill_id,skill_lv,1); clif_skill_nodamage(src,bl,skill_id,skill_lv,1);