From 37aee85c5c6c399b2723d5fdd6c490b888c8ead9 Mon Sep 17 00:00:00 2001 From: "Guilherme G. Menaldo" Date: Sun, 20 Aug 2023 12:35:57 -0300 Subject: [PATCH] Rebalance of MO_FINGEROFFENSIVE (Throw Spirit Sphere) - Damage formula changed - Old: (Spirit Spheres x 350)% - New: [600 + (Skill Level x 200)]% - Casting time changed - Old: (Spirit Spheres + 1) seconds - New: 0.5 seconds fixed casting time + 0.5 seconds variable casting time - 1 second cooldown added - SP cost increased - Old: 10 at all skill levels - New: 8 + (Skill Level x 4) - Spirit sphere usage changed - Old: (Skill Level) sphere - New: 1 sphere at all skill levels - Skill will deal 50% more damage on target caught with Root From massive skills rebalance (1st/2nd/transclass) (2018.10.31) --- db/re/skill_db.conf | 42 ++++++++++++++++-------------------------- src/map/battle.c | 19 +++++++++++++++++-- src/map/unit.c | 2 ++ 3 files changed, 35 insertions(+), 28 deletions(-) diff --git a/db/re/skill_db.conf b/db/re/skill_db.conf index a3f5bf74956..eb8f7951f34 100644 --- a/db/re/skill_db.conf +++ b/db/re/skill_db.conf @@ -8083,18 +8083,7 @@ skill_db: ( } AttackType: "Weapon" Element: "Ele_Weapon" - NumberOfHits: { - Lv1: 1 - Lv2: 2 - Lv3: 3 - Lv4: 4 - Lv5: 5 - Lv6: 6 - Lv7: 7 - Lv8: 8 - Lv9: 9 - Lv10: 10 - } + NumberOfHits: 5 CastTime: 500 AfterCastActDelay: 500 AfterCastWalkDelay: { @@ -8109,21 +8098,22 @@ skill_db: ( Lv9: 1600 Lv10: 1800 } + CoolDown: 1_000 FixedCastTime: 500 Requirements: { - SPCost: 10 - SpiritSphereCost: { - Lv1: 1 - Lv2: 2 - Lv3: 3 - Lv4: 4 - Lv5: 5 - Lv6: 6 - Lv7: 7 - Lv8: 8 - Lv9: 9 - Lv10: 10 + SPCost: { + Lv1: 12 + Lv2: 16 + Lv3: 20 + Lv4: 24 + Lv5: 28 + Lv6: 32 + Lv7: 36 + Lv8: 40 + Lv9: 44 + Lv10: 48 } + SpiritSphereCost: 1 } }, { @@ -32758,7 +32748,7 @@ skill_db: ( Lv9: 15 Lv10: 16 } - + SkillType: { Enemy: true } @@ -33382,7 +33372,7 @@ skill_db: ( MaxLevel: 10 Hit: "BDT_MULTIHIT" SkillType: { - Self: true + Self: true } SkillInfo: { Chorus: true diff --git a/src/map/battle.c b/src/map/battle.c index a2c7093cd85..57b91703ce0 100644 --- a/src/map/battle.c +++ b/src/map/battle.c @@ -2243,8 +2243,21 @@ static int battle_calc_skillratio(int attack_type, struct block_list *src, struc skillratio += 40 * skill_lv; #endif break; - case MO_FINGEROFFENSIVE: - skillratio+= 50 * skill_lv; + case MO_FINGEROFFENSIVE: { +#ifndef RENEWAL + skillratio += 50 * skill_lv; +#else + int ratio = 600 + 200 * skill_lv; + + // Cast and Target must be locked in BladeStop. + // In other words: A third player won't do extra damage from hitting another Monk's blade stop + if (tsc != NULL && tsc->data[SC_BLADESTOP] != NULL && sc->data != NULL && sc->data[SC_BLADESTOP] != NULL) + ratio += ratio * 50 / 100; + + ratio /= skill->get_num(MO_FINGEROFFENSIVE, skill_lv); + skillratio += - 100 + ratio; +#endif + } break; case MO_INVESTIGATE: { #ifndef RENEWAL @@ -4779,6 +4792,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl if(skill_id) { wd.flag |= battle->range_type(src, target, skill_id, skill_lv); switch(skill_id) { +#ifndef RENEWAL case MO_FINGEROFFENSIVE: if(sd) { if (battle_config.finger_offensive_type) @@ -4787,6 +4801,7 @@ static struct Damage battle_calc_weapon_attack(struct block_list *src, struct bl wd.div_ = sd->spiritball_old; } break; +#endif case HT_PHANTASMIC: //Since these do not consume ammo, they need to be explicitly set as arrow attacks. flag.arrow = 1; diff --git a/src/map/unit.c b/src/map/unit.c index 592cf3829a9..b1b38bec8b6 100644 --- a/src/map/unit.c +++ b/src/map/unit.c @@ -1655,10 +1655,12 @@ static int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill } else if (!status->isdead(target)) return 0; //Can't cast on non-dead characters. break; +#ifndef RENEWAL case MO_FINGEROFFENSIVE: if(sd) casttime += casttime * min(skill_lv, sd->spiritball); break; +#endif case MO_EXTREMITYFIST: if (sc && sc->data[SC_COMBOATTACK] && (sc->data[SC_COMBOATTACK]->val1 == MO_COMBOFINISH ||