From e09ac5e31d8673a9428dfe04cffc4eed1f2b9132 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sat, 19 Aug 2023 23:04:05 -0300 Subject: [PATCH] Rebalance of MO_EXTREMITYFIST (Asura Strike) - Change required spheres when used after Raging Thrust or Root - Old: 4 spheres were required - New: 1 sphere is required - Doubles damage when there are 6 or more spirit sphere on cast - SP recovery penalty duration reduced: 10s -> 3s From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 4 ++-- src/map/battle.c | 7 +++++-- src/map/skill.c | 25 +++++++++++++++++-------- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index 879955e1590..b9c4f6f0ff2 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -8295,8 +8295,8 @@ skill_db: ( Lv9: 1 Lv10: 1 } - SkillData1: 10000 - SkillData2: 300000 + SkillData1: 3_000 // Duration of the SP Recovery block (in milliseconds) (SC_EXTREMITYFIST2) + SkillData2: 300_000 FixedCastTime: { Lv1: 2000 Lv2: 1750 diff --git a/src/map/battle.c b/src/map/battle.c index fef320075f9..83d9be67dc4 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -5522,10 +5522,13 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl case MO_EXTREMITYFIST: // [malufett] { short totaldef = status->get_total_def(target); - GET_NORMAL_ATTACK((sc && sc->data[SC_MAXIMIZEPOWER] ? 1 : 0) | 8, skill_id); - if ( wd.damage ) { + GET_NORMAL_ATTACK((sc != NULL && sc->data[SC_MAXIMIZEPOWER] != NULL ? 1 : 0) | 8, skill_id); + if (wd.damage != 0) { ATK_ADD(250 * (skill_lv + 1) + (10 * (status_get_sp(src) + 1) * wd.damage / 100) + (8 * wd.damage)); ATK_ADD(-totaldef); + + if (sd != NULL && sd->spiritball_old >= 6) + ATK_ADDRATE(100); // +100% damage = doubles the damage } } break; diff --git a/src/map/skill.c b/src/map/skill.c index 03d93c7b5af..12734782422 100644 --- a/src/map/skill.c +++ b/src/map/skill.c @@ -15665,6 +15665,9 @@ static int skill_check_condition_castbegin(struct map_session_data *sd, uint16 s if(sc && sc->data[SC_EXTREMITYFIST]) return 0; #endif // 0 +#ifdef RENEWAL + sd->spiritball_old = sd->spiritball; +#endif if (sc && (sc->data[SC_BLADESTOP] || sc->data[SC_CURSEDCIRCLE_ATKER])) break; if (sc && sc->data[SC_COMBOATTACK]) { @@ -17181,16 +17184,21 @@ static struct skill_condition skill_get_requirement(struct map_session_data *sd, req.spiritball = 0; break; case MO_EXTREMITYFIST: - if( sc ) - { - if( sc->data[SC_BLADESTOP] ) + if (sc != NULL) { + if (sc->data[SC_BLADESTOP] != NULL) { +#ifndef RENEWAL req.spiritball--; - else if( sc->data[SC_COMBOATTACK] ) - { - switch( sc->data[SC_COMBOATTACK]->val1 ) - { +#else + req.spiritball = 1; +#endif + } else if (sc->data[SC_COMBOATTACK] != NULL) { + switch (sc->data[SC_COMBOATTACK]->val1) { case MO_COMBOFINISH: +#ifndef RENEWAL req.spiritball = 4; +#else + req.spiritball = 1; +#endif break; case CH_TIGERFIST: req.spiritball = 3; @@ -17199,8 +17207,9 @@ static struct skill_condition skill_get_requirement(struct map_session_data *sd, req.spiritball = sd->spiritball?sd->spiritball:1; break; } - }else if( sc->data[SC_RAISINGDRAGON] && sd->spiritball > 5) + } else if (sc->data[SC_RAISINGDRAGON] != NULL && sd->spiritball > 5) { req.spiritball = sd->spiritball; // must consume all regardless of the amount required + } } break; case SR_RAMPAGEBLASTER: