summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKpy! <ouroboros.ai@gmail.com>2015-04-21 13:48:25 +0200
committerKpy! <ouroboros.ai@gmail.com>2015-04-21 21:24:47 +0200
commit79aa56c704ff4117511cd33be3efd0321683d89a (patch)
treee8f26bd445a9985e47486281f203b0eeb67bb23b
parent0a65f85dd2576fc1555abced812bd58bf1251019 (diff)
downloadhercules-79aa56c704ff4117511cd33be3efd0321683d89a.tar.gz
hercules-79aa56c704ff4117511cd33be3efd0321683d89a.tar.bz2
hercules-79aa56c704ff4117511cd33be3efd0321683d89a.tar.xz
hercules-79aa56c704ff4117511cd33be3efd0321683d89a.zip
Fix script function return always removing references from NPC variables.
Bugreport:8642 http://hercules.ws/board/tracker/issue-8642-script-engine-issue-quo/
-rw-r--r--npc/dev/test.txt18
-rw-r--r--src/map/script.c2
2 files changed, 19 insertions, 1 deletions
diff --git a/npc/dev/test.txt b/npc/dev/test.txt
index 7b498e922..8e94d6ee7 100644
--- a/npc/dev/test.txt
+++ b/npc/dev/test.txt
@@ -86,6 +86,15 @@ function script F_TestNPCArrays {
return getarraysize(.y);
}
+function script F_TestVarOfAnotherNPC {
+ return getvariableofnpc(.x, getarg(0));
+}
+
+- script TestVarOfAnotherNPC -1,{
+ // Used to test getvariableofnpc()
+ end;
+}
+
function script HerculesSelfTestHelper {
if (.once > 0)
return .errors;
@@ -618,6 +627,9 @@ function script HerculesSelfTestHelper {
callsub(OnCheck, "Callsub (parent array vars isolation)", getarraysize(.@x), .@z);
deletearray .@x;
deletearray .@y;
+ .x = 2;
+ set getvariableofnpc(.x, "TestVarOfAnotherNPC"), 1;
+ callsub(OnCheck, "Callsub (return NPC variables from another NPC)", callsub(OnTestVarOfAnotherNPC, "TestVarOfAnotherNPC"), 1);
// Callfunc
callsub(OnCheck, "Callfunc return value", callfunc("F_TestReturnValue", 1));
@@ -663,6 +675,9 @@ function script HerculesSelfTestHelper {
callsub(OnCheck, "Callfunc (parent array NPC vars isolation)", getarraysize(.@x), .@z);
deletearray .x;
deletearray .y;
+ .x = 2;
+ set getvariableofnpc(.x, "TestVarOfAnotherNPC"), 1;
+ callsub(OnCheck, "Callfunc (return NPC variables from another NPC)", callfunc("F_TestVarOfAnotherNPC", "TestVarOfAnotherNPC"), 1);
if (.errors) {
debugmes "Script engine self-test [ \033[0;31mFAILED\033[0m ]";
@@ -704,6 +719,9 @@ OnTestScopeArrays:
setarray .@x, 1, 2, 3, 4;
copyarray .@y, getarg(0), getarraysize(getarg(0));
return getarraysize(.@y);
+
+OnTestVarOfAnotherNPC:
+ return getvariableofnpc(.x, getarg(0));
OnReportError:
.@msg$ = getarg(0,"Unknown Error");
diff --git a/src/map/script.c b/src/map/script.c
index ed9345678..b355dfa9e 100644
--- a/src/map/script.c
+++ b/src/map/script.c
@@ -5703,7 +5703,7 @@ BUILDIN(return) {
if( !st->script->local.arrays )
st->script->local.arrays = idb_alloc(DB_OPT_BASE);
data->ref->arrays = st->script->local.arrays;
- } else if ( name[0] == '.' /* && data->ref != NULL */ ) {
+ } else if ( name[0] == '.' && data->ref->vars == st->stack->stack_data[st->stack->defsp-1].u.ri->script->local.vars ) {
data->ref = NULL; // Reference to the parent scope's script, remove reference pointer.
}
}