Frictional Games Forum (read-only)

Full Version: [SOLVED] Unlock door with colliding object, Not working
You're currently viewing a stripped down version of our content. View the full version with proper formatting.
So the idea is that you put a stone chipper inside a padlock (Which works fine).
Then you have to find an object, heavy enough, to throw at the stone chipper, to make the padlock break.

Now there is only one object in my map (so far) which could break it, and that is a brick, called "brick_1".

Here is how it should work with the script:

[Image: vnefbl.png]


Here is the script:

Spoiler below!


void OnStart()
{

AddEntityCollideCallback("ScriptArea_4", "Player", "OnCollide_3", false, 1);
AddEntityCollideCallback("brick_1", "ScriptArea_3", "OnCollide_4", true, 1);


AddUseItemCallback("", "stone_chipper_1", "padlock_rusty_1", "UseStoneChipper", true);
}

///USE ITEMS

void UseStoneChipper(string &in asItem, string &in asEntity)
{
SetEntityActive("stone_chipper_move_1", true);
PlaySoundAtEntity("", "puzzle_place_jar", "ScriptArea_3", 0, false);
RemoveItem("stone_chipper_1");
}

///COLLIDES

void OnCollide_4(string &in asParent, string &in asChild, int alState)
{
AddPlayerSanity(5);
PlaySoundAtEntity("", "unlock_door", "prison_section_1", 0, false);
SetSwingDoorLocked("prison_section_1", false, true);
SetPropActiveAndFade("padlock_rusty_1", false, 1);
SetPropActiveAndFade("padlock_rusty_2", true, 1);

SetEntityActive("ScriptArea_4", false);
SetEntityActive("ScriptArea_3", false);
}

void OnCollide_3(string &in asParent, string &in asChild, int alState)
{
if(alState == 1)
{
SetEntityActive("ScriptArea_3", false);
}

if(alState == -1)
{
SetEntityActive("ScriptArea_3", true);
}
}

///PICKUP

void chipper_pickup(string &in asEntity)
{
SetEntityActive("ScriptArea_1", true);
SetEntityActive("block_box_1", true);
SetEntityActive("block_box_2", true);
}

///MESSAGES

void DoorLocked_1(string &in asEntity)
{
if(GetSwingDoorLocked("prison_2") == true)
{
SetMessage("Messages", "Locked", 0);
}
}

void DoorLocked_2(string &in asEntity)
{
if(GetSwingDoorLocked("prison_section_1") == true)
{
SetMessage("Messages", "PadlockDoorLocked", 0);
}
}

void DoorLocked_3(string &in asEntity)
{
if(GetSwingDoorLocked("padlock_rusty_1") == true)
{
SetMessage("Messages", "PadlockLocked", 0);
}
}

///INTERACT

void OnStonePickup(string &in asEntity)
{
SetLightVisible("PointLight_3", false);
}

void OnEnter()
{

}

void OnLeave()
{

}


Nothing happens when the brick collides with the script around the padlock... i can't figure out why
Since you don't have a response yet I can attempt to help.
Quote:void OnCollide_3(string &in asParent, string &in asChild, int alState)

{

if(alState == 1)

{

SetEntityActive("ScriptArea_3", false);

}



if(alState == -1)

{

SetEntityActive("ScriptArea_3", true);

}
}
When you go out of the "ScriptArea_4", are you sure it makes the entity active? I think collides only trigger when the entity enters the area and not leaves.
Also, when you test, is the "ScriptArea_4" normally inactive from the start?
He has 1 instead of 0 for the collision state argument. However, you should be able to avoid requiring a script to do all of this by modifying the padlock to receive damage.
You could check for a collision between the padlock and the brick themselves (without areas) and change the padlock's health to zero when it occurs.
You could use the Distance / Time formula + Timers to achieve the same thing.

I know Damascus and his project "The Great Work" has a script already working.
Yes both scripts areas are inactive from the start.

Ok i solved it with to scripts. One for Activation of the collide script, and one for the deactivation.

Strange thing is, that some of the stuff that should happen (Like AddPlayerSanity) only started working when i added a debug message to it..