This is the NOTES file for TinyMUSH 2.0. Changes from TinyMUSH 1.0: ------------------------- This section lists the commands, attributes, and flags that are different between TinyMUSH version 1 (as described in Croaker's MUSH Manual) and TinyMUSH 2.0. There are *many* new commands for both players and wizards, several new flags and functions, and a few new attributes. With the additon of a runtime configuration file, the game becomes much more configurable, eliminating in most cases the need to recompile in order to change command costs, permissions, and other global parameters. Players New Commands @decompile <thing> Outputs the sequence of commands needed to re-create <thing>. @doing <text> Sets your doing string that appears in the WHO report. @dolist <list>=<command-list> Executes <command-list> once for each item in the space-separated <list>, substituting the characters ## for the item from <list>. @drain <object> Removes any commands waiting on <object> as a semaphore without executing them. @emit <text> Sends <text> to everyone in the current room withoug prefixing your character name. @femit <object>=<text> Forces <object> to emit <text>, regardless of the setting of INHERIT bits. @fpose <object>=<text> Forces <object> to pose <text>, regardless of the setting of INHERIT bits. @fsay <object>=<text> Forces <object> to say <text>, regardless of the setting of INHERIT bits. @last <player> Tells the time and hostname of your last few connections to the game, as well as info about recent failed connect attempts. @list <arg> Lists information from the internal tables of the MUSH. If entered without arguments, tells you the things you can list. attributes - Predefined attributes. commands - Built-in commands. costs - How much various commands and actions cost. default_flags - The flags new objects get created with. flags - The flags an object can have. functions - Built-in functions, like ADD() or NEXT(). options - Various internal options and limits. switches - Command switches available on predefined commands. @listmotd Displays the message-of-the-day again. @mvattr <object>=<from>,<to1>[,<to2>]... Copies an attribute to one or more new attributes on the same object, and then deletes the original attribute. @notify <object> [= <count>] Runs the first <count> commands that are waiting on <object> as a semaphore (default 1). @oemit <player> = <message> Emits <message> to everyone in the current room except for <thing>. @pemit <player> = <message> Emits <message> just to <player>. use <object> Triggers the USE, OUSE, and AUSE attributes on <object>. version Displays the version of MUSH currently running, along with when it was built. LOGOUT Disconnect from your character without breaking the net connection. You may the log back in as yourself or someone else. SESSION Tells you how many characters you have sent and received from the MUSH. Changes to Existing Commands @chown <obj>[/<attrib>] [=<who>] You can now @chown things to 'me', as well as leave off the <who> entirely (in which case it defaults to the player doing the @chown). You may also @chown attributes of objects (to yourself if you own the object, and to the owner of the object if you own the attribute but not the object. @clone It is possible to clone VISUAL objects owned by others. The object number of the new object is reported. /inherit switch to retain an INHERIT bit on the new object. @create The object number of the new object is reported. @dig You can create a link back to your current room (if it is LINK_OK) Syntax: @dig <name>=<out-exitlist>,<back-exitlist> @edit If '^' is specified as the 'from' string, then the 'to' string is added to the beginning of the attribute. If '$' is specified as the 'from' string, the 'to' string is added to the end. You can specify a wildcarded attribute name, and @edit will apply the changes to every attribute that matches. @entrances <object> You can specify the object to check. The command also gives a little more information about other objects that link to the object being checked. @halt <object> You can now halt specific objects. @lock <object>/<attrib> Locks <attrib> on <object>, so that it doesn't change ownership when the object is @chowned. Locked attributes are also not checked for $-commands. @open <direction-list> [= <room>[, <return-directionlist>]] If <return-directionlist> is specified, make an exit back to the original room if possible. @ps[/<switches>] [<object>] Lists commands on the queue for everything you own, or for just <object>. @ps/long also displays the enactor and the arguments, @ps/summary just displays a count of the number of commands in the queue. @search [<player>] [<key>=<value>] New key: eval. This key evaluates <value> for each object, replacing ## with the object being checked. Objects that cause true (nonzero) evaluations are listed. @set <object>=<attr>:<value> If <attr> does not exist, it is created as a user-named attribute. @set <object>/<attr>=[!]no_command Enables or disables checking for $-commands on <object>'s <attr>. @sweep Now lists whether objects are listening or looking for commands. DIsplays more detailed information about what objects are listening for which events. New switches to only check for objects listenening for certain events: /commands /connected /listeners /players. New switches for selecting where to @sweep: /here /inventory @switch[/<switches>] <target> = <val1>,<cmd1>[,<val2>,<cmd2>]...[,<dflt>] New switch /first: causes only the first match to be executed, instead of all matches. @unlock <object>/<attrib> Unlocks <attrib> on <object>, so that it will change ownership when the object is @chowned. Also allows the attribute to be checked for $-commands, except if you don't own the object. @wait <object>[/<secs>] = <command> Waits on <object> as a semaphore. <command> will not be executed until <object> has been notified with a @notify command. If <secs> is specified, the command will be run when <object> is notified or after <secs> seconds pass, whichever comes first. examine <object>[/<attribute>] If yoy specify the optional attribute, only attributes whose names match (after processing wildcards) are listed. WHO <prefix> If <prefix> is specified, only players who match it are listed. WHO also displays the doing string for connected players. New Flags unfindable(U) Prevents players from being located by @whereis or the loc() funciton. jump_ok(J) Indicates that anyone may @tel there. LINK_OK and ABODEused to control this functionality. halted(h) If set, the object may not run commands or have attributes triggered. quiet(Q) Prevents 'Set.', 'Triggered.', etc. messages from appearing. visual(V) Lets anyone examine the object and see all of its attributes. verbose(v) Tells you every command that the object runs as it runs. nospoof(N) Tells you who really is saying/posing/emitting things. transparent(t) If set on an exit, shows you the description of what is on the other side when you look at it. inherit(i) Lets the object @force you and your other INHERIT objects. If set on a player, makes all of that player's objects operate as if they were set INHERIT. Changes to existing flags haven(H) No longer prevents commands from running. abode(A) No longer gives the right to @teleport in. link_ok(L) No longer gives the right to @teleport in. New Functions AFTER(s1, s2) Return portion of s1 that follows s2. AND(x, y) AND two logical values. BEFORE(s1, s2) Return portion of s1 that comes before s2. CAPSTR(str) Capitalize the first letter. CAT(s1, s2) Concatenate two strings. COMP(s1, s2) Case-sensitive string compare. DELETE(str, startchar, len) Remove characters from string. DIST2D(x1, y1, x2, y2) Distance in two dimensions. DIST3D(x1, y1, z1,x2, y2, z2) Distance in three dimensions. ELOCK(lockobj, checkobj) Does checkobj pass the lock on lockobj? ESCAPE(str) Insert a \ before characters the parser treats specially. EQ(n1, n2) Numeric equality test. FLAGS(obj) List of flags set on obj. GT(n1, n2) Numeric greater than test. GTE(n1, n2) Numeric greater than or equal test. HASFLAG(obj, flag) Does object have flag set? LATTR(obj) List of attributes for obj. LCON(obj) Contents list for obj. LCSTR(str) Convert to lowercase. LNUM(count) Generate a list of numbers from 0 to count-1. LOCK(obj) Text of lock for obj. LT(n1, n2) Numeric less than test. LTE(n1, n2) Numeric less than or equal test. LWHO() List of logged-in users. MONEY(obj) Value of obj. MUDNAME() Return the name of the mud. NEARBY(obj1, obj2) Are they near each other? NEQ(n1, n2) Numeric not equals test. NOT(n1) Logical NOT. OBJ(obj) Objective pronoun for obj. OR(n1, n2) Logical OR. POSS(obj) Posessive pronoun for obj. REVERSE(str) Reverses the characters in str. REVWORDS(str) Reverses the order of the words in str. ROOM(obj) Return the outermost room that obj is in (not any intermediate containing objects or players). SECS() Seconds since 00:00 1/1/1970 SECURE(str) Remove characters that the parser treats specially. STARTTIME() ASCII time that the MUSH was started. SUBJ(obj) Subjective pronoun for obj. TYPE(obj) Type of object (ie player, room, exit, thing) UCSTR(str) Convert to uppercase VERSION() Version of MUSH that is running. WORDPOS(string, pos) Which word is character pos in? XOR(n1, n2) Logical XOR. New and Changed Attributes aconnect Run when you connect. adisconnect Run when you disconnect. %0 is the reason for disconnect. aenter, enter, oenter Run in a place right after someone enters it. oxenter Message sent to others in the place the arriving object has left. aleave, leave, oleave Run in a place right before someone leaves it. oxleave Message sent to others in the place the leaving object goes. alias Another name for the object. Right now, just a comment. amove, move, omove Run on the moving object right after it moves ause, use, ouse Triggered when someone 'use's the object. Wizards New Commands @apply_marked <command> Run command for each marked object @chownall <old> = <new> @chown all objects owned by <old> to <new>. @disable <flag> Turns off internal flags, such as logins, building, command queueing. @enable <flag> Turns on internal flags, such as logins, building, command queueing. @kick <count> Immediately run <count> commands from the player queue. @list <choice> Lists all kinds of neat and useful (sometimes only for debugging) stuff. @list_file <file> List one of the standard message files. @listmotd Lists messages-of-the-day. @mark[/<switches>] [<player>] <type>=<value> Same syntax as @search, except it sets or clears the marked bit of selected objects. @mark_all[/<switches>] Set or clear the mark bits on all objects. @motd[/<switch>] <message> Sets one of the messages-of-the-day. @note <message> Makes a note in the log. @readcache Rereads changed text files and indexes into memory. @timewarp[/<switch>] Warps time for the wait queue and/or periodic events such as database dumping, RWHO data updating, etc. slay <obj> Kill <obj> without paying insurance. wizhelp Display help on wizard commands and topics. DOING Shows WHO output as the players see it. (including @doing info) SESSION Displays the number of characters connected players have sent and had sent to them. Useful for finding network problems. Changes to Existing Commands @chown[/<switches>] <object> /preserve switch for preserving the original owner in the clone. @ps[/<switches>] <object> By default you see your own queue. Use /all to see the entire queue. @toad <victim> [=<recipient>] You can now specify who gets ownership of the victim's (halted) objects. @wall[/<switches>] <message> Several new switches that do useful things. @wizwall Renamed to @wall/wiz WHO Shows players' current location, number of commands typed, and host from which they connected. New Flags gagged(g) Prevents the player from saying, emoting, etc. slave(s) Prevents the player from doing things that would change the database. marked(m) A temporary flag used by @mark, @mark_all, and @apply_marked. suspect(u) Notify connected wizards when this player connects, disconnects, or does any of a few other interesting things. immortal(i) Prevents the object from being killed. New Attributes allowance Sets a daily allowance different from the default. comment A player-invisible attribute intended for notes about the player. timeout Idle timeout for the player if different from the default. Game Maintainers New Commands @admin <directive> = <value> Change configuration directive at runtime. @attribute[/<switch>] <attr> [= <value>] Change access to, rename, or delete user-named attributes. @fixdb[/<switch>] <obj> = <value> Manually repair damage to database. @rwho[/<switch>] Starts or stops RWHO information transmission. General: The parser has been rewritten to close some security holes and fix some long-outstanding bugs. As a result, some things that worked before will not work any more, but most of these 'features' were not documented in the MUSH manual. - Delimiter nesting is both more reliable and stricter. You now need to include a closing ) or ], previously you could sometimes get away with omitting them. - You can now nest uses of the [ and ] delimiters. - The \ character is the escape character, and it can be used to escape characters treated specially by the parser, such as delimiters and the comma character. To get a single \ in a string, use \\. - The construct '$exec *:%0' does not work any more. Use something like '$exec *:@force me=%0' instead. Note that this gives anyone near the object access to your objects and is poor programming practice. - Note that the { and } delimiters do not defer evaluation, but are used to group commands and arguments together, preventing a ; or , from ending the command or argument. Players may define their own attributes on objects in addition to the predefined attributes. These attributes are called user-named attributes. It is possible for #1 to globally change the access to particular user-named attributes that are to be used for special purposes (such as making Level or Hitpoints only settable by wizards on a mush with a built-in combat system). Attributes may be owned independently of objects. By default the owner of an object owns all the attributes and the ownership of attributes changes when the object is @chowned, but individual attributes can be locked against the ownership change. You can only change an attribute if you own both the attribute and the object it is stored on. Attribute locks have changed somewhat. You can now lock against any attribute, and the object testing the lock and all of its contents are checked against the lock value, and the lock succeeds if any of the objects checked passes the lock. In order for the lock to succeed, the locked object must have the same owner as the attribute (or the attribute must be a public attribute such as sex), and the value of the attribute must match the pattern set in the lock. Players can use objects they own as semaphores. One use of semaphores is to implement mutual exclusion locks, so as to prevent a particular part of an object's code from being executed for more than one player at the same time. You can set up one room to contain global exits and $-commands that are available from anywhere on the MUSH. This room is called the Master Room. This room should be owned by a wizard, set FLOATING, have no entrances (except perhaps one locked to current wizards), and not be JUMP_OK, LINK_OK, or ABODE. A good idea to improve security further is to set the room INHERIT and have its AENTER check that the owner of the arriving object is a wizard, and if not @tel the object somewhere else. The LEAVE and ENTER family of attributes are now run whenever you leave or enter any location, not just an object. Also, the MOVE family of attributes are run on you whenever you move from one place to another. Access to commands and attributes may be changed from the configuration file or with the @admin command. Access to individual user-named attributes can be changed with the @attribute command. Configuration Directives: ------------------------ This section lists all the configuration directives that may be included in the .conf file that mush reads when it starts up. Directives which affect similar things are grouped together under one heading. Most of these directives can be set while the game is running by player #1 with the @admin command, the ones that cannot are usually ones that are only used during startup or those that contain names of files to be read from the system that the mush is being run from. Internal/debugging abort_on_bug - Abort on internal inconsistencies (not implemented) log - Specify types of events to log. log_options - Specify types of information to be included about players causing log messages. Configuration control config_access - Change runtime access to configuration directives include - Read configuration directives from file Compression control compress_program - Program to compress struct database if database compression is enabled compression - Should the struct database be compressed when written/ uncompressed when read? internal_compress_string - Should the internal bigram-based string compression system be used? space_compress - Should multiple spaces be compressed to single spaces? uncompress_program - Program to uncompress struct database if database compression is enabled Database files crash_database - Where a copy of the struct database gets written when the game panics (not implemented) gdbm_database - Name of the gdbm file to use. initial_size - Number of objects to allocate for the struct portion of the database when creating a new database. input_database - Read the struct database from this file output_database - Write the struct database to this file when dumping. Database dumping dump_interval - Time between automatic database dumps. dump_message - Message sent to all connected users when a dump is performed. dump_offset - How long after startup is the first automatic dump performed? fork_dump - Should dumps be performed by a fork()'ed process? fork_vfork - Should the vfork() call be used instead of fork()? garbage_chunk - Garbage-collect this many objects each second (obsolete). gdbm_cache_size - Size of the gdbm cacke in kbytes. Text files and Messages badsite_file - A file containing what someone who connects from a forbidden site sees connect_file - A file containing what someone sees when they open a connection from a site that doesn't enforce registration. connect_reg_file - A file containing what someone sees when they open a connection from a site that does enforce registration. down_file - A file containing what someone sees when they try to login but fail because logins are disabled. down_motd_message - A wizard-settable messages that players see when they try to login but fail because logins are disabled. guest_file - File shown to people connecting to the guest character in place of the motd_file. help_file - The name of the file containing the help text. help_index - The name of the file containing the help index. motd_file - A file containing what players see right after they connect to their characters. motd_message - A wizard-settable message that players see right after the motd_file. news_file - The name of the file containing the news text. news_index - The name of the file containing the news index. newuser_file - A file containing information shown to players the first time they connect to their characters in place of motd_file. quit_file - File containing what you see when you QUIT. register_create_file - FIle containing what players see when they try to use the 'create' command from a site for which registration is enforced. wizard_help_file - The name of the file containing the wizard help text. wizard_help_index - The name of the file containing the wizard help index. wizard_motd_file - A file containing what wizards see when they connect to their characters. wizard_motd_message - A wizard-settable message that only wizards see when they connect to their characters. Network control and monitoring command_quota_increment - Add this to connected players' command quota every timeslice command_quota_max - Don't increment command quota over this value check_interval - Interval between idle checks check_offset - When to perform first idle check conn_timeout - Allow players this long to connect before dropping net connection forbid_site - Disallow connects from a host, subnet, or network. hostnames - Does the wizard WHO report use hostnames instead of IP addresses when possible? idle_interval - How long between checks for idle users. idle_timeout - Players idle longer then this get the @boot. output_limit - The max number of characters a player may have queued for output. permit_site - Allow connections from this host or network, and allow new characters to be created with the 'create' command. port - Network port to listen on for new connections. register_site - Allow connections from this host or network, but don't allow new characters to be created with the 'create' command. retry_limit - Close the net connection after this many failed login attempts. suspect_site - Notify connected wizards of any connects and disconnects from this host or network. timeslice - How often does the command quota for connected players get updated? trust_site - Don't notify connected wizards of connects and disconnects from this host or network. Undoes suspect_site. Command queue management player_qeue_limit - How many commands may a player have in the queue at once? queue_active_chunk - Number of commands to run from the queue when there has been network activity. queue_idle_chunk - Number of commands to run from the queue when there has been no network activity. Defining new commands and aliases alias - Create an alias for a command or command/switch combination attr_alias - Create an alias for a predefined attribute flag_alias - Define an alias for a flag name. logout_cmd_alias - Define an alias for a logged-out command. master_room - Room containing global default exits and $-commands. Access to commands, switches, etc. access - Change access to commands and switches attr_access - Change access to an attribute attr_cmd_access - Change access to all attribute setting commands at once list_access - Change access to items under the @list command. logout_cmd_access - Change access to logged-out commands (like WHO, QUIT) power_access - Change access to powers/capabilities. (Not implemented) user_attr_access - Change default access for new user attributes. Player limits/controls/capabilities guest_char_num - db number of the Guest char. The Guest character is typically not allowed to do things like create objects or change his name or password. match_own_commands - Should objects other than players check themselves for $-commands? pemit_any_object - Can players @pemit to objects they don't own that are far away? pemit_far_players - Can players @pemit to players that aren't nearby? player_listen - Should @listen/@ahear be obeyed on players? player_match_own_commands - Do players check for $-commands on themselves? recycling - Is object destruction allowed. robot_speech - Are robot players allowed to speak in public areas? sweep_dark - Can players @sweep dark rooms they don't own? secure_homes - Should HOME be validated before using? Default values default_home - Where objects go when they go home and the home location is invalid exit_flags - What flags are new exits created with? player_flags - What flags are new players created with? player_starting_home - What is HOME of new players set to? player_starting_room - Where do new players start out? robot_flags - What flags are new robots created with? room_flags - What flags are new rooms created with? switch_default_all - Does @switch perform all matches by default? thing_flags - What flags are new things created with? Output formatting and options dark_sleepers - Are disconnected players dark? examine_flags - Does EXAMINE list flag names? examine_public_attrs - Does EXAMINE show public attributes by default? money_name_singluar - The name of one coin (ie. penny, zorkmid) money_name_plural - The name of many coins (ie. pennies, zorkmids) public_flags - Are the flags of an object readable by anyone with flags()? quiet_look - Does the look command also show attributes? quiet_whisper - Do others in the room notice you whispered something? read_remote_desc - Are the descriptions of distant objects readable with examine and get()? read_remote_name - Are the names of distant objects readable with examine and name()? see_owned_dark - Do you see your own DARK objects when looking? whereis_notify - Does the target of a @whereis get told you did it? Economics clone_copies_cost - Does @clone copy the cost of the cloned object? create_max_cost - The maximum cost that may be used to create an object. Using more wastes the excess. create_min_cost - The minimum cost that may be used to create an object. destroy_sacrifice - Does dropping an object in a temple @destroy it? dig_cost - How much does the @dig command cost? earn_limit - Earning more than this much money is difficult. find_money_chance - Players have a 1 in f_m_c chance of finding a penny each time they move. kill_guarantee_cost - Amount to spend on a kill command to guarantee success. kill_max_cost - Maximum amount that may be gainfully spent on a kill command. Anything over this amount is wasted. kill_min_cost - Minimum amount that may be gainfully spent on a kill command. link_cost - Cost to make a link. machine_cmd_cost - 1 in m_c_c commands run by a machine cost one penny. open_cost - The cost to create a new exit. page_cost - The cost of the page command (and @pemits to faraway players). paycheck - Players get this much money each day they connect. robot_cost - The cost of making a robot with the @robot command. sacrifice_adjust - Adjustment to sacrifice value applied after dividing the cost by sacrifice_factor. sacrifice_factor - Divide the object's cost by this (before applying sacrifice_adjust) to determine its value. starting_money - How much money do new players start out with? wait_cost - Deposit required to put a command on the queue. Building Quotas exit_quota - How much quota does it take to make an exit? player_quota - How much quota does it take to make a (robot) player. quotas - Are building quotas enforced and maintained? room_quota - How much quota does it take to dig a room. starting_quota - How much quota do new players start out with? thing_quota - How much quota does it take to create a thing? RWHO information mud_name - The name of the MUD that is sent to the RWHO server as well as reported by the mudname() function. rwho_data_port - Port to read RWHO information from in response to a local RWHO command (if configured). rwho_dump_interval - How often to transmit RWHO information to the server. rwho_host - Host to send RWHO information to. rwho_info_port - Port to write RWHO information to. rwho_password - Password sent with RWHO data. rwho_transmit - Should we transmit RWHO data?