pennmush/game/data/
pennmush/game/log/
pennmush/game/save/
pennmush/game/txt/evt/
pennmush/game/txt/nws/
pennmush/os2/
pennmush/po/
pennmush/win32/msvc.net/
pennmush/win32/msvc6/
# configuration file for PennMUSH
#
# The directives in this file control the behavior of your MUSH
# If you change any of them while your MUSH is running, you can
# cause the MUSH to re-read this file by sending it a SIGHUP
# signal. Typically, one does this by using 'ps' to determine the
# MUSH's process id#, and then issuing a: kill -1 pid#
# command.

####
#### ESSENTIALS
####

# Name of your MUSH. Please change this.
mud_name TinyMUSH

# The port it's running on. See also ssl_port, later.
port 4201

# Should we listen only on a specific IP address? If your host has
# multiple IP addresses, put the ip address to listen on here
# Example: ip_addr 128.32.243.78
# Otherwise, just leave it blank.
ip_addr

# Should the MUSH attempt to resolve IP numbers to hostnames?
# If yes, you'll see hostnames on the wizard WHO. If no, IP numbers.
# No makes sense if you're running PennMUSH at home and don't have
# a DNS server you can access. MacOS 7/8/9 should use 'no'
# Changing this while using info_slave requires a @shutdown/reboot
# to make it take effect.
use_dns yes

# Databases
# These are, respectively, where to read a database, where to
# write a database, where to put a panic dump (performed if
# the MUSH determines it's going to crash, where to put MUSH mail,
# and where to keep information about the chat system.
# Filenames are relative to the game/ directory.
#
# Do NOT put compression suffixes at the end of the files.
# That's handled below
#
input_database data/indb
output_database data/outdb
crash_database data/PANIC.db
mail_database data/maildb
chat_database data/chatdb

# Database compression
# When your databases are dumped, they can be dumped in a compressed
# format to save disk space, or uncompressed for speed.
# To use a compression program, you must know the name of the
# program that compresses, the name of the program that uncompresses,
# and the suffix that the compression program adds.
#
# Most people can just use one of the following:
#
# Use these 3 lines for no compression. Required on win32 and MacOS 7/8/9.
#compress_program
#uncompress_program
#compress_suffix
#
# Use these 3 lines for gzip compression
#compress_program gzip
#uncompress_program gunzip
#compress_suffix .gz
#
# Use these 3 lines for Unix compress compression
#compress_program compress
#uncompress_program uncompress
#compress_suffix .Z
#
# Use these 3 lines for bzip2 compression
#compress_program bzip2
#uncompress_program bunzip2
#compress_suffix .bz2
#
compress_program gzip
uncompress_program gunzip
compress_suffix .gz

# Room where new players are created.
player_start 0

# The master room. Exits here are global, as are commands on
# objects here. This only is used if globals is set to "yes".
master_room 2

# The base room. Any room that can be reached from this room
# through exits is considered a 'connected room'.
# See also: exits_connect_rooms
base_room 0

# The ancestor room. This dbref serves as an 'ultimate parent' to
# all rooms that aren't set ORPHAN. Set to -1 to disable.
ancestor_room -1

# The ancestor exit. This dbref serves as an 'ultimate parent' to
# all exits that aren't set ORPHAN. Set to -1 to disable.
ancestor_exit -1

# The ancestor thing. This dbref serves as an 'ultimate parent' to
# all things that aren't set ORPHAN. Set to -1 to disable.
ancestor_thing -1

# The ancestor player. This dbref serves as an 'ultimate parent' to
# all players that aren't set ORPHAN. Set to -1 to disable.
ancestor_player -1

# The default home.  This is the room used when an object becomes
# homeless (usually due to its home getting destroyed).  It's also
# the place where things get moved to if their location gets
# unsalvageably corrupted.
default_home 0

# What's the filename of the @sitelock file, that controls
# who can connect and who can't
access_file access.cnf    

# Where are the names you want to ban players from
# creation/rename? A good idea to start with are swear words,
# and features names like 'Luke', 'Merlin', 'Gandalf', 'Picard',
# 'Lessa', 'Dracula', 'Hercules', 'Scooby', 'Nancy Drew', etc,
# depending on what type of MUSH you are running
names_file names.cnf
  
###
### Attribute (chunk) cache
###
### PennMUSH can swap rarely-referenced attribute text out to a disk
### file, and cache often-used attribute text in memory. This 
### can result in substantial (typically 30-50%) savings
### in process memory use, at the cost of a very small performance hit.
### You can control the size of memory cache (or set it so large
### that nothing is ever swapped to disk), as well as several less
### important parameters here. 
###

# The file to store the attribute data in, when not in memory.
# This is relative to the game/ directory.
chunk_swap_file data/chunkswap

# The amount of memory allowed for the attribute cache, in bytes.
# The actual amount used will be a multiple of 64K slightly less
# the specified amount.  You must give it at least 132000 bytes.
# If you want to use an 'infinite' cache, try setting this
# to 2000000000; you'll lose the memory benefits, but you'll still
# gain some locality benefits and overhead savings.
chunk_cache_memory 1000000

# The number of attributes that may be moved at one time, once per
# second.  The higher the value, the faster memory gets defragmented,
# but at a greater CPU cost.
chunk_migrate 50

###
### SSL support
###

# The port to listen on for SSL connections. This must be an unused
# port other than the standard connection port. To disable SSL
# connections, leave this set to 0.
ssl_port 0

# The ip address to bind to for the SSL port, if one is specified. 
# If your host has multiple IP addresses, put the ip address to 
# listen on here. Otherwise, leave it blank to listen on all
# addresses if SSL is in use.
ssl_ip_addr

# The file containing the MUSH server's certificate and private key,
# concatenated together, and with no password on the private key.
# Obviously, this file should only be readable by the MUSH account
# owner. If this is commented out, the server will not present a
# certificate, so clients that attempt to authenticate the server
# will fail.
ssl_private_key_file  server-key.crt

# The file containing one or more certificates of certifying authorities
# that the server should trust to certify clients who connect and
# present certificates. A standard bundle of these is distributed
# with openssl as 'ca-bundle.crt'. If commented out, the server will
# not attempt client authentication.
ssl_ca_file /usr/share/ssl/certs/ca-bundle.crt

# Are clients *required* to present a valid certificate in order to
# make an SSL connection?
ssl_require_client_cert no

###
### Limits, costs, and other constants
###

# name of the monetary units
money_singular Penny
money_plural Pennies

# Should there be a limit on how long players can be idle?
# If you want one, set idle_timeout to the # number of MINUTES 
# a player may idle before getting disconnected.
# If you don't want a timeout, set it to 0.
idle_timeout 0m

# Should there be a limit on how long connections at the connect screen
# (without an associated player) can be idle?
# If you want one, set unconnected_idle_timeout to the # number of MINUTES 
# a connection may idle before getting disconnected.
# If you don't want a timeout, set it to 0.
unconnected_idle_timeout 5m

# Should there be a limit on the number of logins the MUSH
# can accept? If your operating system has a limited number of
# file descriptors per process, you should set this to 
# that number - 8. If not, or if you like to live dangerously,
# set this to 0.
max_logins 120

# Should there be a limit on the number of concurrent guest logins the MUSH
# will allow? This option can take 3 values:
# 0 = no limit, any number of guests. Logins beyond the number of established
#     guest characters will result in multiple players being logged into the
#     same guest character.
# -1 = limited to the number of guests in the database. To allow more guests
#      to log in, create more guest characters.
# Any other number = the number of guest connections allowed at once.
max_guests 0

# How much MUSH money do players get when they're created?
starting_money 150

# How much MUSH money do non-guest players get each day they log in?
paycheck 50

# How much MUSH money do guests get each day they log in?
guest_paycheck 0

# What's the most money anyone but guests can have?
max_pennies 100000

# What's the most money guests can have?
max_guest_pennies 1000

# If quotas are enforced, how much players get by default
starting_quota 20

# number of commands a player can have queued. Prevents runaway machines
# from getting out of hand.
player_queue_limit 100

# the number of commands run from the queue when there is no net activity
queue_chunk 3

# the number of commands run from the queue when there is net activity
active_queue_chunk 1

# the maximum level of recursion allowed in functions
function_recursion_limit 50

# the maximum number of functions that can be invoked
function_invocation_limit 2500

# the maximum depth we're allowed to recursively call the parser
# for a single expression. This limits how much the stack size can increase,
# which could be useful if your host limits your stack (it will prevent
# a crash). The higher your allowed stack size limit, the larger the
# mush process can grow, and the higher this can be set. Generally
# speaking, you won't ever see more than 8192 recursions, so that's
# probably an upper limit, but most sane code shouldn't need more
# than a couple hundred. Setting it to '0' means unlimited.
call_limit 100

# The maximum number of milliseconds of CPU time that a single queue entry
# is allowed to use before aborting. Setting this to a low number will
# help prevent many malicious attacks, as well as accidently bad code,
# from lagging the game. Setting it to 0 means unlimited, and is a bad 
# idea. Remember there are 1000 milliseconds in a second.
queue_entry_cpu_time 1500

# How many channels total can be created?
# This doesn't allocate memory, it just sets a maximum.
max_channels 200

# How many channels can each non-admin create? Set this to some number
# higher than zero to allow mortals to create channels.
max_player_chans 0

# What's the maximum number of levels of parenting allowed
max_parents 10

# What's the max chain length of indirect locks allowed?
max_depth 10

# How many @functions can we have? If you change this without # doing a
# shutdown (or shutdown/reboot) immediately thereafter, you'll very likely
# crash your MUSH, so don't do that.
max_global_fns 50

# How much does it cost a mortal to create a channel?
chan_cost 1000

# How likely should it be that noisy whispers are noticed by other
# players in the room? (Others see: John whispers to Mary.)
# Use a number from 0 to 100
whisper_loudness	100

# the highest allowable dbref -- you can't build more than this
# many objects. if you don't want such a limit, leave this set
# to 0.
max_dbref 0

# The maximum number of attributes per object. This prevents
# denial-of-service attacks involving creating an infinite number
# of attributes on an object. This value is probably enough.
max_attrs_per_obj 2048

# The maximum number of mail messages in each player's inbox.
# Encourages people to clean up their inbox, discourages 
# mailspammers.
mail_limit 300

# If you kill someone, you can spend up to 100 coins; the chance
# of killing them is the number of coins you spend. What's the
# minimum number of coins that must be spent, and the default
# number if no number is given?
kill_min_cost 10
kill_default_cost 10

# If you kill someone, they get paid off. The payoff is this
# percentage of the amount you spent to kill them. The usual is 50%.
kill_bonus 50

# How much to various commands cost:
find_cost 100
page_cost 0

# How many objects are equal to 1 quota, if quotas are used
quota_cost 1

# How much deposit is required to queue a command?
queue_cost 10

# One out of how many commands that are queued will cost the
# player a coin? Setting this to 1 causes a coin to be lost with
# every command. Setting it to 0 disables coin loss for queued
# commands (and is a very bad idea).
queue_loss 63

# What does it cost to build various things?
room_cost 10
object_cost 10
link_cost 1
exit_cost 1

# How often should we run a purge to remove destroyed objects? (seconds)
purge_interval 10m1s

# How often should we run a dbck to check db consistency? (seconds)
dbck_interval  9m59s

# How often should we perform topology warning checks?
# Default is 1 hour. If you set this to 0, timed MUSH-wide checks 
# will be disabled, but players can still use @wcheck.
warn_interval 1h

# If compiled with FLOATING_POINTS support, this controls the
# decimal precision of numbers. Default is 6 digits after the
# decimal point.
float_precision 6

# The password that must be given to do an @logwipe. You must also
# be God, of course. CHANGE THIS.
log_wipe_passwd zap!

# The maximum length of player names. Lowering this won't change
# current player names. This number should be one greater than the
# actual maximum length you want.
player_name_len 16

# Limit the number of objects players can own.
use_quota yes

###
### Dump stuff
###

# How often should the database be dumped, in seconds?
# 3600 is once an hour, and probably the most frequent you'd ever want.
# On a large MUSH, consider at most once every 3-6 hours.
# This cannot be a multiple of any of the timer.c parameters
# (so keep it an even number of hours).
dump_interval 1h

# should I fork a concurrent process to do database dumps?
# If I do, your memory requirements will double during the dump.
# If I don't, the MUSH will pause while it dumps.
# If you're low on memory, don't do this.
# If you're on Win32, don't do this; fork() is not defined.
forking_dump yes

# If you're not forking, you get a bunch of messages that you
# can set to warn players when the dump is 5 minutes away,
# 1 minute away, in progress, and finished. You can 
# leave messages you don't want blank, but don't comment
# them out or remove them from the file or you'll get the
# default messages.
dump_warning_5min GAME: Database save in 5 minutes.
dump_warning_1min GAME: Database save in 1 minute.
dump_message GAME: Saving database. Game may freeze for a few moments.
dump_complete GAME: Save complete. 


### 
### Filenames
###

# Text files shown on connection, as message of the day,
# as wizard message of the day, on quit, to newly created players,
# when logins are disabled, when player creation is disabled,
# and when a guest logs in.
connect_file txt/connect.txt
motd_file txt/motd.txt
wizmotd_file txt/wizmotd.txt
quit_file txt/quit.txt
newuser_file txt/newuser.txt
down_file txt/down.txt
register_create_file txt/register.txt
guest_file txt/guest.txt
full_file txt/full.txt

# The equivalent files in html, shown to Pueblo clients.
connect_html_file txt/connect.html
motd_html_file txt/motd.html
wizmotd_html_file txt/wizmotd.html
quit_html_file txt/quit.html
newuser_html_file txt/newuser.html
down_html_file txt/down.html
register_create_html_file txt/register.html
guest_html_file txt/guest.html
full_html_file txt/full.html

# The big text files. New ones can be added by setting up
# a new subdirectory of game/txt as described in game/txt/README,
# and adding a new help_command line below, or uncommenting one of
# the normal file entries.

#help_command events txt/events.txt
#help_command index txt/index.txt
#help_command rules txt/rules.txt
#help_command +help txt/plushelp.txt

help_command help txt/help.txt
help_command news txt/news.txt
ahelp_command ahelp txt/help.txt
restrict_command ahelp admin
ahelp_command anews txt/news.txt
restrict_command anews admin

### Config directive for IDENT.
### If you want to do ident (RFC1143) lookups, set use_ident to "yes"
### and select an ident_timeout to determine how long the MUSH
### should wait for a response, in seconds. If you're using
### INFO_SLAVE (in options.h), this is how long the info_slave waits.
# Changing this while using info_slave requires a @shutdown/reboot
# to make it take effect.
use_ident yes
ident_timeout 5s

###
### Logging
###
### When selecting log files, you may assign multiple logs to the
### same filename. If you don't assign a filename to a log,
### messages are written on stderr instead (usually redirected to
### log/netmush.log). Probably unwise to change these in a running
### MUSH.
###

# Filename to log important messages (startups, errors, shutdowns)
error_log  log/netmush.log

# Filename to log connections to
connect_log log/connect.log

# Filename to log wizard commands to
wizard_log log/wizard.log

# Filename to log dump checkpoint messages to
checkpt_log log/checkpt.log

# Filename to log debugging trace messages to
trace_log log/trace.log

# Filename to log commands by SUSPECT players to
command_log log/command.log

# log all commands. Makes big, big command.log files. Use only for
# debugging, generally.
log_commands no

# log forces done by wizards
log_forces yes

# perform memory allocation tracking (logged on @dump) to help find
# memory leaks. This really shouldn't be changed while the server
# is running - it's only useful if you do a full shutdown, turn
# this on, and then start up. Generally, you want this off.
mem_check no

###
### Logins
###

# Support the pueblo MUSH client and allow html to be sent to it
pueblo no

# allow non-wizard/royalty logins
logins yes

# allow guest logins
guests yes

# allow players to create/register characters at the login screen
# If you turn this off, neither "create" nor "register" will work.
# Use access.cnf if you want to disable creation for specific sites
# or disable creation but enable registration for everyone.
player_creation yes

# If you use the shs password system, and your database was created
# on a little-endian hardware architecture (such as an intel PC),
# set this to 'yes'. If your database was created on a big-endian
# hardware architecture (most non-intel systems), set this to 'no'.
# If you port a db with shs passwords between systems, and the
# passwords don't work, try changing this setting.
reverse_shs yes

# trigger @aconnect/@adisconnect in a connecting player's location
# if the location is a room or thing?
room_connects no

###
### SQL connectivity
###

# What SQL server platform should we use? Options include:
# mysql, disabled (the default)
sql_platform disabled

# What's the SQL hostname? Use '127.0.0.1' for a TCP connection
# to the local host, and 'localhost' for a domain socket connection.
sql_host 127.0.0.1

# What's the SQL database? You have to set this to a database that
# you create.
sql_database mush

# What username to access the database?
sql_username mush

# What password for that user? Change this!
sql_password mush

###
### Options affecting commands and functions
### (See also restrict_command to restrict command use)
###

# The old daytime directive is better suited to restrict_command
# or @command/disable.

# prevent objects from evaluating ufuns on more privileged objects. [++]
safer_ufun yes

# allow functions that have side effects? (e.g. dig(), etc.)
function_side_effects yes

# default whisper to whisper/noisy instead of whisper/silent
noisy_whisper no

# is possessive get (get players's object) allowed?
possessive_get yes

# what if the player is disconnected?
possessive_get_d no

# SAFE absolutely prevents destruction, even with @nuke
really_safe yes

# With this turned on, ZMRs and ZMOs are not included in control
# checking. Only Zone Master Players are. The other zone types are
# still used for command-matching, just not for control purposes.
# Highly recomended.
zone_control_zmp_only yes

# When a player is nuked, his SAFE objects are @chowned to God.
# If this is set to "yes", his non-safe objects are destroyed
# If this is set to "no", they are chowned to God
destroy_possessions yes

# Can we @link to an object?
link_to_object yes

# Keep queue limits on a per-owner rather than per-object basis?
# That is, is an object runaway when its owner's total queue is too
# high, rather than when the object's queue is too high?
owner_queues no

# If this is yes, DARK wizards do not trigger AENTER/ALEAVE when they move.
# If it's no, they are just like anybody else.
wiz_noaenter no

# should say/pose by a DARK wizard be anonymous ('Someone says...')?
full_invis no

# Are empty attributes preserved? If this is yes, you can do
# &ATTR obj= and obj will have an attribute ATTR set, with an empty value.
# If this is no, that same command would clear the attribute instead.
empty_attrs yes

###
### TinyMUSH compatibility
###

# Should we treat a missing number as 0 in things like add(3,)?
# For TinyMUSH compatibility, the answer is 'no'.
null_eq_zero no

# In PennMUSH, strings and db#s larger than #0 have traditionally
# been considered true (1) in boolean functions like and(), or(), etc.
# In TinyMUSH, strings and db#s evaluate as false (0)
# Should we emulate TinyMUSH?
tiny_booleans no

# TinyMUSH's trim function is: 
#   trim(<string> [,<trim style> [,<trim character>]])
# PennMUSH's trim function has been:
#    trim(<string>[,<character to trim>[,<trim style>]])
# Should we emulate TinyMUSH? [+ for new MUSHes]
tiny_trim_fun yes

# In Tiny, strings used in math expressions evaluate to 0,
# so eq(asdfa,0) = 1, gt(asdf,0) = 0, etc.
# In Penn, using strings where numbers should be is traditionally an
# error (returning #-1 ARGUMENT MUST BE NUMBER or similar)
# Do you want the TinyMUSH behavior?
tiny_math no

# should @pemit default to @pemit/silent, like TinyMUSH?
silent_pemit no

###
### Attributes
###

# enable the adestroy attribute, triggered when an object is nuked?
adestroy no

# enable the amail attribute for admin, triggered when they receive
# @mail? This does no mail loop checking. [-]
amail no

# does @listen work on players?
player_listen yes

# does @ahear work on players? If player_listen is yes, and
# player_ahear is no, sound outside the player can be heard by her
# inventory, but her @ahear isn't executed.
player_ahear yes

# Should we trigger the @startup attribute on startup?
# You always want to, unless you need to disable some
# malicious code on an @startup. This does not affect the
# @restart command, which will work even if this is "no".
startups yes

# Can @desc attributes be accessed remotely by everyone?
# Historically, this was allowed, but it makes it difficult to
# have hidden objects with secrets in their @desc if players
# can remotely get the @desc. If set to "no", you must be
# able to look at something to retrieve its @desc.
read_remote_desc no

###
### Cosmetic stuff
###

# show room/object/player names in bold for ansi players?
ansi_names yes

# show exit lists with commas (a, b, and c)?
comma_exit_list no

# count hidden players when WHO reports total connected?
count_all no

# are rooms with any exits considered connected, and thus not required
# to have the FLOATING flag set on them?
exits_connect_rooms no

# Prefixes for various broadcast messages
wizwall_prefix Broadcast:
rwall_prefix Admin:
wall_prefix Announcement:

# Should we announce connections/disconnections to rooms and on channels?
# If this is disabled, only MONITOR players will see connect/disconnect.
# @aconnect/@adisconnect, however, are still triggered, so you can
# softcode whatever connection monitor you like. Players will probably
# object if you don't at least show them when someone connects in 
# the room with them.
announce_connects yes

# can players have names with spaces in them?
player_name_spaces no

# show expanded flag name list when you examine an object?
flags_on_examine yes

# show visual attributes when you examine an object you don't own?
# (like examine/full in TinyMUSH)
ex_public_attribs yes

# What should page a b c = message do?
# If blind_page is yes, page defaults to page/blind (a,b,c each get separate
# pages with no evidence that it was a multipage). If blind_page is no,
# page defaults to page/list (a single page goes to a,b,c and they can
# see that they all received it.
blind_page yes

# Should we show the pager's alias, in parentheses, after their name?
# That is, should recipients see:
# Javelin (Jav) paged: ...
page_aliases no

# Should +whatever "hi! strip the initial quote and produce <whatever> X says,
# "hi!", or not (producing <whatever> X says, ""hi!"). This also affects
# the @*wall and say commands.
chat_strip_quote yes


# Should strlen(%r) be 1 or 2? Turning this option on will allow %r to be
# used as a list delimiter, but might break formatting softcode that depends
# on its length being 2.
newline_one_char yes


# Should object names be restricted to just ascii characters, or can
# non-ascii (Accented letters, for example) be used as well if the
# mush'es locale permits? Not reccomended except for
# non-english-language games, as people with tend to have problems
# typing in those extra characters. @nameaccent is the preferred way to
# get fancy names.
only_ascii_in_names yes

###
### Default flags for newly created stuff
### To get multiple flags, you may repeat these directives:
###   player_flags flag1
###   player_flags flag2
### As of 1.7.7p6, you may also stack them on one directive:
###   player_flags flag1 flag2
###

# -- Default flags for exits

# Uncommenting this will cause the exit default to be DARK (like in TinyMUD):
#   no exits show up on the "Obvious exits" list.
# exit_flags dark

# Uncommenting this will cause all exits to be TRANSPARENT by default
#   (if you look through them, you will see the description of the next room)
# exit_flags transparent

# -- Default flags for rooms

# Uncommenting this will cause all rooms to be TRANSPARENT by default.
#   Each obvious exit in a transparent room is displayed on a line by
#   itself, in the format:
#   <Exit name> leads to <Destination name>
#   instead of having all exits strung out in one row.
# room_flags transparent

# Objects which are NO_COMMAND will not be checked for $commands. 
#   Making this a default may speed up your server somewhat. This is
#   definitely a good idea for rooms and players, and, depending on
#   the compostion of your database, probably a good idea for things.
room_flags no_command

# -- Default flags for players

# Players who are ENTER_OK can be given stuff.
player_flags enter_ok

# Players who are INHERIT allow all their objects to control them.
# player_flags inherit

# Players who are ANSI see attribute names hilighted.
player_flags ansi

# See the explanation for rooms and no_command.
player_flags no_command

# -- Default flags for things

# For example, you can't see through OPAQUE things.
# thing_flags opaque

# See the explanation for rooms and no_command.
thing_flags no_command

###
### Reserved command names, and command and function aliases are in
### alias.cnf
###
include alias.cnf

###
### Restrictions on command usage are in restrict.cnf
###
include restrict.cnf