Facebook Twitter YouTube Frictional Games | Forum | Newsletter | Dev Blog | Dev Wiki | Support | Gametee


Post Reply 
 
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Script Help Picking up a Lantern and unlocking a door
Author Message
Hyperoom Offline
Junior Member

Posts: 5
Joined: May 2017
Reputation: 0
Post: #1
Picking up a Lantern and unlocking a door

I really need help scripting a sequence that unlocks a door when player picks up a lantern. I already tried this code from 2010 but I just managed to close the thread:

void PickLanternUnlockDoor(string &in EntityName, string &in Type)
{
if(Type == "OnPickup") {
SetSwingDoorLocked("door_name", false, true);
}
}
I also have steam version that help at all.
06-20-2017 05:55 PM
Find all posts by this user Quote this message in a reply
FlawlessHappiness Offline
Posting Freak

Posts: 3,982
Joined: Mar 2012
Reputation: 171
Post: #2
RE: Picking up a Lantern and unlocking a door

If you want a function to call when the player picks up an entity, the easiest thing to do is to call a function when the player interacts with the entity.

To do this you need to assign an InteractCallback function to the entity. You do this with by using the function

PHP Code: (Select All)
SetEntityPlayerInteractCallback(stringasNamestringasCallbackbool abRemoveOnInteraction);

asName internal name
asCallback 
- function to call
abRemoveOnInteraction 
determines whether the callback should be removed when the player interacts with the entity 

This function needs to be placed in the OnStart function of your code.

Now remember that asName, asCallback and abRemoveOnInteraction all need to be replaced with actual values.

For example if you, in the level editor, had an entity called "lantern_1" and, in your script, a function called "PickLanternUnlockDoor" you would write:

PHP Code: (Select All)
SetEntityPlayerInteractCallback("lantern_1""PickLanternUnlockDoor"true); 

(The 'true' written at the end means that this callback is removed after being called once. To not have this happen the 'true' would have to be 'false' instead)

Now you call the function "PickLanternUnlockDoor" when the player picks up the lantern, so all you need to do is write the function itself.

PHP Code: (Select All)
void PickLanternUnlockDoor(string &in asEntity)
{
    
SetSwingDoorLocked("door_name"falsetrue);


*Note that the '(string &in asEntity)' is like this because we are using an InteractCallback. It doesn't have to be exactly like this, but to avoid confusion keep it like this in the beginning.

**Note that "door_name" is the name of the door, and this has to be the name of your door in the level editor as well.

Alright!
The final script would look something like this:

PHP Code: (Select All)
void OnStart()
{
    
SetEntityPlayerInteractCallback("lantern_1""PickLanternUnlockDoor"true);
}

void PickLanternUnlockDoor(string &in asEntity)
{
    
SetSwingDoorLocked("door_name"falsetrue);


Being happy is the first step to success.
(This post was last modified: 06-20-2017 08:54 PM by FlawlessHappiness.)
06-20-2017 08:50 PM
Find all posts by this user Quote this message in a reply
Hyperoom Offline
Junior Member

Posts: 5
Joined: May 2017
Reputation: 0
Post: #3
RE: Picking up a Lantern and unlocking a door

(06-20-2017 08:50 PM)FlawlessHappiness Wrote:  If you want a function to call when the player picks up an entity, the easiest thing to do is to call a function when the player interacts with the entity.

To do this you need to assign an InteractCallback function to the entity. You do this with by using the function

PHP Code: (Select All)
SetEntityPlayerInteractCallback(stringasNamestringasCallbackbool abRemoveOnInteraction);

asName internal name
asCallback 
- function to call
abRemoveOnInteraction 
determines whether the callback should be removed when the player interacts with the entity 

This function needs to be placed in the OnStart function of your code.

Now remember that asName, asCallback and abRemoveOnInteraction all need to be replaced with actual values.

For example if you, in the level editor, had an entity called "lantern_1" and, in your script, a function called "PickLanternUnlockDoor" you would write:

PHP Code: (Select All)
SetEntityPlayerInteractCallback("lantern_1""PickLanternUnlockDoor"true); 

(The 'true' written at the end means that this callback is removed after being called once. To not have this happen the 'true' would have to be 'false' instead)

Now you call the function "PickLanternUnlockDoor" when the player picks up the lantern, so all you need to do is write the function itself.

PHP Code: (Select All)
void PickLanternUnlockDoor(string &in asEntity)
{
    
SetSwingDoorLocked("door_name"falsetrue);


*Note that the '(string &in asEntity)' is like this because we are using an InteractCallback. It doesn't have to be exactly like this, but to avoid confusion keep it like this in the beginning.

**Note that "door_name" is the name of the door, and this has to be the name of your door in the level editor as well.

Alright!
The final script would look something like this:

PHP Code: (Select All)
void OnStart()
{
    
SetEntityPlayerInteractCallback("lantern_1""PickLanternUnlockDoor"true);
}

void PickLanternUnlockDoor(string &in asEntity)
{
    
SetSwingDoorLocked("door_name"falsetrue);

yay it doesnt work
06-21-2017 08:51 AM
Find all posts by this user Quote this message in a reply
FlawlessHappiness Offline
Posting Freak

Posts: 3,982
Joined: Mar 2012
Reputation: 171
Post: #4
RE: Picking up a Lantern and unlocking a door

If it doesn't work, it will be very helpful if you post a picture of:

- Your full script file

- The door highlighted in the editor

- The lantern highlighted in the editor

Other things to make sure:
The .map file and the .hps file MUST be named the same thing.
e.g. "level1.map" and "level1.hps"

The .map and .hps files MUST be placed in the same /maps folder in your custom story.

Being happy is the first step to success.
06-21-2017 01:25 PM
Find all posts by this user Quote this message in a reply
Hyperoom Offline
Junior Member

Posts: 5
Joined: May 2017
Reputation: 0
Post: #5
RE: Picking up a Lantern and unlocking a door

Map and script fiules can be found here: https://www.mediafire.com/folder/r2gaee9rkzpat/maps Tell me all mistakes in script/map and also red door crashes the game since I haven't created a map which it leads to.
06-21-2017 02:10 PM
Find all posts by this user Quote this message in a reply
FlawlessHappiness Offline
Posting Freak

Posts: 3,982
Joined: Mar 2012
Reputation: 171
Post: #6
RE: Picking up a Lantern and unlocking a door

Ah yes, I figured this was the problem.

There is a difference between a level door and a swing door.
In this case you want to unlock a level door, so you have to use

PHP Code: (Select All)
SetLevelDoorLocked("level_hub_1"false); 

Being happy is the first step to success.
06-21-2017 02:26 PM
Find all posts by this user Quote this message in a reply
Hyperoom Offline
Junior Member

Posts: 5
Joined: May 2017
Reputation: 0
Post: #7
RE: Picking up a Lantern and unlocking a door

Thank you so much! It's kinda ironic how I always wondered what that SwingDoor meant..
06-21-2017 02:58 PM
Find all posts by this user Quote this message in a reply
FlawlessHappiness Offline
Posting Freak

Posts: 3,982
Joined: Mar 2012
Reputation: 171
Post: #8
RE: Picking up a Lantern and unlocking a door

Hopefully it makes sense.

To clarify:
Swing door: A door that you can pull open and shut.
Level door: A door that you click and it takes you to a new level.

Being happy is the first step to success.
06-21-2017 03:12 PM
Find all posts by this user Quote this message in a reply
Post Reply 




User(s) browsing this thread: 1 Guest(s)