@q
@program cmd-autosweep
1 99999 d
i
( AutoSweep - A way of sending you home automatically - By Madra Rua )
( )
( Setup as a global: @act autosweep;as=#0 / @link as=#<dbref program> )
( @set #0=_connect/autosweep:<dbref program> )
( @set #0=_disconnect/autosweep:<dbref program> )
( )
( Setup as a personal program: Same as above, but replace '#0' with 'me' )
$define aswpid "autosweep/id" $enddef
$define aswpdelay "autosweep/delay" $enddef
$define aswptime "300" $enddef
$define aswpmode "autosweep/mode" $enddef
$define aswpdisc "autosweep/disc" $enddef
$define aswpodisc "autosweep/odisc" $enddef
$define aswpswept "autosweep/swept" $enddef
$define aswpfast "autosweep/fast" $enddef
$define aswpconn "autosweep/conn" $enddef
: split
over swap instr
dup 1 > if
1 - strcut 1 strcut swap pop 1
then
;
: tell
me @ swap notify
;
: otell
me @ name " " strcat swap strcat me @ location swap me @ swap notify_except
;
: awakestuff
dup "#help" stringcmp not if
"AutoSweep Help:" tell
" #help - This list." tell
" #stat - Shows current settings." tell
" #on - Turns AutoSweep on." tell
" #off - Turns AutoSweep off." tell
" #skip - Turns AutoSweep off only for the next disconnect." tell
" #fast - Sets AutoSweep to instantly sweep on the next disconnect." tell
" #delay=<time> - Sets the sweep delay to <time> seconds." tell
" #disc=<msg> - Sets the message displayed when you disconnect." tell
" #odisc=<msg> - Sets the alternate message displayed when you" tell
" disconnect AND you have AutoSweep active." tell
" #swept=<msg> - Sets the message displayed when you get swept." tell
" #fast=<msg> - Sets the message when you get swept in fast mode." tell
" #conn=<msg> - Sets the message displayed when you connect." tell
" ( If the <time> or <msg> is blank, value gets set to the default." tell
" Each <msg> is automatcally prepended with your name. )" tell
exit
then
dup "#stat" stringcmp not if
"AutoSweep Status: " tell
" Mode: "
me @ aswpmode getpropstr
dup strlen 0 = if pop "(OFF)" then
strcat tell
" Delay: "
me @ aswpdelay getpropstr
dup strlen 0 = if pop "(300)" then
strcat " seconds" strcat tell
" Disconnect message: "
me @ aswpdisc getpropstr
dup strlen 0 = if
pop "(none)"
else
"(" me @ name strcat ") " strcat swap strcat
then
strcat tell
" Alternate disconnect message: "
me @ aswpodisc getpropstr
dup strlen 0 = if
pop "(none)"
else
"(" me @ name strcat ") " strcat swap strcat
then
strcat tell
" Swept Message: (" me @ name strcat
me @ aswpswept getpropstr
dup strlen 0 = if
pop " is automatically sent home.)"
else
") " swap strcat
then
strcat tell
" Fast Swept Msg: (" me @ name strcat
me @ aswpfast getpropstr
dup strlen 0 = if
pop " is automatically sent home immediately.)"
else
") " swap strcat
then
strcat tell
" Connect message: "
me @ aswpconn getpropstr
dup strlen 0 = if
pop "(none)"
else
"(" me @ name strcat ") " strcat swap strcat
then
strcat tell
exit
then
dup "#on" stringcmp not if
"AutoSweep: Turned on." tell
me @ aswpmode "ON" 0 addprop
exit
then
dup "#off" stringcmp not if
"AutoSweep: Turned off." tell
me @ aswpmode "OFF" 0 addprop
exit
then
dup "#skip" stringcmp not if
"AutoSweep: Skipping the next disconnection." tell
me @ aswpmode "SKIP" 0 addprop
exit
then
dup "#delay" instr 1 = if
"=" split
0 = if
"AutoSweep: Delay time NOT set." tell
else
dup dup strlen 0 = swap atoi 0 = or if
pop me @ aswpdelay remove_prop
"AutoSweep: Delay time reset." tell
else
me @ swap aswpdelay swap 0 addprop
"AutoSweep: Delay time set." tell
then
then
exit
then
dup "#disc" instr 1 = if
"=" split
0 = if
"AutoSweep: Disconnect message NOT set." tell
else
dup strlen 0 = if
pop me @ aswpdisc remove_prop
"AutoSweep: Disconnect message reset." tell
else
me @ swap aswpdisc swap 0 addprop
"AutoSweep: Disconnect message set." tell
then
then
exit
then
dup "#odisc" instr 1 = if
"=" split
0 = if
"AutoSweep: Alternate disconnect message NOT set." tell
else
dup strlen 0 = if
pop me @ aswpodisc remove_prop
"AutoSweep: Alternate disconnect message reset." tell
else
me @ swap aswpodisc swap 0 addprop
"AutoSweep: Alternate disconnect message set." tell
then
then
exit
then
dup "#swept" instr 1 = if
"=" split
0 = if
"AutoSweep: Swept message NOT set." tell
else
dup strlen 0 = if
pop me @ aswpswept remove_prop
"AutoSweep: Swept message reset." tell
else
me @ swap aswpswept swap 0 addprop
"AutoSweep: Swept message set." tell
then
then
exit
then
dup "#fast" instr 1 = if
"=" split
0 = if
"AutoSweep: Fast sweep on next disconnection." tell
me @ aswpmode "FAST" 0 addprop
else
dup strlen 0 = if
pop me @ aswpfast remove_prop
"AutoSweep: Fas Sweep message reset." tell
else
me @ swap aswpfast swap 0 addprop
"AutoSweep: Fast Sweep message set." tell
then
then
exit
then
dup "#conn" instr 1 = if
"=" split
0 = if
"AutoSweep: Connect message NOT set." tell
else
dup strlen 0 = if
pop me @ aswpconn remove_prop
"AutoSweep: Connect message reset." tell
else
me @ swap aswpconn swap 0 addprop
"AutoSweep: Connect message set." tell
then
then
exit
then
"AutoSweep: Type 'autosweep #help' for help." tell
" AutoSweep is used to automatically send you home after a given" tell
" amount of time when you disconnect. It also gives to the ability" tell
" to set custom messages to display when you connect or disconnect." tell
;
: objectsweep
me @ contents
begin
dup #-1 dbcmp if break then
dup next swap
dup "_autosweep?" getpropstr "" stringcmp if
#-3 moveto
else
pop
then
repeat
;
: main
"me" match me !
dup "Connect" strcmp not if
pop
me @ aswpconn getpropstr
dup strlen 0 = not if otell else pop then
me @ aswpid getpropval
dup ispid? if kill then
pop exit
then
dup "Disconnect" strcmp if
awakestuff pop exit
then pop
objectsweep
me @ aswpmode getpropstr
dup strlen 0 = if pop "OFF" then
dup "OFF" stringcmp not if
me @ aswpdisc getpropstr
dup strlen 0 = not if otell else pop then
exit
then
dup "SKIP" stringcmp not if
me @ aswpmode "ON" 0 addprop exit
then pop
me @ aswpid "" pid addprop
me @ aswpmode getpropstr
dup "FAST" stringcmp not if
me @ aswpmode "ON" 0 addprop
else
me @ aswpodisc getpropstr
dup strlen 0 = not if
otell
else
pop
me @ aswpdisc getpropstr
dup strlen 0 = not if
otell
else
pop
then
then
( me @ awake? not if )
background
me @ aswpdelay getpropstr
dup strlen 0 = if pop "300" then
atoi
dup 0 < if pop 0 then
dup 3600 > if pop 3600 then
sleep
( then )
then
me @ awake? not me @ getlink me @ location dbcmp not and if
"FAST" stringcmp not if
me @ aswpfast getpropstr
dup strlen 0 = if
pop "is automatically sent home immediately."
then otell
else
me @ aswpswept getpropstr
dup strlen 0 = if
pop "is automatically sent home."
then otell
then
me @ #-3 moveto
then
;
.
c
q