AGP
Senior Member
Posts: 448
Threads: 45
Joined: Dec 2012
Reputation:
23
|
RE: Elevator Lever to Level Transition
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.
(This post was last modified: 11-26-2014, 08:58 AM by AGP.)
|
|
11-26-2014, 08:57 AM |
|
Mudbill
Muderator
Posts: 3,881
Threads: 59
Joined: Apr 2013
Reputation:
179
|
RE: Elevator Lever to Level Transition
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. 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);//Added this line which is used when interacting with the elevator_lever_2 } }
void ElevatorLever(string &in asEntity, int LeverState) { if(GetLocalVarInt("Lever") != 0) { if(GetLeverState(asEntity) == -1) Activate(); } }
To use this, you must also remove the parameters of Activate, since it uses none.
(This post was last modified: 11-26-2014, 09:07 AM by Mudbill.)
|
|
11-26-2014, 09:00 AM |
|
AGP
Senior Member
Posts: 448
Threads: 45
Joined: Dec 2012
Reputation:
23
|
RE: Elevator Lever to Level Transition
My biggest problem was I just couldn't figure out a way to call up the Activate function.
|
|
11-26-2014, 09:03 AM |
|
Mudbill
Muderator
Posts: 3,881
Threads: 59
Joined: Apr 2013
Reputation:
179
|
RE: Elevator Lever to Level Transition
Edited my reply with an alternate solution.
|
|
11-26-2014, 09:06 AM |
|
AGP
Senior Member
Posts: 448
Threads: 45
Joined: Dec 2012
Reputation:
23
|
RE: Elevator Lever to Level Transition
Don't think I entered it in correctly:
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).
|
|
11-26-2014, 09:13 AM |
|
Mudbill
Muderator
Posts: 3,881
Threads: 59
Joined: Apr 2013
Reputation:
179
|
RE: Elevator Lever to Level Transition
Missing bracket in ElevatorLever. If you're gonna have all that in the if statement, use another block there as well.
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); }//end if }//end if }//end block
(This post was last modified: 11-26-2014, 09:23 AM by Mudbill.)
|
|
11-26-2014, 09:23 AM |
|
AGP
Senior Member
Posts: 448
Threads: 45
Joined: Dec 2012
Reputation:
23
|
RE: Elevator Lever to Level Transition
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.)
|
|
11-26-2014, 09:36 AM |
|
Mudbill
Muderator
Posts: 3,881
Threads: 59
Joined: Apr 2013
Reputation:
179
|
RE: Elevator Lever to Level Transition
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.
|
|
11-26-2014, 09:44 AM |
|
|