For making the door open, make a script area in your map where you want the player to walk into, then add this to the OnStart part of your script:
AddEntityCollideCallBack("Player", "ScriptArea", "DoorOpen", true, 1);
Change ScriptArea to the name of your script area. True is whether or not it happens only once.
Anyway, add this into your code (Not in onStart, just in a blank space)
void DoorOpen(string &in asParent, string &in asChild, int alState)
AddTimer("DoorTimer", 1.0f, "DoorOpened");//Only have this line if the player will interact with the door afterwards.
SetSwingDoorClosed("Door", false, false);
AddPropImpulse("Door", X.0f, Y.0f, Z.0f, "World");
Now, there are a couple things you have to do:
1. Change Door to the name of your door.
2. X, Y, and Z is the direction of the force. You'll need to find out which way your door opens and put a huge number like 10000 where the X Y or Z is depending on which way your door opens. The other coordinates that mean up or down can just be changed to 0.
This concept confused me the first time I read it, so I'll have an example:
3. If the door begins locked, you will need to add the following in with the AddPropImpulse and stuff.
SetSwingDoorLocked("Door", false, false);
Now, finally, if you want the player to be able to interact with the door again afterwards, I think you'll have to add this afterwards:
void DoorOpened(string &in asTimer)
And again, change Door to the name of your door.
I hope I've helped you, Sorry if it was a bit of a long explanation, and if I've mucked up and the script doesn't work just tell me.