===============
 configuration
===============

.. Copyright (c) 2004-2020 mudpy authors. Permission to use, copy,
   modify, and distribute this software is granted under terms
   provided in the LICENSE file distributed with this software.

.mudpy.filing
-------------

.mudpy.filing.groups
~~~~~~~~~~~~~~~~~~~~

dict, optional

Each item in the dict identifies options for the default backing
file of the group named in its key. The value is itself a dict with
its keys and values corresponding to those options (for now, only
``flags`` is implemented, with a value of ``private`` indicating it
should be readable only by the system user under which the mudpy
process is running).

Example::

  .mudpy.filing.groups:
      account:
          flags:
              - private

.mudpy.filing.prefix
~~~~~~~~~~~~~~~~~~~~

string, optional

This is the root path beneath which all relative file references,
including directories comprising the search path, are assumed to be
found. The default value of ``.`` indicates the current working
directory at the time the service was initially started.

Example::

  .mudpy.filing.prefix: .

.mudpy.filing.search
~~~~~~~~~~~~~~~~~~~~

list, required

Directories to search for expected data files. If not a fully
canonical path, this is assumed to be relative to the ``prefix``.

Example::

  .mudpy.filing.search:
      - ""
      - etc
      - share
      - data

.mudpy.filing.stash
~~~~~~~~~~~~~~~~~~~

string, required

This is the default directory where new data files will be written
if their full paths are not specified and they aren't already found
in the ``search`` list. If not a fully canonical path, this is
assumed to be relative to the ``prefix``.

Example::

  .mudpy.filing.stash: data

.mudpy.linguistic
-----------------

.mudpy.linguistic.actions
~~~~~~~~~~~~~~~~~~~~~~~~~

dict, optional

This is used to tailor the appearance of output generated by the
``say`` command and its relatives, so as to add some readability and
flavor. It matches a visible action to punctuation (ask, exclaim, et
cetera).

Example::

  .mudpy.linguistic.actions:
      ?: ask
      ",": begin
      -: begin
      :: begin
      ;: begin
      "!": exclaim
      ...: muse
      .: say

.mudpy.linguistic.default_punctuation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

string, optional

Unpunctuated statements made by actors should be assumed to
terminate with this value.

Example::

  .mudpy.linguistic.default_punctuation: .

.mudpy.linguistic.typos
~~~~~~~~~~~~~~~~~~~~~~~

dict, optional

Replacements for common typographical and capitalization errors.

Example::

  .mudpy.linguistic.typos:
      i: I
      i'd: I'd
      i'll: I'll
      i'm: I'm
      teh: the
      theyre: they're
      youre: you're

.mudpy.limit
------------

.mudpy.limit.admins
~~~~~~~~~~~~~~~~~~~

list, optional

The first users to create accounts with names in this list will
automatically be given full administrative privileges.

Example::

  .mudpy.limit.admins:
      - admin

.mudpy.limit.avatars
~~~~~~~~~~~~~~~~~~~~

int, required

This is the maximum number of avatars allowed for each account.

Example::

  .mudpy.limit.avatars: 7

.mudpy.limit.backups
~~~~~~~~~~~~~~~~~~~~

int, optional

This is the number of backups to keep and rotate when overwriting
data files. If unspecified or set to 0, no backup copies will be
made.

Example::

  .mudpy.limit.backups: 10

.mudpy.limit.debug
~~~~~~~~~~~~~~~~~~

bool, optional

Whether unsafe debugging functionality is enabled. If unspecified or
set to false, unsafe debugging functions will be disabled. Be very
careful enabling this feature, as debugging commands may allow service
administrators to run arbitrary shell commands or modify files
accessible to the system user under which the service is running.

Example::

  .mudpy.limit.debug: true

.mudpy.limit.password_tries
~~~~~~~~~~~~~~~~~~~~~~~~~~~

int, required

This is the maximum number of password failures allowed during the
login process. Once exceeded, the user will be disconnected.

Example::

  .mudpy.limit.password_tries: 3

.mudpy.log
----------

.mudpy.log.file
~~~~~~~~~~~~~~~

string, optional

If set, log messages will be recorded to this file.

Example::

  .mudpy.log.file: var/mudpy.log

.mudpy.log.lines
~~~~~~~~~~~~~~~~

int, optional

Number of log entries to keep in memory (the oldest are
discarded)... If unset or 0, none will be written to mudpy's
internal memory.

Example::

  .mudpy.log.lines: 1000

.mudpy.log.stdout
~~~~~~~~~~~~~~~~~

bool, optional

If set to ``yes``, messages will be logged to the standard output of
the mudpy process. If unspecified, the default is ``no``.

Example::

  .mudpy.log.stdout: true

.mudpy.log.syslog
~~~~~~~~~~~~~~~~~

string, optional

If set, mudpy will send messages to the system log, and under the
name specified by this value (Unix derivatives only).

Example::

  .mudpy.log.syslog: mudpy

.mudpy.movement
---------------

.mudpy.movement.*.enter_term
~~~~~~~~~~~~~~~~~~~~~~~~~~~~

string, multiple

Word or words describing the direction from where you are seen to
enter the next room when moving.

Example::

  .mudpy.movement.down.enter_term: above
  .mudpy.movement.east.enter_term: the west
  .mudpy.movement.north.enter_term: the south
  .mudpy.movement.south.enter_term: the north
  .mudpy.movement.up.enter_term: below
  .mudpy.movement.west.enter_term: the east

.mudpy.movement.*.exit_term
~~~~~~~~~~~~~~~~~~~~~~~~~~~

string, multiple

Word or words describing the direction where you are seen to exit
the current room when moving.

Example::

  .mudpy.movement.down.exit_term: downward
  .mudpy.movement.east.exit_term: to the east
  .mudpy.movement.north.exit_term: to the north
  .mudpy.movement.south.exit_term: to the south
  .mudpy.movement.up.exit_term: upward
  .mudpy.movement.west.exit_term: to the west

.mudpy.movement.*.vector
~~~~~~~~~~~~~~~~~~~~~~~~

triplet, multiple

Vector of signed integer units for use in vector addition to derive
the destination coordinates from the current coordinates when moving
through a gridlink exit. The example coordinate system used is left
handed (east, north and up are positive, west, south and down are
negative) and three-dimensional with a tuple component order of
(longitude, latitude, altitude).

Example::

  .mudpy.movement.down.vector: [0, 0, -1]
  .mudpy.movement.east.vector: [1, 0, 0]
  .mudpy.movement.north.vector: [0, 1, 0]
  .mudpy.movement.south.vector: [0, -1, 0]
  .mudpy.movement.up.vector: [0, 0, 1]
  .mudpy.movement.west.vector: [-1, 0, 0]

.mudpy.network
--------------

.mudpy.network.host
~~~~~~~~~~~~~~~~~~~

string, optional

The IP address on which to listen. If unspecified, the default is
all available addresses.

Example::

  .mudpy.network.host: ::1

.mudpy.network.port
~~~~~~~~~~~~~~~~~~~

int, required

The TCP port on which to listen.

Example::

  .mudpy.network.port: 4000

.mudpy.process
--------------

.mudpy.process.daemon
~~~~~~~~~~~~~~~~~~~~~

bool, optional

If set to ``yes``, mudpy will immediately fork and detach a child to
become a daemon process, then close all open file descriptors and
terminate the parent process (Unix derivatives only). The default
value is ``no``.

Example::

  .mudpy.process.daemon: true

.mudpy.process.pidfile
~~~~~~~~~~~~~~~~~~~~~~

string, optional

If set, this filename will contain the daemon's process ID (Unix
derivatives only).

Example::

  .mudpy.process.pidfile: var/mudpy.pid

.mudpy.timing
-------------

.mudpy.timing.idle.disconnect.*
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

int, multiple

This value indicates the number of increments allowed to pass
without input on a socket connection before it is terminated. This
avoids accumulation of dead sockets which could otherwise max out
allowed file descriptors. The differentiators are either ``default``
or a state name used to override the default value for that specific
state (``active``, ``entering_account_name``, et cetera).

Example::

  .mudpy.timing.idle.disconnect.active: 6048000
  .mudpy.timing.idle.disconnect.default: 6000
  .mudpy.timing.idle.disconnect.entering_account_name: 600

.mudpy.timing.idle.warn.*
~~~~~~~~~~~~~~~~~~~~~~~~~

int, multiple

This value indicates the number of increments allowed to pass
without input on a socket connection before it is warned that
termination is imminent. The differentiators are either
``default`` or a state name used to override the default value
for that specific state. It is recommended that this be less than
the corresponding ``.mudpy.timing.idle.disconnect.*`` value.

Example::

  .mudpy.timing.idle.warn.active: 5040000
  .mudpy.timing.idle.warn.default: 5000
  .mudpy.timing.idle.warn.entering_account_name: 500

.mudpy.timing.increment
~~~~~~~~~~~~~~~~~~~~~~~

float, required

This value indicates the number of real system clock seconds (or
more commonly, fraction thereof) each pass through the main loop is
intended to take. This roughly sets the frequency with which queued
socket I/O operations are performed, pending events are triggered,
and directly impacts the speed at which virtual time passes within
the simulation.

Example::

  .mudpy.timing.increment: 0.1

.mudpy.timing.save
~~~~~~~~~~~~~~~~~~

int, required

Number of increments between updates of changed persistent data
storage.

Example::

  .mudpy.timing.save: 600

.mudpy.timing.status
~~~~~~~~~~~~~~~~~~~~

int, optional

Number of increments to wait between logging mudpy status messages.
If unspecified or set to 0, no mudpy status messages will be
written.

Example::

  .mudpy.timing.status: 6000

.mudpy.user
-----------

.mudpy.user.pref_admin
~~~~~~~~~~~~~~~~~~~~~~

list, optional

This can be used to list facets an administrative user is allowed to
set or override on their own ``account`` element, in addition to any
in the `.mudpy.user.pref_allow`_ list. Note that this is merely a
convenience, as an administrator is already able to call the ``set``
command to set values for facets of any element.

Example::

  .mudpy.user.pref_admin:
      - loglevel

.mudpy.user.pref_allow
~~~~~~~~~~~~~~~~~~~~~~

list, optional

This can be used to list facets any user is allowed to set or
override on their own ``account`` element with the ``preference``
command.

Example::

  .mudpy.user.pref_allow:
      - prompt
