RinaDescer v3.0

This creates a parent descer that you'll love, really. :) It supports multiple descs, and can change every public attribute (@sex, @name, etc., or whatever global ones your MUSH defines, like &pos) for each desc, and will display appropriate 'change' messages (or not, your choice) for each desc change. It also supports an action-list with each change (suitable for changing things like @locks on yourself).

Author: Rinaen@AmberMUSH
Category: Other
Compatibility: TinyMUSH, TinyMUX.

Instructions

Copy and paste the below code into a compatible MUSH or MUX.

MUSHCode for RinaDescer v3.0

@@ This creates a parent descer that you'll love, really. :) It supports
@@ multiple descs, and can change every public attribute (@sex, @name,
@@ etc., or whatever global ones your MUSH defines, like &pos) for each
@@ desc, and will display appropriate 'change' messages (or not, your
@@ choice) for each desc change. It also supports an action-list with
@@ each change (suitable for changing things like @locks on yourself).
@@
@@ This code has been extensively tested for TinyMUSH version 2.2.1,
@@ and works great there, so should work just as well with TinyMUX.
@@
@@ This code should be ready to be quoted into your MUSH.
@@ For TinyFugue users, just type the following:
@@ /quote '"<file>"
@@ (where <file> is the filename that you've saved this file to)
@@
@@ If you have any trouble running the script or you have any problems
@@ with the MUSH code itself, or even if you have any comments, suggestions,
@@ etc., please feel free to email me at rina@pobox.com. Enjoy!
@@ -- Rina
@@
@@ ----- CUT HERE -----
@create RinaDescer v3.0 parent -- 'look' at me!
@lock RinaDescer v3.0 parent -- 'look' at me!=me
&Aclone RinaDescer v3.0 parent -- 'look' at me!=@pemit %#=Sorry, @clone is a waste of DB-space. Please use @parent instead. (Object Destroyed.);@dest/override me
@Adesc RinaDescer v3.0 parent -- 'look' at me!=@pemit %#=[switch(owner(me),%#,%rRinaDescer! Type '=help' for help.)]
&CHANGE RinaDescer v3.0 parent -- 'look' at me!=&cur_form me=[v(cur_form)] %1;@femit [setq(0,iter(name sex alias,switch(v(%1_##),,,##)))][setq(1,iter(v(valid2),switch(v(%1_##),,,##)))]%0=[u(%1_msg%2)];@switch strlen(v(%1_alias))=0,,{@alias %0};@fo [setq(2,iter(%q0,[@]## %0=[u(%1_##)]\;))][setq(3,iter(%q1,[&]## %0=[u(%1_##)]\;))]me=%q2%q3;@fo %0=[u(%1_action)];@pemit %0=[switch(v(%1_msg%2),,Done!,[u(%1_note)])]
&CONFIGS RinaDescer v3.0 parent -- 'look' at me!=pfix suffix
&CUR_STATUS RinaDescer v3.0 parent -- 'look' at me!=[iter(v(cur_form),[switch(words(v(##_desc)),0,,[u(pfix)][u(##_desc)][u(suffix)])])][switch(words(v(mood)),0,,%r[u(pfix)][u(mood)][u(suffix)])]
&DELETE1 RinaDescer v3.0 parent -- 'look' at me!=@switch strlen(v(%0_%1))=0,{@pemit %2=Sorry, %0's "%1" does not exist.},{&%0_%1 me;@pemit %2=%0's "%1" has been removed.;@switch [setq(0,[iter(u(valid),[edit(##,^,%0_)])])][strlen(filter(exist,%q0))]=0,{&form_list me=remove(v(form_list),%0)}}
&DELETEALL RinaDescer v3.0 parent -- 'look' at me!=@wipe me/%0_*;@pemit %1=[switch(member(v(form_list),lcstr(%0)),0,{Sorry, %0 does not exist.},{"%0" has been removed.})];&form_list me=remove(v(form_list),%0)
&DO_CHANGE RinaDescer v3.0 parent -- 'look' at me!=$=ch* *:@switch words(setdiff(%1,v(form_list)))=0,{&cur_form me;@dolist %1=@tr me/change=%#, ##, %0},{@pemit %#="[setdiff(%1,v(form_list))]" [switch(words(setdiff(%1,v(form_list))),1,is not a valid form,are not valid forms)].}
&DO_CHANGE2 RinaDescer v3.0 parent -- 'look' at me!=$=form* *:@switch words(setdiff(%1,v(form_list)))=0,{&cur_form me;@dolist %1=@tr me/change=%#, ##, %0},{@pemit %#="[setdiff(%1,v(form_list))]" [switch(words(setdiff(%1,v(form_list))),1,is not a valid form,are not valid forms)].}
&DO_CONFIG RinaDescer v3.0 parent -- 'look' at me!=$=config *=*:@switch member(v(configs),%0)=0,{@pemit %#=Sorry, that's not a valid configuration option. Try '=help config' for a list.},{&%0 me=%1;@pemit %#=Configured: [ucstr(%0)] changed to \[%1\].}
&DO_CONFIG_DEFAULT RinaDescer v3.0 parent -- 'look' at me!=$=config default:@dol [v(configs)]=&## me;@pemit %#=RinaDescer configuration restored to default.
&DO_CONFIG_VALID RinaDescer v3.0 parent -- 'look' at me!=$=config/valid *=*:@switch member(add remove,%0)=0,{@pemit %#=Sorry, That's not a valid configuration option. Try '=help valid' for a list.},{&valid2 me=[switch(%0,add,[setunion(v(valid2),%1)],remove,[remove(v(valid2),%1)])];@pemit %#=Configured: \[%1\] added to the VALID list.}
&DO_COPY RinaDescer v3.0 parent -- 'look' at me!=$=copy *=*:@switch/first [setq(9,strmatch(%0,*/*))][setq(0,switch(%q9,0,%0,first(%0,/)))][setq(1,switch(%q9,0,%1,first(%1,/)))][setq(2,rest(%0,/))][setq(3,rest(%1,/))][member(v(form_list),%q0)] [member(v(form_list),%q1)] [switch(%q9,0,1,words(v(%q0_%q2)))] [switch(%q9,0,1,words(v(%q1_%q3)))]=0 * * *,{@pemit %#=No such form as "%q0".},* * 0 *,{@pemit %#=No entry for %q0's "%q2". You can't copy something that isn't there!},* 0 * *,{@dol lattr(me/%q0_*)=&%q1_[rest(##,_)] me=v(##);&form_list me=setunion(v(form_list),lcstr(%q1));@pemit %#="%q0" copied into "%q1".},* * * 0,{&%q1_%q3 me=v(%q0_%q2);&form_list me=setunion(v(form_list),lcstr(%q1));@pemit %#=%q0's "%q2" copied into %q1's "%q3".},{@pemit %#=[switch(%q9,0,"%q1",%q1's "%q3")] already exists. Use '=rem' to first remove it before copying to it.}
&DO_CREATE RinaDescer v3.0 parent -- 'look' at me!=$=desc */*=*:@switch [setq(0,edit(%0,_,-))][setq(0,edit(%q0,%b,-))][or(match(u(valid),%1),strmatch(%1,msg*))]=0,{@pemit %#=Sorry, "%1" is not a valid attribute.},{&%q0_%1 me=[switch(%2,(blank),%b,%2)];@set me/%q0_%1=no_command;@pemit %#=%q0's "%1" stored.;&form_list me=setunion(v(form_list),lcstr(%q0))}
&DO_DELETE RinaDescer v3.0 parent -- 'look' at me!=$=rem *:@switch strmatch(%0,* *)=0,{@switch strmatch(%0,*/*)=0,{@tr me/deleteall=%0,%#},{@tr me/delete1=[extract(%0,1,1,/)],[extract(%0,2,1,/)],%#}},{@pemit %#=Only one form or form element may be deleted at a time.}
&DO_EDIT RinaDescer v3.0 parent -- 'look' at me!=$=edit */*=*/*:&%0_%1 me=edit(v(%0_%1),%2,%3);@pemit %#=[switch(v(%0_%1),,{Sorry, %0's "%1" does not exist.},{%0's "%1" is now:%r[v(%0_%1)]})]
&DO_HELP RinaDescer v3.0 parent -- 'look' at me!=$=help*:@pemit [setq(0,help[edit(%0,%b,_)])]%#=[switch(v(%q0),,{Sorry, there's no such RinaDescer help topic.},[u(%q0)])]
&DO_INIT RinaDescer v3.0 parent -- 'look' at me!=$=init descer:@switch hasflag(me,inherit)=0,{@pemit %#=Whoops! This object needs the INHERIT flag to work properly. To accomplish this, type '@set [num(me)]=inherit', then type '=init descer' again.},{&default_desc me=[get(%#/desc)];&form_list me=setunion(v(form_list),default);&cur_form me=default;@desc %#=\[u([num(me)]/cur_status)];@set me=dark;@set me=safe;@lock me=%#;@lock/use me=%#;@pemit %#=RinaDescer initialized and ready for use. Original desc stored in 'default'. For help, type '=help'.}
&DO_LIST RinaDescer v3.0 parent -- 'look' at me!=$=list *:@switch strmatch(%0,*/*)=0,{@tr me/listall=%0,%#},{@tr me/listone=[extract(%0,1,1,/)],[extract(%0,2,1,/)],%#}
&DO_LIST2COL RinaDescer v3.0 parent -- 'look' at me!=$=list/*:@switch [setq(0,match(u(valid),%0*))]%q0=0,{@pemit %#="%0" is not a valid attribute.},{@pemit %#=[ljust(Form Name,15)][setq(1,extract(u(valid),%q0,1))][capstr(%q1)]%r[ljust(=========,15)][repeat(=,strlen(%q1))][iter(filter(me/fn-only,v(form_list)),%r[ljust(##,15)][u(fn-list2col,v(##_%q1))])]}
&DO_LIST2COLALL RinaDescer v3.0 parent -- 'look' at me!=$=listall/*:@switch [setq(0,match(u(valid),%0*))]%q0=0,{@pemit %#="%0" is not a valid attribute.},{@pemit %#=[ljust(Form Name,15)][capstr(extract(u(valid),%q0,1))]%r[ljust(=========,15)][repeat(=,strlen(extract(u(valid),%q0,1)))][iter(v(form_list),%r[ljust(##,15)][u(fn-list2col,v(##_[extract(u(valid),%q0,1)]))])]}
&DO_LISTFORMS RinaDescer v3.0 parent -- 'look' at me!=$=list:@pemit %#=Stored forms:%r[edit(v(form_list),%b,\,%b)]
&DO_MOOD RinaDescer v3.0 parent -- 'look' at me!=$=mood *:&mood me=%0;@pemit %#=Mood set.
&DO_MOODCHECK RinaDescer v3.0 parent -- 'look' at me!=$=moodcheck:@pemit %#=[switch(v(mood),,No mood set.,Mood: [u(mood)])]
&DO_MOODCLEAR RinaDescer v3.0 parent -- 'look' at me!=$=mood:&mood me;@pemit %#=Mood cleared.
&DO_MSG RinaDescer v3.0 parent -- 'look' at me!=$=msg* *:@switch/first [member(v(form_list),%1)] [strlen(v(%1_msg%0))]=0 *,{@pemit %#="[setdiff(%1,v(form_list))]" [switch(words(setdiff(%1,v(form_list))),1, is not a valid form,are not valid forms)].},* 0,{@pemit %#="%0" is not a valid change message for that form.},{@femit %#=[u(%1_msg%0)]}
&DO_OFF RinaDescer v3.0 parent -- 'look' at me!=$=off* *:@switch strlen(setdiff(%1,v(cur_form)))=0,{@dolist %1={&cur_form me=remove(v(cur_form),##);@femit %#=[u(##_msg%0)];@switch strlen(v(%1_msg%0))=0,@pemit %#=Done!}},{@pemit %#="[setdiff(%1,v(form_list))]" [switch(strlen(setdiff(%1,v(form_list))),1,is not a valid form,are not valid forms)].}
&DO_ON RinaDescer v3.0 parent -- 'look' at me!=$=on* *:@switch strlen(setdiff(%1,v(form_list)))=0,{@dolist %1=@tr me/change=%#, ##,%0},{@pemit %#="[setdiff(%1,v(form_list))]" [switch(strlen(setdiff(%1,v(form_list))),1,is not a valid form,are not valid forms)].}
&DO_STATUS RinaDescer v3.0 parent -- 'look' at me!=$=status:@pemit %#=Descer status: [v(cur_form)][switch(v(mood),,,%bmood)]
&DO_STORE RinaDescer v3.0 parent -- 'look' at me!=$=store *:@set [setq(0,edit(%0,_,-))][setq(0,edit(%q0,%b,-))]me=%q0_desc:u(cur_status);@set me/%q0_desc=no_command;&form_list me=setunion(v(form_list),lcstr(%0));@dol [u(valid2)] alias sex=&%0_## me=get(%#/##);&%q0_name me=%N;@pemit %#="%q0" stored as the composite of '[trim(v(cur_form))][switch(v(mood),,,%bmood)]'.
&DO_STORE2 RinaDescer v3.0 parent -- 'look' at me!=$=store/s *:@set [setq(0,edit(%0,_,-))][setq(0,edit(%q0,%b,-))]me=%q0_action:{&cur_form %%!=[trim(v(cur_form))]};@set me/%q0_action=no_command;&form_list me=setunion(v(form_list),lcstr(%q0));@pemit %#="%q0" stored as the shortcut of '=ch [trim(v(cur_form))]'.
@Desc RinaDescer v3.0 parent -- 'look' at me!=[switch(parent(me),#-1,{RinaDescer v3.0e. This description device can be used for players or puppets, supports multiple descriptions, and handles the changing of every public attribute (@name, @sex, etc). Configurable options, and built-in tutorial. To use this descer, type the following:%r%t@create RinaDescer%r%t@parent RinaDescer=[num(me)]%r%tlook RinaDescer%r%rCoded by Rinaen@AmberMUSH (rina@pobox.com)},{To use this descer, simply type these three commands exactly:%r%t@set [num(me)]=inherit%r%t@set [num(me)]=commands%r%t=init descer%r%rWARNING! This will move your present @desc into a 'default' attribute on the descer.})]
&EXIST RinaDescer v3.0 parent -- 'look' at me!=[gt(strlen(v(%0)),0)]
&FN-LIST2COL RinaDescer v3.0 parent -- 'look' at me!=mid(switch(%0,%b,(blank),%0),0,63)
&FN-ONLY RinaDescer v3.0 parent -- 'look' at me!=gt(strlen(v(%0_%q1)),0)
&HELP RinaDescer v3.0 parent -- 'look' at me!=%rRinaDescer v3.0e introduction%r%rThis description device is designed to be modular and versatile. It can be used by puppets as well as character objects. The descer stores each form with several different attributes of each form. An attribute is the desc, name, alias, sex, note, or action-list, as well as configurable additions, and any msg<x> (where <x> can be any descriptor, commonly 1, 2, to, from, etc.). This descer allows you to not only change your basic @desc, but to change every 'public' attribute, allowing a thorough disguise. It also optionally performs an 'action-list' for each form change, which is especially useful for @doing, @locks, etc. Each form has as many different 'change' messages as you like, allowing for flexibility and variance in your @emits.%r%rFor a list of command types, type '=help cmds' ('=help command list' shows a full list of commands). For configuration help, type '=help config'. For a tutorial, type '=help use'. For update information, type '=help update'. For the troubleshooting guide (READ THIS before you ask me), type '=help troubleshooting'.%r%rAny questions, comments, complaints, or songs of great joy should be +mailed to [name(owner(parent(me)))] or emailed to rina@pobox.com. Thanks. :)
&HELP_CH RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =ch)%r%r=ch<x> <form1> <form2> <formN...>%r=ch <form1> <form2> <formN...>%r%rThis command is the one you use to change into a form or forms. The <x> is the MSG<x> for the form that you wish to have emitted (shown to yourself and others in the room, like a pose); that is, one of the change messages defined for that form. If you do not wish to have a change message emitted, use the second command for a silent change. You can change into one or more forms at a time with this command. Note that if a change message for a form is not defined, it will perform like a silent change for that form. So, if you have a change message called "into" for <form1>, but none for <form2>, typing '=chinto <form1> <form2>' will describe you with <form1> and <form2>'s descriptions, and emit the "into" change message as defined in <form1>. If <form2> also had an "into" change message defined, it would emit both, in order.%r%rNOTE: This command is also aliased as '=form', to avoid conflicts with many MUSHes' global comm channels or chatlines.
&HELP_CMDS RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Commands)%r%rVALID attributes are: [u(valid)] msg<x>%r%rType '=help <command>' for help on the commands listed below. Example: '=help desc'.%r[setq(0,ch config copy desc edit form list mood msg on off rem status store)][iter(%q0,[switch(mod(member(%q0,##),3),1,%r,)][mid(capstr(=##),0,23)][switch(lte(23,strlen(##)),1,,space(sub(23,strlen(##))))])]
&HELP_COMMAND_LIST RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Full Command List)%r%rVALID attributes: [u(valid)] msg<x>%r%r[ljust(=desc <form>/<attribute>=<text>,35)]Store <form>'s <attribute> as <text>.%r[ljust(=edit <form>/<attr>=<old>/<new>,35)]Edit <form>'s <attribute>, replacing <old>%r[space(35)]text with <new>.%r[ljust(=rem <form>,35)]Deletes all attributes for <form>.%r[ljust(=rem <form>/<attribute>,35)]Deletes named <attribute> in <form> only.%r[ljust(=list,35)]Lists forms stored.%r[ljust(=list <form>,35)]Shows all attributes of <form>.%r[ljust(=list <form>/<attribute>,35)]Shows named <attribute> in <form>.%r[ljust(=list/<attribute>,35)]Shows a two-column list of <forms> that%r[space(35)]include the named <attribute>.%r[ljust(=listall/<attribute>,35)]Like above, but shows all forms, not just%r[space(35)]forms that have the <attribute>.%r[ljust(=copy <old>=<new>,35)]Copies <old> form to <new> form. Also%r[space(35)]useful for renaming.%r[ljust(=copy <old>/<attr>=<new>/<attr>,35)]Copies one attribute only.%r[ljust(=store <form>,35)]Stores the composite of your current%r[space(35)]form as new <form>.%r[ljust(=status,35)]Shows your desc's current status.%r[ljust(=ch<x> <form>,35)]Changes to <form>, emitting MSG<x>.%r[space(35)]Leave out the <x> for a silent change.%r[ljust(=form<x> <form>,35)]Same thing as '=ch'.%r[ljust(=msg<x> <form>,35)]Emits MSG<x> of <form>, without changing.%r[ljust(=on<x> <form>,35)]Adds <form> to the end of your current%r[space(35)]desc, where <x> is the change message.%r[ljust(=off<x> <form>,35)]Removes <form> from your current desc,%r[space(35)]where <x> is the change message.%r[ljust(=mood <text>,35)]Sets your temporary mood, which shows up in%r[space(35)]your description.%r[ljust(=mood,35)]Clears the temporary mood setting.%r[ljust(=moodcheck,35)]Shows the text of the current mood setting.
&HELP_CONFIG RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Configuration)%r%rThe descer can be configured a number of ways. Currently, that number is two. If you think of any more configurations you'd like added, mail me. :)%r%r[ljust(Config Option,20)][ljust(Default,10)][ljust(Current,10)]Description%r[ljust(=============,20)][ljust(=======,10)][ljust(=======,10)]===========%r[ljust(pfix,20)][ljust(\(none\),10)][ljust(v(pfix),10)]The prefix for each form's desc, as%r[space(40)]shown in your @desc.%r[ljust(suffix,20)][ljust(\(none\),10)][ljust(v(postfix),10)]The suffix for each form's desc, as%r[space(40)]shown in your @desc.%r%rTo adjust these values, use the command '=config <option>=<value>', where <value> is what you wish to change the <option> to. Using the escape (\\ or %%) character is recommended if you use any %%-substitutions within the <value>.%r%rTo restore the defaults, type '=config default'.%r%rTo see how to add and remove VALID attributes, type '=help valid'.
&HELP_COPY RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =copy)%r%r=copy <old>=<new>%r=copy <old>/<attribute>=<new>/<attribute>%r%rThis command allows you to copy and rename forms. The first command copies <old> form and all its attributes to <new> form. The second command copies just one <attribute> from <old> into <new>'s <attribute>. Note that if you're renaming a form, just =copy the form to its new name, and =rem the old form name.
&HELP_DESC RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =desc)%r%r=desc <form>/<attribute>=<text>%r%rThis is the command to enter your description text, and other text. <form> is the name (not @name) of the form you're storing descriptions under. <attribute> is any one of the Valid attributes ([u(valid)] msg<x>), and you enter one at a time. <text> is, of course, the text to enter. If your communications program does not allow you to enter more than a certain amount of text at one time, use '=edit' to add more text.%r%rEntering '(blank)' for an attribute will clear (erase) that attribute when you change into that form.%r%rSee also: '=help edit'.
&HELP_EDIT RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =edit)%r%r=edit <form>/<attribute>=<old>/<new>%r=edit <form>/<attribute>=^/<text>%r=edit <form>/<attribute>=$/<text>%r%rThis command works very much like @edit. <form> is the name of the form you want to edit. <attribute> is any one of the Valid attributes that contain text already. <old> is the text to replace, and <new> is the replacement text. The second and third form of the command prepend and append <text> to the selected attribute, respectively.
&HELP_FORM RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =form)%r%r=form<x> <form1> <form2> <formN...>%r=form <form1> <form2> <formN...>%r%rThis command is an alias for '=ch'. See '=help ch' for details.
&HELP_LIST RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =list)%r%r=list%r=list <form>%r=list <form>/<attribute>%r=list/<attribute>%r=listall/<attribute>%r%rThis command allows you to review and list your descer's forms. The first command simply lists which forms you have. The second shows all attributes of the named <form>. The third shows the named <attribute> in <form> only. The fourth command shows a two-column list of all forms that contain text for the named <attribute>, along with the text in <attribute>. The fifth command does the same as the fourth, but shows all forms in the two-column format, not just forms that contain text for the <attribute>.
&HELP_MOOD RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =mood)%r%r=mood <text>%r=mood%r=moodcheck%r%rThis command sets your temporary 'mood' setting. The <text> shows up at the very end of your description, and remains until you remove it, no matter how many times you change forms. The second command clears the temporary 'mood' setting from your description. The third command shows you what text is currently in for the 'mood' (useful for @aconnects).
&HELP_MSG RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =msg)%r%r=msg<x> <form>%r%rThis command works much like =ch, except that this command will emit MSG<x> of <form>, without actually changing you into that form. This is useful for forms that have several different stages of change messages.%r%rSee Also: '=help ch'.
&HELP_OFF RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =off)%r%r=off<x> <form1> <form2> <formN...>%r=off <form1> <form2> <formN...>%r%rThis command is used to remove a form or forms from your current desc. Like =ch, the <x> is the MSG<x> for the form that you wish to have emitted. If you do not wish to have a change message emitted, use the second command for a silent change. You can remove more than one form at a time with this command.%r%rSee Also: '=help on', '=help ch'.
&HELP_ON RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =on)%r%r=on<x> <form1> <form2> <formN...>%r=on <form1> <form2> <formN...>%r%rThis command is very similar to =ch. The difference is, =on will add <form>'s description to the end of your current description, preserving what other forms you're already changed into. Like =ch, the <x> is the MSG<x> for the form that you wish to have emitted. If you do not wish to have a change message emitted, use the second command for a silent change. You can add on more than one form at a time with this command.%r%rSee Also: '=help ch', '=help off'.
&HELP_REM RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =rem)%r%r=rem <form>%r=rem <form>/<attribute>%r%rThis command allows you to delete forms and portions of forms from your descer. The first command deletes all attributes for <form>. The second command deletes the named <attribute> in <form> only. Note that only one form may be deleted at one time.
&HELP_STATUS RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =status)%r%r=status%r%rThis command shows your descer's current status; that is, what forms are currently in your desc.
&HELP_STORE RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Command: =store)%r%r=store <form>%r=store/s <form>%r%rThis command stores the composite of your current form list as a new form. Note that it will overwrite an existing <form>, if so named. The first form of this command will store the current descs of each form (including mood) in your current form list under <form>'s desc, and will also store each VALID attribute for that <form>, including your current name. (Consider this a snapshot of your current descriptive state.) The second form of this command stores a pointer to the descs of each form in your current form list under <form>, but does not store other attributes such as name, sex, etc. (Consider this a shortcut to your current descriptive state.)%r%rNote that with the second form of this command, the form will change if any of the component forms you are using are altered or deleted (which provides a convenient way to make edits to the overall form(s) associated with the component forms), while with the first form of this command the form will not change regardless of changes or deletions to other forms.
&HELP_TROUBLESHOOTING RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Troubleshooting Guide%r%rThe most common problems people have come to me with are caused by imperfect setup of the descer. The instructions for setting up the descer are contained in the @desc of this object. If you are having trouble, type: 'look [name(me)]'. If you see something you wrote, it may be that you haven't seen the setup instructions. The setup instructions are as follows:%rFirst, type:%b%b@set [num(me)]=INHERIT. Next, type:%b%b@set [num(me)]=COMMANDS. Then, type:%b%b=init descer. This will fix most problems.%r%rPROBLEM: I changed forms, but when I look at myself I haven't changed.%r%rSOLUTION: See above setup instructions. Change to the form again. Use '=list' to make sure you have a DESC set for that form. If all else fails, mail me.%r%rPROBLEM: My name/alias won't change to what I set in the NAME/ALIAS attribute for that form.%r%rSOLUTION: Try '@name me=<whatever you're trying to name/alias yourself>'. It may be an invalid name, or the name may be in use. (If you can't do it, the descer can't!) In general, avoid special characters like ` ' ! @ # /, etc.%r%r[center(---> Continued in '=help troubleshooting2' <---,78)]
&HELP_TROUBLESHOOTING2 RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Troubleshooting Guide (continued)%r%rPROBLEM: I used +margins and now my @desc never changes.%r%rSOLUTION: +margins doesn't notice descers (as with any other command that does something to your @desc directly). If you insist on using +margins, use it like so:%r+margins [num(me)]/<form>_desc to [num(me)]/<form>_desc=<top>,<bottom>,<left>,<right>%rIf your MUSH doesn't have +margins or this kind of command, don't worry about this problem. ;)%r%rAs a final note, please please please be considerate of me when you come to me with problems. I -am- glad to be able to help, but I -don't- appreciate being paged frantically when I'm in the middle of RP. Unless it's critical, use +mail or email. And please, describe your problem well, including exactly what you type, and exactly what the output produces (including error messages). Thanks muchly. :)
&HELP_UPDATE RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (Update)%r%rTo access the most recent version of the RinaDescer, visit my MUSH page at http://www.pobox.com/~rina (this also contains other MUSH code). %r%rRinaDescer version 3.0e (8-28-2000) revision notes%r%r* Added '=store/s' to store 'shortcut' to composite descs. (Thanks to Arianne@AmberMUSH)%r* Fixed minor bug in '=store' command.%r%rRinaDescer version 3.0d (7-11-1999) revision notes%r%r* Bug fixed when trying to delete more than one form at one time. (Thanks to Stormsong)%r* Fixed bug in the '=desc' command that would allow badly-named attributes. Now forces user entered data of form '=desc rina demon/desc=blah' or '=desc rina_demon/desc=blah' to conform to '=desc rina-demon/desc=blah'.%r* Minor changes to help text.%r%r(This version should be fully compatible with TinyMUSH 2.2.x and TinyMUX, though I have not tested it thoroughly on MUX. On non-hacked server versions of TinyMUSH, it should work perfectly.)
&HELP_USE RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Tutorial and Detailed Explanation (page 1)%r%rLet's start with something simple. We'll make a form called 'Example' and try out different options with it.%r%rFirst, we'll type:%r%r=desc example/desc=This is the example description.%r%rThis inputs the basic desc of the form 'Example' into the descer. We can try entering other attributes, such as name, alias, sex, etc, as well. Note that if you leave an attribute field blank, it doesn't change what's already set on you. So if you don't have a SEX attribute for the form 'Example', it simply won't change your current SEX when you change into the example form. If there _is_ a SEX attribute for the form 'Example', it will automatically change it when you change to the 'Example' form. Read on for instructions on changing forms.%r%r[center(---> Continued in '=help use2' <---,78)]
&HELP_USE2 RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Tutorial & Detailed Explanation (page 2)%r%rA few notes on descs and the =desc command:%r%r* Entering '(blank)' for an attribute will clear (erase) the attribute when you change forms. It will be listed (by =list) as (blank).%r%r* You should use the escape character (\\ or \%) to references other attributes, and substitutions within descs. For example, to get a line break, for paragraphs, in a desc, type the following:%r%b%b=desc example/desc=This is the example description.\\\%rIsn't it swell?%r%r* Sometimes, for things like +finger information, you may have to double-escape, like so:%r%b%b=desc example/email=rina@pobox.com\\\%\\\%rQuote: "It's better to be quotable than to be honest." -- Tom Stoppard%r%r* You can easily reference attributes on other objects in the attributes you set on each form. For instance, say you have some text stored on object #1111, in an attribute called 'hair_color', which you want to include in your 'human' form (note the placement of the escape character):%r%b%b=desc human/desc=She has black eyes and \\\[\u(#1111/hair_color)\] hair.%r%r[center(---> Continued in '=help use3' <--,78)]
&HELP_USE3 RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Tutorial and Detailed Explanation (page 3)%r%rTo change forms, you should use the '=ch' command (or the '=form' command), after first setting a msg<x> attribute, like so:%r%r=desc example/msg1=[name(owner(me))] shows how to use this descer.%r%rThis inputs the attribute 'msg1' to the form 'Example'. Now you're ready to change forms. Type:%b%b'=ch1 example'.%r%rYou should see:%r%r%b%b[name(owner(me))] shows how to use this descer.%r%r(If you don't see that message, check to make sure you typed the command correctly, and then check '=help troubleshooting'.)%r%rSay you wanted to switch forms without the @emit. Type:%b%b'=ch example'%r%rYou should see:%r%r%b%bDone!%r[center(---> Continued in '=help use4' <---,78)]
&HELP_USE4 RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Tutorial and Detailed Explanation (page 4)%r%rYou can also change to more than one form at a time. Say you have a basic body description and you wish to have several sets of clothes. To change to the form with the first set of clothes, for example, you would type:%r%r=ch1 body clothes1%r%rIf you have a MSG1 for 'body', it will be shown, and if you have a change message for 'clothes1', it will be shown, otherwise you will change silently. The order, in your description, is the same as the order you type the '=ch' command in; so in this case, the 'body' desc would come first, then the 'clothes1' desc. You can change into any number of forms this way.%r%r'=on<x> <form>' and '=off<x> <form>' add or remove single or multiple form descs. '=on' will add to the end of the current desc. Again, for a silent change, use '=on <form>' or '=off <form>'. This is useful for clothing changes: if you have a form called 'clothes1', just set the desc as the description of the clothing, and MSG1 to the equivalent of '[name(owner(me))] removes %p clothing.'%r%r[center(--> Continued in '=help use5' <--,78)]
&HELP_USE5 RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Tutorial and Detailed Explanation (page 5)%r%rThe 'action-list' is for those commands which you want to trigger when you change to a certain form. Think of it as a macro. For instance, say you changed to an 'unconscious' form, and wanted to reflect that anyone could pick you up, since you're unresisting. You would do this:%r%r=desc unconscious/action=@unlock me%r%rWhatever is contained in the 'action' attribute is executed _by you_ when you change forms. This is also handy for +commands. Action lists can have multiple commands, also. For instance:%r%r=desc unconscious/action=@unlock me;page [name(owner(me))]=I'm unconscious, you can pick me up.%r%r[center(--> Continued in '=help use6' <--,78)]
&HELP_USE6 RinaDescer v3.0 parent -- 'look' at me!=RinaDescer Tutorial and Detailed Explanation (page 6)%r%rAs for the other attributes you set for each form, the following should be self-explanatory: Name, Alias, Sex.%r%rThe 'note' attribute is just a note to yourself, which you (and you only) see when you switch to that form.%r%r%rPlease also see '=help update' for information on how to access WWW information on this descer (including, in time perhaps, more detailed help).
&HELP_VALID RinaDescer v3.0 parent -- 'look' at me!=RinaDescer help: (VALID attribute configuration)%r%rThe descer has a list of attribute it considers valid attributes, those that can be entered as text under each form. There are a number of predetermined ones ([v(valid1)]) as well as ones configurable for each MUSH and for each user. Any VALID attributes configured for the parent descer will be passed on to each descer that uses the code. In addition, each individual descer can add additional valid attributes.%r%rCurrently, your descer's additional valid attributes are: ([v(valid2)])%r%rCommands:%r'=config/valid add=<name of attribute>' Adds the named attribute to the VALID list.%r'=config/valid remove=<name of attribute>' Removes the named attribute from the VALID list.
&LISTALL RinaDescer v3.0 parent -- 'look' at me!=@switch match(v(form_list),%0)=0,{@pemit %1=No entry for "%0".},{@pemit %1=Form "%0":%r[switch(v(%0_desc),,,%rDESC:%r[u(listeach,%0,desc)]%r)][switch(v(%0_name),,,%rNAME: [u(listeach,%0,name)])][switch(v(%0_alias),,,%b%b%bALIAS: [u(listeach,%0,alias)])][switch(v(%0_sex),,,%b%b%bSEX: [u(listeach,%0,sex)])][switch(v(%0_note),,,%rNOTE: [u(listeach,%0,note)])][switch(v(%0_action),,,%rACTION: [v(%0_action)])][iter(v(valid2),[switch(v(%0_##),,,%r[ucstr(##)]: [u(listeach,%0,##)])])][iter(sort(lattr(me/%0_msg*)),%r[capstr(rest(##,_))]:%r[v(##)])]}
&LISTEACH RinaDescer v3.0 parent -- 'look' at me!=[switch(words(v(%0_%1)),0,(blank),[v(%0_%1)])]
&LISTONE RinaDescer v3.0 parent -- 'look' at me!=@pemit %2=[switch(v(%0_%1),,{No entry for %0's "%1".},{[ucstr(%0)]/[ucstr(%1)]: [u(listeach,%0,%1)]})]
&VALID RinaDescer v3.0 parent -- 'look' at me!=[setunion(v(valid1),v(valid2))]
&VALID1 RinaDescer v3.0 parent -- 'look' at me!=action alias desc name note sex
@set RinaDescer v3.0 parent -- 'look' at me!/CHANGE = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/CONFIGS = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/CUR_STATUS = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/DELETE1 = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/DELETEALL = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/EXIST = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/FN-LIST2COL = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/FN-ONLY = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_CH = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_CMDS = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_COMMAND_LIST = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_CONFIG = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_COPY = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_DESC = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_EDIT = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_FORM = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_LIST = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_MOOD = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_MSG = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_OFF = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_ON = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_REM = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_STATUS = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_STORE = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_TROUBLESHOOTING =no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_TROUBLESHOOTING2 =no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_UPDATE = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_USE = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_USE2 = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_USE3 = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_USE4 = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_USE5 = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_USE6 = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/HELP_VALID = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/LISTALL = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/LISTEACH = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/LISTONE = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/VALID = no_command
@set RinaDescer v3.0 parent -- 'look' at me!/VALID1 = no_command
@set RinaDescer v3.0 parent -- 'look' at me!=VISUAL
@set RinaDescer v3.0 parent -- 'look' at me!=PARENT_OK
@set RinaDescer v3.0 parent -- 'look' at me!=HALTED
@set RinaDescer v3.0 parent -- 'look' at me!=SAFE
@pemit me=RinaDescer v3.0e finished installing.