Implemented SH_KI_SUL_RAMPAGE (2nd rebalance)
MAX Lv: 7 Skill Requirement: Mystical Creature Mastery 5, Marine Festival of Kisul 2, Sandy Festival of Kisul 2 Skill Form: Active Type: Recovery Target: Instant Casting Description: Using the powerful healing effect of Kisul. Recovers 2 AP every 1 second to all party members, excluding the user, with 7 x 7 cells around the user. The user can't use other skills while this skill is active, and if the user leaves the standing cell due to certain effect such as being knocked-back, the skill effect is canceled. If the user learned Commune with Kisul, increases area of effect to 11 x 11 cells and increases AP recovery amount to 4. _ [Level 1]: Duration: 4 seconds. [Level 2]: Duration: 5 seconds. [Level 3]: Duration: 6 seconds. [Level 4]: Duration: 7 seconds. [Level 5]: Duration: 8 seconds. [Level 6]: Duration: 9 seconds. [Level 7]: Duration: 10 seconds. 1st rebalance : (nothing) 2nd rebalance : - Reduces AP recovery rate from 3/6 to 2/4.
This commit is contained in:
parent
6680ce00df
commit
f17fb250be
@ -41675,6 +41675,53 @@ Body:
|
||||
- Level: 5
|
||||
Amount: 120
|
||||
Status: Sandy_Festival
|
||||
- Id: 5442
|
||||
Name: SH_KI_SUL_RAMPAGE
|
||||
Description: Kisul Rampage
|
||||
MaxLevel: 7
|
||||
Type: Magic
|
||||
TargetType: Self
|
||||
DamageFlags:
|
||||
NoDamage: true
|
||||
Splash: true
|
||||
SplashArea: 3
|
||||
Duration1:
|
||||
- Level: 1
|
||||
Time: 4000
|
||||
- Level: 2
|
||||
Time: 5000
|
||||
- Level: 3
|
||||
Time: 6000
|
||||
- Level: 4
|
||||
Time: 7000
|
||||
- Level: 5
|
||||
Time: 8000
|
||||
- Level: 6
|
||||
Time: 9000
|
||||
- Level: 7
|
||||
Time: 10000
|
||||
CastCancel: true
|
||||
CastTime: 3000
|
||||
AfterCastActDelay: 1000
|
||||
Cooldown: 60000
|
||||
FixedCastTime: 1500
|
||||
Requires:
|
||||
SpCost:
|
||||
- Level: 1
|
||||
Amount: 90
|
||||
- Level: 2
|
||||
Amount: 100
|
||||
- Level: 3
|
||||
Amount: 110
|
||||
- Level: 4
|
||||
Amount: 120
|
||||
- Level: 5
|
||||
Amount: 130
|
||||
- Level: 6
|
||||
Amount: 140
|
||||
- Level: 7
|
||||
Amount: 150
|
||||
Status: Ki_Sul_Rampage
|
||||
- Id: 5443
|
||||
Name: SH_COMMUNE_WITH_HYUN_ROK
|
||||
Description: Commune with Hyunrok
|
||||
|
@ -8787,3 +8787,8 @@ Body:
|
||||
Sta: true
|
||||
EndOnStart:
|
||||
Religio: true
|
||||
- Status: Ki_Sul_Rampage
|
||||
Icon: EFST_KI_SUL_RAMPAGE
|
||||
DurationLookup: SH_KI_SUL_RAMPAGE
|
||||
States:
|
||||
NoCast: true
|
||||
|
@ -3123,6 +3123,8 @@ short skill_blown(struct block_list* src, struct block_list* target, char count,
|
||||
status_change_end(target, SC_ROLLINGCUTTER);
|
||||
if (tsc->getSCE(SC_CRESCIVEBOLT))
|
||||
status_change_end(target, SC_CRESCIVEBOLT);
|
||||
if (tsc->getSCE(SC_KI_SUL_RAMPAGE))
|
||||
status_change_end(target, SC_KI_SUL_RAMPAGE);
|
||||
if (tsc->getSCE(SC_SV_ROOTTWIST)) // Shouldn't move.
|
||||
return 0;
|
||||
}
|
||||
@ -12827,8 +12829,7 @@ 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_ENEMY | SD_SPLASH | 1, skill_castend_damage_id);
|
||||
break;
|
||||
case SH_KI_SUL_WATER_SPRAYING:
|
||||
if (flag & 1)
|
||||
{
|
||||
if (flag & 1) {
|
||||
int heal = 500 * skill_lv + status_get_int(src) * 5;
|
||||
if (sd)
|
||||
heal += pc_checkskill(sd, SH_MYSTICAL_CREATURE_MASTERY)*100;
|
||||
@ -12842,8 +12843,7 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
status_heal(bl, heal, 0, 0, 0);
|
||||
clif_skill_nodamage(0, bl, AL_HEAL, heal, 1);
|
||||
}
|
||||
else
|
||||
{
|
||||
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;
|
||||
@ -12860,7 +12860,8 @@ int skill_castend_nodamage_id (struct block_list *src, struct block_list *bl, ui
|
||||
time *= 2;
|
||||
sc_start(src, bl, type, 100, skill_lv, time);
|
||||
clif_skill_nodamage(src, bl, skill_id, skill_lv, 1);
|
||||
} else {
|
||||
}
|
||||
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;
|
||||
@ -12868,6 +12869,19 @@ 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_KI_SUL_RAMPAGE:
|
||||
if (flag & 1) {
|
||||
if (!(src == bl)) {
|
||||
if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_KI_SUL)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION)))
|
||||
status_heal(bl, 0, 0, 4, 0);
|
||||
else
|
||||
status_heal(bl, 0, 0, 2, 0);
|
||||
}
|
||||
}
|
||||
else {
|
||||
sc_start(src, bl, type, 100, skill_lv, skill_get_time(skill_id, skill_lv));
|
||||
}
|
||||
break;
|
||||
|
||||
default: {
|
||||
std::shared_ptr<s_skill_db> skill = skill_db.find(skill_id);
|
||||
|
@ -12719,6 +12719,10 @@ int status_change_start(struct block_list* src, struct block_list* bl,enum sc_ty
|
||||
case SC_SANDY_FESTIVAL:
|
||||
val2 = 2 * val1;
|
||||
break;
|
||||
case SC_KI_SUL_RAMPAGE:
|
||||
val4 = tick / 1000;
|
||||
tick_time = 100;
|
||||
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()) {
|
||||
@ -14840,6 +14844,22 @@ TIMER_FUNC(status_change_timer){
|
||||
if (sce->val4 >= 0)
|
||||
skill_castend_damage_id( bl, bl, NPC_KILLING_AURA, sce->val1, tick, 0 );
|
||||
break;
|
||||
case SC_KI_SUL_RAMPAGE:
|
||||
if (sce->val4-- > 0) {
|
||||
int i = skill_get_splash(SH_KI_SUL_RAMPAGE, sce->val1);
|
||||
int lv = sce->val1;
|
||||
if ((sd && pc_checkskill(sd, SH_COMMUNE_WITH_KI_SUL)) || (sc && sc->getSCE(SC_TEMPORARY_COMMUNION)))
|
||||
{
|
||||
i += 2;
|
||||
lv += skill_get_max(SH_KI_SUL_RAMPAGE);
|
||||
}
|
||||
clif_skill_nodamage(bl, bl, SH_KI_SUL_RAMPAGE, lv, 1);
|
||||
map_foreachinrange(skill_area_sub, bl, i, BL_CHAR,
|
||||
bl, SH_KI_SUL_RAMPAGE, lv, tick, BCT_PARTY | SD_SPLASH | 1, skill_castend_nodamage_id);
|
||||
sc_timer_next(1000 + tick);
|
||||
return 0;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
// If status has an interval and there is at least 100ms remaining time, wait for next interval
|
||||
|
@ -786,8 +786,11 @@ int unit_walktoxy( struct block_list *bl, short x, short y, unsigned char flag)
|
||||
|
||||
TBL_PC *sd = BL_CAST(BL_PC, bl);
|
||||
|
||||
// Start timer to recall summon
|
||||
if( sd != nullptr ){
|
||||
if (sd->sc.getSCE(SC_KI_SUL_RAMPAGE))
|
||||
status_change_end(bl, SC_KI_SUL_RAMPAGE);
|
||||
|
||||
// Start timer to recall summon
|
||||
if (sd->md != nullptr)
|
||||
unit_check_start_teleport_timer(&sd->md->bl);
|
||||
if (sd->ed != nullptr)
|
||||
|
Loading…
x
Reference in New Issue
Block a user