Help Entries starting with 'C'
@cemit
- @cemit[/noisy|/silent][/noeval] <channel>=<message>
- @nscemit[/noisy|/silent][/noeval] <channel>=<message>
This command allows <message> to be directly broadcasted to the players on <channel>. No channel-prefix is prepended unless the /noisy switch is given or the noisy_cemit config option is yes and /silent is not given. If the /noeval switch is given, the <message> is not evaluated. This command is intended for use in writing extended chat systems.
@nscemit is a wizard-only version that does not include nospoof information in broadcasts.
@channel
- @channel/list [<channel-prefix>]
- @channel/what [<channel-prefix>]
- @channel/on <channel>[=<player>]
- @channel/off <channel>[=<player>]
The basic form of this command allows you to see the available channels, and join or leave a channel. You do not need to type the complete name of the channel, only as many letters as needed to make it distinct from other channels.
Wizards may add and remove other players from channels by providing a player name as a second argument.
Channels may be restricted in who can join them and/or speak on them. @channel/list will show you the channel's name, number of users, number of message since last restart, access information, and your status. See "help channel-list" for an explanation of how to read the listing.
@channel/what will show you the channel's name, access information, and a description of the channel's purpose.
More commands are provided in "help @channel2".
@channel2
- @channel/who <channel>
- @channel/hide <channel>=<yes|no>
- @channel/title <channel>=<string>
The @channel/who command shows you who is currently on a channel, if you are permitted to see it.
Some channels allow their users to hide from the @channel/who list. If you're on such a channel and are permitted to hide, you can use @channel/hide <channel>=yes to hide yourself, and @channel/hide <channel>=no to reappear.
@channel/title lets you set a title to appear before your name when you speak on the channel. If you leave the channel, your title is cleared; use @channel/gag instead (see help @channel3). You should escape any commas in your title with backslashes.
See "help @channel3" for more.
@channel3
- @channel/mute <channel>=<yes|no>
- @channel/gag <channel>=<yes|no>
- @channel/recall <channel>[=<lines>[,<startline>]]
Some channels broadcast messages when players connect or disconnect from the MUSH. If you don't want to hear those messages, use @channel/mute <channel>=yes. To resume hearing the messages, use @channel/mute <channel>=no or @channel/unmute <channel>. Leave out <channel> to mute or unmute all channels.
If you want to remain on a channel but not receive any messages on the channel, use @channel/gag <channel>=yes. To resume hearing, use @channel/gag <channel>=no (or @channel/ungag <channel>). When you disconnect, the channel will be automatically ungagged for you. Leave out <channel> to gag or ungag all channels. If the channel does not have the "open" priv, you can not speak on it while you are gagged.
@channel/recall shows you the most recent messages on the channel; the number of messages depends on how the channel is configured, but can be limited by specifying <lines> to show and a <start line> to start display from. You must be on a channel to recall from it.
See "help @channel4" for more.
@channel4
- @channel/add <channel>[=<priv>]
- @channel/delete <channel>
- @channel/desc <channel>=<desc>
- @channel/rename <channel>=<newname>
@channel/add creates a new channel. On some MUSHes, any player
can create a new channel, though there will be a cost associated
with creation (see @config chat). Possible <priv> specifications:
* "player" - players may use the channel
* "object" - objects may use the channel
* "admin" - only royalty/wizards/chat_privs may use the channel
* "wizard" - only wizards may use the channel
* "quiet" - channel will not show connection messages
* "open" - you may speak even if you aren't listening to the channel
* "hide_ok" - you may hide from the channel who list.
* "notitles" - chantitles are not displayed in channel messages.
* "nonames" - player names are not displayed in channel messages.
* "nocemit" - @cemit is prohibited on the channel.
* "interact" - Interaction rules (defined in local.c) are applied to
the channel
Specifications may be combined, space-separated. Default is determined
by the 'channel_flags' @config option, or 'player' if not set.
@channel/delete removes a channel. You must own it or be Wizard.
@channel/desc sets the channel's description, shown on @channel/what.
Descriptions are limited to 256 characters. If there are any commas
in the description, the whole string should be enclosed in {}'s.
@channel/rename is used to rename a channel.
See "help @channel5" for more. See also "help @clock".
@channel5
- @channel/priv <channel>=<newprivlevel>
- @channel/wipe <channel>
- @channel/buffer <channel>=<lines>
- @channel/decompile[/brief] <channel>
- @channel/chown <channel>=<newowner>
The "priv" switch sets the channel's access privileges to those specified. The "wipe" switch clears a channel of players without deleting it. The "buffer" switch sets the maximum number of full-length lines that the channel will buffer for @chan/recall. Many more shorter lines may actually be buffered. Setting it to 0 turns off buffering.
The "decompile" and "chown" switches can only be used by Wizards. @channel/decompile produces a decompile of matching channels. If the /brief switch is included, players on the channel aren't listed. @channel/chown allows a Wizard to change the owner of a channel.
@charges
- @charges <object>=<integer>
Allows you to limit the number of times an object can be "used". The "charges" attribute will be decreased by one each time the object's @ause is triggered, and once it reaches zero, the object cannot be used anymore.
@CHATFORMAT
- @chatformat <object>[=<message>]
The @chatformat attribute is evaluated when an object receives a channel message. The evaluated result, is displayed to the player, otherwise the default message is shown. A null result, as long as the attribute exists, shows nothing.
Registers:
%0: The 'type' of the message. It is a single character that
will always be set:
'"', ';' or ':' for say, semipose and pose, respectively.
'|' for an @cemit.
'@' for a "system" message - such as "Walker has connected."
%1: The channel name. e.g: "Public" "Admin" "Softcode"
%2: The message as typed (post-evaluation, if necessary) by the
speaker. Be warned, though - If type is '@', then %2 will
contain the entire message, and will include the name of
the speaker that caused it.
%3: The speaker name, unless channel is set NO_NAME.
%4: The speaker's channel title, unless none is set, or the
channel is NO_TITLE.
%5: The original message.
If The channel is NO_NAME, and the speaker either has no title or
the channel is also set NO_TITLE, then %3 will be "Someone"
(continued in help @chatformat2)
@CHATFORMAT2
Examples:
Walker's preferred @chatformat, which strips all ansi out, wraps every line to your width and prefixes them with <ChannelName>:
@chatformat me=<%1> [switch(%0,@,%2,edit(wrap(speak(&[if(%4,%4%b)]%3,
%0[stripansi(%2)]),sub(width(%!),add(4,strlen(%1)))),%r,%r<%1>%b))]
If you're on a system with chat_strip_quote set to "no", you might want to change the "%0%2" arg to speak() to '[switch(%0,",%2,%0%2)]'
Suppose you want it just like the old version, but anytime somebody says your name, you want it all in red:
@chatformat me=ansi(if(strmatch(%2,*[name(%!)]*),r,n),%5)
(More examples in help @chatformat3)
@CHATFORMAT3
A popular feature in clients now available in PennMUSH directly: Let's suppose you want "Public" channel chatter to all be green, "Softcode" to be blue and "Admin" to be cyan.
@chatformat me=ansi(switch(%1,Public,g,Softcode,b,Admin,c,n),%5)
Maybe you dislike players who re-@name themselves a lot:
&playernames me=#6061:Walker #7:Javelin #6388:Cheetah
@chatformat me=<%1> [switch(%0,@,%2,speak(&[if(%4,%4%b)][firstof(
after(grab(v(playernames),%#:*),:),%3)],%2))]
Or you're writing a loggerbot, and you want to convert all channel input to HTML:
@chatformat me=CHAT:%1:[edit(switch(%0,@,%2,speak(if(%4,%4%b)%3,%0%2)),
&,&,<,<,>,>,%r,<BR>,%b%b,%b )]
@chown
- @chown[/preserve] <object>=<player>
Changes the ownership of <object> to <player>. You can chown things, rooms, or exits. To chown a thing, you have to be carrying it. If you do not own an object, you can only chown it if it is CHOWN_OK. If you're not a Wizard, you can only @chown objects to yourself or to a Zone Master whose zone-lock you pass.
Normally, @chown'ing an object clears privileged flags and powers, and sets the object halt. Wizards may use @chown/preserve to chown an object, preserving these privileges and not setting the object halt. Doing this to an active object with queued commands is not recommended, and may have strange and insecure effects.
Example:
(for a room) @chown here=me
(for an object) @chown box=Soundwave
Players can't be @chowned; they always own themselves.
@chownall
- @chownall[/preserve] <player>[=<target_player>]
Transfers ownership of all the objects that the player owns to <target_player>. If the target player is not included, then all the objects are chowned to the person executing the command. This is a wizard-only command. The /preserve switch keeps privileged flags and powers instead of clearing them, and doesn't halt them.
@chzone
- @chzone <object>=<zonemaster>
- @chzone <object>=none
The first form of this command changes the ZONE of <object> to <zone master>. This puts the object on that zone and may (if the zone_control_zmp_only option is off) allow anyone who passes the zone-lock of the zone master to make changes to the object. Any kind of object can be @chzoned, and any kind of object can be used as the zone master.
The second form of this command resets the zone of <object> to *NOTHING*. Anyone can reset the zone of an object s/he owns.
If a player is @chzoned, anything s/he makes afterwards will start out with that Zone, but none of the objects that s/he presently owns will have their Zone changed. Players can @chzone themselves to a master if they own it. Otherwise, only wizards can @chzone players.
(continued in help @chzone2)
@chzone2
To see the Zone of an object, you can use either 'brief' or 'examine' to examine it. The Zone is listed on the same line as the Owner of the object.
Players can @chzone objects they own if they own the zone master or if they pass its @lock/chzone. Wizards can @chzone objects to any zone master as long as the object has a zone-lock.
Whenever an object besides a player is @chzoned to a zone master, the WIZARD, ROYALTY, and TRUST flags will be reset, as will all @power's (for security purposes). For similar reasons, it is strongly recommended that you do not @chzone admin- or wizard-owned objects to any zone that less privileged players have access to.
@chzoneall
- @chzoneall <player>=<zonemaster>
Changes the zone of all objects owned by <player> to <zone master>. If <zone object> is "none", the zone is reset to NOTHING. Only wizards may use this command.
@clock
- @clock/join <channel>[=<key>]
- @clock/speak <channel>[=<key>]
- @clock/see <channel>[=<key>]
- @clock/hide <channel>[=<key>]
- @clock/mod <channel>[=<key>]
The @clock command modifies the a lock on a chat channel if the extended chat system is in use. If no key is specified, the lock is unlocked. Evaluation locks will not work with @clock. See help @clock2 for information on using indirect locks.
The "join" lock restricts who can join the channel. The "speak" lock restricts who can speak to the channel. The "see" lock restricts who can see the channel on @channel/list The "hide" lock restricts @channel/hide if the channel is hide_ok. The "mod" lock restricts who can modify the channel. If you pass the mod lock on the channel, you can do anything short of deleting it.
When new channels are added, the mod lock is set to the creator/owner, and all other locks are unlocked.
See help @clock2 for how to use indirect locks to lock a channel to anything.
@clock2
If user-defined locks are available, you can use indirect @clocks to lock a channel to a lock of any type (including evaluation locks) on a VISUAL object. This channel can only be joined by an UNFINDABLE player:
>@clock/join unfindchannel=@#10 >@lock/user:ChanJoinLock #10=isunfind/1 >&isunfind #10=[hasflag(%#,unfindable)] >@set #10 = VISUAL
@clock Corresponding default user: lock for object
join ChanJoinLock
speak ChanSpeakLock
see ChanSeeLock
hide ChanHideLock
mod ChanModLock
You can lock multiple channels to the same object by specfiying a specific indirect lock instead of the default one:
>@clock/join onechannel=@#10/onechanneljoin >@clock/join anotherchannel=@#10/anotherchanneljoin >@lock/user:onechanneljoin #10 = 1 >@lock/user:anotherchanneljoin #10 = isunfind/1
@clone
- @clone <thing,room,orexit>[=<newname>]
- @clone/preserve <thing,room,orexit>[=<newname>]
For things, creates an exact duplicate of it and puts it in the current room. For exits, it creates an exact duplicate of that exit, except the clone's source is the current room rather than whatever the original exit's source was. For rooms, creates an exact duplicate of the room, without contents or exits. The name of the duplicate object can be provided; it defaults to the same as the name of the original object.
The thing to be cloned must be controlled by the @cloning player. The clone will be owned by the @cloning player.
If creation times are enabled, a clone will have a different creation time than the object it was cloned from, but will have the same modification time, to make tracking revisions of code easier.
A wizard may use @clone/preserve, which has the effect of preserving all the bits, powers, and warnings of the original object.
To clone a room and all its exits, use code like:
@tel [setq(0,%l)][clone(here)]; @dol lexits(%q0)=@clone ##
@command
- @command <command>
- @command/<switch> <command>
- @command/alias <command>=<newcommandname>
@command provides information about and controls the availability of other commands.
With no switches, @command shows all sorts of interesting information about how a command is parsed.
Switches include:
/disable : Disable the <command>
/off : Synonym for /disable
/enable : Enable the <command>
/on : Synonym for /enable
/alias : Creates an alias for a command.
/quiet : Don't make noisy output when doing one of the above
/add : Creates a useless command. @hook/override it.
/delete : Deletes a command added by @command/add, or aliases.
See HELP RESTRICT for more. (continued in help @command2)
@command2
@command/add and @command/delete are powerful tools in that they let you write $-commands which may or may not parse their arguments, and have the precedence of a built-in command, being checked before $-commands on objects. Only God may use these switches.
Additional switches are used in @command that only apply when used with @command/add. These switches are:
/noparse : The command does not evaluate arguments passed to it.
/eqsplit : The parser parses leftside and rightside around =
/lsargs : Comma-separated arguments on the left side are parsed.
/rsargs : In conjunction with eqsplit, the right-side arguments,
comma-separated, are parsed individually and passed
to the $-command in @hook/override.
Any command added without the /noparse switch is provided with a /noeval switch itself, so if you @command/add foo, then foo's arguments are parsed by default, but you can call foo/noeval. Note: the $-command needs to make allowances for the /noeval switch in it's matching.
Commands added with @command/add, like other standard commands, are never case-sensitive (regardless of CASE flag on the attribute).
(examples in help @command3)
@command3
Examples:
Example:
> @create Dining Machine
> &eat dining=$eat *:@remit %L=%N takes a bite of %0.
> @command/add/noeval eat
> @hook/override eat=dining machine,eat
> eat meat loaf
Walker takes a bite of meat loaf.
> eat randword(apple tomato pear)
Walker takes a bite of randword(apple tomato pear)
Example:
> &drink dining=$^drink(/noeval)? (.*)$:@remit %L=%N drinks %1.
> @set dining/drink=regexp
> @command/add drink
> @hook/override drink=dining machine,drink
> drink reverse(tea)
Walker drinks aet.
> drink/noeval reverse(tea)
Walker drinks reverse(tea).
@comment
- @comment <object>=<comment>
This is a wizard-only command which sets a COMMENT attribute on <object>. The comment can only be seen by other wizards and royalty.
@config
- @config/functions
- @config/commands
- @config/attribs
- @config/flags
- @config/list[/lowercase] [<option|option-type>]
- @config/set option=value
This command lists the MUSH configuration parameters, indicating what special things are enabled, and the cost of certain commands. Switches include:
/functions -- Lists all functions.
/commands -- Lists all commands.
/flags -- Lists all flags.
/attribs -- Lists all standard attributes.
/list -- Lists the value of a particular <option> or <option-type>
if given one; lists the option-types if not.
/set -- Wizard only, changes parameters from the mush. See
help @config parameters for available ones.
@config attribs
These options control some attribute behavior.
adestroy=<boolean>: Is the @adestroy attribute used? amail=<boolean>: Is the @amail attribute used? player_listen=<boolean>: Is @listen checked on players? player_ahear=<boolean>: Is @ahear triggered on players? room_connects=<boolean>: Are @aconnect and @adisconnect triggered on rooms? read_remote_desc=<boolean>: Can anyone remotely retrieve @descs? startups=<boolean>: Are @startup triggered at restart? empty_attrs=<boolean>: Can attributes be set to an empty string?
@config chat
These options control chat system settings.
chan_cost=<number>: How many pennies a channel costs to create.
max_channels=<number>: How many channels can exist total.
max_player_chans=<number>: How many channels can each non-admin
player create? If 0, mortals cannot create channels.
noisy_cemit=<boolean>: Is @cemit/noisy the default?
@config cmds
These options affect command behavior.
noisy_whisper=<boolean>: Does whisper default to whisper/noisy?
possessive_get=<boolean>: Does "get container's object" work?
possessive_get_d=<boolean>: Does it work on disconnected players?
link_to_object=<boolean>: Can exits have objects as their destination?
owner_queues=<boolean>: Are command queues kept per-owner, or per-object?
full_invis=<boolean>: Should say by a dark player show up as
'Someone says,'?
wiz_noaenter=<boolean>: If yes, dark players don't trigger @aenters.
really_safe=<boolean>: Does SAFE prevent @nuking?
destroy_possessions=<boolean>: When a player is destroyed, are their objects
as well?
@config cosmetic
These are cosmetic options of various sorts.
money_singular=<string>: What is one penny called?
money_plural=<string>: What are many pennies called?
player_name_spaces=<boolean>: Can player names have spaces in them?
ansi_names=<boolean>: Are names in look hilighted?
float_precision=<numbers>: How many digits after the decimal point in
floating point numbers are kept when formatting the result of a
floating point function?
comma_exit_list=<boolean>: Do exits show up like North, East, and West
or as North East West?
count_all=<boolean>: Does the count of connected players in WHO include
hidden connections for mortals?
blind_page=<boolean>: Does page default to page/blind?
Continued in help @config cosmetic2
@config cosmetic2
More cosmetic options.
page_aliases=<boolean>: Are aliases included in page listings?
For example, Foo(F) pages: Blah
flags_on_examine=<boolean>: Are flag names included when examining
objects?
ex_public_attribs=<boolean>: Show visual attributes when examining objects
you don't control?
wizwall_prefix=<string>: Prefix for @wizwall messages.
rwall_prefix=<string>: Prefix for @rwall messages.
wall_prefix=<string>: Prefix for @wall messages.
announce_connects=<boolean>: Should (dis)connects be announced to
non-MONITOR players and to channels?
chat_strip_quote=<boolean>: Does +chan "foo strip the "?
newline_one_char=<boolean>: Is strlen(%r) equal to 1?
only_ascii_in_names=<boolean>: Names are ascii-only or are extended
characters permitted?
@config costs
These options control how many pennies various things cost.
object_cost=<number>: How many pennies it costs to create an object.
exit_cost=<number>: How many pennies it costs to create an exit.
link_cost=<number>: How many pennies it costs to use @link.
room_cost=<number>: How many pennies it costs to @dig a room.
queue_cost=<number>: How many pennies it costs to queue a command.
Refunded when the command executes.
quota_cost=<number>: How much @quota goes down by for each object.
find_cost=<number>: How many pennies it costs to use @search, @find,
@entrances, and their function versions.
page_cost=<number>: How many pennies it costs to use page.
kill_default_cost=<number>: Default cost for kill.
kill_min_cost=<number>: Smallest amount of pennies for kill.
kill_bonus=<number>: What percent of the pennies spent for a successful
kill go to the victim.
@config db
These are database options.
player_start=<dbref>: What room newly created players are in.
master_room=<dbref>: The location of the master room.
ancestor_room=<dbref>: If set to a good object, this is considered a global
parent for all rooms. If -1 or a nonexistant object, then disabled.
ancestor_exit=<dbref>: As ancestor_room for exits.
ancestor_thing=<dbref>: As ancestor_room for things.
ancestor_player=<dbref>: As ancestor_room for players.
base_room=<dbref>: The starting room used to determine if other rooms
are disconnected.
default_home=<dbref>: The room to send things to when they're homeless.
exits_connect_rooms=<boolean>: Is a room with any exit at all in not
considered disconnected for FLOATING checks?
zone_control_zmp_only=<boolean>: Do we only perform control checks on ZMPs,
or do we check ZMOs and ZMRs too?
@config dump
These options affect database saves and other periodic checks.
forking_dump=<boolean>: Does the game clone itself and save in the
copy, or just pause while the save happens?
dump_message=<string>: Notification message for a database save.
dump_complete=<string>: Notification message for the end of a save.
dump_warning_1min=<string>: Notification one minute before a save.
dump_warning_5min=<string>: Notification five minutes before a save.
dump_interval=<time>: Seconds between database saves.
warn_interval=<time>: Seconds between automatic @wchecks.
purge_interval=<time>: Seconds between automatic @purges.
dbck_interval=<time>: Seconds between automatic @dbcks.
@config flags
These options set the default flags for newly-created objects and channels.
player_flags=<string>: List of flags to set on newly created players room_flags=<string>: List of flags to set on newly created rooms thing_flags=<string>: List of flags to set on newly created things exit_flags=<string>: List of flags to set on newly created exits room_flags=<string>: List of flags to set on newly created rooms channel_flags=<string>: List of flags to set on newly created channels
@config funcs
These options affect the behavior of some functions.
safer_ufun=<boolean>: Are objects stopped from evaluting attributes on
objects with more privileges than themselves?
function_side_effects=<boolean>: Are function side effects (functions which
alter the database) allowed?
@config limits
Limits and other constants.
max_dbref=<dbref>: The highest dbref an object can have. If 0,
there is no limit on database size.
max_attrs_per_obj=<number>: The maximum attributes an object can have.
max_logins=<number>: The maximum number of connected players.
max_guests=<number>: The maximum number of connected guests. If 0,
no limit. If -1, limited by the number of guest players in the db.
idle_timeout=<time>: The number of minutes a connection can be idle
before getting booted. 0 means no limit.
unconnected_idle_timeout=<time>: The number of minutes a connection can be
sitting at the login screen before getting booted. 0 means no limit.
Continued in help @config limits2
@config limits2
Limits and constants, continued.
whisper_loudness=<number>: The percentage chance of a whisper/noisy
being heard.
starting_quota=<number>: How much quota new players get.
starting_money=<number>: How many pennies new players get.
paycheck=<number>: How many pennies players get each day they log on.
max_pennies=<number>: The maximum pennies an object can have.
mail_limit=<number>: How many @mail messages someone can have.
max_depth=<number>: How deep can @parent chains can go.
player_queue_limit=<number>: The number of commands a player can have
queued at once.
queue_loss=<number>: One in <number> times, queuing a command will cost
an extra penny that doesn't get refunded.
queue_chunk=<number>: How many queued commands get executed in a row when
there's no network activity pending.
Continued in help @config limits3
@config limits3
Limits and constants, continued.
active_queue_chunk=<number>: How many queued commands get executed in a
row when there is network activity pending.
function_recursion_limit=<number>: The depth to which softcode functions
can call more functions.
function_invocation_limit=<number>: The maximum number of softcode
functions that can be called in one command.
guest_paycheck=<number>: How many pennies guests get each day.
max_guest_pennies=<number>: The maximum pennies a guest can have.
player_name_len=<number>: The maximum length of a player name.
queue_entry_cpu_time=<number>: The maximum number of milliseconds a
queue entry can take to run.
use_quota=<boolean>: Controls if quotas are used to limit the number
of objects a player can own.
Continued in help @config limits4
@config limits4
Limits and constants, continued
max_aliases=<number>: The maximum number of aliases a player can have.
keepalive_timeout=<time>: How often should an 'Are you still there?' query
be sent to connects, to stop players' routers booting idle connections?
max_parents=<number>: The maximum number of levels of parenting allowed.
call_limit=<number>: The maximum number of times the parser can be called
recursively for any one expression.
@config log
These options affect logging.
log_commands=<boolean>: Are all commands logged? log_forces=<boolean>: Are @forces of wizard objects logged?
@config net
Networking and connection-related options.
mud_name=<string>: The name of the mush for mudname() and @version and
the like.
use_dns=<boolean>: Are IP addresses resolved into hostnames?
use_ident=<boolean>: Is ident information looked up for connections?
ident_timeout=<time>: How many seconds does the mush wait before an ident
request fails?
logins=<boolean>: Are mortal logins enabled?
player_creation=<boolean>: Can CREATE be used from the login screen?
guests=<boolean>: Are guest logins allowed?
pueblo=<boolean>: Is Pueblo support turned on?
sql_platform=<string>: What kind of SQL server are we using?
("mysql" or "disabled")
sql_host=<string>: What is the hostname or ip address of the SQL server
@config parameters
Many of the mush's run-time options can be set from the game by wizards, using @config/set <option>=<new value>. Those that can be set with visible changes are listed below, grouped by category. See help @config <category> for details on each.
Attribs Chat Cmds Cosmetic Costs
Db Dump Flags Funcs Limits
Log Net Tiny
The categories and groups are the same as those used by @config/list. Values must be of the listed type for each option. They include: <number>, <dbref>, <boolean> (Yes/No), <time>, or <string>.
Options which take a <time> will accept either a number of seconds or a combination of numbers followed by 's' for seconds, 'm' for minutes or 'h' for hours, making 1h30m and 5400 equivalent.
<dbref> options can be given with or without the leading '#', so '1' and '#1' are the same.
@config tiny
Options that help control compability with TinyMUSH servers.
null_eq_zero=<boolean>: Is a null string where a number is expected
considered a 0?
tiny_booleans=<boolean>: Use Tiny-style boolean values where only
non-zero numbers are true.
tiny_trim_fun=<boolean>: Are the second and third arguments to trim()
reversed?
tiny_math=<boolean>: Is a string where a number is expected considered
a 0?
silent_pemit=<boolean>: Does @pemit default to @pemit/silent?
@conformat
- @conformat <object>[=<format>]
Replaces the usual "Contents:" or "Carrying:" format when an object is looked at, by a player-specified contents format. This is evaluated as if it were a description or other similar message on the room. The objects that the looker would normally be able to see is passed as a dbref list in %0; all contents can be acquired through 'lcon(me)'. A |-delimited list of all the unparsed object names is passed in %1 (so iter(%1,itext(0),|,%r) produces the standard list)
One could change the format to 'Contents: Object1 Object2 Object3' through '@conformat here = Contents: [iter(%0,name(##))]', for example. More complex things are, obviously, possible.
@cost
This sets the number of pennies that need to be given to an object to trigger its @pay/@opay/@apay attributes. It is evaluated, so you may use functions as well as simple integers; the amount given by the player is passed as %0.
Example:
@cost exit-machine=10
@apay exit-machine=@open %N-exit
@pay exit-machine=Your exit has been created.
give exit-machine=10
> Your exit has been created.
(The exit will also have been opened by the machine.)
@cost charity=%0
@pay charity=Thanks for your donation of %0.
@cpattr
- @cpattr[/noflagcopy] <obj>/<attr>=<obj1>[/<attr1>][,<obj2>/<attr2>,...]
- @mvattr[/noflagcopy] <obj>/<attr>=<obj1>[/<attr1>][,<obj2>/<attr2>,...]
@cpattr copies an attribute from one object to another, or several others. @mvattr does the same thing, except it also removes the original attribute from the original object. Attribute flags ARE copied as well, unless you use the /noflagcopy switch, which you probably want if you're copying from a non-standard attribute to a standard one.
Example:
@cpattr box/test = box/test1, cube/random, tribble/describe
would check the object "box" for an attribute named TEST and then copy it to the attributes TEST1 on "box", RANDOM on the object named "cube", and DESCRIBE on the object named "tribble".
If you leave out the destination attribute, the attribute is copied
to one of the same name on the new object. For example:
@cpattr box/test=cube
would copy the TEST attribute from "box" to TEST on "cube".
@create
Creates a thing with the specified name. Creating a thing costs a certain amount of MUSH money, which usually defaults to 10 pennies. You can specify a higher cost if you wish, but not a lower one. This cost is refunded if you @destroy/@recycle the thing.
Once you have created a thing, you can use it as a PUPPET, to store USER-DEFINED COMMANDS, or just as a prop. Some MUSHes choose to limit the number of objects that players can create by setting a QUOTA.
CAPSTR()
Returns <string> with the first character capitalized. Example: capstr(foo bar baz) returns "Foo bar baz"
CAT()
- cat(<string1>[, ... , <stringN>])
cat() concatenates strings, separating each string by a space. So "[cat(one, two)]" will return 'one two'.
cd
- cd <name><password>
- ch <name><password>
- cv <name><password>
Not really MUSH commands, but commands available at the connect screen for Wizards. If enabled, Wizards who use 'cd' instead of 'connect' to connect will be set DARK as they connect, and will not show arrival messages. Their arrival will, however, be broadcast to other admin, but not to MONITOR-flagged mortals.
ch is a variant of cd that allows Royalty to connect @hidden. cv is a variant that forces a non-dark, non-hidden connection.
CDESC()
- cdesc(<channel>)
- cusers(<channel>)
- cmsgs(<channel>)
- cbuffer(<channel>)
Return the description, number of users, number of messages, or buffer size of <channel>, respectively. This information is also displayed in @chan/list.
CEIL()
Returns the least integral value greater than or equal to <number>.
CEMIT()
- cemit(<channel>, <message>[, <noisy>])
Sends a message to all players listening to the given chat channel. See help @cemit for details.
If the third argument is a true value, the channel name will be prepended to the message, behaving like @cemit/noisy.
CENTER()
- center(<string>, <width>[, <fill>[, <rightfill>]])
This function will center <string> within a field <width> characters wide, using the <fill> string for padding on the left side of the string, and <rightfill> for padding on the right side. <rightfill> defaults to the mirror-image of <fill> if not specified. <fill> defaults to a space if neither <fill> nor <rightfill> are specified.
If <string> divides <width> into uneven portions, the left side will be one character shorter than the right side.
Example:
> say center(X,5,-)
You say, "--X--"
> say center(X,5,-=)
You say, "-=X=-"
> say center(.NEAT.,15,-,=)
You say, "----.NEAT.====="
> say center(hello,16,12345)
You say, "12345hello543215"
CFLAGS()
- cflags(<channel>)
- cflags(<channel>,<object>)
- clflags(<channel>)
- clflags(<channel>,<object>)
With one argument, cflags() returns a list of flags set on the given channel, represented as a string of characters. See 'help channel-list' for the list of flags (they appear in the "Access" column). You must be able to see the channel to use this function.
With two arguments, cflags() returns a list of flags for that object on that channel, currently a string consisting of zero or more of "G" (gagging), "Q" (muted), and "H" (hidden). You must be able to see that channel and to examine the object to use this function. If the object is not on the channel, an error is returned.
The clflags versions return a space-separated list of flag names, rather than a string of flag characters.
CHAN_USEFIRSTMATCH
CHAN_USEFIRSTMATCH (any type)
When this flag is set on an object that uses the chat system, channel name matching will default to the first matching channel in cases of ambiguity. Without this flag, attempting to use an ambiguous partial channel name will produce an error.
Channel functions
Channel functions work with the channel system.
cbuffer() cdesc() cemit() cflags() channels()
clflags() clock() cmsgs() cowner() crecall()
cstatus() ctitle() cusers() cwho()
channel-list
Here's the legend for reading the @channel/list output:
Channel Name Num Users Num Msgs Access Locks Status Buf
Sample 1 0 [DPOWQHo jsmvh*] [On QH] 4
||||||| |||||| | || |
Channel is DISABLED----------------------------/|||||| |||||| | || |
Channel allows PLAYERS--------------------------/||||| |||||| | || |
Channel allows OBJECTS---------------------------/|||| |||||| | || |
Channel is Wizard-only (W) or Admin-only (A)------/||| |||||| | || |
Channel is QUIET-----------------------------------/|| |||||| | || |
Channel is HIDE_OK----------------------------------/| |||||| | || |
Channel is OPEN (non-members can speak on it)--------/ |||||| | || |
Channel has @clock/join set----------------------------|||||| | || |
Channel has @clock/speak set----------------------------/|||| | || |
Channel has @clock/mod set-------------------------------/||| | || |
Channel has @clock/see set--------------------------------/|| | || |
Channel has @clock/hide set--------------------------------/| | || |
Player is the owner of the channel--------------------------/ | || |
Player is currently on/off/gagging the channel------------------/ || |
If on, player has the channel muted---------------------------------/| |
If on, player is hiding on the channel-------------------------------/ |
Size of the channel buffer in full-length lines---------------------------/
CHANNELS()
- channels([<delimiter>])
- channels(<object>)
- channels(<object>[,<delimiter>])
With no arguments, channels() returns the list of all channel names which are visible to the player. With two arguments, returns the list of channel names to which the object is listening, delimited by <delimiter>.
With one argument, the behavior is ambiguous. If the argument matches an object, returns the list of names to which the object is listening, space-delimited. If not, it's treated as a no-argument case with a delimiter.
If you don't have permission to examine the object, you only see those channels to which the object belong for which you have permission to join (or are joined to).
CHAT
CHAT SYSTEM
The MUSH has a built-in chat system with many different channels. These channels vary from MUSH to MUSH; ask at your local site or use @channel/list to see which ones are available.
You can talk to many people on the MUSH via the chat system, without needing to be in the same room as them. Use the "@channel" command to join, leave, or check who is on a channel, and use the "@chat" or "+" command to communicate.
If you examine yourself, you will see a list of channels that you are
currently listening to. Some channels are restricted to wizards or
administrators only. See the following help topics for details:
@chat, @channel, @cemit, @clock, cwho()
CHECKPASS()
- checkpass(<player>, <string>)
Returns 1 if <string> matches the player's password otherwise 0. If <player> has no password, this function will always return 1. <player> should be specified as a dbref or *<name>.
This function is restricted to wizards.
CHOWN_OK
Flag: CHOWN_OK (things, rooms, exits)
You can set this flag on an object you own to allow other players to transfer ownership of the object to themselves (using @chown). You must be carrying the thing, or in the room in order to set the flag, unless you use the DBREF number.
CHR()
- chr(<number>)
- ord(<character>)
ord() returns the numerical value of the given character. chr() returns the character with the given numerical value.
Example:
> think ord(A)
65
> think chr(65)
A
CLIENTS
Clients are special software programs that you can use to connect to MUSHes. They are usually much nicer to use than raw telnet and give you many additional features, such as larger text buffers (so you can type more), backscroll, history of previous commands, macros, and so on.
Here is a list of common clients and the anonymous ftp sites at which you can get them. To find out how to anonymous ftp, ask your system administrator. Please note that the below sites are subject to change. The below are listed solely for your information and possible benefit. The developers of PennMUSH have nothing to do with the clients.
OPERATING FTP or WWW SITE/
SYSTEM CLIENT DIRECTORY
-----------------------------------------------------------------------
UNIX Tinyfugue tf.tcp.com
/pub/tinyfugue
WINDOWS 32-bit MUSHClient http://www.mushclient.com
SimpleMU http://simplemu.onlineroleplay.com
MuckClient http://www.xcalibur.co.uk/MuckClient/
MACINTOSH MUDDweller http://www.shareware.com (search for Muddweller)
CLOCK()
- clock(<channel>[/<locktype>][, <new lock>])
With one argument, returns the value of a lock on a channel, if you own the channel or are See_All. If no locktype is given, "JOIN" is assumed. With two arguments, sets the lock if you would be able to do so via @clock.
CLONE()
This function clones <object>, and returns the dbref number of the clone.
This is a side-effect function and may not be enabled on some MUSHes.
CLOUDY
Flag: CLOUDY (exits)
If this flag is set on a (non-TRANSPARENT) exit, when a player looks at the exit they will see the contents of the destination room following the exit's description.
If the flag is set on a TRANSPARENT exit, when a player looks at the exit they will see only the description of the destination room following the exit's description, and will not see contents.
CMDS()
- cmds(<player|descriptor>)
Returns the number of commands issued by a player during this connection as indicated by WHO.
The caller can use the function on himself, but using on any other player requires privileged power such as Wizard, Royalty or SEE_ALL.
code
PennMUSH is developed by a team of developers whose names are listed in 'help changes'. Suggestions, comments, and bug reports are welcome:
Report bugs at: pennmush-bugs@pennmush.org
Comments/suggestions to: pennmush-developers@pennmush.org
For information about downloading PennMUSH, see 'help download'. For information about changes in versions of the code, see 'help changes'.
COLOR
Flag: COLOR (players)
When set on a player, this flag allows the player to see ANSI color. The ANSI flag must also be set.
COMMANDS
Help is available for the following MUSH commands:
ahelp anews brief DOING drop
examine enter events follow get
give go index kill leave
LOGOUT look move news page
pose QUIT read rules say
score slay take teach think
unfollow use whisper WHO with
" : ; + ]
In addition to these, there are several types of '@' commands. @-commands are usually commands which have permanent effects on the MUSH (such as creating a new object). Here are the help topics on @-commands:
@-ATTRIBUTES @-BUILDING @-GENERAL @-WIZARD
Commands that can only be used by connected players are listed in HELP SOCKET COMMANDS.
Communication functions
Communication functions are side-effect functions that send a message to an object or objects.
cemit() emit() lemit() nsemit() nslemit()
nsoemit() nspemit() nsprompt() nsremit() nszemit()
oemit() pemit() prompt() remit() zemit()
COMP()
- comp(<value1>, <value2>[,<type>])
Comp compares two values. It returns 0 if they are the same, -1 if value1 is less than/precedes alphabetically value2, and 1 otherwise.
By default the comparison is a case-sensitive lexicographic (string)
comparison. By giving the optional <type>, the comparison can
be specified:
<type> Comparison
A Maybe case-sensitive lexicographic (default)
I Always case-insensitive lexicographic
D Dbrefs of valid objects
N Integers
F Floating point numbers
Whether or not the a sort type is case-sensitive or not depends on the particular mush and its environment.
CON()
Returns the dbref of the first object in a container.
You can get the complete contents of any container you may examine, regardless of whether or not objects are dark. You can get the partial contents (obeying DARK/LIGHT/etc.) of your current location or the enactor (%#). You CANNOT get the contents of anything else, regardless of whether or not you have objects in it.
COND()
- cond(<cond1>, <expr1>, [<condN>, <exprN>], ...[<default>])
- condall(<cond1>, <expr1>, [<condN>, <exprN>], ...[<default>])
- ncond(<cond1>, <expr1>, [<condN>, <exprN>], ...[<default>])
- ncondall(<cond1>, <expr1>, [<condN>, <exprN>], ...[<default>])
cond() evaluates <cond>s until one returns a boolean true value. Should none return true, <default> is returned.
condall() returns all <expr>s for those <cond>s that evaluate to true.
ncond() and ncondall() are identical to cond(), except it returns <expr>s for which <cond>s evaluate to false.
Example:
> say cond(0,This is false,#-1,This is also false,#123,This is true)
You say, "This is true"
Example:
> say ncond(0,This is false,#-1,This is also false,#123,This is true)
You say, "This is false"
Example:
> say ncondall(0,This is false,#-1,This is also false,#123,This is true)
You say, "This is falseThis is also false"
CONFIG()
With no arguments, this function returns a list of config option names. Given a config option name, this function returns its value. Boolean configuration options will return values of "Yes" or "No".
Ex: config(money_singular) => "Penny"
CONN()
- conn(<player|descriptor>)
This function returns the number of seconds a player has been connected. <player name> must be the full name of a player, or a player's dbref. Players who are not connected have a conn value of "-1", as do dark wizards, when conn() is used on them by a non-priv'ed player.
CONNECTED
Flag: CONNECTED (players)
This internal flag applies only to players and it shows if the player is connected or not. Only admin can see this flag. No one can set or reset this flag.
Mortal code can't use hasflag(<x>,connected) to test if a player is connected. Consider using conn(), lwho(), or mwho() instead.
Connection functions
Connection functions return information about the connections open on a game, or about specific connections.
cmds() conn() doing() height() hostname()
hidden() idle() ipaddr() lports() lwho()
lwhoid() mwho() mwhoid() nmwho() nwho()
player() ports() pueblo() recv() sent()
ssl() terminfo() width() xmwho() xmwhoid()
xwho() xwhoid() zmwho() zwho()
CONTROL
Controlling an object basically means that you have the power to change the object's characteristics such as flags and attributes. It may also mean that you have the ability to destroy it.
Here are the conditions under which object O controls victim V:
1. If V is God, O must be God
2. If V is Wizard, O must be Wizard or God
3. If O is a Wizard, O controls V
4. If V is Royalty, O must be Royalty, Wizard or God
5. If O is MISTRUST, O must be V to control V
6. If V and O are owned by the same player:
6a. If V is not TRUST, O controls V
6b. If V is TRUST, O must be TRUST or the player must be TRUST
7. If V is on a zone, and isn't a player and isn't TRUST,
O controls V if O passes the zone-lock of the zone.
8. If V is owned by a SHARED player, and V isn't a player and isn't set
TRUST, O controls V if O passes the zone-lock of the SHARED player.
Step 7 is skipped if config(zone_control_zmp_only) is on. There's also one special case: anyone can @link an unlinked exit (at which point the exit is @chowned to the linker).
CONTROLS()
- controls(<object>, <victim>)
This function returns 1 if <object> controls <victim>, or 0, if it does not. If one of the objects does not exist, it will return #-1 ARGN NOT FOUND (where N is the argument which is the invalid object). You must control <object> or <victim>, or have the See_All power, to use this function.
CONVSECS()
convsecs(<seconds>[, <zone>]) convutcsecs(<seconds>)
This function converts seconds to a time string, based on how many seconds the number is after Jan 1, 1970 UTC. Because it's based on UTC, but returns local time, convsecs(0) is not going to be "Thu Jan 1 00:00:00 1970" unless you're in the UTC (GMT) timezone.
convutcsecs() and convsecs() with a second argument of 'utc' return the time based on UTC time instead of the server's local time.
Example:
> say [secs()]
You say, "709395750"
> say [convsecs(709395750)]
You say, "Wed Jun 24 10:22:54 1992"
> say [convutcsecs(709395750)]
You say, "Wed Jun 24 14:22:30 1992"
CONVTIME()
This functions converts a time string (in the local time zone) to the number of seconds since Jan 1, 1970 GMT. A time string is of the format: Ddd MMM DD HH:MM:SS YYYY where Ddd is the day of the week, MMM is the month, DD is the day of the month, HH is the hour in 24-hour time, MM is the minutes, SS is the seconds, and YYYY is the year. If you supply an incorrectly formatted string, it will return -1.
If the extended convtime() is supported (See @config compile), more formats for the date are enabled, including ones missing the day of week and year, and a 'Month Day Year' format.
Example:
> say [time()]
You say, "Wed Jun 24 10:22:54 1992"
> say [convtime(Wed Jun 24 10:22:54 1992)]
You say, "709395774"
copyright
Copyright, License, and Credits for PennMUSH 1.x. Revised March 2006.
I. Copyrights
PennMUSH 1.x Copyright (c) 1995-2006, T. Alexander Popiel <talek@pennmush.org> and Shawn Wagner <raevnos@pennmush.org>.
Some code used in this server may have been derived from the TinyMUSH 2.2 source code, with permission. TinyMUSH 2.2 is Copyright (c) 1994-2002, Jean Marie Diaz, Lydia Leong, and Devin Hooker.
Some code used in this server may have been derived from TinyMUSH 2.0. Copyright (c) 1995, Joseph Traub, Glenn Crocker.
Some code used in this server may have been derived from TinyMUD. Copyright (c) 1995, David Applegate, James Aspnes, Timothy Freeman and Bennet Yee.
*------------------------------------------------------------------------*
II. License
Because PennMUSH includes parts of multiple works, you must comply with all of the relevant licenses of those works. The portions derived from TinyMUD/TinyMUSH 2.0 are licensed under the following terms:
Redistribution and use in source and binary forms, with or without modification, are permitted provided that: (1) source code distributions retain the above copyright notice and this paragraph in its entirety, and (2) distributions including binary code include the above copyright notice and this paragraph in its entirety in the documentation or other materials provided with the distribution. The names of the copyright holders may not be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
The portions derived from TinyMUSH 2.2 are used under the Artistic License. The Artistic License is also the license under which you are granted permission to copy and modify PennMUSH:
The Artistic License
Preamble
The intent of this document is to state the conditions under which a Package may be copied, such that the Copyright Holder maintains some semblance of artistic control over the development of the package, while giving the users of the package the right to use and distribute the Package in a more-or-less customary fashion, plus the right to make reasonable modifications.
Definitions:
"Package" refers to the collection of files distributed by the Copyright Holder, and derivatives of that collection of files created through textual modification. "Standard Version" refers to such a Package if it has not been modified, or has been modified in accordance with the wishes of the Copyright Holder. "Copyright Holder" is whoever is named in the copyright or copyrights for the package. "You" is you, if you're thinking about copying or distributing this Package. "Reasonable copying fee" is whatever you can justify on the basis of media cost, duplication charges, time of people involved, and so on. (You will not be required to justify it to the Copyright Holder, but only to the computing community at large as a market that must bear the fee.) "Freely Available" means that no fee is charged for the item itself, though there may be fees involved in handling the item. It also means that recipients of the item may redistribute it under the same conditions they received it.
1. You may make and give away verbatim copies of the source form of the Standard Version of this Package without restriction, provided that you duplicate all of the original copyright notices and associated disclaimers.
2. You may apply bug fixes, portability fixes and other modifications derived from the Public Domain or from the Copyright Holder. A Package modified in such a way shall still be considered the Standard Version.
3. You may otherwise modify your copy of this Package in any way, provided that you insert a prominent notice in each changed file stating how and when you changed that file, and provided that you do at least ONE of the following:
a) place your modifications in the Public Domain or otherwise make them Freely Available, such as by posting said modifications to Usenet or an equivalent medium, or placing the modifications on a major archive site such as ftp.uu.net, or by allowing the Copyright Holder to include your modifications in the Standard Version of the Package.
b) use the modified Package only within your corporation or organization.
c) rename any non-standard executables so the names do not conflict with standard executables, which must also be provided, and provide a separate manual page for each non-standard executable that clearly documents how it differs from the Standard Version.
d) make other distribution arrangements with the Copyright Holder.
4. You may distribute the programs of this Package in object code or executable form, provided that you do at least ONE of the following:
a) distribute a Standard Version of the executables and library files, together with instructions (in the manual page or equivalent) on where to get the Standard Version.
b) accompany the distribution with the machine-readable source of the Package with your modifications.
c) accompany any non-standard executables with their corresponding Standard Version executables, giving the non-standard executables non-standard names, and clearly documenting the differences in manual pages (or equivalent), together with instructions on where to get the Standard Version.
d) make other distribution arrangements with the Copyright Holder.
5. You may charge a reasonable copying fee for any distribution of this Package. You may charge any fee you choose for support of this Package. You may not charge a fee for this Package itself. However, you may distribute this Package in aggregate with other (possibly commercial) programs as part of a larger (possibly commercial) software distribution provided that you do not advertise this Package as a product of your own.
6. The scripts and library files supplied as input to or produced as output from the programs of this Package do not automatically fall under the copyright of this Package, but belong to whomever generated them, and may be sold commercially, and may be aggregated with this Package.
7. C or perl subroutines supplied by you and linked into this Package shall not be considered part of this Package.
8. The name of the Copyright Holder may not be used to endorse or promote products derived from this software without specific prior written permission.
9. THIS PACKAGE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
The End
COS()
- cos(<angle>[,<angle type>])
Returns the cosine of <angle>. Angle must be in the given angle type, or radians by default.
Example:
> say cos(90, d)
You say, "0"
> say cos(1.570796)
You say, "0"
See 'HELP CTU()' for more on the angle type.
COSTS
These are usually:
kill: 10 pennies (or more, up to 100 pennies)
page: 0 pennies
@dig: 10 pennies
@create: 10 pennies (or more)
@find: 100 pennies
@search: 100 pennies
@entrances: 100 pennies
@link: 1 penny (if you didn't already own it,
+1 to the previous owner).
@open: 1 penny (2 pennies if linked at the same time)
Type '@config/list costs' to get the costs for the MUSH you are on.
COWNER()
Returns the dbref of the owner of a channel.
CREATE()
This function creates an object with name <object> for <cost> pennies, and returns the dbref number of the created object.
This is a side-effect function and may not be enabled on some MUSHes.
CRECALL()
- crecall(<channel>[, <lines> [, <start line> [, <osep> [, <timestamps?> ]]]])
This function is the functional form of @chan/recall, and returns a string containing the recalled lines from the channel, separated by <osep>. If <timestamps?> is a true value, the recalled lines will include their timestamps; otherwise, they will not.
CREDITS
Maintainer: Raevnos [SW]
Developers: Javelin, Talek [TAP], Ervin Hearn III [EEH],
Greg Millam [GM]
Past Porters: Nick Gammon [NJG] (win32), Dan Williams [DW] (MacOS),
Sylvia (OS/2)
Former developers: Rhyanna [RLM], Trivian [TN], Halatir [LdW]
The original TinyMUSH 1.0 code was written by Lawrence Foard, and was based upon James Aspnes' TinyMUD server. Since then, the code has been modified by the programmers of MicroMUSE (then MicroMUSH), and Joseph Traub (Moonchilde of PernMUSH). From January 1992 to January 1995, Lydia Leong (Amberyl of PernMUSH / Polgara of Belgariad) maintained the code currently known as PennMUSH 1.50. From January 1995 until July 2006, Alan Schwartz (Paul of DuneMUSH / Javelin elsewhere) maintained this code, along with a development team. From July 2006 on, Raevnos has been the maintainer.
Big thanks to the developers of TinyMUSH 2.0, 2.2 [2.2], 3.0 [3], Mux2, and Rhost [Rhost] servers, as well as to the players of Belgariad MUSH, DuneMUSH, and M*U*S*H, and everyone else using this server!
CSTATUS()
- cstatus(<channel>,<object>)
Returns <object>'s status with respect to <channel>, which may be "Off", "On", or "Gag". You must either be able to examine the object, or it must visible be on the channel; "Off" is returned for objects that you can not see on the channel.
CTIME()
- ctime(<object>[, <utc>])
- csecs(<objecct>)
If creation times are enabled, this function will return the date and time that the object was created. If the optional <utc> argument is true, the time is returned for the UTC time zone, if false or present, for the local time zone.
csecs() returns the time as the number of seconds since the epoch.
You must be able to examine an object to see its creation time.
CTITLE()
- ctitle(<channel>,<object>)
Returns <object>'s @chan/title on <channel>. You must either be able to examine the object, or it must visible be on a channel which you are allowed to join.
CTU()
Converts between the different ways to measure angles. <from> controls what the angle is treated as, and <to> what form it is turned into. They can be 'd' for degrees, or 'r' for radians. There is also a third way to measure angle, 'g' for gradians, but it's not used often and is only included for completeness.
As a refresher, there are 180 degrees in pi radians in 200 gradians.
Example:
> say 90 degrees is [ctu(90, d, r)] radians
You say, "90 degrees is 1.570796 radians"
CWHO()
This returns a list of connected dbrefs who are on <channel>. When used by mortals, hidden/DARK players do not appear on the list.
Generated at Mon Jul 2 00:35:04 2007