diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index b91461eb7b..e0ae4f41c8 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -34931,17 +34931,7 @@ Body: Time: 2000 - Level: 5 Time: 1000 - Cooldown: - - Level: 1 - Time: 30000 - - Level: 2 - Time: 60000 - - Level: 3 - Time: 90000 - - Level: 4 - Time: 120000 - - Level: 5 - Time: 150000 + Cooldown: 60000 Requires: SpCost: - Level: 1 @@ -34966,7 +34956,7 @@ Body: Critical: true Range: 1 Hit: Multi_Hit - HitCount: 2 + HitCount: 3 Element: Weapon Requires: SpCost: 1 diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 24a5fdaf3a..e3dc03a737 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -5432,7 +5432,8 @@ 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 + 500 + 400 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 450 + 800 * skill_lv; + skillratio += 5 * sstatus->pow; RE_LVL_DMOD(100); break; case DK_SERVANT_W_PHANTOM: @@ -5445,7 +5446,7 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * break; case DK_HACKANDSLASHER: case DK_HACKANDSLASHER_ATK: - skillratio += -100 + 200 + 750 * skill_lv; + skillratio += -100 + 350 + 820 * skill_lv; skillratio += 7 * sstatus->pow; RE_LVL_DMOD(100); break; @@ -5456,7 +5457,8 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * RE_LVL_DMOD(100); break; case DK_MADNESS_CRUSHER: - skillratio += -100 + 350 + 1600 * skill_lv + 10 * sstatus->pow; + skillratio += -100 + 1000 + 3800 * skill_lv; + skillratio += 10 * sstatus->pow; if( sd != nullptr ){ int16 index = sd->equip_index[EQI_HAND_R]; @@ -5469,18 +5471,25 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * skillratio *= 2; break; case DK_STORMSLASH: - skillratio += -100 + 200 + 400 * skill_lv + 5 * sstatus->pow; + skillratio += -100 + 300 + 750 * skill_lv; + skillratio += 5 * sstatus->pow; RE_LVL_DMOD(100); if (sc && sc->getSCE(SC_GIANTGROWTH) && rnd_chance(60, 100)) skillratio *= 2; break; case DK_DRAGONIC_BREATH: skillratio += -100 + 50 + 350 * skill_lv; - skillratio += 5 * sstatus->pow; - //TODO: needs official HP/SP scaling [Muh] - skillratio += sstatus->max_hp / 500 + status_get_max_sp(src) / 40; - if (sc && sc->getSCE(SC_DRAGONIC_AURA)) - skillratio += sstatus->max_hp / 500 + status_get_max_sp(src) / 40; + skillratio += 7 * sstatus->pow; + + if (sc && sc->getSCE(SC_DRAGONIC_AURA)) { + skillratio += 3 * sstatus->pow; + skillratio += (skill_lv * (sstatus->max_hp * 25 / 100) * 5) / 100; // Skill level x 0.05 x ((MaxHP / 4) + (MaxSP / 2)) + skillratio += (skill_lv * (sstatus->max_sp * 50 / 100) * 5) / 100; + } else { + skillratio += (skill_lv * (sstatus->max_hp * 25 / 100) * 7) / 100; // Skill level x 0.07 x ((MaxHP / 4) + (MaxSP / 2)) + skillratio += (skill_lv * (sstatus->max_sp * 50 / 100) * 7) / 100; + } + RE_LVL_DMOD(100); break; case IQ_OLEUM_SANCTUM: @@ -9718,7 +9727,7 @@ enum damage_lv battle_weapon_attack(struct block_list* src, struct block_list* t } if( sc ){ - if( sc->getSCE( SC_SERVANTWEAPON ) && sd->servantball > 0 && rnd() % 100 < ( 3 * sc->getSCE( SC_SERVANTWEAPON )->val1 ) ){ + if( sc->getSCE( SC_SERVANTWEAPON ) && sd->servantball > 0 && rnd_chance( 5 * sc->getSCE( SC_SERVANTWEAPON )->val1, 100 ) ){ uint16 skill_id = DK_SERVANTWEAPON_ATK; uint16 skill_lv = sc->getSCE(SC_SERVANTWEAPON)->val1;