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