diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 17500ca12b..f66b912072 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -41477,6 +41477,54 @@ Body: Requires: SpCost: 72 Status: Hogogong + - Id: 5437 + Name: SH_HOGOGONG_STRIKE + Description: Hogogong Strike + MaxLevel: 7 + Type: Weapon + TargetType: Self + Range: -9 + Hit: Multi_Hit + HitCount: 3 + GiveAp: 1 + Element: Weapon + DamageFlags: + Splash: true + Critical: true + SplashArea: + - Level: 1 + Area: 3 + - Level: 2 + Area: 3 + - Level: 3 + Area: 3 + - Level: 4 + Area: 4 + - Level: 5 + Area: 4 + - Level: 6 + Area: 4 + - Level: 7 + Area: 5 + Cooldown: 350 + CastCancel: true + FixedCastTime: 1000 + Requires: + SpCost: + - Level: 1 + Amount: 67 + - Level: 2 + Amount: 70 + - Level: 3 + Amount: 73 + - Level: 4 + Amount: 76 + - Level: 5 + Amount: 79 + - Level: 6 + Amount: 82 + - Level: 7 + Amount: 85 - Id: 5438 Name: SH_COMMUNE_WITH_KI_SUL Description: Commune with Chulho diff --git a/src/map/battle.cpp b/src/map/battle.cpp index 1e4942fe8e..ce9c5be7de 100644 --- a/src/map/battle.cpp +++ b/src/map/battle.cpp @@ -2955,6 +2955,7 @@ static bool is_attack_critical(struct Damage* wd, struct block_list *src, struct if (sc && !sc->getSCE(SC_CALAMITYGALE)) return false; case SH_CHUL_HO_SONIC_CLAW: + case SH_HOGOGONG_STRIKE: if (!(sd && pc_checkskill(sd, SH_COMMUNE_WITH_CHUL_HO)) || !(sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) return false; break; @@ -5757,6 +5758,19 @@ static int battle_calc_attack_skill_ratio(struct Damage* wd, struct block_list * RE_LVL_DMOD(100); break; } + case SH_HOGOGONG_STRIKE: { + int tmp_val = (sd ? pc_checkskill(sd, SH_MYSTICAL_CREATURE_MASTERY) : 0); + skillratio += -100 + 180 + 200 * skill_lv; + skillratio += 10 * tmp_val; + skillratio += 5 * sstatus->pow; + + if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_CHUL_HO)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) { + skillratio += 70 + 150 * skill_lv; + skillratio += 10 * tmp_val; + } + RE_LVL_DMOD(100); + break; + } } return skillratio; } diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 3e347a87b0..e690789654 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -5916,6 +5916,11 @@ int skill_castend_damage_id (struct block_list* src, struct block_list *bl, uint if (flag & 1) skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); break; + case SH_HOGOGONG_STRIKE: + if ((flag & 1) && (tsc && tsc->getSCE(SC_HOGOGONG))) { + skill_attack(skill_get_type(skill_id), src, src, bl, skill_id, skill_lv, tick, flag); + } + break; //Place units around target case NJ_BAKUENRYU: @@ -12810,6 +12815,16 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui 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; + case SH_HOGOGONG_STRIKE: + i = skill_get_splash(skill_id, skill_lv); + if( (sd && pc_checkskill(sd, SH_COMMUNE_WITH_CHUL_HO)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) + status_heal(src, 0, 0, 1, 0); + 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);