Sorry last one I've got it working but opens after one of the triggers is pressed when theirs 4 to press
It's tough to say. I'd add some prints to see what is happening. A print before it checks the level.buttonsPressed, a print before it level.buttonsPressed--.
//instead of three level trigs above give them all the same targetname and do this trigs = GetEntArray("triggers","targetname");
level.doorClip = GetEnt("door_clip", "targetname");//I personally would set the clip as the doors target and not use level var //need to disconnect paths on the door so zombies don't try to go through level.doorClip DisconnectPaths();//may not see this issue if no other way in that area
level.buttonsNeeded = trigs.size;//set this to the number of trigs by using array size // level.buttonsPressed = 0;//we can comment this out and just use buttons needed and subtract
//instead of threading the same function with a different name on each different trigger //you can thread on the array, or iterate the array and thread on each trigger
//iterate method: foreach(trig in trigs) { trig thread Trig1();//I personally would pass the door, and not use a level var }
//thread_all method: // array::thread_all(trigs, &Trig1);//this method requires adding #using scripts\shared\array_shared; to top
}
function Trig1()//I personally would pass the door, and not use a level var { //you should set the hint here self SetCursorHint("HINT_NOICON"); self SetHintString("Press [{+activate}] to...");
// while(1)//no need for a while loop when you are breaking unconditionally // { self waittill("trigger", player);//self is the trigger, and player isn't used, so not really needed level.buttonsPressed--;//subtract so we can check < 0 later self Delete();//self delete CheckDoor(); // break; // } } //no need for multiple functions that do the same function // function Trig2() // { // while(1) // { // level.trig2 waittill("trigger", player); // level.buttonsPressed++; // level.trig2 Delete(); // CheckDoor(); // break; // } // }
function CheckDoor()//I personally would pass the door, and not use a level var { // if(level.buttonsPressed >= level.buttonsNeeded)//check if >= instead of == just incase something bugs if(level.buttonsNeeded<=0)//changed this to check for less than 0 since now we will subtract { level.doorClip ConnectPaths(); level.door Delete(); level.doorClip Delete(); //when you open a door, you'll need to connect the paths, which means you should disconnect the paths first } }
Here is the code cleaned up. I would also set the doors as the target of the triggers and make some more tweaks, but this is cleaner and you can add as many triggers as you want this way: (sorry for any typos or errors, didn't test)
Code Snippet
Plaintext
function openDoor() { trigs = GetEntArray("triggers","targetname"); level.buttonsNeeded = trigs.size;
door = GetEnt("door", "targetname");
doorClip = GetEnt("door_clip", "targetname");//I personally would set the clip as the doors target and not use level var doorClip DisconnectPaths();
foreach(trig in trigs) { trig thread Trig1(door, doorClip); } }
function Trig1(door, doorClip) { self SetCursorHint("HINT_NOICON"); self SetHintString("Press [{+activate}] to...");