@q
@prog ride3main.muf
1 99999 d
i
(RIDE ENGINE 3.7FB By Riss)
$include $lib/REFLIST
$define globalprop #183 $enddef
var target
var mess
var mode
: taurREF-first ( -- d)
me @ "RIDE/ontaur" REF-first
;
: taurREF-next (d -- d')
me @ "RIDE/ontaur" rot REF-next
;
: taurREF-delete (d -- )
me @ "RIDE/ontaur" rot REF-delete
;
: taurREF-list ( -- s)
me @ "RIDE/ontaur" REF-list
;
: taurREF-add (d -- )
me @ "RIDE/ontaur" rot REF-add
;
: porz? (d -- b Player or zombie ***** 3.7)
dup player? if pop 1 exit then
dup thing? if "Z" flag? exit then
pop 0
;
: Anyonehome? ( -- b True if first player in Ref-list)
taurRef-first
porz? (***** 3.7)
;
: getonwho (d -- d)
"RIDE/onwho" getpropstr atoi dbref
;
: onwho? (d -- b True if on you **** 3.5)
dup (d d For second check)
getonwho
me @ dbcmp (d b)
swap intostr (b s)
"RIDE/_check/" swap strcat
globalprop swap getpropstr (b s')
atoi dbref me @ dbcmp
( dup not if "RIDE: Possible security fault." .tell then)
AND (both checks)
;
: getatrig (d-- d' **** 3.5)
"RIDE/theta" getpropstr atoi dbref
;
: setatrig ( -- records triggerdbref on taur **** 3.5)
prog trig dbcmp if (caused by RIDE?)
me @ getonwho getatrig
else
trig
then
me @
"RIDE/theta" rot intostr 0 addprop
;
: atoldloc? (d -- b True if at old location)
location me @ "RIDE/oldloc" getpropstr atoi dbref dbcmp
;
: setoldloc ( -- set taur location to here)
me @ "RIDE/oldloc" me @ location intostr 0 addprop
;
: getoldloc ( -- d)
me @ "RIDE/oldloc" getpropstr atoi dbref
;
: dororcheck (d -- b Rider on rider check one time)
dup (d d)
getonwho getatrig (get the trig used by the taur)
dup (d d' d')
exit? if
locked? EXIT
then
(nuts with it.. need recursion)
pop pop
0 (<- free ride)
;
: lockedout? (d -- b True if locked out)
OWNER (***** 3.7 for ZOMBIES!)
dup (D D)
dup (D D D)
prog owner dbcmp swap (D b D)
"W" flag? or (D b)
me @ "W" flag? or (D B)
me @ prog owner dbcmp or (D B')
me @ name "Riss" stringcmp not or (D B")
loc @ "_yesride" getpropstr "yes" stringcmp not or
if pop 0 EXIT then (not locked out)
(D)
loc @ owner me @ dbcmp (I own room?)
if pop 0 EXIT then
(D)
loc @ "_noride" getpropstr "yes" stringcmp not
if pop 1 EXIT then (room set to _noride)
(D)
trig exit? (D b)
if trig locked? EXIT then (trig WAS an exit)
(D ok.. must have been a program moveto of some sort)
trig prog dbcmp (did RIDE do the moveto?)
if dororcheck EXIT then (do rider on rider check)
(D driveto or objexit maybe?)
trig mlevel 3 = trig "W" flag? or
if pop 0 EXIT then (free pass if lev 3 moveto ***** 3.7)
pop (heck with the rider.. check the room)
loc @ "J" flag? not if 1 EXIT then (no J flag)
loc @ "vehicle_ok?" .envprop "yes" stringcmp
loc @ "vehicle_ok" .envprop "yes" stringcmp AND
loc @ "_vehicle_ok?" .envprop "yes" stringcmp AND
loc @ "_vehicle_ok" .envprop "yes" stringcmp AND
(exits true if stuff from driveto.muf not found)
;
: listlocked? ( -- b)
taurREF-first
dup
porz? not if (if first dbref no good then cancel ***** 3.7)
pop 1 exit
then (d)
0 swap (b d)
BEGIN (b d)
dup (b d d)
porz? WHILE (b d ***** 3.7)
dup (b d d)
lockedout? (b d b)
rot (d b b)
or (d b)
swap (b d)
taurREF-next (b d')
REPEAT
pop (b)
;
: getmsg (s -- s')
mess ! me @ "RIDE/_mode" getpropstr mode !
me @ "RIDE/" mode @ strcat "/" strcat mess @ strcat
getpropstr
dup not if (no good, try global)
pop globalprop
"RIDE/" mode @ strcat "/" strcat mess @ strcat
getpropstr
dup not if (again no good)
pop
globalprop
"RIDE/RIDE/" mess @ strcat
getpropstr
then
then
;
: tellnotonwho (d -- of player not on taur)
dup (Tells taur who is not on them)
name "RIDE: " swap strcat " " strcat "_notonwho" getmsg
strcat pronoun_sub .tell
;
: tellnotawake (d -- )
dup (Tells taur player fell asleep)
name "RIDE: " swap strcat " " strcat "_notawake" getmsg
strcat pronoun_sub .tell
;
: tellnotatoldloc (d -- )
dup (Tells taur that rider moved off)
name "RIDE: " swap strcat " " strcat "_notatoldloc" getmsg
strcat pronoun_sub .tell
;
: telllocked (d -- )
dup (Tells taur that rider was locked out)
name "RIDE: " swap strcat " " strcat "_locked" getmsg
strcat pronoun_sub .tell
;
: tellridergone (d -- )
me @ (for pronounsub. Tells rider they moved with taur)
me @ name " " strcat "_ridermsg" getmsg strcat pronoun_sub (d s)
notify
;
: tellnewroom ( -- )
me @ (for pronounsub. Tells room who did what with who)
me @ name " " strcat "_newroom" getmsg strcat
taurREF-list "%l" subst (string, reflist, %l = string)
pronoun_sub me @ location (place)
#0 rot notify_except
;
: telloldroom ( -- )
me @ (for pronounsub. Tells room who did what with who)
me @ name " " strcat "_oldroom" getmsg strcat
taurREF-list "%l" subst (string, reflist, %l = string)
pronoun_sub getoldloc #0 rot
notify_except
;
: resetlookstat
me @ "RIDE/lookstat" remove_prop
;
: setlookstat ( -- set the lookstat prop for the Taur)
me @ dup name " " strcat
"_lstatTAUR" getmsg strcat
taurREF-list "%l" subst pronoun_sub (setup by the dup)
me @ "RIDE/lookstat" rot 0 addprop
;
: setriderlookstat (d -- sets the riders prop)
dup (d d)
name " " strcat (d s)
"_lstatRIDER" getmsg strcat
me @ name "%n" subst me @ swap pronoun_sub (d s)
"RIDE/lookstat" swap 0 addprop
;
: yankrider (d -- d')
dup taurREF-next swap taurREF-delete
;
: resetrider (d -- )
dup
"RIDE/onwho" "no_one" 0 addprop
"RIDE/lookstat" remove_prop
;
: resettaur ( -- )
me @ "RIDE/tauring" "NO" 0 addprop
resetlookstat
;
: allaboard
BEGIN
me @ "RIDE/reqlist" REF-first
dup
target ! porz? WHILE ( ***** 3.7)
target @ onwho?
if
target @ taurREF-add
else
"RIDE: "
target @ name strcat
" did not accept your offer to be carried." strcat .tell
then
me @ "RIDE/reqlist" target @ REF-delete
REPEAT
;
: moveriders ( -- MAIN)
SETATRIG
allaboard
taurREF-first
dup
porz? not if (***** 3.7)
"RIDE: You are not carring anyone." .tell
resettaur
setoldloc
EXIT
then
me @
"RIDE/_ridercheck"
getpropstr
"YES"
stringcmp not
if (ridercheck wanted!)
listlocked?
if (opps.. someone is locked!)
me @
getoldloc
MOVETO
"RIDE: One or more of your riders were locked out of your destination."
.tell
EXIT (the whole shebang!)
then
then
BEGIN (d)
dup porz? WHILE (***** 3.7)
dup onwho? not if (onwho? true if on you)
dup tellnotonwho (d -- NOT on you)
dup yankrider (d -- d' pull from your list and get next)
CONTINUE
then
dup OWNER awake? not if (awake true if awake ***** 3.7)
dup tellnotawake (d -- tells taur player not awake)
dup resetrider (d -- Reset them)
dup yankrider (d -- d' pull from list)
CONTINUE
then
dup atoldloc? not if (atoldloc? true if at old location)
dup tellnotatoldloc (d -- bailed out)
dup resetrider (d --)
dup yankrider (d -- d')
CONTINUE
then
dup lockedout? if (lockedout? true if Locked out)
dup telllocked (d -- tell cant come with)
dup resetrider (d -- )
dup yankrider (d -- d')
CONTINUE
then
(OK.... move them...)
dup tellridergone (d -- tells rider they moving)
dup setriderlookstat (D -- sets the riders lookstat)
dup loc @ MOVETO (ta da!)
taurREF-next (d -- d')
REPEAT
anyonehome?
if
tellnewroom
telloldroom
setlookstat
else
"RIDE: No one came with you!" .tell
resettaur
then
setoldloc (set location to here)
;
: MAINSWITCH
me @ "RIDE/TAURING" getpropstr "YES" stringcmp
if EXIT then
MOVERIDERS
;
.
c
q