瀏覽代碼

Implemented new Biolo skills BO_MYSTERY_POWDER and BO_DUST_EXPLOSION (#8663)

The skills require a client 20240708+
Haydrich 6 月之前
父節點
當前提交
c608d5b90a
共有 8 個文件被更改,包括 109 次插入2 次删除
  1. 69 0
      db/re/skill_db.yml
  2. 10 0
      db/re/skill_tree.yml
  3. 8 0
      db/re/status.yml
  4. 1 1
      src/common/mmo.hpp
  5. 12 0
      src/map/battle.cpp
  6. 2 1
      src/map/script_constants.hpp
  7. 4 0
      src/map/skill.cpp
  8. 3 0
      src/map/status.hpp

+ 69 - 0
db/re/skill_db.yml

@@ -43267,6 +43267,75 @@ Body:
         - Level: 5
           Amount: 82
       State: Mado
+  - Id: 6509
+    Name: BO_MYSTERY_POWDER
+    Description: Mystery Powder
+    MaxLevel: 5
+    Type: Weapon
+    TargetType: Attack
+    DamageFlags:
+      Splash: true
+    Range: 3
+    Hit: Multi_Hit
+    HitCount: -5
+    Element: Weapon
+    SplashArea:
+      - Level: 1
+        Area: 2
+      - Level: 2
+        Area: 2
+      - Level: 3
+        Area: 2
+      - Level: 4
+        Area: 3
+      - Level: 5
+        Area: 3
+    Duration1: 60000
+    AfterCastActDelay: 500
+    Cooldown: 1500
+    Requires:
+      SpCost: 82
+    Status: Mystery_Powder
+  - Id: 6510
+    Name: BO_DUST_EXPLOSION
+    Description: Dust Explosion
+    MaxLevel: 5
+    Type: Weapon
+    TargetType: Attack
+    DamageFlags:
+      Splash: true
+    Range: 3
+    Hit: Multi_Hit
+    HitCount: 5
+    Element: Weapon
+    SplashArea:
+      - Level: 1
+        Area: 2
+      - Level: 2
+        Area: 2
+      - Level: 3
+        Area: 2
+      - Level: 4
+        Area: 3
+      - Level: 5
+        Area: 3
+    GiveAp: 2
+    AfterCastActDelay: 500
+    Cooldown: 500
+    Requires:
+      SpCost:
+        - Level: 1
+          Amount: 64
+        - Level: 2
+          Amount: 67
+        - Level: 3
+          Amount: 70
+        - Level: 4
+          Amount: 73
+        - Level: 5
+          Amount: 76
+      Status:
+        Mystery_Powder: true
   - Id: 6511
     Name: SHC_CROSS_SLASH
     Description: Cross Slash

+ 10 - 0
db/re/skill_tree.yml

@@ -7382,6 +7382,16 @@ Body:
             Level: 5
           - Name: BO_EXPLOSIVE_POWDER
             Level: 3
+      - Name: BO_MYSTERY_POWDER
+        MaxLevel: 5
+        Requires:
+          - Name: BO_EXPLOSIVE_POWDER
+            Level: 5
+      - Name: BO_DUST_EXPLOSION
+        MaxLevel: 5
+        Requires:
+          - Name: BO_MYSTERY_POWDER
+            Level: 3
   - Job: Abyss_Chaser
     Inherit:
       Novice: true

+ 8 - 0
db/re/status.yml

@@ -9133,3 +9133,11 @@ Body:
       NoDispell: true
       NoBanishingBuster: true
       NoClearance: true
+  - Status: Mystery_Powder
+    Icon: EFST_MYSTERY_POWDER
+    DurationLookup: BO_MYSTERY_POWDER
+    Flags:
+      NoClearbuff: true
+      NoDispell: true
+      NoBanishingBuster: true
+      NoClearance: true

+ 1 - 1
src/common/mmo.hpp

@@ -89,7 +89,7 @@ typedef uint32 t_itemid;
 #endif
 #define MAX_FAME 1000000000 ///Max fame points
 #define MAX_CART 100 ///Maximum item in cart
-#define MAX_SKILL 1629 ///Maximum skill can be hold by Player, Homunculus, & Mercenary (skill list) AND skill_db limit
+#define MAX_SKILL 1631 ///Maximum skill can be hold by Player, Homunculus, & Mercenary (skill list) AND skill_db limit
 #define DEFAULT_WALK_SPEED 150 ///Default walk speed (other than NPC)
 #define DEFAULT_NPC_WALK_SPEED 200 ///Default NPC walk speed
 #define MIN_WALK_SPEED 20 ///Min walk speed

+ 12 - 0
src/map/battle.cpp

@@ -6216,6 +6216,18 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 				skillratio += 150;
 			RE_LVL_DMOD(100);
 			break;
+		case BO_MYSTERY_POWDER:
+			skillratio += -100 + 1500 + 4000 * skill_lv;
+			skillratio += 5 * sstatus->pow;	// !TODO: check POW ratio
+			RE_LVL_DMOD(100);
+			break;
+		case BO_DUST_EXPLOSION:
+			skillratio += -100 + 450 + 600 * skill_lv;
+			skillratio += 5 * sstatus->pow;	// !TODO: check POW ratio
+			if (sc && sc->getSCE(SC_RESEARCHREPORT))
+				skillratio += 200 * skill_lv;
+			RE_LVL_DMOD(100);
+			break;
 		case TR_ROSEBLOSSOM:
 			skillratio += -100 + 200 + 2000 * skill_lv;
 

+ 2 - 1
src/map/script_constants.hpp

@@ -1933,7 +1933,8 @@
 	export_constant(SC_CONTENTS_8);
 	export_constant(SC_CONTENTS_9);
 	export_constant(SC_CONTENTS_10);
-	
+	export_constant(SC_MYSTERY_POWDER);
+
 	/* status icons */
 	export_deprecated_constant2("SI_BLANK",-1);
 	export_deprecated_constant2("SI_PROVOKE",0);

+ 4 - 0
src/map/skill.cpp

@@ -5737,6 +5737,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case EM_EL_DEADLY_POISON:
 	case BO_EXPLOSIVE_POWDER:
 	case BO_MAYHEMIC_THORNS:
+	case BO_MYSTERY_POWDER:
+	case BO_DUST_EXPLOSION:
 	case NPC_WIDECRITICALWOUND:
 	case IG_SHIELD_SHOOTING:
 	case TR_METALIC_FURY:
@@ -5884,6 +5886,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				case CD_FRAMEN:
 				case MT_POWERFUL_SWING:
 				case MT_ENERGY_CANNONADE:
+				case BO_DUST_EXPLOSION:
 				case ABC_DEFT_STAB:
 				case EM_EL_FLAMEROCK:
 				case EM_EL_AGE_OF_ICE:
@@ -5946,6 +5949,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 						sc_start( src, src, SC_RUSH_QUAKE2, 100, skill_lv, skill_get_time2( skill_id, skill_lv ) );
 					}
 					break;
+				case BO_MYSTERY_POWDER:
 				case IG_SHIELD_SHOOTING:
 				case IG_GRAND_JUDGEMENT:
 				case SHC_CROSS_SLASH:

+ 3 - 0
src/map/status.hpp

@@ -1329,6 +1329,9 @@ enum sc_type : int16 {
 	SC_CONTENTS_9,
 	SC_CONTENTS_10,
 
+	// Level 275 New Skills
+	SC_MYSTERY_POWDER,
+
 	SC_MAX, //Automatically updated max, used in for's to check we are within bounds.
 };