Page 2 of 2

Posted: Mon Mar 29, 2004 1:28 pm
by fuhrer
im just experimenting, not sure if settin level.doors = $("doors_" + self.floor)

and then having level.doors doclose

there must be a way of doing that soi dont have to close all the doors even when they aint closed

Code: Select all

level waittill prespawn

exec global/DMprecache.scr
exec global/ambient.scr lift
level.script = "maps/dm/lift.scr" 

	$floors bind $lift	
	$lift speed 116			

level waittill spawn

end

//--------------//
// Lift Buttons //
//--------------//

call: 
	
	thread triggers_off
	level.doors doclose
	$lift moveto $("floor_" + self.floor)
	$lift loopsound lift_sound
	$lift waitmove			
	$lift loopsound lift_sound wait
	$("doors_" + self.floor) doopen
	$("doors_" + self.floor) playsound lift_gate
	level.doors = $("doors_" + self.floor)
	wait 1.5
	thread triggers_on
end



//----------//
// Triggers //
//----------//

triggers_off:

	$1st nottriggerable
	$2nd nottriggerable
	$3rd nottriggerable
	$4th nottriggerable
	

end
	
triggers_on:

	
	$1st triggerable
	$2nd triggerable
	$3rd triggerable
	$4th triggerable

end


end

Posted: Tue Mar 30, 2004 2:11 am
by nuggets
level.doors will return NIL

you'll need to attach a variable to the $lift so it knows which floor it's on and which doors it's closing before it moves again

$lift.floor = 1 //put this after your bind command (if the lift starts on floor 1)

change level.doors doclose to
$("doors" + $lift.floor) doclose

then after $lift waitmove put
$lift.floor = self.floor

Posted: Tue Mar 30, 2004 7:13 pm
by fuhrer
ty nuggets works great, is there a way i can turn all the triggers on and off in one line too?

Posted: Tue Mar 30, 2004 7:33 pm
by nuggets
well yes and no, there isn't a global function to turn all triggers off, but you can just name them all the same thing (the ones in the lift will need to still be named the differently to the external ones) so have
targetname / internal
targetname / external

$internal nottriggerable
$external nottriggerable

you need them to be named differently for the bind function

Posted: Tue Mar 30, 2004 8:20 pm
by fuhrer
everything works now fine, however the triggers dont want to work IF i bind them to the lift, right now i have to have them the entire length of the lift shaft, can someone tell me why this is?

Code: Select all

	$floors bind $lift	// binds buttons to the lift 
	$lift.floor = 1		// sets the lift position
	$lift speed 116		// sets the lifts speed (Units Per Second)
	

level waittill spawn

end

//------//
// Lift //
//------//

call: 
	
	$triggers nottriggerable		// turns off the triggers
	$outer_triggers nottriggerable
	$call_buttons playsound click			
	$call_buttons moveNorth 1		// moves buttons
	$call_buttons move
	wait .2
	$call_buttons moveSouth 1
	$call_buttons move
	$("doors_" + $lift.floor) playsound lift_gate 	
	$("doors_" + $lift.floor) doclose 	
	$lift moveto $("floor_" + self.floor)
	$lift loopsound lift_sound
	$lift waitmove				// moves the lift to that destination
	$lift.floor = self.floor
	$lift loopsound lift_sound wait
	$("doors_" + self.floor) doopen
	$("doors_" + self.floor) playsound lift_gate
	level.doors = $("doors_" + self.floor)
	wait 1.5
	$triggers triggerable			// turns triggers on
	$outer_triggers triggerable

end


[code]
[/code]

Posted: Tue Mar 30, 2004 9:18 pm
by nuggets
change
$floors bind $lift

to
$triggers bind $lift

Posted: Tue Mar 30, 2004 10:33 pm
by fuhrer
i missed a line, i already have $triggers bind $lift, $floors are the buttons

Posted: Tue Mar 30, 2004 10:36 pm
by nuggets
you sure, it hasn't appeared in either of your previous scripts? your targetnames must be right otherwise the triggers would always be triggerable
fuhrer wrote:im just experimenting, not sure if settin level.doors = $("doors_" + self.floor)

and then having level.doors doclose

there must be a way of doing that soi dont have to close all the doors even when they aint closed

Code: Select all

level waittill prespawn

exec global/DMprecache.scr
exec global/ambient.scr lift
level.script = "maps/dm/lift.scr" 

	$floors bind $lift	
	$lift speed 116			

level waittill spawn

end

//--------------//
// Lift Buttons //
//--------------//

call: 
	
	thread triggers_off
	level.doors doclose
	$lift moveto $("floor_" + self.floor)
	$lift loopsound lift_sound
	$lift waitmove			
	$lift loopsound lift_sound wait
	$("doors_" + self.floor) doopen
	$("doors_" + self.floor) playsound lift_gate
	level.doors = $("doors_" + self.floor)
	wait 1.5
	thread triggers_on
end



//----------//
// Triggers //
//----------//

triggers_off:

	$1st nottriggerable
	$2nd nottriggerable
	$3rd nottriggerable
	$4th nottriggerable
	

end
	
triggers_on:

	
	$1st triggerable
	$2nd triggerable
	$3rd triggerable
	$4th triggerable

end


end

Posted: Fri Apr 02, 2004 12:39 am
by fuhrer
spoke to tltrude he says that because i have the inner triggers callin the lift to a different floor, it makes them seperate entities therefore binding them with the same targetname will not work... looks like ill leave them takin up the entire length of the shaft.

Posted: Fri Apr 02, 2004 2:14 am
by nuggets
oh yeah, the way i did it in my elevator, don't know if you've even seen it, was to make an array of each multiple part and set groups for each piece so you coud use multiple elevators,
here's the global code for it

//**************\\
// the elevator \\
//**************\\

main:
waitthread elevator_prep

//***DEBUG***
if (level.elevator_debug == 1)
{
level waittill spawn
wait 1

println "elevators = " $elevator.size
println "elevator left doors = " $elevator_left.size
println "elevator right doors = " $elevator_right.size
println "floor way_points = " $wp_floor.size
println "external buttons = " $external_buttons.size
println "elevator buttons = " $elevator_buttons.size
println "indicators = " $pointer.size
println "internal indicators = " $elevator_pointer.size
println "lights = " $elevator_light.size
if (!($elevators.size == $elevator_left.size) && !($elevator_left.size == $elevator_right.size))
{println "*_*_MISMATCH_number_of_doors_does_not_match_the_number_of_left_or_right_doors}
if (!($wp_floor.size == $external_buttons.size) && !($wp_floor.size == $elevator_buttons.size))
{println "*_*_MISMATCH_number_of_floors_does_not_match_the_number_of_elevator_or_external_buttons}
if !($wp_floor.size == $elevator_light.size)
{println "*_*_MISMATCH_number_of_floors_does_not_match_the_number_of_elevator_lights}
for (local.i=1; local.i<=$elevator.size; local.i++)
{
println "_____"
println "ELEVATOR " $elevator[local.i].group
if ($elevator[local.i].left == NIL)
{println "*_*_MISMATCH could not find $elevator_left for group " $elevator[local.i].group}
else
{println "left_door_bound_to_elevator " $elevator.group}
if ($elevator[local.i].right == NIL)
{println "*_*_MISMATCH could not find $elevator_right for group " $elevator[local.i].group}
else
{println "right_door_bound_to_elevator " $elevator.group}
println "pointer_bound_to_elevator " $elevator[local.i].group " = " $elevator[local.i].pointer.size
println "floors_bound_to_elevator_" $elevator[local.i].group " = " $elevator[local.i].floor.size
println "buttons_bound_to_elevator " $elevator[local.i].group " = " $elevator[local.i].button.size
println "lights_bound_to_elevator " $elevator[local.i].group " = " $elevator[local.i].light.size
println "external_pointers_bound_to_elevator " $elevator[local.i].group " = " $elevator[local.i].ex_pointer.size
println "ex_left_bound_to_elevator " $elevator[local.i].group " = " $elevator[local.i].ex_left.size
println "ex_right_bound_to_elevator " $elevator[local.i].group " = " $elevator[local.i].ex_right.size
}
}
//***DEBUG***
end

/////////////////////////
//___the preperation___//
/////////////////////////

elevator_prep:
for (local.i=1; local.i<=$elevator.size; local.i++)
{
for (local.j=1; local.j<=$elevator.size; local.j++)
{
if ($elevator[local.i].group == $elevator_left[local.j].group)
{$elevator[local.i].left = $elevator_left[local.j]}
if ($elevator[local.i].group == $elevator_right[local.j].group)
{$elevator[local.i].right = $elevator_right[local.j]}
if ($elevator[local.i].group == $elevator_pointer[local.j].group)
{$elevator[local.i].pointer = $elevator_pointer[local.j]}
}

local.l = 0
for (local.k=1; local.k<=$wp_floor.size; local.k++)
{
local.l++
if ($elevator[local.i].group == $wp_floor[local.k].group)
{
$elevator[local.i].floor[$wp_floor[local.k].floor] = $wp_floor[local.k]
}
if ($elevator[local.i].group == $elevator_buttons[local.k].group)
{
$elevator[local.i].button[$elevator_buttons[local.k].floor] = $elevator_buttons[local.k]
$elevator_buttons[local.k].elevator = $elevator[local.i]
$external_buttons[local.k].elevator = $elevator[local.i]
}
if ($elevator[local.i].group == $elevator_light[local.k].group)
{
$elevator[local.i].light[$elevator_light[local.k].floor] = $elevator_light[local.k]
}
if ($elevator[local.i].group == $pointer[local.k].group)
{
$elevator[local.i].ex_pointer[local.l] = $pointer[local.k]
}
if ($elevator[local.i].group == $external_left[local.k].group)
{
$elevator[local.i].ex_left[$external_left[local.k].floor] = $external_left[local.k]
}
if ($elevator[local.i].group == $external_right[local.k].group)
{
$elevator[local.i].ex_right[$external_right[local.k].floor] = $external_right[local.k]
}
}

for (local.j=1; local.j<=$elevator.floor.size; local.j++)
{
local.a = vector_length ($elevator[local.i].origin - $elevator[local.i].floor[local.j].origin)
if (local.a < 30)
{
$elevator[local.i].current_pos = $elevator[local.i].floor[local.j].floor
println "starting_floor = floor " $elevator[local.i].floor[local.j].floor ", distance from perfect co-ords = " local.a
}
}

if ($elevator[local.i].current_pos == NIL)
{
$elevator[local.i] time 0
$elevator[local.i] moveto $elevator[local.i]
$elevator[local.i] move
$elevator[local.i] time level.wait_floor
println "*_*_ERROR elevator " $elevator[local.i].group " was not at a way_point, moved to floor 1"
}

for (local.i=1; local.i<=$elevator.size; local.i++)
{
$elevator[local.i].left bind $elevator[local.i]
$elevator[local.i].right bind $elevator[local.i]
$elevator[local.i].button bind $elevator[local.i]
$elevator[local.i].light bind $elevator[local.i]
$elevator[local.i].pointer bind $elevator[local.i]
}
}

$pointer notsolid
$elevator_pointer notsolid

$elevator_left speed 24
$elevator_right speed 24
$external_left speed 22
$external_right speed 22

$elevator time 4
$pointer time 4
$elevator_pointer time 4

if (level.wait_floor == NIL)
{level.wait_floor = 4}
end

/////////////////////
//___the calling___//
/////////////////////

elevator_call:
self playsound snd_ping

self.elevator.dest[self.floor] = 1
self.elevator.light[self.floor] light 1 1 1 8

if (level.elevator_debug == 1)
{
iprintln_noloc "elevator called to floor " self.floor
iprintln_noloc "_currently on floor " self.elevator.current_pos
if (self.floor == $elevator.current_pos)
{iprintln_noloc "elevator already on floor"}
if (self.floor > $elevator.current_pos)
{iprintln_noloc "elevator going up"}
if (self.floor < $elevator.current_pos)
{iprintln_noloc "elevator going down"}
}
if !(self.elevator.moving == 1)
{
if (self.floor == $elevator.current_pos)
{self thread send_here}
if (self.floor > $elevator.current_pos)
{self thread send_up}
if (self.floor < $elevator.current_pos)
{self thread send_down}
}
end

send_here:
if !(self.elevator.doors_open == 1)
{
self.elevator.moving = 1
self.elevator.light[self.elevator.current_pos] light 0 0 0 0
self waitthread doors_move_a
self.elevator.dest[self.elevator.current_pos] = 0
}
for (local.i=self.elevator.current_pos; local.i<=self.elevator.floor.size; local.i++)
{
if (self.elevator.dest[local.i] == 1)
{
self thread send_up
end
}
}
for (local.i=self.elevator.current_pos; local.i>0; local.i--)
{
if (self.elevator.dest[local.i] == 1)
{
self thread send_down
end
}
}
self.elevator.moving = 0
end

send_up:
self.elevator playsound elevator_run
self.elevator.moving = 1
self.elevator.current_pos++
self.elevator.pointer rotateZup -60
self.elevator.ex_pointer rotateZup -60
self.elevator.pointer move
self.elevator.ex_pointer move
self.elevator moveto self.elevator.floor[self.elevator.current_pos]
self.elevator waitmove
if (self.elevator.dest[self.elevator.current_pos] == 1)
{
wait 0.75
self.elevator.light[self.elevator.current_pos] light 0 0 0 0
self.elevator stoploopsound elevator_run
self waitthread doors_move_a
self.elevator.dest[self.elevator.current_pos] = 0
}
for (local.i=self.elevator.current_pos; local.i<=self.elevator.floor.size; local.i++)
{
if (self.elevator.dest[local.i] == 1)
{
self thread send_up
end
}
}
for (local.i=self.elevator.current_pos; local.i>0; local.i--)
{
if (self.elevator.dest[local.i] == 1)
{
self thread send_down
end
}
}
self.elevator.moving = 0
end

send_down:
self.elevator playsound elevator_run
self.elevator.moving = 1
self.elevator.current_pos--
self.elevator.pointer rotateZup 60
self.elevator.ex_pointer rotateZup 60
self.elevator.pointer move
self.elevator.ex_pointer move
self.elevator moveto self.elevator.floor[self.elevator.current_pos]
self.elevator waitmove
if (self.elevator.dest[self.elevator.current_pos] == 1)
{
wait 0.75
self.elevator.light[self.elevator.current_pos] light 0 0 0 0
self.elevator stoploopsound elevator_run
self waitthread doors_move_a
self.elevator.dest[self.elevator.current_pos] = 0
}
for (local.i=self.elevator.current_pos; local.i>0; local.i--)
{
if (self.elevator.dest[local.i] == 1)
{
self thread send_down
end
}
}
for (local.i=self.elevator.current_pos; local.i<=self.elevator.floor.size; local.i++)
{
if (self.elevator.dest[local.i] == 1)
{
self thread send_up
end
}
}
self.elevator.moving = 0
end

doors_move_a:
thread doors_move_b self.elevator.ex_left[self.elevator.current_pos] self.elevator.ex_right[self.elevator.current_pos] level.wait_floor self.elevator
waitthread doors_move_b self.elevator.left self.elevator.right level.wait_floor
end

doors_move_b local.nl_object local.nr_object local.nwait local.nelevator:
if !(local.nelevator == NIL)
{local.nelevator playsound elevator_gate}
if !(local.nelevator == NIL)
{local.nelevator.doors_open = 1}
local.nl_object moveLeft 30
local.nr_object moveRight 30
local.nl_object move
local.nr_object waitmove
wait local.nwait
if !(local.nelevator == NIL)
{local.nelevator playsound elevator_gate}
local.nl_object moveRight 30
local.nr_object moveLeft 30
local.nl_object move
local.nr_object waitmove
if !(local.nelevator == NIL)
{local.nelevator.doors_open = 0}
end


(you'd use)
for (local.i=1; local.i<=$triggers.size; local.i++)
{
$lift.button[local.i] = $triggers[local.i]
}
$lift.button bind $lift

Posted: Fri Apr 02, 2004 4:03 am
by fuhrer
i have it nuggets ive been meaning to get ahold of u to ask u about it, do u have msn?

Posted: Sun Apr 04, 2004 3:17 am
by nuggets
well i did, i'll have 2 download it again, but i'm more of a yahoo person

:D