Jump to content
gRowlxd

Undefined variable in expression

Recommended Posts

So I have this script that loops itself every 10th sec, which checks if 2 objects are alive, and if it destroyed. It will launch a script.

The objects are called _fobnato & _fobaaf and the script is:

Spoiler

 

if (!alive _fobaaf) then {execVM fobdeleteaaf.sqf};
if (!alive _fobnato) then {execVM fobdeletenato.sqf};

// Waits 10 seconds and then loops script
sleep 10;
execVM "scripts\locked\FOB\fobdelete.sqf";

 

 

 

When I join it gives me an errror "Undefined variable in expression"

 

Any ideas?

Share this post


Link to post
Share on other sites

{execVM "fobdeleteaaf.sqf"} No quotes around your script paths.

 

 _fobaaf addEventHandler[ "Killed", {

    hint "AAF FOB supply box destroyed";

    execVM "fobdeleteaaf.sqf";

} ]; 

Share this post


Link to post
Share on other sites

if (!isNil "_fobaaf" && {!alive _fobaaf}) then {execVM fobdeleteaaf.sqf};
if (!isNil "_fobnato" &&  {!alive _fobnato}) then {execVM fobdeletenato.sqf};

Share this post


Link to post
Share on other sites

Just verify your local variables are define somewhere, prior to the loop, and mind the scopes. As you said, your in a loop... which one? the script itself? So, no chance your local variables will be defined one day. You could wait for a long time without any execution of your sqfs.

A simple solution could be global variables for your objects.

Share this post


Link to post
Share on other sites
1 hour ago, killzone_kid said:

if (!isNil "_fobaaf" && {!alive _fobaaf}) then {execVM fobdeleteaaf.sqf};
if (!isNil "_fobnato" &&  {!alive _fobnato}) then {execVM fobdeletenato.sqf};

 

It doesn't give me the error, but it doesn't run the fobdelete scripts

Share this post


Link to post
Share on other sites
1 hour ago, Larrow said:

{execVM "fobdeleteaaf.sqf"} No quotes around your script paths.

 

 


 _fobaaf addEventHandler[ "Killed", {

    hint "AAF FOB supply box destroyed";

    execVM "fobdeleteaaf.sqf";

} ]; 

 

 

What do you mean with that script you showed me, what would that do and where should I put it / execute it.

Share this post


Link to post
Share on other sites
17 minutes ago, gRowlxd said:

What do you mean with that script you showed me, what would that do and where should I put it / execute it.

in the same script you defined _fobaaf as a local variable. You can place that anywhere after, and forget your looping script.

Share this post


Link to post
Share on other sites
1 minute ago, pierremgi said:

in the same script you defined _fobaaf as a local variable. You can place that anywhere after, and forget your looping script.

So how does this work if it doesnt loop?

Share this post


Link to post
Share on other sites
On 4/15/2017 at 8:39 AM, killzone_kid said:

if (!isNil "_fobaaf" && {!alive _fobaaf}) then {execVM fobdeleteaaf.sqf};
if (!isNil "_fobnato" &&  {!alive _fobnato}) then {execVM fobdeletenato.sqf};

 

Why the curly braces around the !alive part of the clause?

I have a similar statement in a HitPart eventhandler that throws an "Undefined variable in expression" error if the _target was hit by a falling inanimate object (no shooter I guess). Is this because of the missing braces?

 

Even though I am testing for the condition that there is no shooter.
 

if(not(isNil "_shooter" || isNull _shooter)) then {
	lorea doTarget _shooter;
	lorea fireAtTarget [_shooter, handgunWeapon lorea];
};

 

Share this post


Link to post
Share on other sites
12 minutes ago, OMEGABLEU said:

Why the curly braces around the !alive part of the clause?

Lazy evaluation, part in curly braces is only done if the previous statement is true/satisfies the overall statement.

 

12 minutes ago, OMEGABLEU said:

(no shooter I guess). Is this because of the missing braces?

not(isNil "_shooter" || isNull _shooter)

Yes, if _shooter isNil then isNull _shooter makes no sense. If isNull _shooter is in braces then isNil returns true which satisfies the OR statement so isNull will never be evaluated.

  • Like 2

Share this post


Link to post
Share on other sites
5 minutes ago, Larrow said:

Lazy evaluation, part in curly braces is only done if the previous statement is true.

 

Yes, if _shooter isNil then isNull _shooter makes no sense.

 

Ok thank you! I was not aware. I've change the line to match KK's example

if(!isNil "_shooter" && {!isNull _shooter}) then {
	lorea doTarget _shooter;
	lorea fireAtTarget [_shooter, handgunWeapon lorea];
};

 

Share this post


Link to post
Share on other sites

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now

×