Update sc_end_class (#2673)

* Adjusted script command sc_end_class to accept an optional job ID.
Thanks to @sader1992!
This commit is contained in:
sader fawall 2017-12-17 17:29:30 +02:00 committed by Aleos
parent f0686828e7
commit 1b68303f74
2 changed files with 29 additions and 6 deletions

View File

@ -5350,7 +5350,7 @@ Used in reset NPC's (duh!)
*sc_start2 <effect type>,<ticks>,<value 1>,<value 2>{,<rate>,<flag>{,<GID>}};
*sc_start4 <effect type>,<ticks>,<value 1>,<value 2>,<value 3>,<value 4>{,<rate>,<flag>{,<GID>}};
*sc_end <effect type>{,<GID>};
*sc_end_class {<char_id>};
*sc_end_class {<char_id>{,<job_id>}};
These commands will bestow a status effect on a character.
@ -5389,7 +5389,7 @@ and theirs val1, val2, val3, and val4 usage in source.
perform a complete removal of all statuses (although permanent ones will re-apply).
'sc_end_class' works like 'sc_end' but will remove all status effects from any learned
skill on the invoking character.
skill on the invoking character. If <job_id> is provided it will end the effect for that job.
Examples:
// This will poison the invoking character for 10 minutes at 50% chance.
@ -5407,6 +5407,18 @@ Examples:
// This will end the Freezing status for the invoking character.
sc_end SC_FREEZE;
// This will end the effect of any learned skill for the invoking character.
sc_end_class;
// This will end the effect of any learned skill for the character with the <char_id> 150000.
// val1: <char_id>
sc_end_class(150000);
// This will end the effect of any Arch Bishop skill for the invoking character.
// val1: <char_id>
// val2: <job_id> of Arch Bishop
sc_end_class(getcharid(0),Job_Arch_Bishop);
Note: to use SC_NOCHAT you should alter Manner
set Manner, -5; // Will mute a user for 5 minutes

View File

@ -11325,18 +11325,29 @@ BUILDIN_FUNC(sc_end)
/**
* Ends all status effects from any learned skill on the attached player.
* sc_end_class {<char_id>};
* if <job_id> was given it will end the effect of that class for the attached player
* sc_end_class {<char_id>{,<job_id>}};
*/
BUILDIN_FUNC(sc_end_class)
{
struct map_session_data *sd;
uint16 skill_id;
int i;
int class_;
if (!script_charid2sd(2, sd))
return SCRIPT_CMD_FAILURE;
for (i = 0; i < MAX_SKILL_TREE && (skill_id = skill_tree[pc_class2idx(sd->status.class_)][i].skill_id) > 0; i++) { // Remove status specific to your current tree skills.
if (script_hasdata(st, 3))
class_ = script_getnum(st, 3);
else
class_ = sd->status.class_;
if (!pcdb_checkid(class_)) {
ShowError("buildin_sc_end_class: Invalid job ID '%d' given.\n", script_getnum(st, 3));
return SCRIPT_CMD_FAILURE;
}
for (int i = 0; i < MAX_SKILL_TREE && (skill_id = skill_tree[pc_class2idx(class_)][i].skill_id) > 0; i++) {
enum sc_type sc = status_skill2sc(skill_id);
if (sc > SC_COMMON_MAX && sd->sc.data[sc])
@ -23882,7 +23893,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF2(sc_start,"sc_start2","iiii???"),
BUILDIN_DEF2(sc_start,"sc_start4","iiiiii???"),
BUILDIN_DEF(sc_end,"i?"),
BUILDIN_DEF(sc_end_class,"?"),
BUILDIN_DEF(sc_end_class,"??"),
BUILDIN_DEF(getstatus, "i??"),
BUILDIN_DEF(getscrate,"ii?"),
BUILDIN_DEF(debugmes,"s"),