Trigger of the Day - Elevator (Intermediate)

Login to reply  Page: « < 1 of 1 > »
25 Feb 2010 - 17:092388
Trigger of the Day - Elevator (Intermediate)
This is actually a few triggers used together to make a working elevator. You'll need a few prerequisites to get this running.
1.) Build your 'building', with the elevator on the first floor. Build the other floors (at least the rooms the elevator will exit at)
2.) Although not *mandatory*, a mobile should serve as the elevator attendant. This example uses one, so that's what I'll cover.
3.) Make a room for the elevator shaft. This is sort of a temporary room for the elevator doors to link to when it's not at a floor.

The elevator room (panel):
Name: 'Elevator Panel',  VNum: [57400], RNum: [ 4107]
Trigger Intended Assignment: Rooms
Trigger Type: Command , Numeric Arg: 100, Arg list: press
Commands:
* Elevator Script
* By Axanon
* define floor exits in an array
set floor[1] 57401
set floor[2] 57407
set floor[3] 57410
set floor[4] 57413
set shaft 57414
set elevator 57402
if %cmd% == press && %arg% >= 1 && %arg% <= 4
  %send% %actor% You press button %arg%. The light flickers.
  %echoaround% %actor% %actor.name% presses button %arg%
  * get the current floor the elevator is on.
  if %self.east(vnum)% == 57401
    set curfloor 1
  end
  if %self.east(vnum)% == 57407
    set curfloor 2
  end
  if %self.east(vnum)% == 57410
    set curfloor 3
  end
  if %self.east(vnum)% == 57413
    set curfloor 4
  end
  * set current state of elevator
  eval gofloor %arg%
  eval gofloorex %%floor[%arg%]%%
  eval exitnum %self.east(vnum)%
  * determine if the elevator is going up or down
  if %gofloor% > %curfloor%
    set eledir upward
    eval waittime (%gofloor% - %curfloor%) * 2
  end
  if %gofloor% < %curfloor%
    set eledir downward
    eval waittime (%curfloor% - %gofloor%) * 2
  end
  if %arg% == %curfloor%
    %echo% This is an elevator, not a stayavator!
    set eledir nowhere
    set waittime 0
  end
  wait 5 sec
  * close the doors on both sides
  %echo% The elevator doors close.
  %asound% The elevator doors close.
  %door% %exitnum% west purge
  %door% %exitnum% west room %shaft%
  %door% %exitnum% west name elevator
  %door% %exitnum% west flags bcd
  %door% %elevator% east purge
  %door% %elevator% east room %shaft%
  %door% %elevator% east name elevator
  %door% %elevator% east flags bcd
  wait 1 sec
  %echo% The elevator squeaks and begins moving %eledir%.
  set inmotion 1
  global inmotion
  * as set above, for each floor the elevator has to move, it will take longer
  * to get there.
  wait %waittime% sec
  * Second floor! Sporting goods and lingerie!
  %door% %gofloorex% west purge
  %door% %gofloorex% west room %elevator%
  %door% %gofloorex% west name elevator
  %door% %gofloorex% west flags a
  %door% %elevator% east purge
  %door% %elevator% east room %gofloorex%
  %door% %elevator% east name elevator
  %door% %elevator% east flags a
  %echo% *DING!*
  %asound% *DING!*
  wait 1 sec
  %echo% The elevator doors open.
  %asound% The elevator doors open.
  set inmotion 0
  global inmotion
else
  * incase somebody tries to go to a non-existant floor.
  %send% %actor% There are only 4 floors, that's not one of them!
end

The elevator call button, place outside the elevator on each floor (requires mobile):
Name: 'Elevator Call Button',  VNum: [57401], RNum: [ 4108]
Trigger Intended Assignment: Rooms
Trigger Type: Command , Numeric Arg: 100, Arg list: press
Commands:
if %self.vnum% == 57401
  set floor 1
elseif %self.vnum% == 57407
  set floor 2
elseif %self.vnum% == 57410
  set floor 3
else %self.vnum% == 57413
  set floor 4
end
%send% %actor% You press the call button.
%echoaround% %actor% %actor.name% presses the call button.
if %in_motion% == 1
  %echo% The elevator is currently in use. Please wait and try again.
else
  if %cmd% == press && %arg% == call
    %force% elevator say You better get out of here! Somebody else needs the elevator.
    wait 4s
    %force% elevator press %floor%
  else
    %send% %actor% Perhaps try pressing something that is there!
  end
end
And finally, some 'atmosphere' :):
Name: 'Elevator Music',  VNum: [57402], RNum: [ 4109]
Trigger Intended Assignment: Rooms
Trigger Type: Random , Numeric Arg: 10, Arg list: None
Commands:
switch %random.9%
  case 1
    %echo% "Tijiuana Taxi" plays over the broken speaker.
  break
  case 2
    %echo% The ever famous song, "Spanish Flea" comes on. Arriba!
  break
  case 3
    %echo% The elevator plays the theme song from M*A*S*H.
  break
  case 4
    %echo% An instrumental version of "Dancing Queen" plays out of the elevator speaker. Go girl!
    wait 5 sec
    %force% elevator emote bops his head to the music.
  break
  case 6
    %echo% An instrumental rendition of "Kung-Fu Fighting" plays over the elevator speaker.
  break
  case 7
    %echo% The MuzeHACK(tm) version of "Gypsies, Tramps and Thieves" is stinging your ears.
    wait 5 sec
    %echo% As if god himself could feel your pain and help you, the elevator speaker cuts out.
    wait 2 sec
    %force% elevator emote bangs on the wall of the elevator.
    wait 1 sec
    %echo% The music returns! Nooo!
  break
  case 8
    %echo% The MuzeHACK(tm) version of The Monkee's "Daydream Believer" comes on.
    wait 5 sec
    %send% %person% You catch yourself inadvertently humming along and quickly stop.
    wait 5 sec
    %send% %person% The elevator attendant winks at you.
    %echoaround% The elevator attendant winks at %person%.
  break
  case 9
    %echo% A Bossa nova-style variation of the "Imperial March" from Star Wars plays over the speaker.
    wait 4 sec
    %force% elevator emote gags in disgust.
  break
  default
  break
done



Last edited by Axanon (25 Feb 2010 - 17:15)
25 Feb 2010 - 20:072390
nice example, thanks for starting this up again.


__________________
Rumble
The Builder Academy
tbamud.com 9091
Login to reply  Page: « < 1 of 1 > »