|
@@ -2102,8 +2102,11 @@ TBL_PC *script_rid2sd(struct script_state *st)
|
|
return sd;
|
|
return sd;
|
|
}
|
|
}
|
|
|
|
|
|
-/// Retrieves the value of a script data
|
|
|
|
-int get_val(struct script_state* st, struct script_data* data)
|
|
|
|
|
|
+/// Dereferences a variable/constant, replacing it with a copy of the value.
|
|
|
|
+///
|
|
|
|
+/// @param st Script state
|
|
|
|
+/// @param data Variable/constant
|
|
|
|
+void get_val(struct script_state* st, struct script_data* data)
|
|
{
|
|
{
|
|
char* name;
|
|
char* name;
|
|
char prefix;
|
|
char prefix;
|
|
@@ -2111,7 +2114,7 @@ int get_val(struct script_state* st, struct script_data* data)
|
|
TBL_PC* sd = NULL;
|
|
TBL_PC* sd = NULL;
|
|
|
|
|
|
if( !data_isreference(data) )
|
|
if( !data_isreference(data) )
|
|
- return 0;// not a variable
|
|
|
|
|
|
+ return;// not a variable/constant
|
|
|
|
|
|
name = reference_getname(data);
|
|
name = reference_getname(data);
|
|
prefix = name[0];
|
|
prefix = name[0];
|
|
@@ -2135,15 +2138,13 @@ int get_val(struct script_state* st, struct script_data* data)
|
|
data->type = C_INT;
|
|
data->type = C_INT;
|
|
data->u.num = 0;
|
|
data->u.num = 0;
|
|
}
|
|
}
|
|
- return 0;
|
|
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
if( postfix == '$' )
|
|
if( postfix == '$' )
|
|
{// string variable
|
|
{// string variable
|
|
|
|
|
|
- data->type = C_CONSTSTR;
|
|
|
|
-
|
|
|
|
switch( prefix )
|
|
switch( prefix )
|
|
{
|
|
{
|
|
case '@':
|
|
case '@':
|
|
@@ -2172,8 +2173,16 @@ int get_val(struct script_state* st, struct script_data* data)
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
- if( data->u.str == NULL )
|
|
|
|
|
|
+ if( data->u.str == NULL || data->u.str[0] == '\0' )
|
|
|
|
+ {// empty string
|
|
|
|
+ data->type = C_CONSTSTR;
|
|
data->u.str = "";
|
|
data->u.str = "";
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {// duplicate string
|
|
|
|
+ data->type = C_STR;
|
|
|
|
+ data->u.str = aStrdup(data->u.str);
|
|
|
|
+ }
|
|
|
|
|
|
}
|
|
}
|
|
else
|
|
else
|
|
@@ -2220,7 +2229,7 @@ int get_val(struct script_state* st, struct script_data* data)
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
- return 0;
|
|
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
|
|
|
|
/// Retrieves the value of a reference identified by uid (variable, constant, param)
|
|
/// Retrieves the value of a reference identified by uid (variable, constant, param)
|