Browse Source

Implemented new Meister skills (#8662)

Haydrich 6 months ago
parent
commit
66c7634d5f
5 changed files with 164 additions and 3 deletions
  1. 120 0
      db/re/skill_db.yml
  2. 15 0
      db/re/skill_tree.yml
  3. 1 1
      src/common/mmo.hpp
  4. 18 0
      src/map/battle.cpp
  5. 10 2
      src/map/skill.cpp

+ 120 - 0
db/re/skill_db.yml

@@ -43053,6 +43053,126 @@ Body:
           Amount: 84
           Amount: 84
         - Level: 10
         - Level: 10
           Amount: 86
           Amount: 86
+  - Id: 6506
+    Name: MT_RUSH_STRIKE
+    Description: Rush Strike
+    MaxLevel: 5
+    Type: Weapon
+    TargetType: Attack
+    DamageFlags:
+      Splash: true
+    Range: 7
+    Hit: Multi_Hit
+    HitCount: 7
+    Element: Weapon
+    GiveAp: 2
+    SplashArea:
+      - Level: 1
+        Area: 1
+      - Level: 2
+        Area: 2
+      - Level: 3
+        Area: 2
+      - Level: 4
+        Area: 3
+      - Level: 5
+        Area: 3
+    Cooldown: 1500
+    Requires:
+      SpCost:
+        - Level: 1
+          Amount: 85
+        - Level: 2
+          Amount: 80
+        - Level: 3
+          Amount: 75
+        - Level: 4
+          Amount: 70
+        - Level: 5
+          Amount: 65
+      Weapon:
+        2hAxe: true
+  - Id: 6507
+    Name: MT_POWERFUL_SWING
+    Description: Powerful Swing
+    MaxLevel: 5
+    Type: Weapon
+    TargetType: Attack
+    DamageFlags:
+      Splash: true
+    Range: 2
+    Hit: Multi_Hit
+    HitCount: 5
+    Element: Weapon
+    GiveAp: 2
+    SplashArea:
+      - Level: 1
+        Area: 1
+      - Level: 2
+        Area: 1
+      - Level: 3
+        Area: 2
+      - Level: 4
+        Area: 2
+      - Level: 5
+        Area: 3
+    Cooldown: 1500
+    Requires:
+      SpCost:
+        - Level: 1
+          Amount: 62
+        - Level: 2
+          Amount: 64
+        - Level: 3
+          Amount: 66
+        - Level: 4
+          Amount: 68
+        - Level: 5
+          Amount: 70
+      Weapon:
+        2hAxe: true
+  - Id: 6508
+    Name: MT_ENERGY_CANNONADE
+    Description: Energy Cannonade
+    MaxLevel: 5
+    Type: Weapon
+    TargetType: Attack
+    DamageFlags:
+      Splash: true
+      IgnoreDefense: true
+    Flags:
+      AllowOnMado: true
+    Range: 9
+    Hit: Multi_Hit
+    HitCount: 7
+    Element: Weapon
+    GiveAp: 3
+    SplashArea:
+      - Level: 1
+        Area: 2
+      - Level: 2
+        Area: 2
+      - Level: 3
+        Area: 3
+      - Level: 4
+        Area: 3
+      - Level: 5
+        Area: 4
+    Cooldown: 1500 #TODO: confirm cooldown
+    FixedCastTime: 1000 #TODO: confirm fixed cast time
+    Requires:
+      SpCost:
+        - Level: 1
+          Amount: 58
+        - Level: 2
+          Amount: 64
+        - Level: 3
+          Amount: 70
+        - Level: 4
+          Amount: 76
+        - Level: 5
+          Amount: 82
+      State: Mado
   - Id: 6511
   - Id: 6511
     Name: SHC_CROSS_SLASH
     Name: SHC_CROSS_SLASH
     Description: Cross Slash
     Description: Cross Slash

+ 15 - 0
db/re/skill_tree.yml

@@ -6807,6 +6807,21 @@ Body:
             Level: 4
             Level: 4
           - Name: MT_SUMMON_ABR_MOTHER_NET
           - Name: MT_SUMMON_ABR_MOTHER_NET
             Level: 4
             Level: 4
+      - Name: MT_RUSH_STRIKE
+        MaxLevel: 5
+        Requires:
+          - Name: MT_RUSH_QUAKE
+            Level: 5
+      - Name: MT_POWERFUL_SWING
+        MaxLevel: 5
+        Requires:
+          - Name: MT_RUSH_STRIKE
+            Level: 3
+      - Name: MT_ENERGY_CANNONADE
+        MaxLevel: 5
+        Requires:
+          - Name: MT_TRIPLE_LASER
+            Level: 3
   - Job: Shadow_Cross
   - Job: Shadow_Cross
     Inherit:
     Inherit:
       Novice: true
       Novice: true

+ 1 - 1
src/common/mmo.hpp

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

+ 18 - 0
src/map/battle.cpp

@@ -2672,6 +2672,7 @@ static int battle_range_type(struct block_list *src, struct block_list *target,
 		case SHC_SAVAGE_IMPACT: // 7 cell cast range.
 		case SHC_SAVAGE_IMPACT: // 7 cell cast range.
 		case SHC_FATAL_SHADOW_CROW: // 9 cell cast range.
 		case SHC_FATAL_SHADOW_CROW: // 9 cell cast range.
 		case MT_RUSH_QUAKE: // 9 cell cast range.
 		case MT_RUSH_QUAKE: // 9 cell cast range.
+		case MT_RUSH_STRIKE: // 7 cell cast range.
 		case ABC_UNLUCKY_RUSH: // 7 cell cast range.
 		case ABC_UNLUCKY_RUSH: // 7 cell cast range.
 		case MH_THE_ONE_FIGHTER_RISES: // 7 cell cast range.
 		case MH_THE_ONE_FIGHTER_RISES: // 7 cell cast range.
 		//case ABC_DEFT_STAB: // 2 cell cast range???
 		//case ABC_DEFT_STAB: // 2 cell cast range???
@@ -6026,6 +6027,23 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			skillratio += 12 * sstatus->pow;
 			skillratio += 12 * sstatus->pow;
 			RE_LVL_DMOD(100);
 			RE_LVL_DMOD(100);
 			break;
 			break;
+		case MT_RUSH_STRIKE:
+			skillratio += -100 + 3500 * skill_lv;
+			skillratio += 5 * sstatus->pow; // !TODO: check POW ratio
+			RE_LVL_DMOD(100);
+			break;
+		case MT_POWERFUL_SWING:
+			skillratio += -100 + 300 + 850 * skill_lv;
+			skillratio += 5 * sstatus->pow; // !TODO: check POW ratio
+			if (sc && sc->getSCE(SC_AXE_STOMP))
+				skillratio += 100 + 100 * skill_lv;
+			RE_LVL_DMOD(100);
+			break;
+		case MT_ENERGY_CANNONADE:
+			skillratio += -100 + 250 + 750 * skill_lv;
+			skillratio += 5 * sstatus->pow; // !TODO: check POW ratio
+			RE_LVL_DMOD(100);
+			break;
 		case ABC_ABYSS_DAGGER:
 		case ABC_ABYSS_DAGGER:
 			skillratio += -100 + 350 + 1400 * skill_lv;
 			skillratio += -100 + 350 + 1400 * skill_lv;
 			skillratio += 5 * sstatus->pow;
 			skillratio += 5 * sstatus->pow;

+ 10 - 2
src/map/skill.cpp

@@ -5710,6 +5710,9 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case MT_RUSH_QUAKE:
 	case MT_RUSH_QUAKE:
 	case MT_A_MACHINE:
 	case MT_A_MACHINE:
 	case MT_SPARK_BLASTER:
 	case MT_SPARK_BLASTER:
+	case MT_RUSH_STRIKE:
+	case MT_POWERFUL_SWING:
+	case MT_ENERGY_CANNONADE:
 	case ABC_ABYSS_DAGGER:
 	case ABC_ABYSS_DAGGER:
 	case ABC_CHAIN_REACTION_SHOT:
 	case ABC_CHAIN_REACTION_SHOT:
 	case ABC_DEFT_STAB:
 	case ABC_DEFT_STAB:
@@ -5876,6 +5879,8 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				case IQ_SECOND_JUDGEMENT:
 				case IQ_SECOND_JUDGEMENT:
 				case CD_PETITIO:
 				case CD_PETITIO:
 				case CD_FRAMEN:
 				case CD_FRAMEN:
+				case MT_POWERFUL_SWING:
+				case MT_ENERGY_CANNONADE:
 				case ABC_DEFT_STAB:
 				case ABC_DEFT_STAB:
 				case EM_EL_FLAMEROCK:
 				case EM_EL_FLAMEROCK:
 				case EM_EL_AGE_OF_ICE:
 				case EM_EL_AGE_OF_ICE:
@@ -5925,6 +5930,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 					if (bl->type == BL_PC)// Place single cell AoE if hitting a player.
 					if (bl->type == BL_PC)// Place single cell AoE if hitting a player.
 						skill_castend_pos2(src, bl->x, bl->y, skill_id, skill_lv, tick, 0);
 						skill_castend_pos2(src, bl->x, bl->y, skill_id, skill_lv, tick, 0);
 					break;
 					break;
+				case MT_RUSH_STRIKE:
 				case MT_RUSH_QUAKE:
 				case MT_RUSH_QUAKE:
 					// Jump to the target before attacking.
 					// Jump to the target before attacking.
 					if( skill_check_unit_movepos( 5, src, bl->x, bl->y, 0, 1 ) ){
 					if( skill_check_unit_movepos( 5, src, bl->x, bl->y, 0, 1 ) ){
@@ -5932,8 +5938,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 					}
 					}
 					clif_skill_nodamage( src, *bl, skill_id, skill_lv); // Trigger animation
 					clif_skill_nodamage( src, *bl, skill_id, skill_lv); // Trigger animation
 					clif_blown( src );
 					clif_blown( src );
-					// TODO: does this buff start before or after dealing damage? [Muh]
-					sc_start( src, src, SC_RUSH_QUAKE2, 100, skill_lv, skill_get_time2( skill_id, skill_lv ) );
+					if (skill_id == MT_RUSH_QUAKE){
+						// TODO: does this buff start before or after dealing damage? [Muh]
+						sc_start( src, src, SC_RUSH_QUAKE2, 100, skill_lv, skill_get_time2( skill_id, skill_lv ) );
+					}
 					break;
 					break;
 				case IG_SHIELD_SHOOTING:
 				case IG_SHIELD_SHOOTING:
 				case IG_GRAND_JUDGEMENT:
 				case IG_GRAND_JUDGEMENT: