mirror of
https://github.com/evennia/evennia.git
synced 2026-03-18 05:46:31 +01:00
1368 lines
No EOL
127 KiB
HTML
1368 lines
No EOL
127 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
|
|
|
|
<title>Evennia Default settings file — Evennia 2.x documentation</title>
|
|
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
|
|
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
|
|
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
|
|
<script src="../_static/jquery.js"></script>
|
|
<script src="../_static/underscore.js"></script>
|
|
<script src="../_static/doctools.js"></script>
|
|
<script src="../_static/language_data.js"></script>
|
|
<link rel="shortcut icon" href="../_static/favicon.ico"/>
|
|
<link rel="index" title="Index" href="../genindex.html" />
|
|
<link rel="search" title="Search" href="../search.html" />
|
|
<link rel="next" title="Choosing a database" href="Choosing-a-Database.html" />
|
|
<link rel="prev" title="Changing Game Settings" href="Settings.html" />
|
|
</head><body>
|
|
|
|
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../genindex.html" title="General Index"
|
|
accesskey="I">index</a></li>
|
|
<li class="right" >
|
|
<a href="../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="right" >
|
|
<a href="Choosing-a-Database.html" title="Choosing a database"
|
|
accesskey="N">next</a> |</li>
|
|
<li class="right" >
|
|
<a href="Settings.html" title="Changing Game Settings"
|
|
accesskey="P">previous</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 2.x</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" accesskey="U">Server Setup and Life</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">Evennia Default settings file</a></li>
|
|
</ul>
|
|
</div>
|
|
|
|
|
|
|
|
|
|
|
|
<div class="document">
|
|
|
|
<div class="documentwrapper">
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../index.html">
|
|
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script>
|
|
<h4>Previous topic</h4>
|
|
<p class="topless"><a href="Settings.html"
|
|
title="previous chapter">Changing Game Settings</a></p>
|
|
<h4>Next topic</h4>
|
|
<p class="topless"><a href="Choosing-a-Database.html"
|
|
title="next chapter">Choosing a database</a></p>
|
|
<div role="note" aria-label="source link">
|
|
<!--h3>This Page</h3-->
|
|
<ul class="this-page-menu">
|
|
<li><a href="../_sources/Setup/Settings-Default.md.txt"
|
|
rel="nofollow">Show Page Source</a></li>
|
|
</ul>
|
|
</div><h3>Links</h3>
|
|
<ul>
|
|
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
|
|
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
|
|
<li><a href="https://github.com/evennia/evennia">Github</a> </li>
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
|
<li>
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<section class="tex2jax_ignore mathjax_ignore" id="evennia-default-settings-file">
|
|
<h1>Evennia Default settings file<a class="headerlink" href="#evennia-default-settings-file" title="Permalink to this headline">¶</a></h1>
|
|
<p>Master file is located at <code class="docutils literal notranslate"><span class="pre">evennia/evennia/settings_default.py</span></code>. Read
|
|
its comments to see what each setting does and copy only what you want
|
|
to change into <code class="docutils literal notranslate"><span class="pre">mygame/server/conf/settings.py</span></code>.</p>
|
|
<p>Example of accessing settings:</p>
|
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
|
|
|
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">SERVERNAME</span> <span class="o">==</span> <span class="s2">"Evennia"</span><span class="p">:</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Yay!"</span><span class="p">)</span>
|
|
</pre></div>
|
|
</div>
|
|
<hr class="docutils" />
|
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="sd">"""</span>
|
|
<span class="sd">Master configuration file for Evennia.</span>
|
|
|
|
<span class="sd">NOTE: NO MODIFICATIONS SHOULD BE MADE TO THIS FILE!</span>
|
|
|
|
<span class="sd">All settings changes should be done by copy-pasting the variable and</span>
|
|
<span class="sd">its value to <gamedir>/server/conf/settings.py.</span>
|
|
|
|
<span class="sd">Hint: Don't copy&paste over more from this file than you actually want</span>
|
|
<span class="sd">to change. Anything you don't copy&paste will thus retain its default</span>
|
|
<span class="sd">value - which may change as Evennia is developed. This way you can</span>
|
|
<span class="sd">always be sure of what you have changed and what is default behaviour.</span>
|
|
|
|
<span class="sd">"""</span>
|
|
<span class="kn">import</span> <span class="nn">os</span>
|
|
<span class="kn">import</span> <span class="nn">sys</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">django.contrib.messages</span> <span class="kn">import</span> <span class="n">constants</span> <span class="k">as</span> <span class="n">messages</span>
|
|
<span class="kn">from</span> <span class="nn">django.urls</span> <span class="kn">import</span> <span class="n">reverse_lazy</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Evennia base server config</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># This is the name of your game. Make it catchy!</span>
|
|
<span class="n">SERVERNAME</span> <span class="o">=</span> <span class="s2">"Evennia"</span>
|
|
<span class="c1"># Short one-sentence blurb describing your game. Shown under the title</span>
|
|
<span class="c1"># on the website and could be used in online listings of your game etc.</span>
|
|
<span class="n">GAME_SLOGAN</span> <span class="o">=</span> <span class="s2">"The Python MUD/MU* creation system"</span>
|
|
<span class="c1"># The url address to your server, like mymudgame.com. This should be the publicly</span>
|
|
<span class="c1"># visible location. This is used e.g. on the web site to show how you connect to the</span>
|
|
<span class="c1"># game over telnet. Default is localhost (only on your machine).</span>
|
|
<span class="n">SERVER_HOSTNAME</span> <span class="o">=</span> <span class="s2">"localhost"</span>
|
|
<span class="c1"># Lockdown mode will cut off the game from any external connections</span>
|
|
<span class="c1"># and only allow connections from localhost. Requires a cold reboot.</span>
|
|
<span class="n">LOCKDOWN_MODE</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Controls whether new account registration is available.</span>
|
|
<span class="c1"># Set to False to lock down the registration page and the create account command.</span>
|
|
<span class="n">NEW_ACCOUNT_REGISTRATION_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># Activate telnet service</span>
|
|
<span class="n">TELNET_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># A list of ports the Evennia telnet server listens on Can be one or many.</span>
|
|
<span class="n">TELNET_PORTS</span> <span class="o">=</span> <span class="p">[</span><span class="mi">4000</span><span class="p">]</span>
|
|
<span class="c1"># Interface addresses to listen to. If 0.0.0.0, listen to all. Use :: for IPv6.</span>
|
|
<span class="n">TELNET_INTERFACES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"0.0.0.0"</span><span class="p">]</span>
|
|
<span class="c1"># Activate Telnet+SSL protocol (SecureSocketLibrary) for supporting clients</span>
|
|
<span class="n">SSL_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Ports to use for Telnet+SSL</span>
|
|
<span class="n">SSL_PORTS</span> <span class="o">=</span> <span class="p">[</span><span class="mi">4003</span><span class="p">]</span>
|
|
<span class="c1"># Telnet+SSL Interface addresses to listen to. If 0.0.0.0, listen to all. Use :: for IPv6.</span>
|
|
<span class="n">SSL_INTERFACES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"0.0.0.0"</span><span class="p">]</span>
|
|
<span class="c1"># OOB (out-of-band) telnet communication allows Evennia to communicate</span>
|
|
<span class="c1"># special commands and data with enabled Telnet clients. This is used</span>
|
|
<span class="c1"># to create custom client interfaces over a telnet connection. To make</span>
|
|
<span class="c1"># full use of OOB, you need to prepare functions to handle the data</span>
|
|
<span class="c1"># server-side (see INPUT_FUNC_MODULES). TELNET_ENABLED is required for this</span>
|
|
<span class="c1"># to work.</span>
|
|
<span class="n">TELNET_OOB_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Activate SSH protocol communication (SecureShell)</span>
|
|
<span class="n">SSH_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Ports to use for SSH</span>
|
|
<span class="n">SSH_PORTS</span> <span class="o">=</span> <span class="p">[</span><span class="mi">4004</span><span class="p">]</span>
|
|
<span class="c1"># Interface addresses to listen to. If 0.0.0.0, listen to all. Use :: for IPv6.</span>
|
|
<span class="n">SSH_INTERFACES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"0.0.0.0"</span><span class="p">]</span>
|
|
<span class="c1"># Start the evennia django+twisted webserver so you can</span>
|
|
<span class="c1"># browse the evennia website and the admin interface</span>
|
|
<span class="c1"># (Obs - further web configuration can be found below</span>
|
|
<span class="c1"># in the section 'Config for Django web features')</span>
|
|
<span class="n">WEBSERVER_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># This is a security setting protecting against host poisoning</span>
|
|
<span class="c1"># attacks. It defaults to allowing all. In production, make</span>
|
|
<span class="c1"># sure to change this to your actual host addresses/IPs.</span>
|
|
<span class="n">ALLOWED_HOSTS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"*"</span><span class="p">]</span>
|
|
<span class="c1"># The webserver sits behind a Portal proxy. This is a list</span>
|
|
<span class="c1"># of tuples (proxyport,serverport) used. The proxyports are what</span>
|
|
<span class="c1"># the Portal proxy presents to the world. The serverports are</span>
|
|
<span class="c1"># the internal ports the proxy uses to forward data to the Server-side</span>
|
|
<span class="c1"># webserver (these should not be publicly open)</span>
|
|
<span class="n">WEBSERVER_PORTS</span> <span class="o">=</span> <span class="p">[(</span><span class="mi">4001</span><span class="p">,</span> <span class="mi">4005</span><span class="p">)]</span>
|
|
<span class="c1"># Interface addresses to listen to. If 0.0.0.0, listen to all. Use :: for IPv6.</span>
|
|
<span class="n">WEBSERVER_INTERFACES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"0.0.0.0"</span><span class="p">]</span>
|
|
<span class="c1"># IP addresses that may talk to the server in a reverse proxy configuration,</span>
|
|
<span class="c1"># like NginX.</span>
|
|
<span class="n">UPSTREAM_IPS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"127.0.0.1"</span><span class="p">]</span>
|
|
<span class="c1"># The webserver uses threadpool for handling requests. This will scale</span>
|
|
<span class="c1"># with server load. Set the minimum and maximum number of threads it</span>
|
|
<span class="c1"># may use as (min, max) (must be > 0)</span>
|
|
<span class="n">WEBSERVER_THREADPOOL_LIMITS</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">)</span>
|
|
<span class="c1"># Start the evennia webclient. This requires the webserver to be running and</span>
|
|
<span class="c1"># offers the fallback ajax-based webclient backbone for browsers not supporting</span>
|
|
<span class="c1"># the websocket one.</span>
|
|
<span class="n">WEBCLIENT_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># Activate Websocket support for modern browsers. If this is on, the</span>
|
|
<span class="c1"># default webclient will use this and only use the ajax version if the browser</span>
|
|
<span class="c1"># is too old to support websockets. Requires WEBCLIENT_ENABLED.</span>
|
|
<span class="n">WEBSOCKET_CLIENT_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># Server-side websocket port to open for the webclient. Note that this value will</span>
|
|
<span class="c1"># be dynamically encoded in the webclient html page to allow the webclient to call</span>
|
|
<span class="c1"># home. If the external encoded value needs to be different than this, due to</span>
|
|
<span class="c1"># working through a proxy or docker port-remapping, the environment variable</span>
|
|
<span class="c1"># WEBCLIENT_CLIENT_PROXY_PORT can be used to override this port only for the</span>
|
|
<span class="c1"># front-facing client's sake.</span>
|
|
<span class="n">WEBSOCKET_CLIENT_PORT</span> <span class="o">=</span> <span class="mi">4002</span>
|
|
<span class="c1"># Interface addresses to listen to. If 0.0.0.0, listen to all. Use :: for IPv6.</span>
|
|
<span class="n">WEBSOCKET_CLIENT_INTERFACE</span> <span class="o">=</span> <span class="s2">"0.0.0.0"</span>
|
|
<span class="c1"># Actual URL for webclient component to reach the websocket. You only need</span>
|
|
<span class="c1"># to set this if you know you need it, like using some sort of proxy setup.</span>
|
|
<span class="c1"># If given it must be on the form "ws[s]://hostname[:port]". If left at None,</span>
|
|
<span class="c1"># the client will itself figure out this url based on the server's hostname.</span>
|
|
<span class="c1"># e.g. ws://external.example.com or wss://external.example.com:443</span>
|
|
<span class="n">WEBSOCKET_CLIENT_URL</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="c1"># This determine's whether Evennia's custom admin page is used, or if the</span>
|
|
<span class="c1"># standard Django admin is used.</span>
|
|
<span class="n">EVENNIA_ADMIN</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># The Server opens an AMP port so that the portal can</span>
|
|
<span class="c1"># communicate with it. This is an internal functionality of Evennia, usually</span>
|
|
<span class="c1"># operating between two processes on the same machine. You usually don't need to</span>
|
|
<span class="c1"># change this unless you cannot use the default AMP port/host for</span>
|
|
<span class="c1"># whatever reason.</span>
|
|
<span class="n">AMP_HOST</span> <span class="o">=</span> <span class="s2">"localhost"</span>
|
|
<span class="n">AMP_PORT</span> <span class="o">=</span> <span class="mi">4006</span>
|
|
<span class="n">AMP_INTERFACE</span> <span class="o">=</span> <span class="s2">"127.0.0.1"</span>
|
|
|
|
|
|
<span class="c1"># Path to the lib directory containing the bulk of the codebase's code.</span>
|
|
<span class="n">EVENNIA_DIR</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">dirname</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">abspath</span><span class="p">(</span><span class="vm">__file__</span><span class="p">))</span>
|
|
<span class="c1"># Path to the game directory (containing the server/conf/settings.py file)</span>
|
|
<span class="c1"># This is dynamically created- there is generally no need to change this!</span>
|
|
<span class="k">if</span> <span class="n">EVENNIA_DIR</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">or</span> <span class="p">(</span>
|
|
<span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"test"</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sys</span><span class="o">.</span><span class="n">argv</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">False</span>
|
|
<span class="p">):</span>
|
|
<span class="c1"># unittesting mode</span>
|
|
<span class="n">GAME_DIR</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Fallback location (will be replaced by the actual game dir at runtime)</span>
|
|
<span class="n">GAME_DIR</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_DIR</span><span class="p">,</span> <span class="s2">"game_template"</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
|
|
<span class="n">gpath</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">getcwd</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="s2">"server"</span> <span class="ow">in</span> <span class="n">os</span><span class="o">.</span><span class="n">listdir</span><span class="p">(</span><span class="n">gpath</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="s2">"server"</span><span class="p">,</span> <span class="s2">"conf"</span><span class="p">,</span> <span class="s2">"settings.py"</span><span class="p">)):</span>
|
|
<span class="n">GAME_DIR</span> <span class="o">=</span> <span class="n">gpath</span>
|
|
<span class="k">break</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">chdir</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">pardir</span><span class="p">)</span>
|
|
<span class="c1"># Place to put log files, how often to rotate the log and how big each log file</span>
|
|
<span class="c1"># may become before rotating.</span>
|
|
<span class="n">LOG_DIR</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"server"</span><span class="p">,</span> <span class="s2">"logs"</span><span class="p">)</span>
|
|
<span class="n">SERVER_LOG_FILE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">LOG_DIR</span><span class="p">,</span> <span class="s2">"server.log"</span><span class="p">)</span>
|
|
<span class="n">SERVER_LOG_DAY_ROTATION</span> <span class="o">=</span> <span class="mi">7</span>
|
|
<span class="n">SERVER_LOG_MAX_SIZE</span> <span class="o">=</span> <span class="mi">1000000</span>
|
|
<span class="n">PORTAL_LOG_FILE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">LOG_DIR</span><span class="p">,</span> <span class="s2">"portal.log"</span><span class="p">)</span>
|
|
<span class="n">PORTAL_LOG_DAY_ROTATION</span> <span class="o">=</span> <span class="mi">7</span>
|
|
<span class="n">PORTAL_LOG_MAX_SIZE</span> <span class="o">=</span> <span class="mi">1000000</span>
|
|
<span class="c1"># The http log is usually only for debugging since it's very spammy</span>
|
|
<span class="n">HTTP_LOG_FILE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">LOG_DIR</span><span class="p">,</span> <span class="s2">"http_requests.log"</span><span class="p">)</span>
|
|
<span class="c1"># if this is set to the empty string, lockwarnings will be turned off.</span>
|
|
<span class="n">LOCKWARNING_LOG_FILE</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">LOG_DIR</span><span class="p">,</span> <span class="s2">"lockwarnings.log"</span><span class="p">)</span>
|
|
<span class="c1"># Number of lines to append to rotating channel logs when they rotate</span>
|
|
<span class="n">CHANNEL_LOG_NUM_TAIL_LINES</span> <span class="o">=</span> <span class="mi">20</span>
|
|
<span class="c1"># Max size (in bytes) of channel log files before they rotate.</span>
|
|
<span class="c1"># Minimum is 1000 (1kB) but should usually be larger.</span>
|
|
<span class="n">CHANNEL_LOG_ROTATE_SIZE</span> <span class="o">=</span> <span class="mi">1000000</span>
|
|
<span class="c1"># Unused by default, but used by e.g. the MapSystem contrib. A place for storing</span>
|
|
<span class="c1"># semi-permanent data and avoid it being rebuilt over and over. It is created</span>
|
|
<span class="c1"># on-demand only.</span>
|
|
<span class="n">CACHE_DIR</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"server"</span><span class="p">,</span> <span class="s2">".cache"</span><span class="p">)</span>
|
|
<span class="c1"># Local time zone for this installation. All choices can be found here:</span>
|
|
<span class="c1"># http://www.postgresql.org/docs/8.0/interactive/datetime-keywords.html#DATETIME-TIMEZONE-SET-TABLE</span>
|
|
<span class="n">TIME_ZONE</span> <span class="o">=</span> <span class="s2">"UTC"</span>
|
|
<span class="c1"># Activate time zone in datetimes</span>
|
|
<span class="n">USE_TZ</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># Authentication backends. This is the code used to authenticate a user.</span>
|
|
<span class="n">AUTHENTICATION_BACKENDS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"evennia.web.utils.backends.CaseInsensitiveModelBackend"</span><span class="p">]</span>
|
|
<span class="c1"># Language code for this installation. All choices can be found here:</span>
|
|
<span class="c1"># http://www.w3.org/TR/REC-html40/struct/dirlang.html#langcodes</span>
|
|
<span class="n">LANGUAGE_CODE</span> <span class="o">=</span> <span class="s2">"en-us"</span>
|
|
<span class="c1"># How long time (in seconds) a user may idle before being logged</span>
|
|
<span class="c1"># out. This can be set as big as desired. A user may avoid being</span>
|
|
<span class="c1"># thrown off by sending the empty system command 'idle' to the server</span>
|
|
<span class="c1"># at regular intervals. Set <=0 to deactivate idle timeout completely.</span>
|
|
<span class="n">IDLE_TIMEOUT</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
|
<span class="c1"># The idle command can be sent to keep your session active without actually</span>
|
|
<span class="c1"># having to spam normal commands regularly. It gives no feedback, only updates</span>
|
|
<span class="c1"># the idle timer. Note that "idle" will *always* work, even if a different</span>
|
|
<span class="c1"># command-name is given here; this is because the webclient needs a default</span>
|
|
<span class="c1"># to send to avoid proxy timeouts.</span>
|
|
<span class="n">IDLE_COMMAND</span> <span class="o">=</span> <span class="s2">"idle"</span>
|
|
<span class="c1"># The set of encodings tried. An Account object may set an attribute "encoding" on</span>
|
|
<span class="c1"># itself to match the client used. If not set, or wrong encoding is</span>
|
|
<span class="c1"># given, this list is tried, in order, aborting on the first match.</span>
|
|
<span class="c1"># Add sets for languages/regions your accounts are likely to use.</span>
|
|
<span class="c1"># (see http://en.wikipedia.org/wiki/Character_encoding)</span>
|
|
<span class="c1"># Telnet default encoding, unless specified by the client, will be ENCODINGS[0].</span>
|
|
<span class="n">ENCODINGS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"utf-8"</span><span class="p">,</span> <span class="s2">"latin-1"</span><span class="p">,</span> <span class="s2">"ISO-8859-1"</span><span class="p">]</span>
|
|
<span class="c1"># Regular expression applied to all output to a given session in order</span>
|
|
<span class="c1"># to strip away characters (usually various forms of decorations) for the benefit</span>
|
|
<span class="c1"># of users with screen readers. Note that ANSI/MXP doesn't need to</span>
|
|
<span class="c1"># be stripped this way, that is handled automatically.</span>
|
|
<span class="n">SCREENREADER_REGEX_STRIP</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"\+-+|\+$|\+~|--+|~~+|==+"</span>
|
|
<span class="c1"># MXP support means the ability to show clickable links in the client. Clicking</span>
|
|
<span class="c1"># the link will execute a game command. It's a way to add mouse input to the game.</span>
|
|
<span class="n">MXP_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># If this is set, MXP can only be sent by the server and not added from the</span>
|
|
<span class="c1"># client side. Disabling this is a potential security risk because it could</span>
|
|
<span class="c1"># allow malevolent players to lure others to execute commands they did not</span>
|
|
<span class="c1"># intend to.</span>
|
|
<span class="n">MXP_OUTGOING_ONLY</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># Database objects are cached in what is known as the idmapper. The idmapper</span>
|
|
<span class="c1"># caching results in a massive speedup of the server (since it dramatically</span>
|
|
<span class="c1"># limits the number of database accesses needed) and also allows for</span>
|
|
<span class="c1"># storing temporary data on objects. It is however also the main memory</span>
|
|
<span class="c1"># consumer of Evennia. With this setting the cache can be capped and</span>
|
|
<span class="c1"># flushed when it reaches a certain size. Minimum is 50 MB but it is</span>
|
|
<span class="c1"># not recommended to set this to less than 100 MB for a distribution</span>
|
|
<span class="c1"># system.</span>
|
|
<span class="c1"># Empirically, N_objects_in_cache ~ ((RMEM - 35) / 0.0157):</span>
|
|
<span class="c1"># mem(MB) | objs in cache || mem(MB) | objs in cache</span>
|
|
<span class="c1"># 50 | ~1000 || 800 | ~49 000</span>
|
|
<span class="c1"># 100 | ~4000 || 1200 | ~75 000</span>
|
|
<span class="c1"># 200 | ~10 000 || 1600 | ~100 000</span>
|
|
<span class="c1"># 500 | ~30 000 || 2000 | ~125 000</span>
|
|
<span class="c1"># Note that the estimated memory usage is not exact (and the cap is only</span>
|
|
<span class="c1"># checked every 5 minutes), so err on the side of caution if</span>
|
|
<span class="c1"># running on a server with limited memory. Also note that Python</span>
|
|
<span class="c1"># will not necessarily return the memory to the OS when the idmapper</span>
|
|
<span class="c1"># flashes (the memory will be freed and made available to the Python</span>
|
|
<span class="c1"># process only). How many objects need to be in memory at any given</span>
|
|
<span class="c1"># time depends very much on your game so some experimentation may</span>
|
|
<span class="c1"># be necessary (use @server to see how many objects are in the idmapper</span>
|
|
<span class="c1"># cache at any time). Setting this to None disables the cache cap.</span>
|
|
<span class="n">IDMAPPER_CACHE_MAXSIZE</span> <span class="o">=</span> <span class="mi">200</span> <span class="c1"># (MB)</span>
|
|
<span class="c1"># This determines how many connections per second the Portal should</span>
|
|
<span class="c1"># accept, as a DoS countermeasure. If the rate exceeds this number, incoming</span>
|
|
<span class="c1"># connections will be queued to this rate, so none will be lost.</span>
|
|
<span class="c1"># Must be set to a value > 0.</span>
|
|
<span class="n">MAX_CONNECTION_RATE</span> <span class="o">=</span> <span class="mi">2</span>
|
|
<span class="c1"># Determine how many commands per second a given Session is allowed</span>
|
|
<span class="c1"># to send to the Portal via a connected protocol. Too high rate will</span>
|
|
<span class="c1"># drop the command and echo a warning. Note that this will also cap</span>
|
|
<span class="c1"># OOB messages so don't set it too low if you expect a lot of events</span>
|
|
<span class="c1"># from the client! To turn the limiter off, set to <= 0.</span>
|
|
<span class="n">MAX_COMMAND_RATE</span> <span class="o">=</span> <span class="mi">80</span>
|
|
<span class="c1"># The warning to echo back to users if they send commands too fast</span>
|
|
<span class="n">COMMAND_RATE_WARNING</span> <span class="o">=</span> <span class="s2">"You entered commands too fast. Wait a moment and try again."</span>
|
|
<span class="c1"># custom, extra commands to add to the `evennia` launcher. This is a dict</span>
|
|
<span class="c1"># of {'cmdname': 'path.to.callable', ...}, where the callable will be passed</span>
|
|
<span class="c1"># any extra args given on the command line. For example `evennia cmdname foo bar`.</span>
|
|
<span class="n">EXTRA_LAUNCHER_COMMANDS</span> <span class="o">=</span> <span class="p">{}</span>
|
|
|
|
<span class="c1"># Determine how large of a string can be sent to the server in number</span>
|
|
<span class="c1"># of characters. If they attempt to enter a string over this character</span>
|
|
<span class="c1"># limit, we stop them and send a message. To make unlimited, set to</span>
|
|
<span class="c1"># 0 or less.</span>
|
|
<span class="n">MAX_CHAR_LIMIT</span> <span class="o">=</span> <span class="mi">6000</span>
|
|
<span class="c1"># The warning to echo back to users if they enter a very large string</span>
|
|
<span class="n">MAX_CHAR_LIMIT_WARNING</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"You entered a string that was too long. Please break it up into multiple parts."</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># If this is true, errors and tracebacks from the engine will be</span>
|
|
<span class="c1"># echoed as text in-game as well as to the log. This can speed up</span>
|
|
<span class="c1"># debugging. OBS: Showing full tracebacks to regular users could be a</span>
|
|
<span class="c1"># security problem -turn this off in a production game!</span>
|
|
<span class="n">IN_GAME_ERRORS</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># Broadcast "Server restart"-like messages to all sessions.</span>
|
|
<span class="n">BROADCAST_SERVER_RESTART_MESSAGES</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Evennia Database config</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Database config syntax:</span>
|
|
<span class="c1"># ENGINE - path to the the database backend. Possible choices are:</span>
|
|
<span class="c1"># 'django.db.backends.sqlite3', (default)</span>
|
|
<span class="c1"># 'django.db.backends.mysql',</span>
|
|
<span class="c1"># 'django.db.backends.postgresql',</span>
|
|
<span class="c1"># 'django.db.backends.oracle' (untested).</span>
|
|
<span class="c1"># NAME - database name, or path to the db file for sqlite3</span>
|
|
<span class="c1"># USER - db admin (unused in sqlite3)</span>
|
|
<span class="c1"># PASSWORD - db admin password (unused in sqlite3)</span>
|
|
<span class="c1"># HOST - empty string is localhost (unused in sqlite3)</span>
|
|
<span class="c1"># PORT - empty string defaults to localhost (unused in sqlite3)</span>
|
|
<span class="n">DATABASES</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"default"</span><span class="p">:</span> <span class="p">{</span>
|
|
<span class="s2">"ENGINE"</span><span class="p">:</span> <span class="s2">"django.db.backends.sqlite3"</span><span class="p">,</span>
|
|
<span class="s2">"NAME"</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">getenv</span><span class="p">(</span><span class="s2">"TEST_DB_PATH"</span><span class="p">,</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"server"</span><span class="p">,</span> <span class="s2">"evennia.db3"</span><span class="p">)),</span>
|
|
<span class="s2">"USER"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="s2">"PASSWORD"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="s2">"HOST"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="s2">"PORT"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="p">}</span>
|
|
<span class="c1"># How long the django-database connection should be kept open, in seconds.</span>
|
|
<span class="c1"># If you get errors about the database having gone away after long idle</span>
|
|
<span class="c1"># periods, shorten this value (e.g. MySQL defaults to a timeout of 8 hrs)</span>
|
|
<span class="n">CONN_MAX_AGE</span> <span class="o">=</span> <span class="mi">3600</span> <span class="o">*</span> <span class="mi">7</span>
|
|
<span class="c1"># When removing or renaming models, such models stored in Attributes may</span>
|
|
<span class="c1"># become orphaned and will return as None. If the change is a rename (that</span>
|
|
<span class="c1"># is, there is a 1:1 pk mapping between the old and the new), the unserializer</span>
|
|
<span class="c1"># can convert old to new when retrieving them. This is a list of tuples</span>
|
|
<span class="c1"># (old_natural_key, new_natural_key). Note that Django ContentTypes'</span>
|
|
<span class="c1"># natural_keys are themselves tuples (appname, modelname). Creation-dates will</span>
|
|
<span class="c1"># not be checked for models specified here. If new_natural_key does not exist,</span>
|
|
<span class="c1"># `None` will be returned and stored back as if no replacement was set.</span>
|
|
<span class="n">ATTRIBUTE_STORED_MODEL_RENAME</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="p">((</span><span class="s2">"players"</span><span class="p">,</span> <span class="s2">"playerdb"</span><span class="p">),</span> <span class="p">(</span><span class="s2">"accounts"</span><span class="p">,</span> <span class="s2">"accountdb"</span><span class="p">)),</span>
|
|
<span class="p">((</span><span class="s2">"typeclasses"</span><span class="p">,</span> <span class="s2">"defaultplayer"</span><span class="p">),</span> <span class="p">(</span><span class="s2">"typeclasses"</span><span class="p">,</span> <span class="s2">"defaultaccount"</span><span class="p">)),</span>
|
|
<span class="p">]</span>
|
|
<span class="c1"># Default type of autofield (required by Django), which defines the type of</span>
|
|
<span class="c1"># primary key fields for all tables. This type is guaranteed to be at least a</span>
|
|
<span class="c1"># 64-bit integer.</span>
|
|
<span class="n">DEFAULT_AUTO_FIELD</span> <span class="o">=</span> <span class="s2">"django.db.models.BigAutoField"</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Evennia webclient options</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># default webclient options (without user changing it)</span>
|
|
<span class="n">WEBCLIENT_OPTIONS</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="c1"># Gags prompts in output window and puts them on the input bar</span>
|
|
<span class="s2">"gagprompt"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="c1"># Shows help files in a new popup window instead of in-pane</span>
|
|
<span class="s2">"helppopup"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="c1"># Shows notifications of new messages as popup windows</span>
|
|
<span class="s2">"notification_popup"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="c1"># Plays a sound for notifications of new messages</span>
|
|
<span class="s2">"notification_sound"</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Evennia pluggable modules</span>
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Plugin modules extend Evennia in various ways. In the cases with no</span>
|
|
<span class="c1"># existing default, there are examples of many of these modules</span>
|
|
<span class="c1"># in contrib/examples.</span>
|
|
|
|
<span class="c1"># The command parser module to use. See the default module for which</span>
|
|
<span class="c1"># functions it must implement</span>
|
|
<span class="n">COMMAND_PARSER</span> <span class="o">=</span> <span class="s2">"evennia.commands.cmdparser.cmdparser"</span>
|
|
<span class="c1"># On a multi-match when search objects or commands, the user has the</span>
|
|
<span class="c1"># ability to search again with an index marker that differentiates</span>
|
|
<span class="c1"># the results. If multiple "box" objects</span>
|
|
<span class="c1"># are found, they can by default be separated as 1-box, 2-box. Below you</span>
|
|
<span class="c1"># can change the regular expression used. The regex must have one</span>
|
|
<span class="c1"># have two capturing groups (?P<number>...) and (?P<name>...) - the default</span>
|
|
<span class="c1"># parser expects this. It should also involve a number starting from 1.</span>
|
|
<span class="c1"># When changing this you must also update SEARCH_MULTIMATCH_TEMPLATE</span>
|
|
<span class="c1"># to properly describe the syntax.</span>
|
|
<span class="n">SEARCH_MULTIMATCH_REGEX</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"(?P<name>[^-]*)-(?P<number>[0-9]+)(?P<args>.*)"</span>
|
|
<span class="c1"># To display multimatch errors in various listings we must display</span>
|
|
<span class="c1"># the syntax in a way that matches what SEARCH_MULTIMATCH_REGEX understand.</span>
|
|
<span class="c1"># The template will be populated with data and expects the following markup:</span>
|
|
<span class="c1"># {number} - the order of the multimatch, starting from 1; {name} - the</span>
|
|
<span class="c1"># name (key) of the multimatched entity; {aliases} - eventual</span>
|
|
<span class="c1"># aliases for the entity; {info} - extra info like #dbrefs for staff. Don't</span>
|
|
<span class="c1"># forget a line break if you want one match per line.</span>
|
|
<span class="n">SEARCH_MULTIMATCH_TEMPLATE</span> <span class="o">=</span> <span class="s2">" </span><span class="si">{name}</span><span class="s2">-</span><span class="si">{number}{aliases}{info}</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="c1"># The handler that outputs errors when using any API-level search</span>
|
|
<span class="c1"># (not manager methods). This function should correctly report errors</span>
|
|
<span class="c1"># both for command- and object-searches. This allows full control</span>
|
|
<span class="c1"># over the error output (it uses SEARCH_MULTIMATCH_TEMPLATE by default).</span>
|
|
<span class="n">SEARCH_AT_RESULT</span> <span class="o">=</span> <span class="s2">"evennia.utils.utils.at_search_result"</span>
|
|
<span class="c1"># Single characters to ignore at the beginning of a command. When set, e.g.</span>
|
|
<span class="c1"># cmd, @cmd and +cmd will all find a command "cmd" or one named "@cmd" etc. If</span>
|
|
<span class="c1"># you have defined two different commands cmd and @cmd you can still enter</span>
|
|
<span class="c1"># @cmd to exactly target the second one. Single-character commands consisting</span>
|
|
<span class="c1"># of only a prefix character will not be stripped. Set to the empty</span>
|
|
<span class="c1"># string ("") to turn off prefix ignore.</span>
|
|
<span class="n">CMD_IGNORE_PREFIXES</span> <span class="o">=</span> <span class="s2">"@&/+"</span>
|
|
<span class="c1"># The module holding text strings for the connection screen.</span>
|
|
<span class="c1"># This module should contain one or more variables</span>
|
|
<span class="c1"># with strings defining the look of the screen.</span>
|
|
<span class="n">CONNECTION_SCREEN_MODULE</span> <span class="o">=</span> <span class="s2">"server.conf.connection_screens"</span>
|
|
<span class="c1"># Delay to use before sending the evennia.syscmdkeys.CMD_LOGINSTART Command</span>
|
|
<span class="c1"># when a new session connects (this defaults the unloggedin-look for showing</span>
|
|
<span class="c1"># the connection screen). The delay is useful mainly for telnet, to allow</span>
|
|
<span class="c1"># client/server to establish client capabilities like color/mxp etc before</span>
|
|
<span class="c1"># sending any text. A value of 0.3 should be enough. While a good idea, it may</span>
|
|
<span class="c1"># cause issues with menu-logins and autoconnects since the menu will not have</span>
|
|
<span class="c1"># started when the autoconnects starts sending menu commands.</span>
|
|
<span class="n">DELAY_CMD_LOGINSTART</span> <span class="o">=</span> <span class="mf">0.3</span>
|
|
<span class="c1"># A module that must exist - this holds the instructions Evennia will use to</span>
|
|
<span class="c1"># first prepare the database for use (create user #1 and Limbo etc). Only override if</span>
|
|
<span class="c1"># you really know what # you are doing. If replacing, it must contain a function</span>
|
|
<span class="c1"># handle_setup(stepname=None). The function will start being called with no argument</span>
|
|
<span class="c1"># and is expected to maintain a named sequence of steps. Once each step is completed, it</span>
|
|
<span class="c1"># should be saved with ServerConfig.objects.conf('last_initial_setup_step', stepname)</span>
|
|
<span class="c1"># on a crash, the system will continue by calling handle_setup with the last completed</span>
|
|
<span class="c1"># step. The last step in the sequence must be named 'done'. Once this key is saved,</span>
|
|
<span class="c1"># initialization will not run again.</span>
|
|
<span class="n">INITIAL_SETUP_MODULE</span> <span class="o">=</span> <span class="s2">"evennia.server.initial_setup"</span>
|
|
<span class="c1"># An optional module that, if existing, must hold a function</span>
|
|
<span class="c1"># named at_initial_setup(). This hook method can be used to customize</span>
|
|
<span class="c1"># the server's initial setup sequence (the very first startup of the system).</span>
|
|
<span class="c1"># The check will fail quietly if module doesn't exist or fails to load.</span>
|
|
<span class="n">AT_INITIAL_SETUP_HOOK_MODULE</span> <span class="o">=</span> <span class="s2">"server.conf.at_initial_setup"</span>
|
|
<span class="c1"># Module(s) containing custom at_server_init(), at_server_start(),</span>
|
|
<span class="c1"># at_server_reload() and at_server_stop() methods. These methods will be called</span>
|
|
<span class="c1"># every time the server starts, reloads and resets/stops</span>
|
|
<span class="c1"># respectively. Can be given as a single path or a list of paths. If a list,</span>
|
|
<span class="c1"># each module's hooks will be called in list order.</span>
|
|
<span class="n">AT_SERVER_STARTSTOP_MODULE</span> <span class="o">=</span> <span class="s2">"server.conf.at_server_startstop"</span>
|
|
<span class="c1"># List of one or more module paths to modules containing a function start_</span>
|
|
<span class="c1"># plugin_services(application). This module will be called with the main</span>
|
|
<span class="c1"># Evennia Server application when the Server is initiated.</span>
|
|
<span class="c1"># It will be called last in the startup sequence.</span>
|
|
<span class="n">SERVER_SERVICES_PLUGIN_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"server.conf.server_services_plugins"</span><span class="p">]</span>
|
|
<span class="c1"># List of one or more module paths to modules containing a function</span>
|
|
<span class="c1"># start_plugin_services(application). This module will be called with the</span>
|
|
<span class="c1"># main Evennia Portal application when the Portal is initiated.</span>
|
|
<span class="c1"># It will be called last in the startup sequence.</span>
|
|
<span class="n">PORTAL_SERVICES_PLUGIN_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"server.conf.portal_services_plugins"</span><span class="p">]</span>
|
|
<span class="c1"># Module holding MSSP meta data. This is used by MUD-crawlers to determine</span>
|
|
<span class="c1"># what type of game you are running, how many accounts you have etc.</span>
|
|
<span class="n">MSSP_META_MODULE</span> <span class="o">=</span> <span class="s2">"server.conf.mssp"</span>
|
|
<span class="c1"># Module for web plugins.</span>
|
|
<span class="n">WEB_PLUGINS_MODULE</span> <span class="o">=</span> <span class="s2">"server.conf.web_plugins"</span>
|
|
<span class="c1"># Tuple of modules implementing lock functions. All callable functions</span>
|
|
<span class="c1"># inside these modules will be available as lock functions.</span>
|
|
<span class="n">LOCK_FUNC_MODULES</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"evennia.locks.lockfuncs"</span><span class="p">,</span> <span class="s2">"server.conf.lockfuncs"</span><span class="p">)</span>
|
|
<span class="c1"># Module holding handlers for managing incoming data from the client. These</span>
|
|
<span class="c1"># will be loaded in order, meaning functions in later modules may overload</span>
|
|
<span class="c1"># previous ones if having the same name.</span>
|
|
<span class="n">INPUT_FUNC_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"evennia.server.inputfuncs"</span><span class="p">,</span> <span class="s2">"server.conf.inputfuncs"</span><span class="p">]</span>
|
|
<span class="c1"># Modules that contain prototypes for use with the spawner mechanism.</span>
|
|
<span class="n">PROTOTYPE_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"world.prototypes"</span><span class="p">]</span>
|
|
<span class="c1"># Modules containining Prototype functions able to be embedded in prototype</span>
|
|
<span class="c1"># definitions from in-game.</span>
|
|
<span class="n">PROT_FUNC_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"evennia.prototypes.protfuncs"</span><span class="p">]</span>
|
|
<span class="c1"># Module holding settings/actions for the dummyrunner program (see the</span>
|
|
<span class="c1"># dummyrunner for more information)</span>
|
|
<span class="n">DUMMYRUNNER_SETTINGS_MODULE</span> <span class="o">=</span> <span class="s2">"evennia.server.profiling.dummyrunner_settings"</span>
|
|
<span class="c1"># Mapping to extend Evennia's normal ANSI color tags. The mapping is a list of</span>
|
|
<span class="c1"># tuples mapping the exact tag (not a regex!) to the ANSI convertion, like</span>
|
|
<span class="c1"># `(r"%c%r", ansi.ANSI_RED)` (the evennia.utils.ansi module contains all</span>
|
|
<span class="c1"># ANSI escape sequences). Default is to use `|` and `|[` -prefixes.</span>
|
|
<span class="n">COLOR_ANSI_EXTRA_MAP</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># Extend the available regexes for adding XTERM256 colors in-game. This is given</span>
|
|
<span class="c1"># as a list of regexes, where each regex must contain three anonymous groups for</span>
|
|
<span class="c1"># holding integers 0-5 for the red, green and blue components Default is</span>
|
|
<span class="c1"># is r'\|([0-5])([0-5])([0-5])', which allows e.g. |500 for red.</span>
|
|
<span class="c1"># XTERM256 foreground color replacement</span>
|
|
<span class="n">COLOR_XTERM256_EXTRA_FG</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># XTERM256 background color replacement. Default is \|\[([0-5])([0-5])([0-5])'</span>
|
|
<span class="n">COLOR_XTERM256_EXTRA_BG</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># Extend the available regexes for adding XTERM256 grayscale values in-game. Given</span>
|
|
<span class="c1"># as a list of regexes, where each regex must contain one anonymous group containing</span>
|
|
<span class="c1"># a single letter a-z to mark the level from white to black. Default is r'\|=([a-z])',</span>
|
|
<span class="c1"># which allows e.g. |=k for a medium gray.</span>
|
|
<span class="c1"># XTERM256 grayscale foreground</span>
|
|
<span class="n">COLOR_XTERM256_EXTRA_GFG</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># XTERM256 grayscale background. Default is \|\[=([a-z])'</span>
|
|
<span class="n">COLOR_XTERM256_EXTRA_GBG</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># ANSI does not support bright backgrounds, so Evennia fakes this by mapping it to</span>
|
|
<span class="c1"># XTERM256 backgrounds where supported. This is a list of tuples that maps the wanted</span>
|
|
<span class="c1"># ansi tag (not a regex!) to a valid XTERM256 background tag, such as `(r'{[r', r'{[500')`.</span>
|
|
<span class="n">COLOR_ANSI_XTERM256_BRIGHT_BG_EXTRA_MAP</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="c1"># If set True, the above color settings *replace* the default |-style color markdown</span>
|
|
<span class="c1"># rather than extend it.</span>
|
|
<span class="n">COLOR_NO_DEFAULT</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Default command sets and commands</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Command set used on session before account has logged in</span>
|
|
<span class="n">CMDSET_UNLOGGEDIN</span> <span class="o">=</span> <span class="s2">"commands.default_cmdsets.UnloggedinCmdSet"</span>
|
|
<span class="c1"># (Note that changing these three following cmdset paths will only affect NEW</span>
|
|
<span class="c1"># created characters/objects, not those already in play. So if you want to</span>
|
|
<span class="c1"># change this and have it apply to every object, it's recommended you do it</span>
|
|
<span class="c1"># before having created a lot of objects (or simply reset the database after</span>
|
|
<span class="c1"># the change for simplicity)).</span>
|
|
<span class="c1"># Command set used on the logged-in session</span>
|
|
<span class="n">CMDSET_SESSION</span> <span class="o">=</span> <span class="s2">"commands.default_cmdsets.SessionCmdSet"</span>
|
|
<span class="c1"># Default set for logged in account with characters (fallback)</span>
|
|
<span class="n">CMDSET_CHARACTER</span> <span class="o">=</span> <span class="s2">"commands.default_cmdsets.CharacterCmdSet"</span>
|
|
<span class="c1"># Command set for accounts without a character (ooc)</span>
|
|
<span class="n">CMDSET_ACCOUNT</span> <span class="o">=</span> <span class="s2">"commands.default_cmdsets.AccountCmdSet"</span>
|
|
|
|
<span class="c1"># Location to search for cmdsets if full path not given</span>
|
|
<span class="n">CMDSET_PATHS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"commands"</span><span class="p">,</span> <span class="s2">"evennia"</span><span class="p">,</span> <span class="s2">"evennia.contrib"</span><span class="p">]</span>
|
|
<span class="c1"># Fallbacks for cmdset paths that fail to load. Note that if you change the path for your</span>
|
|
<span class="c1"># default cmdsets, you will also need to copy CMDSET_FALLBACKS after your change in your</span>
|
|
<span class="c1"># settings file for it to detect the change.</span>
|
|
<span class="n">CMDSET_FALLBACKS</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="n">CMDSET_CHARACTER</span><span class="p">:</span> <span class="s2">"evennia.commands.default.cmdset_character.CharacterCmdSet"</span><span class="p">,</span>
|
|
<span class="n">CMDSET_ACCOUNT</span><span class="p">:</span> <span class="s2">"evennia.commands.default.cmdset_account.AccountCmdSet"</span><span class="p">,</span>
|
|
<span class="n">CMDSET_SESSION</span><span class="p">:</span> <span class="s2">"evennia.commands.default.cmdset_session.SessionCmdSet"</span><span class="p">,</span>
|
|
<span class="n">CMDSET_UNLOGGEDIN</span><span class="p">:</span> <span class="s2">"evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="c1"># Parent class for all default commands. Changing this class will</span>
|
|
<span class="c1"># modify all default commands, so do so carefully.</span>
|
|
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.commands.default.muxcommand.MuxCommand"</span>
|
|
<span class="c1"># Command.arg_regex is a regular expression desribing how the arguments</span>
|
|
<span class="c1"># to the command must be structured for the command to match a given user</span>
|
|
<span class="c1"># input. By default the command-name should end with a space or / (since the</span>
|
|
<span class="c1"># default commands uses MuxCommand and /switches). Note that the extra \n</span>
|
|
<span class="c1"># is necessary for use with batchprocessor.</span>
|
|
<span class="n">COMMAND_DEFAULT_ARG_REGEX</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"^[ /]|\n|$"</span>
|
|
<span class="c1"># By default, Command.msg will only send data to the Session calling</span>
|
|
<span class="c1"># the Command in the first place. If set, Command.msg will instead return</span>
|
|
<span class="c1"># data to all Sessions connected to the Account/Character associated with</span>
|
|
<span class="c1"># calling the Command. This may be more intuitive for users in certain</span>
|
|
<span class="c1"># multisession modes.</span>
|
|
<span class="n">COMMAND_DEFAULT_MSG_ALL_SESSIONS</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># The default lockstring of a command.</span>
|
|
<span class="n">COMMAND_DEFAULT_LOCKS</span> <span class="o">=</span> <span class="s2">""</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Typeclasses and other paths</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># These are paths that will be prefixed to the paths given if the</span>
|
|
<span class="c1"># immediately entered path fail to find a typeclass. It allows for</span>
|
|
<span class="c1"># shorter input strings. They must either base off the game directory</span>
|
|
<span class="c1"># or start from the evennia library.</span>
|
|
<span class="n">TYPECLASS_PATHS</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">"typeclasses"</span><span class="p">,</span>
|
|
<span class="s2">"evennia"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib.game_systems"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib.base_systems"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib.full_systems"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib.tutorials"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib.utils"</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1"># Typeclass for account objects (linked to a character) (fallback)</span>
|
|
<span class="n">BASE_ACCOUNT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.accounts.Account"</span>
|
|
<span class="c1"># Typeclass and base for all objects (fallback)</span>
|
|
<span class="n">BASE_OBJECT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.objects.Object"</span>
|
|
<span class="c1"># Typeclass for character objects linked to an account (fallback)</span>
|
|
<span class="n">BASE_CHARACTER_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.characters.Character"</span>
|
|
<span class="c1"># Typeclass for rooms (fallback)</span>
|
|
<span class="n">BASE_ROOM_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.rooms.Room"</span>
|
|
<span class="c1"># Typeclass for Exit objects (fallback).</span>
|
|
<span class="n">BASE_EXIT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.exits.Exit"</span>
|
|
<span class="c1"># Typeclass for Channel (fallback).</span>
|
|
<span class="n">BASE_CHANNEL_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.channels.Channel"</span>
|
|
<span class="c1"># Typeclass for Scripts (fallback). You usually don't need to change this</span>
|
|
<span class="c1"># but create custom variations of scripts on a per-case basis instead.</span>
|
|
<span class="n">BASE_SCRIPT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.scripts.Script"</span>
|
|
<span class="c1"># The default home location used for all objects. This is used as a</span>
|
|
<span class="c1"># fallback if an object's normal home location is deleted. Default</span>
|
|
<span class="c1"># is Limbo (#2).</span>
|
|
<span class="n">DEFAULT_HOME</span> <span class="o">=</span> <span class="s2">"#2"</span>
|
|
<span class="c1"># The start position for new characters. Default is Limbo (#2).</span>
|
|
<span class="n">START_LOCATION</span> <span class="o">=</span> <span class="s2">"#2"</span>
|
|
<span class="c1"># Lookups of Attributes, Tags, Nicks, Aliases can be aggressively</span>
|
|
<span class="c1"># cached to avoid repeated database hits. This often gives noticeable</span>
|
|
<span class="c1"># performance gains since they are called so often. Drawback is that</span>
|
|
<span class="c1"># if you are accessing the database from multiple processes (such as</span>
|
|
<span class="c1"># from a website -not- running Evennia's own webserver) data may go</span>
|
|
<span class="c1"># out of sync between the processes. Keep on unless you face such</span>
|
|
<span class="c1"># issues.</span>
|
|
<span class="n">TYPECLASS_AGGRESSIVE_CACHE</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># These are fallbacks for BASE typeclasses failing to load. Usually needed only</span>
|
|
<span class="c1"># during doc building. The system expects these to *always* load correctly, so</span>
|
|
<span class="c1"># only modify if you are making fundamental changes to how objects/accounts</span>
|
|
<span class="c1"># work and know what you are doing</span>
|
|
<span class="n">FALLBACK_ACCOUNT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"evennia.accounts.accounts.DefaultAccount"</span>
|
|
<span class="n">FALLBACK_OBJECT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"evennia.objects.objects.DefaultObject"</span>
|
|
<span class="n">FALLBACK_CHARACTER_TYPECLASS</span> <span class="o">=</span> <span class="s2">"evennia.objects.objects.DefaultCharacter"</span>
|
|
<span class="n">FALLBACK_ROOM_TYPECLASS</span> <span class="o">=</span> <span class="s2">"evennia.objects.objects.DefaultRoom"</span>
|
|
<span class="n">FALLBACK_EXIT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"evennia.objects.objects.DefaultExit"</span>
|
|
<span class="n">FALLBACK_CHANNEL_TYPECLASS</span> <span class="o">=</span> <span class="s2">"evennia.comms.comms.DefaultChannel"</span>
|
|
<span class="n">FALLBACK_SCRIPT_TYPECLASS</span> <span class="o">=</span> <span class="s2">"evennia.scripts.scripts.DefaultScript"</span>
|
|
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Options and validators</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Options available on Accounts. Each such option is described by a</span>
|
|
<span class="c1"># class available from evennia.OPTION_CLASSES, in turn making use</span>
|
|
<span class="c1"># of validators from evennia.VALIDATOR_FUNCS to validate input when</span>
|
|
<span class="c1"># the user changes an option. The options are accessed through the</span>
|
|
<span class="c1"># `Account.options` handler.</span>
|
|
|
|
<span class="c1"># ("Description", 'Option Class name in evennia.OPTION_CLASS_MODULES', 'Default Value')</span>
|
|
|
|
<span class="n">OPTIONS_ACCOUNT_DEFAULT</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"border_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Headers, footers, table borders, etc."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"n"</span><span class="p">),</span>
|
|
<span class="s2">"header_star_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"* inside Header lines."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"n"</span><span class="p">),</span>
|
|
<span class="s2">"header_text_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Text inside Header lines."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">),</span>
|
|
<span class="s2">"header_fill"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Fill for Header lines."</span><span class="p">,</span> <span class="s2">"Text"</span><span class="p">,</span> <span class="s2">"="</span><span class="p">),</span>
|
|
<span class="s2">"separator_star_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"* inside Separator lines."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"n"</span><span class="p">),</span>
|
|
<span class="s2">"separator_text_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Text inside Separator lines."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">),</span>
|
|
<span class="s2">"separator_fill"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Fill for Separator Lines."</span><span class="p">,</span> <span class="s2">"Text"</span><span class="p">,</span> <span class="s2">"-"</span><span class="p">),</span>
|
|
<span class="s2">"footer_star_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"* inside Footer lines."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"n"</span><span class="p">),</span>
|
|
<span class="s2">"footer_text_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Text inside Footer Lines."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"n"</span><span class="p">),</span>
|
|
<span class="s2">"footer_fill"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Fill for Footer Lines."</span><span class="p">,</span> <span class="s2">"Text"</span><span class="p">,</span> <span class="s2">"="</span><span class="p">),</span>
|
|
<span class="s2">"column_names_color"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Table column header text."</span><span class="p">,</span> <span class="s2">"Color"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">),</span>
|
|
<span class="s2">"timezone"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"Timezone for dates."</span><span class="p">,</span> <span class="s2">"Timezone"</span><span class="p">,</span> <span class="s2">"UTC"</span><span class="p">),</span>
|
|
<span class="p">}</span>
|
|
<span class="c1"># Modules holding Option classes, responsible for serializing the option and</span>
|
|
<span class="c1"># calling validator functions on it. Same-named functions in modules added</span>
|
|
<span class="c1"># later in this list will override those added earlier.</span>
|
|
<span class="n">OPTION_CLASS_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"evennia.utils.optionclasses"</span><span class="p">]</span>
|
|
<span class="c1"># Module holding validator functions. These are used as a resource for</span>
|
|
<span class="c1"># validating options, but can also be used as input validators in general.</span>
|
|
<span class="c1"># Same-named functions in modules added later in this list will override those</span>
|
|
<span class="c1"># added earlier.</span>
|
|
<span class="n">VALIDATOR_FUNC_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"evennia.utils.validatorfuncs"</span><span class="p">]</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Batch processors</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Python path to a directory to be searched for batch scripts</span>
|
|
<span class="c1"># for the batch processors (.ev and/or .py files).</span>
|
|
<span class="n">BASE_BATCHPROCESS_PATHS</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">"world"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.contrib.tutorials"</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Game Time setup</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># You don't actually have to use this, but it affects the routines in</span>
|
|
<span class="c1"># evennia.utils.gametime.py and allows for a convenient measure to</span>
|
|
<span class="c1"># determine the current in-game time. You can of course interpret</span>
|
|
<span class="c1"># "week", "month" etc as your own in-game time units as desired.</span>
|
|
|
|
<span class="c1"># The time factor dictates if the game world runs faster (timefactor>1)</span>
|
|
<span class="c1"># or slower (timefactor<1) than the real world.</span>
|
|
<span class="n">TIME_FACTOR</span> <span class="o">=</span> <span class="mf">2.0</span>
|
|
<span class="c1"># The starting point of your game time (the epoch), in seconds.</span>
|
|
<span class="c1"># In Python a value of 0 means Jan 1 1970 (use negatives for earlier</span>
|
|
<span class="c1"># start date). This will affect the returns from the utils.gametime</span>
|
|
<span class="c1"># module. If None, the server's first start-time is used as the epoch.</span>
|
|
<span class="n">TIME_GAME_EPOCH</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="c1"># Normally, game time will only increase when the server runs. If this is True,</span>
|
|
<span class="c1"># game time will not pause when the server reloads or goes offline. This setting</span>
|
|
<span class="c1"># together with a time factor of 1 should keep the game in sync with</span>
|
|
<span class="c1"># the real time (add a different epoch to shift time)</span>
|
|
<span class="n">TIME_IGNORE_DOWNTIMES</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Help system</span>
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Help output from CmdHelp are wrapped in an EvMore call</span>
|
|
<span class="c1"># (excluding webclient with separate help popups). If continuous scroll</span>
|
|
<span class="c1"># is preferred, change 'HELP_MORE' to False. EvMORE uses CLIENT_DEFAULT_HEIGHT</span>
|
|
<span class="n">HELP_MORE_ENABLED</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># The help category of a command if not specified.</span>
|
|
<span class="n">COMMAND_DEFAULT_HELP_CATEGORY</span> <span class="o">=</span> <span class="s2">"general"</span>
|
|
<span class="c1"># The help category of a db or file-based help entry if not specified</span>
|
|
<span class="n">DEFAULT_HELP_CATEGORY</span> <span class="o">=</span> <span class="s2">"general"</span>
|
|
<span class="c1"># File-based help entries. These are modules containing dicts defining help</span>
|
|
<span class="c1"># entries. They can be used together with in-database entries created in-game.</span>
|
|
<span class="n">FILE_HELP_ENTRY_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"world.help_entries"</span><span class="p">]</span>
|
|
<span class="c1"># if topics listed in help should be clickable</span>
|
|
<span class="c1"># clickable links only work on clients that support MXP.</span>
|
|
<span class="n">HELP_CLICKABLE_TOPICS</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># The Lunr search engine (used by help) excludes 'common' words from its search.</span>
|
|
<span class="c1"># This is not so good when those words are names of commands, like who or say;</span>
|
|
<span class="c1"># so we need to make sure to tell Lunr to not filter them out by adding them here</span>
|
|
<span class="c1"># (many are auto-added out of the box, this extends the list).</span>
|
|
<span class="n">LUNR_STOP_WORD_FILTER_EXCEPTIONS</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># FuncParser</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># Strings parsed with the FuncParser can contain 'callables' on the</span>
|
|
<span class="c1"># form $funcname(args,kwargs), which will lead to actual Python functions</span>
|
|
<span class="c1"># being executed.</span>
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># This changes the start-symbol for the funcparser callable. Note that</span>
|
|
<span class="c1"># this will make a lot of documentation invalid and there may also be</span>
|
|
<span class="c1"># other unexpected side effects, so change with caution.</span>
|
|
<span class="n">FUNCPARSER_START_CHAR</span> <span class="o">=</span> <span class="s2">"$"</span>
|
|
<span class="c1"># The symbol to use to escape Func</span>
|
|
<span class="n">FUNCPARSER_ESCAPE_CHAR</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\\</span><span class="s2">"</span>
|
|
<span class="c1"># This is the global max nesting-level for nesting functions in</span>
|
|
<span class="c1"># the funcparser. This protects against infinite loops.</span>
|
|
<span class="n">FUNCPARSER_MAX_NESTING</span> <span class="o">=</span> <span class="mi">20</span>
|
|
<span class="c1"># Activate funcparser for all outgoing strings. The current Session</span>
|
|
<span class="c1"># will be passed into the parser (used to be called inlinefuncs)</span>
|
|
<span class="n">FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Only functions defined globally (and not starting with '_') in</span>
|
|
<span class="c1"># these modules will be considered valid inlinefuncs. The list</span>
|
|
<span class="c1"># is loaded from left-to-right, same-named functions will overload</span>
|
|
<span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"evennia.utils.funcparser"</span><span class="p">,</span> <span class="s2">"server.conf.inlinefuncs"</span><span class="p">]</span>
|
|
<span class="c1"># Prototype values are also parsed with FuncParser. These modules</span>
|
|
<span class="c1"># define which $func callables are available to use in prototypes.</span>
|
|
<span class="n">FUNCPARSER_PROTOTYPE_PARSING_MODULES</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">"evennia.prototypes.protfuncs"</span><span class="p">,</span>
|
|
<span class="s2">"server.conf.prototypefuncs"</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Global Scripts</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Global scripts started here will be available through</span>
|
|
<span class="c1"># 'evennia.GLOBAL_SCRIPTS.key'. The scripts will survive a reload and be</span>
|
|
<span class="c1"># recreated automatically if deleted. Each entry must have the script keys,</span>
|
|
<span class="c1"># whereas all other fields in the specification are optional. If 'typeclass' is</span>
|
|
<span class="c1"># not given, BASE_SCRIPT_TYPECLASS will be assumed. Note that if you change</span>
|
|
<span class="c1"># typeclass for the same key, a new Script will replace the old one on</span>
|
|
<span class="c1"># `evennia.GLOBAL_SCRIPTS`.</span>
|
|
<span class="n">GLOBAL_SCRIPTS</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="c1"># 'key': {'typeclass': 'typeclass.path.here',</span>
|
|
<span class="c1"># 'repeats': -1, 'interval': 50, 'desc': 'Example script'},</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Default Account setup and access</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Different Multisession modes allow a player (=account) to connect to the</span>
|
|
<span class="c1"># game simultaneously with multiple clients (=sessions).</span>
|
|
<span class="c1"># 0 - single session per account (if reconnecting, disconnect old session)</span>
|
|
<span class="c1"># 1 - multiple sessions per account, all sessions share output</span>
|
|
<span class="c1"># 2 - multiple sessions per account, one session allowed per puppet</span>
|
|
<span class="c1"># 3 - multiple sessions per account, multiple sessions per puppet (share output)</span>
|
|
<span class="c1"># session getting the same data.</span>
|
|
<span class="n">MULTISESSION_MODE</span> <span class="o">=</span> <span class="mi">0</span>
|
|
<span class="c1"># Whether we should create a character with the same name as the account when</span>
|
|
<span class="c1"># a new account is created. Together with AUTO_PUPPET_ON_LOGIN, this mimics</span>
|
|
<span class="c1"># a legacy MUD, where there is no difference between account and character.</span>
|
|
<span class="n">AUTO_CREATE_CHARACTER_WITH_ACCOUNT</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># Whether an account should auto-puppet the last puppeted puppet when logging in. This</span>
|
|
<span class="c1"># will only work if the session/puppet combination can be determined (usually</span>
|
|
<span class="c1"># MULTISESSION_MODE 0 or 1), otherwise, the player will end up OOC. Use</span>
|
|
<span class="c1"># MULTISESSION_MODE=0, AUTO_CREATE_CHARACTER_WITH_ACCOUNT=True and this value to</span>
|
|
<span class="c1"># mimic a legacy mud with minimal difference between Account and Character. Disable</span>
|
|
<span class="c1"># this and AUTO_PUPPET to get a chargen/character select screen on login.</span>
|
|
<span class="n">AUTO_PUPPET_ON_LOGIN</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="c1"># How many *different* characters an account can puppet *at the same time*. A value</span>
|
|
<span class="c1"># above 1 only makes a difference together with MULTISESSION_MODE > 1.</span>
|
|
<span class="n">MAX_NR_SIMULTANEOUS_PUPPETS</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="c1"># The maximum number of characters allowed by be created by the default ooc</span>
|
|
<span class="c1"># char-creation command. This can be seen as how big of a 'stable' of characters</span>
|
|
<span class="c1"># an account can have (not how many you can puppet at the same time). Set to</span>
|
|
<span class="c1"># None for no limit.</span>
|
|
<span class="n">MAX_NR_CHARACTERS</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="c1"># The access hierarchy, in climbing order. A higher permission in the</span>
|
|
<span class="c1"># hierarchy includes access of all levels below it. Used by the perm()/pperm()</span>
|
|
<span class="c1"># lock functions, which accepts both plural and singular (Admin & Admins)</span>
|
|
<span class="n">PERMISSION_HIERARCHY</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">"Guest"</span><span class="p">,</span> <span class="c1"># note-only used if GUEST_ENABLED=True</span>
|
|
<span class="s2">"Player"</span><span class="p">,</span>
|
|
<span class="s2">"Helper"</span><span class="p">,</span>
|
|
<span class="s2">"Builder"</span><span class="p">,</span>
|
|
<span class="s2">"Admin"</span><span class="p">,</span>
|
|
<span class="s2">"Developer"</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
<span class="c1"># The default permission given to all new accounts</span>
|
|
<span class="n">PERMISSION_ACCOUNT_DEFAULT</span> <span class="o">=</span> <span class="s2">"Player"</span>
|
|
<span class="c1"># Default sizes for client window (in number of characters), if client</span>
|
|
<span class="c1"># is not supplying this on its own</span>
|
|
<span class="n">CLIENT_DEFAULT_WIDTH</span> <span class="o">=</span> <span class="mi">78</span>
|
|
<span class="c1"># telnet standard height is 24; does anyone use such low-res displays anymore?</span>
|
|
<span class="n">CLIENT_DEFAULT_HEIGHT</span> <span class="o">=</span> <span class="mi">45</span>
|
|
<span class="c1"># Set rate limits per-IP on account creations and login attempts. Set limits</span>
|
|
<span class="c1"># to None to disable.</span>
|
|
<span class="n">CREATION_THROTTLE_LIMIT</span> <span class="o">=</span> <span class="mi">2</span>
|
|
<span class="n">CREATION_THROTTLE_TIMEOUT</span> <span class="o">=</span> <span class="mi">10</span> <span class="o">*</span> <span class="mi">60</span>
|
|
<span class="n">LOGIN_THROTTLE_LIMIT</span> <span class="o">=</span> <span class="mi">5</span>
|
|
<span class="n">LOGIN_THROTTLE_TIMEOUT</span> <span class="o">=</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">60</span>
|
|
<span class="c1"># Certain characters, like html tags, line breaks and tabs are stripped</span>
|
|
<span class="c1"># from user input for commands using the `evennia.utils.strip_unsafe_input` helper</span>
|
|
<span class="c1"># since they can be exploitative. This list defines Account-level permissions</span>
|
|
<span class="c1"># (and higher) that bypass this stripping. It is used as a fallback if a</span>
|
|
<span class="c1"># specific list of perms are not given to the helper function.</span>
|
|
<span class="n">INPUT_CLEANUP_BYPASS_PERMISSIONS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Builder"</span><span class="p">]</span>
|
|
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Guest accounts</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># This enables guest logins, by default via "connect guest". Note that</span>
|
|
<span class="c1"># you need to edit your login screen to inform about this possibility.</span>
|
|
<span class="n">GUEST_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Typeclass for guest account objects (linked to a character)</span>
|
|
<span class="n">BASE_GUEST_TYPECLASS</span> <span class="o">=</span> <span class="s2">"typeclasses.accounts.Guest"</span>
|
|
<span class="c1"># The permission given to guests</span>
|
|
<span class="n">PERMISSION_GUEST_DEFAULT</span> <span class="o">=</span> <span class="s2">"Guests"</span>
|
|
<span class="c1"># The default home location used for guests.</span>
|
|
<span class="n">GUEST_HOME</span> <span class="o">=</span> <span class="n">DEFAULT_HOME</span>
|
|
<span class="c1"># The start position used for guest characters.</span>
|
|
<span class="n">GUEST_START_LOCATION</span> <span class="o">=</span> <span class="n">START_LOCATION</span>
|
|
<span class="c1"># The naming convention used for creating new guest</span>
|
|
<span class="c1"># accounts/characters. The size of this list also determines how many</span>
|
|
<span class="c1"># guests may be on the game at once. The default is a maximum of nine</span>
|
|
<span class="c1"># guests, named Guest1 through Guest9.</span>
|
|
<span class="n">GUEST_LIST</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Guest"</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">s</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">9</span><span class="p">)]</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># In-game Channels created from server start</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># The mudinfo channel is a read-only channel used by Evennia to replay status</span>
|
|
<span class="c1"># messages, connection info etc to staff. The superuser will automatically be</span>
|
|
<span class="c1"># subscribed to this channel. If set to None, the channel is disabled and</span>
|
|
<span class="c1"># status messages will only be logged (not recommended).</span>
|
|
<span class="n">CHANNEL_MUDINFO</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"MudInfo"</span><span class="p">,</span>
|
|
<span class="s2">"aliases"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"Connection log"</span><span class="p">,</span>
|
|
<span class="s2">"locks"</span><span class="p">:</span> <span class="s2">"control:perm(Developer);listen:perm(Admin);send:false()"</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="c1"># Optional channel (same form as CHANNEL_MUDINFO) that will receive connection</span>
|
|
<span class="c1"># messages like ("<account> has (dis)connected"). While the MudInfo channel</span>
|
|
<span class="c1"># will also receieve this info, this channel is meant for non-staffers. If</span>
|
|
<span class="c1"># None, this information will only be logged.</span>
|
|
<span class="n">CHANNEL_CONNECTINFO</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="c1"># New accounts will auto-sub to the default channels given below (but they can</span>
|
|
<span class="c1"># unsub at any time). Traditionally, at least 'public' should exist. Entries</span>
|
|
<span class="c1"># will be (re)created on the next reload, but removing or updating a same-key</span>
|
|
<span class="c1"># channel from this list will NOT automatically change/remove it in the game,</span>
|
|
<span class="c1"># that needs to be done manually. Note: To create other, non-auto-subbed</span>
|
|
<span class="c1"># channels, create them manually in server/conf/at_initial_setup.py.</span>
|
|
<span class="n">DEFAULT_CHANNELS</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"key"</span><span class="p">:</span> <span class="s2">"Public"</span><span class="p">,</span>
|
|
<span class="s2">"aliases"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"pub"</span><span class="p">,),</span>
|
|
<span class="s2">"desc"</span><span class="p">:</span> <span class="s2">"Public discussion"</span><span class="p">,</span>
|
|
<span class="s2">"locks"</span><span class="p">:</span> <span class="s2">"control:perm(Admin);listen:all();send:all()"</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># External Connections</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Note: You do *not* have to make your MUD open to</span>
|
|
<span class="c1"># the public to use the external connections, they</span>
|
|
<span class="c1"># operate as long as you have an internet connection,</span>
|
|
<span class="c1"># just like stand-alone chat clients.</span>
|
|
|
|
<span class="c1"># The Evennia Game Index is a dynamic listing of Evennia games. You can add your game</span>
|
|
<span class="c1"># to this list also if it is in closed pre-alpha development.</span>
|
|
<span class="n">GAME_INDEX_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># This dict</span>
|
|
<span class="n">GAME_INDEX_LISTING</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"game_name"</span><span class="p">:</span> <span class="s2">"Mygame"</span><span class="p">,</span> <span class="c1"># usually SERVERNAME</span>
|
|
<span class="s2">"game_status"</span><span class="p">:</span> <span class="s2">"pre-alpha"</span><span class="p">,</span> <span class="c1"># pre-alpha, alpha, beta or launched</span>
|
|
<span class="s2">"short_description"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="c1"># could be GAME_SLOGAN</span>
|
|
<span class="s2">"long_description"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="s2">"listing_contact"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="c1"># email</span>
|
|
<span class="s2">"telnet_hostname"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="c1"># mygame.com</span>
|
|
<span class="s2">"telnet_port"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="c1"># 1234</span>
|
|
<span class="s2">"game_website"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="c1"># http://mygame.com</span>
|
|
<span class="s2">"web_client_url"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span> <span class="c1"># http://mygame.com/webclient</span>
|
|
<span class="p">}</span>
|
|
<span class="c1"># Evennia can connect to external IRC channels and</span>
|
|
<span class="c1"># echo what is said on the channel to IRC and vice</span>
|
|
<span class="c1"># versa. Obs - make sure the IRC network allows bots.</span>
|
|
<span class="c1"># When enabled, command @irc2chan will be available in-game</span>
|
|
<span class="c1"># IRC requires that you have twisted.words installed.</span>
|
|
<span class="n">IRC_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># RSS allows to connect RSS feeds (from forum updates, blogs etc) to</span>
|
|
<span class="c1"># an in-game channel. The channel will be updated when the rss feed</span>
|
|
<span class="c1"># updates. Use @rss2chan in game to connect if this setting is</span>
|
|
<span class="c1"># active. OBS: RSS support requires the python-feedparser package to</span>
|
|
<span class="c1"># be installed (through package manager or from the website</span>
|
|
<span class="c1"># http://code.google.com/p/feedparser/)</span>
|
|
<span class="n">RSS_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">RSS_UPDATE_INTERVAL</span> <span class="o">=</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">10</span> <span class="c1"># 10 minutes</span>
|
|
<span class="c1"># Grapevine (grapevine.haus) is a network for listing MUDs as well as allow</span>
|
|
<span class="c1"># users of said MUDs to communicate with each other on shared channels. To use,</span>
|
|
<span class="c1"># your game must first be registered by logging in and creating a game entry at</span>
|
|
<span class="c1"># https://grapevine.haus. Evennia links grapevine channels to in-game channels</span>
|
|
<span class="c1"># with the @grapevine2chan command, available once this flag is set</span>
|
|
<span class="c1"># Grapevine requires installing the pyopenssl library (pip install pyopenssl)</span>
|
|
<span class="n">GRAPEVINE_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Grapevine channels to allow connection to. See https://grapevine.haus/chat</span>
|
|
<span class="c1"># for the available channels. Only channels in this list can be linked to in-game</span>
|
|
<span class="c1"># channels later.</span>
|
|
<span class="n">GRAPEVINE_CHANNELS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"gossip"</span><span class="p">,</span> <span class="s2">"testing"</span><span class="p">]</span>
|
|
<span class="c1"># Grapevine authentication. Register your game at https://grapevine.haus to get</span>
|
|
<span class="c1"># them. These are secret and should thus be overridden in secret_settings file</span>
|
|
<span class="n">GRAPEVINE_CLIENT_ID</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="n">GRAPEVINE_CLIENT_SECRET</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="c1"># Discord (discord.com) is a popular communication service for many, especially</span>
|
|
<span class="c1"># for game communities. Evennia's channels can be connected to Discord channels</span>
|
|
<span class="c1"># and relay messages between Evennia and Discord. To use, you will need to create</span>
|
|
<span class="c1"># your own Discord application and bot.</span>
|
|
<span class="c1"># Discord also requires installing the pyopenssl library.</span>
|
|
<span class="c1"># Full step-by-step instructions are available in the official Evennia documentation.</span>
|
|
<span class="n">DISCORD_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># The Intents bitmask required by Discord bots to request particular API permissions.</span>
|
|
<span class="c1"># By default, this includes the basic guild status and message read/write flags.</span>
|
|
<span class="n">DISCORD_BOT_INTENTS</span> <span class="o">=</span> <span class="mi">105985</span>
|
|
<span class="c1"># The authentication token for the Discord bot. This should be kept secret and</span>
|
|
<span class="c1"># put in your secret_settings file.</span>
|
|
<span class="n">DISCORD_BOT_TOKEN</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="c1"># The account typeclass which the Evennia-side Discord relay bot will use.</span>
|
|
<span class="n">DISCORD_BOT_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.accounts.bots.DiscordBot"</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Django web features</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># While DEBUG is False, show a regular server error page on the web</span>
|
|
<span class="c1"># stuff, email the traceback to the people in the ADMINS tuple</span>
|
|
<span class="c1"># below. If True, show a detailed traceback for the web</span>
|
|
<span class="c1"># browser to display. Note however that this will leak memory when</span>
|
|
<span class="c1"># active, so make sure to turn it off for a production server!</span>
|
|
<span class="n">DEBUG</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># Emails are sent to these people if the above DEBUG value is False. If you'd</span>
|
|
<span class="c1"># rather prefer nobody receives emails, leave this commented out or empty.</span>
|
|
<span class="n">ADMINS</span> <span class="o">=</span> <span class="p">()</span> <span class="c1"># 'Your Name', 'your_email@domain.com'),)</span>
|
|
<span class="c1"># These guys get broken link notifications when SEND_BROKEN_LINK_EMAILS is True.</span>
|
|
<span class="n">MANAGERS</span> <span class="o">=</span> <span class="n">ADMINS</span>
|
|
<span class="c1"># This is a public point of contact for players or the public to contact</span>
|
|
<span class="c1"># a staff member or administrator of the site. It is publicly posted.</span>
|
|
<span class="n">STAFF_CONTACT_EMAIL</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="c1"># If using Sites/Pages from the web admin, this value must be set to the</span>
|
|
<span class="c1"># database-id of the Site (domain) we want to use with this game's Pages.</span>
|
|
<span class="n">SITE_ID</span> <span class="o">=</span> <span class="mi">1</span>
|
|
<span class="c1"># The age for sessions.</span>
|
|
<span class="c1"># Default: 1209600 (2 weeks, in seconds)</span>
|
|
<span class="n">SESSION_COOKIE_AGE</span> <span class="o">=</span> <span class="mi">1209600</span>
|
|
<span class="c1"># Session cookie domain</span>
|
|
<span class="c1"># Default: None</span>
|
|
<span class="n">SESSION_COOKIE_DOMAIN</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="c1"># The name of the cookie to use for sessions.</span>
|
|
<span class="c1"># Default: 'sessionid'</span>
|
|
<span class="n">SESSION_COOKIE_NAME</span> <span class="o">=</span> <span class="s2">"sessionid"</span>
|
|
<span class="c1"># Should the session expire when the browser closes?</span>
|
|
<span class="c1"># Default: False</span>
|
|
<span class="n">SESSION_EXPIRE_AT_BROWSER_CLOSE</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># If you set this to False, Django will make some optimizations so as not</span>
|
|
<span class="c1"># to load the internationalization machinery.</span>
|
|
<span class="n">USE_I18N</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># Where to find locales (no need to change this, most likely)</span>
|
|
<span class="n">LOCALE_PATHS</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_DIR</span><span class="p">,</span> <span class="s2">"locale/"</span><span class="p">)]</span>
|
|
<span class="c1"># How to display time stamps in e.g. the admin</span>
|
|
<span class="n">SHORT_DATETIME_FORMAT</span> <span class="o">=</span> <span class="s2">"Y-m-d H:i:s.u"</span>
|
|
<span class="n">DATETIME_FORMAT</span> <span class="o">=</span> <span class="s2">"Y-m-d H:i:s"</span> <span class="c1"># ISO 8601 but without T and timezone</span>
|
|
<span class="c1"># This should be turned off unless you want to do tests with Django's</span>
|
|
<span class="c1"># development webserver (normally Evennia runs its own server)</span>
|
|
<span class="n">SERVE_MEDIA</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="c1"># The master urlconf file that contains all of the sub-branches to the</span>
|
|
<span class="c1"># applications. Change this to add your own URLs to the website.</span>
|
|
<span class="n">ROOT_URLCONF</span> <span class="o">=</span> <span class="s2">"web.urls"</span>
|
|
<span class="c1"># Where users are redirected after logging in via contrib.auth.login.</span>
|
|
<span class="n">LOGIN_REDIRECT_URL</span> <span class="o">=</span> <span class="s2">"/"</span>
|
|
<span class="c1"># Where to redirect users when using the @login_required decorator.</span>
|
|
<span class="n">LOGIN_URL</span> <span class="o">=</span> <span class="n">reverse_lazy</span><span class="p">(</span><span class="s2">"login"</span><span class="p">)</span>
|
|
<span class="c1"># Where to redirect users who wish to logout.</span>
|
|
<span class="n">LOGOUT_URL</span> <span class="o">=</span> <span class="n">reverse_lazy</span><span class="p">(</span><span class="s2">"logout"</span><span class="p">)</span>
|
|
<span class="c1"># URL that handles the media served from MEDIA_ROOT.</span>
|
|
<span class="c1"># Example: "http://media.lawrence.com"</span>
|
|
<span class="n">MEDIA_URL</span> <span class="o">=</span> <span class="s2">"/media/"</span>
|
|
<span class="c1"># Absolute path to the directory that holds file uploads from web apps.</span>
|
|
<span class="n">MEDIA_ROOT</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"server"</span><span class="p">,</span> <span class="s2">".media"</span><span class="p">)</span>
|
|
<span class="c1"># URL prefix for admin media -- CSS, JavaScript and images. Make sure</span>
|
|
<span class="c1"># to use a trailing slash. Admin-related files are searched under STATIC_URL/admin.</span>
|
|
<span class="n">STATIC_URL</span> <span class="o">=</span> <span class="s2">"/static/"</span>
|
|
<span class="c1"># Absolute path to directory where the static data will be gathered into to be</span>
|
|
<span class="c1"># served by webserver.</span>
|
|
<span class="n">STATIC_ROOT</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"server"</span><span class="p">,</span> <span class="s2">".static"</span><span class="p">)</span>
|
|
<span class="c1"># Location of static data to overload the defaults from</span>
|
|
<span class="c1"># evennia/web/static.</span>
|
|
<span class="n">STATICFILES_DIRS</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"web"</span><span class="p">,</span> <span class="s2">"static"</span><span class="p">)]</span>
|
|
<span class="c1"># Patterns of files in the static directories. Used here to make sure that</span>
|
|
<span class="c1"># its readme file is preserved but unused.</span>
|
|
<span class="n">STATICFILES_IGNORE_PATTERNS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"README.md"</span><span class="p">]</span>
|
|
<span class="c1"># The name of the currently selected web template. This corresponds to the</span>
|
|
<span class="c1"># directory names shown in the templates directory.</span>
|
|
<span class="n">WEBSITE_TEMPLATE</span> <span class="o">=</span> <span class="s2">"website"</span>
|
|
<span class="n">WEBCLIENT_TEMPLATE</span> <span class="o">=</span> <span class="s2">"webclient"</span>
|
|
<span class="c1"># We setup the location of the website template as well as the admin site.</span>
|
|
<span class="n">TEMPLATES</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"BACKEND"</span><span class="p">:</span> <span class="s2">"django.template.backends.django.DjangoTemplates"</span><span class="p">,</span>
|
|
<span class="s2">"DIRS"</span><span class="p">:</span> <span class="p">[</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"web"</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">),</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"web"</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">,</span> <span class="n">WEBSITE_TEMPLATE</span><span class="p">),</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">"web"</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">,</span> <span class="n">WEBCLIENT_TEMPLATE</span><span class="p">),</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_DIR</span><span class="p">,</span> <span class="s2">"web"</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">),</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_DIR</span><span class="p">,</span> <span class="s2">"web"</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">,</span> <span class="n">WEBSITE_TEMPLATE</span><span class="p">),</span>
|
|
<span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_DIR</span><span class="p">,</span> <span class="s2">"web"</span><span class="p">,</span> <span class="s2">"templates"</span><span class="p">,</span> <span class="n">WEBCLIENT_TEMPLATE</span><span class="p">),</span>
|
|
<span class="p">],</span>
|
|
<span class="s2">"APP_DIRS"</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
|
|
<span class="s2">"OPTIONS"</span><span class="p">:</span> <span class="p">{</span>
|
|
<span class="s2">"context_processors"</span><span class="p">:</span> <span class="p">[</span>
|
|
<span class="s2">"django.template.context_processors.i18n"</span><span class="p">,</span>
|
|
<span class="s2">"django.template.context_processors.request"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.auth.context_processors.auth"</span><span class="p">,</span>
|
|
<span class="s2">"django.template.context_processors.media"</span><span class="p">,</span>
|
|
<span class="s2">"django.template.context_processors.debug"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.messages.context_processors.messages"</span><span class="p">,</span>
|
|
<span class="s2">"sekizai.context_processors.sekizai"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.web.utils.general_context.general_context"</span><span class="p">,</span>
|
|
<span class="p">],</span>
|
|
<span class="c1"># While true, show "pretty" error messages for template syntax errors.</span>
|
|
<span class="s2">"debug"</span><span class="p">:</span> <span class="n">DEBUG</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="p">}</span>
|
|
<span class="p">]</span>
|
|
<span class="c1"># Django cache settings</span>
|
|
<span class="c1"># https://docs.djangoproject.com/en/4.1/topics/cache/#setting-up-the-cache</span>
|
|
<span class="n">CACHES</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"default"</span><span class="p">:</span> <span class="p">{</span>
|
|
<span class="s2">"BACKEND"</span><span class="p">:</span> <span class="s2">"django.core.cache.backends.locmem.LocMemCache"</span><span class="p">,</span>
|
|
<span class="p">},</span>
|
|
<span class="s2">"throttle"</span><span class="p">:</span> <span class="p">{</span>
|
|
<span class="s2">"BACKEND"</span><span class="p">:</span> <span class="s2">"django.core.cache.backends.locmem.LocMemCache"</span><span class="p">,</span>
|
|
<span class="s2">"TIMEOUT"</span><span class="p">:</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">5</span><span class="p">,</span>
|
|
<span class="s2">"OPTIONS"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"MAX_ENTRIES"</span><span class="p">:</span> <span class="mi">2000</span><span class="p">},</span>
|
|
<span class="p">},</span>
|
|
<span class="p">}</span>
|
|
<span class="c1"># MiddleWare are semi-transparent extensions to Django's functionality.</span>
|
|
<span class="c1"># see http://www.djangoproject.com/documentation/middleware/ for a more detailed</span>
|
|
<span class="c1"># explanation.</span>
|
|
<span class="n">MIDDLEWARE</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">"django.middleware.common.CommonMiddleware"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.sessions.middleware.SessionMiddleware"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.messages.middleware.MessageMiddleware"</span><span class="p">,</span> <span class="c1"># 1.4?</span>
|
|
<span class="s2">"django.contrib.auth.middleware.AuthenticationMiddleware"</span><span class="p">,</span>
|
|
<span class="s2">"django.middleware.csrf.CsrfViewMiddleware"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.admindocs.middleware.XViewMiddleware"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.flatpages.middleware.FlatpageFallbackMiddleware"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.web.utils.middleware.SharedLoginMiddleware"</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Evennia components</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Global and Evennia-specific apps. This ties everything together so we can</span>
|
|
<span class="c1"># refer to app models and perform DB syncs.</span>
|
|
<span class="n">INSTALLED_APPS</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">"django.contrib.auth"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.contenttypes"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.sessions"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.admindocs"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.flatpages"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.sites"</span><span class="p">,</span>
|
|
<span class="s2">"django.contrib.staticfiles"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.web.utils.adminsite.EvenniaAdminApp"</span><span class="p">,</span> <span class="c1"># replaces django.contrib.admin</span>
|
|
<span class="s2">"django.contrib.messages"</span><span class="p">,</span>
|
|
<span class="s2">"rest_framework"</span><span class="p">,</span>
|
|
<span class="s2">"django_filters"</span><span class="p">,</span>
|
|
<span class="s2">"sekizai"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.utils.idmapper"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.server"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.typeclasses"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.accounts"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.objects"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.comms"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.help"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.scripts"</span><span class="p">,</span>
|
|
<span class="s2">"evennia.web"</span><span class="p">,</span>
|
|
<span class="p">]</span>
|
|
<span class="c1"># The user profile extends the User object with more functionality;</span>
|
|
<span class="c1"># This should usually not be changed.</span>
|
|
<span class="n">AUTH_USER_MODEL</span> <span class="o">=</span> <span class="s2">"accounts.AccountDB"</span>
|
|
|
|
<span class="c1"># Password validation plugins</span>
|
|
<span class="c1"># https://docs.djangoproject.com/en/4.1/ref/settings/#auth-password-validators</span>
|
|
<span class="n">AUTH_PASSWORD_VALIDATORS</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="p">{</span><span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"django.contrib.auth.password_validation.UserAttributeSimilarityValidator"</span><span class="p">},</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"django.contrib.auth.password_validation.MinimumLengthValidator"</span><span class="p">,</span>
|
|
<span class="s2">"OPTIONS"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"min_length"</span><span class="p">:</span> <span class="mi">8</span><span class="p">},</span>
|
|
<span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"django.contrib.auth.password_validation.CommonPasswordValidator"</span><span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"django.contrib.auth.password_validation.NumericPasswordValidator"</span><span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"evennia.server.validators.EvenniaPasswordValidator"</span><span class="p">},</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1"># Username validation plugins</span>
|
|
<span class="n">AUTH_USERNAME_VALIDATORS</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="p">{</span><span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"django.contrib.auth.validators.ASCIIUsernameValidator"</span><span class="p">},</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"django.core.validators.MinLengthValidator"</span><span class="p">,</span>
|
|
<span class="s2">"OPTIONS"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"limit_value"</span><span class="p">:</span> <span class="mi">3</span><span class="p">},</span>
|
|
<span class="p">},</span>
|
|
<span class="p">{</span>
|
|
<span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"django.core.validators.MaxLengthValidator"</span><span class="p">,</span>
|
|
<span class="s2">"OPTIONS"</span><span class="p">:</span> <span class="p">{</span><span class="s2">"limit_value"</span><span class="p">:</span> <span class="mi">30</span><span class="p">},</span>
|
|
<span class="p">},</span>
|
|
<span class="p">{</span><span class="s2">"NAME"</span><span class="p">:</span> <span class="s2">"evennia.server.validators.EvenniaUsernameAvailabilityValidator"</span><span class="p">},</span>
|
|
<span class="p">]</span>
|
|
|
|
<span class="c1"># Use a custom test runner that just tests Evennia-specific apps.</span>
|
|
<span class="n">TEST_RUNNER</span> <span class="o">=</span> <span class="s2">"evennia.server.tests.testrunner.EvenniaTestSuiteRunner"</span>
|
|
|
|
<span class="c1"># Messages and Bootstrap don't classify events the same way; this setting maps</span>
|
|
<span class="c1"># messages.error() to Bootstrap 'danger' classes.</span>
|
|
<span class="n">MESSAGE_TAGS</span> <span class="o">=</span> <span class="p">{</span><span class="n">messages</span><span class="o">.</span><span class="n">ERROR</span><span class="p">:</span> <span class="s2">"danger"</span><span class="p">}</span>
|
|
|
|
<span class="c1"># Django REST Framework settings</span>
|
|
<span class="n">REST_FRAMEWORK</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="c1"># django_filters allows you to specify search fields for models in an API View</span>
|
|
<span class="s2">"DEFAULT_FILTER_BACKENDS"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"django_filters.rest_framework.DjangoFilterBackend"</span><span class="p">,),</span>
|
|
<span class="c1"># whether to paginate results and how many per page</span>
|
|
<span class="s2">"DEFAULT_PAGINATION_CLASS"</span><span class="p">:</span> <span class="s2">"rest_framework.pagination.LimitOffsetPagination"</span><span class="p">,</span>
|
|
<span class="s2">"PAGE_SIZE"</span><span class="p">:</span> <span class="mi">25</span><span class="p">,</span>
|
|
<span class="c1"># require logged in users to call API so that access checks can work on them</span>
|
|
<span class="s2">"DEFAULT_PERMISSION_CLASSES"</span><span class="p">:</span> <span class="p">[</span>
|
|
<span class="s2">"rest_framework.permissions.IsAuthenticated"</span><span class="p">,</span>
|
|
<span class="p">],</span>
|
|
<span class="c1"># These are the different ways people can authenticate for API requests - via</span>
|
|
<span class="c1"># session or with user/password. Other ways are possible, such as via tokens</span>
|
|
<span class="c1"># or oauth, but require additional dependencies.</span>
|
|
<span class="s2">"DEFAULT_AUTHENTICATION_CLASSES"</span><span class="p">:</span> <span class="p">[</span>
|
|
<span class="s2">"rest_framework.authentication.BasicAuthentication"</span><span class="p">,</span>
|
|
<span class="s2">"rest_framework.authentication.SessionAuthentication"</span><span class="p">,</span>
|
|
<span class="p">],</span>
|
|
<span class="c1"># default permission checks used by the EvenniaPermission class</span>
|
|
<span class="s2">"DEFAULT_CREATE_PERMISSION"</span><span class="p">:</span> <span class="s2">"builder"</span><span class="p">,</span>
|
|
<span class="s2">"DEFAULT_LIST_PERMISSION"</span><span class="p">:</span> <span class="s2">"builder"</span><span class="p">,</span>
|
|
<span class="s2">"DEFAULT_VIEW_LOCKS"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"examine"</span><span class="p">],</span>
|
|
<span class="s2">"DEFAULT_DESTROY_LOCKS"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"delete"</span><span class="p">],</span>
|
|
<span class="s2">"DEFAULT_UPDATE_LOCKS"</span><span class="p">:</span> <span class="p">[</span><span class="s2">"control"</span><span class="p">,</span> <span class="s2">"edit"</span><span class="p">],</span>
|
|
<span class="c1"># No throttle class set by default. Setting one also requires a cache backend to be specified.</span>
|
|
<span class="p">}</span>
|
|
|
|
<span class="c1"># To enable the REST api, turn this to True</span>
|
|
<span class="n">REST_API_ENABLED</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Networking Replaceables</span>
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># This allows for replacing the very core of the infrastructure holding Evennia</span>
|
|
<span class="c1"># together with your own variations. You should usually never have to touch</span>
|
|
<span class="c1"># this, and if so, you really need to know what you are doing.</span>
|
|
|
|
<span class="c1"># The Base Session Class is used as a parent class for all Protocols such as</span>
|
|
<span class="c1"># Telnet and SSH.) Changing this could be really dangerous. It will cascade</span>
|
|
<span class="c1"># to tons of classes. You generally shouldn't need to touch protocols.</span>
|
|
<span class="n">BASE_SESSION_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.session.Session"</span>
|
|
|
|
<span class="c1"># Telnet Protocol inherits from whatever above BASE_SESSION_CLASS is specified.</span>
|
|
<span class="c1"># It is used for all telnet connections, and is also inherited by the SSL Protocol</span>
|
|
<span class="c1"># (which is just TLS + Telnet).</span>
|
|
<span class="n">TELNET_PROTOCOL_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.portal.telnet.TelnetProtocol"</span>
|
|
<span class="n">SSL_PROTOCOL_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.portal.ssl.SSLProtocol"</span>
|
|
|
|
<span class="c1"># Websocket Client Protocol. This inherits from BASE_SESSION_CLASS. It is used</span>
|
|
<span class="c1"># for all webclient connections.</span>
|
|
<span class="n">WEBSOCKET_PROTOCOL_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.portal.webclient.WebSocketClient"</span>
|
|
|
|
<span class="c1"># Protocol for the SSH interface. This inherits from BASE_SESSION_CLASS.</span>
|
|
<span class="n">SSH_PROTOCOL_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.portal.ssh.SshProtocol"</span>
|
|
|
|
<span class="c1"># Server-side session class used. This will inherit from BASE_SESSION_CLASS.</span>
|
|
<span class="c1"># This one isn't as dangerous to replace.</span>
|
|
<span class="n">SERVER_SESSION_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.serversession.ServerSession"</span>
|
|
|
|
<span class="c1"># The Server SessionHandler manages all ServerSessions, handling logins,</span>
|
|
<span class="c1"># ensuring the login process happens smoothly, handling expected and</span>
|
|
<span class="c1"># unexpected disconnects. You shouldn't need to touch it, but you can.</span>
|
|
<span class="c1"># Replace it to implement altered game logic.</span>
|
|
<span class="n">SERVER_SESSION_HANDLER_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.sessionhandler.ServerSessionHandler"</span>
|
|
|
|
<span class="c1"># The Portal SessionHandler manages all incoming connections regardless of</span>
|
|
<span class="c1"># the protocol in use. It is responsible for keeping them going and informing</span>
|
|
<span class="c1"># the Server Session Handler of the connections and synchronizing them across the</span>
|
|
<span class="c1"># AMP connection. You shouldn't ever need to change this. But you can.</span>
|
|
<span class="n">PORTAL_SESSION_HANDLER_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.portal.portalsessionhandler.PortalSessionHandler"</span>
|
|
|
|
|
|
<span class="c1"># These are members / properties / attributes kept on both Server and</span>
|
|
<span class="c1"># Portal Sessions. They are sync'd at various points, such as logins and</span>
|
|
<span class="c1"># reloads. If you add to this, you may need to adjust the class __init__</span>
|
|
<span class="c1"># so the additions have somewhere to go. These must be simple things that</span>
|
|
<span class="c1"># can be pickled - stuff you could serialize to JSON is best.</span>
|
|
<span class="n">SESSION_SYNC_ATTRS</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"protocol_key"</span><span class="p">,</span>
|
|
<span class="s2">"address"</span><span class="p">,</span>
|
|
<span class="s2">"suid"</span><span class="p">,</span>
|
|
<span class="s2">"sessid"</span><span class="p">,</span>
|
|
<span class="s2">"uid"</span><span class="p">,</span>
|
|
<span class="s2">"csessid"</span><span class="p">,</span>
|
|
<span class="s2">"uname"</span><span class="p">,</span>
|
|
<span class="s2">"logged_in"</span><span class="p">,</span>
|
|
<span class="s2">"puid"</span><span class="p">,</span>
|
|
<span class="s2">"conn_time"</span><span class="p">,</span>
|
|
<span class="s2">"cmd_last"</span><span class="p">,</span>
|
|
<span class="s2">"cmd_last_visible"</span><span class="p">,</span>
|
|
<span class="s2">"cmd_total"</span><span class="p">,</span>
|
|
<span class="s2">"protocol_flags"</span><span class="p">,</span>
|
|
<span class="s2">"server_data"</span><span class="p">,</span>
|
|
<span class="s2">"cmdset_storage_string"</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># The following are used for the communications between the Portal and Server.</span>
|
|
<span class="c1"># Very dragons territory.</span>
|
|
<span class="n">AMP_SERVER_PROTOCOL_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.portal.amp_server.AMPServerProtocol"</span>
|
|
<span class="n">AMP_CLIENT_PROTOCOL_CLASS</span> <span class="o">=</span> <span class="s2">"evennia.server.amp_client.AMPServerClientProtocol"</span>
|
|
|
|
<span class="c1"># don't change this manually, it can be checked from code to know if</span>
|
|
<span class="c1"># being run from a unit test (set by the evennia.utils.test_resources.BaseEvenniaTest</span>
|
|
<span class="c1"># and BaseEvenniaTestCase unit testing parents)</span>
|
|
<span class="n">_TEST_ENVIRONMENT</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1">######################################################################</span>
|
|
<span class="c1"># Django extensions</span>
|
|
<span class="c1">######################################################################</span>
|
|
|
|
<span class="c1"># Django extesions are useful third-party tools that are not</span>
|
|
<span class="c1"># always included in the default django distro.</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="kn">import</span> <span class="nn">django_extensions</span> <span class="c1"># noqa</span>
|
|
|
|
<span class="n">INSTALLED_APPS</span> <span class="o">+=</span> <span class="p">[</span><span class="s2">"django_extensions"</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
|
<span class="c1"># Django extensions are not installed in all distros.</span>
|
|
<span class="k">pass</span>
|
|
|
|
<span class="c1">#######################################################################</span>
|
|
<span class="c1"># SECRET_KEY</span>
|
|
<span class="c1">#######################################################################</span>
|
|
<span class="c1"># This is the signing key for the cookies generated by Evennia's</span>
|
|
<span class="c1"># web interface.</span>
|
|
<span class="c1">#</span>
|
|
<span class="c1"># It is a fallback for the SECRET_KEY setting in settings.py, which</span>
|
|
<span class="c1"># is randomly seeded when settings.py is first created. If copying</span>
|
|
<span class="c1"># from here, make sure to change it!</span>
|
|
<span class="n">SECRET_KEY</span> <span class="o">=</span> <span class="s2">"changeme!(*#&*($&*(#*(&SDFKJJKLS*(@#KJAS"</span>
|
|
|
|
</pre></div>
|
|
</div>
|
|
</section>
|
|
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="right" >
|
|
<a href="Choosing-a-Database.html" title="Choosing a database"
|
|
>next</a> |</li>
|
|
<li class="right" >
|
|
<a href="Settings.html" title="Changing Game Settings"
|
|
>previous</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 2.x</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="Setup-Overview.html" >Server Setup and Life</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">Evennia Default settings file</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2023, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |