瀏覽代碼

4th Improvement - Arch Mage (#7708)

munkrej 2 年之前
父節點
當前提交
e4acd6e5dc
共有 4 個文件被更改,包括 108 次插入27 次删除
  1. 74 20
      db/re/skill_db.yml
  2. 27 6
      src/map/battle.cpp
  3. 2 1
      src/map/skill.cpp
  4. 5 0
      src/map/status.cpp

+ 74 - 20
db/re/skill_db.yml

@@ -35391,6 +35391,7 @@ Body:
     MaxLevel: 5
     Type: Magic
     TargetType: Ground
+    GiveAp: 4
     Range: 9
     Hit: Single
     HitCount: 1
@@ -35983,7 +35984,7 @@ Body:
     FixedCastTime: 4000
     Requires:
       SpCost: 60
-      ApCost: 200
+      ApCost: 150
     Status: Climax
   - Id: 5233
     Name: AG_ROCK_DOWN
@@ -35997,12 +35998,32 @@ Body:
     Hit: Multi_Hit
     HitCount: -5
     Element: Earth
-    SplashArea: 1
-    GiveAp: 4
+    SplashArea:
+      - Level: 1
+        Area: 2
+      - Level: 2
+        Area: 2
+      - Level: 3
+        Area: 2
+      - Level: 4
+        Area: 3
+      - Level: 5
+        Area: 3
+    GiveAp: 1
     CastCancel: true
     CastTime: 4000
-    AfterCastActDelay: 1000
-    Cooldown: 4000
+    AfterCastActDelay: 500
+    Cooldown:
+      - Level: 1
+        Time: 3000
+      - Level: 2
+        Time: 2100
+      - Level: 3
+        Time: 1500
+      - Level: 4
+        Time: 900
+      - Level: 5
+        Time: 300
     FixedCastTime: 1500
     Requires:
       SpCost:
@@ -36028,11 +36049,21 @@ Body:
     Element: Wind
     SplashArea: 1
     ActiveInstance: 14
-    GiveAp: 4
+    GiveAp: 1
     CastCancel: true
     CastTime: 4000
-    AfterCastActDelay: 1000
-    Cooldown: 4000
+    AfterCastActDelay: 500
+    Cooldown:
+      - Level: 1
+        Time: 3000
+      - Level: 2
+        Time: 2100
+      - Level: 3
+        Time: 1500
+      - Level: 4
+        Time: 900
+      - Level: 5
+        Time: 300
     FixedCastTime: 1500
     Requires:
       SpCost:
@@ -36058,11 +36089,21 @@ Body:
     Element: Fire
     SplashArea: 1
     ActiveInstance: 14
-    GiveAp: 4
+    GiveAp: 1
     CastCancel: true
     CastTime: 4000
-    AfterCastActDelay: 1000
-    Cooldown: 4000
+    AfterCastActDelay: 500
+    Cooldown:
+      - Level: 1
+        Time: 3000
+      - Level: 2
+        Time: 2100
+      - Level: 3
+        Time: 1500
+      - Level: 4
+        Time: 900
+      - Level: 5
+        Time: 300
     FixedCastTime: 1500
     Requires:
       SpCost:
@@ -36082,10 +36123,23 @@ Body:
     MaxLevel: 5
     Type: Magic
     TargetType: Attack
+    DamageFlags:
+      Splash: true
     Range: 9
     Hit: Multi_Hit
-    HitCount: -2
+    HitCount: 1
     Element: Fire
+    SplashArea:
+      - Level: 1
+        Area: 2
+      - Level: 2
+        Area: 2
+      - Level: 3
+        Area: 2
+      - Level: 4
+        Area: 3
+      - Level: 5
+        Area: 3
     Requires:
       SpCost: 1
   - Id: 5237
@@ -36101,20 +36155,20 @@ Body:
     Element: Water
     SplashArea:
       - Level: 1
-        Area: 2
+        Area: 4
       - Level: 2
-        Area: 2
+        Area: 4
       - Level: 3
-        Area: 3
+        Area: 5
       - Level: 4
-        Area: 3
+        Area: 5
       - Level: 5
-        Area: 4
-    GiveAp: 4
+        Area: 6
+    GiveAp: 1
     CastCancel: true
     CastTime: 4000
-    AfterCastActDelay: 1000
-    Cooldown: 4000
+    AfterCastActDelay: 500
+    Cooldown: 300
     FixedCastTime: 1500
     Requires:
       SpCost:

+ 27 - 6
src/map/battle.cpp

@@ -702,8 +702,6 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li
 				}
 				cardfix = cardfix * (100 + sd->indexed_bonus.magic_addsize[tstatus->size] + sd->indexed_bonus.magic_addsize[SZ_ALL]) / 100;
 				cardfix = cardfix * (100 + sd->indexed_bonus.magic_addclass[tstatus->class_] + sd->indexed_bonus.magic_addclass[CLASS_ALL]) / 100;
-				if (sd->status.weapon == W_2HSTAFF)// 2-Handed Staff Mastery
-					cardfix = cardfix * (100 + pc_checkskill(sd, AG_TWOHANDSTAFF)) / 100;
 				for (const auto &it : sd->add_mdmg) {
 					if (it.id == t_class) {
 						cardfix = cardfix * (100 + it.val) / 100;
@@ -7146,6 +7144,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 		case TR_METALIC_FURY:// Deals up to 5 additional hits. But what affects the number of hits? [Rytech]
 			ad.div_ = min(ad.div_ + mflag, 5); // Number of hits doesn't go above 5.
 			break;
+		case AG_CRIMSON_ARROW_ATK:
+			if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
+				ad.div_ = 2;
+			}
+			break;
 	}
 
 	//Set miscellaneous data that needs be filled
@@ -7745,7 +7748,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						RE_LVL_DMOD(100);
 						break;
 					case AG_MYSTERY_ILLUSION:
-						skillratio += -100 + 250 * skill_lv + 5 * sstatus->spl;
+						skillratio += -100 + 500 * skill_lv + 5 * sstatus->spl;
 						RE_LVL_DMOD(100);
 						break;
 					case AG_VIOLENT_QUAKE_ATK:
@@ -7820,20 +7823,38 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						RE_LVL_DMOD(100);
 						break;
 					case AG_ROCK_DOWN:
-						skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl;
+						skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
+
+						if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
+							skillratio += 250 * skill_lv;
+						}
+
 						RE_LVL_DMOD(100);
 						break;
 					case AG_STORM_CANNON:
 						skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
+
+						if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
+							skillratio += 250 * skill_lv;
+						}
+
 						RE_LVL_DMOD(100);
 						break;
 					case AG_CRIMSON_ARROW:
-					case AG_CRIMSON_ARROW_ATK:
 						skillratio += -100 + 300 * skill_lv + 5 * sstatus->spl;
 						RE_LVL_DMOD(100);
 						break;
+					case AG_CRIMSON_ARROW_ATK:
+						skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
+						RE_LVL_DMOD(100);
+						break;
 					case AG_FROZEN_SLASH:
-						skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl;
+						skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl;
+
+						if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){
+							skillratio += 250 * skill_lv;
+						}
+
 						RE_LVL_DMOD(100);
 						break;
 					case IG_JUDGEMENT_CROSS:

+ 2 - 1
src/map/skill.cpp

@@ -5390,7 +5390,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 				skill_get_type(skill_id), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY);
 		}
 		if (skill_id == AG_CRIMSON_ARROW)
-			skill_attack(skill_get_type(AG_CRIMSON_ARROW_ATK), src, src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, flag|SD_LEVEL|SD_ANIMATION);
+			skill_castend_damage_id(src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, flag|SD_LEVEL|SD_ANIMATION);
 		break;
 
 	case MO_INVESTIGATE:
@@ -5612,6 +5612,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case DK_SERVANT_W_DEMOL:
 	case DK_MADNESS_CRUSHER:
 	case DK_HACKANDSLASHER:
+	case AG_CRIMSON_ARROW_ATK:
 	case AG_DESTRUCTIVE_HURRICANE:
 	case AG_SOUL_VC_STRIKE:
 	case AG_CRYSTAL_IMPACT:

+ 5 - 0
src/map/status.cpp

@@ -4366,6 +4366,11 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt)
 		base_status->smatk += skill * 3;
 	}
 
+	// 2-Handed Staff Mastery
+	if( sd->status.weapon == W_2HSTAFF && ( skill = pc_checkskill( sd, AG_TWOHANDSTAFF ) ) > 0 ){
+		base_status->smatk += skill * 2;
+	}
+
 // ----- PHYSICAL RESISTANCE CALCULATION -----
 	if ((skill = pc_checkskill_imperial_guard(sd, 1)) > 0)// IG_SHIELD_MASTERY
 		base_status->res += skill * 3;