From 5c9a72efefaf4aab6a66eaf3656b4bb90b0c9ce3 Mon Sep 17 00:00:00 2001 From: Atemo Date: Sat, 28 Oct 2023 16:42:45 +0200 Subject: [PATCH] Implemented SH_MARINE_FESTIVAL_OF_KI_SUL (2nd rebalance) MAX Lv: 5 Skill Requirement: Mystical Creature Mastery 3, Kisul Water Spraying 3 Skill Form: Active Type: Buff Target: Instant Casting Recovery: AP 4 Description: With the power of the sea by Kisul, increases POW, CRT and CON to self and nearby party member around the user. If the user learned Commune With Kisul, increases area of effect and doubles the skill duration. Doesn't stack with Cardinal's Benedictum. _ [Level 1]: POW, CRT, CON + 2 / duration: 60 seconds / area of effect: 5 x 5 cells. Commune With Kisul: area of effect: 9 x 9 cells. [Level 2]: POW, CRT, CON + 4 / duration: 75 seconds / area of effect: 7 x 7 cells. Commune With Kisul: area of effect: 11 x 11 cells. [Level 3]: POW, CRT, CON + 6 / duration: 90 seconds / area of effect: 9 x 9 cells. Commune With Kisul: area of effect: 13 x 13 cells. [Level 4]: POW, CRT, CON + 8 / duration: 105 seconds / area of effect: 11 x 11 cells. Commune With Kisul: area of effect: 15 x 15 cells. [Level 5]: POW, CRT, CON + 10 / duration: 120 seconds / area of effect: 13 x 13 cells. Commune With Kisul: area of effect: 17 x 17 cells. 1st rebalance : - Increases AP recovery rate from 2 to 4. 2nd rebalance : (nothing) --- db/re/skill_db.yml | 50 ++++++++++++++++++++++++++++++++++++++++++++++ db/re/status.yml | 11 ++++++++++ src/map/skill.cpp | 15 ++++++++++++++ src/map/status.cpp | 9 +++++++++ 4 files changed, 85 insertions(+) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 971d298220..56bf94117c 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -41575,6 +41575,56 @@ Body: Amount: 81 - Level: 7 Amount: 85 + - Id: 5440 + Name: SH_MARINE_FESTIVAL_OF_KI_SUL + Description: Marine Festival of Kisul + MaxLevel: 5 + Type: Magic + TargetType: Self + DamageFlags: + NoDamage: true + Splash: true + GiveAp: 4 + SplashArea: + - Level: 1 + Area: 2 + - Level: 2 + Area: 3 + - Level: 3 + Area: 4 + - Level: 4 + Area: 5 + - Level: 5 + Area: 6 + Duration1: + - Level: 1 + Time: 60000 + - Level: 2 + Time: 75000 + - Level: 3 + Time: 90000 + - Level: 4 + Time: 105000 + - Level: 5 + Time: 120000 + CastCancel: true + CastTime: 1700 + AfterCastActDelay: 1000 + FixedCastTime: 1000 + Cooldown: 2000 + Requires: + SpCost: + - Level: 1 + Amount: 80 + - Level: 2 + Amount: 90 + - Level: 3 + Amount: 100 + - Level: 4 + Amount: 110 + - Level: 5 + Amount: 120 + Status: Marine_Festival - Id: 5443 Name: SH_COMMUNE_WITH_HYUN_ROK Description: Commune with Hyunrok diff --git a/db/re/status.yml b/db/re/status.yml index 1389379961..18fc9d5429 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -7833,6 +7833,8 @@ Body: Flags: BlEffect: true DisplayPc: true + EndOnStart: + Marine_Festival: true - Status: Axe_Stomp Icon: EFST_AXE_STOMP DurationLookup: MT_AXE_STOMP @@ -8765,3 +8767,12 @@ Body: Patk: true Smatk: true Hplus: true + - Status: Marine_Festival + Icon: EFST_MARINE_FESTIVAL + DurationLookup: SH_MARINE_FESTIVAL_OF_KI_SUL + CalcFlags: + Pow: true + Con: true + Crt: true + EndOnStart: + Benedictum: true diff --git a/src/map/skill.cpp b/src/map/skill.cpp index a241684991..1685518a1d 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -12852,6 +12852,21 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui 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; + case SH_MARINE_FESTIVAL_OF_KI_SUL: + if (flag & 1) { + int time = skill_get_time(skill_id, skill_lv); + if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_KI_SUL)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION))) + time *= 2; + sc_start(src, bl, type, 100, skill_lv, time); + clif_skill_nodamage(src, bl, skill_id, skill_lv, 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; + + 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); diff --git a/src/map/status.cpp b/src/map/status.cpp index d4f1b9a410..8fd3ebc71b 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -6866,6 +6866,8 @@ static unsigned short status_calc_pow(struct block_list *bl, status_change *sc, if (sc->getSCE(SC_BENEDICTUM)) pow += sc->getSCE(SC_BENEDICTUM)->val2; + if (sc->getSCE(SC_MARINE_FESTIVAL)) + pow += sc->getSCE(SC_MARINE_FESTIVAL)->val2; return (unsigned short)cap_value(pow, 0, USHRT_MAX); } @@ -6938,6 +6940,8 @@ static unsigned short status_calc_con(struct block_list *bl, status_change *sc, if (sc->getSCE(SC_BENEDICTUM)) con += sc->getSCE(SC_BENEDICTUM)->val2; + if (sc->getSCE(SC_MARINE_FESTIVAL)) + con += sc->getSCE(SC_MARINE_FESTIVAL)->val2; return (unsigned short)cap_value(con, 0, USHRT_MAX); } @@ -6956,6 +6960,8 @@ static unsigned short status_calc_crt(struct block_list *bl, status_change *sc, if (sc->getSCE(SC_BENEDICTUM)) crt += sc->getSCE(SC_BENEDICTUM)->val2; + if (sc->getSCE(SC_MARINE_FESTIVAL)) + crt += sc->getSCE(SC_MARINE_FESTIVAL)->val2; return (unsigned short)cap_value(crt, 0, USHRT_MAX); } @@ -12703,6 +12709,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty case SC_TEMPORARY_COMMUNION: val2 = val1 * 3; break; + case SC_MARINE_FESTIVAL: + val2 = 2 * val1; + break; default: if (calc_flag.none() && scdb->skill_id == 0 && scdb->icon == EFST_BLANK && scdb->opt1 == OPT1_NONE && scdb->opt2 == OPT2_NONE && scdb->state.none() && scdb->flag.none() && scdb->endonstart.empty() && scdb->endreturn.empty() && scdb->fail.empty() && scdb->endonend.empty()) {