TimProzz
Junior Member
Posts: 23
Threads: 8
Joined: May 2016
Reputation:
0
|
Checking if player is inside of a script area
Hello,
I have a question. I'm going to keep it very short. Is is possible to check if the player or an entity (enemy) is inside of a script area? I know about GetEntitiesCollide but that function doesn't support "Player".
Tim
(This post was last modified: 09-05-2016, 04:01 PM by TimProzz.)
|
|
09-05-2016, 03:44 PM |
|
Darkfire
Senior Member
Posts: 371
Threads: 22
Joined: May 2014
Reputation:
15
|
RE: Checking if player is inside of a script area
I'm not too sure such a thing exists.
But you can work your way around this:
Make two AddEntityCollideCallbacks, both with the same area and the player- one callback on enter and one on leave, each one will set a variable (SetLocalVarInt) to a different number.
Then you check (if function) the variable when it is needed.
Depending on what you want to achieve after checking whether the player is in the area, you might want to use looping timers afterwards if it is needed.
(This post was last modified: 09-05-2016, 05:49 PM by Darkfire.)
|
|
09-05-2016, 05:45 PM |
|
Slanderous
Posting Freak
Posts: 1,606
Threads: 78
Joined: Dec 2012
Reputation:
63
|
RE: Checking if player is inside of a script area
That's what I used in my mod for barricades. Basically checks what's the state of the entity. 1 = means the entity is within the area, -1 = the entity is not within the area. Should work for anything.
AddEntityCollideCallback("", "sth_1", "BarricadeCheck", false, 0);
void BarricadeCheck(string &in asParent, string &in asChild, int alState) { if(alState == -1) { SetSwingDoorLocked("prison_12", false, false); } else if(alState == 1) { SetSwingDoorLocked("prison_12", true, false); } }
|
|
09-05-2016, 10:14 PM |
|
FlawlessHappiness
Posting Freak
Posts: 3,980
Threads: 145
Joined: Mar 2012
Reputation:
171
|
RE: Checking if player is inside of a script area
(09-05-2016, 10:14 PM)Slanderous Wrote: That's what I used in my mod for barricades. Basically checks what's the state of the entity. 1 = means the entity is within the area, -1 = the entity is not within the area. Should work for anything.
AddEntityCollideCallback("", "sth_1", "BarricadeCheck", false, 0);
void BarricadeCheck(string &in asParent, string &in asChild, int alState) { if(alState == -1) { SetSwingDoorLocked("prison_12", false, false); } else if(alState == 1) { SetSwingDoorLocked("prison_12", true, false); } }
This only checks at the time of the collision.
If the player has been wandering around inside the area, (For example, inside a room), maybe you want to check whether the player is still inside the area after 60 seconds.
Darkfire gave the solution. What you want to do is set a variable to 1 when the player enters the area, and set it to -1 when the player leaves.
This way you just have to check what value the variable has.
void OnStart() { AddEntityCollideCallback("Player", "Area_1", "PlayerEnterArea_1", false, 0); }
void PlayerEnterArea_1(string &in asParent, string &in asChild, int alState) { SetLocalVarInt("PlayerEnterArea_1", alState); }
Notice that I'm just setting the variable to alState. This is because alState is already either 1 or -1, so you won't have to worry about if-statements.
Trying is the first step to success.
|
|
09-06-2016, 09:33 AM |
|
|