diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 7ccb94b61e..bfb95080ff 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -18244,6 +18244,23 @@ Body: SplashArea: 14 Duration2: 18000 Status: Curse + - Id: 783 + Name: NPC_KILLING_AURA + Description: Killing Aura + MaxLevel: 5 #TODO unknown interactions with level + Type: Misc + TargetType: Support + Hit: Single + HitCount: 1 + DamageFlags: + IgnoreFlee: true + IgnoreDefCard: true + Splash: true + Flags: + IsNpc: true + SplashArea: 5 + Duration1: 30000 + Status: Killing_Aura - Id: 1001 Name: KN_CHARGEATK Description: Charge Attack diff --git a/db/re/status.yml b/db/re/status.yml index a231b3b6df..a987628103 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -8569,3 +8569,12 @@ Body: Flags: NoDispell: true NoClearance: true + - Status: Killing_Aura + Icon: EFST_KILLING_AURA + DurationLookup: NPC_KILLING_AURA + Flags: + BlEffect: true + DisplayPc: true + NoDispell: true + NoBanishingBuster: true + NoClearance: true diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 7815ea610b..b52688165c 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -8019,6 +8019,9 @@ struct Damage battle_calc_misc_attack(struct block_list *src,struct block_list * md.damage = 50; md.flag |= BF_WEAPON; break; + case NPC_KILLING_AURA: + md.damage = 10000; + break; #ifdef RENEWAL case HT_LANDMINE: case MA_LANDMINE: diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 116476db33..c770fd7c3c 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1874,6 +1874,7 @@ export_constant(SC_TEMPERING); export_constant(SC_GRADUAL_GRAVITY); export_constant(SC_ALL_STAT_DOWN); + export_constant(SC_KILLING_AURA); #ifdef RENEWAL export_constant(SC_EXTREMITYFIST2); diff --git a/src/map/skill.cpp b/src/map/skill.cpp index c1e68726d0..dac8b94e5d 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -5550,6 +5550,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case NPC_JACKFROST: case NPC_REVERBERATION_ATK: case NPC_ARROWSTORM: + case NPC_KILLING_AURA: case NPC_IGNITIONBREAK: case RK_IGNITIONBREAK: case RK_HUNDREDSPEAR: @@ -7801,6 +7802,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui case SU_FRESHSHRIMP: case SU_ARCLOUSEDASH: case NPC_MAXPAIN: + case NPC_KILLING_AURA: case SP_SOULREAPER: case SJ_LIGHTOFMOON: case SJ_LIGHTOFSTAR: diff --git a/src/map/status.cpp b/src/map/status.cpp index a7b3e7340f..f19c37e71a 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -9371,6 +9371,7 @@ static int status_get_sc_interval(enum sc_type type) case SC_DPOISON: case SC_DEATHHURT: case SC_GRADUAL_GRAVITY: + case SC_KILLING_AURA: return 1000; case SC_BURNING: case SC_PYREXIA: @@ -10849,6 +10850,7 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_POISON: case SC_BLEEDING: case SC_BURNING: + case SC_KILLING_AURA: tick_time = status_get_sc_interval(type); val4 = tick - tick_time; // Remaining time break; @@ -14763,6 +14765,10 @@ TIMER_FUNC(status_change_timer){ dounlock = true; } break; + case SC_KILLING_AURA: + if (sce->val4 >= 0) + skill_castend_damage_id( bl, bl, NPC_KILLING_AURA, sce->val1, tick, 0 ); + break; } // If status has an interval and there is at least 100ms remaining time, wait for next interval diff --git a/src/map/status.hpp b/src/map/status.hpp index 0f2599db4d..2080f82f9d 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -1265,6 +1265,7 @@ enum sc_type : int16 { SC_GRADUAL_GRAVITY, SC_ALL_STAT_DOWN, + SC_KILLING_AURA, #ifdef RENEWAL SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled