From ef9f422b08864a01efb56998b1beb13f065a5746 Mon Sep 17 00:00:00 2001 From: Atemo Date: Sat, 28 Oct 2023 15:48:42 +0200 Subject: [PATCH] Implemented SH_HOWLING_OF_CHUL_HO (2nd rebalance) MAX Lv: 7 Skill Requirement: Mystical Creature Mastery 3, Chulho Sonic Claw 3 Skill Form: Active Type: Ranged Physical Target: Instant Casting Recovery: AP 2 Description: Roars with the power of Chulho, inflicts long ranged physical damage to all targets around the user. Inflicts [Hogogong effect] to the targets for 12 seconds. Deals additional damage depends on level of Mystical Creature Mastery user learned, user's base level and POW. If the user learned Commune With Chulho, increases skill damage. [Level 1]: (1650 + (Mystical Creature level x 50))% Atk / area of effect: 5 x 5 cells. Commune With Chulho: (1850 + (Mystical Creature level x 100))% Atk / area of effect: 7 x 7 cells. [Level 2]: (2700 + (Mystical Creature level x 50))% Atk / area of effect: 5 x 5 cells. Commune With Chulho: (3000 + (Mystical Creature level x 100))% Atk / area of effect: 7 x 7 cells. [Level 3]: (3750 + (Mystical Creature level x 50))% Atk / area of effect: 5 x 5 cells. Commune With Chulho: (4150 + (Mystical Creature level x 100))% Atk / area of effect: 7 x 7 cells. [Level 4]: (4800 + (Mystical Creature level x 50))% Atk / area of effect: 7 x 7 cells. Commune With Chulho: (5300 + (Mystical Creature level x 100))% Atk / area of effect: 9 x 9 cells. [Level 5]: (5850 + (Mystical Creature level x 50))% Atk / area of effect: 7 x 7 cells. Commune With Chulho: (6450 + (Mystical Creature level x 100))% Atk / area of effect: 9 x 9 cells. [Level 6]: (6900 + (Mystical Creature level x 50))% Atk / area of effect: 7 x 7 cells. Commune With Chulho: (7600 + (Mystical Creature level x 100))% Atk / area of effect: 9 x 9 cells. [Level 7]: (7950 + (Mystical Creature level x 50))% Atk / area of effect: 9 x 9 cells. Commune With Chulho: (8750 + (Mystical Creature level x 100))% Atk / area of effect: 11 x 11 cells. 1st rebalance : - Increases SP consumption from 62 to 68. - Increases damage from 5750%/7250%(Commune With Chulho)Atk to 7950%/8750%(Commune With Chulho)Atk based on level 7. - Increases factor weight of Mystical Creature skill level in skill formula from 30/50(Commune With Chulho) to 50/100(Commune With Chulho). 2nd rebalance : - Increases SP consumption from 68 to 72 --- db/re/skill_db.yml | 35 +++++++++++++++++++ db/re/status.yml | 7 ++++ src/map/battle.cpp | 13 +++++++ src/map/script_constants.hpp | 65 +++++++++++++++++++++++++++++++++++ src/map/skill.cpp | 19 +++++++++++ src/map/status.hpp | 66 ++++++++++++++++++++++++++++++++++++ 6 files changed, 205 insertions(+) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 899d84863a..17500ca12b 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -41442,6 +41442,41 @@ Body: Amount: 52 - Level: 7 Amount: 54 + - Id: 5436 + Name: SH_HOWLING_OF_CHUL_HO + Description: Howling of Chulho + MaxLevel: 7 + Type: Weapon + TargetType: Self + Range: -9 + Hit: Multi_Hit + HitCount: -3 + GiveAp: 2 + Element: Weapon + DamageFlags: + Splash: true + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 2 + - Level: 3 + Area: 2 + - Level: 4 + Area: 3 + - Level: 5 + Area: 3 + - Level: 6 + Area: 3 + - Level: 7 + Area: 4 + Duration1: 12000 + Cooldown: 1000 + CastCancel: true + FixedCastTime: 1000 + Requires: + SpCost: 72 + Status: Hogogong - Id: 5438 Name: SH_COMMUNE_WITH_KI_SUL Description: Commune with Chulho diff --git a/db/re/status.yml b/db/re/status.yml index e62d4aaf35..5b435d98e5 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -8751,3 +8751,10 @@ Body: NoDispell: true NoBanishingBuster: true NoClearance: true + - Status: Hogogong + Icon: EFST_HOGOGONG + DurationLookup: SH_HOWLING_OF_CHUL_HO + Flags: + Debuff: true + BlEffect: true + DisplayPc: true diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 35924471c8..1e4942fe8e 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -5744,6 +5744,19 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * RE_LVL_DMOD(100); break; } + case SH_HOWLING_OF_CHUL_HO: { + int tmp_val = (sd ? pc_checkskill(sd, SH_MYSTICAL_CREATURE_MASTERY) : 0); + skillratio += -100 + 600 + 1050 * skill_lv; + skillratio += 50 * tmp_val; + skillratio += 5 * sstatus->pow; + + if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_CHUL_HO)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) { + skillratio += 100 + 100 * skill_lv; + skillratio += 50 * tmp_val; + } + RE_LVL_DMOD(100); + break; + } } return skillratio; } diff --git a/src/map/script_constants.hpp b/src/map/script_constants.hpp index 60cc72b49a..abcd4cde58 100644 --- a/src/map/script_constants.hpp +++ b/src/map/script_constants.hpp @@ -1894,6 +1894,71 @@ export_constant(SC_RUSH_QUAKE2); export_constant(SC_G_LIFEPOTION); + // Hyper Novice + export_constant(SC_SHIELDCHAINRUSH); + export_constant(SC_MISTYFROST); + export_constant(SC_GROUNDGRAVITY); + export_constant(SC_BREAKINGLIMIT); + export_constant(SC_RULEBREAK); + export_constant(SC_HNNOWEAPON); + + // Sky Emperor + export_constant(SC_RISING_SUN); + export_constant(SC_NOON_SUN); + export_constant(SC_SUNSET_SUN); + export_constant(SC_RISING_MOON); + export_constant(SC_MIDNIGHT_MOON); + export_constant(SC_DAWN_MOON); + export_constant(SC_STAR_BURST); + export_constant(SC_SKY_ENCHANT); + + // Soul Ascetic + export_constant(SC_TALISMAN_OF_PROTECTION); + export_constant(SC_TALISMAN_OF_WARRIOR); + export_constant(SC_TALISMAN_OF_MAGICIAN); + export_constant(SC_TALISMAN_OF_FIVE_ELEMENTS); + export_constant(SC_TOTEM_OF_TUTELARY); + export_constant(SC_T_FIRST_GOD); + export_constant(SC_T_SECOND_GOD); + export_constant(SC_T_THIRD_GOD); + export_constant(SC_T_FOURTH_GOD); + export_constant(SC_T_FIFTH_GOD); + export_constant(SC_HEAVEN_AND_EARTH); + + // Night Watch + export_constant(SC_INTENSIVE_AIM); + export_constant(SC_INTENSIVE_AIM_COUNT); + export_constant(SC_GRENADE_FRAGMENT_1); + export_constant(SC_GRENADE_FRAGMENT_2); + export_constant(SC_GRENADE_FRAGMENT_3); + export_constant(SC_GRENADE_FRAGMENT_4); + export_constant(SC_GRENADE_FRAGMENT_5); + export_constant(SC_GRENADE_FRAGMENT_6); + export_constant(SC_AUTO_FIRING_LAUNCHER); + export_constant(SC_HIDDEN_CARD); + + // Shinkiro/Shiranui + export_constant(SC_SHADOW_CLOCK); + export_constant(SC_SHINKIROU_CALL); + export_constant(SC_NIGHTMARE); + export_constant(SC_SBUNSHIN); + + // Spirit Handler + export_constant(SC_HOGOGONG); + export_constant(SC_MARINE_FESTIVAL); + export_constant(SC_SANDY_FESTIVAL); + export_constant(SC_KI_SUL_RAMPAGE); + export_constant(SC_COLORS_OF_HYUN_ROK_1); + export_constant(SC_COLORS_OF_HYUN_ROK_2); + export_constant(SC_COLORS_OF_HYUN_ROK_3); + export_constant(SC_COLORS_OF_HYUN_ROK_4); + export_constant(SC_COLORS_OF_HYUN_ROK_5); + export_constant(SC_COLORS_OF_HYUN_ROK_6); + export_constant(SC_COLORS_OF_HYUN_ROK_BUFF); + export_constant(SC_TEMPORARY_COMMUNION); + export_constant(SC_BLESSING_OF_M_CREATURES); + export_constant(SC_BLESSING_OF_M_C_DEBUFF); + #ifdef RENEWAL export_constant(SC_EXTREMITYFIST2); #endif diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 86dcd9b544..3e347a87b0 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -2202,6 +2202,9 @@ int skill_additional_effect( struct block_list* src, struct block_list *bl, uint case MT_RUSH_QUAKE: sc_start( src, bl, SC_RUSH_QUAKE1, 100, skill_lv, skill_get_time( skill_id, skill_lv ) ); break; + case SH_HOWLING_OF_CHUL_HO: + sc_start(src, bl, skill_get_sc(skill_id), 100, skill_lv, skill_get_time(skill_id, skill_lv)); + break; } //end switch skill_id if (md && battle_config.summons_trigger_autospells && md->master_id && md->special_state.ai && md->special_state.ai != AI_ABR && md->special_state.ai != AI_BIONIC) @@ -5909,6 +5912,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint } break; + case SH_HOWLING_OF_CHUL_HO: + if (flag & 1) + skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); + break; + //Place units around target case NJ_BAKUENRYU: clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); @@ -12792,6 +12800,17 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } break; + case SH_HOWLING_OF_CHUL_HO: + i = skill_get_splash(skill_id, skill_lv); + if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_CHUL_HO)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) + i += 1; + skill_area_temp[0] = 0; + skill_area_temp[1] = bl->id; + skill_area_temp[2] = 0; + clif_skill_nodamage(src, bl, skill_id, skill_lv, 1); + map_foreachinrange(skill_area_sub, bl, i, BL_CHAR, src, skill_id, skill_lv, tick, flag | BCT_ENEMY | SD_SPLASH | 1, skill_castend_damage_id); + break; + default: { std::shared_ptr skill = skill_db.find(skill_id); ShowWarning("skill_castend_nodamage_id: missing code case for skill %s(%d)\n", skill ? skill->name : "UNKNOWN", skill_id); diff --git a/src/map/status.hpp b/src/map/status.hpp index 386b4bf381..61c812ea37 100644 --- a/src/map/status.hpp +++ b/src/map/status.hpp @@ -1284,6 +1284,72 @@ enum sc_type : int16 { SC_RUSH_QUAKE2, SC_G_LIFEPOTION, + + // Hyper Novice + SC_SHIELDCHAINRUSH, + SC_MISTYFROST, + SC_GROUNDGRAVITY, + SC_BREAKINGLIMIT, + SC_RULEBREAK, + SC_HNNOWEAPON, + + // Sky Emperor + SC_RISING_SUN, + SC_NOON_SUN, + SC_SUNSET_SUN, + SC_RISING_MOON, + SC_MIDNIGHT_MOON, + SC_DAWN_MOON, + SC_STAR_BURST, + SC_SKY_ENCHANT, + + // Soul Ascetic + SC_TALISMAN_OF_PROTECTION, + SC_TALISMAN_OF_WARRIOR, + SC_TALISMAN_OF_MAGICIAN, + SC_TALISMAN_OF_FIVE_ELEMENTS, + SC_T_FIRST_GOD, + SC_T_SECOND_GOD, + SC_T_THIRD_GOD, + SC_T_FOURTH_GOD, + SC_T_FIFTH_GOD, + SC_HEAVEN_AND_EARTH, + SC_TOTEM_OF_TUTELARY, + + // Night Watch + SC_INTENSIVE_AIM, + SC_INTENSIVE_AIM_COUNT, + SC_GRENADE_FRAGMENT_1, + SC_GRENADE_FRAGMENT_2, + SC_GRENADE_FRAGMENT_3, + SC_GRENADE_FRAGMENT_4, + SC_GRENADE_FRAGMENT_5, + SC_GRENADE_FRAGMENT_6, + SC_AUTO_FIRING_LAUNCHER, + SC_HIDDEN_CARD, + + // Shinkiro/Shiranui + SC_SHADOW_CLOCK, + SC_SHINKIROU_CALL, + SC_NIGHTMARE, + SC_SBUNSHIN, + + // Spirit Handler + SC_HOGOGONG, + SC_MARINE_FESTIVAL, + SC_SANDY_FESTIVAL, + SC_KI_SUL_RAMPAGE, + SC_COLORS_OF_HYUN_ROK_1, + SC_COLORS_OF_HYUN_ROK_2, + SC_COLORS_OF_HYUN_ROK_3, + SC_COLORS_OF_HYUN_ROK_4, + SC_COLORS_OF_HYUN_ROK_5, + SC_COLORS_OF_HYUN_ROK_6, + SC_COLORS_OF_HYUN_ROK_BUFF, + SC_TEMPORARY_COMMUNION, + SC_BLESSING_OF_M_CREATURES, + SC_BLESSING_OF_M_C_DEBUFF, + #ifdef RENEWAL SC_EXTREMITYFIST2, //! NOTE: This SC should be right before SC_MAX, so it doesn't disturb if RENEWAL is disabled #endif