diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 569c0aa530..971d298220 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -41529,6 +41529,52 @@ Body: Name: SH_COMMUNE_WITH_KI_SUL Description: Commune with Chulho MaxLevel: 1 + - Id: 5439 + Name: SH_KI_SUL_WATER_SPRAYING + Description: Kisul Water Spraying + MaxLevel: 7 + Type: Magic + TargetType: Self + GiveAp: 1 + DamageFlags: + NoDamage: true + Splash: true + SplashArea: + - Level: 1 + Area: 3 + - Level: 2 + Area: 3 + - Level: 3 + Area: 4 + - Level: 4 + Area: 4 + - Level: 5 + Area: 5 + - Level: 6 + Area: 5 + - Level: 7 + Area: 6 + CastCancel: true + CastTime: 1700 + AfterCastActDelay: 1000 + FixedCastTime: 1000 + Cooldown: 300 + Requires: + SpCost: + - Level: 1 + Amount: 61 + - Level: 2 + Amount: 65 + - Level: 3 + Amount: 69 + - Level: 4 + Amount: 73 + - Level: 5 + Amount: 77 + - Level: 6 + Amount: 81 + - Level: 7 + Amount: 85 - Id: 5443 Name: SH_COMMUNE_WITH_HYUN_ROK Description: Commune with Hyunrok diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 43faa49912..a241684991 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -12826,6 +12826,32 @@ 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_KI_SUL_WATER_SPRAYING: + if (flag & 1) + { + int heal = 500 * skill_lv + status_get_int(src) * 5; + if (sd) + heal += pc_checkskill(sd, SH_MYSTICAL_CREATURE_MASTERY)*100; + if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_KI_SUL)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) + { + heal += 250 * skill_lv; + if (sd) + heal += pc_checkskill(sd, SH_MYSTICAL_CREATURE_MASTERY) * 50; + } + heal = heal * (100 + status_get_crt(src)) * status_get_lv(src) / 10000; + status_heal(bl, heal, 0, 0, 0); + clif_skill_nodamage(0, bl, AL_HEAL, heal, 1); + } + else + { + i = skill_get_splash(skill_id, skill_lv); + if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_KI_SUL)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) + i += 2; + + 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_PARTY | SD_SPLASH | 1, skill_castend_nodamage_id); + } + break; default: { std::shared_ptr skill = skill_db.find(skill_id);