From e4acd6e5dccc982f312704541ed10d5102fd0da5 Mon Sep 17 00:00:00 2001 From: munkrej Date: Sat, 15 Apr 2023 22:52:03 +0200 Subject: [PATCH] 4th Improvement - Arch Mage (#7708) --- db/re/skill_db.yml | 100 ++++++++++++++++++++++++++++++++++----------- src/map/battle.cpp | 33 ++++++++++++--- src/map/skill.cpp | 3 +- src/map/status.cpp | 5 +++ 4 files changed, 111 insertions(+), 30 deletions(-) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 5a41639420..748069b79a 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -35391,6 +35391,7 @@ Body: MaxLevel: 5 Type: Magic TargetType: Ground + GiveAp: 4 Range: 9 Hit: Single HitCount: 1 @@ -35983,7 +35984,7 @@ Body: FixedCastTime: 4000 Requires: SpCost: 60 - ApCost: 200 + ApCost: 150 Status: Climax - Id: 5233 Name: AG_ROCK_DOWN @@ -35997,12 +35998,32 @@ Body: Hit: Multi_Hit HitCount: -5 Element: Earth - SplashArea: 1 - GiveAp: 4 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 2 + - Level: 3 + Area: 2 + - Level: 4 + Area: 3 + - Level: 5 + Area: 3 + GiveAp: 1 CastCancel: true CastTime: 4000 - AfterCastActDelay: 1000 - Cooldown: 4000 + AfterCastActDelay: 500 + Cooldown: + - Level: 1 + Time: 3000 + - Level: 2 + Time: 2100 + - Level: 3 + Time: 1500 + - Level: 4 + Time: 900 + - Level: 5 + Time: 300 FixedCastTime: 1500 Requires: SpCost: @@ -36028,11 +36049,21 @@ Body: Element: Wind SplashArea: 1 ActiveInstance: 14 - GiveAp: 4 + GiveAp: 1 CastCancel: true CastTime: 4000 - AfterCastActDelay: 1000 - Cooldown: 4000 + AfterCastActDelay: 500 + Cooldown: + - Level: 1 + Time: 3000 + - Level: 2 + Time: 2100 + - Level: 3 + Time: 1500 + - Level: 4 + Time: 900 + - Level: 5 + Time: 300 FixedCastTime: 1500 Requires: SpCost: @@ -36058,11 +36089,21 @@ Body: Element: Fire SplashArea: 1 ActiveInstance: 14 - GiveAp: 4 + GiveAp: 1 CastCancel: true CastTime: 4000 - AfterCastActDelay: 1000 - Cooldown: 4000 + AfterCastActDelay: 500 + Cooldown: + - Level: 1 + Time: 3000 + - Level: 2 + Time: 2100 + - Level: 3 + Time: 1500 + - Level: 4 + Time: 900 + - Level: 5 + Time: 300 FixedCastTime: 1500 Requires: SpCost: @@ -36082,10 +36123,23 @@ Body: MaxLevel: 5 Type: Magic TargetType: Attack + DamageFlags: + Splash: true Range: 9 Hit: Multi_Hit - HitCount: -2 + HitCount: 1 Element: Fire + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 2 + - Level: 3 + Area: 2 + - Level: 4 + Area: 3 + - Level: 5 + Area: 3 Requires: SpCost: 1 - Id: 5237 @@ -36101,20 +36155,20 @@ Body: Element: Water SplashArea: - Level: 1 - Area: 2 - - Level: 2 - Area: 2 - - Level: 3 - Area: 3 - - Level: 4 - Area: 3 - - Level: 5 Area: 4 - GiveAp: 4 + - Level: 2 + Area: 4 + - Level: 3 + Area: 5 + - Level: 4 + Area: 5 + - Level: 5 + Area: 6 + GiveAp: 1 CastCancel: true CastTime: 4000 - AfterCastActDelay: 1000 - Cooldown: 4000 + AfterCastActDelay: 500 + Cooldown: 300 FixedCastTime: 1500 Requires: SpCost: diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 3f4567e0c3..66b3ca88fd 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -702,8 +702,6 @@ int battle_calc_cardfix(int attack_type, struct block_list *src, struct block_li } cardfix = cardfix * (100 + sd->indexed_bonus.magic_addsize[tstatus->size] + sd->indexed_bonus.magic_addsize[SZ_ALL]) / 100; cardfix = cardfix * (100 + sd->indexed_bonus.magic_addclass[tstatus->class_] + sd->indexed_bonus.magic_addclass[CLASS_ALL]) / 100; - if (sd->status.weapon == W_2HSTAFF)// 2-Handed Staff Mastery - cardfix = cardfix * (100 + pc_checkskill(sd, AG_TWOHANDSTAFF)) / 100; for (const auto &it : sd->add_mdmg) { if (it.id == t_class) { cardfix = cardfix * (100 + it.val) / 100; @@ -7146,6 +7144,11 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list case TR_METALIC_FURY:// Deals up to 5 additional hits. But what affects the number of hits? [Rytech] ad.div_ = min(ad.div_ + mflag, 5); // Number of hits doesn't go above 5. break; + case AG_CRIMSON_ARROW_ATK: + if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){ + ad.div_ = 2; + } + break; } //Set miscellaneous data that needs be filled @@ -7745,7 +7748,7 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list RE_LVL_DMOD(100); break; case AG_MYSTERY_ILLUSION: - skillratio += -100 + 250 * skill_lv + 5 * sstatus->spl; + skillratio += -100 + 500 * skill_lv + 5 * sstatus->spl; RE_LVL_DMOD(100); break; case AG_VIOLENT_QUAKE_ATK: @@ -7820,20 +7823,38 @@ struct Damage battle_calc_magic_attack(struct block_list *src,struct block_list RE_LVL_DMOD(100); break; case AG_ROCK_DOWN: - skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl; + skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl; + + if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){ + skillratio += 250 * skill_lv; + } + RE_LVL_DMOD(100); break; case AG_STORM_CANNON: skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl; + + if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){ + skillratio += 250 * skill_lv; + } + RE_LVL_DMOD(100); break; case AG_CRIMSON_ARROW: - case AG_CRIMSON_ARROW_ATK: skillratio += -100 + 300 * skill_lv + 5 * sstatus->spl; RE_LVL_DMOD(100); break; + case AG_CRIMSON_ARROW_ATK: + skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl; + RE_LVL_DMOD(100); + break; case AG_FROZEN_SLASH: - skillratio += -100 + 750 * skill_lv + 5 * sstatus->spl; + skillratio += -100 + 600 * skill_lv + 5 * sstatus->spl; + + if( sc != nullptr && sc->getSCE( SC_CLIMAX ) ){ + skillratio += 250 * skill_lv; + } + RE_LVL_DMOD(100); break; case IG_JUDGEMENT_CROSS: diff --git a/src/map/skill.cpp b/src/map/skill.cpp index a061c7eb97..74b181cf2c 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -5390,7 +5390,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint skill_get_type(skill_id), src, src, skill_id, skill_lv, tick, flag, BCT_ENEMY); } if (skill_id == AG_CRIMSON_ARROW) - skill_attack(skill_get_type(AG_CRIMSON_ARROW_ATK), src, src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, flag|SD_LEVEL|SD_ANIMATION); + skill_castend_damage_id(src, bl, AG_CRIMSON_ARROW_ATK, skill_lv, tick, flag|SD_LEVEL|SD_ANIMATION); break; case MO_INVESTIGATE: @@ -5612,6 +5612,7 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint case DK_SERVANT_W_DEMOL: case DK_MADNESS_CRUSHER: case DK_HACKANDSLASHER: + case AG_CRIMSON_ARROW_ATK: case AG_DESTRUCTIVE_HURRICANE: case AG_SOUL_VC_STRIKE: case AG_CRYSTAL_IMPACT: diff --git a/src/map/status.cpp b/src/map/status.cpp index 46d7f01ea6..28ba172abe 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -4366,6 +4366,11 @@ int status_calc_pc_sub(map_session_data* sd, uint8 opt) base_status->smatk += skill * 3; } + // 2-Handed Staff Mastery + if( sd->status.weapon == W_2HSTAFF && ( skill = pc_checkskill( sd, AG_TWOHANDSTAFF ) ) > 0 ){ + base_status->smatk += skill * 2; + } + // ----- PHYSICAL RESISTANCE CALCULATION ----- if ((skill = pc_checkskill_imperial_guard(sd, 1)) > 0)// IG_SHIELD_MASTERY base_status->res += skill * 3;