From 3f30991efa7c043d7f71a29675141626f10a41ab Mon Sep 17 00:00:00 2001 From: Atemo Date: Sat, 28 Oct 2023 17:41:52 +0200 Subject: [PATCH] Implemented SH_BLESSING_OF_MYSTICAL_CREATURES (2nd rebalance) MAX Lv: 5 Skill Requirement: Mystical Creature Mastery 10, Commune with Kisul 1 Skill Form: Active(AP) Type: Secondary Target: Single target Consumes: AP 100 Description: Gives the Blessing of Mystical Creatures to 1 party member, excluding doram and self, recovers the target's AP to 200 and increases P.Atk, S.Matk for 10 seconds. When the skill duration ends, target's AP becomes 0. The target can't receive Blessing of Mystical Creatures again for 1 minute. _ [Level 1]: P.Atk, S.Matk +10 [Level 2]: P.Atk, S.Matk +20 [Level 3]: P.Atk, S.Matk +30 [Level 4]: P.Atk, S.Matk +40 [Level 5]: P.Atk, S.Matk +50 1st rebalance : (nothing) 2nd rebalance : (nothing) --- db/re/skill_db.yml | 20 ++++++++++++++++++++ db/re/status.yml | 12 ++++++++++++ src/map/skill.cpp | 9 +++++++++ src/map/status.cpp | 11 +++++++++++ 4 files changed, 52 insertions(+) diff --git a/db/re/skill_db.yml b/db/re/skill_db.yml index 9de362c423..f6d6d1ca0a 100644 --- a/db/re/skill_db.yml +++ b/db/re/skill_db.yml @@ -41855,6 +41855,26 @@ Body: SpCost: 100 ApCost: 150 Status: Temporary_Communion + - Id: 5448 + Name: SH_BLESSING_OF_MYSTICAL_CREATURES + Description: Blessing of Mystical Creatures + MaxLevel: 5 + Type: Magic + TargetType: Support + Range: -9 + DamageFlags: + NoDamage: true + CastCancel: true + CastTime: 2000 + AfterCastActDelay: 500 + Cooldown: 60000 + FixedCastTime: 1500 + Duration1: 10000 + Duration2: 60000 + Requires: + SpCost: 100 + ApCost: 100 + Status: Blessing_of_M_Creatures - Id: 6001 Name: DK_DRAGONIC_BREATH Description: Dragonic Breath diff --git a/db/re/status.yml b/db/re/status.yml index 50b3655104..18c65cf6bd 100644 --- a/db/re/status.yml +++ b/db/re/status.yml @@ -8849,3 +8849,15 @@ Body: Colors_of_Hyun_Rok_3: true Colors_of_Hyun_Rok_4: true Colors_of_Hyun_Rok_5: true + - Status: Blessing_of_M_Creatures + Icon: EFST_BLESSING_OF_M_CREATURES + DurationLookup: SH_BLESSING_OF_MYSTICAL_CREATURES + CalcFlags: + Patk: true + Smatk: true + - Status: Blessing_of_M_C_Debuff + Icon: EFST_BLESSING_OF_M_C_DEBUFF + DurationLookup: SH_BLESSING_OF_MYSTICAL_CREATURES + CalcFlags: + Patk: true + Smatk: true diff --git a/src/map/skill.cpp b/src/map/skill.cpp index 25af78af1c..91b2fc90fa 100755 --- a/src/map/skill.cpp +++ b/src/map/skill.cpp @@ -12893,6 +12893,11 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui } clif_skill_nodamage(src, src, skill_id, skill_lv, 1); break; + case SH_BLESSING_OF_MYSTICAL_CREATURES: + status_heal(bl, 0, 0, 200-status_get_ap(bl), 0); + sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv)); + clif_skill_nodamage(src, src, skill_id, skill_lv, 1); + break; default: { std::shared_ptr skill = skill_db.find(skill_id); @@ -13021,6 +13026,10 @@ static int8 skill_castend_id_check(struct block_list *src, struct block_list *ta if (!tsc || !tsc->getSCE(SC_SECOND_BRAND)) return USESKILL_FAIL_LEVEL; break; + case SH_BLESSING_OF_MYSTICAL_CREATURES: + if (src == target || battle_check_target(src, target, BCT_PARTY) <= 0 || (status_get_class_(target) & MAPID_BASEMASK) == MAPID_SUMMONER || (tsc && tsc->getSCE(SC_BLESSING_OF_M_C_DEBUFF))) + return USESKILL_FAIL_TOTARGET; + break; } if (inf&INF_ATTACK_SKILL || diff --git a/src/map/status.cpp b/src/map/status.cpp index 86ea6e9735..477debb73c 100644 --- a/src/map/status.cpp +++ b/src/map/status.cpp @@ -8501,6 +8501,8 @@ static signed short status_calc_patk(struct block_list *bl, status_change *sc, i } if (sc->getSCE(SC_TEMPORARY_COMMUNION)) patk += sc->getSCE(SC_TEMPORARY_COMMUNION)->val2; + if (sc->getSCE(SC_BLESSING_OF_M_CREATURES)) + patk += sc->getSCE(SC_BLESSING_OF_M_CREATURES)->val2; return (short)cap_value(patk, 0, SHRT_MAX); } @@ -8530,6 +8532,8 @@ static signed short status_calc_smatk(struct block_list *bl, status_change *sc, } if (sc->getSCE(SC_TEMPORARY_COMMUNION)) smatk += sc->getSCE(SC_TEMPORARY_COMMUNION)->val2; + if (sc->getSCE(SC_BLESSING_OF_M_CREATURES)) + smatk += sc->getSCE(SC_BLESSING_OF_M_CREATURES)->val2; return (short)cap_value(smatk, 0, SHRT_MAX); } @@ -12723,6 +12727,9 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty val4 = tick / 1000; tick_time = 100; break; + case SC_BLESSING_OF_M_CREATURES: + val2 = val1 * 10; + 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()) { @@ -13697,6 +13704,10 @@ int status_change_end(struct block_list* bl, enum sc_type type, int tid) pc_delabyssball( *sd, sd->abyssball ); } break; + case SC_BLESSING_OF_M_CREATURES: + sc_start(bl,bl, SC_BLESSING_OF_M_C_DEBUFF, 100, 1, skill_get_time2(SH_BLESSING_OF_MYSTICAL_CREATURES, 1)); + status_percent_change(bl,bl,0, 0, -100,1); + break; } // End statuses found in the EndOnEnd list.