Implemented Star Emperor and Soul Reaper classes (#4386)

* Initial implementation of these two classes skills.
* Includes kRO balancing patch: http://ro.gnjoy.com/news/devnote/View.asp?category=1&seq=3921697
Thanks to @Rytech2, @Mateuus, @nubspixel, @exneval, @idamonli, @hotspicy945, @admkakaroto, @cahya1992 and @RagnaWay!
This commit is contained in:
Aleos
2020-03-24 13:37:58 -04:00
committed by GitHub
parent 157392cd1a
commit 412d90048d
18 changed files with 2095 additions and 133 deletions

View File

@@ -1924,6 +1924,10 @@ int unit_skilluse_id2(struct block_list *src, int target_id, uint16 skill_id, ui
if (!src->prev)
return 0;
} else if (sc->data[SC_NEWMOON] && skill_id != SJ_NEWMOONKICK) {
status_change_end(src, SC_NEWMOON, INVALID_TIMER);
if (!src->prev)
return 0; // Warped away!
}
}
@@ -2097,6 +2101,11 @@ int unit_skilluse_pos2( struct block_list *src, short skill_x, short skill_y, ui
} else if (sc->data[SC_CLOAKINGEXCEED] && !(sc->data[SC_CLOAKINGEXCEED]->val4&4)) {
status_change_end(src, SC_CLOAKINGEXCEED, INVALID_TIMER);
if (!src->prev)
return 0;
} else if (sc->data[SC_NEWMOON]) {
status_change_end(src, SC_NEWMOON, INVALID_TIMER);
if (!src->prev)
return 0;
}
@@ -2904,6 +2913,8 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file,
status_change_end(bl, SC_CLOSECONFINE2, INVALID_TIMER);
status_change_end(bl, SC_TINDER_BREAKER, INVALID_TIMER);
status_change_end(bl, SC_TINDER_BREAKER2, INVALID_TIMER);
status_change_end(bl, SC_FLASHKICK, INVALID_TIMER);
status_change_end(bl, SC_SOULUNITY, INVALID_TIMER);
status_change_end(bl, SC_HIDING, INVALID_TIMER);
// Ensure the bl is a PC; if so, we'll handle the removal of cloaking and cloaking exceed later
if ( bl->type != BL_PC ) {
@@ -2924,6 +2935,7 @@ int unit_remove_map_(struct block_list *bl, clr_type clrtype, const char* file,
status_change_end(bl, SC__SHADOWFORM, INVALID_TIMER);
status_change_end(bl, SC__MANHOLE, INVALID_TIMER);
status_change_end(bl, SC_VACUUM_EXTREME, INVALID_TIMER);
status_change_end(bl, SC_NEWMOON, INVALID_TIMER);
status_change_end(bl, SC_CURSEDCIRCLE_ATKER, INVALID_TIMER); // callme before warp
status_change_end(bl, SC_SUHIDE, INVALID_TIMER);
}
@@ -3262,6 +3274,7 @@ int unit_free(struct block_list *bl, clr_type clrtype)
pc_inventory_rental_clear(sd);
pc_delspiritball(sd, sd->spiritball, 1);
pc_delspiritcharm(sd, sd->spiritcharm, sd->spiritcharm_type);
pc_delsoulball(sd,sd->soulball, 1);
if( sd->st && sd->st->state != RUN ) {// free attached scripts that are waiting
script_free_state(sd->st);