From b3ddb4511c6904ab775789db304042e727cb2853 Mon Sep 17 00:00:00 2001 From: Atemo Date: Thu, 10 Aug 2023 17:56:58 +0200 Subject: [PATCH] Rebalance dragon knight 20220608 (#7891) * Vigor - Changes bonus flat damage from +200% regardless of skill level to scaling with skill level up to +250% based on level 10. - Increases bonus damage against demihuman and angel race monsters from 50% to 100%. - Reduces AP consumption from 150 to 125. - Increases HP consumption on each attack from 2 to 10 based on level 10. * Dragonic Aura - Reduces delay after skill from 1 second to 0.5 seconds. - Increases damage from 9500%/14000%(demihuman and angel race)Atk to 36500%/38000%(demihuman and angel race)Atk based on level 10. * Madness Crusher - Removes 0.4 seconds variable casting time. - Increases fixed casting time from 0.4 seconds to 0.5 seconds. - Increases damage from 1350%Atk to 5150%Atk based on level 5 (using level 5 weapon and weapon weight is 150). (additional note: 4400% Atk on level 5 without weapon weight) - Increases SP consumption from 50 to 68 based on level 5. - Increases AP recovery rate from 2 to 3. - Increases factor weight of POW in skill formula from 5 to 7. * Storm Slash - Reduces cooldown from 0.35 seconds to 0.3 seconds. - Increases AP recovery rate from 1 to 2. - Increases damage from 600%Atk to 950%Atk per hit based on level 5. - Increases the chance to double skill damage while under Giant Growth buff from 15% to 30%. * Servant Weapon - Demolition - Reduces cooldown from 3 seconds to 0.5 seconds. - Reduces AP recovery rate from 3 to 2. - Increases damage from 750%Atk to 2500%Atk per hit based on level 5. * Servant Weapon - Phantom - Removes 0.8 seconds variable casting time. - Reduces cooldown from 2 seconds to 0.5 seconds. - Removes 0.8 seconds delay after skill. - Increases damage from 600%Atk to 1700%Atk per hit based on level 5. * Servant Weapon - Increases number of hit from 1 hit to 2 hits. - Increases damage from 450%Atk to 2500%Atk per hit based on level 5. * Hack and Slasher - Changes damage logic from 2 split hits to 2 cumulative hits. - Increases damage from 3000%Atk to 7300%Atk per hit based on level 10. - Increases cooldown from 0.3 seconds to 0.7 seconds. - Reduces delay after skill from 0.5 seconds to 0.25 seconds. - Increases SP consumption from 70 to 72 based on level 10. - Increases factor weight of POW in skill formula from 5 to 7. Thanks to @aleos89 ! --- db/re/skill_db.yml | 65 ++++++++++++++++++++++------------------------ src/map/battle.cpp | 25 ++++++++++-------- src/map/skill.cpp | 2 +- src/map/status.cpp | 15 +++-------- 4 files changed, 49 insertions(+), 58 deletions(-) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 2bf644e510..ef5c8eab21 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -34861,8 +34861,6 @@ Body: TargetType: Self DamageFlags: NoDamage: true - Hit: Single - HitCount: 1 GiveAp: - Level: 1 Amount: 6 @@ -34931,8 +34929,8 @@ Body: Splash: true Critical: true Range: 1 - Hit: Single - HitCount: 1 + Hit: Multi_Hit + HitCount: 2 Element: Weapon Requires: SpCost: 1 @@ -34978,9 +34976,8 @@ Body: Element: Weapon SplashArea: 2 CastCancel: true - AfterCastActDelay: 500 Duration1: 20000 - Cooldown: 2000 + Cooldown: 500 FixedCastTime: 500 Requires: SpCost: 40 @@ -34999,10 +34996,10 @@ Body: HitCount: 5 Element: Weapon SplashArea: 6 - GiveAp: 3 + GiveAp: 2 CastCancel: true AfterCastActDelay: 500 - Cooldown: 3000 + Cooldown: 500 Requires: SpCost: - Level: 1 @@ -35090,8 +35087,8 @@ Body: DamageFlags: Splash: true Range: 2 - Hit: Single - HitCount: 1 + Hit: Multi_Hit + HitCount: 2 Element: Weapon SplashArea: - Level: 1 @@ -35115,30 +35112,30 @@ Body: - Level: 10 Area: 4 CastCancel: true - AfterCastActDelay: 500 - Cooldown: 300 + AfterCastActDelay: 250 + Cooldown: 700 Requires: SpCost: - Level: 1 - Amount: 34 + Amount: 36 - Level: 2 - Amount: 38 + Amount: 40 - Level: 3 - Amount: 42 + Amount: 44 - Level: 4 - Amount: 46 + Amount: 48 - Level: 5 - Amount: 50 + Amount: 52 - Level: 6 - Amount: 54 + Amount: 56 - Level: 7 - Amount: 58 + Amount: 60 - Level: 8 - Amount: 62 + Amount: 64 - Level: 9 - Amount: 66 + Amount: 68 - Level: 10 - Amount: 70 + Amount: 72 Weapon: 2hSword: true 2hSpear: true @@ -35151,8 +35148,8 @@ Body: DamageFlags: Splash: true Range: 2 - Hit: Single - HitCount: 1 + Hit: Multi_Hit + HitCount: 2 Element: Weapon SplashArea: - Level: 1 @@ -35188,7 +35185,7 @@ Body: HitCount: 1 Element: Weapon CastCancel: true - AfterCastActDelay: 1000 + AfterCastActDelay: 500 Duration1: 300000 Cooldown: 60000 Requires: @@ -35218,7 +35215,7 @@ Body: Area: 3 - Level: 5 Area: 3 - GiveAp: 2 + GiveAp: 3 CastCancel: true AfterCastActDelay: 500 Cooldown: 350 @@ -35226,15 +35223,15 @@ Body: Requires: SpCost: - Level: 1 - Amount: 34 + Amount: 36 - Level: 2 - Amount: 38 + Amount: 44 - Level: 3 - Amount: 42 + Amount: 52 - Level: 4 - Amount: 46 + Amount: 60 - Level: 5 - Amount: 50 + Amount: 68 Weapon: 2hSword: true 2hSpear: true @@ -35272,7 +35269,7 @@ Body: Cooldown: 60000 Requires: SpCost: 100 - ApCost: 150 + ApCost: 125 Status: Vigor - Id: 5213 Name: DK_STORMSLASH @@ -35296,10 +35293,10 @@ Body: - Level: 5 Count: 5 Element: Weapon - GiveAp: 1 + GiveAp: 2 CastCancel: true AfterCastActDelay: 500 - Cooldown: 350 + Cooldown: 300 Requires: SpCost: - Level: 1 diff --git a/src/map/battle.cpp b/src/map/battle.cpp index a3ce41b849..13de470787 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -5363,31 +5363,31 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * skillratio += skillratio * sc->getSCE(SC_LIGHTOFSTAR)->val2 / 100; break; case DK_SERVANTWEAPON_ATK: - skillratio += -100 + 200 + 50 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 500 + 400 * skill_lv + 5 * sstatus->pow; RE_LVL_DMOD(100); break; case DK_SERVANT_W_PHANTOM: - skillratio += 100 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 200 + 300 * skill_lv + 5 * sstatus->pow; RE_LVL_DMOD(100); break; case DK_SERVANT_W_DEMOL: - skillratio += 600 + 120 * skill_lv; + skillratio += -100 + 500 * skill_lv; RE_LVL_DMOD(100); break; case DK_HACKANDSLASHER: case DK_HACKANDSLASHER_ATK: - skillratio += -100 + 500 + 250 * skill_lv; - skillratio += 5 * sstatus->pow; + skillratio += -100 + 300 + 700 * skill_lv; + skillratio += 7 * sstatus->pow; RE_LVL_DMOD(100); break; case DK_DRAGONIC_AURA: - skillratio += 950 * skill_lv + 10 * sstatus->pow; + skillratio += 3650 * skill_lv + 10 * sstatus->pow; if (tstatus->race == RC_DEMIHUMAN || tstatus->race == RC_ANGEL) - skillratio += 450 * skill_lv; + skillratio += 150 * skill_lv; RE_LVL_DMOD(100); break; case DK_MADNESS_CRUSHER: - skillratio += -100 + 600 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 400 + 800 * skill_lv + 7 * sstatus->pow; if( sd != nullptr ){ int16 index = sd->equip_index[EQI_HAND_R]; @@ -5400,9 +5400,9 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * skillratio *= 2; break; case DK_STORMSLASH: - skillratio += -100 + 120 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 100 + 170 * skill_lv + 5 * sstatus->pow; RE_LVL_DMOD(100); - if (sc && sc->getSCE(SC_GIANTGROWTH)) + if (sc && sc->getSCE(SC_GIANTGROWTH) && rnd()%100 < 30) skillratio *= 2; break; case IQ_OLEUM_SANCTUM: @@ -9234,7 +9234,10 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t wd.damage += wd.damage * 150 / 100; // 2.5 times damage if( sc->getSCE( SC_VIGOR ) && ( wd.flag&BF_SHORT ) && !is_infinite_defense( target, wd.flag ) && !vellum_damage ){ - int mod = 200; + int mod = 100 + sc->getSCE(SC_VIGOR)->val1 * 15; + + if (tstatus->race == RC_DEMIHUMAN || tstatus->race == RC_ANGEL) + mod += sc->getSCE(SC_VIGOR)->val1 * 10; wd.damage += wd.damage * mod / 100; } diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 1d85c69d54..88b4b302e0 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -5199,7 +5199,6 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case RL_BANISHING_BUSTER: case RL_SLUGSHOT: case RL_AM_BLAST: - case DK_SERVANTWEAPON_ATK: case BO_ACIDIFIED_ZONE_WATER_ATK: case BO_ACIDIFIED_ZONE_GROUND_ATK: case BO_ACIDIFIED_ZONE_WIND_ATK: @@ -5611,6 +5610,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case SP_CURSEEXPLOSION: case SP_SHA: case SP_SWHOO: + case DK_SERVANTWEAPON_ATK: case DK_SERVANT_W_PHANTOM: case DK_SERVANT_W_DEMOL: case DK_MADNESS_CRUSHER: diff --git a/src/map/status.cpp b/src/map/status.cpp index 689977106d..99adaca039 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -4723,18 +4723,11 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt) } if (sc->getSCE(SC_STRIKING)) sd->bonus.perfect_hit += 20 + 10 * pc_checkskill(sd, SO_STRIKING); - if (sc->getSCE(SC_VIGOR)) { - // Skill desc says increases physical damage. Supposed to affect damage from base ATK right??? - // Because this is only boosting the ATK from the equipped weapon and not from base ATK. [Rytech] - 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)) @@ -12532,11 +12525,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_RELIEVE_ON: val2 = min(10*val1, 99); // % damage received reduced from 10 * skill lvl up to 99% break; - case SC_VIGOR: { - uint8 hp_loss[10] = { 15, 14, 12, 11, 9, 8, 6, 5, 3, 2 }; - - val2 = hp_loss[val1- 1]; - } + case SC_VIGOR: + val2 = 100 - 10 * (val1 - 1); // HP consumption with each attack is reduced by skill lvl + val2 = max(val2, 0); break; case SC_POWERFUL_FAITH: val2 = 5 + 5 * val1;// ATK Increase