From f22e423677f86b4d3080e1ffee5dbfd5d1690058 Mon Sep 17 00:00:00 2001 From: Atemo Date: Tue, 2 Jan 2024 14:32:39 +0100 Subject: [PATCH] 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. --- db/re/skill_db.yml | 19 ++++++++++++++++--- src/map/battle.cpp | 17 ++++++++++------- src/map/skill.cpp | 11 +++++------ 3 files changed, 31 insertions(+), 16 deletions(-) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 897c4c57cf..16998dcb44 100644 --- a/db/re/skill_db.yml +++ b/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: diff --git a/src/map/battle.cpp b/src/map/battle.cpp index aeece130fd..ef94121760 100644 --- a/src/map/battle.cpp +++ b/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: diff --git a/src/map/skill.cpp b/src/map/skill.cpp index af15215c03..13f650e490 100755 --- a/src/map/skill.cpp +++ b/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