Simulating new functions
I've tried creating a custom "function" that can be called by other scripts. The basic approach I took was to make the function a quest script, and have the calling script call the function via |StartQuest function_quest|. Ex:
I have a quest called testfunc that is initially disabled and contains the following script:
scn testfuncscript float param1 float param2 float result begin GameMode Message "start func", 1 set result to param1 + param2 Message "end func: %.0f", result, 1 StopQuest testfunc end
In another script, I call this "function":
scn testscript float r begin OnActivate Message "before call", 1 set testfunc.param1 to 10 set testfunc.param2 to 20 StartQuest testfunc set r to testfunc.result Message "after call: %.0f", r, 1 end
However, the above code doesn't work. The order of the output illustrates why:
before call after call: 0 start func end func: 30
This is what it should be:
before call start func end func: 30 after call: 30
The problem is that the calling script doesn't wait for the function script to execute, and instead the function script is delayed until after the calling script finishes executing.
So is there any way that can bypass this problem without resorting to nasty "wait for the other script to finish" hacks? (I could make the calling script have a GameMode block that would repeatly check when the function finishes executing, but that would be a serious PITA.) I suspect this same problem would've arisen if I had tried creating a function script by attaching it to a persistent object instead of a quest (and calling it via the Activate function).
--Maian 03:59, 18 April 2006 (EDT)