evennia/docs/6.x/Coding/Changelog.html
2026-02-15 19:06:04 +01:00

1921 lines
No EOL
191 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Changelog &#8212; Evennia latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=279e0f84" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=e4a91a55" />
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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="Evennia 1.0 Release Notes" href="Release-Notes-1.0.html" />
<link rel="prev" title="Setting up PyCharm with Evennia" href="Setting-up-PyCharm.html" />
</head><body>
<div class="related" role="navigation" aria-label="Related">
<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="Release-Notes-1.0.html" title="Evennia 1.0 Release Notes"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Setting-up-PyCharm.html" title="Setting up PyCharm with Evennia"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Coding-Overview.html" accesskey="U">Coding and development help</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">Changelog</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section class="tex2jax_ignore mathjax_ignore" id="changelog">
<h1>Changelog<a class="headerlink" href="#changelog" title="Link to this heading"></a></h1>
<section id="evennia-6-0-0">
<h2>Evennia 6.0.0<a class="headerlink" href="#evennia-6-0-0" title="Link to this heading"></a></h2>
<p>Feb 15, 2026</p>
<ul class="simple">
<li><p>Feat (backwards incompatble): Drop Python 3.11 support (supported: Python 3.12, 3.13, 3.14 (req)). (Griatch)</p></li>
<li><p>Security: Django &gt;=6.0.2 (&lt;6.1), Django RestFramework 3.16 (Griatch)</p></li>
<li><p>Update: <code class="docutils literal notranslate"><span class="pre">XYZGrid</span></code> contrib now requires scipy 1.15-&gt;1.17. Note: Pathfinding may pick different
shortest routes from before, due to private changes in scipy Dijkstra algorithm (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3599">Feat</a>: Make <code class="docutils literal notranslate"><span class="pre">at_pre_cmd</span></code> testable in unit tests (blongden)</p></li>
<li><p>[Fix]: API /openapi/setattribute endpoints were both POST and PUT, causing schema
errors; now changed to PUT only. (Griatch)</p></li>
<li><p>[Feat][issue2627]: Add <code class="docutils literal notranslate"><span class="pre">settings.AUDIT_MASKS</span></code> to customize what Evennia should
obfuscate in server error logs (such as passwords from custom login commands) (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3799">Fix</a>: Fix typo in <code class="docutils literal notranslate"><span class="pre">basic_tc.py</span></code> contrib for beginner tutorial (Tharic99)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3806">Fix</a>: EvMore wouldnt pass Session to next cmd when exiting (gas-public-wooden-clean)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3809">Fix</a>: Admin page - Repair link to Account button (UserlandAlchemist)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3811">Fix</a>: Website login banner shows before login attempt (UserlandAlchemist)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3817">Fix</a>: <code class="docutils literal notranslate"><span class="pre">ingame_reports</span></code> i18n fix (peddn)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3818">Fix</a>: Update spawn hook to use <code class="docutils literal notranslate"><span class="pre">new_prototype</span></code> (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3815">Fix</a>: Performance improvement in large cmdset mergers (blongden)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3831">Fix</a>: Performance optimization in ANSIString, performance boost for large colored
strings (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3832">Fix</a>: Fix typo in prototype causing homogenized locks to use
fallbacks incorrectly (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3834">Fix</a>: Fix so <code class="docutils literal notranslate"><span class="pre">$obj(#123)</span></code> inline function works in prototype spawning (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3836">Fix</a>: Correctly handling calling <code class="docutils literal notranslate"><span class="pre">create_object</span></code> with <code class="docutils literal notranslate"><span class="pre">key=None</span></code> (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3852">Fix</a>: Django 5.2+ was not properly detected. Fixing distutils being
removed in py3.12 for new installs (count-infinity)</p></li>
<li><p>[Fix][pull3845]: Fix exponential ANSI markup explosions when slicing
ANSIString after reset (speeds up EvForm other string ops, fixes compatibility) (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3853">Fix</a>: Properly handle multimatch separations with native dashes, like
t-shirt-1 (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3853">Fix</a>: Allow <code class="docutils literal notranslate"><span class="pre">CmdSetAttribute</span></code> to use categery, view dicts by key (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3858">Fix</a>: Fix parsing issues in dice contrib (Griatch)</p></li>
<li><p>Fix: <code class="docutils literal notranslate"><span class="pre">Typeclass.objects.get_by_tag()</span></code> will now always convert tag keys/categories to integers, to
avoid inconsistencies with PostgreSQL databases (Griatch)</p></li>
<li><p>[Fix][issue3513]: Fixed issue where OnDemandHandler could traceback on an
un-pickle-able object and cause an error at server shutdown (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3649">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">:j</span></code> command in EvEditor would squash empty lines (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3560">Fix</a>: Tutorial QuestHandler failed to load after server restart (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3601">Fix</a>: <code class="docutils literal notranslate"><span class="pre">CmdSet.add(...,</span> <span class="pre">allow_duplicates=True)</span></code> didnt allow duplicate cmd keys (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3194">Fix</a>: Make filtering on AttributeProperties consistent across typeclasses (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/2774">Fix</a>: Properly support <code class="docutils literal notranslate"><span class="pre">\n</span></code> in <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">connections</span></code> long descriptions (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3312">Fix</a>: Handle all edge cases breaking <code class="docutils literal notranslate"><span class="pre">monitor/monitored</span></code> <code class="docutils literal notranslate"><span class="pre">input_funcs</span></code> (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3154">Fix</a>: Persistent EvMenu caused multiple cmdsets on reload (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3193">Fix</a>: Formatting of inner nested evtable would break (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3082">Fix</a>: MXP linking broke EvTable formatting (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3693">Fix</a>: Using <code class="docutils literal notranslate"><span class="pre">|/</span></code> in EvTable broke padding (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3864">Fix</a>: Correctly use cached dijkstra results for XYZGrid (jaborsh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3863">Fix</a>: <code class="docutils literal notranslate"><span class="pre">XYZGrid</span></code> performance improvement in teleporter search (jaborsh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3862">Fix</a>: <code class="docutils literal notranslate"><span class="pre">TraitHandler</span></code> typo/bug fixes (jaborsh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3801">Doc</a>: Move Evennia doc build system to latest Sphinx/myST
(PowershellNinja, also honorary mention to electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3800">Doc</a>: Describe support for Telnet SSH in HAProxy documentation (holl0wstar)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3825">Doc</a>: Update Portuguese translation (marado)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3826">Doc</a>: Fix broken links in README (marado)</p></li>
<li><p>Docs: marado, Griatch, Hasna878, count-infinity</p></li>
</ul>
</section>
<section id="evennia-5-0-1">
<h2>Evennia 5.0.1<a class="headerlink" href="#evennia-5-0-1" title="Link to this heading"></a></h2>
<p>Jul 2, 2025</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3796">Fix</a>: Fix Django version minimum string being too picky, causing
confusing warning message on startup (Griatch)</p></li>
</ul>
</section>
<section id="evennia-5-0-0">
<h2>Evennia 5.0.0<a class="headerlink" href="#evennia-5-0-0" title="Link to this heading"></a></h2>
<p>Jul 1, 2025</p>
<p>Updated dependencies: Django &gt;5.2 (&lt;5.3), Twisted &gt;24 (&lt;25).
Python versions: 3.11, 3.12, 3.13.</p>
<p>This upgrade requires running <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">migrate</span></code> on your existing database
(ignore any prompts to run <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">makemigrations</span></code>).</p>
<ul class="simple">
<li><p>Feat (backwards incompatible): RUN MIGRATIONS (<code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">migrate</span></code>): Now requiring Django 5.1 (Griatch)</p></li>
<li><p>Feat (backwards incompatible): Drop support and testing for Python 3.10 (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3719">Feat</a>: Support Python 3.13. (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3633">Feat</a>: Default objects default descs are now taken from a <code class="docutils literal notranslate"><span class="pre">default_description</span></code>
class variable instead of the <code class="docutils literal notranslate"><span class="pre">desc</span></code> Attribute always being set (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3718">Feat</a>: Remove twistd.bat creation for Windows, should not be needed anymore (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3756">Feat</a>: Updated German translation (JohnFi)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3757">Feat</a>: Add more i18n strings to <code class="docutils literal notranslate"><span class="pre">DefaultObject</span></code> for easier translation (JohnFi)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3783">Feat</a>: Support users of <code class="docutils literal notranslate"><span class="pre">ruff</span></code> linter by adding compatible config in <code class="docutils literal notranslate"><span class="pre">pyproject.toml</span></code> (jaborsh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3777">Feat</a>: New contrib <code class="docutils literal notranslate"><span class="pre">debugpy</span></code> for debugging Evennia with in VSCode with <code class="docutils literal notranslate"><span class="pre">debugpy</span></code> adapter (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3795">Feat</a>: Support evennia launcher for use with <code class="docutils literal notranslate"><span class="pre">uv</span></code> installation (TehomCD)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3677">Fix</a>: Make sure that <code class="docutils literal notranslate"><span class="pre">DefaultAccount.create</span></code> normalizes to empty
strings instead of <code class="docutils literal notranslate"><span class="pre">None</span></code> if no name is provided, also enforce string type (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3682">Fix</a>: Allow in-game help searching for commands natively starting
with <code class="docutils literal notranslate"><span class="pre">*</span></code> (which is the Lunr search wildcard) (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3684">Fix</a>: Web client stopped auto-focusing the input box after opening settings (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3689">Fix</a>: Partial matching fix in default search, makes sure e.g. <code class="docutils literal notranslate"><span class="pre">b</span> <span class="pre">sw</span></code> uniquely
finds <code class="docutils literal notranslate"><span class="pre">big</span> <span class="pre">sword</span></code> even if another type of sword is around (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3690">Fix</a>: In searches, allow special here and me keywords only be valid queries
unless current location and/or caller is in valid search candidates respectively (InspectorCaracal)</p></li>
<li><p>[Fix][pull3694]: Funcparser swallowing rest of line after a <code class="docutils literal notranslate"><span class="pre">\</span></code>-escape (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3705">Fix</a>: Properly serialize <code class="docutils literal notranslate"><span class="pre">IntFlag</span></code> enum types (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3707">Fix</a>: Correct links in <code class="docutils literal notranslate"><span class="pre">about</span></code> command (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3710">Fix</a>: Clean reduntant session clearin in <code class="docutils literal notranslate"><span class="pre">at_server_cold_start</span></code> (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3711">Fix</a>: Usability improvements in the Discord integration (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3721">Fix</a>: Avoid loading cmdsets that dont need to be checked, avoiding
a performance hit for loading cmdsets in rooms with a lot of objects (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3688">Fix</a>: Made TutorialWorld possible to build cleanly without being a superuser (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3687">Fix</a>: Fixed batchcommand/interactive with developer perms (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3723">Fix</a>: Bug in <code class="docutils literal notranslate"><span class="pre">ingame-map-display</span></code> contrib when using ordinal alises (aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3726">Fix</a>: Fix Twisted v25 issue with returnValue()</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3729">Fix</a>: Godot client text2bbcode mxp link conversion error (ChrisLR)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3737">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">--gamedir</span></code> command didnt properly set the alt gamedir (Russel-Jones)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3739">Fix</a>: Fixing f-string in <a class="reference external" href="http://account.py">account.py</a> for i18n (JohnFi)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3744">Fix</a>: Fix for format strings not getting picked up in i18n (JohnFi)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3743">Fix</a>: Log full stack trace on failed object creation (aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3747">Fix</a>: TutorialWorld bridge-room didnt correctly randomize weather effects (SpyrosRoum)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3765">Fix</a>: Storing TickerHandler <code class="docutils literal notranslate"><span class="pre">store_key</span></code> in a db attribute would not
work correctly (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3753">Fix</a>: Make sure <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code>s are initialized with default values also in parent class (JohnFi)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3751">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">access</span></code> and <code class="docutils literal notranslate"><span class="pre">inventory</span></code> commands would traceback if run on a character without an Account (EliasWatson)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3768">Fix</a>: Make sure the <code class="docutils literal notranslate"><span class="pre">CmdCopy</span></code> command copies object categories,
since otherwise plurals were lost (jaborsh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3788">Fix</a>: <code class="docutils literal notranslate"><span class="pre">GLOBAL_SCRIPTS.all()</span></code> raised error (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3790">Fix</a>: Fix migration issue due to new db init-check code in launcher (Griatch)</p></li>
<li><p>[Fix][issue3794]: Make sure to pass <code class="docutils literal notranslate"><span class="pre">move_type</span></code> kwarg to <code class="docutils literal notranslate"><span class="pre">at_pre_object_receive|leave</span></code> hooks (Griatch)</p></li>
<li><p>Fix: <code class="docutils literal notranslate"><span class="pre">options</span></code> setting <code class="docutils literal notranslate"><span class="pre">NOPROMPTGOAHEAD</span></code> was not possible to set (Griatch)</p></li>
<li><p>Fix: Make <code class="docutils literal notranslate"><span class="pre">\\</span></code> properly preserve one backlash in funcparser (Griatch)</p></li>
<li><p>Fix: The testing echo inputfunc didnt work correctly; now returns both args/kwargs (Griatch)</p></li>
<li><p>Fix: When an object was used as an On-Demand Tasks category, and that object was then deleted,
it caused an OnDemandHandler save error on reload. Will now clean up on save. (Griatch)
used as the tasks category (Griatch)</p></li>
<li><p>Fix: Correct aws contribs use of legacy django string utils (Griatch)</p></li>
<li><p>[Docs]: Fixes from InspectorCaracal, Griatch, ChrisLR, JohnFi, electroglyph, jaborsh, Problematic, BlaneWins</p></li>
</ul>
</section>
<section id="evennia-4-5-0">
<h2>Evennia 4.5.0<a class="headerlink" href="#evennia-4-5-0" title="Link to this heading"></a></h2>
<p>Nov 12, 2024</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3634">Feat</a>: New contrib for in-game <code class="docutils literal notranslate"><span class="pre">storage</span></code> of items in rooms (aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3636">Feat</a>: Make <code class="docutils literal notranslate"><span class="pre">cpattr</span></code> command also support Attribute categories (aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3653">Feat</a>: Updated Chinese translation (Pridell).</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3635">Fix</a>: Fix memory leak in Portal Telnet connections, force weak
references to Telnet negotiations, stop LoopingCall on disconnect (a-rodian-jedi)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3626">Fix</a>: Typo in <code class="docutils literal notranslate"><span class="pre">defense_type</span></code> in evadventure tutorial (feyrkh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3632">Fix</a>: Made fallback permissions on be set correctly (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3639">Fix</a>: Fix <code class="docutils literal notranslate"><span class="pre">system</span></code> command when environment uses a language with
commas for decimal points (aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3645">Fix</a>: Correct <code class="docutils literal notranslate"><span class="pre">character_creator</span></code> contribs error return (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3640">Fix</a>: Typo fixes for conjugate verbs (aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3647">Fix</a>: Contents cache didnt reset internal typecache on use of <code class="docutils literal notranslate"><span class="pre">init</span></code> hook (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3627">Fix</a>: Traceback from contrib <code class="docutils literal notranslate"><span class="pre">in-game</span> <span class="pre">reports</span></code> <code class="docutils literal notranslate"><span class="pre">help</span> <span class="pre">manage</span></code> command (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3643">Fix</a>: Fix for Commands metaclass interpreting e.g. <code class="docutils literal notranslate"><span class="pre">usercmd:false()</span></code> locks as
a <code class="docutils literal notranslate"><span class="pre">cmd:</span></code> type lock for the purposes of default access fallbacks (Griatch).</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3651">Fix</a>: EvEditor <code class="docutils literal notranslate"><span class="pre">:j</span></code> defaulted to full justify instead of left as
was documented (willmofield)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3657">Fix</a>: Fix error in <code class="docutils literal notranslate"><span class="pre">do_search</span></code> that caused <code class="docutils literal notranslate"><span class="pre">FileHelpEntries</span></code> to
traceback (a-rodian-jedi)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3660">Fix</a>: Numbered aliases didnt refresh after a object rename unless
the endpoint hook was re-called; now triggers the call autiomatically (count-infinity)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3664">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">Account.last_login</span></code> field was updated also when user
disconnected, which is not useful (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3665">Fix</a>: Remove faulty verb conjugation exceptions for offer,
hinder and alter in automatic verb-conjugation engine (aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3669">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">page</span></code> command tracebacked for some input combinations (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3642">Fix</a>: Give friendlier error if EvMore object is not available
neither on Object, nor on account fallback. (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3655">Docs</a>: Fixed many erroneously created links on <code class="docutils literal notranslate"><span class="pre">file.py</span></code> names in
the docs (marado)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3576">Docs</a>: Rework doc for <a class="reference external" href="https://www.evennia.com/docs/latest/Coding/Setting-up-PyCharm.html">Pycharm howto</a></p></li>
<li><p>Docs updates: feykrh, Griatch, marado, jaborsh</p></li>
</ul>
</section>
<section id="evennia-4-4-1">
<h2>Evennia 4.4.1<a class="headerlink" href="#evennia-4-4-1" title="Link to this heading"></a></h2>
<p>Oct 1, 2024</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3629">Fix</a>: Reverting change of default Sqlite3 PRAGMA settings, changing them for
existing database caused corruption of db. For empty db, can still change in
<code class="docutils literal notranslate"><span class="pre">SQLITE3_PRAGMAS</span></code> settings. (Griatch)</p></li>
</ul>
</section>
<section id="evennia-4-4-0">
<h2>Evennia 4.4.0<a class="headerlink" href="#evennia-4-4-0" title="Link to this heading"></a></h2>
<p>Sep 29, 2024</p>
<blockquote>
<div><p>WARNING: Due to a bug in the default Sqlite3 PRAGMA settings, it is
recommended to not upgrade to this version if you are using Sqlite3.
Use <code class="docutils literal notranslate"><span class="pre">4.4.1</span></code> or higher instead.</p>
</div></blockquote>
<ul class="simple">
<li><p>Feat: Support <code class="docutils literal notranslate"><span class="pre">scripts</span> <span class="pre">key:typeclass</span></code> to create global scripts
with dynamic keys (rather than just relying on typeclass key) (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3595">Feat</a>: Tweak Sqlite3 PRAGMAs for better performance (electroglyph)</p></li>
<li><p>Feat: Make Sqlite3 PRAGMAs configurable via settings (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3592">Feat</a>: Revised German locationlization (Du instead of Sie,
cleanup) (Drakon72)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3541">Feat</a>: Rework main Object searching to respect partial matches, empty
search now partial matching all candidates, overall cleanup (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3588">Feat</a>: New <code class="docutils literal notranslate"><span class="pre">DefaultObject</span></code> hooks: <code class="docutils literal notranslate"><span class="pre">at_object_post_creation</span></code>, called once after
first creation but after any prototypes have been applied, and
<code class="docutils literal notranslate"><span class="pre">at_object_post_spawn(prototype)</span></code>, called only after creation/update with a prototype (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3594">Fix</a>: Update/clean some Evennia dependencies (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3556">Fix</a>: Better error if trying to treat ObjectDB as a typeclass (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3590">Fix</a>: Make <code class="docutils literal notranslate"><span class="pre">examine</span></code> command properly show <code class="docutils literal notranslate"><span class="pre">strattr</span></code> type
Attribute values (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3519">Fix</a>: <code class="docutils literal notranslate"><span class="pre">GLOBAL_SCRIPTS</span></code> container didnt list global scripts not
defined explicitly to be restarted/recrated in <code class="docutils literal notranslate"><span class="pre">settings.py</span></code> (Griatch)</p></li>
<li><p>Fix: Passing an already instantiated Script to <code class="docutils literal notranslate"><span class="pre">obj.scripts.add</span></code> (<code class="docutils literal notranslate"><span class="pre">ScriptHandler.add</span></code>)
did not add it to the handlers object (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3533">Fix</a>: Fix Lunr search issues preventing finding help entries with similar
names (chiizyjin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3603">Fix</a>: Fix of client header for LLM contrib for remote APIs (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3605">Fix</a>: Correctly pass node kwargs through <code class="docutils literal notranslate"><span class="pre">&#64;list_node</span></code> decorated evmenu nodes
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3597">Fix</a>: Address timing issue for testing <code class="docutils literal notranslate"><span class="pre">new_task_waiting_input</span> </code>on
Windows (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3611">Fix</a>: Fix and update for Reports contrib (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3625">Fix</a>: Lycanthropy tutorial page had some issues (feyrkh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3622">Fix</a>: Fix for examine command tracebacking with strvalue error
(aMiss-aWry)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3612">Fix</a>: Make sure help entries <code class="docutils literal notranslate"><span class="pre">subtopic_separator_char</span></code> is
respected (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3624">Fix</a>: Setting tags with integer names caused errors on postgres (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3615">Fix</a>: Using <code class="docutils literal notranslate"><span class="pre">print()</span></code> in <code class="docutils literal notranslate"><span class="pre">py</span></code> caused an infinite loop (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3620">Fix</a>: Better handle TaskHandler running against an attribute that
was removed since last reload (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3616">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">color</span> <span class="pre">ansi</span></code> command output was broken (Griatch)</p></li>
<li><p>Fix: Extended the <code class="docutils literal notranslate"><span class="pre">color</span> <span class="pre">truecolor</span></code> display with usage examples. Also updated docs (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3591">Docs</a>: Fix of NPC reaction tutorial code (Griatch)</p></li>
<li><p>Docs: Tutorial fixes (Griatch, aMiss-aWry, feyrkh)</p></li>
</ul>
</section>
<section id="evennia-4-3-0">
<h2>Evennia 4.3.0<a class="headerlink" href="#evennia-4-3-0" title="Link to this heading"></a></h2>
<p>Aug 11, 2024</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3531">Feat</a>: New contrib; <code class="docutils literal notranslate"><span class="pre">in-game</span> <span class="pre">reports</span></code> for handling user reports,
bugs etc in-game (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3586">Feat</a>: Add ANSI color support <code class="docutils literal notranslate"><span class="pre">|U</span></code>, <code class="docutils literal notranslate"><span class="pre">|I</span></code>, <code class="docutils literal notranslate"><span class="pre">|i</span></code>, <code class="docutils literal notranslate"><span class="pre">|s</span></code>, <code class="docutils literal notranslate"><span class="pre">|S</span></code> for
underline reset, italic/reset and strikethrough/reset (electroglyph)</p></li>
<li><p>Feat: Add <code class="docutils literal notranslate"><span class="pre">Trait.traithandler</span></code> back-reference so custom Traits from the Traits
contrib can find and reference other Traits. (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3582">Feat</a>: Add true-color parsing/fallback for ANSIString (electroglyph)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3571">Fix</a>: Better visual display of partial multimatch search results
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3578">Fix</a>: Prototype alias key was not properly homogenized to a list
(Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3550">Fix</a>: Issue where rpsystem contrib search would do a global instead
of local search on multimatch (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3585">Fix</a>: <code class="docutils literal notranslate"><span class="pre">TagCmd.switch_options</span></code> was misnamed (erratic-pattern)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3580">Fix</a>: Fix typo that made <code class="docutils literal notranslate"><span class="pre">find/loc</span></code> show the wrong dbref in result (erratic-pattern)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3589">Fix</a>: Fix regex escaping in <code class="docutils literal notranslate"><span class="pre">utils.py</span></code> for future Python versions (hhsiao)</p></li>
<li><p>[Docs]: Add True-color description for Colors documentation (electroglyph)</p></li>
<li><p>[Docs]: Doc fixes (Griatch, InspectorCaracal, electroglyph)</p></li>
</ul>
</section>
<section id="evennia-4-2-0">
<h2>Evennia 4.2.0<a class="headerlink" href="#evennia-4-2-0" title="Link to this heading"></a></h2>
<p>June 27, 2024</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3470">Feature</a>: New <code class="docutils literal notranslate"><span class="pre">exit_order</span></code> kwarg to
<code class="docutils literal notranslate"><span class="pre">DefaultObject.get_display_exits</span></code> to easier customize the order in which
standard exits are displayed in a room (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3498">Feature</a>: Properly update Evennias screen width when client
changes width (assuming client supports NAWS properly) (michaelfaith84)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3502">Feature</a>: New <code class="docutils literal notranslate"><span class="pre">sethelp/locks</span></code> allows for editing help entry
locks after they were first created (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3514">Feature</a>: Support <code class="docutils literal notranslate"><span class="pre">$pron(pronoun,</span> <span class="pre">key)</span></code> and new <code class="docutils literal notranslate"><span class="pre">$pconj(verb,</span> <span class="pre">key)</span></code>
(pronoun conjugation) for actor stance (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3521">Feature</a>: Allow <code class="docutils literal notranslate"><span class="pre">WORD</span></code> (fully capitalized) in GMCP command names
instead of only <code class="docutils literal notranslate"><span class="pre">Word</span></code> (titled) to support specific clients better (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3447">Feature</a>: New Contrib: Achievements (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3494">Feature</a>: Xterm truecolor hex support <code class="docutils literal notranslate"><span class="pre">|#0f0</span></code> style. Expanded
<code class="docutils literal notranslate"><span class="pre">color</span> <span class="pre">true</span></code> to test (michaelFaith84)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3497">Feature</a>: Add optional width to EvEditor flood-fill commands using
new <code class="docutils literal notranslate"><span class="pre">=</span></code> argument, for example <code class="docutils literal notranslate"><span class="pre">:f=40</span></code> or <code class="docutils literal notranslate"><span class="pre">:j</span> <span class="pre">1:2</span> <span class="pre">l</span> <span class="pre">=</span> <span class="pre">60</span></code> (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3549">Feature</a>: Run the <code class="docutils literal notranslate"><span class="pre">collectstatic</span></code> command when reloading server to
keep game assets in sync automatically (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issue/3522">Feature</a>: (also a fix) Make <code class="docutils literal notranslate"><span class="pre">.created_date</span></code> property on all models property return
a time adjusted based on <code class="docutils literal notranslate"><span class="pre">settings.TIME_ZONE</span></code> (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3523">Language</a>: Updated Polish translation (Moonchasered)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3495">Fix</a>: Fix rate in Trait contribs not updating after reload (jaborsh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3491">Fix</a>: Fix traceback in EvEditor when searching with malformed regex (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3489">Fix</a>: Superuser could break wilderness contrib exits (t34lbytes)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3496">Fix</a>: EvEditor would not correctly show search&amp;replace feedback
when replacing colors (Chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3499">Fix</a>: Dig/tunnel commands didnt echo the typeclass of the newly
created room properly (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3501">Fix</a>: Using <code class="docutils literal notranslate"><span class="pre">sethelp</span></code> to create a help entry colliding with a
command-name made the entry impossible to edit/delete later (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3506">Fix</a>: Fix Traceback when setting prototype parent in the in-game OLC wizard (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3507">Fix</a>: Prototype wizard would not save changes if aborting the
updating of existing spawned instances (chiizujun)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3516">Fix</a>: Quitting the chargen contrib menu will now trigger auto-look (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3517">Fix</a>: Supply <code class="docutils literal notranslate"><span class="pre">Object.search</span></code> with an empty <code class="docutils literal notranslate"><span class="pre">candidates</span></code> list caused
defaults to be used instead of finding nothing (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3518">Fix</a>: <code class="docutils literal notranslate"><span class="pre">GlobalScriptsContainer.all()</span></code> raised a traceback (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3520">Fix</a>: Exits not included in exit sort order were not listed correctly (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3529">Fix</a>: Fix page/list command not showing received pages correctly (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3530">Fix</a>: EvEditor cmdset priority increased so it doesnt respond to
movement commands while in editor (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3537">Fix</a>: Bug setting <code class="docutils literal notranslate"><span class="pre">_fields</span></code> in Components contrib (ChrisLR)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3542">Fix</a>: Update <code class="docutils literal notranslate"><span class="pre">character_creator</span></code> contrib to use the Accounts look
template properly (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3545">Fix</a>: Fix fallback issue in cmdhandler for local-object cmdsets (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3554">Fix</a>: Fix/readd custom <code class="docutils literal notranslate"><span class="pre">ic</span></code> command to the <code class="docutils literal notranslate"><span class="pre">character_creator</span></code> contrib (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3566">Fix</a>: Make sure the <code class="docutils literal notranslate"><span class="pre">website/base.html</span></code> website base is targeted
explicitly so it doesnt get overridden by same file name elsewhere in app (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issue/3387">fix</a>: Update all game template doc strings to be more up-to-date
(Griatch)</p></li>
<li><p>[Docs]: Doc fixes (Griatch, chiizujin, InspectorCaracal, iLPDev)</p></li>
</ul>
</section>
<section id="evennia-4-1-1">
<h2>Evennia 4.1.1<a class="headerlink" href="#evennia-4-1-1" title="Link to this heading"></a></h2>
<p>April 6, 2024</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3446">Fix</a>: Error with you mapping in third-person style of
<code class="docutils literal notranslate"><span class="pre">msg_contents</span></code> (InspectorCaracal)</p></li>
<li><p>[Fix][pull3472]: The new <code class="docutils literal notranslate"><span class="pre">filter_visible</span></code> didnt exclude oneself by default
(InspectorCaracal)</p></li>
<li><p>Fix: <code class="docutils literal notranslate"><span class="pre">find</span> <span class="pre">#dbref</span></code> results didnt include the results of
<code class="docutils literal notranslate"><span class="pre">.get_extra_display_name_info</span></code> (the #dbref display by default) (Griatch)</p></li>
<li><p>Fix: Add <code class="docutils literal notranslate"><span class="pre">DefaultAccount.get_extra_display_name_info</span></code> method for API
compliance with <code class="docutils literal notranslate"><span class="pre">DefaultObject</span></code> in commands. (Griatch)</p></li>
<li><p>Fix: Show <code class="docutils literal notranslate"><span class="pre">XYZRoom</span></code> subclass when repr() it. (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3485">Fix</a>: Typo in <code class="docutils literal notranslate"><span class="pre">sethome</span></code> message (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3487">Fix</a>: Fix traceback when using <code class="docutils literal notranslate"><span class="pre">get</span></code>,<code class="docutils literal notranslate"><span class="pre">drop</span></code> and <code class="docutils literal notranslate"><span class="pre">give</span></code> with no
arguments (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3476">Fix</a>: Dont ignore EvEditor commands with wrong capitalization (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3477">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">at_server_reload_start()</span></code> hook was not firing on
a reload (regression).</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3488">Fix</a>: <code class="docutils literal notranslate"><span class="pre">AttributeProperty(&lt;default&gt;,</span> <span class="pre">autocreate=False)</span></code>, where
<code class="docutils literal notranslate"><span class="pre">&lt;default&gt;</span></code> was mutable would not update/save properly in-place (Griatch)</p></li>
<li><p>[Docs] Added new <a class="reference external" href="https://www.evennia.com/docs/latest/Concepts/Server-Lifecycle.html">Server-Lifecycle</a> page to describe
the hooks called on server start/stop/reload (Griatch)</p></li>
<li><p>[Docs] Doc typo fixes (Griatch, chiizujin)</p></li>
</ul>
</section>
<section id="evennia-4-1-0">
<h2>Evennia 4.1.0<a class="headerlink" href="#evennia-4-1-0" title="Link to this heading"></a></h2>
<p>April 1, 2024</p>
<ul class="simple">
<li><p>[Deprecation]: <code class="docutils literal notranslate"><span class="pre">DefaultObject.get_visible_contents</span></code> - unused in core, will be
removed. Use the new <code class="docutils literal notranslate"><span class="pre">.filter_visible</span></code> together with the <code class="docutils literal notranslate"><span class="pre">.get_display_*</span></code> methods instead…</p></li>
<li><p>[Deprecation]: <code class="docutils literal notranslate"><span class="pre">DefaultObject.get_content_names</span></code> - unused in core, will be
removed. Use the <code class="docutils literal notranslate"><span class="pre">DefaultObject.get_display_*</span></code> methods instead.</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3421">Feature</a>: New <code class="docutils literal notranslate"><span class="pre">utils.compress_whitespace</span></code> utility used with
default objects <code class="docutils literal notranslate"><span class="pre">.format_appearance</span></code> to make it easier to overload without
adding line breaks in hook returns. (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3458">Feature</a>: New <code class="docutils literal notranslate"><span class="pre">sethelp/category</span></code> switch to change a help topics
category after it was created (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3467">Feature</a>: Add <code class="docutils literal notranslate"><span class="pre">alias/delete</span></code> switch for removing object aliases
from in-game with default command (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3450">Feature</a>: The default <code class="docutils literal notranslate"><span class="pre">page</span></code> command now tags its <code class="docutils literal notranslate"><span class="pre">Msg</span></code> objects
with tag page (category comms) and also checks the <code class="docutils literal notranslate"><span class="pre">Msg</span></code> read lock.
made backwards compatible for old pages (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3466">Feature</a>: Add optional <code class="docutils literal notranslate"><span class="pre">no_article</span></code> kwarg to
<code class="docutils literal notranslate"><span class="pre">DefaultObject.get_numbered_name</span></code> for the system to skip adding automatic
articles. (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3433">Feature</a>: Add ability to default get/drop to affect stacks of
items, such as <code class="docutils literal notranslate"><span class="pre">get/drop</span> <span class="pre">3</span> <span class="pre">rock</span></code> by a custom class parent (InspectorCaracal)</p></li>
<li><p>Feature: Clean up the default Command variable list shown when a command has
no <code class="docutils literal notranslate"><span class="pre">func()</span></code> defined (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3461">Feature</a>: Add <code class="docutils literal notranslate"><span class="pre">DefaultObject.filter_display_visible</span></code> helper method
to make it easier to customize object visibility rules. (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3446">Fix</a>: Use plural (no apples) instead of singular (no apple) in
<code class="docutils literal notranslate"><span class="pre">get_numbered_name</span></code> for better grammatical form (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3453">Fix</a>: Object aliases not showing in search multi-match
disambiguation display (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3455">Fix</a>: <code class="docutils literal notranslate"><span class="pre">sethelp/edit</span> <span class="pre">&lt;topic&gt;</span></code> without a <code class="docutils literal notranslate"><span class="pre">=</span> <span class="pre">text</span></code> created a <code class="docutils literal notranslate"><span class="pre">None</span></code>
entry that would lose the edit. (chiiziujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3456">Fix</a>: <code class="docutils literal notranslate"><span class="pre">format_grid</span></code> utility used for <code class="docutils literal notranslate"><span class="pre">help</span></code> command caused commands
to disappear for wider client widths (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3457">Fix</a>: Help topic categories with different case would appear as
duplicates (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3454">Fix</a>: Traceback in crafting contribs <code class="docutils literal notranslate"><span class="pre">recipe.msg</span></code>
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3459">Fix</a>: EvEditor line-echo compacted whitespace erroneously (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3463">Fix</a>: EvEditor :help described the :paste operation in the wrong
way (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3464">Fix</a>: EvEditor range:range specification didnt return correct
range (chiizujin)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3462">Fix</a>: EvEditor :UU and :DD etc commands were not properly
differentiating from their lower-case alternatives (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3460">Fix</a>: The <code class="docutils literal notranslate"><span class="pre">menu_login</span></code> contrib regression caused it to error out
when creating a new character (Griatch)</p></li>
<li><p>Doc: Added Beginner Tutorial lessons for <a class="reference external" href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-AI.html">Monster and NPC AI</a>,
<a class="reference external" href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Quests.html">Quests</a> and <a class="reference external" href="https://www.evennia.com/docs/latest/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Dungeon.html">Making a Procedural dungeon</a> (Griatch)</p></li>
<li><p>Doc fixes (Griatch, InspectorCaracal, homeofpoe)</p></li>
</ul>
</section>
<section id="evennia-4-0-0">
<h2>Evennia 4.0.0<a class="headerlink" href="#evennia-4-0-0" title="Link to this heading"></a></h2>
<p>March 17, 2024</p>
<ul class="simple">
<li><p>Feature: Support Python 3.12 (Griatch). Currently supporting 3.10,3.11 and
3.12. Note that 3.10 support will be removed in a future release.</p></li>
<li><p>Feature: Update <code class="docutils literal notranslate"><span class="pre">evennia[extra]</span></code> scipy dependency to 1.12 to support latest
Python. Note that this may change which (equivalent) path is being picked when
following an xyzgrid contrib pathfinding.</p></li>
<li><p>Feature: <em>Backwards incompatible</em>: <code class="docutils literal notranslate"><span class="pre">DefaultObject.get_numbered_name</span></code> now gets objects
name via <code class="docutils literal notranslate"><span class="pre">.get_display_name</span></code> for better compatibility with recog systems.</p></li>
<li><p>Feature: <em>Backwards incompatible</em>: Removed the (#dbref) display from
<code class="docutils literal notranslate"><span class="pre">DefaultObject.get_display_name</span></code>, instead using new <code class="docutils literal notranslate"><span class="pre">.get_extra_display_name_info</span></code>
method for getting this info. The Objects display template was extended for
optionally adding this information. This makes showing extra object info to
admins an explicit action and opens up <code class="docutils literal notranslate"><span class="pre">get_display_name</span></code> for general use.</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">ON_DEMAND_HANDLER.set_dt(key,</span> <span class="pre">category,</span> <span class="pre">dt)</span></code> and
<code class="docutils literal notranslate"><span class="pre">.set_stage(key,</span> <span class="pre">category,</span> <span class="pre">stage)</span></code> to allow manual tweaking of task timings,
for example for a spell speeding a plants growth (Griatch)</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">ON_DEMAND_HANDLER.get_dt/stages(key,category,</span> <span class="pre">**kwargs)</span></code>, where
the kwargs are passed into any stage-callable defined with the stages. (Griatch)</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">use_assertequal</span></code> kwarg to the <code class="docutils literal notranslate"><span class="pre">EvenniaCommandTestMixin</span></code> testing
class; this uses djangos <code class="docutils literal notranslate"><span class="pre">assertEqual</span></code> over the default more lenient checker,
which can be useful for testing table whitespace (Griatch)</p></li>
<li><p>Feature: New <code class="docutils literal notranslate"><span class="pre">utils.group_objects_by_key_and_desc</span></code> for grouping a list of
objects based on the visible key and desc. Useful for inventory listings (Griatch)</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">DefaultObject.get_numbered_name</span></code> <code class="docutils literal notranslate"><span class="pre">return_string</span></code> bool kwarg, for only
returning singular/plural based on count instead of a tuple with both (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3443">Fix</a> Removed the <code class="docutils literal notranslate"><span class="pre">&#64;reboot</span></code> alias to <code class="docutils literal notranslate"><span class="pre">&#64;reset</span></code> to not mislead people
into thinking you can do a portal+server reboot from in-game (you cannot) (Griatch)</p></li>
<li><p>Fix: <code class="docutils literal notranslate"><span class="pre">DefaultObject.get_numbered_name</span></code> used <code class="docutils literal notranslate"><span class="pre">.name</span></code> instead of
<code class="docutils literal notranslate"><span class="pre">.get_display_name</span></code> which broke recog systems. May lead to objects #dbref
will show for admins in some more places (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3420">Fix</a>: Refactor Clothing contribs inventory command align with
Evennia cores version (michaelfaith84, Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3438">Fix</a>: Limiting search by tag didnt take search-string into
account (Griatch)</p></li>
<li><p>[Fix][issue4311]: SSH connection caused a traceback in protocol (Griatch)</p></li>
<li><p>Fix: Resolve a bug when loading on-demand-handler data from database (Griatch)</p></li>
<li><p>Security: Potential O(n2) regex exploit in rpsystem regex (Griatch)</p></li>
<li><p>Security: Fix potential redirect vulnerability in character page redirect (Griatch)</p></li>
<li><p>Doc fixes (iLPdev, Griatch, CloudKeeper)</p></li>
</ul>
</section>
<section id="evennia-3-2-0">
<h2>Evennia 3.2.0<a class="headerlink" href="#evennia-3-2-0" title="Link to this heading"></a></h2>
<p>Feb 25, 2024</p>
<ul class="simple">
<li><p>Feature: Add <a class="reference external" href="https://www.evennia.com/docs/latest/Components/OnDemandHandler.html"><code class="docutils literal notranslate"><span class="pre">evennia.ON_DEMAND_HANDLER</span></code></a> for making it
easier to implement changes that are calculated on-demand (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3412">Feature</a>: Make it possible to add custom webclient css in
<code class="docutils literal notranslate"><span class="pre">webclient/css/custom.css</span></code>, same as for website (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3367">Feature</a>: <a class="reference external" href="https://www.evennia.com/docs/latest/Contribs/Contrib-Components.html">Component contrib</a> got better
inheritance, slot names to choose attr storage, speedups and fixes (ChrisLR)</p></li>
<li><p>Feature: Break up <code class="docutils literal notranslate"><span class="pre">DefaultObject.search</span></code> method into several helpers to make
it easier to override (Griatch)</p></li>
<li><p>Fix: Resolve multimatch error with rpsystem contrib (Griatch)</p></li>
<li><p>Fix: Remove <code class="docutils literal notranslate"><span class="pre">AMP_ENABLED</span></code> setting since it services no real purpose and
erroring out on setting it would make it even less useful (Griatch).</p></li>
<li><p>Feature: Remove too-strict password restrictions for Evennia logins, using
django defaults instead for passwords with more varied characters.</p></li>
<li><p>Fix <code class="docutils literal notranslate"><span class="pre">services</span></code> command with no args would traceback (regression) (Griatch)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3423">Fix</a>: Fix wilderness contrib error moving to an already existing
wilderness room (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3425">Fix</a>: Dont always include example the crafting recipe when
using the crafting contrib (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3426">Fix</a>: Traceback banning a channel using with only one nick
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3434">Fix</a>: Adjust lunr search weights to void clashing of cmd-aliases over
keys which caused some help entries to shadow others (InspectorCaracal)</p></li>
<li><p>Fix: Make <code class="docutils literal notranslate"><span class="pre">menu/email_login</span></code> contribs honor <code class="docutils literal notranslate"><span class="pre">NEW_ACCOUNT_REGISTRATION_ENABLED</span></code>
setting (Griatch)</p></li>
<li><p>Doc fixes (InspectorCaracal, Griatch)</p></li>
</ul>
</section>
<section id="evennia-3-1-1">
<h2>Evennia 3.1.1<a class="headerlink" href="#evennia-3-1-1" title="Link to this heading"></a></h2>
<p>Jan 14, 2024</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3398">Fix</a>: Fix to make e.g. <code class="docutils literal notranslate"><span class="pre">elvish&quot;Hello&quot;</span></code> work correctly in language rp
contrib (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3405">Fix</a>: Fix/update of Godot client contrib to support Godot4 and
latest Evennia portal changes (ChrisLR)</p></li>
<li><p>Updated doc on wiki install (InspectorCaracal)</p></li>
<li><p>Docstring fixes (bradleymarques, Griatch)</p></li>
<li><p>Doc tutorial fixes (Griatch)</p></li>
</ul>
</section>
<section id="evennia-3-1-0">
<h2>Evennia 3.1.0<a class="headerlink" href="#evennia-3-1-0" title="Link to this heading"></a></h2>
<p>Jan 8, 2024</p>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3393">Feature</a>: EvMenu will only use one column of options in
screenreader mode (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3386">Feature</a>: Add VS code files to default gitignore (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3373">Fix</a>: Errors when using the default <code class="docutils literal notranslate"><span class="pre">create</span></code> command (InspectorCaracal).</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3375">Fix</a>: <code class="docutils literal notranslate"><span class="pre">tunnel</span></code> command didnt work with custom prefix (chromancer).</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3376">Fix</a>: Error when falling back to default cmdset fallback
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3377">Fix</a>: <code class="docutils literal notranslate"><span class="pre">character_creator</span></code> updated with new chargen system refactor
in Evennia 3.0.0; fix issue not repspecting <code class="docutils literal notranslate"><span class="pre">START_LOCATION</span></code>
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3378">Fix</a>: Default-add where as a LUNR search exception, since its a
common mud command that should not be ignored. (alephate)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3382">Fix</a>: Make sure global scripts start properly on restart
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3394">Fix</a>: Fix time-of-day issue in ExpandedRoom contrib (jaborsh)</p></li>
<li><p>Doc fixes (homeofpoe, gas-public-wooden-clean, InspectorCaracal, Griatch)</p></li>
</ul>
</section>
<section id="evennia-3-0-0">
<h2>Evennia 3.0.0<a class="headerlink" href="#evennia-3-0-0" title="Link to this heading"></a></h2>
<p>Dec 20, 2023</p>
<ul class="simple">
<li><p>Dependency: Twisted 23.10 (&lt;24) to address upstream CVE alert.</p></li>
<li><p>Dependency (potentially Backwards incompatible): Django 4.2 (&lt;4.3). Increases
minimum supported versions of MariaDB, MySQL and PostgreSQL,
see <a class="reference external" href="https://docs.djangoproject.com/en/4.2/releases/4.2/#backwards-incompatible-changes-in-4-2">django release nodes</a></p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3313">Feature</a> (Backwards incompatible): <code class="docutils literal notranslate"><span class="pre">OptionHandler.set</span></code> now returns
<code class="docutils literal notranslate"><span class="pre">BaseOption</span></code> rather than its <code class="docutils literal notranslate"><span class="pre">.value</span></code>. Instead access <code class="docutils literal notranslate"><span class="pre">.value</span></code> or <code class="docutils literal notranslate"><span class="pre">.display()</span></code>
on this return for more control. (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3278">Feature</a>: (Backwards incompatible): Refactor home page into multiple sub-parts for easier
overriding and composition (johnnyvoruz)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3180">Feature</a>: (Potentially Backwards incompatible): Make build commands
easier to override, with new utility hooks (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3273">Feature</a>: Allow passing <code class="docutils literal notranslate"><span class="pre">text_kwargs</span></code> kwarg to <code class="docutils literal notranslate"><span class="pre">EvMore.msg</span></code> in order to expand
the outputfunc used for every evmore page.</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3286">Feature</a>: Allow Discord bot to change users nickname and assign
roles for a user on a given server (holl0wstar).</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3301">Feature</a>: Make EvenniaAdminSite include custom models better; adds
<code class="docutils literal notranslate"><span class="pre">DJANGO_ADMIN_APP_ORDER</span></code> and <code class="docutils literal notranslate"><span class="pre">DJANGO_ADMIN_APP_EXCLUDE</span></code> as modifable
settings.(Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3179">Feature</a>: Handling of the <code class="docutils literal notranslate"><span class="pre">.db._playable_characters</span></code> helper
methods. Also adds events hooks to modify effects when this list changes (Volund)
avoiding race conditions until server starts (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3281">Feature</a>: Add <code class="docutils literal notranslate"><span class="pre">$your()</span></code> and <code class="docutils literal notranslate"><span class="pre">$Your()</span></code> for actor stance emoting (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3177">Feature</a>: Add <code class="docutils literal notranslate"><span class="pre">Account.get_character_slots()</span></code>,
<code class="docutils literal notranslate"><span class="pre">.get_available_character_slots()</span></code>, <code class="docutils literal notranslate"><span class="pre">.check_available_slots</span></code> and
<code class="docutils literal notranslate"><span class="pre">at_post_create_character</span></code> methods to allow better customization of character creation (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3319">Feature</a>: Refactor/cleanup of Evennia server/portal startup files
into services for easier overriding (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3307">Feature</a>: Add support for Attribute-categories when using the monitorhandler
with input funcs to monitor Attribute changes.</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3342">Feature</a>: Add <code class="docutils literal notranslate"><span class="pre">Command.cmdset_source</span></code>, referring to the cmdset each
command was originally pulled from (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3343">Feature</a>: Add <code class="docutils literal notranslate"><span class="pre">access_type</span></code> as optional kwarg to lockfuncs (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3344">Feature</a>: New middleware for checking IP/subnets from requests. New
tools <code class="docutils literal notranslate"><span class="pre">evennia.utils.match_ip</span></code> and <code class="docutils literal notranslate"><span class="pre">utils.ip_from_request</span></code> to help. (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3349">Feature</a>: Refactored almost all default commands to use
<code class="docutils literal notranslate"><span class="pre">Command.msg</span></code> over the <code class="docutils literal notranslate"><span class="pre">command.caller.msg</span></code> direct call (more flexible) (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3346">Feature</a>: Refactor cmdhandler to be more extensible; make cmd merge
a bit more deterministic (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3348">Feature</a>: Make Fallback AJAX web client more customizable (same as
the websocket client) (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3353">Feature</a>: Add unique id to each webclient instance, separates play
sessions run from the same browser. (InpsectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3365">Feature</a>: Make the rpsystem contribs prefix (<code class="docutils literal notranslate"><span class="pre">/</span></code> by default)
configurable with a setting (used to be hard-coded) (InspectorCaracal)</p></li>
<li><p>Fix (Backwards incompatible): Change <code class="docutils literal notranslate"><span class="pre">settings._TEST_ENVIRONMENT</span></code> to
<code class="docutils literal notranslate"><span class="pre">settings.TEST_ENVIRONMENT</span></code> to address issues during refactored startup sequence.</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3347">Fix</a>: New <code class="docutils literal notranslate"><span class="pre">generate_default_locks()</span></code> method on typeclasses;
<code class="docutils literal notranslate"><span class="pre">.create</span></code> and <code class="docutils literal notranslate"><span class="pre">lockhandler.add()</span></code> will now properly handle emptry strings
(Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3197">Fix</a>: Make sure Global scripts only start in one place,</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3324">Fix</a>: Make account-post-login-fail signal fire properly. Add
<code class="docutils literal notranslate"><span class="pre">CUSTOM_SIGNAL</span></code> for adding ones own signals (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3267">Fix</a>: Missing recache step in ObjectSessionHandler (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3270">Fix</a>: Evennia is its own MSSP family now, so we should return that
instead of Custom (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3274">Fix</a>: Traceback when creating objects with initial nattributes
(InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3272">Fix</a>: Make sure <code class="docutils literal notranslate"><span class="pre">ScriptHandler.add</span></code> does not fail if passed an
instantiated script. (Volund)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3350">Fix</a>: <code class="docutils literal notranslate"><span class="pre">CmdHelp</span></code> was using the wrong protocol-key identifier when
routing to the ajax web client.</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3338">Fix</a>: Resolve if/elif bug in XYZGrid contrib launch command
(jaborsh)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/3331">fix</a>: Made XYZGrid query zcoords in a case-insensitive manner.</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3322">Fix</a>: Fix <code class="docutils literal notranslate"><span class="pre">BaseOption.display</span></code> to always return a string.</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3358">Fix</a>: Fix so Portal resets <code class="docutils literal notranslate"><span class="pre">server_restart_mode</span></code> flag when having
successfully reconnected to the Server after a restart. (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3359">Fix</a>: Fix gendersub contrib to use proper pronoun when referencing
other objects than oneself (InspectorCaracal)</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3361">Fix</a>: Fix of monitoring Attributes with categories (scyfris)</p></li>
<li><p>Docs &amp; docstrings: Lots of Typo and other fixes (iLPdev, InspectorCaracal, jaborsh,
HouseOfPoe, Griatch etc)</p></li>
<li><p>Beginner tutorial: Cleanup and starting earlier with explaining how to add to
the default cmdsets (Griatch).</p></li>
</ul>
</section>
<section id="evennia-2-3-0">
<h2>Evennia 2.3.0<a class="headerlink" href="#evennia-2-3-0" title="Link to this heading"></a></h2>
<p>Sept 3, 2023</p>
<ul class="simple">
<li><p>Feat: EvMenu tooltips for multiple help categories in a node (Seannio).</p></li>
<li><p>Feat: Default <code class="docutils literal notranslate"><span class="pre">examine</span></code> command now also shows an accounts <code class="docutils literal notranslate"><span class="pre">last_login</span></code>
(michaelfaith84)</p></li>
<li><p>Fix: Portal would accidentally start global scripts. (blongden)</p></li>
<li><p>Fix: Traceback when printing CounterTrait contrib objects. (InspectorCaracal)</p></li>
<li><p>Fix: Typo in evadventure twitch combats call of <code class="docutils literal notranslate"><span class="pre">create_combathandler</span></code>.</p></li>
<li><p>Docs: Fix bug in evadventure equipmenthandler blocking creation of npcs.
in-game (Griatch).</p></li>
<li><p>Docs: Plenty of typo fixes (iLPDev, moldikins, Griatch), others)</p></li>
</ul>
</section>
<section id="evennia-2-2-0">
<h2>Evennia 2.2.0<a class="headerlink" href="#evennia-2-2-0" title="Link to this heading"></a></h2>
<p>Aug 6, 2023</p>
<ul class="simple">
<li><p>Contrib: Large-language-model (LLM) AI integration; allows NPCs to talk using
responses from an LLM server.</p></li>
<li><p>Fix: Make sure <code class="docutils literal notranslate"><span class="pre">at_server_reload</span></code> is called also on non-repeating Scripts.</p></li>
<li><p>Fix: Webclient was not giving a proper error when sending an unknown outputfunc to it.</p></li>
<li><p>Fix: Make <code class="docutils literal notranslate"><span class="pre">py</span></code> command always send strings unless <code class="docutils literal notranslate"><span class="pre">client_raw</span></code> flag is set.</p></li>
<li><p>Fix: <code class="docutils literal notranslate"><span class="pre">Script.start</span></code> with an integer <code class="docutils literal notranslate"><span class="pre">start_delay</span></code> caused a traceback.</p></li>
<li><p>Fix: Removing “Guest” from the permission-hierarchy setting messed up access.</p></li>
<li><p>Docs: Remove doc pages for Travis/TeamCity CI tools, they were both very much
out of date, and Travis is not free for OSS anymore.</p></li>
<li><p>Docs: A lot fixes of typos and bugs in tutorials.</p></li>
</ul>
</section>
<section id="evennia-2-1-0">
<h2>Evennia 2.1.0<a class="headerlink" href="#evennia-2-1-0" title="Link to this heading"></a></h2>
<p>July 14, 2023</p>
<ul class="simple">
<li><p>Fix: The new <code class="docutils literal notranslate"><span class="pre">ExtendedRoom</span></code> contrib has a bug when dug with no descriptions.</p></li>
<li><p>Fix: Clean up <code class="docutils literal notranslate"><span class="pre">get_sides</span></code> function in evadventure tutorial to return also
the calling combatant with its <code class="docutils literal notranslate"><span class="pre">allies</span></code> return, to make it easier to reason around.</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">SSL_CERTIFICATE_ISSUERS</span></code> setting for customizing Telnet+SSL.</p></li>
<li><p>Contrib: Refactored <code class="docutils literal notranslate"><span class="pre">dice.roll</span></code> contrib function to use <code class="docutils literal notranslate"><span class="pre">safe_eval</span></code>. Can now
optionally be used as <code class="docutils literal notranslate"><span class="pre">dice.roll(&quot;2d10</span> <span class="pre">+</span> <span class="pre">4</span> <span class="pre">&gt;</span> <span class="pre">10&quot;)</span></code>. Old way works too.</p></li>
<li><p>Lots of doc updates.</p></li>
</ul>
</section>
<section id="evennia-2-0-1">
<h2>Evennia 2.0.1<a class="headerlink" href="#evennia-2-0-1" title="Link to this heading"></a></h2>
<p>June 17, 2023</p>
<ul class="simple">
<li><p>Fix: A look-bug in the <code class="docutils literal notranslate"><span class="pre">ExtendedRoom</span></code> contrib (InspectorCaracal)</p></li>
</ul>
</section>
<section id="evennia-2-0-0">
<h2>Evennia 2.0.0<a class="headerlink" href="#evennia-2-0-0" title="Link to this heading"></a></h2>
<p>June 10, 2023</p>
<ul class="simple">
<li><p><strong>Possible backwards incompatibility</strong>: Updated contrib <code class="docutils literal notranslate"><span class="pre">ExtendedRoom</span></code> now
supports arbitrary room-states, state-based descriptions, embedded funcparser
tags, details and random messages. While this feature is made to be as
backwards-compatible as possible, so many people depend on this contrib class
that we are updating the major Evennia version to indicate the big changes.</p></li>
<li><p>New Contrib: <code class="docutils literal notranslate"><span class="pre">Container</span></code> typeclass with new commands for storing and retrieving
things inside them (InspectorCaracal)</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">TagCategoryProperty</span></code> for setting categories with multiple tags
as properties directly on objects. Complements <code class="docutils literal notranslate"><span class="pre">TagProperty</span></code>.</p></li>
<li><p>Feature: Attribute-support for saving/loading <code class="docutils literal notranslate"><span class="pre">deques</span></code> with <code class="docutils literal notranslate"><span class="pre">maxlen=</span></code> set.</p></li>
<li><p>Feature: Refactor to provide <code class="docutils literal notranslate"><span class="pre">evennia.SESSION_HANDLER</span></code> for easier overloading
and less risks of circular import problems (Volund)</p></li>
<li><p>Fix: Allow webclients goldenlayout UI (default) to understand <code class="docutils literal notranslate"><span class="pre">msg</span></code>
<code class="docutils literal notranslate"><span class="pre">cls</span></code> kwarg for customizing the CSS class for every resulting <code class="docutils literal notranslate"><span class="pre">div</span></code> (friarzen)</p></li>
<li><p>Fix: The <code class="docutils literal notranslate"><span class="pre">AttributeHandler.all()</span></code> now actually accepts <code class="docutils literal notranslate"><span class="pre">category=</span></code> as
keyword arg, like our docs already claimed it should (Volund)</p></li>
<li><p>Fix: <code class="docutils literal notranslate"><span class="pre">TickerHandler</span></code> store key updating was refactored, fixing an issue with
updating intervals (InspectorCaracal)</p></li>
<li><p>Docs: Removed warning about Python3.11 on Windows; upstream Twistd now
supports 3.11 on Windows.</p></li>
<li><p>Docs: New Beginner-Tutorial lessons for NPCs, Base-Combat Twitch-Combat and
Turnbased-combat (note that the Beginner tutorial is still WIP).</p></li>
<li><p>Stabilize how to make the major update in the docs.</p></li>
<li><p>Fix: A lot of other minor bug fixes.</p></li>
</ul>
</section>
<section id="evennia-1-3-0">
<h2>Evennia 1.3.0<a class="headerlink" href="#evennia-1-3-0" title="Link to this heading"></a></h2>
<p>Apr 29, 2023</p>
<ul class="simple">
<li><p>Feature: Better ANSI color fallbacks (InspectorCaracal).</p></li>
<li><p>Feature: Add support for saving <code class="docutils literal notranslate"><span class="pre">deque</span></code> with <code class="docutils literal notranslate"><span class="pre">maxlen</span></code> to Attributes (before
<code class="docutils literal notranslate"><span class="pre">maxlen</span></code> was ignored).</p></li>
<li><p>Fix: The username validator did not display errors correctly in web
registration form.</p></li>
<li><p>Fix: Components contrib had issues with inherited typeclasses (ChrisLR)</p></li>
<li><p>Fix: f-string fix in clothing contrib (aMiss-aWry)</p></li>
<li><p>Fix: Have <code class="docutils literal notranslate"><span class="pre">EvenniaTestCase</span></code> properly flush idmapper cache (bradleymarques)</p></li>
<li><p>Tools: More unit tests for scripts (Storsorken)</p></li>
<li><p>Docs: Made separate doc pages for Exits, Characters and Rooms. Expanded on how
to change the description of an in-game object with templating.</p></li>
<li><p>Docs: A multitude of doc issues and typos fixed.</p></li>
</ul>
</section>
<section id="evennia-1-2-1">
<h2>Evennia 1.2.1<a class="headerlink" href="#evennia-1-2-1" title="Link to this heading"></a></h2>
<p>Feb 26, 2023</p>
<ul class="simple">
<li><p>Bug fix: Make sure command parser gives precedence to longer cmd-aliases. So
if sending <code class="docutils literal notranslate"><span class="pre">smile</span> <span class="pre">at</span></code> and the cmd <code class="docutils literal notranslate"><span class="pre">smile</span></code> has alias <code class="docutils literal notranslate"><span class="pre">smile</span> <span class="pre">at</span></code>, the match is
ordered so the result is never interpreted as <code class="docutils literal notranslate"><span class="pre">smile</span></code> with an argument <code class="docutils literal notranslate"><span class="pre">at</span></code>.</p></li>
<li><p>Bug fix: || (escaped color tags) were parsed too early in help entries,
leading to colors when wanting a | separator</p></li>
<li><p>Bug fix: Make sure spawned objects get <code class="docutils literal notranslate"><span class="pre">typeclass_path</span></code> pointing to the true
location rather than alias (in line with <code class="docutils literal notranslate"><span class="pre">create_object</span></code>).</p></li>
<li><p>Bug fix: Building Menu contrib menu no using Replace over Union mergetype to
avoid clashing with in-game commands while building</p></li>
<li><p>Feature: RPSystem contrib <code class="docutils literal notranslate"><span class="pre">sdesc</span></code> command can now view/delete your sdesc.</p></li>
<li><p>Bug fix: Change so <code class="docutils literal notranslate"><span class="pre">script</span> <span class="pre">obj</span> <span class="pre">=</span> <span class="pre">[scriptname|id]</span></code> is required to manipulate
scripts on objects; <code class="docutils literal notranslate"><span class="pre">script</span> <span class="pre">scriptname|id</span></code> only works on global scripts.</p></li>
<li><p>Doc: Add warning about <code class="docutils literal notranslate"><span class="pre">Django-wiki</span></code> (in wiki tutorial) only supporting
Django &lt;4.0.</p></li>
<li><p>Doc: Expanded <code class="docutils literal notranslate"><span class="pre">XYZGrid</span></code> docstring to clarify <code class="docutils literal notranslate"><span class="pre">MapLink</span></code> class will not itself
spawn anything, children must define their prototypes explicitly.</p></li>
<li><p>Doc: Explained why <code class="docutils literal notranslate"><span class="pre">AttributeProperty.at_get/set</span></code> will not be called if
accessing the Attribute from the <code class="docutils literal notranslate"><span class="pre">AttributeHandler</span></code> (bypassing the property)</p></li>
<li><p>Bug fix: Evtable options showed spurious empty lines if set without desc</p></li>
<li><p>Usage fix: The <code class="docutils literal notranslate"><span class="pre">teleport:</span></code> and <code class="docutils literal notranslate"><span class="pre">teleport_here:</span></code> locks where checked in
<code class="docutils literal notranslate"><span class="pre">CmdTeleport</span></code>, but not actually set on any entities. These locks are now
set with defaults on all objects,characters,rooms and exits.</p></li>
</ul>
</section>
<section id="evennia-1-2-0">
<h2>Evennia 1.2.0<a class="headerlink" href="#evennia-1-2-0" title="Link to this heading"></a></h2>
<p>Feb 25, 2023</p>
<ul class="simple">
<li><p>Bug fix: <code class="docutils literal notranslate"><span class="pre">TagHandler.get</span></code> did not consistently cast to string (aMiss-aWry)</p></li>
<li><p>Bug fix: Channels hard to manage if given in different case (aMiss-aWry)</p></li>
<li><p>Feature: <code class="docutils literal notranslate"><span class="pre">logger.delete_log</span></code> function for deleting custom logs from inside the
server (aMiss-aWry)</p></li>
<li><p>Doc: Nginx setup (InspectorCaracal)</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">fly/dive</span></code> commands to <code class="docutils literal notranslate"><span class="pre">XYZGrid</span></code> contrib to showcase treating its
Z-axis as a full 3D grid. Also fixed minor bug in <code class="docutils literal notranslate"><span class="pre">XYZGrid</span></code> contrib when using
a Z axis named using an integer rather than a string.</p></li>
<li><p>Bug fix: <code class="docutils literal notranslate"><span class="pre">$an()</span></code> inlinefunc didnt understand to use an words starting with a
capital vowel</p></li>
<li><p>Bug fix: Another case of the duplicate Discord bot connections bug
(InspectorCaracal)</p></li>
<li><p>Fix: Make XYZGrid contribs MapParserErrors more succinct</p></li>
</ul>
</section>
<section id="evennia-1-1-1">
<h2>Evennia 1.1.1<a class="headerlink" href="#evennia-1-1-1" title="Link to this heading"></a></h2>
<p>Jan 15, 2023</p>
<ul class="simple">
<li><p>Bug fix: Better handler malformed alias-regex given to nickhandler. A
regex-relevant character in a channel alias could cause server to not restart.</p></li>
<li><p>Feature: Add <code class="docutils literal notranslate"><span class="pre">attr</span></code> keyword to <code class="docutils literal notranslate"><span class="pre">create_channel</span></code>. This allows setting
attributes on channels at creation, also from <code class="docutils literal notranslate"><span class="pre">DEFAULT_CHANNELS</span></code> definitions.</p></li>
</ul>
</section>
<section id="evennia-1-1-0">
<h2>Evennia 1.1.0<a class="headerlink" href="#evennia-1-1-0" title="Link to this heading"></a></h2>
<p>Jan 7, 2023</p>
<ul class="simple">
<li><p>Stop new registrations with <code class="docutils literal notranslate"><span class="pre">settings.NEW_ACCOUNT_REGISTRATION_ENABLED</span></code>
(inspectorcaracal)</p></li>
<li><p>Bug fixes.</p></li>
</ul>
</section>
<section id="evennia-1-0-2">
<h2>Evennia 1.0.2<a class="headerlink" href="#evennia-1-0-2" title="Link to this heading"></a></h2>
<p>Dec 21, 2022</p>
<ul class="simple">
<li><p>Bug fix release. Fix more issues with discord bot reconnecting. Some doc
updates.</p></li>
</ul>
</section>
<section id="evennia-1-0-1">
<h2>Evennia 1.0.1<a class="headerlink" href="#evennia-1-0-1" title="Link to this heading"></a></h2>
<p>Dec 7, 2022</p>
<ul class="simple">
<li><p>Bug fix release. Main issue was reconnect bug for discord bot.</p></li>
</ul>
</section>
<section id="evennia-1-0-0">
<h2>Evennia 1.0.0<a class="headerlink" href="#evennia-1-0-0" title="Link to this heading"></a></h2>
<p>2019-2022</p>
<p><em>Changed to using <code class="docutils literal notranslate"><span class="pre">main</span></code> branch to follow github standard. Old <code class="docutils literal notranslate"><span class="pre">master</span></code> branch remains
for now but will not be used anymore, so as to not break installs during transition.</em></p>
<p>Also changing to using semantic versioning with this version.</p>
<p>Increase requirements: Django 4.1+, Twisted 22.10+ Python 3.10, 3.11. PostgreSQL 11+.</p>
<ul class="simple">
<li><p>New <code class="docutils literal notranslate"><span class="pre">drop:holds()</span></code> lock default to limit dropping nonsensical things. Access check
defaults to True for backwards-compatibility in 0.9, will be False in 1.0</p></li>
<li><p>REST API allows you external access to db objects through HTTP requests (Tehom)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Object.normalize_name</span></code> and <code class="docutils literal notranslate"><span class="pre">.validate_name</span></code> added to (by default) enforce latinify
on character name and avoid potential exploits using clever Unicode chars (trhr)</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">utils.format_grid</span></code> for easily displaying long lists of items in a block.</p></li>
<li><p>Using <code class="docutils literal notranslate"><span class="pre">lunr</span></code> search indexing for better <code class="docutils literal notranslate"><span class="pre">help</span></code> matching and suggestions. Also improve
the main help commands default listing output.</p></li>
<li><p>Added <code class="docutils literal notranslate"><span class="pre">content_types</span></code> indexing to DefaultObjects ContentsHandler. (volund)</p></li>
<li><p>Made most of the networking classes such as Protocols and the SessionHandlers
replaceable via <code class="docutils literal notranslate"><span class="pre">settings.py</span></code> for modding enthusiasts. (volund)</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">initial_setup.py</span></code> file can now be substituted in <code class="docutils literal notranslate"><span class="pre">settings.py</span></code> to customize
initial game database state. (volund)</p></li>
<li><p>Added new Traits contrib, converted and expanded from Ainneve project.</p></li>
<li><p>Added new <code class="docutils literal notranslate"><span class="pre">requirements_extra.txt</span></code> file for easily getting all optional dependencies.</p></li>
<li><p>Change default multi-match syntax from 1-obj, 2-obj to obj-1, obj-2.</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">object.search</span></code> support stacks=0 keyword - if <code class="docutils literal notranslate"><span class="pre">&gt;0</span></code>, the method will return
N identical matches instead of triggering a multi-match error.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">tags.has()</span></code> method for checking if an object has a tag or tags (PR by ChrisLR)</p></li>
<li><p>Make IP throttle use Django-based cache system for optional persistence (PR by strikaco)</p></li>
<li><p>Renamed Tutorial classes “Weapon” and “WeaponRack” to “TutorialWeapon” and
“TutorialWeaponRack” to prevent collisions with classes in mygame</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">crafting</span></code> contrib, adding a full crafting subsystem (Griatch 2020)</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">rplanguage</span></code> contrib now auto-capitalizes sentences and retains ellipsis (…). This
change means that proper nouns at the start of sentences will not be treated as nouns.</p></li>
<li><p>Make MuxCommand <code class="docutils literal notranslate"><span class="pre">lhs/rhslist</span></code> always be lists, also if empty (used to be the empty string)</p></li>
<li><p>Fix typo in UnixCommand contrib, where <code class="docutils literal notranslate"><span class="pre">help</span></code> was given as <code class="docutils literal notranslate"><span class="pre">--hel</span></code>.</p></li>
<li><p>Latin (la) i18n translation (jamalainm)</p></li>
<li><p>Made the <code class="docutils literal notranslate"><span class="pre">evennia</span></code> dir possible to use without gamedir for purpose of doc generation.</p></li>
<li><p>Make Scripts timer component independent from script object deletion; can now start/stop
timer without deleting Script. The <code class="docutils literal notranslate"><span class="pre">.persistent</span></code> flag now only controls if timer survives
reload - Script has to be removed with <code class="docutils literal notranslate"><span class="pre">.delete()</span></code> like other typeclassed entities.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">utils.repeat</span></code> and <code class="docutils literal notranslate"><span class="pre">utils.unrepeat</span></code> as shortcuts to TickerHandler add/remove, similar
to how <code class="docutils literal notranslate"><span class="pre">utils.delay</span></code> is a shortcut for TaskHandler add.</p></li>
<li><p>Refactor the classic <code class="docutils literal notranslate"><span class="pre">red_button</span></code> example to use <code class="docutils literal notranslate"><span class="pre">utils.delay/repeat</span></code> and modern recommended
code style and paradigms instead of relying on <code class="docutils literal notranslate"><span class="pre">Scripts</span></code> for everything.</p></li>
<li><p>Expand <code class="docutils literal notranslate"><span class="pre">CommandTest</span></code> with ability to check multiple message-receivers; inspired by PR by
user davewiththenicehat. Also add new doc string.</p></li>
<li><p>Add central <code class="docutils literal notranslate"><span class="pre">FuncParser</span></code> as a much more powerful replacement for the old <code class="docutils literal notranslate"><span class="pre">parse_inlinefunc</span></code>
function.</p></li>
<li><p>Attribute/NAttribute got a homogenous representation, using intefaces, both
<code class="docutils literal notranslate"><span class="pre">AttributeHandler</span></code> and <code class="docutils literal notranslate"><span class="pre">NAttributeHandler</span></code> has same api now.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">evennia/utils/verb_conjugation</span></code> for automatic verb conjugation (English only). This
is useful for implementing actor-stance emoting for sending a string to different targets.</p></li>
<li><p>New version of Italian translation (rpolve)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">utils.evmenu.ask_yes_no</span></code> is a helper function that makes it easy to ask a yes/no question
to the user and respond to their input. This complements the existing <code class="docutils literal notranslate"><span class="pre">get_input</span></code> helper.</p></li>
<li><p>Allow sending messages with <code class="docutils literal notranslate"><span class="pre">page/tell</span></code> without a <code class="docutils literal notranslate"><span class="pre">=</span></code> if target name contains no spaces.</p></li>
<li><p>New FileHelpStorage system allows adding help entries via external files.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">sethelp</span></code> command now warns if shadowing other help-types when creating a new
entry.</p></li>
<li><p>Help command now uses <code class="docutils literal notranslate"><span class="pre">view</span></code> lock to determine if cmd/entry shows in index and
<code class="docutils literal notranslate"><span class="pre">read</span></code> lock to determine if it can be read. It used to be <code class="docutils literal notranslate"><span class="pre">view</span></code> in the role
of the latter. Migration swaps these around.</p></li>
<li><p>In modules given by <code class="docutils literal notranslate"><span class="pre">settings.PROTOTYPE_MODULES</span></code>, spawner will now first look for a global
list <code class="docutils literal notranslate"><span class="pre">PROTOTYPE_LIST</span></code> of dicts before loading all dicts in the module as prototypes.</p></li>
<li><p>New Channel-System using the <code class="docutils literal notranslate"><span class="pre">channel</span></code> command and nicks. Removed the <code class="docutils literal notranslate"><span class="pre">ChannelHandler</span></code> and the
concept of a dynamically created <code class="docutils literal notranslate"><span class="pre">ChannelCmdSet</span></code>.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">Msg.db_receiver_external</span></code> field to allowe external, string-id message-receivers.</p></li>
<li><p>Renamed <code class="docutils literal notranslate"><span class="pre">app.css</span></code> to <code class="docutils literal notranslate"><span class="pre">website.css</span></code> for consistency. Removed old prosimii-css files.</p></li>
<li><p>Remove <code class="docutils literal notranslate"><span class="pre">mygame/web/static_overrides</span></code> and -<code class="docutils literal notranslate"><span class="pre">template_overrides</span></code>, reorganize website/admin/client/api
into a more consistent structure for overriding. Expanded webpage documentation considerably.</p></li>
<li><p>REST API list-view was shortened (#2401). New CSS/HTML. Add ReDoc for API autodoc page.</p></li>
<li><p>Update and fix dummyrunner with cleaner code and setup.</p></li>
<li><p>Made <code class="docutils literal notranslate"><span class="pre">iter_to_str</span></code> format prettier strings, using Oxford comma.</p></li>
<li><p>Added an MXP anchor tag to also support clickable web links.</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">tasks</span></code> command for managing tasks started with <code class="docutils literal notranslate"><span class="pre">utils.delay</span></code> (PR by davewiththenicehat)</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">help</span></code> index output clickable for webclient/clients with MXP (PR by davewiththenicehat)</p></li>
<li><p>Custom <code class="docutils literal notranslate"><span class="pre">evennia</span></code> launcher commands (e.g. <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">mycmd</span> <span class="pre">foo</span> <span class="pre">bar</span></code>). Add new commands as callables
accepting <code class="docutils literal notranslate"><span class="pre">*args</span></code>, as <code class="docutils literal notranslate"><span class="pre">settings.EXTRA_LAUNCHER_COMMANDS</span> <span class="pre">=</span> <span class="pre">{'mycmd':</span> <span class="pre">'path.to.callable',</span> <span class="pre">...}</span></code>.</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">XYZGrid</span></code> contrib, adding x,y,z grid coordinates with in-game map and
pathfinding. Controlled outside of the game via custom evennia launcher command.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Script.delete</span></code> has new kwarg <code class="docutils literal notranslate"><span class="pre">stop_task=True</span></code>, that can be used to avoid
infinite recursion when wanting to set up Script to delete-on-stop.</p></li>
<li><p>Command executions now done on copies to make sure <code class="docutils literal notranslate"><span class="pre">yield</span></code> dont cause crossovers. Add
<code class="docutils literal notranslate"><span class="pre">Command.retain_instance</span></code> flag for reusing the same command instance.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">typeclass</span></code> command will now correctly search the correct database-table for the target
obj (avoids mistakenly assigning an AccountDB-typeclass to a Character etc).</p></li>
<li><p>Merged <code class="docutils literal notranslate"><span class="pre">script</span></code> and <code class="docutils literal notranslate"><span class="pre">scripts</span></code> commands into one, for both managing global- and
on-object Scripts. Moved <code class="docutils literal notranslate"><span class="pre">CmdScripts</span></code> and <code class="docutils literal notranslate"><span class="pre">CmdObjects</span></code> to <code class="docutils literal notranslate"><span class="pre">commands/default/building.py</span></code>.</p></li>
<li><p>Keep GMCP function case if outputfunc starts with capital letter (so <code class="docutils literal notranslate"><span class="pre">cmd_name</span></code> -&gt; <code class="docutils literal notranslate"><span class="pre">Cmd.Name</span></code>
but <code class="docutils literal notranslate"><span class="pre">Cmd_nAmE</span></code> -&gt; <code class="docutils literal notranslate"><span class="pre">Cmd.nAmE</span></code>). This helps e.g Mudlets legacy <code class="docutils literal notranslate"><span class="pre">Client_GUI</span></code> implementation)</p></li>
<li><p>Prototypes now allow setting <code class="docutils literal notranslate"><span class="pre">prototype_parent</span></code> directly to a prototype-dict.
This makes it easier when dynamically building in-module prototypes.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">RPSystem</span> <span class="pre">contrib</span></code> was expanded to support case, so /tall becomes tall man
while /Tall becomes Tall man. One can turn this off if wanting the old style.</p></li>
<li><p>Change <code class="docutils literal notranslate"><span class="pre">EvTable</span></code> fixed-height rebalance algorithm to fill with empty lines at end of
column instead of inserting rows based on cell-size (could be mistaken for a bug).</p></li>
<li><p>Split <code class="docutils literal notranslate"><span class="pre">return_appearance</span></code> hook with helper methods and have it use a template
string in order to make it easier to override.</p></li>
<li><p>Add validation question to default account creation.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">LOCALECHO</span></code> client option to add server-side echo for clients that does
not support this (useful for getting a complete log).</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">&#64;lazy_property</span></code> decorator create read/delete-protected properties. This is
because its used for handlers, and e.g. self.locks=[] is a common beginner mistake.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">$pron()</span></code> inlinefunc for pronoun parsing in actor-stance strings using
<code class="docutils literal notranslate"><span class="pre">msg_contents</span></code>.</p></li>
<li><p>Update defauklt website to show Telnet/SSL/SSH connect info. Added new
<code class="docutils literal notranslate"><span class="pre">SERVER_HOSTNAME</span></code> setting for use in the server:port stanza.</p></li>
<li><p>Changed all <code class="docutils literal notranslate"><span class="pre">at_before/after_*</span></code> hooks to <code class="docutils literal notranslate"><span class="pre">at_pre/post_*</span></code> for consistency
across Evennia (the old names still work but are deprecated)</p></li>
<li><p>Change <code class="docutils literal notranslate"><span class="pre">settings.COMMAND_DEFAULT_ARG_REGEX</span></code> default from <code class="docutils literal notranslate"><span class="pre">None</span></code> to a regex meaning that
a space or <code class="docutils literal notranslate"><span class="pre">/</span></code> must separate the cmdname and args. This better fits common expectations.</p></li>
<li><p>Add confirmation question to <code class="docutils literal notranslate"><span class="pre">ban</span></code>/<code class="docutils literal notranslate"><span class="pre">unban</span></code> commands.</p></li>
<li><p>Check new <code class="docutils literal notranslate"><span class="pre">teleport</span></code> and <code class="docutils literal notranslate"><span class="pre">teleport_here</span></code> lock-types in <code class="docutils literal notranslate"><span class="pre">teleport</span></code> command to optionally
allow to limit teleportation of an object or to a specific destination.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">settings.MXP_ENABLED=True</span></code> and <code class="docutils literal notranslate"><span class="pre">settings.MXP_OUTGOING_ONLY=True</span></code> as sane defaults,
to avoid known security issues with players entering MXP links.</p></li>
<li><p>Add browser name to webclient <code class="docutils literal notranslate"><span class="pre">CLIENT_NAME</span></code> in <code class="docutils literal notranslate"><span class="pre">session.protocol_flags</span></code>, e.g.
<code class="docutils literal notranslate"><span class="pre">&quot;Evennia</span> <span class="pre">webclient</span> <span class="pre">(websocket:firefox)&quot;</span></code> or <code class="docutils literal notranslate"><span class="pre">&quot;evennia</span> <span class="pre">webclient</span> <span class="pre">(ajax:chrome)&quot;</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">TagHandler.add/has(tag=...)</span></code> kwarg changed to <code class="docutils literal notranslate"><span class="pre">add/has(key=...)</span></code> for consistency
with other handlers.</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">DefaultScript.delete</span></code>, <code class="docutils literal notranslate"><span class="pre">DefaultChannel.delete</span></code> and <code class="docutils literal notranslate"><span class="pre">DefaultAccount.delete</span></code> return
bool True/False if deletion was successful (like <code class="docutils literal notranslate"><span class="pre">DefaultObject.delete</span></code> before them)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">contrib.custom_gametime</span></code> days/weeks/months now always starts from 1 (to match
the standard calendar form … there is no month 0 every year after all).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code>/<code class="docutils literal notranslate"><span class="pre">NAttributeProperty</span></code> to allow managing Attributes/NAttributes
on typeclasses in the same way as Django fields.</p></li>
<li><p>Give build/system commands a <code class="docutils literal notranslate"><span class="pre">&#64;name</span></code> to fall back to if the non-&#64; name is used
by another command (like <code class="docutils literal notranslate"><span class="pre">open</span></code> and <code class="docutils literal notranslate"><span class="pre">&#64;open</span></code>. If no duplicate, &#64; is optional.</p></li>
<li><p>Move legacy channel-management commands (<code class="docutils literal notranslate"><span class="pre">ccreate</span></code>, <code class="docutils literal notranslate"><span class="pre">addcom</span></code> etc) to a contrib
since their work is now fully handled by the single <code class="docutils literal notranslate"><span class="pre">channel</span></code> command.</p></li>
<li><p>Expand <code class="docutils literal notranslate"><span class="pre">examine</span></code> commands code to much more extensible and modular. Show
attribute categories and value types (when not strings).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">AttributeHandler.remove(key,</span> <span class="pre">return_exception=False,</span> <span class="pre">category=None,</span> <span class="pre">...)</span></code> changed
to <code class="docutils literal notranslate"><span class="pre">.remove(key,</span> <span class="pre">category=None,</span> <span class="pre">return_exception=False,</span> <span class="pre">...)</span></code> for consistency.</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">command</span> <span class="pre">cooldown</span></code> contrib for making it easier to manage commands using
dynamic cooldowns between uses (owllex)</p></li>
<li><p>Restructured <code class="docutils literal notranslate"><span class="pre">contrib/</span></code> folder, placing all contribs as separate packages under
subfolders. All imports will need to be updated.</p></li>
<li><p>Made <code class="docutils literal notranslate"><span class="pre">MonitorHandler.add/remove</span></code> support <code class="docutils literal notranslate"><span class="pre">category</span></code> for monitoring Attributes
with a category (before only key was used, ignoring category entirely).</p></li>
<li><p>Move <code class="docutils literal notranslate"><span class="pre">create_*</span></code> functions into db managers, leaving <code class="docutils literal notranslate"><span class="pre">utils.create</span></code> only being
wrapper functions (consistent with <code class="docutils literal notranslate"><span class="pre">utils.search</span></code>). No change of api otherwise.</p></li>
<li><p>Add support for <code class="docutils literal notranslate"><span class="pre">$dbref()</span></code> and <code class="docutils literal notranslate"><span class="pre">$search</span></code> when assigning an Attribute value
with the <code class="docutils literal notranslate"><span class="pre">set</span></code> command. This allows assigning real objects from in-game.</p></li>
<li><p>Add ability to examine <code class="docutils literal notranslate"><span class="pre">/script</span></code> and <code class="docutils literal notranslate"><span class="pre">/channel</span></code> entities with <code class="docutils literal notranslate"><span class="pre">examine</span></code> command.</p></li>
<li><p>Homogenize manager search methods to return querysets and not lists.</p></li>
<li><p>Restructure unit tests to always honor default settings; make new parents in
on location for easy use in game dir.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">Lunr</span></code> search engine used by help excludes common words; the settings-list
<code class="docutils literal notranslate"><span class="pre">LUNR_STOP_WORD_FILTER_EXCEPTIONS</span></code> can be extended to make sure common names are included.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">.deserialize()</span></code> method to <code class="docutils literal notranslate"><span class="pre">_Saver*</span></code> structures to help completely
decouple structures from database without needing separate import.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">run_in_main_thread</span></code> as a helper for those wanting to code server code
from a web view.</p></li>
<li><p>Update <code class="docutils literal notranslate"><span class="pre">evennia.utils.logger</span></code> to use Twisteds new logging API. No change in Evennia API
except more standard aliases logger.error/info/exception/debug etc can now be used.</p></li>
<li><p>Have <code class="docutils literal notranslate"><span class="pre">type/force</span></code> default to <code class="docutils literal notranslate"><span class="pre">update</span></code>-mode rather than <code class="docutils literal notranslate"><span class="pre">reset</span></code>mode and add more verbose
warning when using reset mode.</p></li>
<li><p>Attribute storage support defaultdics (Hendher)</p></li>
<li><p>Add ObjectParent mixin to default game folder template as an easy, ready-made
way to override features on all ObjectDB-inheriting objects easily.
source location, mimicking behavior of <code class="docutils literal notranslate"><span class="pre">at_pre_move</span></code> hook - returning False will abort move.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">TagProperty</span></code>, <code class="docutils literal notranslate"><span class="pre">AliasProperty</span></code> and <code class="docutils literal notranslate"><span class="pre">PermissionProperty</span></code> to assign these
data in a similar way to django fields.</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">at_pre_object_receive(obj,</span> <span class="pre">source_location)</span></code> method on Objects. Called on
destination, mimicking behavior of <code class="docutils literal notranslate"><span class="pre">at_pre_move</span></code> hook - returning False will abort move.</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">at_pre_object_leave(obj,</span> <span class="pre">destination)</span></code> method on Objects. Called on</p></li>
<li><p>The db pickle-serializer now checks for methods <code class="docutils literal notranslate"><span class="pre">__serialize_dbobjs__</span></code> and <code class="docutils literal notranslate"><span class="pre">__deserialize_dbobjs__</span></code>
to allow custom packing/unpacking of nested dbobjs, to allow storing in Attribute.</p></li>
<li><p>Optimizations to rpsystem contrib performance. Breaking change: <code class="docutils literal notranslate"><span class="pre">.get_sdesc()</span></code> will
now return <code class="docutils literal notranslate"><span class="pre">None</span></code> instead of <code class="docutils literal notranslate"><span class="pre">.db.desc</span></code> if no sdesc is set; fallback in hook (inspectorCaracal)</p></li>
<li><p>Reworked text2html parser to avoid problems with stateful color tags (inspectorCaracal)</p></li>
<li><p>Simplified <code class="docutils literal notranslate"><span class="pre">EvMenu.options_formatter</span></code> hook to use <code class="docutils literal notranslate"><span class="pre">EvColumn</span></code> and f-strings (inspectorcaracal)</p></li>
<li><p>Allow <code class="docutils literal notranslate"><span class="pre">#</span> <span class="pre">CODE</span></code>, <code class="docutils literal notranslate"><span class="pre">#</span> <span class="pre">HEADER</span></code> etc as well as <code class="docutils literal notranslate"><span class="pre">#CODE</span></code>/<code class="docutils literal notranslate"><span class="pre">#HEADER</span></code> in batchcode
files - this works better with black linting.</p></li>
<li><p>Added <code class="docutils literal notranslate"><span class="pre">move_type</span></code> str kwarg to <code class="docutils literal notranslate"><span class="pre">move_to()</span></code> calls, optionally identifying the type of
move being done (teleport, disembark, give etc). (volund)</p></li>
<li><p>Made RPSystem contrib msg calls pass <code class="docutils literal notranslate"><span class="pre">pose</span></code> or <code class="docutils literal notranslate"><span class="pre">say</span></code> as msg-<code class="docutils literal notranslate"><span class="pre">type</span></code> for use in
e.g. webclient pane filtering where desired. (volund)</p></li>
<li><p>Added <code class="docutils literal notranslate"><span class="pre">Account.uses_screenreader(session=None)</span></code> as a quick shortcut for
finding if a user uses a screenreader (and adjust display accordingly).</p></li>
<li><p>Fixed bug in <code class="docutils literal notranslate"><span class="pre">cmdset.remove()</span></code> where a command could not be deleted by <code class="docutils literal notranslate"><span class="pre">key</span></code>,
even though doc suggested one could (ChrisLR)</p></li>
<li><p>New contrib <code class="docutils literal notranslate"><span class="pre">name_generator</span></code> for building random real-world based or fantasy-names
based on phonetic rules.</p></li>
<li><p>Enable proper serialization of dict subclasses in Attributes (aogier)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">object.search</span></code> fuzzy-matching now uses <code class="docutils literal notranslate"><span class="pre">icontains</span></code> instead of <code class="docutils literal notranslate"><span class="pre">istartswith</span></code>
to better match how search works elsewhere (volund)</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">.at_traverse</span></code> hook now receives a <code class="docutils literal notranslate"><span class="pre">exit_obj</span></code> kwarg, linking back to the
exit triggering the hook (volund)</p></li>
<li><p>Contrib <code class="docutils literal notranslate"><span class="pre">buffs</span></code> for managing temporary and permanent RPG status buffs effects (tegiminis)</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">at_server_init()</span></code> hook called before all other startup hooks for all
startup modes. Used for more generic overriding (volund)</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">search</span></code> lock type used to completely hide an object from being found by
the <code class="docutils literal notranslate"><span class="pre">DefaultObject.search</span></code> (<code class="docutils literal notranslate"><span class="pre">caller.search</span></code>) method. (CloudKeeper)</p></li>
<li><p>Change setting <code class="docutils literal notranslate"><span class="pre">MULTISESSION_MODE</span></code> to now only control sessions, not how many
characters can be puppeted simultaneously. New settings now control that.</p></li>
<li><p>Add new setting <code class="docutils literal notranslate"><span class="pre">AUTO_CREATE_CHARACTER_WITH_ACCOUNT</span></code>, a boolean deciding if
the new account should also get a matching character (legacy MUD style).</p></li>
<li><p>Add new setting <code class="docutils literal notranslate"><span class="pre">AUTO_PUPPET_ON_LOGIN</span></code>, boolean deciding if one should
automatically puppet the last/available character on connection (legacy MUD style)</p></li>
<li><p>Add new setting <code class="docutils literal notranslate"><span class="pre">MAX_NR_SIMULTANEUS_PUPPETS</span></code> - how many puppets the account
can run at the same time. Used to limit multi-playing.</p></li>
<li><p>Make setting <code class="docutils literal notranslate"><span class="pre">MAX_NR_CHARACTERS</span></code> interact better with the new settings above.</p></li>
<li><p>Allow <code class="docutils literal notranslate"><span class="pre">$search</span></code> funcparser func to search tags and to accept kwargs for more
powerful searches passed into the regular search functions.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">spawner.spawn</span></code> and linked methods now has a kwarg <code class="docutils literal notranslate"><span class="pre">protfunc_raise_errors</span></code>
(default True) to disable strict errors on malformed/not-found protfuncs</p></li>
<li><p>Improve search performance when having many DB-based prototypes via caching.</p></li>
<li><p>Remove the <code class="docutils literal notranslate"><span class="pre">return_parents</span></code> kwarg of <code class="docutils literal notranslate"><span class="pre">evennia.prototypes.spawner.spawn</span></code> since it
was inefficient and unused.</p></li>
<li><p>Made all id fields BigAutoField for all databases. (owllex)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">EvForm</span></code> refactored. New <code class="docutils literal notranslate"><span class="pre">literals</span></code> mapping, for literal mappings into the
main template (e.g. for single-character replacements).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">EvForm</span></code> <code class="docutils literal notranslate"><span class="pre">cells</span></code> kwarg now accepts <code class="docutils literal notranslate"><span class="pre">EvCells</span></code> with custom formatting options
(mainly for custom align/valign). <code class="docutils literal notranslate"><span class="pre">EvCells</span></code> now makes use of <code class="docutils literal notranslate"><span class="pre">utils.justify</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">utils.justify</span></code> now supports <code class="docutils literal notranslate"><span class="pre">align=&quot;a&quot;</span></code> (absolute alignments. This keeps
the given left indent but crops/fills to the width. Used in EvCells.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">EvTable</span></code> now supports passing <code class="docutils literal notranslate"><span class="pre">EvColumn</span></code>s as a list directly, (<code class="docutils literal notranslate"><span class="pre">EvTable(table=[colA,colB])</span></code>)</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">tags=</span></code> search criterion to <code class="docutils literal notranslate"><span class="pre">DefaultObject.search</span></code>.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">AT_EXIT_TRAVERSE</span></code> signal, firing when an exit is traversed.</p></li>
<li><p>Add integration between Evennia and Discord channels (PR by Inspector Cararacal)</p></li>
<li><p>Support for using a Godot-powered client with Evennia (PR by ChrisLR)</p></li>
<li><p>Added German translation (patch by Zhuraj)</p></li>
</ul>
</section>
<section id="evennia-0-9-5">
<h2>Evennia 0.9.5<a class="headerlink" href="#evennia-0-9-5" title="Link to this heading"></a></h2>
<blockquote>
<div><p>2019-2020
Released 2020-11-14.
Transitional release, including new doc system.</p>
</div></blockquote>
<p>Backported from develop: Python 3.8, 3.9 support. Django 3.2+ support, Twisted 21+ support.</p>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">is_typeclass(obj</span> <span class="pre">(Object),</span> <span class="pre">exact</span> <span class="pre">(bool))</span></code> now defaults to exact=False</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">py</span></code> command now reroutes stdout to output results in-game client. <code class="docutils literal notranslate"><span class="pre">py</span></code>
without arguments starts a full interactive Python console.</p></li>
<li><p>Webclient default to a single input pane instead of two. Now defaults to no help-popup.</p></li>
<li><p>Webclient fix of prompt display</p></li>
<li><p>Webclient multimedia support for relaying images, video and sounds via
<code class="docutils literal notranslate"><span class="pre">.msg(image=URL)</span></code>, <code class="docutils literal notranslate"><span class="pre">.msg(video=URL)</span></code>
and <code class="docutils literal notranslate"><span class="pre">.msg(audio=URL)</span></code></p></li>
<li><p>Add Spanish translation (fermuch)</p></li>
<li><p>Expand <code class="docutils literal notranslate"><span class="pre">GLOBAL_SCRIPTS</span></code> container to always start scripts and to include all
global scripts regardless of how they were created.</p></li>
<li><p>Change settings to always use lists instead of tuples, to make mutable
settings easier to add to. (#1912)</p></li>
<li><p>Make new <code class="docutils literal notranslate"><span class="pre">CHANNEL_MUDINFO</span></code> setting for specifying the mudinfo channel</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">CHANNEL_CONNECTINFO</span></code> take full channel definition</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">DEFAULT_CHANNELS</span></code> list auto-create channels missing at reload</p></li>
<li><p>Webclient <code class="docutils literal notranslate"><span class="pre">ANSI-&gt;HTML</span></code> parser updated. Webclient line width changed from 1.6em to 1.1em
to better make ANSI graphics look the same as for third-party clients</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">AttributeHandler.get(return_list=True)</span></code> will return <code class="docutils literal notranslate"><span class="pre">[]</span></code> if there are no
Attributes instead of <code class="docutils literal notranslate"><span class="pre">[None]</span></code>.</p></li>
<li><p>Remove <code class="docutils literal notranslate"><span class="pre">pillow</span></code> requirement (install especially if using imagefield)</p></li>
<li><p>Add Simplified Korean translation (aceamro)</p></li>
<li><p>Show warning on <code class="docutils literal notranslate"><span class="pre">start</span> <span class="pre">-l</span></code> if settings contains values unsafe for production.</p></li>
<li><p>Make code auto-formatted with Black.</p></li>
<li><p>Make default <code class="docutils literal notranslate"><span class="pre">set</span></code> command able to edit nested structures (PR by Aaron McMillan)</p></li>
<li><p>Allow running Evennia test suite from core repo with <code class="docutils literal notranslate"><span class="pre">make</span> <span class="pre">test</span></code>.</p></li>
<li><p>Return <code class="docutils literal notranslate"><span class="pre">store_key</span></code> from <code class="docutils literal notranslate"><span class="pre">TickerHandler.add</span></code> and add <code class="docutils literal notranslate"><span class="pre">store_key</span></code> as a kwarg to
the <code class="docutils literal notranslate"><span class="pre">TickerHandler.remove</span></code> method. This makes it easier to manage tickers.</p></li>
<li><p>EvMore auto-justify now defaults to False since this works better with all types
of texts (such as tables). New <code class="docutils literal notranslate"><span class="pre">justify</span></code> bool. Old <code class="docutils literal notranslate"><span class="pre">justify_kwargs</span></code> remains
but is now only used to pass extra kwargs into the justify function.</p></li>
<li><p>EvMore <code class="docutils literal notranslate"><span class="pre">text</span></code> argument can now also be a list or a queryset. Querysets will be
sliced to only return the required data per page.</p></li>
<li><p>Improve performance of <code class="docutils literal notranslate"><span class="pre">find</span></code> and <code class="docutils literal notranslate"><span class="pre">objects</span></code> commands on large data sets (strikaco)</p></li>
<li><p>New <code class="docutils literal notranslate"><span class="pre">CHANNEL_HANDLER_CLASS</span></code> setting allows for replacing the ChannelHandler entirely.</p></li>
<li><p>Made <code class="docutils literal notranslate"><span class="pre">py</span></code> interactive mode support regular quit() and more verbose.</p></li>
<li><p>Made <code class="docutils literal notranslate"><span class="pre">Account.options.get</span></code> accept <code class="docutils literal notranslate"><span class="pre">default=None</span></code> kwarg to mimic other uses of get. Set
the new <code class="docutils literal notranslate"><span class="pre">raise_exception</span></code> boolean if ranting to raise KeyError on a missing key.</p></li>
<li><p>Moved behavior of unmodified <code class="docutils literal notranslate"><span class="pre">Command</span></code> and <code class="docutils literal notranslate"><span class="pre">MuxCommand</span></code> <code class="docutils literal notranslate"><span class="pre">.func()</span></code> to new
<code class="docutils literal notranslate"><span class="pre">.get_command_info()</span></code> method for easier overloading and access. (Volund)</p></li>
<li><p>Removed unused <code class="docutils literal notranslate"><span class="pre">CYCLE_LOGFILES</span></code> setting. Added <code class="docutils literal notranslate"><span class="pre">SERVER_LOG_DAY_ROTATION</span></code>
and <code class="docutils literal notranslate"><span class="pre">SERVER_LOG_MAX_SIZE</span></code> (and equivalent for PORTAL) to control log rotation.</p></li>
<li><p>Addded <code class="docutils literal notranslate"><span class="pre">inside_rec</span></code> lockfunc - if room is locked, the normal <code class="docutils literal notranslate"><span class="pre">inside()</span></code> lockfunc will
fail e.g. for your inventory objs (since their loc is you), whereas this will pass.</p></li>
<li><p>RPSystem contribs CmdRecog will now list all recogs if no arg is given. Also multiple
bugfixes.</p></li>
<li><p>Remove <code class="docutils literal notranslate"><span class="pre">dummy&#64;example.com</span></code> as a default account email when unset, a string is no longer
required by Django.</p></li>
<li><p>Fixes to <code class="docutils literal notranslate"><span class="pre">spawn</span></code>, make updating an existing prototype/object work better. Add <code class="docutils literal notranslate"><span class="pre">/raw</span></code> switch
to <code class="docutils literal notranslate"><span class="pre">spawn</span></code> command to extract the raw prototype dict for manual editing.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">list_to_string</span></code> is now <code class="docutils literal notranslate"><span class="pre">iter_to_string</span></code> (but old name still works as legacy alias). It will
now accept any input, including generators and single values.</p></li>
<li><p>EvTable should now correctly handle columns with wider asian-characters in them.</p></li>
<li><p>Update Twisted requirement to &gt;=2.3.0 to close security vulnerability</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">$random</span></code> inlinefunc, supports minval,maxval arguments that can be ints and floats.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">evennia.utils.inlinefuncs.raw(&lt;str&gt;)</span></code> as a helper to escape inlinefuncs in a string.</p></li>
<li><p>Make CmdGet/Drop/Give give proper error if <code class="docutils literal notranslate"><span class="pre">obj.move_to</span></code> returns <code class="docutils literal notranslate"><span class="pre">False</span></code>.</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">Object/Room/Exit.create</span></code>s <code class="docutils literal notranslate"><span class="pre">account</span></code> argument optional. If not given, will set perms
to that of the object itself (along with normal Admin/Dev permission).</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">INLINEFUNC_STACK_MAXSIZE</span></code> default visible in <code class="docutils literal notranslate"><span class="pre">settings_default.py</span></code>.</p></li>
<li><p>Change how <code class="docutils literal notranslate"><span class="pre">ic</span></code> finds puppets; non-priveleged users will use <code class="docutils literal notranslate"><span class="pre">_playable_characters</span></code> list as
candidates, Builders+ will use list, local search and only global search if no match found.</p></li>
<li><p>Make <code class="docutils literal notranslate"><span class="pre">cmd.at_post_cmd()</span></code> always run after <code class="docutils literal notranslate"><span class="pre">cmd.func()</span></code>, even when the latter uses delays
with yield.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">EvMore</span></code> support for db queries and django paginators as well as easier to override for custom
pagination (e.g. to create EvTables for every page instead of splittine one table)</p></li>
<li><p>Using <code class="docutils literal notranslate"><span class="pre">EvMore</span> <span class="pre">pagination</span></code>, dramatically improves performance of <code class="docutils literal notranslate"><span class="pre">spawn/list</span></code> and <code class="docutils literal notranslate"><span class="pre">scripts</span></code> listings
(100x speed increase for displaying 1000+ prototypes/scripts).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">EvMenu</span></code> now uses the more logically named <code class="docutils literal notranslate"><span class="pre">.ndb._evmenu</span></code> instead of <code class="docutils literal notranslate"><span class="pre">.ndb._menutree</span></code> to store itself.
Both still work for backward compatibility, but <code class="docutils literal notranslate"><span class="pre">_menutree</span></code> is deprecated.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">EvMenu.msg(txt)</span></code> added as a central place to send text to the user, makes it easier to override.
Default <code class="docutils literal notranslate"><span class="pre">EvMenu.msg</span></code> sends with OOB type=“menu” for use with OOB and webclient pane-redirects.</p></li>
<li><p>New EvMenu templating system for quickly building simpler EvMenus without as much code.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">Command.client_height()</span></code> method to match existing <code class="docutils literal notranslate"><span class="pre">.client_width</span></code> (stricako)</p></li>
<li><p>Include more Web-client info in <code class="docutils literal notranslate"><span class="pre">session.protocol_flags</span></code>.</p></li>
<li><p>Fixes in multi-match situations - dont allow finding/listing multimatches for 3-box when
only two boxes in location.</p></li>
<li><p>Fix for TaskHandler with proper deferred returns/ability to cancel etc (PR by davewiththenicehat)</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">PermissionHandler.check</span></code> method for straight string perm-checks without needing lockstrings.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">evennia.utils.utils.strip_unsafe_input</span></code> for removing html/newlines/tags from user input. The
<code class="docutils literal notranslate"><span class="pre">INPUT_CLEANUP_BYPASS_PERMISSIONS</span></code> is a list of perms that bypass this safety stripping.</p></li>
<li><p>Make default <code class="docutils literal notranslate"><span class="pre">set</span></code> and <code class="docutils literal notranslate"><span class="pre">examine</span></code> commands aware of Attribute categories.</p></li>
</ul>
</section>
<section id="evennia-0-9">
<h2>Evennia 0.9<a class="headerlink" href="#evennia-0-9" title="Link to this heading"></a></h2>
<blockquote>
<div><p>2018-2019
Released Oct 2019</p>
</div></blockquote>
<section id="distribution">
<h3>Distribution<a class="headerlink" href="#distribution" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>New requirement: Python 3.7 (py2.7 support removed)</p></li>
<li><p>Django 2.1</p></li>
<li><p>Twisted 19.2.1</p></li>
<li><p>Autobahn websockets (removed old tmwx)</p></li>
<li><p>Docker image updated</p></li>
</ul>
</section>
<section id="commands">
<h3>Commands<a class="headerlink" href="#commands" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Remove <code class="docutils literal notranslate"><span class="pre">&#64;</span></code>-prefix from all default commands (prefixes still work, optional)</p></li>
<li><p>Removed default <code class="docutils literal notranslate"><span class="pre">&#64;delaccount</span></code> command, incorporating as <code class="docutils literal notranslate"><span class="pre">&#64;account/delete</span></code> instead. Added confirmation
question.</p></li>
<li><p>Add new <code class="docutils literal notranslate"><span class="pre">&#64;force</span></code> command to have another object perform a command.</p></li>
<li><p>Add the Portal uptime to the <code class="docutils literal notranslate"><span class="pre">&#64;time</span></code> command.</p></li>
<li><p>Make the <code class="docutils literal notranslate"><span class="pre">&#64;link</span></code> command first make a local search before a global search.</p></li>
<li><p>Have the default Unloggedin-look command look for optional <code class="docutils literal notranslate"><span class="pre">connection_screen()</span></code> callable in
<code class="docutils literal notranslate"><span class="pre">mygame/server/conf/connection_screen.py</span></code>. This allows for more flexible welcome screens
that are calculated on the fly.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">&#64;py</span></code> command now defaults to escaping html tags in its output when viewing in the webclient.
Use new <code class="docutils literal notranslate"><span class="pre">/clientraw</span></code> switch to get old behavior (issue #1369).</p></li>
<li><p>Shorter and more informative, dynamic, listing of on-command vars if not
setting func() in child command class.</p></li>
<li><p>New Command helper methods</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">.client_width()</span></code> returns client width of the session running the command.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">.styled_table(*args,</span> <span class="pre">**kwargs)</span></code> returns a formatted evtable styled by users options</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">.style_header(*args,</span> <span class="pre">**kwargs)</span></code> creates styled header entry</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">.style_separator(*args,</span> <span class="pre">**kwargs)</span></code> “ separator</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">.style_footer(*args,</span> <span class="pre">**kwargs)</span></code> “ footer</p></li>
</ul>
</li>
</ul>
</section>
<section id="web">
<h3>Web<a class="headerlink" href="#web" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Change webclient from old txws version to use more supported/feature-rich Autobahn websocket library</p></li>
</ul>
<section id="evennia-game-index">
<h4>Evennia game index<a class="headerlink" href="#evennia-game-index" title="Link to this heading"></a></h4>
<ul class="simple">
<li><p>Made Evennia game index client a part of core - now configured from settings file (old configs
need to be moved)</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">connections</span></code> command starts a wizard that helps you connect your game to the game index.</p></li>
<li><p>The game index now accepts games with no public telnet/webclient info (for early prototypes).</p></li>
</ul>
</section>
<section id="new-golden-layout-based-webclient-ui-friarzen">
<h4>New golden-layout based Webclient UI (&#64;friarzen)<a class="headerlink" href="#new-golden-layout-based-webclient-ui-friarzen" title="Link to this heading"></a></h4>
<ul class="simple">
<li><p>Features</p>
<ul>
<li><p>Much slicker behavior and more professional look</p></li>
<li><p>Allows tabbing as well as click and drag of panes in any grid position</p></li>
<li><p>Renaming tabs, assignments of data tags and output types are simple per-pane menus now</p></li>
<li><p>Any number of input panes, with separate histories</p></li>
<li><p>Button UI (disabled in JS by default)</p></li>
</ul>
</li>
</ul>
</section>
<section id="web-django-standard-initiative-strikaco">
<h4>Web/Django standard initiative (&#64;strikaco)<a class="headerlink" href="#web-django-standard-initiative-strikaco" title="Link to this heading"></a></h4>
<ul class="simple">
<li><p>Features</p>
<ul>
<li><p>Adds a series of web-based forms and generic class-based views</p>
<ul>
<li><p>Accounts</p>
<ul>
<li><p>Register - Enhances registration; allows optional collection of email address</p></li>
<li><p>Form - Adds a generic Django form for creating Accounts from the web</p></li>
</ul>
</li>
<li><p>Characters</p>
<ul>
<li><p>Create - Authenticated users can create new characters from the website (requires associated form)</p></li>
<li><p>Detail - Authenticated and authorized users can view select details about characters</p></li>
<li><p>List - Authenticated and authorized users can browse a list of all characters</p></li>
<li><p>Manage - Authenticated users can edit or delete owned characters from the web</p></li>
<li><p>Form - Adds a generic Django form for creating characters from the web</p></li>
</ul>
</li>
<li><p>Channels</p>
<ul>
<li><p>Detail - Authorized users can view channel logs from the web</p></li>
<li><p>List - Authorized users can browse a list of all channels</p></li>
</ul>
</li>
<li><p>Help Entries</p>
<ul>
<li><p>Detail - Authorized users can view help entries from the web</p></li>
<li><p>List - Authorized users can browse a list of all help entries from the web</p></li>
</ul>
</li>
</ul>
</li>
<li><p>Navbar changes</p>
<ul>
<li><p>Characters - Link to character list</p></li>
<li><p>Channels - Link to channel list</p></li>
<li><p>Help - Link to help entry list</p></li>
<li><p>Puppeting</p>
<ul>
<li><p>Users can puppet their own characters within the context of the website</p></li>
</ul>
</li>
<li><p>Dropdown</p>
<ul>
<li><p>Link to create characters</p></li>
<li><p>Link to manage characters</p></li>
<li><p>Link to quick-select puppets</p></li>
<li><p>Link to password change workflow</p></li>
</ul>
</li>
</ul>
</li>
</ul>
</li>
<li><p>Functions</p>
<ul>
<li><p>Updates Bootstrap to v4 stable</p></li>
<li><p>Enables use of Django Messages framework to communicate with users in browser</p></li>
<li><p>Implements webclient/website <code class="docutils literal notranslate"><span class="pre">_shared_login</span></code> functionality as Django middleware</p></li>
<li><p>account and puppet are added to all request contexts for authenticated users</p></li>
<li><p>Adds unit tests for all web views</p></li>
</ul>
</li>
<li><p>Cosmetic</p>
<ul>
<li><p>Prettifies Django forgot password workflow (requires SMTP to actually function)</p></li>
<li><p>Prettifies Django change password workflow</p></li>
</ul>
</li>
<li><p>Bugfixes</p>
<ul>
<li><p>Fixes bug on login page where error messages were not being displayed</p></li>
<li><p>Remove strvalue field from admin; it made no sense to have here, being an optimization field
for internal use.</p></li>
</ul>
</li>
</ul>
</section>
</section>
<section id="prototypes">
<h3>Prototypes<a class="headerlink" href="#prototypes" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.prototypes.save_prototype</span></code> now takes the prototype as a normal
argument (<code class="docutils literal notranslate"><span class="pre">prototype</span></code>) instead of having to give it as <code class="docutils literal notranslate"><span class="pre">**prototype</span></code>.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.prototypes.search_prototype</span></code> has a new kwarg <code class="docutils literal notranslate"><span class="pre">require_single=False</span></code> that
raises a KeyError exception if query gave 0 or &gt;1 results.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.prototypes.spawner</span></code> can now spawn by passing a <code class="docutils literal notranslate"><span class="pre">prototype_key</span></code></p></li>
</ul>
</section>
<section id="typeclasses">
<h3>Typeclasses<a class="headerlink" href="#typeclasses" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Add new methods on all typeclasses, useful specifically for object handling from the website/admin:</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">web_get_admin_url()</span></code>: Returns the path to the object detail page in the Admin backend.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">web_get_create_url()</span></code>: Returns the path to the typeclass creation page on the website, if implemented.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">web_get_absolute_url()</span></code>: Returns the path to the objects detail page on the website, if implemented.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">web_get_update_url()</span></code>: Returns the path to the objects update page on the website, if implemented.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">web_get_delete_url()</span></code>: Returns the path to the objects delete page on the website, if implemented.</p></li>
</ul>
</li>
<li><p>All typeclasses have new helper class method <code class="docutils literal notranslate"><span class="pre">create</span></code>, which encompasses useful functionality
that used to be embedded for example in the respective <code class="docutils literal notranslate"><span class="pre">&#64;create</span></code> or <code class="docutils literal notranslate"><span class="pre">&#64;connect</span></code> commands.</p></li>
<li><p>DefaultAccount now has new class methods implementing many things that used to be in unloggedin
commands (these can now be customized on the class instead):</p>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">is_banned()</span></code>: Checks if a given username or IP is banned.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">get_username_validators</span></code>: Return list of validators for username validation (see
<code class="docutils literal notranslate"><span class="pre">settings.AUTH_USERNAME_VALIDATORS</span></code>)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">authenticate</span></code>: Method to check given username/password.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">normalize_username</span></code>: Normalizes names so (for Unicode environments) users cannot mimic existing usernames by replacing select characters with visually-similar Unicode chars.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">validate_username</span></code>: Mechanism for validating a username based on predefined Django validators.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">validate_password</span></code>: Mechanism for validating a password based on predefined Django validators.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">set_password</span></code>: Apply password to account, using validation checks.</p></li>
</ul>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">AttributeHandler.remove</span></code> and <code class="docutils literal notranslate"><span class="pre">TagHandler.remove</span></code> can now be used to delete by-category. If neither
key nor category is given, they now work the same as .clear().</p></li>
</ul>
</section>
<section id="protocols">
<h3>Protocols<a class="headerlink" href="#protocols" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Support for <code class="docutils literal notranslate"><span class="pre">Grapevine</span></code> MUD-chat network (“channels” supported)</p></li>
</ul>
</section>
<section id="server">
<h3>Server<a class="headerlink" href="#server" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Convert ServerConf model to store its values as a Picklefield (same as
Attributes) instead of using a custom solution.</p></li>
<li><p>OOB: Add support for MSDP LIST, REPORT, UNREPORT commands (re-mapped to <code class="docutils literal notranslate"><span class="pre">msdp_list</span></code>,
<code class="docutils literal notranslate"><span class="pre">msdp_report</span></code>, <code class="docutils literal notranslate"><span class="pre">msdp_unreport</span></code>, inlinefuncs)</p></li>
<li><p>Added <code class="docutils literal notranslate"><span class="pre">evennia.ANSIString</span></code> to flat API.</p></li>
<li><p>Server/Portal log files now cycle to names on the form <code class="docutils literal notranslate"><span class="pre">server_.log_19_03_08_</span></code> instead of <code class="docutils literal notranslate"><span class="pre">server.log___19.3.8</span></code>, retaining
unix file sorting order.</p></li>
<li><p>Django signals fire for important events: Puppet/Unpuppet, Object create/rename, Login,
Logout, Login fail Disconnect, Account create/rename</p></li>
</ul>
</section>
<section id="settings">
<h3>Settings<a class="headerlink" href="#settings" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">GLOBAL_SCRIPTS</span></code> - dict defining typeclasses of global scripts to store on the new
<code class="docutils literal notranslate"><span class="pre">evennia.GLOBAL_SCRIPTS</span></code> container. These will auto-start when Evennia start and will always
exist.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">OPTIONS_ACCOUNTS_DEFAULT</span></code> - option dict with option defaults and Option classes</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">OPTION_CLASS_MODULES</span></code> - classes representing an on-Account Option, on special form</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">VALIDATOR_FUNC_MODULES</span></code> - (general) text validator functions, for verifying an input
is on a specific form.</p></li>
</ul>
</section>
<section id="utilities">
<h3>Utilities<a class="headerlink" href="#utilities" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">evennia</span></code> launcher now fully handles all django-admin commands, like running tests in parallel.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.utils.create.account</span></code> now also takes <code class="docutils literal notranslate"><span class="pre">tags</span></code> and <code class="docutils literal notranslate"><span class="pre">attrs</span></code> keywords.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.utils.interactive</span></code> decorator can now allow you to use yield(secs) to pause operation
in any function, not just in Command.func. Likewise, response = yield(question) will work
if the decorated function has an argument or kwarg <code class="docutils literal notranslate"><span class="pre">caller</span></code>.</p></li>
<li><p>Added many more unit tests.</p></li>
<li><p>Swap argument order of <code class="docutils literal notranslate"><span class="pre">evennia.set_trace</span></code> to <code class="docutils literal notranslate"><span class="pre">set_trace(term_size=(140,</span> <span class="pre">40),</span> <span class="pre">debugger='auto')</span></code>
since the size is more likely to be changed on the command line.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">utils.to_str(text,</span> <span class="pre">session=None)</span></code> now acts as the old <code class="docutils literal notranslate"><span class="pre">utils.to_unicode</span></code> (which was removed).
This converts to the str() type (not to a byte-string as in Evennia 0.8), trying different
encodings. This function will also force-convert any object passed to it into a string (so
<code class="docutils literal notranslate"><span class="pre">force_string</span></code> flag was removed and assumed always set).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">utils.to_bytes(text,</span> <span class="pre">session=None)</span></code> replaces the old <code class="docutils literal notranslate"><span class="pre">utils.to_str()</span></code> functionality and converts
str to bytes.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.MONITOR_HANDLER.all</span></code> now takes keyword argument <code class="docutils literal notranslate"><span class="pre">obj</span></code> to only retrieve monitors from that specific
Object (rather than all monitors in the entire handler).</p></li>
<li><p>Support adding <code class="docutils literal notranslate"><span class="pre">\f</span></code> in command doc strings to force where EvMore puts page breaks.</p></li>
<li><p>Validation Functions now added with standard API to homogenize user input validation.</p></li>
<li><p>Option Classes added to make storing user-options easier and smoother.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.VALIDATOR_CONTAINER</span></code> and <code class="docutils literal notranslate"><span class="pre">evennia.OPTION_CONTAINER</span></code> added to load these.</p></li>
</ul>
</section>
<section id="new-contribs">
<h3>New Contribs<a class="headerlink" href="#new-contribs" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Evscaperoom - a full puzzle engine for making multiplayer escape rooms in Evennia. Used to make
the entry for the MUD-Coders Guilds 2019 Game Jam with the theme “One Room”, where it ranked #1.</p></li>
<li><p>Evennia game-index client no longer a contrib - moved into server core and configured with new
setting <code class="docutils literal notranslate"><span class="pre">GAME_INDEX_ENABLED</span></code>.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">extended_room</span></code> contrib saw some backwards-incompatible refactoring:</p>
<ul>
<li><p>All commands now begin with <code class="docutils literal notranslate"><span class="pre">CmdExtendedRoom</span></code>. So before it was <code class="docutils literal notranslate"><span class="pre">CmdExtendedLook</span></code>, now
its <code class="docutils literal notranslate"><span class="pre">CmdExtendedRoomLook</span></code> etc.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">detail</span></code> command was broken out of the <code class="docutils literal notranslate"><span class="pre">desc</span></code> command and is now a new, stand-alone command
<code class="docutils literal notranslate"><span class="pre">CmdExtendedRoomDetail</span></code>. This was done to make things easier to extend and to mimic how the detail
command works in the tutorial-world.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">detail</span></code> command now also supports deleting details (like the tutorial-world version).</p></li>
<li><p>The new <code class="docutils literal notranslate"><span class="pre">ExtendedRoomCmdSet</span></code> includes all the extended-room commands and is now the recommended way
to install the extended-room contrib.</p></li>
</ul>
</li>
<li><p>Reworked <code class="docutils literal notranslate"><span class="pre">menu_login</span></code> contrib to use latest EvMenu standards. Now also supports guest logins.</p></li>
<li><p>Mail contrib was refactored to have optional Command classes <code class="docutils literal notranslate"><span class="pre">CmdMail</span></code> for OOC+IC mail (added
to the CharacterCmdSet and <code class="docutils literal notranslate"><span class="pre">CmdMailCharacter</span></code> for IC-only mailing between chars (added to CharacterCmdSet)</p></li>
</ul>
</section>
<section id="translations">
<h3>Translations<a class="headerlink" href="#translations" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Simplified chinese, courtesy of user MaxAlex.</p></li>
</ul>
</section>
</section>
<section id="evennia-0-8">
<h2>Evennia 0.8<a class="headerlink" href="#evennia-0-8" title="Link to this heading"></a></h2>
<blockquote>
<div><p>2017-2018
Released Nov 2018</p>
</div></blockquote>
<section id="requirements">
<h3>Requirements<a class="headerlink" href="#requirements" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Up requirements to Django 1.11.x, Twisted 18 and pillow 5.2.0</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">inflect</span></code> dependency for automatic pluralization of object names.</p></li>
</ul>
</section>
<section id="server-portal">
<h3>Server/Portal<a class="headerlink" href="#server-portal" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Removed <code class="docutils literal notranslate"><span class="pre">evennia_runner</span></code>, completely refactor <code class="docutils literal notranslate"><span class="pre">evennia_launcher.py</span></code> (the evennia program)
with different functionality).</p></li>
<li><p>Both Portal/Server are now stand-alone processes (easy to run as daemon)</p></li>
<li><p>Made Portal the AMP Server for starting/restarting the Server (the AMP client)</p></li>
<li><p>Dynamic logging now happens using <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">-l</span></code> rather than by interactive mode.</p></li>
<li><p>Made AMP secure against erroneous HTTP requests on the wrong port (return error messages).</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">istart</span></code> option will start/switch the Server in foreground (interactive) mode, where it logs
to terminal and can be stopped with Ctrl-C. Using <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">reload</span></code>, or reloading in-game, will
return Server to normal daemon operation.</p></li>
<li><p>For validating passwords, use safe Django password-validation backend instead of custom Evennia one.</p></li>
<li><p>Alias <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">restart</span></code> to mean the same as <code class="docutils literal notranslate"><span class="pre">evennia</span> <span class="pre">reload</span></code>.</p></li>
</ul>
</section>
<section id="prototype-changes">
<h3>Prototype changes<a class="headerlink" href="#prototype-changes" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>New OLC started from <code class="docutils literal notranslate"><span class="pre">olc</span></code> command for loading/saving/manipulating prototypes in a menu.</p></li>
<li><p>Moved evennia/utils/spawner.py into the new evennia/prototypes/ along with all new
functionality around prototypes.</p></li>
<li><p>A new form of prototype - database-stored prototypes, editable from in-game, was added. The old,
module-created prototypes remain as read-only prototypes.</p></li>
<li><p>All prototypes must have a key <code class="docutils literal notranslate"><span class="pre">prototype_key</span></code> identifying the prototype in listings. This is
checked to be server-unique. Prototypes created in a module will use the global variable name they
are assigned to if no <code class="docutils literal notranslate"><span class="pre">prototype_key</span></code> is given.</p></li>
<li><p>Prototype field <code class="docutils literal notranslate"><span class="pre">prototype</span></code> was renamed to <code class="docutils literal notranslate"><span class="pre">prototype_parent</span></code> to avoid mixing terms.</p></li>
<li><p>All prototypes must either have <code class="docutils literal notranslate"><span class="pre">typeclass</span></code> or <code class="docutils literal notranslate"><span class="pre">prototype_parent</span></code> defined. If using
<code class="docutils literal notranslate"><span class="pre">prototype_parent</span></code>, <code class="docutils literal notranslate"><span class="pre">typeclass</span></code> must be defined somewhere in the inheritance chain. This is a
change from Evennia 0.7 which allowed mixin prototypes without <code class="docutils literal notranslate"><span class="pre">typeclass</span></code>/<code class="docutils literal notranslate"><span class="pre">prototype_key</span></code>. To
make a mixin now, give it a default typeclass, like <code class="docutils literal notranslate"><span class="pre">evennia.objects.objects.DefaultObject</span></code> and just
override in the child as needed.</p></li>
<li><p>Spawning an object using a prototype will automatically assign a new tag to it, named the same as
the <code class="docutils literal notranslate"><span class="pre">prototype_key</span></code> and with the category <code class="docutils literal notranslate"><span class="pre">from_prototype</span></code>.</p></li>
<li><p>The spawn command was extended to accept a full prototype on one line.</p></li>
<li><p>The spawn command got the /save switch to save the defined prototype and its key</p></li>
<li><p>The command spawn/menu will now start an OLC (OnLine Creation) menu to load/save/edit/spawn prototypes.</p></li>
</ul>
</section>
<section id="evmenu">
<h3>EvMenu<a class="headerlink" href="#evmenu" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Added <code class="docutils literal notranslate"><span class="pre">EvMenu.helptext_formatter(helptext)</span></code> to allow custom formatting of per-node help.</p></li>
<li><p>Added <code class="docutils literal notranslate"><span class="pre">evennia.utils.evmenu.list_node</span></code> decorator for turning an EvMenu node into a multi-page listing.</p></li>
<li><p>A <code class="docutils literal notranslate"><span class="pre">goto</span></code> option callable returning None (rather than the name of the next node) will now rerun the
current node instead of failing.</p></li>
<li><p>Better error handling of in-node syntax errors.</p></li>
<li><p>Improve dedent of default text/helptext formatter. Right-strip whitespace.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">debug</span></code> option when creating menu - this turns off persistence and makes the <code class="docutils literal notranslate"><span class="pre">menudebug</span></code>
command available for examining the current menu state.</p></li>
</ul>
</section>
<section id="webclient">
<h3>Webclient<a class="headerlink" href="#webclient" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Webclient now uses a plugin system to inject new components from the html file.</p></li>
<li><p>Split-windows - divide input field into any number of horizontal/vertical panes and
assign different types of server messages to them.</p></li>
<li><p>Lots of cleanup and bug fixes.</p></li>
<li><p>Hot buttons plugin (friarzen) (disabled by default).</p></li>
</ul>
</section>
<section id="locks">
<h3>Locks<a class="headerlink" href="#locks" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>New function <code class="docutils literal notranslate"><span class="pre">evennia.locks.lockhandler.check_lockstring</span></code>. This allows for checking an object
against an arbitrary lockstring without needing the lock to be stored on an object first.</p></li>
<li><p>New function <code class="docutils literal notranslate"><span class="pre">evennia.locks.lockhandler.validate_lockstring</span></code> allows for stand-alone validation
of a lockstring.</p></li>
<li><p>New function <code class="docutils literal notranslate"><span class="pre">evennia.locks.lockhandler.get_all_lockfuncs</span></code> gives a dict {“name”: lockfunc} for
all available lock funcs. This is useful for dynamic listings.</p></li>
</ul>
</section>
<section id="utils">
<h3>Utils<a class="headerlink" href="#utils" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Added new <code class="docutils literal notranslate"><span class="pre">columnize</span></code> function for easily splitting text into multiple columns. At this point it
is not working too well with ansi-colored text however.</p></li>
<li><p>Extend the <code class="docutils literal notranslate"><span class="pre">dedent</span></code> function with a new <code class="docutils literal notranslate"><span class="pre">baseline_index</span></code> kwarg. This allows to force all lines to
the indentation given by the given line regardless of if other lines were already a 0 indentation.
This removes a problem with the original <code class="docutils literal notranslate"><span class="pre">textwrap.dedent</span></code> which will only dedent to the least
indented part of a text.</p></li>
<li><p>Added <code class="docutils literal notranslate"><span class="pre">exit_cmd</span></code> to EvMore pager, to allow for calling a command (e.g. look) when leaving the pager.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">get_all_typeclasses</span></code> will return dict <code class="docutils literal notranslate"><span class="pre">{&quot;path&quot;:</span> <span class="pre">typeclass,</span> <span class="pre">...}</span></code> for all typeclasses available
in the system. This is used by the new <code class="docutils literal notranslate"><span class="pre">&#64;typeclass/list</span></code> subcommand (useful for builders etc).</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.utils.dbserialize.deserialize(obj)</span></code> is a new helper function to <em>completely</em> disconnect
a mutable recovered from an Attribute from the database. This will convert all nested <code class="docutils literal notranslate"><span class="pre">_Saver*</span></code>
classes to their plain-Python counterparts.</p></li>
</ul>
</section>
<section id="general">
<h3>General<a class="headerlink" href="#general" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Start structuring the <code class="docutils literal notranslate"><span class="pre">CHANGELOG</span></code> to list features in more detail.</p></li>
<li><p>Docker image <code class="docutils literal notranslate"><span class="pre">evennia/evennia:develop</span></code> is now auto-built, tracking the develop branch.</p></li>
<li><p>Inflection and grouping of multiple objects in default room (an box, three boxes)</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">evennia.set_trace()</span></code> is now a shortcut for launching pdb/pudb on a line in the Evennia event loop.</p></li>
<li><p>Removed the enforcing of <code class="docutils literal notranslate"><span class="pre">MAX_NR_CHARACTERS=1</span></code> for <code class="docutils literal notranslate"><span class="pre">MULTISESSION_MODE</span></code> <code class="docutils literal notranslate"><span class="pre">0</span></code> and <code class="docutils literal notranslate"><span class="pre">1</span></code> by default.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">evennia.utils.logger.log_sec</span></code> for logging security-related messages (marked SS in log).</p></li>
</ul>
</section>
<section id="more-contribs">
<h3>More Contribs<a class="headerlink" href="#more-contribs" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p><code class="docutils literal notranslate"><span class="pre">Auditing</span></code> (Johnny): Log and filter server input/output for security purposes</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Build</span> <span class="pre">Menu</span></code> (vincent-lg): New &#64;edit command to edit object properties in a menu.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Field</span> <span class="pre">Fill</span></code> (Tim Ashley Jenkins): Wraps EvMenu for creating submittable forms.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Health</span> <span class="pre">Bar</span></code> (Tim Ashley Jenkins): Easily create colorful bars/meters.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Tree</span> <span class="pre">select</span></code> (Fluttersprite): Wrap EvMenu to create a common type of menu from a string.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">Turnbattle</span> <span class="pre">suite</span></code> (Tim Ashley Jenkins)- the old <code class="docutils literal notranslate"><span class="pre">turnbattle.py</span></code> was moved into its own
<code class="docutils literal notranslate"><span class="pre">turnbattle/</span></code> package and reworked with many different flavors of combat systems:</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tb_basic</span></code> - The basic turnbattle system, with initiative/turn order attack/defense/damage.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tb_equip</span></code> - Adds weapon and armor, wielding, accuracy modifiers.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tb_items</span></code> - Extends <code class="docutils literal notranslate"><span class="pre">tb_equip</span></code> with item use with conditions/status effects.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tb_magic</span></code> - Extends <code class="docutils literal notranslate"><span class="pre">tb_equip</span></code> with spellcasting.</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">tb_range</span></code> - Adds system for abstract positioning and movement.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">extended_room</span></code> contrib saw some backwards-incompatible refactoring:</p>
<ul>
<li><p>All commands now begin with <code class="docutils literal notranslate"><span class="pre">CmdExtendedRoom</span></code>. So before it was <code class="docutils literal notranslate"><span class="pre">CmdExtendedLook</span></code>, now
its <code class="docutils literal notranslate"><span class="pre">CmdExtendedRoomLook</span></code> etc.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">detail</span></code> command was broken out of the <code class="docutils literal notranslate"><span class="pre">desc</span></code> command and is now a new, stand-alone command
<code class="docutils literal notranslate"><span class="pre">CmdExtendedRoomDetail</span></code>. This was done to make things easier to extend and to mimic how the detail
command works in the tutorial-world.</p></li>
<li><p>The <code class="docutils literal notranslate"><span class="pre">detail</span></code> command now also supports deleting details (like the tutorial-world version).</p></li>
<li><p>The new <code class="docutils literal notranslate"><span class="pre">ExtendedRoomCmdSet</span></code> includes all the extended-room commands and is now the recommended way
to install the extended-room contrib.</p></li>
</ul>
</li>
<li><p>Updates and some cleanup of existing contribs.</p></li>
</ul>
</section>
<section id="internationalization">
<h3>Internationalization<a class="headerlink" href="#internationalization" title="Link to this heading"></a></h3>
<ul class="simple">
<li><p>Polish translation by user ogotai</p></li>
</ul>
</section>
</section>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="overview-changelogs">
<h1>Overview-Changelogs<a class="headerlink" href="#overview-changelogs" title="Link to this heading"></a></h1>
<blockquote>
<div><p>These are changelogs from a time before we used formal version numbers.</p>
</div></blockquote>
<section id="sept-2017">
<h2>Sept 2017:<a class="headerlink" href="#sept-2017" title="Link to this heading"></a></h2>
<p>Release of Evennia 0.7; upgrade to Django 1.11, change Player to
Account, rework the website template and a slew of other updates.
Info on what changed and how to migrate is found here:
<a class="reference external" href="https://groups.google.com/forum/#!msg/evennia/0JYYNGY-NfE/cDFaIwmPBAAJ">https://groups.google.com/forum/#!msg/evennia/0JYYNGY-NfE/cDFaIwmPBAAJ</a></p>
</section>
<section id="feb-2017">
<h2>Feb 2017:<a class="headerlink" href="#feb-2017" title="Link to this heading"></a></h2>
<p>New devel branch created, to lead up to Evennia 0.7.</p>
</section>
<section id="dec-2016">
<h2>Dec 2016:<a class="headerlink" href="#dec-2016" title="Link to this heading"></a></h2>
<p>Lots of bugfixes and considerable uptick in contributors. Unittest coverage
and PEP8 adoption and refactoring.</p>
</section>
<section id="may-2016">
<h2>May 2016:<a class="headerlink" href="#may-2016" title="Link to this heading"></a></h2>
<p>Evennia 0.6 with completely reworked Out-of-band system, making
the message path completely flexible and built around input/outputfuncs.
A completely new webclient, split into the evennia.js library and a
gui library, making it easier to customize.</p>
</section>
<section id="feb-2016">
<h2>Feb 2016:<a class="headerlink" href="#feb-2016" title="Link to this heading"></a></h2>
<p>Added the new EvMenu and EvMore utilities, updated EvEdit and cleaned up
a lot of the batchcommand functionality. Started work on new Devel branch.</p>
</section>
<section id="sept-2015">
<h2>Sept 2015:<a class="headerlink" href="#sept-2015" title="Link to this heading"></a></h2>
<p>Evennia 0.5. Merged devel branch, full library format implemented.</p>
</section>
<section id="feb-2015">
<h2>Feb 2015:<a class="headerlink" href="#feb-2015" title="Link to this heading"></a></h2>
<p>Development currently in devel/ branch. Moved typeclasses to use
djangos proxy functionality. Changed the Evennia folder layout to a
library format with a stand-alone launcher, in preparation for making
an evennia pypy package and using versioning. The version we will
merge with will likely be 0.5. There is also work with an expanded
testing structure and the use of threading for saves. We also now
use Travis for automatic build checking.</p>
</section>
<section id="sept-2014">
<h2>Sept 2014:<a class="headerlink" href="#sept-2014" title="Link to this heading"></a></h2>
<p>Updated to Django 1.7+ which means South dependency was dropped and
minimum Python version upped to 2.7. MULTISESSION_MODE=3 was added
and the web customization system was overhauled using the latest
functionality of django. Otherwise, mostly bug-fixes and
implementation of various smaller feature requests as we got used
to github. Many new users have appeared.</p>
</section>
<section id="jan-2014">
<h2>Jan 2014:<a class="headerlink" href="#jan-2014" title="Link to this heading"></a></h2>
<p>Moved Evennia project from Google Code to <a class="reference external" href="http://github.com/evennia/evennia">github.com/evennia/evennia</a>.</p>
</section>
<section id="nov-2013">
<h2>Nov 2013:<a class="headerlink" href="#nov-2013" title="Link to this heading"></a></h2>
<p>Moved the internal webserver into the Server and added support for
out-of-band protocols (MSDP initially). This large development push
also meant fixes and cleanups of the way attributes were handled.
Tags were added, along with proper handlers for permissions, nicks
and aliases.</p>
</section>
<section id="may-2013">
<h2>May 2013:<a class="headerlink" href="#may-2013" title="Link to this heading"></a></h2>
<p>Made players able to control more than one Character at the same
time, through the MULTISESSION_MODE=2 addition. This lead to a lot
of internal changes for the server.</p>
</section>
<section id="oct-2012">
<h2>Oct 2012:<a class="headerlink" href="#oct-2012" title="Link to this heading"></a></h2>
<p>Changed Evennia from the Modified Artistic 1.0 license to the more
standard and permissive BSD license. Lots of updates and bug fixes as
more people start to use it in new ways. Lots of new caching and
speed-ups.</p>
</section>
<section id="march-2012">
<h2>March 2012:<a class="headerlink" href="#march-2012" title="Link to this heading"></a></h2>
<p>Evennias API has changed and simplified slightly in that the
base-modules where removed from game/gamesrc. Instead admins are
encouraged to explicitly create new modules under game/gamesrc/ when
they want to implement their game - gamesrc/ is empty by default
except for the example folders that contain template files to use for
this purpose. We also added the <code class="docutils literal notranslate"><span class="pre">ev.py</span></code> file, implementing a new, flat
API. Work is ongoing to add support for mud-specific telnet
extensions, notably the MSDP and GMCP out-of-band extensions. On the
community side, evennias dev blog was started and linked on planet
Mud-dev aggregator.</p>
</section>
<section id="nov-2011">
<h2>Nov 2011:<a class="headerlink" href="#nov-2011" title="Link to this heading"></a></h2>
<p>After creating several different proof-of-concept game systems (in
contrib and privately) as well testing lots of things to make sure the
implementation is basically sound, we are declaring Evennia out of
Alpha. This can mean as much or as little as you want, admittedly -
development is still heavy but the issue list is at an all-time low
and the server is slowly stabilizing as people try different things
with it. So Beta it is!</p>
</section>
<section id="aug-2011">
<h2>Aug 2011:<a class="headerlink" href="#aug-2011" title="Link to this heading"></a></h2>
<p>Split Evennia into two processes: Portal and Server. After a lot of
work trying to get in-memory code-reloading to work, its clear this
is not Pythons forte - its impossible to catch all exceptions,
especially in asynchronous code like this. Trying to do so results in
hackish, flakey and unstable code. With the Portal-Server split, the
Server can simply be rebooted while players connected to the Portal
remain connected. The two communicates over twisteds AMP protocol.</p>
</section>
<section id="may-2011">
<h2>May 2011:<a class="headerlink" href="#may-2011" title="Link to this heading"></a></h2>
<p>The new version of Evennia, originally hitting trunk in Aug2010, is
maturing. All commands from the pre-Aug version, including IRC/IMC2
support works again. An ajax web-client was added earlier in the year,
including moving Evennia to be its own webserver (no more need for
Apache or django-testserver). Contrib-folder added.</p>
</section>
<section id="aug-2010">
<h2>Aug 2010:<a class="headerlink" href="#aug-2010" title="Link to this heading"></a></h2>
<p>Evennia-griatch-branch is ready for merging with trunk. This marks a
rather big change in the inner workings of the server, such as the
introduction of TypeClasses and Scripts (as compared to the old
ScriptParents and Events) but should hopefully bring everything
together into one consistent package as code development continues.</p>
</section>
<section id="may-2010">
<h2>May 2010:<a class="headerlink" href="#may-2010" title="Link to this heading"></a></h2>
<p>Evennia is currently being heavily revised and cleaned from
the years of gradual piecemeal development. It is thus in a very
Alpha stage at the moment. This means that old code snippets
will not be backwards compatabile. Changes touch almost all
parts of Evennias innards, from the way Objects are handled
to Events, Commands and Permissions.</p>
</section>
<section id="april-2010">
<h2>April 2010:<a class="headerlink" href="#april-2010" title="Link to this heading"></a></h2>
<p>Griatch takes over Maintainership of the Evennia project from
the original creator Greg Taylor.</p>
</section>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="older">
<h1>Older<a class="headerlink" href="#older" title="Link to this heading"></a></h1>
<p>Earlier revisions, with previous maintainer, used SVN on Google Code
and have no changelogs.</p>
<p>First commit (Evennias birthday) was November 20, 2006.</p>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo of Evennia"/>
</a></p>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</script>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Changelog</a><ul>
<li><a class="reference internal" href="#evennia-6-0-0">Evennia 6.0.0</a></li>
<li><a class="reference internal" href="#evennia-5-0-1">Evennia 5.0.1</a></li>
<li><a class="reference internal" href="#evennia-5-0-0">Evennia 5.0.0</a></li>
<li><a class="reference internal" href="#evennia-4-5-0">Evennia 4.5.0</a></li>
<li><a class="reference internal" href="#evennia-4-4-1">Evennia 4.4.1</a></li>
<li><a class="reference internal" href="#evennia-4-4-0">Evennia 4.4.0</a></li>
<li><a class="reference internal" href="#evennia-4-3-0">Evennia 4.3.0</a></li>
<li><a class="reference internal" href="#evennia-4-2-0">Evennia 4.2.0</a></li>
<li><a class="reference internal" href="#evennia-4-1-1">Evennia 4.1.1</a></li>
<li><a class="reference internal" href="#evennia-4-1-0">Evennia 4.1.0</a></li>
<li><a class="reference internal" href="#evennia-4-0-0">Evennia 4.0.0</a></li>
<li><a class="reference internal" href="#evennia-3-2-0">Evennia 3.2.0</a></li>
<li><a class="reference internal" href="#evennia-3-1-1">Evennia 3.1.1</a></li>
<li><a class="reference internal" href="#evennia-3-1-0">Evennia 3.1.0</a></li>
<li><a class="reference internal" href="#evennia-3-0-0">Evennia 3.0.0</a></li>
<li><a class="reference internal" href="#evennia-2-3-0">Evennia 2.3.0</a></li>
<li><a class="reference internal" href="#evennia-2-2-0">Evennia 2.2.0</a></li>
<li><a class="reference internal" href="#evennia-2-1-0">Evennia 2.1.0</a></li>
<li><a class="reference internal" href="#evennia-2-0-1">Evennia 2.0.1</a></li>
<li><a class="reference internal" href="#evennia-2-0-0">Evennia 2.0.0</a></li>
<li><a class="reference internal" href="#evennia-1-3-0">Evennia 1.3.0</a></li>
<li><a class="reference internal" href="#evennia-1-2-1">Evennia 1.2.1</a></li>
<li><a class="reference internal" href="#evennia-1-2-0">Evennia 1.2.0</a></li>
<li><a class="reference internal" href="#evennia-1-1-1">Evennia 1.1.1</a></li>
<li><a class="reference internal" href="#evennia-1-1-0">Evennia 1.1.0</a></li>
<li><a class="reference internal" href="#evennia-1-0-2">Evennia 1.0.2</a></li>
<li><a class="reference internal" href="#evennia-1-0-1">Evennia 1.0.1</a></li>
<li><a class="reference internal" href="#evennia-1-0-0">Evennia 1.0.0</a></li>
<li><a class="reference internal" href="#evennia-0-9-5">Evennia 0.9.5</a></li>
<li><a class="reference internal" href="#evennia-0-9">Evennia 0.9</a><ul>
<li><a class="reference internal" href="#distribution">Distribution</a></li>
<li><a class="reference internal" href="#commands">Commands</a></li>
<li><a class="reference internal" href="#web">Web</a><ul>
<li><a class="reference internal" href="#evennia-game-index">Evennia game index</a></li>
<li><a class="reference internal" href="#new-golden-layout-based-webclient-ui-friarzen">New golden-layout based Webclient UI (&#64;friarzen)</a></li>
<li><a class="reference internal" href="#web-django-standard-initiative-strikaco">Web/Django standard initiative (&#64;strikaco)</a></li>
</ul>
</li>
<li><a class="reference internal" href="#prototypes">Prototypes</a></li>
<li><a class="reference internal" href="#typeclasses">Typeclasses</a></li>
<li><a class="reference internal" href="#protocols">Protocols</a></li>
<li><a class="reference internal" href="#server">Server</a></li>
<li><a class="reference internal" href="#settings">Settings</a></li>
<li><a class="reference internal" href="#utilities">Utilities</a></li>
<li><a class="reference internal" href="#new-contribs">New Contribs</a></li>
<li><a class="reference internal" href="#translations">Translations</a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia-0-8">Evennia 0.8</a><ul>
<li><a class="reference internal" href="#requirements">Requirements</a></li>
<li><a class="reference internal" href="#server-portal">Server/Portal</a></li>
<li><a class="reference internal" href="#prototype-changes">Prototype changes</a></li>
<li><a class="reference internal" href="#evmenu">EvMenu</a></li>
<li><a class="reference internal" href="#webclient">Webclient</a></li>
<li><a class="reference internal" href="#locks">Locks</a></li>
<li><a class="reference internal" href="#utils">Utils</a></li>
<li><a class="reference internal" href="#general">General</a></li>
<li><a class="reference internal" href="#more-contribs">More Contribs</a></li>
<li><a class="reference internal" href="#internationalization">Internationalization</a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#overview-changelogs">Overview-Changelogs</a><ul>
<li><a class="reference internal" href="#sept-2017">Sept 2017:</a></li>
<li><a class="reference internal" href="#feb-2017">Feb 2017:</a></li>
<li><a class="reference internal" href="#dec-2016">Dec 2016:</a></li>
<li><a class="reference internal" href="#may-2016">May 2016:</a></li>
<li><a class="reference internal" href="#feb-2016">Feb 2016:</a></li>
<li><a class="reference internal" href="#sept-2015">Sept 2015:</a></li>
<li><a class="reference internal" href="#feb-2015">Feb 2015:</a></li>
<li><a class="reference internal" href="#sept-2014">Sept 2014:</a></li>
<li><a class="reference internal" href="#jan-2014">Jan 2014:</a></li>
<li><a class="reference internal" href="#nov-2013">Nov 2013:</a></li>
<li><a class="reference internal" href="#may-2013">May 2013:</a></li>
<li><a class="reference internal" href="#oct-2012">Oct 2012:</a></li>
<li><a class="reference internal" href="#march-2012">March 2012:</a></li>
<li><a class="reference internal" href="#nov-2011">Nov 2011:</a></li>
<li><a class="reference internal" href="#aug-2011">Aug 2011:</a></li>
<li><a class="reference internal" href="#may-2011">May 2011:</a></li>
<li><a class="reference internal" href="#aug-2010">Aug 2010:</a></li>
<li><a class="reference internal" href="#may-2010">May 2010:</a></li>
<li><a class="reference internal" href="#april-2010">April 2010:</a></li>
</ul>
</li>
<li><a class="reference internal" href="#older">Older</a></li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="Setting-up-PyCharm.html"
title="previous chapter">Setting up PyCharm with Evennia</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="Release-Notes-1.0.html"
title="next chapter">Evennia 1.0 Release Notes</a></p>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/Coding/Changelog.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>
<h3>Doc Versions</h3>
<ul>
<li>
<a href="https://www.evennia.com/docs/latest/index.html">latest (main branch)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/6.x/index.html">v6.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/5.x/index.html">v5.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/4.x/index.html">v4.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/3.x/index.html">v3.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/2.x/index.html">v2.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/1.x/index.html">v1.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/0.x/index.html">v0.9.5 branch (outdated)</a>
</li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<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="Release-Notes-1.0.html" title="Evennia 1.0 Release Notes"
>next</a> |</li>
<li class="right" >
<a href="Setting-up-PyCharm.html" title="Setting up PyCharm with Evennia"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Coding-Overview.html" >Coding and development help</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">Changelog</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2024, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>