Преглед на файлове

- Fixed NPC instance variables not being passed through to callfunc; or callsub; stacks properly (bugreport:5673)

git-svn-id: https://svn.code.sf.net/p/rathena/svn/trunk@16018 54d463be-8e91-2dee-dedb-b68131a5f0ec
epoque11 преди 13 години
родител
ревизия
8d89bc7c83
променени са 1 файла, в които са добавени 10 реда и са изтрити 4 реда
  1. 10 4
      src/map/script.c

+ 10 - 4
src/map/script.c

@@ -2934,6 +2934,8 @@ void pop_stack(struct script_state* st, int start, int end)
 			struct script_retinfo* ri = data->u.ri;
 			if( ri->var_function )
 				script_free_vars(ri->var_function);
+			if( data->ref )
+				aFree(data->ref);
 			aFree(ri);
 		}
 		data->type = C_NOP;
@@ -4467,8 +4469,10 @@ BUILDIN_FUNC(callfunc)
 		if( data_isreference(data) && !data->ref )
 		{
 			const char* name = reference_getname(data);
-			if( name[0] == '.' && name[1] == '@' )
-				data->ref = &st->stack->var_function;
+			if( name[0] == '.' && name[1] == '@' ) {
+				data->ref = (struct DBMap**)aCalloc(sizeof(struct DBMap*), 1);
+				data->ref[0] = st->stack->var_function;
+			}
 			else if( name[0] == '.' )
 				data->ref = &st->script->script_vars;
 		}
@@ -4513,8 +4517,10 @@ BUILDIN_FUNC(callsub)
 		if( data_isreference(data) && !data->ref )
 		{
 			const char* name = reference_getname(data);
-			if( name[0] == '.' && name[1] == '@' )
-				data->ref = &st->stack->var_function;
+			if( name[0] == '.' && name[1] == '@' ) {
+				data->ref = (struct DBMap**)aCalloc(sizeof(struct DBMap*), 1);
+				data->ref[0] = st->stack->var_function;
+			}
 		}
 	}