const string[] secret_door_lever_positions =
{"secret_door_first_lever",
"secret_door_second_lever",
"secret_door_third_lever"};
void OnStart ()
{
SetEntityConnectionStateChangeCallback("lever_left", "SecretDoorLevers");
SetEntityConnectionStateChangeCallback("lever_middle", "SecretDoorLevers");
SetEntityConnectionStateChangeCallback("lever_right", "SecretDoorLevers");
ClearSecretDoorLevers();
ResetSecretDoorLevers();
}
void ClearSecretDoorLevers()
{
SetLocalVarString(secret_door_lever_positions[0], "");
SetLocalVarString(secret_door_lever_positions[1], "");
SetLocalVarString(secret_door_lever_positions[2], "");
}
void ResetSecretDoorLevers()
{
SetLeverStuckState("lever_left", 0, true);
SetLeverStuckState("lever_middle", 0, true);
SetLeverStuckState("lever_right", 0, true);
}
void SecretDoorLevers(string &in entity, int state)
{
SetLeverStuckState(entity, state, false);
for (int i = 0; i < secret_door_lever_positions.length(); ++i)
{
if (GetLocalVarString(secret_door_lever_positions[i]) == "")
{
SetLocalVarString(secret_door_lever_positions[i], entity);
break;
}
}
CheckSecretDoorLeversOrder();
}
void CheckSecretDoorLeversOrder()
{
if (GetLocalVarString(secret_door_lever_positions[0]) == "lever_middle"
&& GetLocalVarString(secret_door_lever_positions[1]) == "lever_right"
&& GetLocalVarString(secret_door_lever_positions[2]) == "lever_left")
{
CompleteSecretDoorLeversPuzzle();
}
else if (GetLocalVarString(secret_door_lever_positions[0]) != ""
&& GetLocalVarString(secret_door_lever_positions[1]) != ""
&& GetLocalVarString(secret_door_lever_positions[2]) != "")
{
ClearSecretDoorLevers();
ResetSecretDoorLevers();
}
}
void CompleteSecretDoorLeversPuzzle()
{
AddDebugMessage("Secret door puzzle complete!", false);
Print("Secret door puzzle complete!");
// Open secret door
}