summaryrefslogtreecommitdiff
path: root/src/map
diff options
context:
space:
mode:
Diffstat (limited to 'src/map')
-rw-r--r--src/map/script.c246
1 files changed, 124 insertions, 122 deletions
diff --git a/src/map/script.c b/src/map/script.c
index 1fc0604ae..c20278dc2 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -64,8 +64,12 @@
#define script_lastdata(st) ( (st)->end - (st)->start - 1 )
/// Pushes an int into the stack
#define script_pushint(st,val) push_val((st)->stack, C_INT, (val))
+#define script_pushstr(st,val) push_str((st)->stack, C_STR, (val))
+#define script_pushconststr(st,val) push_str((st)->stack, C_CONSTSTR, (val))
+
#define script_getnum(st,val) conv_num(st, script_getdata(st,val))
#define script_getstr(st,val) conv_str(st, script_getdata(st,val))
+#define script_getref(st,val) ((st)->stack->stack_data[(st)->start+(val)].ref)
//
// struct script_data* data;
//
@@ -76,6 +80,10 @@
#define data_isint(data) ( (data)->type == C_INT )
/// Returns if the script data is a reference
#define data_isreference(data) ( (data)->type == C_NAME )
+/// Returns if the script data is a label
+#define data_islabel(data) ( (data)->type == C_POS )
+/// Returns if the script data is an internal script function label
+#define data_isfunclabel(data) ( (data)->type == C_USERFUNC_POS )
#define FETCH(n, t) \
if( script_hasdata(st,n) ) \
@@ -1955,7 +1963,7 @@ int get_val(struct script_state* st, struct script_data* data)
struct map_session_data* sd = NULL;
char *name, prefix, postfix;
- if(data->type != C_NAME) return 0;
+ if(!data_isreference(data)) return 0;
name = str_buf + str_data[data->u.num&0x00ffffff].str;
prefix = name[0]; postfix = name[strlen(name)-1];
@@ -2116,18 +2124,18 @@ int set_var(struct map_session_data* sd, char* name, void* val)
const char* conv_str(struct script_state *st,struct script_data *data)
{
get_val(st,data);
- if(data->type==C_INT){
+ if(data_isint(data)){
char *buf;
CREATE(buf,char,ITEM_NAME_LENGTH);
snprintf(buf,ITEM_NAME_LENGTH, "%d",data->u.num);
buf[ITEM_NAME_LENGTH-1]=0;
data->type=C_STR;
data->u.str=buf;
- } else if(data->type==C_POS) {
- // Protect form crashes by passing labels to string-expected args [jA2200]
+ } else if(data_islabel(data)) {
+ // Protect from crashes by passing labels to string-expected args [jA2200]
data->type = C_CONSTSTR;
data->u.str = "** SCRIPT ERROR **";
- } else if(data->type==C_NAME){
+ } else if(data_isreference(data)){
data->type=C_CONSTSTR;
data->u.str=str_buf+str_data[data->u.num].str;
}
@@ -2142,7 +2150,7 @@ int conv_num(struct script_state *st,struct script_data *data)
{
char *p;
get_val(st,data);
- if(data->type==C_STR || data->type==C_CONSTSTR){
+ if(data_isstring(data)){
p=data->u.str;
data->u.num = atoi(p);
if(data->type==C_STR)
@@ -2362,9 +2370,9 @@ int pop_val(struct script_state* st)
}
int isstr(struct script_data *c) {
- if( c->type == C_STR || c->type == C_CONSTSTR )
+ if( data_isstring(c) )
return 1;
- else if( c->type == C_NAME ) {
+ else if( data_isreference(c) ) {
char *p = str_buf + str_data[c->u.num & 0xffffff].str;
char postfix = p[strlen(p)-1];
return (postfix == '$');
@@ -4221,7 +4229,7 @@ BUILDIN_FUNC(goto)
{
int pos;
- if( st->stack->stack_data[st->start+2].type!=C_POS){
+ if( !data_islabel(script_getdata(st,2))){
ShowMessage("script: goto: not label!\n");
st->state=END;
return 1;
@@ -4264,7 +4272,7 @@ BUILDIN_FUNC(callfunc)
// ' 変数の引き継ぎ
for(i = 0; i < j; i++) {
struct script_data *s = &st->stack->stack_data[st->stack->sp-6-i];
- if( s->type == C_NAME && !s->ref ) {
+ if( data_isreference(s) && !s->ref ) {
char *name = str_buf+str_data[s->u.num&0x00ffffff].str;
// '@ 変数の引き継ぎ
if( name[0] == '.' && name[1] == '@' ) {
@@ -4289,7 +4297,7 @@ BUILDIN_FUNC(callsub)
{
int pos=script_getnum(st,2);
int i,j;
- if(st->stack->stack_data[st->start+2].type != C_POS && st->stack->stack_data[st->start+2].type != C_USERFUNC_POS) {
+ if(!data_islabel(script_getdata(st,2)) && !data_isfunclabel(script_getdata(st,2))) {
ShowError("script: callsub: not label !\n");
st->state=END;
return 1;
@@ -4313,7 +4321,7 @@ BUILDIN_FUNC(callsub)
// ' 変数の引き継ぎ
for(i = 0; i < j; i++) {
struct script_data *s = &st->stack->stack_data[st->stack->sp-6-i];
- if( s->type == C_NAME && !s->ref ) {
+ if( data_isreference(s) && !s->ref ) {
char *name = str_buf+str_data[s->u.num&0x00ffffff].str;
// '@ 変数の引き継ぎ
if( name[0] == '.' && name[1] == '@' ) {
@@ -4359,7 +4367,7 @@ BUILDIN_FUNC(return)
struct script_data *sd;
push_copy(st->stack,st->start+2);
sd = &st->stack->stack_data[st->stack->sp-1];
- if(sd->type == C_NAME) {
+ if(data_isreference(sd)) {
char *name = str_buf + str_data[sd->u.num&0x00ffffff].str;
if( name[0] == '.' && name[1] == '@') {
// '@ 変数を参照渡しにすると危険なので値渡しにする
@@ -4467,7 +4475,7 @@ BUILDIN_FUNC(menu)
st->state=END;
return 0;
}
- if( st->stack->stack_data[st->start+sd->npc_menu*2+1].type!=C_POS ){
+ if( !data_islabel(script_getdata(st, sd->npc_menu*2+1)) ){
ShowError("script: menu: not label !\n");
st->state=END;
return 1;
@@ -4889,7 +4897,7 @@ BUILDIN_FUNC(jobchange)
BUILDIN_FUNC(jobname)
{
int class_=script_getnum(st,2);
- push_str(st->stack,C_CONSTSTR,job_name(class_));
+ script_pushconststr(st,job_name(class_));
return 0;
}
@@ -4907,7 +4915,7 @@ BUILDIN_FUNC(input)
if (!sd) return 1;
- if( data->type!=C_NAME ){
+ if( !data_isreference(data) ){
ShowError("script: buildin_input: given argument is not a variable!\n");
return 1;
}
@@ -4917,7 +4925,7 @@ BUILDIN_FUNC(input)
if( postfix=='$' )
{
set_reg(st,sd,num,name,(void*)sd->npc_str,
- st->stack->stack_data[st->start+2].ref);
+ script_getref(st,2));
return 0;
}
// Yor, Lupus & Fritz have messed with this.
@@ -4925,7 +4933,7 @@ BUILDIN_FUNC(input)
sd->npc_amount = cap_value(sd->npc_amount, 0, battle_config.vending_max_value);
set_reg(st,sd,num,name,(void*)sd->npc_amount,
- st->stack->stack_data[st->start+2].ref);
+ script_getref(st,2));
return 0;
}
//state.menu_or_input = 0
@@ -4950,7 +4958,7 @@ BUILDIN_FUNC(set)
char prefix=*name;
char postfix=name[strlen(name)-1];
- if( st->stack->stack_data[st->start+2].type!=C_NAME ){
+ if( !data_isreference(script_getdata(st,2)) ){
ShowError("script: buildin_set: not name\n");
return 1;
}
@@ -4961,11 +4969,11 @@ BUILDIN_FUNC(set)
if( postfix=='$' ){
// 文字列
const char *str = script_getstr(st,3);
- set_reg(st,sd,num,name,(void*)str,st->stack->stack_data[st->start+2].ref);
+ set_reg(st,sd,num,name,(void*)str,script_getref(st,2));
}else{
// 数値
int val = script_getnum(st,3);
- set_reg(st,sd,num,name,(void*)val,st->stack->stack_data[st->start+2].ref);
+ set_reg(st,sd,num,name,(void*)val,script_getref(st,2));
}
return 0;
@@ -4997,7 +5005,7 @@ BUILDIN_FUNC(setarray)
v=(void*)conv_str(st,& (st->stack->stack_data[i]));
else
v=(void*)conv_num(st,& (st->stack->stack_data[i]));
- set_reg(st, sd, num+(j<<24), name, v, st->stack->stack_data[st->start+2].ref);
+ set_reg(st, sd, num+(j<<24), name, v, script_getref(st,2));
}
return 0;
}
@@ -5029,7 +5037,7 @@ BUILDIN_FUNC(cleararray)
v=(void*)script_getnum(st,3);
for(i=0;i<sz;i++)
- set_reg(st,sd,num+(i<<24),name,v,st->stack->stack_data[st->start+2].ref);
+ set_reg(st,sd,num+(i<<24),name,v,script_getref(st,2));
return 0;
}
/*==========================================
@@ -5070,15 +5078,15 @@ BUILDIN_FUNC(copyarray)
for(i=sz-1;i>=0;i--)
set_reg(
st,sd,num+(i<<24),name,
- get_val2(st,num2+(i<<24),st->stack->stack_data[st->start+3].ref),
- st->stack->stack_data[st->start+2].ref
+ get_val2(st,num2+(i<<24),script_getref(st,3)),
+ script_getref(st,2)
);
} else {
for(i=0;i<sz;i++)
set_reg(
st,sd,num+(i<<24),name,
- get_val2(st,num2+(i<<24),st->stack->stack_data[st->start+3].ref),
- st->stack->stack_data[st->start+2].ref
+ get_val2(st,num2+(i<<24),script_getref(st,3)),
+ script_getref(st,2)
);
}
return 0;
@@ -5118,7 +5126,7 @@ BUILDIN_FUNC(getarraysize)
return 1;
}
- script_pushint(st,getarraysize(st, num, postfix, st->stack->stack_data[st->start+2].ref));
+ script_pushint(st,getarraysize(st, num, postfix, script_getref(st,2)));
return 0;
}
/*==========================================
@@ -5133,7 +5141,7 @@ BUILDIN_FUNC(deletearray)
char prefix=*name;
char postfix=name[strlen(name)-1];
int count=1;
- int i,sz=getarraysize(st,num,postfix,st->stack->stack_data[st->start+2].ref)-(num>>24)-count+1;
+ int i,sz=getarraysize(st,num,postfix,script_getref(st,2))-(num>>24)-count+1;
if( script_hasdata(st,3) )
@@ -5149,17 +5157,17 @@ BUILDIN_FUNC(deletearray)
for(i=0;i<sz;i++){
set_reg(
st,sd,num+(i<<24),name,
- get_val2(st,num+((i+count)<<24),st->stack->stack_data[st->start+2].ref),
- st->stack->stack_data[st->start+2].ref
+ get_val2(st,num+((i+count)<<24),script_getref(st,2)),
+ script_getref(st,2)
);
}
if(postfix != '$'){
for(;i<(128-(num>>24));i++)
- set_reg(st,sd,num+(i<<24),name, 0,st->stack->stack_data[st->start+2].ref);
+ set_reg(st,sd,num+(i<<24),name, 0,script_getref(st,2));
} else {
for(;i<(128-(num>>24));i++)
- set_reg(st,sd,num+(i<<24),name, (void *) "",st->stack->stack_data[st->start+2].ref);
+ set_reg(st,sd,num+(i<<24),name, (void *) "",script_getref(st,2));
}
return 0;
}
@@ -5170,7 +5178,7 @@ BUILDIN_FUNC(deletearray)
*/
BUILDIN_FUNC(getelementofarray)
{
- if( st->stack->stack_data[st->start+2].type==C_NAME ){
+ if( data_isreference(script_getdata(st, 2)) ){
int i=script_getnum(st,3);
if(i>127 || i<0){
ShowWarning("script: getelementofarray (operator[]): param2 illegal number %d\n",i);
@@ -5178,7 +5186,7 @@ BUILDIN_FUNC(getelementofarray)
return 1;
}else{
push_val2(st->stack,C_NAME,
- (i<<24) | st->stack->stack_data[st->start+2].u.num, st->stack->stack_data[st->start+2].ref );
+ (i<<24) | st->stack->stack_data[st->start+2].u.num, script_getref(st,2) );
}
}else{
ShowError("script: getelementofarray (operator[]): param1 not name !\n");
@@ -5209,13 +5217,7 @@ BUILDIN_FUNC(setlook)
*/
BUILDIN_FUNC(cutin)
{
- int type;
-
- script_getstr(st,2);
- type=script_getnum(st,3);
-
- clif_cutin(script_rid2sd(st),st->stack->stack_data[st->start+2].u.str,type);
-
+ clif_cutin(script_rid2sd(st),script_getstr(st,2),script_getnum(st,3));
return 0;
}
@@ -5517,10 +5519,10 @@ BUILDIN_FUNC(getitem2)
item_data=itemdb_exists(nameid);
if (item_data == NULL)
return -1;
- if(item_data->type==4 || item_data->type==5){
+ if(item_data->type==IT_WEAPON || item_data->type==IT_ARMOR){
if(ref > 10) ref = 10;
}
- else if(item_data->type==7) {
+ else if(item_data->type==IT_PETEGG) {
iden = 1;
ref = 0;
}
@@ -5532,7 +5534,7 @@ BUILDIN_FUNC(getitem2)
item_tmp.nameid=nameid;
if(!flag)
item_tmp.identify=iden;
- else if(item_data->type==4 || item_data->type==5)
+ else if(item_data->type==IT_WEAPON || item_data->type==IT_ARMOR)
item_tmp.identify=0;
item_tmp.refine=ref;
item_tmp.attribute=attr;
@@ -5978,9 +5980,9 @@ BUILDIN_FUNC(getpartyname)
party_id=script_getnum(st,2);
name=buildin_getpartyname_sub(party_id);
if(name != NULL)
- push_str(st->stack,C_STR,name);
+ script_pushstr(st,name);
else
- push_str(st->stack,C_CONSTSTR,"null");
+ script_pushconststr(st,"null");
return 0;
}
@@ -6043,7 +6045,7 @@ BUILDIN_FUNC(getpartyleader)
if (type)
script_pushint(st,-1);
else
- push_str(st->stack,C_CONSTSTR,"null");
+ script_pushconststr(st,"null");
return 0;
}
@@ -6058,13 +6060,13 @@ BUILDIN_FUNC(getpartyleader)
script_pushint(st,p->party.member[i].class_);
break;
case 4:
- push_str(st->stack,C_STR,aStrdup(mapindex_id2name(p->party.member[i].map)));
+ script_pushstr(st,aStrdup(mapindex_id2name(p->party.member[i].map)));
break;
case 5:
script_pushint(st,p->party.member[i].lv);
break;
default:
- push_str(st->stack,C_STR,aStrdup(p->party.member[i].name));
+ script_pushstr(st,aStrdup(p->party.member[i].name));
break;
}
return 0;
@@ -6094,9 +6096,9 @@ BUILDIN_FUNC(getguildname)
int guild_id=script_getnum(st,2);
name=buildin_getguildname_sub(guild_id);
if(name != NULL)
- push_str(st->stack,C_STR,name);
+ script_pushstr(st,name);
else
- push_str(st->stack,C_CONSTSTR,"null");
+ script_pushconststr(st,"null");
return 0;
}
@@ -6125,9 +6127,9 @@ BUILDIN_FUNC(getguildmaster)
int guild_id=script_getnum(st,2);
master=buildin_getguildmaster_sub(guild_id);
if(master!=0)
- push_str(st->stack,C_STR,master);
+ script_pushstr(st,master);
else
- push_str(st->stack,C_CONSTSTR,"null");
+ script_pushconststr(st,"null");
return 0;
}
@@ -6161,31 +6163,31 @@ BUILDIN_FUNC(strcharinfo)
sd=script_rid2sd(st);
if (!sd) { //Avoid crashing....
- push_str(st->stack,C_CONSTSTR,"");
+ script_pushconststr(st,"");
return 0;
}
num=script_getnum(st,2);
switch(num){
case 0:
- push_str(st->stack,C_STR,aStrdup(sd->status.name));
+ script_pushstr(st,aStrdup(sd->status.name));
break;
case 1:
buf=buildin_getpartyname_sub(sd->status.party_id);
if(buf!=0)
- push_str(st->stack,C_STR,buf);
+ script_pushstr(st,buf);
else
- push_str(st->stack,C_CONSTSTR,"");
+ script_pushconststr(st,"");
break;
case 2:
buf=buildin_getguildname_sub(sd->status.guild_id);
if(buf != NULL)
- push_str(st->stack,C_STR,buf);
+ script_pushstr(st,buf);
else
- push_str(st->stack,C_CONSTSTR,"");
+ script_pushconststr(st,"");
break;
default:
ShowWarning("buildin_strcharinfo: unknown parameter.");
- push_str(st->stack,C_CONSTSTR,"");
+ script_pushconststr(st,"");
break;
}
@@ -6248,7 +6250,7 @@ BUILDIN_FUNC(getequipname)
}else{
sprintf(buf,"%s-[%s]",pos[num-1],pos[10]);
}
- push_str(st->stack,C_STR,buf);
+ script_pushstr(st,buf);
return 0;
}
@@ -7062,7 +7064,7 @@ BUILDIN_FUNC(gettimestr)
strftime(tmpstr,maxlen,fmtstr,localtime(&now));
tmpstr[maxlen]='\0';
- push_str(st->stack,C_STR,tmpstr);
+ script_pushstr(st,tmpstr);
return 0;
}
@@ -8495,13 +8497,13 @@ BUILDIN_FUNC(getwaitingroomstate)
case 33: val=(cd->users >= cd->trigger); break;
case 4:
- push_str(st->stack,C_CONSTSTR,cd->title);
+ script_pushconststr(st,cd->title);
return 0;
case 5:
- push_str(st->stack,C_CONSTSTR,cd->pass);
+ script_pushconststr(st,cd->pass);
return 0;
case 16:
- push_str(st->stack,C_CONSTSTR,cd->npc_event);
+ script_pushconststr(st,cd->npc_event);
return 0;
}
script_pushint(st,val);
@@ -9124,9 +9126,9 @@ BUILDIN_FUNC(getcastlename)
gc = guild_mapname2gc(mapname);
if(gc)
- push_str(st->stack,C_CONSTSTR,gc->castle_name);
+ script_pushconststr(st,gc->castle_name);
else
- push_str(st->stack,C_CONSTSTR,"");
+ script_pushconststr(st,"");
return 0;
}
@@ -9728,10 +9730,10 @@ BUILDIN_FUNC(strmobinfo)
switch (num) {
case 1:
- push_str(st->stack,C_CONSTSTR,mob_db(class_)->name);
+ script_pushconststr(st,mob_db(class_)->name);
break;
case 2:
- push_str(st->stack,C_CONSTSTR,mob_db(class_)->jname);
+ script_pushconststr(st,mob_db(class_)->jname);
break;
case 3:
script_pushint(st,mob_db(class_)->lv);
@@ -9845,13 +9847,13 @@ BUILDIN_FUNC(getitemname)
i_data = itemdb_exists(item_id);
if (i_data == NULL)
{
- push_str(st->stack,C_CONSTSTR,"null");
+ script_pushconststr(st,"null");
return 0;
}
item_name=(char *)aMallocA(ITEM_NAME_LENGTH*sizeof(char));
memcpy(item_name, i_data->jname, ITEM_NAME_LENGTH);
- push_str(st->stack,C_STR,item_name);
+ script_pushstr(st,item_name);
return 0;
}
/*==========================================
@@ -10677,9 +10679,9 @@ BUILDIN_FUNC(getpetinfo)
break;
case 2:
if(pd->pet.name)
- push_str(st->stack,C_CONSTSTR,pd->pet.name);
+ script_pushconststr(st,pd->pet.name);
else
- push_str(st->stack,C_CONSTSTR,"null");
+ script_pushconststr(st,"null");
break;
case 3:
script_pushint(st,pd->pet.intimate);
@@ -10733,7 +10735,7 @@ BUILDIN_FUNC(jump_zero)
sel=script_getnum(st,2);
if(!sel) {
int pos;
- if( st->stack->stack_data[st->start+3].type!=C_POS ){
+ if( !data_islabel(script_getdata(st,2)) ){
ShowError("script: jump_zero: not label !\n");
st->state=END;
return 0;
@@ -11086,7 +11088,7 @@ BUILDIN_FUNC(getsavepoint)
mapname=(char *) aMallocA((MAP_NAME_LENGTH+1)*sizeof(char));
memcpy(mapname, mapindex_id2name(sd->status.save_point.map), MAP_NAME_LENGTH);
mapname[MAP_NAME_LENGTH]='\0';
- push_str(st->stack,C_STR,mapname);
+ script_pushstr(st,mapname);
break;
case 1:
script_pushint(st,x);
@@ -11135,17 +11137,17 @@ BUILDIN_FUNC(getmapxy)
char mapname[MAP_NAME_LENGTH+1];
memset(mapname, 0, sizeof(mapname));
- if( st->stack->stack_data[st->start+2].type!=C_NAME ){
+ if( !data_isreference(script_getdata(st,2)) ){
ShowWarning("script: buildin_getmapxy: not mapname variable\n");
script_pushint(st,-1);
return 1;
}
- if( st->stack->stack_data[st->start+3].type!=C_NAME ){
+ if( !data_isreference(script_getdata(st,3)) ){
ShowWarning("script: buildin_getmapxy: not mapx variable\n");
script_pushint(st,-1);
return 1;
}
- if( st->stack->stack_data[st->start+4].type!=C_NAME ){
+ if( !data_isreference(script_getdata(st,4)) ){
ShowWarning("script: buildin_getmapxy: not mapy variable\n");
script_pushint(st,-1);
return 1;
@@ -11213,7 +11215,7 @@ BUILDIN_FUNC(getmapxy)
sd=script_rid2sd(st);
else
sd=NULL;
- set_reg(st,sd,num,name,(void*)mapname,st->stack->stack_data[st->start+2].ref);
+ set_reg(st,sd,num,name,(void*)mapname,script_getref(st,2));
//Set MapX
num=st->stack->stack_data[st->start+3].u.num;
@@ -11224,7 +11226,7 @@ BUILDIN_FUNC(getmapxy)
sd=script_rid2sd(st);
else
sd=NULL;
- set_reg(st,sd,num,name,(void*)x,st->stack->stack_data[st->start+3].ref);
+ set_reg(st,sd,num,name,(void*)x,script_getref(st,3));
//Set MapY
num=st->stack->stack_data[st->start+4].u.num;
@@ -11235,7 +11237,7 @@ BUILDIN_FUNC(getmapxy)
sd=script_rid2sd(st);
else
sd=NULL;
- set_reg(st,sd,num,name,(void*)y,st->stack->stack_data[st->start+4].ref);
+ set_reg(st,sd,num,name,(void*)y,script_getref(st,4));
//Return Success value
script_pushint(st,0);
@@ -11874,7 +11876,7 @@ BUILDIN_FUNC(query_sql)
// Verify argument types
for(j=0; j < nb_rows; j++)
{
- if(st->stack->stack_data[st->start+3+j].type != C_NAME){
+ if(!data_isreference(script_getdata(st, 3+j))){
ShowWarning("buildin_query_sql: Parameter %d is not a variable!\n", j);
script_pushint(st,0);
return 0;
@@ -11893,9 +11895,9 @@ BUILDIN_FUNC(query_sql)
for(j=0; j < nb_rows; j++)
{
if (row[j].type == 1)
- setd_sub(st,sd, row[j].dst_var_name, i, (void *)atoi(sql_row[j]),st->stack->stack_data[st->start+3+j].ref);
+ setd_sub(st,sd, row[j].dst_var_name, i, (void *)atoi(sql_row[j]),script_getref(st,3+j));
else
- setd_sub(st,sd, row[j].dst_var_name, i, (void *)sql_row[j],st->stack->stack_data[st->start+3+j].ref);
+ setd_sub(st,sd, row[j].dst_var_name, i, (void *)sql_row[j],script_getref(st,3+j));
}
i++;
}
@@ -11919,7 +11921,7 @@ BUILDIN_FUNC(escape_sql)
t_query = aMallocA((strlen(query)*2+1)*sizeof(char));
jstrescapecpy(t_query,query);
- push_str(st->stack,C_STR,t_query);
+ script_pushstr(st,t_query);
return 0;
}
@@ -12267,7 +12269,7 @@ BUILDIN_FUNC(getmonsterinfo)
mob = mob_db(mob_id);
switch ( script_getnum(st,3) ) {
case 0: //Name
- push_str(st->stack,C_CONSTSTR,mob->jname);
+ script_pushconststr(st,mob->jname);
break;
case 1: //Lvl
script_pushint(st,mob->lv);
@@ -12422,28 +12424,28 @@ BUILDIN_FUNC(rid2name)
if((bl = map_id2bl(rid))){
switch(bl->type){
case BL_MOB:
- push_str(st->stack,C_CONSTSTR,((TBL_MOB*)bl)->name);
+ script_pushconststr(st,((TBL_MOB*)bl)->name);
break;
case BL_PC:
- push_str(st->stack,C_CONSTSTR,((TBL_PC*)bl)->status.name);
+ script_pushconststr(st,((TBL_PC*)bl)->status.name);
break;
case BL_NPC:
- push_str(st->stack,C_CONSTSTR,((TBL_NPC*)bl)->exname);
+ script_pushconststr(st,((TBL_NPC*)bl)->exname);
break;
case BL_PET:
- push_str(st->stack,C_CONSTSTR,((TBL_PET*)bl)->pet.name);
+ script_pushconststr(st,((TBL_PET*)bl)->pet.name);
break;
case BL_HOM:
- push_str(st->stack,C_CONSTSTR,((TBL_HOM*)bl)->homunculus.name);
+ script_pushconststr(st,((TBL_HOM*)bl)->homunculus.name);
break;
default:
ShowError("buildin_rid2name: BL type unknown.\n");
- push_str(st->stack,C_CONSTSTR,"");
+ script_pushconststr(st,"");
break;
}
} else {
ShowError("buildin_rid2name: invalid RID\n");
- push_str(st->stack,C_CONSTSTR,"(null)");
+ script_pushconststr(st,"(null)");
}
return 0;
}
@@ -12550,40 +12552,40 @@ BUILDIN_FUNC(getmobdata)
struct map_session_data *sd = st->rid?map_id2sd(st->rid):NULL;
id = script_getnum(st,2);
- if(!(md = (struct mob_data *)map_id2bl(id)) || md->bl.type != BL_MOB || st->stack->stack_data[st->start+3].type!=C_NAME ){
+ if(!(md = (struct mob_data *)map_id2bl(id)) || md->bl.type != BL_MOB || !data_isreference(script_getdata(st,3)) ){
ShowWarning("buildin_getmobdata: Error in argument!\n");
return -1;
}
num=st->stack->stack_data[st->start+3].u.num;
name=(char *)(str_buf+str_data[num&0x00ffffff].str);
- setd_sub(st,sd,name,0,(void *)(int)md->class_,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,1,(void *)(int)md->level,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,2,(void *)(int)md->status.hp,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,3,(void *)(int)md->status.max_hp,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,4,(void *)(int)md->master_id,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,5,(void *)(int)md->bl.m,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,6,(void *)(int)md->bl.x,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,7,(void *)(int)md->bl.y,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,8,(void *)(int)md->status.speed,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,9,(void *)(int)md->status.mode,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,10,(void *)(int)md->special_state.ai,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,11,(void *)(int)md->sc.option,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,12,(void *)(int)md->vd->sex,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,13,(void *)(int)md->vd->class_,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,14,(void *)(int)md->vd->hair_style,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,15,(void *)(int)md->vd->hair_color,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,16,(void *)(int)md->vd->head_bottom,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,17,(void *)(int)md->vd->head_mid,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,18,(void *)(int)md->vd->head_top,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,19,(void *)(int)md->vd->cloth_color,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,20,(void *)(int)md->vd->shield,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,21,(void *)(int)md->vd->weapon,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,22,(void *)(int)md->vd->shield,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,23,(void *)(int)md->ud.dir,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,24,(void *)(int)md->state.killer,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,25,(void *)(int)md->callback_flag,st->stack->stack_data[st->start+3].ref);
- setd_sub(st,sd,name,26,(void *)(int)md->state.no_random_walk, st->stack->stack_data[st->start+3].ref);
+ setd_sub(st,sd,name,0,(void *)(int)md->class_,script_getref(st,3));
+ setd_sub(st,sd,name,1,(void *)(int)md->level,script_getref(st,3));
+ setd_sub(st,sd,name,2,(void *)(int)md->status.hp,script_getref(st,3));
+ setd_sub(st,sd,name,3,(void *)(int)md->status.max_hp,script_getref(st,3));
+ setd_sub(st,sd,name,4,(void *)(int)md->master_id,script_getref(st,3));
+ setd_sub(st,sd,name,5,(void *)(int)md->bl.m,script_getref(st,3));
+ setd_sub(st,sd,name,6,(void *)(int)md->bl.x,script_getref(st,3));
+ setd_sub(st,sd,name,7,(void *)(int)md->bl.y,script_getref(st,3));
+ setd_sub(st,sd,name,8,(void *)(int)md->status.speed,script_getref(st,3));
+ setd_sub(st,sd,name,9,(void *)(int)md->status.mode,script_getref(st,3));
+ setd_sub(st,sd,name,10,(void *)(int)md->special_state.ai,script_getref(st,3));
+ setd_sub(st,sd,name,11,(void *)(int)md->sc.option,script_getref(st,3));
+ setd_sub(st,sd,name,12,(void *)(int)md->vd->sex,script_getref(st,3));
+ setd_sub(st,sd,name,13,(void *)(int)md->vd->class_,script_getref(st,3));
+ setd_sub(st,sd,name,14,(void *)(int)md->vd->hair_style,script_getref(st,3));
+ setd_sub(st,sd,name,15,(void *)(int)md->vd->hair_color,script_getref(st,3));
+ setd_sub(st,sd,name,16,(void *)(int)md->vd->head_bottom,script_getref(st,3));
+ setd_sub(st,sd,name,17,(void *)(int)md->vd->head_mid,script_getref(st,3));
+ setd_sub(st,sd,name,18,(void *)(int)md->vd->head_top,script_getref(st,3));
+ setd_sub(st,sd,name,19,(void *)(int)md->vd->cloth_color,script_getref(st,3));
+ setd_sub(st,sd,name,20,(void *)(int)md->vd->shield,script_getref(st,3));
+ setd_sub(st,sd,name,21,(void *)(int)md->vd->weapon,script_getref(st,3));
+ setd_sub(st,sd,name,22,(void *)(int)md->vd->shield,script_getref(st,3));
+ setd_sub(st,sd,name,23,(void *)(int)md->ud.dir,script_getref(st,3));
+ setd_sub(st,sd,name,24,(void *)(int)md->state.killer,script_getref(st,3));
+ setd_sub(st,sd,name,25,(void *)(int)md->callback_flag,script_getref(st,3));
+ setd_sub(st,sd,name,26,(void *)(int)md->state.no_random_walk, script_getref(st,3));
return 0;
}