Frictional Games Forum (read-only)
[SCRIPT] Elevator Lever to Level Transition - Printable Version

+- Frictional Games Forum (read-only) (https://www.frictionalgames.com/forum)
+-- Forum: Amnesia: The Dark Descent (https://www.frictionalgames.com/forum/forum-6.html)
+--- Forum: Custom Stories, TCs & Mods - Development (https://www.frictionalgames.com/forum/forum-38.html)
+---- Forum: Development Support (https://www.frictionalgames.com/forum/forum-39.html)
+---- Thread: [SCRIPT] Elevator Lever to Level Transition (/thread-27422.html)

Pages: 1 2


RE: Elevator Lever to Level Transition - AGP - 11-26-2014

It's scripted so that the levers become stuck once they are all in the proper positions. I have tried it once where pulling the elevator lever before pulling the other levers did make them stuck. Other than that, they just stay stuck.

For the levers in the little lever box (the one with the Roman numerals), the -1 is up.

And there are no callbacks on 2.


RE: Elevator Lever to Level Transition - Mudbill - 11-26-2014

Alright, so the lever_machine_lever ones run the block once interacted with. If all those levers are in state -1 when one of them is, it makes them all stuck and plays the sounds. The issue here is that elevator_lever_2 has no way of being in state -1 before this happens, therefore the last part of the block can never be called; thus the Activate block never runs either.

What you can do is to use a variable instead. Add another lever callback to the elevator_lever_2 and have it check for this variable. You trigger it in the "stuck" script.
PHP Code:
void LeverBox(string &in asEntityint LeverState)
{
    if(
GetLeverState("lever_machine_lever_1") == -1
    
&& GetLeverState("lever_machine_lever_2") == -1
    
&& GetLeverState("lever_machine_lever_3") == -1
    
&& GetLeverState("lever_machine_lever_4") == -1
    
&& GetLeverState("lever_machine_lever_5") == -1
    
&& GetLeverState("lever_machine_lever_6") == -1)
    {
        
PlaySoundAtEntity("""sob01.snt""Player"0false);
        
SetEntityActive("elevator_lever_1"false);
        
SetEntityActive("elevator_lever_2"true);
                
        for(
int i 1<= 6i++)
        
SetEntityInteractionDisabled("lever_machine_lever_"+itrue);
        
SetLocalVarInt("Lever"1);//Added this line which is used when interacting with the elevator_lever_2
    
}
}

void ElevatorLever(string &in asEntityint LeverState)
{
    if(
GetLocalVarInt("Lever") != 0) {
        if(
GetLeverState(asEntity) == -1Activate();
    }


To use this, you must also remove the parameters of Activate, since it uses none.


RE: Elevator Lever to Level Transition - AGP - 11-26-2014

My biggest problem was I just couldn't figure out a way to call up the Activate function.


RE: Elevator Lever to Level Transition - Mudbill - 11-26-2014

Edited my reply with an alternate solution.


RE: Elevator Lever to Level Transition - AGP - 11-26-2014

Don't think I entered it in correctly:

Code:
void OnStart()
{

}

void OnEnter()
{    
    AddUseItemCallback("", "guiding_rod01", "rodarea_1", "RodMeOnce", true);
    AddUseItemCallback("", "guiding_rod02", "rodarea_2", "RodMeTwice", true);
    AddUseItemCallback("", "guiding_rod03", "rodarea_3", "RodMeThrice", true);
    
    for(int i = 1; i <= 3; i++)
    AddUseItemCallback("", "guiding_rod0"+i, "rodarea_"+i, "RodMe", true);
}

void OnLeave()
{

}

void LeverBox(string &in asEntity, int LeverState)
{
    if(GetLeverState("lever_machine_lever_1") == -1
    && GetLeverState("lever_machine_lever_2") == -1
    && GetLeverState("lever_machine_lever_3") == -1
    && GetLeverState("lever_machine_lever_4") == -1
    && GetLeverState("lever_machine_lever_5") == -1
    && GetLeverState("lever_machine_lever_6") == -1)
    {
        PlaySoundAtEntity("", "sob01.snt", "Player", 0, false);
        SetEntityActive("elevator_lever_1", false);
        SetEntityActive("elevator_lever_2", true);
                
        for(int i = 1; i <= 6; i++)
        SetEntityInteractionDisabled("lever_machine_lever_"+i, true);
        SetLocalVarInt("Lever", 1);
    }
}

void ElevatorLever(string &in asEntity, int LeverState)
{
    if(GetLocalVarInt("Lever") != 0) {
        if(GetLeverState(asEntity) == -1) Activate();
        
        PlaySoundAtEntity("", "14_elevator_activate.snt", "Player", 0, false);
        AddTimer("", 2.0, "Fade");
        StartScreenShake(0.06f, 4.0, 1.0, 1.0);
    }

void RodMeOnce(string &in asItem, string &in asEntity)
{
    SetEntityActive("guiding_rod01_stat", true);
    PlaySoundAtEntity("", "13_rod_in.snt", "rods", 0, false);
    RemoveItem("guiding_rod01");
    AddLocalVarInt("Rods", 1);
    
    if(GetLocalVarInt("Rods") == 3)
    {
        PlaySoundAtEntity("", "13_machine_extra.snt", "machine_sound", 0, false);
        PlaySoundAtEntity("", "13_machine_run.snt", "machine_sound", 0, false);
    }
}

void RodMeTwice(string &in asItem, string &in asEntity)
{
    SetEntityActive("guiding_rod02_stat", true);
    PlaySoundAtEntity("", "13_rod_in.snt", "rods", 0, false);
    RemoveItem("guiding_rod02");
    AddLocalVarInt("Rods", 1);
    
    if(GetLocalVarInt("Rods") == 3)
    {
        PlaySoundAtEntity("", "13_machine_extra.snt", "machine_sound", 0, false);
        PlaySoundAtEntity("", "13_machine_run.snt", "machine_sound", 0, false);
    }
}

void RodMeThrice(string &in asItem, string &in asEntity)
{
    SetEntityActive("guiding_rod03_stat", true);
    PlaySoundAtEntity("", "13_rod_in.snt", "rods", 0, false);
    RemoveItem("guiding_rod03");
    AddLocalVarInt("Rods", 1);
    
    if(GetLocalVarInt("Rods") == 3)
    {
        PlaySoundAtEntity("", "13_machine_extra.snt", "machine_sound", 0, false);
        PlaySoundAtEntity("", "13_machine_run.snt", "machine_sound", 0, false);
    }
}

void Fade(string &in asTimer)
{
    FadeOut(5);
    AddTimer("", 5, "TimerTransition");
}

void TimerTransition(string &in asTimer)
{
        ChangeMap("helena_001.map", "PlayerStartArea_1", "", "");
}

It's now saying unexpected end of file (101, 2).


RE: Elevator Lever to Level Transition - Mudbill - 11-26-2014

Missing bracket in ElevatorLever. If you're gonna have all that in the if statement, use another block there as well.

PHP Code:
void ElevatorLever(string &in asEntityint LeverState)
{
    if(
GetLocalVarInt("Lever") != 0) {
        if(
GetLeverState(asEntity) == -1) {
            
Activate();
        
            
PlaySoundAtEntity("""14_elevator_activate.snt""Player"0false);
            
AddTimer(""2.0"Fade");
            
StartScreenShake(0.06f4.01.01.0);
        }
//end if
    
}//end if
}//end block 



RE: Elevator Lever to Level Transition - AGP - 11-26-2014

Compiling void ElevatorLever(string&in, int)

No matching signatures to 'Activate()'

Does this mean there are incorrect parameters? (Trying to comprehend what's going on, please forgive any silly-sounding questions.)


RE: Elevator Lever to Level Transition - Mudbill - 11-26-2014

It looks like you moved the contents from Activate to this block instead, which is fine. Just remove the Activate(); call then, since it doesn't exist.