diff options
-rw-r--r-- | Changelog-Trunk.txt | 3 | ||||
-rw-r--r-- | src/map/script.c | 25 |
2 files changed, 20 insertions, 8 deletions
diff --git a/Changelog-Trunk.txt b/Changelog-Trunk.txt index c120c17e4..ced81ce07 100644 --- a/Changelog-Trunk.txt +++ b/Changelog-Trunk.txt @@ -3,6 +3,9 @@ Date Added AS OF SVN REV. 5091, WE ARE NOW USING TRUNK. ALL UNTESTED BUGFIXES/FEATURES GO INTO TRUNK. IF YOU HAVE A WORKING AND TESTED BUGFIX PUT IT INTO STABLE AS WELL AS TRUNK. +2007/12/26 + * Fixed string variables dereferencing directly to the value instead of + dereferencing to a copy of the value. (fixes bugreport:684 bugreport:641) [FlavioJS] 2007/12/23 * Added a generic vector implementation (dynamic array) based on defines. [FlavioJS] * Fixed horrible handling of skill_abra_db which leads to memory corruption diff --git a/src/map/script.c b/src/map/script.c index b66197bb5..249d4c321 100644 --- a/src/map/script.c +++ b/src/map/script.c @@ -2102,8 +2102,11 @@ TBL_PC *script_rid2sd(struct script_state *st) 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 prefix; @@ -2111,7 +2114,7 @@ int get_val(struct script_state* st, struct script_data* data) TBL_PC* sd = NULL; if( !data_isreference(data) ) - return 0;// not a variable + return;// not a variable/constant name = reference_getname(data); prefix = name[0]; @@ -2135,15 +2138,13 @@ int get_val(struct script_state* st, struct script_data* data) data->type = C_INT; data->u.num = 0; } - return 0; + return; } } if( postfix == '$' ) {// string variable - data->type = C_CONSTSTR; - switch( prefix ) { case '@': @@ -2172,8 +2173,16 @@ int get_val(struct script_state* st, struct script_data* data) 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 = ""; + } + else + {// duplicate string + data->type = C_STR; + data->u.str = aStrdup(data->u.str); + } } 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) |