* Removed the attempts to recover from invalid syntax in npc_parsesrcfile since they can produce incorrect results (spaces in sscanf can match \n's and company).
* Made script_rid2sd report the script source directly and changed related return 1's to return 0's to avoid double script source reports. * Added missing return 0's after script_rid2sd is used and an extra error message in buildin_set/buildin_setd. git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@11860 54d463be-8e91-2dee-dedb-b68131a5f0ec
This commit is contained in:
parent
fc7b4eaef0
commit
1d827807ae
@ -4,6 +4,13 @@ AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO
|
||||
IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK.
|
||||
|
||||
2007/12/06
|
||||
* Removed the attempts to recover from invalid syntax in npc_parsesrcfile
|
||||
since they can produce incorrect results (spaces in sscanf can match
|
||||
\n's and company).
|
||||
* Made script_rid2sd report the script source directly and changed related
|
||||
return 1's to return 0's to avoid double script source reports.
|
||||
* Added missing return 0's after script_rid2sd is used and an extra error
|
||||
message in buildin_set/buildin_setd. [FlavioJS]
|
||||
* The default event script behaviour is to trigger on labels rather than
|
||||
NPCs now.
|
||||
* Removed several script config options which break NPC compatibility when
|
||||
|
@ -2610,19 +2610,11 @@ void npc_parsesrcfile(const char* filepath)
|
||||
|
||||
// w1<TAB>w2<TAB>w3<TAB>w4
|
||||
if( (count = sscanf(p, "%[^\t\r\n]\t%[^\t\r\n]\t%[^\t\r\n]\t%n%[^\r\n]", w1, w2, w3, &w4pos, w4)) < 3 )
|
||||
{
|
||||
if( (count = sscanf(p, "%s %s %[^\t]\t %n%[^\n]", w1, w2, w3, &w4pos, w4)) == 4
|
||||
|| (count = sscanf(p, "%s %s %s %n%[^\n]\n", w1, w2, w3, &w4pos, w4)) >= 3 )
|
||||
{// Incorrect syntax, try to parse
|
||||
ShowWarning("npc_parsesrcfile: Incorrect separator syntax in file '%s', line '%d'. Use tabs instead of spaces!\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,p-buffer), w1, w2, w3, w4);
|
||||
}
|
||||
else
|
||||
{// Unknown syntax, try to continue
|
||||
ShowError("npc_parsesrcfile: Unknown syntax in file '%s', line '%d'.\n * w1=%s\n * w2=%s\n * w3=%s\n * w4=%s\n", filepath, strline(buffer,p-buffer), w1, w2, w3, w4);
|
||||
p = strchr(p,'\n');// next line
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if( strcmp(w1,"-") !=0 && strcasecmp(w1,"function") != 0 )
|
||||
{// w1 = <map name>,<x>,<y>,<facing>
|
||||
|
282
src/map/script.c
282
src/map/script.c
@ -2092,6 +2092,7 @@ TBL_PC *script_rid2sd(struct script_state *st)
|
||||
TBL_PC *sd=map_id2sd(st->rid);
|
||||
if(!sd){
|
||||
ShowError("script_rid2sd: fatal error ! player not attached!\n");
|
||||
script_reportsrc(st);
|
||||
st->state = END;
|
||||
}
|
||||
return sd;
|
||||
@ -2120,13 +2121,13 @@ int get_val(struct script_state* st, struct script_data* data)
|
||||
{// needs player attached
|
||||
if( postfix == '$' )
|
||||
{// string variable
|
||||
ShowError("script:get_val: cannot access player variable '%s', defaulting to \"\"\n", name);
|
||||
ShowWarning("script:get_val: cannot access player variable '%s', defaulting to \"\"\n", name);
|
||||
data->type = C_CONSTSTR;
|
||||
data->u.str = "";
|
||||
}
|
||||
else
|
||||
{// integer variable
|
||||
ShowError("script:get_val: cannot access player variable '%s', defaulting to 0\n", name);
|
||||
ShowWarning("script:get_val: cannot access player variable '%s', defaulting to 0\n", name);
|
||||
data->type = C_INT;
|
||||
data->u.num = 0;
|
||||
}
|
||||
@ -3660,7 +3661,8 @@ BUILDIN_FUNC(mes)
|
||||
{
|
||||
TBL_PC* sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
clif_scriptmes(sd, st->oid, script_getstr(st, 2));
|
||||
return 0;
|
||||
}
|
||||
@ -3675,7 +3677,7 @@ BUILDIN_FUNC(next)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
st->state = STOP;
|
||||
clif_scriptnext(sd, st->oid);
|
||||
@ -3692,7 +3694,7 @@ BUILDIN_FUNC(close)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
st->state = END;
|
||||
clif_scriptclose(sd, st->oid);
|
||||
@ -3709,7 +3711,7 @@ BUILDIN_FUNC(close2)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
st->state = STOP;
|
||||
clif_scriptclose(sd, st->oid);
|
||||
@ -3776,7 +3778,7 @@ BUILDIN_FUNC(menu)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
// TODO detect multiple scripts waiting for input at the same time, and what to do when that happens
|
||||
if( sd->state.menu_or_input == 0 )
|
||||
@ -3880,7 +3882,7 @@ BUILDIN_FUNC(select)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
if( sd->state.menu_or_input == 0 )
|
||||
{
|
||||
@ -3940,7 +3942,7 @@ BUILDIN_FUNC(prompt)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;
|
||||
return 0;
|
||||
|
||||
if( sd->state.menu_or_input == 0 )
|
||||
{
|
||||
@ -4218,9 +4220,11 @@ BUILDIN_FUNC(warp)
|
||||
int ret;
|
||||
int x,y;
|
||||
const char* str;
|
||||
TBL_PC* sd = script_rid2sd(st);
|
||||
TBL_PC* sd;
|
||||
|
||||
nullpo_retr(0, sd);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
str = script_getstr(st,2);
|
||||
x = script_getnum(st,3);
|
||||
@ -4445,6 +4449,9 @@ BUILDIN_FUNC(warpguild)
|
||||
y=script_getnum(st,4);
|
||||
g=script_getnum(st,5);
|
||||
sd=script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
|
||||
if(map[sd->bl.m].flag.noreturn || map[sd->bl.m].flag.nowarpto)
|
||||
return 0;
|
||||
@ -4559,6 +4566,7 @@ BUILDIN_FUNC(itemheal)
|
||||
BUILDIN_FUNC(percentheal)
|
||||
{
|
||||
int hp,sp;
|
||||
TBL_PC* sd;
|
||||
|
||||
hp=script_getnum(st,2);
|
||||
sp=script_getnum(st,3);
|
||||
@ -4569,7 +4577,11 @@ BUILDIN_FUNC(percentheal)
|
||||
return 0;
|
||||
}
|
||||
|
||||
pc_percentheal(script_rid2sd(st),hp,sp);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pc_percentheal(sd,hp,sp);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -4586,9 +4598,15 @@ BUILDIN_FUNC(jobchange)
|
||||
|
||||
if (pcdb_checkid(job))
|
||||
{
|
||||
pc_jobchange(script_rid2sd(st),job, upper);
|
||||
TBL_PC* sd;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pc_jobchange(sd, job, upper);
|
||||
if(use_irc && irc_announce_jobchange_flag)
|
||||
irc_announce_jobchange(script_rid2sd(st));
|
||||
irc_announce_jobchange(sd);
|
||||
}
|
||||
|
||||
return 0;
|
||||
@ -4615,7 +4633,7 @@ BUILDIN_FUNC(input)
|
||||
char *name=str_buf+str_data[num&0x00ffffff].str;
|
||||
char postfix = name[strlen(name)-1];
|
||||
|
||||
if (!sd) return 1;
|
||||
if (!sd) return 0;
|
||||
|
||||
if( !data_isreference(data) ){
|
||||
ShowError("script:input: not a variable\n");
|
||||
@ -4668,7 +4686,14 @@ BUILDIN_FUNC(set)
|
||||
}
|
||||
|
||||
if(not_server_variable(prefix))
|
||||
{
|
||||
sd=script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
{
|
||||
ShowError("script:set: no player attached for player variable '%s'\n", name);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if( postfix=='$' ){
|
||||
// •¶Žš—ñ
|
||||
@ -4751,7 +4776,7 @@ BUILDIN_FUNC(setarray)
|
||||
{
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached
|
||||
return 0;// no player attached
|
||||
}
|
||||
|
||||
end = start + script_lastdata(st) - 2;
|
||||
@ -4815,7 +4840,7 @@ BUILDIN_FUNC(cleararray)
|
||||
{
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached
|
||||
return 0;// no player attached
|
||||
}
|
||||
|
||||
if( is_string_variable(name) )
|
||||
@ -4890,7 +4915,7 @@ BUILDIN_FUNC(copyarray)
|
||||
{
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached
|
||||
return 0;// no player attached
|
||||
}
|
||||
|
||||
count = script_getnum(st, 4);
|
||||
@ -4993,7 +5018,7 @@ BUILDIN_FUNC(deletearray)
|
||||
{
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached
|
||||
return 0;// no player attached
|
||||
}
|
||||
|
||||
end = getarraysize(st, id, start, is_string_variable(name), reference_getref(data));
|
||||
@ -5086,11 +5111,16 @@ BUILDIN_FUNC(getelementofarray)
|
||||
BUILDIN_FUNC(setlook)
|
||||
{
|
||||
int type,val;
|
||||
TBL_PC* sd;
|
||||
|
||||
type=script_getnum(st,2);
|
||||
val=script_getnum(st,3);
|
||||
|
||||
pc_changelook(script_rid2sd(st),type,val);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pc_changelook(sd,type,val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -5100,7 +5130,13 @@ BUILDIN_FUNC(setlook)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(cutin)
|
||||
{
|
||||
clif_cutin(script_rid2sd(st),script_getstr(st,2),script_getnum(st,3));
|
||||
TBL_PC* sd;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
clif_cutin(sd,script_getstr(st,2),script_getnum(st,3));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -5110,6 +5146,7 @@ BUILDIN_FUNC(cutin)
|
||||
BUILDIN_FUNC(viewpoint)
|
||||
{
|
||||
int type,x,y,id,color;
|
||||
TBL_PC* sd;
|
||||
|
||||
type=script_getnum(st,2);
|
||||
x=script_getnum(st,3);
|
||||
@ -5117,7 +5154,11 @@ BUILDIN_FUNC(viewpoint)
|
||||
id=script_getnum(st,5);
|
||||
color=script_getnum(st,6);
|
||||
|
||||
clif_viewpoint(script_rid2sd(st),st->oid,type,x,y,id,color);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
clif_viewpoint(sd,st->oid,type,x,y,id,color);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -5232,6 +5273,8 @@ BUILDIN_FUNC(checkweight)
|
||||
struct script_data *data;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
data=script_getdata(st,2);
|
||||
get_val(st,data);
|
||||
@ -5354,6 +5397,8 @@ BUILDIN_FUNC(getitem2)
|
||||
struct script_data *data;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
data=script_getdata(st,2);
|
||||
get_val(st,data);
|
||||
@ -5577,6 +5622,8 @@ BUILDIN_FUNC(delitem)
|
||||
struct script_data *data;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
data=script_getdata(st,2);
|
||||
get_val(st,data);
|
||||
@ -5681,6 +5728,8 @@ BUILDIN_FUNC(delitem2)
|
||||
struct script_data *data;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
data=script_getdata(st,2);
|
||||
get_val(st,data);
|
||||
@ -6102,10 +6151,8 @@ BUILDIN_FUNC(getequipid)
|
||||
|
||||
sd=script_rid2sd(st);
|
||||
if(sd == NULL)
|
||||
{
|
||||
ShowError("getequipid: sd == NULL\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
num=script_getnum(st,2);
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
@ -6133,8 +6180,11 @@ BUILDIN_FUNC(getequipname)
|
||||
|
||||
static char pos[11][100] = {"Head","Body","Left hand","Right hand","Robe","Shoes","Accessory 1","Accessory 2","Head 2","Head 3","Not Equipped"};
|
||||
|
||||
buf=(char *)aMallocA(64*sizeof(char));
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
buf=(char *)aMallocA(64*sizeof(char));
|
||||
num=script_getnum(st,2);
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
@ -6161,6 +6211,8 @@ BUILDIN_FUNC(getbrokenid)
|
||||
TBL_PC *sd;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
num=script_getnum(st,2);
|
||||
for(i=0; i<MAX_INVENTORY; i++) {
|
||||
@ -6187,8 +6239,9 @@ BUILDIN_FUNC(repair)
|
||||
int repaircounter=0;
|
||||
TBL_PC *sd;
|
||||
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
num=script_getnum(st,2);
|
||||
for(i=0; i<MAX_INVENTORY; i++) {
|
||||
@ -6217,6 +6270,8 @@ BUILDIN_FUNC(getequipisequiped)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
@ -6238,6 +6293,9 @@ BUILDIN_FUNC(getequipisenableref)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0 && sd->inventory_data[i] && !sd->inventory_data[i]->flag.no_refine)
|
||||
@ -6260,6 +6318,9 @@ BUILDIN_FUNC(getequipisidentify)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0)
|
||||
@ -6280,6 +6341,9 @@ BUILDIN_FUNC(getequiprefinerycnt)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0)
|
||||
@ -6300,6 +6364,9 @@ BUILDIN_FUNC(getequipweaponlv)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0 && sd->inventory_data[i])
|
||||
@ -6320,6 +6387,9 @@ BUILDIN_FUNC(getequippercentrefinery)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0 && sd->status.inventory[i].nameid && sd->status.inventory[i].refine < MAX_REFINE)
|
||||
@ -6340,6 +6410,9 @@ BUILDIN_FUNC(successrefitem)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0) {
|
||||
@ -6393,6 +6466,9 @@ BUILDIN_FUNC(failedrefitem)
|
||||
|
||||
num=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if (num > 0 && num <= ARRAYLENGTH(equip))
|
||||
i=pc_checkequip(sd,equip[num-1]);
|
||||
if(i >= 0) {
|
||||
@ -6423,6 +6499,9 @@ BUILDIN_FUNC(statusup)
|
||||
|
||||
type=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pc_statusup(sd,type);
|
||||
|
||||
return 0;
|
||||
@ -6438,6 +6517,9 @@ BUILDIN_FUNC(statusup2)
|
||||
type=script_getnum(st,2);
|
||||
val=script_getnum(st,3);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pc_statusup2(sd,type,val);
|
||||
|
||||
return 0;
|
||||
@ -6462,7 +6544,7 @@ BUILDIN_FUNC(bonus)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1; // no player attached
|
||||
return 0; // no player attached
|
||||
|
||||
type = script_getnum(st,2);
|
||||
switch( script_lastdata(st) ){
|
||||
@ -6513,7 +6595,7 @@ BUILDIN_FUNC(bonusautoscript)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
str = script_getstr(st,2);
|
||||
rate = script_getnum(st,3);
|
||||
@ -6539,7 +6621,7 @@ BUILDIN_FUNC(bonusautoscript2)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
str = script_getstr(st,2);
|
||||
rate = script_getnum(st,3);
|
||||
@ -6573,7 +6655,7 @@ BUILDIN_FUNC(skill)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
id = script_getnum(st,2);
|
||||
level = script_getnum(st,3);
|
||||
@ -6600,7 +6682,7 @@ BUILDIN_FUNC(addtoskill)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
id = script_getnum(st,2);
|
||||
level = script_getnum(st,3);
|
||||
@ -6623,7 +6705,7 @@ BUILDIN_FUNC(guildskill)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
id = script_getnum(st,2);
|
||||
level = script_getnum(st,3);
|
||||
@ -6643,7 +6725,7 @@ BUILDIN_FUNC(getskilllv)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
id = script_getnum(st,2);
|
||||
script_pushint(st, pc_checkskill(sd,id));
|
||||
@ -6691,7 +6773,7 @@ BUILDIN_FUNC(getgmlevel)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
script_pushint(st, pc_isGM(sd));
|
||||
|
||||
@ -6717,7 +6799,7 @@ BUILDIN_FUNC(checkoption)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
option = script_getnum(st,2);
|
||||
if( sd->sc.option&option )
|
||||
@ -6738,7 +6820,7 @@ BUILDIN_FUNC(checkoption1)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
opt1 = script_getnum(st,2);
|
||||
if( sd->sc.opt1 == opt1 )
|
||||
@ -6759,7 +6841,7 @@ BUILDIN_FUNC(checkoption2)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
opt2 = script_getnum(st,2);
|
||||
if( sd->sc.opt2&opt2 )
|
||||
@ -6785,7 +6867,7 @@ BUILDIN_FUNC(setoption)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
option = script_getnum(st,2);
|
||||
if( script_hasdata(st,3) )
|
||||
@ -6815,7 +6897,7 @@ BUILDIN_FUNC(checkcart)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
if( pc_iscarton(sd) )
|
||||
script_pushint(st, 1);
|
||||
@ -6843,7 +6925,7 @@ BUILDIN_FUNC(setcart)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
if( script_hasdata(st,2) )
|
||||
type = script_getnum(st,2);
|
||||
@ -6863,7 +6945,7 @@ BUILDIN_FUNC(checkfalcon)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
if( pc_isfalcon(sd) )
|
||||
script_pushint(st, 1);
|
||||
@ -6885,7 +6967,7 @@ BUILDIN_FUNC(setfalcon)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
if( script_hasdata(st,2) )
|
||||
flag = script_getnum(st,2);
|
||||
@ -6906,7 +6988,7 @@ BUILDIN_FUNC(checkriding)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
if( pc_isriding(sd) )
|
||||
script_pushint(st, 1);
|
||||
@ -6928,7 +7010,7 @@ BUILDIN_FUNC(setriding)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
if( script_hasdata(st,2) )
|
||||
flag = script_getnum(st,2);
|
||||
@ -6951,7 +7033,7 @@ BUILDIN_FUNC(savepoint)
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 1;// no player attached, report source
|
||||
return 0;// no player attached, report source
|
||||
|
||||
str = script_getstr(st, 2);
|
||||
x = script_getnum(st,3);
|
||||
@ -7070,14 +7152,25 @@ BUILDIN_FUNC(gettimestr)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(openstorage)
|
||||
{
|
||||
storage_storageopen(script_rid2sd(st));
|
||||
TB_PC* sd;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
storage_storageopen(sd);
|
||||
return 0;
|
||||
}
|
||||
|
||||
BUILDIN_FUNC(guildopenstorage)
|
||||
{
|
||||
TBL_PC *sd=script_rid2sd(st);
|
||||
TBL_PC* sd;
|
||||
int ret;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
ret = storage_guild_storageopen(sd);
|
||||
script_pushint(st,ret);
|
||||
return 0;
|
||||
@ -7108,7 +7201,11 @@ BUILDIN_FUNC(itemskill)
|
||||
BUILDIN_FUNC(produce)
|
||||
{
|
||||
int trigger;
|
||||
TBL_PC *sd=script_rid2sd(st);
|
||||
TBL_PC* sd;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
trigger=script_getnum(st,2);
|
||||
clif_skill_produce_mix_list(sd, trigger);
|
||||
@ -7119,10 +7216,13 @@ BUILDIN_FUNC(produce)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(makepet)
|
||||
{
|
||||
TBL_PC *sd = script_rid2sd(st);
|
||||
TBL_PC* sd;
|
||||
int id,pet_id;
|
||||
|
||||
id=script_getnum(st,2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pet_id = search_petDB_index(id, PET_CLASS);
|
||||
|
||||
@ -7144,11 +7244,13 @@ BUILDIN_FUNC(makepet)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(getexp)
|
||||
{
|
||||
TBL_PC *sd = script_rid2sd(st);
|
||||
TBL_PC* sd;;
|
||||
int base=0,job=0;
|
||||
double bonus;
|
||||
|
||||
nullpo_retr(0, sd);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
base=script_getnum(st,2);
|
||||
job =script_getnum(st,3);
|
||||
@ -7170,9 +7272,13 @@ BUILDIN_FUNC(getexp)
|
||||
*------------------------------------------*/
|
||||
BUILDIN_FUNC(guildgetexp)
|
||||
{
|
||||
TBL_PC *sd = script_rid2sd(st);
|
||||
TBL_PC* sd;
|
||||
int exp;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
exp = script_getnum(st,2);
|
||||
if(exp < 0)
|
||||
return 0;
|
||||
@ -7397,9 +7503,14 @@ BUILDIN_FUNC(addtimer)
|
||||
{
|
||||
int tick = script_getnum(st,2);
|
||||
const char* event = script_getstr(st, 3);
|
||||
TBL_PC* sd;
|
||||
|
||||
check_event(st, event);
|
||||
pc_addeventtimer(script_rid2sd(st),tick,event);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pc_addeventtimer(sd,tick,event);
|
||||
return 0;
|
||||
}
|
||||
/*==========================================
|
||||
@ -7408,9 +7519,15 @@ BUILDIN_FUNC(addtimer)
|
||||
BUILDIN_FUNC(deltimer)
|
||||
{
|
||||
const char *event;
|
||||
TBL_PC* sd;
|
||||
|
||||
event=script_getstr(st, 2);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
check_event(st, event);
|
||||
pc_deleventtimer(script_rid2sd(st),event);
|
||||
pc_deleventtimer(sd,event);
|
||||
return 0;
|
||||
}
|
||||
/*==========================================
|
||||
@ -7420,10 +7537,16 @@ BUILDIN_FUNC(addtimercount)
|
||||
{
|
||||
const char *event;
|
||||
int tick;
|
||||
TBL_PC* sd;
|
||||
|
||||
event=script_getstr(st, 2);
|
||||
tick=script_getnum(st,3);
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
check_event(st, event);
|
||||
pc_addeventtimercount(script_rid2sd(st),event,tick);
|
||||
pc_addeventtimercount(sd,event,tick);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -7459,7 +7582,9 @@ BUILDIN_FUNC(initnpctimer)
|
||||
if (!nd) return 0;
|
||||
if (flag) { //Attach
|
||||
TBL_PC* sd = script_rid2sd(st);
|
||||
if (sd) nd->u.scr.rid = sd->bl.id;
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
nd->u.scr.rid = sd->bl.id;
|
||||
}
|
||||
|
||||
npc_settimerevent_tick(nd,0);
|
||||
@ -7498,7 +7623,9 @@ BUILDIN_FUNC(startnpctimer)
|
||||
if (!nd) return 0;
|
||||
if (flag) { //Attach
|
||||
TBL_PC* sd = script_rid2sd(st);
|
||||
if (sd) nd->u.scr.rid = sd->bl.id;
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
nd->u.scr.rid = sd->bl.id;
|
||||
}
|
||||
|
||||
npc_timerevent_start(nd, st->rid);
|
||||
@ -7661,6 +7788,8 @@ BUILDIN_FUNC(announce)
|
||||
if(flag&0x0f){
|
||||
struct block_list *bl=(flag&0x08)? map_id2bl(st->oid) :
|
||||
(struct block_list *)script_rid2sd(st);
|
||||
if( bl == NULL )
|
||||
return 0;
|
||||
if (color)
|
||||
clif_announce(bl,str,(int)strlen(str)+1, strtol(color, (char **)NULL, 0),flag);
|
||||
else
|
||||
@ -8124,8 +8253,12 @@ BUILDIN_FUNC(catchpet)
|
||||
{
|
||||
int pet_id;
|
||||
TBL_PC *sd;
|
||||
|
||||
pet_id= script_getnum(st,2);
|
||||
sd=script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pet_catch_process1(sd,pet_id);
|
||||
return 0;
|
||||
}
|
||||
@ -8136,7 +8269,11 @@ BUILDIN_FUNC(catchpet)
|
||||
BUILDIN_FUNC(homunculus_evolution)
|
||||
{
|
||||
TBL_PC *sd;
|
||||
|
||||
sd=script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if(merc_is_hom_active(sd->hd))
|
||||
{
|
||||
if (sd->hd->homunculus.intimacy > 91000)
|
||||
@ -8151,7 +8288,11 @@ BUILDIN_FUNC(homunculus_evolution)
|
||||
BUILDIN_FUNC(homunculus_shuffle)
|
||||
{
|
||||
TBL_PC *sd;
|
||||
|
||||
sd=script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
if(merc_is_hom_active(sd->hd))
|
||||
merc_hom_shuffle(sd->hd);
|
||||
|
||||
@ -8201,6 +8342,9 @@ BUILDIN_FUNC(birthpet)
|
||||
{
|
||||
TBL_PC *sd;
|
||||
sd=script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
clif_sendegg(sd);
|
||||
return 0;
|
||||
}
|
||||
@ -8215,6 +8359,9 @@ BUILDIN_FUNC(resetlvl)
|
||||
int type=script_getnum(st,2);
|
||||
|
||||
sd=script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
pc_resetlvl(sd,type);
|
||||
return 0;
|
||||
}
|
||||
@ -11482,11 +11629,18 @@ BUILDIN_FUNC(setd)
|
||||
buffer = script_getstr(st, 2);
|
||||
value = script_getstr(st, 3);
|
||||
|
||||
if(sscanf(buffer, "%[^[][%d]", varname, &elem) < 2)
|
||||
if(sscanf(buffer, "%99[^[][%d]", varname, &elem) < 2)
|
||||
elem = 0;
|
||||
|
||||
if(st->rid)
|
||||
if( not_server_variable(*varname) )
|
||||
{
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
{
|
||||
ShowError("script:setd: no player attached for player variable '%s'\n", buffer);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
if(varname[strlen(varname)-1] != '$') {
|
||||
setd_sub(st,sd, varname, elem, (void *)atoi(value),NULL);
|
||||
@ -12756,8 +12910,14 @@ BUILDIN_FUNC(warpportal)
|
||||
|
||||
BUILDIN_FUNC(openmail)
|
||||
{
|
||||
TBL_PC* sd;
|
||||
|
||||
sd = script_rid2sd(st);
|
||||
if( sd == NULL )
|
||||
return 0;
|
||||
|
||||
#ifndef TXT_ONLY
|
||||
mail_openmail(script_rid2sd(st));
|
||||
mail_openmail(sd);
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user