*SOLVED* script not working for more than one player
Posted: Sun Mar 20, 2005 10:22 pm
Another script right out of my weird brains. Its task is to make a saloon door close by swinging forth and back some times.
Here it is:The way it is working:
Player use trigger $door_opener
Doorwings swing away from player and stay open until the player has left both triggers $door_collision_in and $door_collision_out
Once he left, doorwings swing back and forth with decreasing angle until they are in startposition again.
Now this works fine for one player but for a second, the door does not stay open.
Any ideas? Here's a pk3 with bsp, script and map if u wanted to take a look
Here it is:
Code: Select all
main:
exec global/DMprecache.scr
level.script = maps/dm/test_swingdoor.scr
local.master=spawn ScriptMaster
for (local.i=1 ; local.i <= 9 ; local.i++ ) //same sound getting lower for the saloondoor
{
local.master aliascache ("saloondoor2_"+local.i) sound/mechanics/DoorWoodClose_stop3.wav soundparms (local.i/9.00) 0.2 0.5 0.2 256 1024 auto loaded maps "dm obj"
}
local.master aliascache saloondoor1 sound/mechanics/DoorWoodClose_03.wav soundparms 1 0.2 0.5 0.2 256 1024 auto loaded maps "dm obj"
level waittill prespawn
level waittill spawn
thread saloon_door_prep
end
saloon_door_prep:
level.saloon_door_angle = 90 //how far the doors open
$right_door time 0.5 //speed of doors
$left_door time 0.5
end
saloon_door:
$door_opener nottriggerable
local.doorblocked = 1
local.door_turn = 1
local.player= parm.other
local.door_dir = 0
if (local.player istouching $door_collision_out)
{
local.door_dir = -1
}
if (local.player istouching $door_collision_in)
{
local.door_dir = 1
}
$right_door rotateYup (level.saloon_door_angle * -1 * local.door_dir)
$left_door rotateYup (level.saloon_door_angle * local.door_dir)
$left_door playsound saloondoor1
$right_door move
$left_door waitmove
//doors wait until space is empty
while (local.doorblocked)
{
for( local.i = 1 ; local.i <= $player.size ; local.i++ )
{
if (!($player[local.i] istouching $door_collision_in) && !($player[local.i] istouching $door_collision_out))
{
local.doorblocked = 0
}
else
{
local.doorblocked = 1
break
}
}
wait 0.1
}
//now doors swing back and forth into start position
for( local.k = 9 ; local.k >= 1 ; local.k-- )
{
local.door_turn=local.door_turn * -1
local.saloon_closing_angle = level.saloon_door_angle / 10 * local.k * local.door_turn
$right_door rotateYup (local.saloon_closing_angle * -1 * local.door_dir)
$left_door rotateYup (local.saloon_closing_angle * local.door_dir)
$right_door move
$left_door waitmove
$left_door playsound ("saloondoor2_" + local.k)
//being halfway, we check for players blocking the door
for( local.j = 1 ; local.j <= $player.size ; local.j++ )
{
if(($player[local.j] istouching $door_collision_in) || ($player[local.j] istouching $door_collision_out))
{
goto cleanup
}
}
$right_door rotateYup (local.saloon_closing_angle * -1 * local.door_dir)
$left_door rotateYup (local.saloon_closing_angle * local.door_dir)
$right_door move
$left_door waitmove
}
cleanup:
// setting doors in start position whereever they might be
if ($right_door.angle > 180)
{
$right_door rotateYupto 0
}
if ($right_door.angle < 180)
{
$right_door rotateYdownto 0
}
if ($left_door.angle > 180)
{
$left_door rotateYupto 0
}
if ($left_door.angle < 180)
{
$left_door rotateYdownto 0
}
$right_door move
$left_door waitmove
$left_door playsound saloondoor1
$door_opener triggerable
//everything's fine again
end
Player use trigger $door_opener
Doorwings swing away from player and stay open until the player has left both triggers $door_collision_in and $door_collision_out
Once he left, doorwings swing back and forth with decreasing angle until they are in startposition again.
Now this works fine for one player but for a second, the door does not stay open.
Any ideas? Here's a pk3 with bsp, script and map if u wanted to take a look