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

350 lines
No EOL
33 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>Evennia 1.0 Release Notes &#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="Contribs" href="../Contribs/Contribs-Overview.html" />
<link rel="prev" title="Changelog" href="Changelog.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="../Contribs/Contribs-Overview.html" title="Contribs"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Changelog.html" title="Changelog"
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="">Evennia 1.0 Release Notes</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="evennia-1-0-release-notes">
<h1>Evennia 1.0 Release Notes<a class="headerlink" href="#evennia-1-0-release-notes" title="Link to this heading"></a></h1>
<p>This summarizes the changes. See the <a class="reference internal" href="Changelog.html"><span class="std std-doc">Changelog</span></a> for the full list.</p>
<ul class="simple">
<li><p>Main development now on <code class="docutils literal notranslate"><span class="pre">main</span></code> branch. <code class="docutils literal notranslate"><span class="pre">master</span></code> branch remains, but will not be updated anymore.</p></li>
</ul>
<section id="minimum-requirements">
<h2>Minimum requirements<a class="headerlink" href="#minimum-requirements" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Python 3.10 is now required minimum. Ubuntu LTS now installs with 3.10. Evennia 1.0 is also tested with Python 3.11 - this is the recommended version for Linux/Mac. Windows users may want to stay on Python 3.10 unless they are okay with installing a C++ compiler.</p></li>
<li><p>Twisted 22.10+</p></li>
<li><p>Django 4.1+</p></li>
</ul>
</section>
<section id="major-new-features">
<h2>Major new features<a class="headerlink" href="#major-new-features" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Evennia is now on PyPi and is installable as <a class="reference internal" href="../Setup/Installation.html"><span class="std std-doc">pip install evennia</span></a>.</p></li>
<li><p>A completely revamped documentation at <a class="reference external" href="https://www.evennia.com/docs/latest">https://www.evennia.com/docs/latest</a>. The old wiki and readmedocs pages will close.</p></li>
<li><p>Evennia 1.0 now has a REST API which allows you access game objects using CRUD operations GET/POST etc. See [The Web-API docs][Web-API] for more information.</p></li>
<li><p><a class="reference internal" href="../Setup/Channels-to-Discord.html"><span class="std std-doc">Evennia&lt;&gt;Discord Integration</span></a> between Evennia channels and Discord servers.</p></li>
<li><p><a class="reference internal" href="../Components/Scripts.html"><span class="std std-doc">Script</span></a> overhaul: 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. This makes Scripts even more useful as general storage entities.</p></li>
<li><p>The <a class="reference internal" href="../Components/FuncParser.html"><span class="std std-doc">FuncParser</span></a> centralizes and vastly improves all in-string function calls, such as <code class="docutils literal notranslate"><span class="pre">say</span> <span class="pre">the</span> <span class="pre">result</span> <span class="pre">is</span> <span class="pre">$eval(3</span> <span class="pre">*</span> <span class="pre">7)</span></code> and say the result <code class="docutils literal notranslate"><span class="pre">the</span> <span class="pre">result</span> <span class="pre">is</span> <span class="pre">21</span></code>. The parser completely replaces the old <code class="docutils literal notranslate"><span class="pre">parse_inlinefunc</span></code>. The new parser can handle both arguments and kwargs and are also used for in-prototype parsing as well as director stance messaging, such as using <code class="docutils literal notranslate"><span class="pre">$You()</span></code> to represent yourself in a string and having the result come out differently depending on who see you.</p></li>
<li><p><a class="reference internal" href="../Components/Channels.html"><span class="std std-doc">Channels</span></a> New Channel-System using the <code class="docutils literal notranslate"><span class="pre">channel</span></code> command and nicks. The old <code class="docutils literal notranslate"><span class="pre">ChannelHandler</span></code> was removed and the customization and operation of channels have been simplified a lot. The old command syntax commands are now available as a contrib.</p></li>
<li><p><a class="reference internal" href="../Components/Help-System.html"><span class="std std-doc">Help System</span></a> was refactored.</p>
<ul>
<li><p>A new type of <code class="docutils literal notranslate"><span class="pre">FileHelp</span></code> system allows you to add in-game help files as external Python files. This means there are three ways to add help entries in Evennia: 1) Auto-generated from Commands code. 2) Manually added to the database from the <code class="docutils literal notranslate"><span class="pre">sethelp</span></code> command in-game and 3) Created as external Python files that Evennia loads and makes available in-game.</p></li>
<li><p>We now use <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>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.</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>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>
</ul>
</li>
<li><p>Rework of the <a class="reference internal" href="../Components/Website.html"><span class="std std-doc">Web</span></a> setup, into a much more consistent structure and update to latest Django. The <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> were removed. The folders are now just <code class="docutils literal notranslate"><span class="pre">mygame/web/static</span></code> and <code class="docutils literal notranslate"><span class="pre">/templates</span></code> and handle the automatic copying of data behind the scenes. <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. The old <code class="docutils literal notranslate"><span class="pre">prosimii-css</span></code> files were removed.</p></li>
<li><p><a class="reference internal" href="../Components/Attributes.html#using-attributeproperty"><span class="std std-ref">AttributeProperty</span></a>/<a class="reference internal" href="../Components/Tags.html"><span class="std std-doc">TagProperty</span></a> along with <code class="docutils literal notranslate"><span class="pre">AliasProperty</span></code> and <code class="docutils literal notranslate"><span class="pre">PermissionProperty</span></code> to allow managing Attributes, Tags, Aliases and Permissios on typeclasses in the same way as Django fields. This dramatically reduces the need to assign Attributes/Tags in <code class="docutils literal notranslate"><span class="pre">at_create_object</span></code> hook.</p></li>
<li><p>The old <code class="docutils literal notranslate"><span class="pre">MULTISESSION_MODE</span></code> was divided into smaller settings, for better controlling what happens when a user connects, if a character should be auto-created, and how many characters they can control at the same time. See <a class="reference internal" href="../Concepts/Connection-Styles.html"><span class="std std-doc">Connection-Styles</span></a> for a detailed explanation.</p></li>
<li><p>Evennia now supports 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>
</ul>
</section>
<section id="contribs">
<h2>Contribs<a class="headerlink" href="#contribs" title="Link to this heading"></a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">contrib</span></code> folder structure was changed from 0.9.5. All contribs are now in sub-folders and organized into categories. All import paths must be updated. See <a class="reference internal" href="../Contribs/Contribs-Overview.html"><span class="std std-doc">Contribs overview</span></a>.</p>
<ul class="simple">
<li><p>New <a class="reference internal" href="../Contribs/Contrib-Traits.html"><span class="std std-doc">Traits contrib</span></a>, converted and expanded from Ainneve project. (whitenoise, Griatch)</p></li>
<li><p>New <a class="reference internal" href="../Contribs/Contrib-Crafting.html"><span class="std std-doc">Crafting contrib</span></a>, adding a full crafting subsystem (Griatch)</p></li>
<li><p>New <a class="reference internal" href="../Contribs/Contrib-XYZGrid.html"><span class="std std-doc">XYZGrid contrib</span></a>, adding x,y,z grid coordinates with in-game map and pathfinding. Controlled outside of the game via custom evennia launcher command (Griatch)</p></li>
<li><p>New <a class="reference internal" href="../Contribs/Contrib-Cooldowns.html"><span class="std std-doc">Command cooldown contrib</span></a> contrib for making it easier to manage commands using
dynamic cooldowns between uses (owllex)</p></li>
<li><p>New <a class="reference internal" href="../Contribs/Contrib-Godotwebsocket.html"><span class="std std-doc">Godot Protocol contrib</span></a> for connecting to Evennia from a client written in the open-source game engine <a class="reference external" href="https://godotengine.org/">Godot</a> (ChrisLR).</p></li>
<li><p>New <a class="reference internal" href="../Contribs/Contrib-Name-Generator.html"><span class="std std-doc">name_generator contrib</span></a> for building random real-world based or fantasy-names based on phonetic rules (InspectorCaracal)</p></li>
<li><p>New <a class="reference internal" href="../Contribs/Contrib-Buffs.html"><span class="std std-doc">Buffs contrib</span></a> for managing temporary and permanent RPG status buffs effects (tegiminis)</p></li>
<li><p>The existing <a class="reference internal" href="../Contribs/Contrib-RPSystem.html"><span class="std std-doc">RPSystem contrib</span></a> was refactored and saw a speed boost (InspectorCaracal, other contributors)</p></li>
</ul>
</section>
<section id="translations">
<h2>Translations<a class="headerlink" href="#translations" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>New Latin (la) translation (jamalainm)</p></li>
<li><p>New German (de) translation (Zhuraj)</p></li>
<li><p>Updated Italian translation (rpolve)</p></li>
<li><p>Updated Swedish translation</p></li>
</ul>
</section>
<section id="utils">
<h2>Utils<a class="headerlink" href="#utils" title="Link to this heading"></a></h2>
<ul class="simple">
<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. This is now used for the default help display.</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>Add <code class="docutils literal notranslate"><span class="pre">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><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>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>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>Made <code class="docutils literal notranslate"><span class="pre">utils.iter_to_str</span></code> format prettier strings, using Oxford comma.</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>
</ul>
</section>
<section id="locks">
<h2>Locks<a class="headerlink" href="#locks" title="Link to this heading"></a></h2>
<ul class="simple">
<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>New default for <code class="docutils literal notranslate"><span class="pre">holds()</span></code> lockfunc - changed from default of <code class="docutils literal notranslate"><span class="pre">True</span></code> to default of <code class="docutils literal notranslate"><span class="pre">False</span></code> in order to disallow dropping nonsensical things (such as things you dont hold).</p></li>
</ul>
</section>
<section id="hook-changes">
<h2>Hook changes<a class="headerlink" href="#hook-changes" title="Link to this heading"></a></h2>
<ul class="simple">
<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>New <code class="docutils literal notranslate"><span class="pre">at_pre_object_leave(obj,</span> <span class="pre">destination)</span></code> method on <code class="docutils literal notranslate"><span class="pre">Objects</span></code>.</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">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><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>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>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>Add <code class="docutils literal notranslate"><span class="pre">$pron()</span></code> and <code class="docutils literal notranslate"><span class="pre">$You()</span></code> inlinefuncs for pronoun parsing in actor-stance strings using <code class="docutils literal notranslate"><span class="pre">msg_contents</span></code>.</p></li>
</ul>
</section>
<section id="command-changes">
<h2>Command changes<a class="headerlink" href="#command-changes" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Change default multi-match syntax from <code class="docutils literal notranslate"><span class="pre">1-obj</span></code>, <code class="docutils literal notranslate"><span class="pre">2-obj</span></code> to <code class="docutils literal notranslate"><span class="pre">obj-1</span></code>, <code class="docutils literal notranslate"><span class="pre">obj-2</span></code>, which seems to be what most expect.</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>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>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>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>The <code class="docutils literal notranslate"><span class="pre">channel</span></code> commands replace all old channel-related commands, such as <code class="docutils literal notranslate"><span class="pre">cset</span></code> etc</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>
<ul>
<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>
</ul>
</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>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>
</ul>
</section>
<section id="coding-improvement-highlights">
<h2>Coding improvement highlights<a class="headerlink" href="#coding-improvement-highlights" title="Link to this heading"></a></h2>
<ul class="simple">
<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. See <a class="reference internal" href="../Components/Attributes.html"><span class="std std-doc">Attributes</span></a> documentation.</p></li>
<li><p>Add <code class="docutils literal notranslate"><span class="pre">ObjectParent</span></code> 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>New Unit test parent classes, for use both in Evenia core and in mygame. Restructured unit tests to always honor default settings.</p></li>
</ul>
</section>
<section id="other">
<h2>Other<a class="headerlink" href="#other" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p>Homogenize manager search methods to always return querysets and not sometimes querysets and sometimes lists.</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>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>Make IP throttle use Django-based cache system for optional persistence (PR by strikaco)</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.
concept of a dynamically created <code class="docutils literal notranslate"><span class="pre">ChannelCmdSet</span></code>.</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>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>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 <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>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>
</ul>
</section>
</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="#">Evennia 1.0 Release Notes</a><ul>
<li><a class="reference internal" href="#minimum-requirements">Minimum requirements</a></li>
<li><a class="reference internal" href="#major-new-features">Major new features</a></li>
<li><a class="reference internal" href="#contribs">Contribs</a></li>
<li><a class="reference internal" href="#translations">Translations</a></li>
<li><a class="reference internal" href="#utils">Utils</a></li>
<li><a class="reference internal" href="#locks">Locks</a></li>
<li><a class="reference internal" href="#hook-changes">Hook changes</a></li>
<li><a class="reference internal" href="#command-changes">Command changes</a></li>
<li><a class="reference internal" href="#coding-improvement-highlights">Coding improvement highlights</a></li>
<li><a class="reference internal" href="#other">Other</a></li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="Changelog.html"
title="previous chapter">Changelog</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="../Contribs/Contribs-Overview.html"
title="next chapter">Contribs</a></p>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/Coding/Release-Notes-1.0.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/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="../Contribs/Contribs-Overview.html" title="Contribs"
>next</a> |</li>
<li class="right" >
<a href="Changelog.html" title="Changelog"
>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="">Evennia 1.0 Release Notes</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>