#65302 Running the Elevator~ 2 c 100 *~ * Written December 22, 2014 by Parnassus for TBAmud * Thanks to Fizban for writing an Elevator trigger, and Rumble for posting it as * a Trigger of the day, which made me decide that my Housing project * apartment really needed an elevator. * Thanks to Axanon for letting me look at his really nice elevator triggers. * Be prepared for errors, use at your own risk. * Any errors are mine, any people named in this trigger are blameless! * * Parnassus' Special Anti-Freeze Formula if %cmd.mudcommand% == nohassle return 0 halt end * * Variable assignments: make changes here. * Thanks to Krell for helping me work out this format which is especially * good for a stand-alone trigger! * adjust zone number * set maxfl to the highest floor number. To make a penthouse, make adjustments * similar to the Ground floor here. If you add more than 20 floors, switch to the * commented line using CURFL instead of the one using ORDINAL . * add additional floors along with %zone% and room number of the linking room. * (Also add mention of button and display in the linking room. Set up door to the * elevator, flagged as 2 - Pickproof door.) set zone 653 set maxfl 4 set totfl 5 set Elevat %zone%99 set Floor0 %zone%98 set Floor1 %zone%06 set Floor2 %zone%14 set Floor3 %zone%22 set Floor4 %zone%30 * Which side of the elevator is the door on? set elevdoor north * Which side of the room is the elevator on? set roomdoor south ** Thanks to Thomas for the formula that makes this part work. eval temp %%Elevat.%elevdoor%(vnum)%% eval eleroom %temp% if %eleroom% == %Floor1% set CurFl 1 set Curex %Floor1% elseif %eleroom% == %Floor2% set CurFl 2 set Curex %Floor2% elseif %eleroom% == %Floor3% set CurFl 3 set Curex %Floor3% elseif %eleroom% == %Floor4% set CurFl 4 set Curex %Floor4% elseif %eleroom% == %Floor0% set CurFl 0 set Curex %Floor0% end if %cmd% == push if %arg% == g || %arg% >= 1 && %arg% <= %maxfl% if %self.vnum% != %Elevat% %send% %actor% You don't see that here. halt else ** Thanks to Kyle for figuring out how to make this part work. eval text %%self.%elevdoor%(bits)%% if %text.contains(LOCKED)% && !%text.contains(PICKPROOF)% %send% %actor% The elevator is already in motion. Please be patient. halt end end if %arg% == g set %arg% 0 set targfl 0 set Tarex %Floor0% elseif %arg% == 1 set Tarex %Floor1% set targfl 1 elseif %arg% == 2 set Tarex %Floor2% set targfl 2 elseif %arg% == 3 set Tarex %Floor3% set targfl 3 elseif %arg% == 4 set Tarex %Floor4% set targfl 4 end elseif %arg% == button if %self.vnum% == %Elevat% %send% %actor% Which button? halt else eval text %%self.%roomdoor%(bits)%% if !%text.contains(CLOSED)% %send% %actor% The elevator is already here. halt elseif %text.contains(LOCKED)% && !%text.contains(PICKPROOF)% %send% %actor% The elevator is already in use. Please wait and try again. halt end end else %send% %actor% You don't see that here. halt end if %self.vnum% == %Floor0% set Tarex %Floor0% set targfl 0 elseif %self.vnum% == %Floor1% set Tarex %Floor1% set targfl 1 elseif %self.vnum% == %Floor2% set Tarex %Floor2% set targfl 2 elseif %self.vnum% == %Floor3% set Tarex %Floor3% set targfl 3 elseif %self.vnum% == %Floor4% set Tarex %Floor4% set targfl 4 end if %targfl% == g set dir down eval length %Curfl% elseif %targfl% > %Curfl% set dir up eval length %targfl% - %Curfl% elseif %targfl% < %Curfl% set dir down eval length %Curfl% - %targfl% else set dir nowhere set length 0 end %at% %Elevat% %echo% The elevator doors slide shut. %at% %Curex% %echo% The elevator doors slide shut. wait 5 set echofl 0 while %echofl% < %totfl% eval temp %%Floor%echofl%%% %at% %temp% %echo% The elevator doors start to vibrate. %door% %temp% %roomdoor% flags abc eval echofl %echofl% + 1 done if %length% > 0 set origlen %length% %door% %Curex% %roomdoor% flags abc %door% %Elevat% %elevdoor% purge %door% %Elevat% %elevdoor% room %Elevat% %door% %Elevat% %elevdoor% flags abc %at% %Elevat% %echo% The elevator g*l u r c h e s* n %at% %Elevat% %echo% n G*l u r c h e s* n %at% %Elevat% %echo% n g*l u r c h e s* n %dir%wards. end while %length% if %dir% == up eval Curfl %Curfl% + 1 elseif %dir% == down eval Curfl %Curfl% -1 end if %Curfl% == 0 set ordinal ground elseif %Curfl% == 1 set ordinal 1st elseif %Curfl% == 2 set ordinal 2nd elseif %Curfl% == 3 set ordinal 3rd elseif %Curfl% > 3 set ordinal %Curfl%th end wait 15 %at% %Elevat% %echo% g *DING!* n %at% %Elevat% %echo% You have reached the %ordinal% floor. * It's easier to use the following line if you have over 20 floors (instead of the 21th floor) * %at% %Elevat% %echo% You have reached floor %Curfl%. wait 5 eval length %length% - 1 if %CurFl% > %maxfl% %echo% r Something seems to be wrong with the elevator. n %echo% r Please try again and if there's still a problem, n %echo% r please report this to admin. n set length 0 end done if %origlen% > 0 wait 2 %at% %Elevat% %echo% nThe elevator y*s h u d d e r s* n %at% %Elevat% %echo% n Y*s h u d d e r s* n %at% %Elevat% %echo% n y*s h u d d e r s* n to a halt. end wait 2 set echofl 0 while %echofl% < %totfl% eval temp %%Floor%echofl%%% %at% %temp% %echo% The elevator doors stop vibrating. wait 3 %door% %temp% %roomdoor% flags abcd eval echofl %echofl% + 1 done wait 1 %at% %targfl% %echo% g *DING!* n wait 3 %door% %Tarex% %roomdoor% room %Elevat% %door% %Tarex% %roomdoor% flags a %door% %Elevat% %elevdoor% purge %door% %Elevat% %elevdoor% room %Tarex% %at% %Elevat% %echo% The doors slide open. %at% %Tarex% %echo% The elevator doors slide open. wait 3 %door% %Elevat% %elevdoor% flags a elseif %cmd.mudcommand% == look if !%arg% return 0 halt elseif %arg% == display if %self.vnum% != %Elevat% eval text %%self.%roomdoor%(bits)%% if !%text.contains(CLOSED)% %send% %actor% The elevator is already here. halt end else eval text %%self.%elevdoor%(bits)%% end if %text.contains(LOCKED)% && !%text.contains(PICKPROOF)% %send% %actor% Numbers flash across the display. The elevator is on the move. halt end if %Curfl% == 0 set displaymsg the ground floor else set displaymsg floor %Curfl% end %send% %actor% The elevator is on %displaymsg%. halt * if look is not noarg or display else return 0 end * if command is anything except look or push else return 0 end ~ $~