Added optional param <char_id> for some script commands:

* getexp <base xp>,<job xp>{,<char_id>};
* equip <item id>{,<char_id>};
* unequip <equipment slot>{,<char_id>};
* delequip <equipment slot>{,<char_id>};
* breakequip <equipment slot>{,<char_id>};
* clearitem {,<char_id>};
* openmail {<char_id>};
* openauction {<char_id>};
* setquest <ID>{,<char_id>};
* completequest <ID>{,<char_id>};
* erasequest <ID>{,<char_id>};
* changequest <ID>,<ID2>{,<char_id>};
* checkquest(<ID>{,PLAYTIME|HUNTING{,<char_id>}})
* isbegin_quest(<ID>{,<char_id>})
* showevent <icon>{,<mark color>{,<char_id>}}
* setd "<variable name>",<value>{,<char_id>};

Signed-off-by: Cydh Ramdh <house.bad@gmail.com>
This commit is contained in:
Cydh Ramdh 2015-03-14 19:19:53 +07:00
parent 5f21afb255
commit 3b197eb76c
2 changed files with 74 additions and 85 deletions

View File

@ -1226,7 +1226,7 @@ Returns the variable reference (since trunk r12870).
--------------------------------------- ---------------------------------------
*setd "<variable name>",<value>; *setd "<variable name>",<value>{,<char_id>};
Works almost identically as set, except the variable name is identified as a string Works almost identically as set, except the variable name is identified as a string
and can thus be constructed dynamically. and can thus be constructed dynamically.
@ -1242,6 +1242,9 @@ Examples:
setd ".@" + .@var$ + "123$", "Poporing is cool"; setd ".@" + .@var$ + "123$", "Poporing is cool";
mes .@Poporing123$; // Displays "Poporing is cool". mes .@Poporing123$; // Displays "Poporing is cool".
NOTE:
'char_id' only works for non-server variables.
--------------------------------------- ---------------------------------------
*getd("<variable name>") *getd("<variable name>")
@ -4132,7 +4135,7 @@ they will also have their skills reset upon 'changesex'.
--------------------------------------- ---------------------------------------
*getexp <base xp>,<job xp>; *getexp <base xp>,<job xp>{,<char_id>};
This command will give the invoking character a specified number of base and job This command will give the invoking character a specified number of base and job
experience points. Can be used as a quest reward. Negative values won't work. experience points. Can be used as a quest reward. Negative values won't work.
@ -4846,7 +4849,7 @@ appropriate messages into their chat window.
--------------------------------------- ---------------------------------------
*unequip <equipment slot>; *unequip <equipment slot>{,<char_id>};
This command will unequip whatever is currently equipped in the invoking This command will unequip whatever is currently equipped in the invoking
character's specified equipment slot. For a full list of possible equipment character's specified equipment slot. For a full list of possible equipment
@ -4857,7 +4860,7 @@ them.
--------------------------------------- ---------------------------------------
*delequip <equipment slot>; *delequip <equipment slot>{,<char_id>};
This command will destroy whatever is currently equipped in the invoking This command will destroy whatever is currently equipped in the invoking
character's specified equipment slot. For a full list of possible equipment character's specified equipment slot. For a full list of possible equipment
@ -4867,7 +4870,7 @@ This command will return 1 if an item was deleted and 0 otherwise.
--------------------------------------- ---------------------------------------
*breakequip <equipment slot>; *breakequip <equipment slot>{,<char_id>};
This command will break and unequip whatever is currently equipped in the This command will break and unequip whatever is currently equipped in the
invoking character's specified equipment slot. For a full list of possible invoking character's specified equipment slot. For a full list of possible
@ -4877,7 +4880,7 @@ This command will return 1 if an item was broken and 0 otherwise.
--------------------------------------- ---------------------------------------
*clearitem; *clearitem {,<char_id>};
This command will destroy all items the invoking character has in their This command will destroy all items the invoking character has in their
inventory (including equipped items). It will not affect anything else, like inventory (including equipped items). It will not affect anything else, like
@ -4885,7 +4888,7 @@ storage or cart.
--------------------------------------- ---------------------------------------
*equip <item id>; *equip <item id>{,<char_id>};
*autoequip <item id>,<option>; *autoequip <item id>,<option>;
These commands are to equip a equipment on the attached character. These commands are to equip a equipment on the attached character.
@ -4968,7 +4971,7 @@ window, to avoid any disruption when both windows overlap.
--------------------------------------- ---------------------------------------
*openmail; *openmail {<char_id>};
This will open a character's Mail window on the client connected to the This will open a character's Mail window on the client connected to the
invoking character. invoking character.
@ -4980,7 +4983,7 @@ invoking character.
--------------------------------------- ---------------------------------------
*openauction; *openauction {<char_id>};
This will open the Auction window on the client connected to the invoking character. This will open the Auction window on the client connected to the invoking character.
@ -7767,7 +7770,7 @@ izlude,100,100,4 script Test 844,{
--------------------------------------- ---------------------------------------
*setquest <ID>; *setquest <ID>{,<char_id>};
Place quest of <ID> in the users quest log, the state of which is "active". Place quest of <ID> in the users quest log, the state of which is "active".
@ -7775,26 +7778,26 @@ If *questinfo is set, and the same ID is specified here, the icon will be cleare
--------------------------------------- ---------------------------------------
*completequest <ID>; *completequest <ID>{,<char_id>};
Change the state for the given quest <ID> to "complete" and remove from the users quest log. Change the state for the given quest <ID> to "complete" and remove from the users quest log.
--------------------------------------- ---------------------------------------
*erasequest <ID>; *erasequest <ID>{,<char_id>};
Remove the quest of the given <ID> from the user's quest log. Remove the quest of the given <ID> from the user's quest log.
--------------------------------------- ---------------------------------------
*changequest <ID>,<ID2>; *changequest <ID>,<ID2>{,<char_id>};
Remove quest of the given <ID> from the user's quest log. Remove quest of the given <ID> from the user's quest log.
Add quest of the <ID2> to the the quest log, and the state is "active". Add quest of the <ID2> to the the quest log, and the state is "active".
--------------------------------------- ---------------------------------------
*checkquest(<ID>{,PLAYTIME|HUNTING}) *checkquest(<ID>{,PLAYTIME|HUNTING{,<char_id>}})
If no additional argument supplied, return the state of the quest: If no additional argument supplied, return the state of the quest:
-1 = Quest not started (not in quest log) -1 = Quest not started (not in quest log)
@ -7816,7 +7819,7 @@ If parameter "HUNTING" is supplied:
--------------------------------------- ---------------------------------------
*isbegin_quest(<ID>) *isbegin_quest(<ID>{,<char_id>})
Return the state of the quest: Return the state of the quest:
0 = Quest not started (not in quest log) 0 = Quest not started (not in quest log)
@ -7825,7 +7828,7 @@ Return the state of the quest:
--------------------------------------- ---------------------------------------
*showevent <icon>{,<mark color>} *showevent <icon>{,<mark color>{,<char_id>}}
Show an emotion on top of a NPC, and optionally, Show an emotion on top of a NPC, and optionally,
a colored mark in the mini-map like "viewpoint". a colored mark in the mini-map like "viewpoint".

View File

@ -204,11 +204,9 @@ enum { LABEL_NEXTLINE=1,LABEL_START };
return SCRIPT_CMD_FAILURE;\ return SCRIPT_CMD_FAILURE;\
}\ }\
}\ }\
else {\ else if (!((sd) = script_rid2sd(st))) {\
if (!((sd) = script_rid2sd(st))) {\ (ret);\
(ret);\ return SCRIPT_CMD_FAILURE;\
return SCRIPT_CMD_FAILURE;\
}\
}\ }\
} }
@ -226,11 +224,9 @@ enum { LABEL_NEXTLINE=1,LABEL_START };
return SCRIPT_CMD_FAILURE;\ return SCRIPT_CMD_FAILURE;\
}\ }\
}\ }\
else {\ else if (!((sd) = script_rid2sd(st))) {\
if (!((sd) = script_rid2sd(st))) {\ (ret);\
(ret);\ return SCRIPT_CMD_FAILURE;\
return SCRIPT_CMD_FAILURE;\
}\
}\ }\
} }
@ -8321,9 +8317,7 @@ BUILDIN_FUNC(delequip) {
TBL_PC *sd; TBL_PC *sd;
pos = script_getnum(st,2); pos = script_getnum(st,2);
sd = script_rid2sd(st); script_charid2sd(3,sd,NULL);
if (sd == NULL)
return 0;
if (pos > 0 && pos <= ARRAYLENGTH(equip)) if (pos > 0 && pos <= ARRAYLENGTH(equip))
i = pc_checkequip(sd,equip[pos-1]); i = pc_checkequip(sd,equip[pos-1]);
@ -8350,9 +8344,7 @@ BUILDIN_FUNC(breakequip) {
TBL_PC *sd; TBL_PC *sd;
pos = script_getnum(st,2); pos = script_getnum(st,2);
sd = script_rid2sd(st); script_charid2sd(3,sd,NULL);
if (sd == NULL)
return 0;
if (pos > 0 && pos <= ARRAYLENGTH(equip)) if (pos > 0 && pos <= ARRAYLENGTH(equip))
i = pc_checkequip(sd,equip[pos-1]); i = pc_checkequip(sd,equip[pos-1]);
@ -9342,9 +9334,7 @@ BUILDIN_FUNC(getexp)
int base=0,job=0; int base=0,job=0;
double bonus; double bonus;
sd = script_rid2sd(st); script_charid2sd(4,sd,NULL);
if( sd == NULL )
return 0;
base=script_getnum(st,2); base=script_getnum(st,2);
job =script_getnum(st,3); job =script_getnum(st,3);
@ -12856,9 +12846,11 @@ BUILDIN_FUNC(getskilllist)
BUILDIN_FUNC(clearitem) BUILDIN_FUNC(clearitem)
{ {
TBL_PC *sd=script_rid2sd(st); TBL_PC *sd;
int i; int i;
if(sd==NULL) return 0;
script_charid2sd(2,sd,NULL);
for (i=0; i<MAX_INVENTORY; i++) { for (i=0; i<MAX_INVENTORY; i++) {
if (sd->status.inventory[i].amount) { if (sd->status.inventory[i].amount) {
pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_SCRIPT); pc_delitem(sd, i, sd->status.inventory[i].amount, 0, 0, LOG_TYPE_SCRIPT);
@ -14367,8 +14359,7 @@ BUILDIN_FUNC(unequip) {
int pos; int pos;
TBL_PC *sd; TBL_PC *sd;
if (!(sd = script_rid2sd(st))) script_charid2sd(3,sd,NULL);
return SCRIPT_CMD_SUCCESS;
pos = script_getnum(st,2); pos = script_getnum(st,2);
if (pos >= 1 && pos <= ARRAYLENGTH(equip)) { if (pos >= 1 && pos <= ARRAYLENGTH(equip)) {
@ -14389,8 +14380,7 @@ BUILDIN_FUNC(equip) {
TBL_PC *sd; TBL_PC *sd;
struct item_data *item_data; struct item_data *item_data;
if (!(sd = script_rid2sd(st))) script_charid2sd(3,sd,NULL);
return SCRIPT_CMD_SUCCESS;
nameid = script_getnum(st,2); nameid = script_getnum(st,2);
if ((item_data = itemdb_exists(nameid))) { if ((item_data = itemdb_exists(nameid))) {
@ -15445,12 +15435,7 @@ BUILDIN_FUNC(setd)
if( not_server_variable(*varname) ) if( not_server_variable(*varname) )
{ {
sd = script_rid2sd(st); script_charid2sd(4,sd,NULL);
if( sd == NULL )
{
ShowError("script:setd: no player attached for player variable '%s'\n", buffer);
return 0;
}
} }
if( is_string_variable(varname) ) { if( is_string_variable(varname) ) {
@ -16658,9 +16643,7 @@ BUILDIN_FUNC(openmail)
{ {
TBL_PC* sd; TBL_PC* sd;
sd = script_rid2sd(st); script_charid2sd(2,sd,NULL);
if( sd == NULL )
return 0;
mail_openmail(sd); mail_openmail(sd);
@ -16671,9 +16654,7 @@ BUILDIN_FUNC(openauction)
{ {
TBL_PC* sd; TBL_PC* sd;
sd = script_rid2sd(st); script_charid2sd(2,sd,NULL);
if( sd == NULL )
return 0;
if( !battle_config.feature_auction ) { if( !battle_config.feature_auction ) {
clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 517)); clif_colormes(sd, color_table[COLOR_RED], msg_txt(sd, 517));
@ -16978,14 +16959,14 @@ BUILDIN_FUNC(questinfo)
BUILDIN_FUNC(setquest) BUILDIN_FUNC(setquest)
{ {
struct map_session_data *sd = script_rid2sd(st); struct map_session_data *sd;
unsigned short i; unsigned short i;
int quest_id; int quest_id;
nullpo_retr(1, sd);
quest_id = script_getnum(st, 2); quest_id = script_getnum(st, 2);
script_charid2sd(3,sd,NULL);
quest_add(sd, quest_id); quest_add(sd, quest_id);
// If questinfo is set, remove quest bubble once quest is set. // If questinfo is set, remove quest bubble once quest is set.
@ -17004,8 +16985,9 @@ BUILDIN_FUNC(setquest)
BUILDIN_FUNC(erasequest) BUILDIN_FUNC(erasequest)
{ {
struct map_session_data *sd = script_rid2sd(st); struct map_session_data *sd;
nullpo_ret(sd);
script_charid2sd(3,sd,NULL);
quest_delete(sd, script_getnum(st, 2)); quest_delete(sd, script_getnum(st, 2));
return SCRIPT_CMD_SUCCESS; return SCRIPT_CMD_SUCCESS;
@ -17013,8 +16995,9 @@ BUILDIN_FUNC(erasequest)
BUILDIN_FUNC(completequest) BUILDIN_FUNC(completequest)
{ {
struct map_session_data *sd = script_rid2sd(st); struct map_session_data *sd;
nullpo_ret(sd);
script_charid2sd(3,sd,NULL);
quest_update_status(sd, script_getnum(st, 2), Q_COMPLETE); quest_update_status(sd, script_getnum(st, 2), Q_COMPLETE);
return SCRIPT_CMD_SUCCESS; return SCRIPT_CMD_SUCCESS;
@ -17022,8 +17005,9 @@ BUILDIN_FUNC(completequest)
BUILDIN_FUNC(changequest) BUILDIN_FUNC(changequest)
{ {
struct map_session_data *sd = script_rid2sd(st); struct map_session_data *sd;
nullpo_ret(sd);
script_charid2sd(4,sd,NULL);
quest_change(sd, script_getnum(st, 2),script_getnum(st, 3)); quest_change(sd, script_getnum(st, 2),script_getnum(st, 3));
return SCRIPT_CMD_SUCCESS; return SCRIPT_CMD_SUCCESS;
@ -17031,14 +17015,14 @@ BUILDIN_FUNC(changequest)
BUILDIN_FUNC(checkquest) BUILDIN_FUNC(checkquest)
{ {
struct map_session_data *sd = script_rid2sd(st); struct map_session_data *sd;
enum quest_check_type type = HAVEQUEST; enum quest_check_type type = HAVEQUEST;
nullpo_ret(sd);
if( script_hasdata(st, 3) ) if( script_hasdata(st, 3) )
type = (enum quest_check_type)script_getnum(st, 3); type = (enum quest_check_type)script_getnum(st, 3);
script_charid2sd(4,sd,NULL);
script_pushint(st, quest_check(sd, script_getnum(st, 2), type)); script_pushint(st, quest_check(sd, script_getnum(st, 2), type));
return SCRIPT_CMD_SUCCESS; return SCRIPT_CMD_SUCCESS;
@ -17046,10 +17030,10 @@ BUILDIN_FUNC(checkquest)
BUILDIN_FUNC(isbegin_quest) BUILDIN_FUNC(isbegin_quest)
{ {
struct map_session_data *sd = script_rid2sd(st); struct map_session_data *sd;
int i; int i;
nullpo_ret(sd); script_charid2sd(3,sd,NULL);
i = quest_check(sd, script_getnum(st, 2), (enum quest_check_type) HAVEQUEST); i = quest_check(sd, script_getnum(st, 2), (enum quest_check_type) HAVEQUEST);
script_pushint(st, i + (i < 1)); script_pushint(st, i + (i < 1));
@ -17059,12 +17043,14 @@ BUILDIN_FUNC(isbegin_quest)
BUILDIN_FUNC(showevent) BUILDIN_FUNC(showevent)
{ {
TBL_PC *sd = script_rid2sd(st); TBL_PC *sd;
struct npc_data *nd = map_id2nd(st->oid); struct npc_data *nd = map_id2nd(st->oid);
int icon, color = 0; int icon, color = 0;
script_charid2sd(4,sd,NULL);
if( sd == NULL || nd == NULL ) if( sd == NULL || nd == NULL )
return 0; return 0;
icon = script_getnum(st, 2); icon = script_getnum(st, 2);
if( script_hasdata(st, 3) ) { if( script_hasdata(st, 3) ) {
@ -19501,10 +19487,10 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(getitemname,"v"), BUILDIN_DEF(getitemname,"v"),
BUILDIN_DEF(getitemslots,"i"), BUILDIN_DEF(getitemslots,"i"),
BUILDIN_DEF(makepet,"i"), BUILDIN_DEF(makepet,"i"),
BUILDIN_DEF(getexp,"ii"), BUILDIN_DEF(getexp,"ii?"),
BUILDIN_DEF(getinventorylist,""), BUILDIN_DEF(getinventorylist,""),
BUILDIN_DEF(getskilllist,""), BUILDIN_DEF(getskilllist,""),
BUILDIN_DEF(clearitem,""), BUILDIN_DEF(clearitem,"?"),
BUILDIN_DEF(classchange,"ii"), BUILDIN_DEF(classchange,"ii"),
BUILDIN_DEF(misceffect,"i"), BUILDIN_DEF(misceffect,"i"),
BUILDIN_DEF(playBGM,"s"), BUILDIN_DEF(playBGM,"s"),
@ -19568,7 +19554,7 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(checkequipedcard,"i"), BUILDIN_DEF(checkequipedcard,"i"),
BUILDIN_DEF(jump_zero,"il"), //for future jA script compatibility BUILDIN_DEF(jump_zero,"il"), //for future jA script compatibility
BUILDIN_DEF(globalmes,"s?"), //end jA addition BUILDIN_DEF(globalmes,"s?"), //end jA addition
BUILDIN_DEF(unequip,"i"), // unequip command [Spectre] BUILDIN_DEF(unequip,"i?"), // unequip command [Spectre]
BUILDIN_DEF(getstrlen,"s"), //strlen [Valaris] BUILDIN_DEF(getstrlen,"s"), //strlen [Valaris]
BUILDIN_DEF(charisalpha,"si"), //isalpha [Valaris] BUILDIN_DEF(charisalpha,"si"), //isalpha [Valaris]
BUILDIN_DEF(charat,"si"), BUILDIN_DEF(charat,"si"),
@ -19601,13 +19587,13 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(md5,"s"), BUILDIN_DEF(md5,"s"),
// [zBuffer] List of dynamic var commands ---> // [zBuffer] List of dynamic var commands --->
BUILDIN_DEF(getd,"s"), BUILDIN_DEF(getd,"s"),
BUILDIN_DEF(setd,"sv"), BUILDIN_DEF(setd,"sv?"),
BUILDIN_DEF(callshop,"s?"), // [Skotlex] BUILDIN_DEF(callshop,"s?"), // [Skotlex]
BUILDIN_DEF(npcshopitem,"sii*"), // [Lance] BUILDIN_DEF(npcshopitem,"sii*"), // [Lance]
BUILDIN_DEF(npcshopadditem,"sii*"), BUILDIN_DEF(npcshopadditem,"sii*"),
BUILDIN_DEF(npcshopdelitem,"si*"), BUILDIN_DEF(npcshopdelitem,"si*"),
BUILDIN_DEF(npcshopattach,"s?"), BUILDIN_DEF(npcshopattach,"s?"),
BUILDIN_DEF(equip,"i"), BUILDIN_DEF(equip,"i?"),
BUILDIN_DEF(autoequip,"ii"), BUILDIN_DEF(autoequip,"ii"),
BUILDIN_DEF(setbattleflag,"si"), BUILDIN_DEF(setbattleflag,"si"),
BUILDIN_DEF(getbattleflag,"s"), BUILDIN_DEF(getbattleflag,"s"),
@ -19655,8 +19641,8 @@ struct script_function buildin_func[] = {
BUILDIN_DEF(checkvending,"?"), BUILDIN_DEF(checkvending,"?"),
BUILDIN_DEF(checkchatting,"?"), BUILDIN_DEF(checkchatting,"?"),
BUILDIN_DEF(checkidle,"?"), BUILDIN_DEF(checkidle,"?"),
BUILDIN_DEF(openmail,""), BUILDIN_DEF(openmail,"?"),
BUILDIN_DEF(openauction,""), BUILDIN_DEF(openauction,"?"),
BUILDIN_DEF(checkcell,"siii"), BUILDIN_DEF(checkcell,"siii"),
BUILDIN_DEF(setcell,"siiiiii"), BUILDIN_DEF(setcell,"siiiiii"),
BUILDIN_DEF(setwall,"siiiiis"), BUILDIN_DEF(setwall,"siiiiis"),
@ -19728,8 +19714,8 @@ struct script_function buildin_func[] = {
BUILDIN_DEF2(cleanmap,"cleanarea","siiii"), BUILDIN_DEF2(cleanmap,"cleanarea","siiii"),
BUILDIN_DEF(npcskill,"viii"), BUILDIN_DEF(npcskill,"viii"),
BUILDIN_DEF(consumeitem,"v"), BUILDIN_DEF(consumeitem,"v"),
BUILDIN_DEF(delequip,"i"), BUILDIN_DEF(delequip,"i?"),
BUILDIN_DEF(breakequip,"i"), BUILDIN_DEF(breakequip,"i?"),
BUILDIN_DEF(sit,"?"), BUILDIN_DEF(sit,"?"),
BUILDIN_DEF(stand,"?"), BUILDIN_DEF(stand,"?"),
//@commands (script based) //@commands (script based)
@ -19739,13 +19725,13 @@ struct script_function buildin_func[] = {
//Quest Log System [Inkfish] //Quest Log System [Inkfish]
BUILDIN_DEF(questinfo, "ii??"), BUILDIN_DEF(questinfo, "ii??"),
BUILDIN_DEF(setquest, "i"), BUILDIN_DEF(setquest, "i?"),
BUILDIN_DEF(erasequest, "i"), BUILDIN_DEF(erasequest, "i?"),
BUILDIN_DEF(completequest, "i"), BUILDIN_DEF(completequest, "i?"),
BUILDIN_DEF(checkquest, "i?"), BUILDIN_DEF(checkquest, "i??"),
BUILDIN_DEF(isbegin_quest,"i"), BUILDIN_DEF(isbegin_quest,"i?"),
BUILDIN_DEF(changequest, "ii"), BUILDIN_DEF(changequest, "ii?"),
BUILDIN_DEF(showevent, "i?"), BUILDIN_DEF(showevent, "i??"),
//Bound items [Xantara] & [Akinari] //Bound items [Xantara] & [Akinari]
BUILDIN_DEF2(getitem,"getitembound","vii?"), BUILDIN_DEF2(getitem,"getitembound","vii?"),