@q
@program spoof.muf
1 9999 d
i
( Spooof.muf v1.1 Jessy @ FurryMUCK 8/96, 7/99
A spoof program with several configurable options.
INSTALLATION:
Set spoof.muf M3. Create an action and link it to the program.
CONFIGURATION:
By default, spoofs are enclosed in parentheses. The parenthese can be
replaced by whatever string you like, by setting props _pref and _suf
on the trigger.
@set <action> =_pref:[
@set <action> =_suf:]
Or you can allow 'freespoofs'... spoofs with no indicating brackets.
To do so, set the trigger _freespoof.
@set <action> = _freespoof : yes
Freespoofs beginning with the name of an online player other than the
will be put in brackets.
Wizards may see who is spoofing by setting themselves _prefs/nospoof.
@set me = _prefs/nospoof : yes
To allow all players to set themselves _prefs/nospoof, set the
_nospoof prop on the trigger:
@set <action> = _nospoof : yes
To disallow specific prefixes, edit list _noprefs on the trigger,
with a disallowed prefix on each line. Example:
lsedit @emit=_noprefs
You
>>
.end
This example will put spoofs/@emits beginning with the strings 'You'
or '>>' in parentheses. These matches are case-insensitive.
This program may be freely ported. Please comment any changes.
)
$define tell me @ swap notify $enddef
$define line me @ " " notify $enddef
lvar counter
lvar ourString
lvar pName?
: Help
"------------------------------------------------------------------------"
tell
"Spoof.muf (#" prog intostr strcat ")" strcat tell line
"To spoof a message, simply type '" command @ strcat " <message>'" strcat
tell line
"Configuration Options:" tell line
"By default, spoofs are bracketed in parentheses. There are two options "
"for reformatting spoofs. The parentheses can be replaced by setting a "
"'preface' and 'suffix' prop on the trigger."
strcat strcat tell line
" @set <trigger> = _pref:<string to preceed spoof string>" tell
" @set <trigger> = _suf:<string to follow spoof string>" tell line
"Or, 'freespoofs', with no parentheses or other signals, will be emitted "
"if the trigger is set _freespoof" strcat tell line
" @set <trigger> = _freespoof:yes" tell line
"Spoofs beginning with a player's name will always be bracketed." tell
trig "_nospoof" getpropstr if
line
"To see who is spoofing, set yourself _prefs/nospoof." tell
line
" @set me=_prefs/nospoof:yes" tell
then
line
"For Wizards: To who is spoofing, set yourself _nospoof." tell line
" @set me = _prefs/nospoof : yes" tell line
"To allow all players to do this, set the trigger _nospoof." tell line
" @set " command @ strcat
" = _nospoof:yes" strcat tell line
"To disallow specific prefixes in freespoofs, edit list _noprefs on" tell
"the trigger, entering one prefix per line." tell
"------------------------------------------------------------------------"
tell
;
: TellSpoof ( -- ) ( format spoof for bracketed output )
trig "_pref" getpropstr dup not if
pop "( "
then
ourString @ strcat
trig "_suf" getpropstr dup not if
pop " )"
then
strcat ourString !
;
: FreeSpoof ( -- ) ( format spoof for 'free' output )
( check for spoofs beginning with player names
or disallowed prefixes. For these, format with
parens; others, leave spoof string unchanged. )
trig "_noprefs#/" nextprop dup if
begin
dup while
trig over getpropstr
ourString @ swap stringpfx if
TellSpoof exit
then
trig swap nextprop
repeat
then
pop
ourString @ dup " " instr dup if
1 - strcut pop strip pName? !
else
pop pop
ourString @ pName? !
then
pName? @ .pmatch not
pName? @ "I" smatch
pName? @ "me" smatch or or if
exit
then
pName? @ .pmatch
dup #-1 dbcmp
over #-2 dbcmp or if
exit
then
name pName? @ smatch if
pName? @ me @ name smatch not if
TellSpoof
then
then
;
: main
"me" match me ! ( make sure I'm me )
dup not if ( bail out for null messages )
exit
then
strip ourString ! ( store spoof message )
"#help" ourString @ stringpfx if ( check: user wants help? )
Help exit
then
trig "_freespoof" getpropstr not if ( format message )
TellSpoof
else
Freespoof
then
loc @ contents counter ! ( set up loop of players to tell )
begin ( begin player-telling loop )
counter @ while
counter @ player? not if ( skip non-player objects )
counter @ next counter ! continue
else
counter @ awake? not if ( skip sleepers )
counter @ next counter ! continue
then
then
counter @ ourString @ notify ( notify player with message )
trig "_nospoof" getpropstr if ( check: show who spoofed? )
1
else
counter @ "W" flag?
then
counter @ "_prefs/nospoof" getpropstr and if
counter @ "* Spoofed by " me @ name strcat " *" strcat notify
then
counter @ next counter !
repeat ( end player-telling loop )
;
.
c
q