Forráskód Böngészése

4th Improvement - Meister (#7712)

munkrej 2 éve
szülő
commit
e1e19a6d06
7 módosított fájl, 101 hozzáadás és 35 törlés
  1. 50 23
      db/re/skill_db.yml
  2. 11 0
      db/re/status.yml
  3. 13 8
      src/map/battle.cpp
  4. 2 0
      src/map/script_constants.hpp
  5. 13 1
      src/map/skill.cpp
  6. 9 3
      src/map/status.cpp
  7. 3 0
      src/map/status.hpp

+ 50 - 23
db/re/skill_db.yml

@@ -22460,15 +22460,15 @@ Body:
     Element: Weapon
     CastTime:
       - Level: 1
-        Time: 100
+        Time: 40
       - Level: 2
-        Time: 200
+        Time: 80
       - Level: 3
-        Time: 300
+        Time: 120
       - Level: 4
-        Time: 400
+        Time: 160
       - Level: 5
-        Time: 500
+        Time: 200
     Requires:
       SpCost:
         - Level: 1
@@ -22645,11 +22645,11 @@ Body:
       - Level: 2
         Area: 1
       - Level: 3
-        Area: 1
+        Area: 2
       - Level: 4
         Area: 2
       - Level: 5
-        Area: 2
+        Area: 3
     CastTime:
       - Level: 1
         Time: 1000
@@ -22661,18 +22661,18 @@ Body:
         Time: 1800
       - Level: 5
         Time: 2000
-    AfterCastActDelay: 1000
+    AfterCastActDelay: 500
     Cooldown:
       - Level: 1
-        Time: 100
+        Time: 50
       - Level: 2
-        Time: 150
+        Time: 75
       - Level: 3
-        Time: 200
+        Time: 100
       - Level: 4
-        Time: 250
+        Time: 125
       - Level: 5
-        Time: 300 
+        Time: 150
     FixedCastTime:
       - Level: 1
         Time: 500
@@ -38025,11 +38025,11 @@ Body:
         Area: 2
       - Level: 5
         Area: 3
-    GiveAp: 2
+    GiveAp: 3
     CastCancel: true
     AfterCastActDelay: 500
-    Duration1: 5000
-    Cooldown: 2000
+    Duration1: 10000
+    Cooldown: 1000
     Requires:
       SpCost:
         - Level: 1
@@ -38084,9 +38084,32 @@ Body:
     CastCancel: true
     AfterCastActDelay: 500
     Cooldown: 60000
+    Duration1: 30000
+    Duration2: 
+      - Level: 1
+        Time: 30000
+      - Level: 2
+        Time: 60000
+      - Level: 3
+        Time: 90000
+      - Level: 4
+        Time: 120000
+      - Level: 5
+        Time: 150000
+      - Level: 6
+        Time: 180000
+      - Level: 7
+        Time: 210000
+      - Level: 8
+        Time: 240000
+      - Level: 9
+        Time: 270000
+      - Level: 10
+        Time: 300000
     Requires:
       SpCost: 150
       ApCost: 150
+    Status: Rush_Quake2
   - Id: 5297
     Name: MT_M_MACHINE
     Description: Manufacture Machine
@@ -38234,6 +38257,7 @@ Body:
     ActiveInstance: 1
     GiveAp: 20
     CastCancel: true
+    CastTime: 1000
     AfterCastActDelay: 500
     Duration1:
       - Level: 1
@@ -38244,8 +38268,8 @@ Body:
         Time: 240000
       - Level: 4
         Time: 300000
-    Cooldown: 60000
-    FixedCastTime: 3000
+    Cooldown: 30000
+    FixedCastTime: 1000
     Requires:
       SpCost:
         - Level: 1
@@ -38274,6 +38298,7 @@ Body:
     ActiveInstance: 1
     GiveAp: 20
     CastCancel: true
+    CastTime: 1000
     AfterCastActDelay: 500
     Duration1:
       - Level: 1
@@ -38284,8 +38309,8 @@ Body:
         Time: 240000
       - Level: 4
         Time: 300000
-    Cooldown: 60000
-    FixedCastTime: 3000
+    Cooldown: 30000
+    FixedCastTime: 1000
     Requires:
       SpCost:
         - Level: 1
@@ -38314,6 +38339,7 @@ Body:
     ActiveInstance: 1
     GiveAp: 20
     CastCancel: true
+    CastTime: 1000
     AfterCastActDelay: 500
     Duration1:
       - Level: 1
@@ -38324,8 +38350,8 @@ Body:
         Time: 240000
       - Level: 4
         Time: 300000
-    Cooldown: 60000
-    FixedCastTime: 3000
+    Cooldown: 30000
+    FixedCastTime: 1000
     Requires:
       SpCost:
         - Level: 1
@@ -38353,6 +38379,7 @@ Body:
     HitCount: 1
     ActiveInstance: 1
     CastCancel: true
+    CastTime: 1000
     AfterCastActDelay: 500
     Duration1:
       - Level: 1
@@ -38364,7 +38391,7 @@ Body:
       - Level: 4
         Time: 300000
     Cooldown: 60000
-    FixedCastTime: 3000
+    FixedCastTime: 1000
     Requires:
       SpCost:
         - Level: 1

+ 11 - 0
db/re/status.yml

@@ -8761,3 +8761,14 @@ Body:
       NoClearance: true
     EndOnStart:
       Relieve_on: true
+  - Status: Rush_Quake1
+    Icon: EFST_RUSH_QUAKE1
+    DurationLookup: MT_RUSH_QUAKE
+    Flags:
+      BlEffect: true
+      Debuff: true
+  - Status: Rush_Quake2
+    Icon: EFST_RUSH_QUAKE2
+    DurationLookup: MT_RUSH_QUAKE
+    CalcFlags:
+      All: true

+ 13 - 8
src/map/battle.cpp

@@ -1638,6 +1638,11 @@ int64 battle_calc_damage(struct block_list *src,struct block_list *bl,struct Dam
 		}
 		if (tsc->getSCE(SC_HOLY_OIL) && (flag&(BF_LONG|BF_WEAPON)) == (BF_LONG|BF_WEAPON))
 			damage += damage * 50 / 100;// Need official adjustment. [Rytech]
+
+		if( tsc->getSCE( SC_RUSH_QUAKE1 ) && ( flag&BF_WEAPON ) == BF_WEAPON ){
+			damage += damage * 50 / 100;
+		}
+
 		if (tsc->getSCE(SC_SHADOW_SCAR)) // !TODO: Need official adjustment for this too.
 			damage += damage * (3 * tsc->getSCE(SC_SHADOW_SCAR)->val1) / 100;
 
@@ -4825,7 +4830,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			skillratio += 50 * skill_lv;
 			break;
 		case NC_BOOSTKNUCKLE:
-			skillratio += 200 * skill_lv + sstatus->dex / 6; // !TODO: What's the DEX bonus?
+			skillratio += -100 + 260 * skill_lv + sstatus->dex; // !TODO: What's the DEX bonus?
 			RE_LVL_DMOD(100);
 			break;
 		case NC_PILEBUNKER:
@@ -4833,7 +4838,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			RE_LVL_DMOD(100);
 			break;
 		case NC_VULCANARM:
-			skillratio += -100 + 140 * skill_lv + sstatus->dex / 6; // !TODO: What's the DEX bonus?
+			skillratio += -100 + 230 * skill_lv + sstatus->dex; // !TODO: What's the DEX bonus?
 			RE_LVL_DMOD(100);
 			break;
 		case NC_FLAMELAUNCHER:
@@ -4842,7 +4847,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			RE_LVL_DMOD(150);
 			break;
 		case NC_ARMSCANNON:
-			skillratio += -100 + 400 + 300 * skill_lv;
+			skillratio += -100 + 400 + 350 * skill_lv;
 			RE_LVL_DMOD(100);
 			break;
 		case NC_AXEBOOMERANG:
@@ -4865,10 +4870,10 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			skillratio += 350 + 50 * skill_lv;
 			break;
 		case NC_AXETORNADO:
-			skillratio += -100 + 200 + 180 * skill_lv + sstatus->vit / 6; // !TODO: What's the VIT bonus?
+			skillratio += -100 + 200 + 180 * skill_lv + sstatus->vit * 2;
+			if (sc && sc->getSCE(SC_AXE_STOMP))
+				skillratio += 380;
 			RE_LVL_DMOD(100);
-			if (sc && sc->getSCE(SC_AXE_STOMP))// Whats the official increase? [Rytech]
-				skillratio += skillratio * 50 / 100;
 			break;
 		case SC_FATALMENACE:
 			skillratio += 120 * skill_lv + sstatus->agi / 6; // !TODO: What's the AGI bonus?
@@ -5496,7 +5501,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 			RE_LVL_DMOD(100);
 			break;
 		case MT_AXE_STOMP:
-			skillratio += -100 + 350 * skill_lv + 5 * sstatus->pow;
+			skillratio += -100 + 400 * skill_lv + 5 * sstatus->pow;
 			RE_LVL_DMOD(100);
 			break;
 		case MT_RUSH_QUAKE:
@@ -6573,7 +6578,7 @@ static struct Damage initialize_weapon_data(struct block_list *src, struct block
 				break;
 			case MT_AXE_STOMP:
 				if (sd && sd->status.weapon == W_2HAXE)
-					wd.div_ = 2;
+					wd.div_ = 3;
 				break;
 		}
 	} else {

+ 2 - 0
src/map/script_constants.hpp

@@ -1888,6 +1888,8 @@
 	export_constant(SC_IMMUNE_PROPERTY_UNDEAD);
 	export_constant(SC_RELIEVE_ON);
 	export_constant(SC_RELIEVE_OFF);
+	export_constant(SC_RUSH_QUAKE1);
+	export_constant(SC_RUSH_QUAKE2);
 
 #ifdef RENEWAL
 	export_constant(SC_EXTREMITYFIST2);

+ 13 - 1
src/map/skill.cpp

@@ -2209,6 +2209,9 @@ int skill_additional_effect(struct block_list* src, struct block_list *bl, uint1
 	case EM_TERRA_DRIVE:
 		sc_start(src, bl, SC_HANDICAPSTATE_CRYSTALLIZATION, 40 + 10 * skill_lv, skill_lv, skill_get_time2(skill_id, skill_lv));
 		break;
+	case MT_RUSH_QUAKE:
+		sc_start( src, bl, SC_RUSH_QUAKE1, 100, skill_lv, skill_get_time( skill_id, skill_lv ) );
+		break;
 	} //end switch skill_id
 
 	if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai && md->special_state.ai != AI_ABR && md->special_state.ai != AI_BIONIC)
@@ -5751,7 +5754,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 						skill_id = SU_LUNATICCARROTBEAT2;
 					break;
 				case DK_SERVANT_W_PHANTOM:
-				case MT_RUSH_QUAKE:
 					// Jump to the target before attacking.
 					if (skill_check_unit_movepos(5, src, bl->x, bl->y, 0, 1))
 						skill_blown(src, src, 1, (map_calc_dir(bl, src->x, src->y) + 4) % 8, BLOWN_NONE);
@@ -5828,6 +5830,16 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 					if (tsc && tsc->getSCE(SC_SOUNDBLEND))
 						skill_area_temp[0] = 1 + rnd()%4;
 					break;
+				case MT_RUSH_QUAKE:
+					// Jump to the target before attacking.
+					if( skill_check_unit_movepos( 5, src, bl->x, bl->y, 0, 1 ) ){
+						skill_blown( src, src, 1, direction_opposite( static_cast<enum directions>( map_calc_dir( bl, src->x, src->y ) ) ), BLOWN_NONE);
+					}
+					clif_skill_nodamage( src, bl, skill_id, skill_lv, 1 ); // Trigger animation
+					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 ) );
+					break;
 			}
 
 			// if skill damage should be split among targets, count them

+ 9 - 3
src/map/status.cpp

@@ -2864,9 +2864,9 @@ int status_calc_mob_(struct mob_data* md, uint8 opt)
 						// Its unknown how the summoner's stats affects the ABR's stats.
 						// I decided to do something similar to elementals for now until I know.
 						// Also added hit increase from ABR-Mastery for balance reasons. [Rytech]
-						status->max_hp = (5000 + 2000 * abr_mastery) * mstatus->vit / 100;
-						status->rhw.atk = (2 * mstatus->batk + 500 + 200 * abr_mastery) * 70 / 100;
-						status->rhw.atk2 = 2 * mstatus->batk + 500 + 200 * abr_mastery;
+						status->max_hp = ( 5000 + 40000 * abr_mastery ) * mstatus->vit / 100;
+						status->rhw.atk = ( 2 * mstatus->batk + 200 + 600 * abr_mastery ) * 70 / 100;
+						status->rhw.atk2 = 2 * mstatus->batk + 200 + 600 * abr_mastery;
 						status->def = mstatus->def + 20 * abr_mastery;
 						status->mdef = mstatus->mdef + 4 * abr_mastery;
 						status->hit = mstatus->hit + 5 * abr_mastery / 2;
@@ -4723,6 +4723,12 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt)
 			sd->right_weapon.addrace[RC_DEMIHUMAN] += 50;
 			sd->left_weapon.addrace[RC_ANGEL] += 50;
 		}
+
+		if( sc->getSCE( SC_RUSH_QUAKE2 ) ){
+			sd->bonus.short_attack_atk_rate += 5 * sc->getSCE( SC_RUSH_QUAKE2 )->val1;
+			sd->bonus.long_attack_atk_rate += 5 * sc->getSCE( SC_RUSH_QUAKE2 )->val1;
+		}
+
 		if (sc->getSCE(SC_DEADLY_DEFEASANCE))
 			sd->special_state.no_magic_damage = 0;
 		if (sc->getSCE(SC_CLIMAX_DES_HU))

+ 3 - 0
src/map/status.hpp

@@ -1280,6 +1280,9 @@ enum sc_type : int16 {
 	SC_RELIEVE_ON,
 	SC_RELIEVE_OFF,
 
+	SC_RUSH_QUAKE1,
+	SC_RUSH_QUAKE2,
+
 #ifdef RENEWAL
 	SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled
 #endif