Ver Fonte

Rebalance Imperial Guard 20221221 (#8078)

* Cross Rain
- Reduces cooldown from 4.5 seconds to 2.4 seconds.
- Reduces skill duration from 4.5 seconds to 2.4 seconds based on level 10.
- Increases factor weight of Spear & Sword Mastery skill level in skill formula from 50/100 (Holy Shield) to 100/150 (Holy Shield) based on level 10.
- Increases factor weight of SPL in skill formula from 5 to 7.
- Reduces AP recovery rate from 7 to 4.

* Shield Shooting
- Reworks skill to dealing damage to surrounding enemies within 7 x 7 cells around the target.
- Reduces cast range from 11 cells to 9 cells.
- Increases factor weight of Shield Mastery skill level in skill formula from 75 to 250 based on level 5.
- Increases base damage from 11900%Atk to 14900%Atk based on level 5.
- Increases factor weight of POW in skill formula from 5 to 7.
- Increases factor weight of shield refine rate in skill formula from 4 to 25.
Atemo há 1 ano atrás
pai
commit
f22e423677
3 ficheiros alterados com 31 adições e 16 exclusões
  1. 16 3
      db/re/skill_db.yml
  2. 10 7
      src/map/battle.cpp
  3. 5 6
      src/map/skill.cpp

+ 16 - 3
db/re/skill_db.yml

@@ -37057,11 +37057,24 @@ Body:
     MaxLevel: 5
     Type: Weapon
     TargetType: Attack
+    DamageFlags:
+      Splash: true
     Range: 9
     Hit: Multi_Hit
     HitCount: -7
     Element: Weapon
     GiveAp: 3
+    SplashArea:
+      - Level: 1
+        Area: 2
+      - Level: 2
+        Area: 2
+      - Level: 3
+        Area: 2
+      - Level: 4
+        Area: 3
+      - Level: 5
+        Area: 3
     CastCancel: true
     CastTime: 500
     AfterCastActDelay: 500
@@ -37137,12 +37150,12 @@ Body:
     Hit: Single
     HitCount: 1
     Element: Holy
-    GiveAp: 7
+    GiveAp: 4
     CastCancel: true
     CastTime: 1000
     AfterCastActDelay: 150
-    Duration1: 4500
-    Cooldown: 4500
+    Duration1: 2400
+    Cooldown: 2400
     FixedCastTime: 1500
     Requires:
       SpCost:

+ 10 - 7
src/map/battle.cpp

@@ -5496,20 +5496,23 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list *
 				skillratio += skillratio * i / 100;
 			break;
 		case IG_SHIELD_SHOOTING:
-			skillratio += -100 + 1400 + 2100 * skill_lv + 5 * sstatus->pow;
-			skillratio += skill_lv * 15 * pc_checkskill( sd, IG_SHIELD_MASTERY );
+			skillratio += -100 + 650 + 2850 * skill_lv;
+			skillratio += 7 * sstatus->pow;
+			skillratio += skill_lv * 50 * pc_checkskill( sd, IG_SHIELD_MASTERY );
 			if (sd) { // Damage affected by the shield's weight and refine. Need official formula. [Rytech]
 				short index = sd->equip_index[EQI_HAND_L];
 
 				if (index >= 0 && sd->inventory_data[index] && sd->inventory_data[index]->type == IT_ARMOR) {
 					skillratio += (sd->inventory_data[index]->weight * 7 / 6) / 10;
-					skillratio += sd->inventory.u.items_inventory[index].refine * 4;
+					skillratio += sd->inventory.u.items_inventory[index].refine * 25;
 				}
 			}
 			RE_LVL_DMOD(100);
 			break;
 		case IG_OVERSLASH:
-			skillratio += -100 + (120 + pc_checkskill(sd, IG_SPEAR_SWORD_M) * 10) * skill_lv + 5 * sstatus->pow;
+			skillratio += -100 + 160 * skill_lv;
+			skillratio += pc_checkskill(sd, IG_SPEAR_SWORD_M) * 25 * skill_lv;
+			skillratio += 7 * sstatus->pow;
 			RE_LVL_DMOD(100);
 			if ((i = pc_checkskill_imperial_guard(sd, 3)) > 0)
 				skillratio += skillratio * i / 100;
@@ -7995,11 +7998,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list
 						break;
 					case IG_CROSS_RAIN:
 						if( sc && sc->getSCE( SC_HOLY_S ) ){
-							skillratio += -100 + ( 450 + 10 * pc_checkskill( sd, IG_SPEAR_SWORD_M ) ) * skill_lv;
+							skillratio += -100 + ( 450 + 15 * pc_checkskill( sd, IG_SPEAR_SWORD_M ) ) * skill_lv;
 						}else{
-							skillratio += -100 + ( 320 + 5 * pc_checkskill( sd, IG_SPEAR_SWORD_M ) ) * skill_lv;
+							skillratio += -100 + ( 320 + 10 * pc_checkskill( sd, IG_SPEAR_SWORD_M ) ) * skill_lv;
 						}
-						skillratio += 5 * sstatus->spl;
+						skillratio += 7 * sstatus->spl;
 						RE_LVL_DMOD(100);
 						break;
 					case CD_ARBITRIUM:

+ 5 - 6
src/map/skill.cpp

@@ -5218,12 +5218,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case MT_TRIPLE_LASER:
 		skill_attack(BF_WEAPON,src,src,bl,skill_id,skill_lv,tick,flag);
 		break;
-
-	case IG_SHIELD_SHOOTING:
-		clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
-		skill_attack(BF_WEAPON, src, src, bl, skill_id, skill_lv, tick, flag);
-		sc_start(src, src, SC_SHIELD_POWER, 100, skill_lv, skill_get_time(skill_id, skill_lv));
-		break;
 	case DK_DRAGONIC_AURA:
 	case DK_STORMSLASH:
 	case IG_GRAND_JUDGEMENT:
@@ -5681,6 +5675,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 	case BO_EXPLOSIVE_POWDER:
 	case BO_MAYHEMIC_THORNS:
 	case NPC_WIDECRITICALWOUND:
+	case IG_SHIELD_SHOOTING:
 		if( flag&1 ) {//Recursive invocation
 			int sflag = skill_area_temp[0] & 0xFFF;
 			int heal = 0;
@@ -5877,6 +5872,10 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint
 					// 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;
+				case IG_SHIELD_SHOOTING:
+					clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
+					sc_start(src, src, SC_SHIELD_POWER, 100, skill_lv, skill_get_time(skill_id, skill_lv));
+					break;
 			}
 
 			// if skill damage should be split among targets, count them