Bladeren bron

Adds skill NPC_KILLING_AURA (#7624)

munkrej 2 jaren geleden
bovenliggende
commit
cbb5380527
7 gewijzigde bestanden met toevoegingen van 39 en 0 verwijderingen
  1. 17 0
      db/re/skill_db.yml
  2. 9 0
      db/re/status.yml
  3. 3 0
      src/map/battle.cpp
  4. 1 0
      src/map/script_constants.hpp
  5. 2 0
      src/map/skill.cpp
  6. 6 0
      src/map/status.cpp
  7. 1 0
      src/map/status.hpp

+ 17 - 0
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

+ 9 - 0
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

+ 3 - 0
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:

+ 1 - 0
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);

+ 2 - 0
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:

+ 6 - 0
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

+ 1 - 0
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