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)
This commit is contained in:
Atemo 2023-10-28 16:42:45 +02:00
parent 76d7234565
commit 5c9a72efef
4 changed files with 85 additions and 0 deletions

View File

@ -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

View File

@ -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

View File

@ -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<s_skill_db> skill = skill_db.find(skill_id);

View File

@ -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()) {