Post your scripting questions / solutions here
Moderator: Moderators
fuhrer
Captain
Posts: 253 Joined: Sun Mar 14, 2004 3:36 am
Post
by fuhrer » Mon Mar 29, 2004 1:28 pm
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
nuggets
General
Posts: 1006 Joined: Fri Feb 28, 2003 2:57 am
Location: U-england-K (england in the UK) :P
Contact:
Post
by nuggets » Tue Mar 30, 2004 2:11 am
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
hope this helps, prob not cos it's all foreign 2 me :-/
fuhrer
Captain
Posts: 253 Joined: Sun Mar 14, 2004 3:36 am
Post
by fuhrer » Tue Mar 30, 2004 7:13 pm
ty nuggets works great, is there a way i can turn all the triggers on and off in one line too?
nuggets
General
Posts: 1006 Joined: Fri Feb 28, 2003 2:57 am
Location: U-england-K (england in the UK) :P
Contact:
Post
by nuggets » Tue Mar 30, 2004 7:33 pm
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
hope this helps, prob not cos it's all foreign 2 me :-/
fuhrer
Captain
Posts: 253 Joined: Sun Mar 14, 2004 3:36 am
Post
by fuhrer » Tue Mar 30, 2004 8:20 pm
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]
nuggets
General
Posts: 1006 Joined: Fri Feb 28, 2003 2:57 am
Location: U-england-K (england in the UK) :P
Contact:
Post
by nuggets » Tue Mar 30, 2004 9:18 pm
change
$floors bind $lift
to
$triggers bind $lift
hope this helps, prob not cos it's all foreign 2 me :-/
fuhrer
Captain
Posts: 253 Joined: Sun Mar 14, 2004 3:36 am
Post
by fuhrer » Tue Mar 30, 2004 10:33 pm
i missed a line, i already have $triggers bind $lift, $floors are the buttons
nuggets
General
Posts: 1006 Joined: Fri Feb 28, 2003 2:57 am
Location: U-england-K (england in the UK) :P
Contact:
Post
by nuggets » Tue Mar 30, 2004 10:36 pm
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
hope this helps, prob not cos it's all foreign 2 me :-/
fuhrer
Captain
Posts: 253 Joined: Sun Mar 14, 2004 3:36 am
Post
by fuhrer » Fri Apr 02, 2004 12:39 am
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.
nuggets
General
Posts: 1006 Joined: Fri Feb 28, 2003 2:57 am
Location: U-england-K (england in the UK) :P
Contact:
Post
by nuggets » Fri Apr 02, 2004 2:14 am
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
hope this helps, prob not cos it's all foreign 2 me :-/
fuhrer
Captain
Posts: 253 Joined: Sun Mar 14, 2004 3:36 am
Post
by fuhrer » Fri Apr 02, 2004 4:03 am
i have it nuggets ive been meaning to get ahold of u to ask u about it, do u have msn?
nuggets
General
Posts: 1006 Joined: Fri Feb 28, 2003 2:57 am
Location: U-england-K (england in the UK) :P
Contact:
Post
by nuggets » Sun Apr 04, 2004 3:17 am
well i did, i'll have 2 download it again, but i'm more of a yahoo person
hope this helps, prob not cos it's all foreign 2 me :-/