Updated HTML docs.

This commit is contained in:
Evennia docbuilder action 2026-01-12 16:26:53 +00:00
parent dbae67275a
commit 76d95c253e
87 changed files with 922 additions and 850 deletions

View file

@ -49,8 +49,35 @@
<section id="main-branch">
<h2>Main branch<a class="headerlink" href="#main-branch" title="Link to this heading"></a></h2>
<ul class="simple">
<li><p><a class="reference external" href="https://github.com/evennia/evennia/issues/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/issues/3800">Doc</a>: Describe support for Telnet SSH in HAProxy documentation (holl0wstar)</p></li>
<li><p>Security dependency updates: Django &gt;5.2.8 (&lt;5.3), Django RestFramework 3.16</p></li>
<li><p><a class="reference external" href="https://github.com/evennia/evennia/pull/3599">Feat</a>: Make at_pre_cmd</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><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/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">
@ -71,10 +98,10 @@ Python versions: 3.11, 3.12, 3.13.</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. (0xDEADFED5)</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 (0xDEADFED5)</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>
@ -90,8 +117,8 @@ finds <code class="docutils literal notranslate"><span class="pre">big</span> <s
<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 (0xDEADFED5)</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 (0xDEADFED5)</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
@ -107,7 +134,7 @@ a performance hit for loading cmdsets in rooms with a lot of objects (InspectorC
<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 (0xDEADFED5)</p></li>
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,
@ -122,7 +149,7 @@ since otherwise plurals were lost (jaborsh)</p></li>
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, 0xDEADFED5, jaborsh, Problematic, BlaneWins</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">
@ -183,7 +210,7 @@ Use <code class="docutils literal notranslate"><span class="pre">4.4.1</span></c
<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 (0xDEADFED5)</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>
@ -192,7 +219,7 @@ search now partial matching all candidates, overall cleanup (InspectorCaracal)</
<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 (0xDEADFED5)</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>
@ -206,7 +233,7 @@ names (chiizyjin)</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 (0xDEADFED5)</p></li>
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
@ -230,10 +257,10 @@ was removed since last reload (Griatch)</p></li>
<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 (0xDEADFED5)</p></li>
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 (0xDEADFED5)</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
@ -243,8 +270,8 @@ 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 (0xDEADFED5)</p></li>
<li><p>[Docs]: Doc fixes (Griatch, InspectorCaracal, 0xDEADFED5)</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">

View file

@ -228,13 +228,10 @@ easier later.</p></li>
<td><p>Returns result of <a class="reference external" href="https://docs.python.org/2/library/ast.html#ast.literal_eval">literal-eval</a> of code string. Only simple python expressions.</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">$obj(&lt;query&gt;)</span></code></p></td>
<td><p>Returns object #dbref searched globally by key, tag or #dbref. Error if more than one found.</p></td>
<td><p>Returns object searched globally by key, tag or #dbref. Requires <code class="docutils literal notranslate"><span class="pre">caller</span></code> kwarg in <code class="docutils literal notranslate"><span class="pre">spawner.spawn()</span></code> for access checks. See <a class="reference internal" href="FuncParser.html#evennia-utils-funcparser-searching-callables"><span class="std std-ref">searching callables</span></a>. ($dbref(<query>) is an alias and works the same)</p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span class="pre">$objlist(&lt;query&gt;)</span></code></p></td>
<td><p>Like <code class="docutils literal notranslate"><span class="pre">$obj</span></code>, except always returns a list of zero, one or more results.</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span class="pre">$dbref(dbref)</span></code></p></td>
<td><p>Returns argument if it is formed as a #dbref (e.g. #1234), otherwise error.</p></td>
<td><p>Like <code class="docutils literal notranslate"><span class="pre">$obj</span></code>, except always returns a list of zero, one or more results. Requires <code class="docutils literal notranslate"><span class="pre">caller</span></code> kwarg in <code class="docutils literal notranslate"><span class="pre">spawner.spawn()</span></code> for access checks. See <a class="reference internal" href="FuncParser.html#evennia-utils-funcparser-searching-callables"><span class="std std-ref">searching callables</span></a>.</p></td>
</tr>
</tbody>
</table>

View file

@ -61,28 +61,28 @@ RPG, it will hold everything relevant to that PC.</p>
<p>Player Characters (PCs) are not the only “living” things in our world. We also have <em>NPCs</em>
(like shopkeepers and other friendlies) as well as <em>monsters</em> (mobs) that can attack us.</p>
<p>In code, there are a few ways we could structure this. If NPCs/monsters were just special cases of PCs, we could use a class inheritance like this:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># stuff</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># stuff </span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureNPC</span><span class="p">(</span><span class="n">EvAdventureCharacter</span><span class="p">):</span>
<span class="c1"># more stuff </span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureMob</span><span class="p">(</span><span class="n">EvAdventureNPC</span><span class="p">):</span>
<span class="c1"># more stuff </span>
<span class="c1"># more stuff</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureMob</span><span class="p">(</span><span class="n">EvAdventureNPC</span><span class="p">):</span>
<span class="c1"># more stuff</span>
</pre></div>
</div>
<p>All code we put on the <code class="docutils literal notranslate"><span class="pre">Character</span></code> class would now be inherited to <code class="docutils literal notranslate"><span class="pre">NPC</span></code> and <code class="docutils literal notranslate"><span class="pre">Mob</span></code> automatically.</p>
<p>However, in <em>Knave</em>, NPCs and particularly monsters are <em>not</em> using the same rules as PCs - they are simplified to use a Hit-Die (HD) concept. So while still character-like, NPCs should be separate from PCs like this:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># stuff </span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># stuff</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureNPC</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># separate stuff </span>
<span class="c1"># separate stuff</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureMob</span><span class="p">(</span><span class="n">EvadventureNPC</span><span class="p">):</span>
<span class="c1"># more separate stuff</span>
</pre></div>
@ -97,17 +97,17 @@ RPG, it will hold everything relevant to that PC.</p>
<li><p>All can get looted when defeated.</p></li>
</ul>
<p>We dont want to code this separately for every class but we no longer have a common parent class to put it on. So instead well use the concept of a <em>mixin</em> class:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span>
<span class="k">class</span><span class="w"> </span><span class="nc">LivingMixin</span><span class="p">:</span>
<span class="c1"># stuff common for all living things</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">LivingMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># stuff </span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">LivingMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># stuff</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureNPC</span><span class="p">(</span><span class="n">LivingMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># stuff </span>
<span class="c1"># stuff</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureMob</span><span class="p">(</span><span class="n">LivingMixin</span><span class="p">,</span> <span class="n">EvadventureNPC</span><span class="p">):</span>
<span class="c1"># more stuff</span>
</pre></div>
@ -116,7 +116,7 @@ RPG, it will hold everything relevant to that PC.</p>
<p>In <a class="reference internal" href="../../../api/evennia.contrib.tutorials.evadventure.characters.html"><span class="std std-doc">evennia/contrib/tutorials/evadventure/characters.py</span></a>
is an example of a character class structure.</p>
</aside>
<p>Above, the <code class="docutils literal notranslate"><span class="pre">LivingMixin</span></code> class cannot work on its own - it just patches the other classes with some extra functionality all living things should be able to do. This is an example of <em>multiple inheritance</em>. Its useful to know about, but one should not over-do multiple inheritance since it can also get confusing to follow the code.</p>
<p>Above, the <code class="docutils literal notranslate"><span class="pre">LivingMixin</span></code> class cannot work on its own - it just patches the other classes with some extra functionality all living things should be able to do. This is an example of <em>multiple inheritance</em>. The order of inheritance matters here - the <code class="docutils literal notranslate"><span class="pre">LivingMixin</span></code> must come <em>before</em> <code class="docutils literal notranslate"><span class="pre">DefaultCharacter</span></code> (or EvAdventureNPC etc) so that its methods are found first when called.Multiple inheritance is a powerful tool in object-oriented programming, and useful to know about. Be careful to over-use it, however. If you have too many mixins it can get hard to follow which method comes from where.</p>
</section>
<section id="living-mixin-class">
<h2><span class="section-number">3.2. </span>Living mixin class<a class="headerlink" href="#living-mixin-class" title="Link to this heading"></a></h2>
@ -124,14 +124,14 @@ is an example of a character class structure.</p>
<div><p>Create a new module <code class="docutils literal notranslate"><span class="pre">mygame/evadventure/characters.py</span></code></p>
</div></blockquote>
<p>Lets get some useful common methods all living things should have in our game.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/evadventure/characters.py </span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/evadventure/characters.py</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">.rules</span><span class="w"> </span><span class="kn">import</span> <span class="n">dice</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">.rules</span><span class="w"> </span><span class="kn">import</span> <span class="n">dice</span>
<span class="k">class</span><span class="w"> </span><span class="nc">LivingMixin</span><span class="p">:</span>
<span class="c1"># makes it easy for mobs to know to attack PCs</span>
<span class="n">is_pc</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">is_pc</span> <span class="o">=</span> <span class="kc">False</span>
<span class="nd">@property</span>
<span class="k">def</span><span class="w"> </span><span class="nf">hurt_level</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -156,49 +156,49 @@ is an example of a character class structure.</p>
<span class="k">elif</span> <span class="n">percent</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;|RCollapsed!|n&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="nf">heal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hp</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot; </span>
<span class="k">def</span><span class="w"> </span><span class="nf">heal</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">hp</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Heal hp amount of health, not allowing to exceed our max hp</span>
<span class="sd"> </span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">damage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hp_max</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">hp</span>
<span class="n">healed</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">damage</span><span class="p">,</span> <span class="n">hp</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">hp</span> <span class="o">+=</span> <span class="n">healed</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;You heal for </span><span class="si">{</span><span class="n">healed</span><span class="si">}</span><span class="s2"> HP.&quot;</span><span class="p">)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">damage</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">hp_max</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">hp</span>
<span class="n">healed</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">damage</span><span class="p">,</span> <span class="n">hp</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">hp</span> <span class="o">+=</span> <span class="n">healed</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;You heal for </span><span class="si">{</span><span class="n">healed</span><span class="si">}</span><span class="s2"> HP.&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_pay</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;When paying coins, make sure to never detract more than we have&quot;&quot;&quot;</span>
<span class="n">amount</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">amount</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">coins</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">coins</span> <span class="o">-=</span> <span class="n">amount</span>
<span class="k">return</span> <span class="n">amount</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_attacked</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attacker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_attacked</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attacker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when being attacked and combat starts.&quot;&quot;&quot;</span>
<span class="k">pass</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_damage</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">damage</span><span class="p">,</span> <span class="n">attacker</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when attacked and taking damage.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">hp</span> <span class="o">-=</span> <span class="n">damage</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_defeat</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">hp</span> <span class="o">-=</span> <span class="n">damage</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_defeat</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when defeated. By default this means death.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_death</span><span class="p">()</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_death</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when this thing dies.&quot;&quot;&quot;</span>
<span class="c1"># this will mean different things for different living things</span>
<span class="k">pass</span>
<span class="k">pass</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_do_loot</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">looted</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when looting another entity&quot;&quot;&quot;</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when looting another entity&quot;&quot;&quot;</span>
<span class="n">looted</span><span class="o">.</span><span class="n">at_looted</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_looted</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">looter</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when looted by another entity&quot;&quot;&quot;</span>
<span class="c1"># default to stealing some coins </span>
<span class="n">max_steal</span> <span class="o">=</span> <span class="n">dice</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="s2">&quot;1d10&quot;</span><span class="p">)</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Called when looted by another entity&quot;&quot;&quot;</span>
<span class="c1"># default to stealing some coins</span>
<span class="n">max_steal</span> <span class="o">=</span> <span class="n">dice</span><span class="o">.</span><span class="n">roll</span><span class="p">(</span><span class="s2">&quot;1d10&quot;</span><span class="p">)</span>
<span class="n">stolen</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_pay</span><span class="p">(</span><span class="n">max_steal</span><span class="p">)</span>
<span class="n">looter</span><span class="o">.</span><span class="n">coins</span> <span class="o">+=</span> <span class="n">stolen</span>
@ -213,28 +213,28 @@ is an example of a character class structure.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/evadventure/characters.py</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span><span class="p">,</span> <span class="n">AttributeProperty</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">.rules</span><span class="w"> </span><span class="kn">import</span> <span class="n">dice</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">.rules</span><span class="w"> </span><span class="kn">import</span> <span class="n">dice</span>
<span class="k">class</span><span class="w"> </span><span class="nc">LivingMixin</span><span class="p">:</span>
<span class="c1"># ... </span>
<span class="c1"># ...</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">LivingMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot; </span>
<span class="sd"> A character to use for EvAdventure. </span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A character to use for EvAdventure.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">is_pc</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">is_pc</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">strength</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">strength</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">dexterity</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">constitution</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">intelligence</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">wisdom</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">charisma</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">hp</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">hp</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">hp_max</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">8</span><span class="p">)</span>
<span class="n">level</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="n">xp</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="n">coins</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
@ -249,13 +249,13 @@ is an example of a character class structure.</p>
<span class="s2">&quot;$You() $conj(collapse) in a heap, alive but beaten.&quot;</span><span class="p">,</span>
<span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">heal</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">hp_max</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_death</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;We rolled &#39;dead&#39; on the death table.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span>
<span class="s2">&quot;$You() collapse in a heap, embraced by death.&quot;</span><span class="p">,</span>
<span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="c1"># TODO - go back into chargen to make a new character! </span>
<span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="c1"># TODO - go back into chargen to make a new character!</span>
</pre></div>
</div>
<p>We make an assumption about our rooms here - that they have a property <code class="docutils literal notranslate"><span class="pre">.allow_death</span></code>. We need to make a note to actually add such a property to rooms later!</p>
@ -287,26 +287,26 @@ is an example of a character class structure.</p>
<section id="backtracking">
<h3><span class="section-number">3.3.2. </span>Backtracking<a class="headerlink" href="#backtracking" title="Link to this heading"></a></h3>
<p>We make our first use of the <code class="docutils literal notranslate"><span class="pre">rules.dice</span></code> roller to roll on the death table! As you may recall, in the previous lesson, we didnt know just what to do when rolling dead on this table. Now we know - we should be calling <code class="docutils literal notranslate"><span class="pre">at_death</span></code> on the character. So lets add that where we had TODOs before:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># mygame/evadventure/rules.py </span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># mygame/evadventure/rules.py</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureRollEngine</span><span class="p">:</span>
<span class="c1"># ... </span>
<span class="k">def</span><span class="w"> </span><span class="nf">roll_death</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">character</span><span class="p">):</span>
<span class="c1"># ...</span>
<span class="k">def</span><span class="w"> </span><span class="nf">roll_death</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">character</span><span class="p">):</span>
<span class="n">ability_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">roll_random_table</span><span class="p">(</span><span class="s2">&quot;1d8&quot;</span><span class="p">,</span> <span class="n">death_table</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ability_name</span> <span class="o">==</span> <span class="s2">&quot;dead&quot;</span><span class="p">:</span>
<span class="c1"># kill the character!</span>
<span class="n">character</span><span class="o">.</span><span class="n">at_death</span><span class="p">()</span> <span class="c1"># &lt;------ TODO no more</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># ... </span>
<span class="k">if</span> <span class="n">current_ability</span> <span class="o">&lt;</span> <span class="o">-</span><span class="mi">10</span><span class="p">:</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># ...</span>
<span class="k">if</span> <span class="n">current_ability</span> <span class="o">&lt;</span> <span class="o">-</span><span class="mi">10</span><span class="p">:</span>
<span class="c1"># kill the character!</span>
<span class="n">character</span><span class="o">.</span><span class="n">at_death</span><span class="p">()</span> <span class="c1"># &lt;------- TODO no more</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># ... </span>
<span class="c1"># ...</span>
</pre></div>
</div>
</section>
@ -340,12 +340,12 @@ instead.</p>
<div><p>Create a new module <code class="docutils literal notranslate"><span class="pre">mygame/evadventure/tests/test_characters.py</span></code></p>
</div></blockquote>
<p>For testing, we just need to create a new EvAdventure character and check that calling the methods on it doesnt error out.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># mygame/evadventure/tests/test_characters.py </span>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># mygame/evadventure/tests/test_characters.py</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia.utils</span><span class="w"> </span><span class="kn">import</span> <span class="n">create</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia.utils.test_resources</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseEvenniaTest</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia.utils.test_resources</span><span class="w"> </span><span class="kn">import</span> <span class="n">BaseEvenniaTest</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">..characters</span><span class="w"> </span><span class="kn">import</span> <span class="n">EvAdventureCharacter</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">..characters</span><span class="w"> </span><span class="kn">import</span> <span class="n">EvAdventureCharacter</span>
<span class="k">class</span><span class="w"> </span><span class="nc">TestCharacters</span><span class="p">(</span><span class="n">BaseEvenniaTest</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -353,28 +353,28 @@ instead.</p>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">EvAdventureCharacter</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;testchar&quot;</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_heal</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">hp</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">hp_max</span> <span class="o">=</span> <span class="mi">8</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">hp</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">hp_max</span> <span class="o">=</span> <span class="mi">8</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">heal</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">hp</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># make sure we can&#39;t heal more than max</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">heal</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">hp</span><span class="p">,</span> <span class="mi">8</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_at_pay</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">coins</span> <span class="o">=</span> <span class="mi">100</span>
<span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">coins</span> <span class="o">=</span> <span class="mi">100</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">at_pay</span><span class="p">(</span><span class="mi">60</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="mi">60</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="mi">60</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">coins</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
<span class="c1"># can&#39;t get more coins than we have </span>
<span class="c1"># can&#39;t get more coins than we have</span>
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">at_pay</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="mi">40</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">character</span><span class="o">.</span><span class="n">coins</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="c1"># tests for other methods ... </span>
<span class="c1"># tests for other methods ...</span>
</pre></div>
</div>
@ -391,11 +391,11 @@ instead.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># mygame/evadventure/characters.py</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">DefaultCharacter</span><span class="p">,</span> <span class="n">AttributeProperty</span>
<span class="c1"># ... </span>
<span class="c1"># ...</span>
<span class="k">class</span><span class="w"> </span><span class="nc">EvAdventureCharacter</span><span class="p">(</span><span class="n">LivingMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># ... </span>
<span class="c1"># ...</span>
<span class="n">charclass</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="s2">&quot;Fighter&quot;</span><span class="p">)</span>
<span class="n">charrace</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="s2">&quot;Human&quot;</span><span class="p">)</span>
@ -410,7 +410,7 @@ instead.</p>
<h2><span class="section-number">3.7. </span>Summary<a class="headerlink" href="#summary" title="Link to this heading"></a></h2>
<p>With the <code class="docutils literal notranslate"><span class="pre">EvAdventureCharacter</span></code> class in place, we have a better understanding of how our PCs will look like under <em>Knave</em>.</p>
<p>For now, we only have bits and pieces and havent been testing this code in-game. But if you want you can swap yourself into <code class="docutils literal notranslate"><span class="pre">EvAdventureCharacter</span></code> right now. Log into your game and run the command</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>type self = evadventure.characters.EvAdventureCharacter
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>type self = evadventure.characters.EvAdventureCharacter
</pre></div>
</div>
<p>If all went well, <code class="docutils literal notranslate"><span class="pre">ex</span> <span class="pre">self</span></code> will now show your typeclass as being <code class="docutils literal notranslate"><span class="pre">EvAdventureCharacter</span></code>. Check out your strength with</p>

View file

@ -205,7 +205,7 @@ You<span class="w"> </span>use<span class="w"> </span>Potion<span class="w"> </s
<span class="k">def</span><span class="w"> </span><span class="nf">get_sides</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">combatant</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get a listing of the two &#39;sides&#39; of this combat,</span>
<span class="sd"> m the perspective of the provided combatant.</span>
<span class="sd"> from the perspective of the provided combatant.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">allow_pvp</span><span class="p">:</span>
<span class="c1"># in pvp, everyone else is an ememy</span>
@ -257,7 +257,7 @@ You<span class="w"> </span>use<span class="w"> </span>Potion<span class="w"> </s
<p>We use the <code class="docutils literal notranslate"><span class="pre">advantage/disadvantage_matrix</span></code> Attributes to track who has advantage against whom.</p>
<aside class="sidebar">
<p class="sidebar-title">.pop()</p>
<p>The Python <code class="docutils literal notranslate"><span class="pre">.pop()</span></code> method exists on lists and dicts as well as some other iterables. It pops and returns an element from the container. For a list, its either popped by index or by popping the last element. For a dict (like here), a specific key must be given to pop. If you dont provide a default value as a second element, an error will be raised if the key you try to pop is not found.</p>
<p>The Python <code class="docutils literal notranslate"><span class="pre">.pop()</span></code> method removes an element from a list or dict and returns it. For a list, it removes by index (or the last element by default). For a dict (like here), you specify which key to remove. Providing a default value as a second argument prevents an error if the key doesnt exist.</p>
</aside>
<p>In the <code class="docutils literal notranslate"><span class="pre">has</span> <span class="pre">dis/advantage</span></code> methods we <code class="docutils literal notranslate"><span class="pre">pop</span></code> the target from the matrix which will result either in the value <code class="docutils literal notranslate"><span class="pre">True</span></code> or <code class="docutils literal notranslate"><span class="pre">False</span></code> (the default value we give to <code class="docutils literal notranslate"><span class="pre">pop</span></code> if the target is not in the matrix). This means that the advantage, once gained, can only be used once.</p>
<p>We also consider everyone to have advantage against fleeing combatants.</p>
@ -498,7 +498,7 @@ This is new compared to the base handler.</p>
<span class="hll"><span class="linenos">49</span> <span class="n">surviving_combatant</span> <span class="o">=</span> <span class="kc">None</span>
</span><span class="linenos">50</span> <span class="n">allies</span><span class="p">,</span> <span class="n">enemies</span> <span class="o">=</span> <span class="p">(),</span> <span class="p">()</span>
<span class="linenos">51</span> <span class="k">else</span><span class="p">:</span>
<span class="linenos">52</span> <span class="c1"># grab a random survivor and check of they have any living enemies.</span>
<span class="linenos">52</span> <span class="c1"># grab a random survivor and check if they have any living enemies.</span>
<span class="linenos">53</span> <span class="n">surviving_combatant</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">combatants</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
<span class="linenos">54</span> <span class="n">allies</span><span class="p">,</span> <span class="n">enemies</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_sides</span><span class="p">(</span><span class="n">surviving_combatant</span><span class="p">)</span>
<span class="linenos">55</span>
@ -764,7 +764,7 @@ This is new compared to the base handler.</p>
</section>
<section id="stepping-through-the-wizard">
<h3><span class="section-number">11.4.5. </span>Stepping through the wizard<a class="headerlink" href="#stepping-through-the-wizard" title="Link to this heading"></a></h3>
<p>Our particualr menu is very symmetric - you select an option and then you will just select a series of option before you come back. So we will make another goto-function to help us easily do this. To understand, lets first show how we plan to use this:</p>
<p>Our particular menu is very symmetric - you select an option and then you will just select a series of option before you come back. So we will make another goto-function to help us easily do this. To understand, lets first show how we plan to use this:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in the base combat-node function (just shown as an example)</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">[</span>
@ -844,7 +844,7 @@ This is new compared to the base handler.</p>
<span class="c1"># ...</span>
<span class="n">_get_default_wizard_options</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_get_default_wizard_options</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;back&quot;</span><span class="p">,</span>
@ -956,7 +956,6 @@ This is new compared to the base handler.</p>
<span class="n">Ability</span><span class="o">.</span><span class="n">DEX</span><span class="p">,</span>
<span class="n">Ability</span><span class="o">.</span><span class="n">CON</span><span class="p">,</span>
<span class="n">Ability</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
<span class="n">Ability</span><span class="o">.</span><span class="n">INT</span><span class="p">,</span>
<span class="n">Ability</span><span class="o">.</span><span class="n">WIS</span><span class="p">,</span>
<span class="n">Ability</span><span class="o">.</span><span class="n">CHA</span><span class="p">,</span>
<span class="p">)</span>
@ -1001,7 +1000,7 @@ This is new compared to the base handler.</p>
</pre></div>
</div>
<p>Our <a class="reference internal" href="Beginner-Tutorial-Equipment.html"><span class="std std-doc">equipment handler</span></a> has the very useful help method <code class="docutils literal notranslate"><span class="pre">.get_usable_objects_from_backpack</span></code>. We just call this to get a list of all the items we want to choose. Otherwise this node should look pretty familiar by now.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">node_choose_wiqld_item</span></code> is very similar, except it uses <code class="docutils literal notranslate"><span class="pre">caller.equipment.get_wieldable_objects_from_backpack()</span></code> instead. Well leave the implementation of this up to the reader.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">node_choose_wield_item</span></code> is very similar, except it uses <code class="docutils literal notranslate"><span class="pre">caller.equipment.get_wieldable_objects_from_backpack()</span></code> instead. Well leave the implementation of this up to the reader.</p>
</section>
<section id="the-main-menu-node">
<h3><span class="section-number">11.4.9. </span>The main menu node<a class="headerlink" href="#the-main-menu-node" title="Link to this heading"></a></h3>
@ -1103,12 +1102,12 @@ This is new compared to the base handler.</p>
</pre></div>
</div>
<p>This starts off the <code class="docutils literal notranslate"><span class="pre">_step_wizard</span></code> for each action choice. It also lays out the <code class="docutils literal notranslate"><span class="pre">action_dict</span></code> for every action, leaving <code class="docutils literal notranslate"><span class="pre">None</span></code> values for the fields that will be set by the following nodes.</p>
<p>Note how we add the <code class="docutils literal notranslate"><span class="pre">&quot;repeat&quot;</span></code> key to some actions. Having them automatically repeat means the player dont have to insert the same action every time.</p>
<p>Note how we add the <code class="docutils literal notranslate"><span class="pre">&quot;repeat&quot;</span></code> key to some actions. Having them automatically repeat means the player doesnt have to insert the same action every time.</p>
</section>
</section>
<section id="attack-command">
<h2><span class="section-number">11.5. </span>Attack Command<a class="headerlink" href="#attack-command" title="Link to this heading"></a></h2>
<p>We will only need one single Command to run the Turnbased combat system. This is the <code class="docutils literal notranslate"><span class="pre">attack</span></code> command. Once you use it once, you will be in the menu.</p>
<p>We will only need one single command to run the turnbased combat system. This is the <code class="docutils literal notranslate"><span class="pre">attack</span></code> command. Once you use it once, you will be in the menu.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in evadventure/combat_turnbased.py</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia</span><span class="w"> </span><span class="kn">import</span> <span class="n">Command</span><span class="p">,</span> <span class="n">CmdSet</span><span class="p">,</span> <span class="n">EvMenu</span>
@ -1319,7 +1318,7 @@ This is new compared to the base handler.</p>
<p>If editing this in an IDE, you may get errors on the <code class="docutils literal notranslate"><span class="pre">player</span> <span class="pre">=</span> <span class="pre">caller</span></code> line. This is because <code class="docutils literal notranslate"><span class="pre">caller</span></code> is not defined anywhere in this file. Instead <code class="docutils literal notranslate"><span class="pre">caller</span></code> (the one running the script) is injected by the <code class="docutils literal notranslate"><span class="pre">batchcode</span></code> runner.</p>
<p>But apart from the <code class="docutils literal notranslate"><span class="pre">#</span> <span class="pre">HEADER</span></code> and <code class="docutils literal notranslate"><span class="pre">#</span> <span class="pre">CODE</span></code> specials, this just a series of normal Evennia api calls.</p>
<p>Log into the game with a developer/superuser account and run</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>&gt; batchcmd evadventure.batchscripts.turnbased_combat_demo
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>&gt; batchcode evadventure.batchscripts.turnbased_combat_demo
</pre></div>
</div>
<p>This should place you in the arena with the dummy (if not, check for errors in the output! Use <code class="docutils literal notranslate"><span class="pre">objects</span></code> and <code class="docutils literal notranslate"><span class="pre">delete</span></code> commands to list and delete objects if you need to start over.)</p>
@ -1327,7 +1326,7 @@ This is new compared to the base handler.</p>
</section>
<section id="conclusions">
<h2><span class="section-number">11.9. </span>Conclusions<a class="headerlink" href="#conclusions" title="Link to this heading"></a></h2>
<p>At this point we have coverered some ideas on how to implement both twitch- and turnbased combat systems. Along the way you have been exposed to many concepts such as classes, scripts and handlers, Commands, EvMenus and more.</p>
<p>At this point we have covered some ideas on how to implement both twitch- and turnbased combat systems. Along the way you have been exposed to many concepts such as classes, scripts and handlers, Commands, EvMenus and more.</p>
<p>Before our combat system is actually usable, we need our enemies to actually fight back. Well get to that next.</p>
</section>
</section>

View file

@ -297,7 +297,7 @@ a given combatant has advantage.</p>
<span class="linenos">37</span>
<span class="linenos">38</span><span class="sd"> &quot;&quot;&quot;</span>
<span class="linenos">39</span> <span class="k">if</span> <span class="n">action_dict</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">]</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">action_classes</span><span class="p">:</span>
<span class="linenos">40</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;This is an unkown action!&quot;</span><span class="p">)</span>
<span class="linenos">40</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;This is an unknown action!&quot;</span><span class="p">)</span>
<span class="linenos">41</span> <span class="k">return</span>
<span class="linenos">42</span>
<span class="hll"><span class="linenos">43</span> <span class="c1"># store action dict and schedule it to run in dt time</span>
@ -323,7 +323,7 @@ a given combatant has advantage.</p>
<li><p><strong>Line 43</strong>: We simply store the given action dict in the Attribute <code class="docutils literal notranslate"><span class="pre">action_dict</span></code> on the handler. Simple and effective!</p></li>
<li><p><strong>Line 44</strong>: When you enter e.g. <code class="docutils literal notranslate"><span class="pre">attack</span></code>, you expect in this type of combat to see the <code class="docutils literal notranslate"><span class="pre">attack</span></code> command repeat automatically even if you dont enter anything more. To this end we are looking for a new key in action dicts, indicating that this action should <em>repeat</em> with a certain rate (<code class="docutils literal notranslate"><span class="pre">dt</span></code>, given in seconds). We make this compatible with all action dicts by simply assuming its zero if not specified.</p></li>
</ul>
<p><a class="reference internal" href="../../../api/evennia.utils.utils.html#evennia.utils.utils.repeat" title="evennia.utils.utils.repeat"><span class="xref myst py py-func">evennia.utils.utils.repeat</span></a> and <a class="reference internal" href="../../../api/evennia.utils.utils.html#evennia.utils.utils.unrepeat" title="evennia.utils.utils.unrepeat"><span class="xref myst py py-func">evennia.utils.utils.unrepeat</span></a> are convenient shortcuts to the <a class="reference internal" href="../../../Components/TickerHandler.html"><span class="std std-doc">TickerHandler</span></a>. You tell <code class="docutils literal notranslate"><span class="pre">repeat</span></code> to call a given method/function at a certain rate. What you get back is a reference that you can then later use to un-repeat (stop the repeating) later. We make sure to store this reference (we dont care exactly how it looks, just that we need to store it) in <code class="docutils literal notranslate"><span class="pre">the</span> <span class="pre">current_ticket_ref</span></code> Attribute (<strong>Line 26</strong>).</p>
<p><a class="reference internal" href="../../../api/evennia.utils.utils.html#evennia.utils.utils.repeat" title="evennia.utils.utils.repeat"><span class="xref myst py py-func">evennia.utils.utils.repeat</span></a> and <a class="reference internal" href="../../../api/evennia.utils.utils.html#evennia.utils.utils.unrepeat" title="evennia.utils.utils.unrepeat"><span class="xref myst py py-func">evennia.utils.utils.unrepeat</span></a> are convenient shortcuts to the <a class="reference internal" href="../../../Components/TickerHandler.html"><span class="std std-doc">TickerHandler</span></a>. You tell <code class="docutils literal notranslate"><span class="pre">repeat</span></code> to call a given method/function at a certain rate. What you get back is a reference that you can then later use to un-repeat (stop the repeating) later. We make sure to store this reference (we dont care exactly how it looks, just that we need to store it) in the <code class="docutils literal notranslate"><span class="pre">current_ticker_ref</span></code> Attribute (<strong>Line 26</strong>).</p>
<ul class="simple">
<li><p><strong>Line 48</strong>: Whenever we queue a new action (it may replace an existing one) we must make sure to kill (un-repeat) any old repeats that are ongoing. Otherwise we would get old actions firing over and over and new ones starting alongside them.</p></li>
<li><p><strong>Line 49</strong>: If <code class="docutils literal notranslate"><span class="pre">dt</span></code> is set, we call <code class="docutils literal notranslate"><span class="pre">repeat</span></code> to set up a new repeat action at the given rate. We store this new reference. After <code class="docutils literal notranslate"><span class="pre">dt</span></code> seconds, the <code class="docutils literal notranslate"><span class="pre">.execute_next_action</span></code> method will fire (well create that in the next section).</p></li>
@ -340,30 +340,30 @@ a given combatant has advantage.</p>
<span class="linenos"> 7</span> <span class="c1"># ... </span>
<span class="linenos"> 8</span>
<span class="linenos"> 9</span> <span class="k">def</span><span class="w"> </span><span class="nf">execute_next_action</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="linenos">10</span><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="linenos">11</span><span class="sd"> Triggered after a delay by the command</span>
<span class="linenos">12</span><span class="sd"> &quot;&quot;&quot;</span>
<span class="linenos">13</span> <span class="n">combatant</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span>
<span class="linenos">14</span> <span class="n">action_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">action_dict</span>
<span class="hll"><span class="linenos">15</span> <span class="n">action_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">action_classes</span><span class="p">[</span><span class="n">action_dict</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">]]</span>
</span><span class="hll"><span class="linenos">16</span> <span class="n">action</span> <span class="o">=</span> <span class="n">action_class</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">combatant</span><span class="p">,</span> <span class="n">action_dict</span><span class="p">)</span>
</span><span class="linenos">17</span>
<span class="hll"><span class="linenos">18</span> <span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">can_use</span><span class="p">():</span>
</span><span class="linenos">19</span> <span class="n">action</span><span class="o">.</span><span class="n">execute</span><span class="p">()</span>
<span class="linenos">20</span> <span class="n">action</span><span class="o">.</span><span class="n">post_execute</span><span class="p">()</span>
<span class="linenos">21</span>
<span class="hll"><span class="linenos">22</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">action_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;repeat&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span>
</span><span class="linenos">23</span> <span class="c1"># not a repeating action, use the fallback (normally the original attack)</span>
<span class="linenos">24</span> <span class="bp">self</span><span class="o">.</span><span class="n">action_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fallback_action_dict</span>
<span class="linenos">25</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue_action</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fallback_action_dict</span><span class="p">)</span>
<span class="linenos">26</span>
<span class="hll"><span class="linenos">27</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_stop_combat</span><span class="p">()</span>
<span class="linenos">10</span><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="linenos">11</span><span class="sd"> Triggered after a delay by the command</span>
<span class="linenos">12</span><span class="sd"> &quot;&quot;&quot;</span>
<span class="linenos">13</span> <span class="n">combatant</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj</span>
<span class="linenos">14</span> <span class="n">action_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">action_dict</span>
<span class="hll"><span class="linenos">15</span> <span class="n">action_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">action_classes</span><span class="p">[</span><span class="n">action_dict</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">]]</span>
</span><span class="hll"><span class="linenos">16</span> <span class="n">action</span> <span class="o">=</span> <span class="n">action_class</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">combatant</span><span class="p">,</span> <span class="n">action_dict</span><span class="p">)</span>
</span><span class="linenos">17</span>
<span class="hll"><span class="linenos">18</span> <span class="k">if</span> <span class="n">action</span><span class="o">.</span><span class="n">can_use</span><span class="p">():</span>
</span><span class="linenos">19</span> <span class="n">action</span><span class="o">.</span><span class="n">execute</span><span class="p">()</span>
<span class="linenos">20</span> <span class="n">action</span><span class="o">.</span><span class="n">post_execute</span><span class="p">()</span>
<span class="linenos">21</span>
<span class="hll"><span class="linenos">22</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">action_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;repeat&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">):</span>
</span><span class="linenos">23</span> <span class="c1"># not a repeating action, use the fallback (normally the original attack)</span>
<span class="linenos">24</span> <span class="bp">self</span><span class="o">.</span><span class="n">action_dict</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">fallback_action_dict</span>
<span class="linenos">25</span> <span class="bp">self</span><span class="o">.</span><span class="n">queue_action</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fallback_action_dict</span><span class="p">)</span>
<span class="linenos">26</span>
<span class="hll"><span class="linenos">27</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_stop_combat</span><span class="p">()</span>
</span></pre></div>
</div>
<p>This is the method called after <code class="docutils literal notranslate"><span class="pre">dt</span></code> seconds in <code class="docutils literal notranslate"><span class="pre">queue_action</span></code>.</p>
<ul class="simple">
<li><p><strong>Line 5</strong>: We defined a fallback action. This is used after a one-time action (one that should not repeat) has completed.</p></li>
<li><p><strong>Line 15</strong>: We take the <code class="docutils literal notranslate"><span class="pre">'key'</span></code> from the <code class="docutils literal notranslate"><span class="pre">action-dict</span></code> and use the <code class="docutils literal notranslate"><span class="pre">action_classes</span></code> mapping to get an action class (e.g. <code class="docutils literal notranslate"><span class="pre">ACtionAttack</span></code> we defined <a class="reference internal" href="Beginner-Tutorial-Combat-Base.html#attack-action"><span class="std std-ref">here</span></a>).</p></li>
<li><p><strong>Line 15</strong>: We take the <code class="docutils literal notranslate"><span class="pre">'key'</span></code> from the <code class="docutils literal notranslate"><span class="pre">action_dict</span></code> and use the <code class="docutils literal notranslate"><span class="pre">action_classes</span></code> mapping to get an action class (e.g. <code class="docutils literal notranslate"><span class="pre">ActionAttack</span></code> we defined <a class="reference internal" href="Beginner-Tutorial-Combat-Base.html#attack-action"><span class="std std-ref">here</span></a>).</p></li>
<li><p><strong>Line 16</strong>: Here we initialize the action class with the actual current data - the combatant and the <code class="docutils literal notranslate"><span class="pre">action_dict</span></code>. This calls the <code class="docutils literal notranslate"><span class="pre">__init__</span></code> method on the class and makes the action ready to use.</p></li>
</ul>
<aside class="sidebar">
@ -402,7 +402,7 @@ a given combatant has advantage.</p>
<span class="hll"><span class="linenos">18</span> <span class="n">enemies</span> <span class="o">=</span> <span class="p">[</span><span class="n">comb</span> <span class="k">for</span> <span class="n">comb</span> <span class="ow">in</span> <span class="n">enemies</span> <span class="k">if</span> <span class="n">comb</span><span class="o">.</span><span class="n">hp</span> <span class="o">&gt;</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">comb</span><span class="o">.</span><span class="n">location</span> <span class="o">==</span> <span class="n">location</span><span class="p">]</span>
</span><span class="hll"><span class="linenos">19</span>
</span><span class="linenos">20</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">allies</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">enemies</span><span class="p">:</span>
<span class="linenos">21</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;The combat is over. Noone stands.&quot;</span><span class="p">,</span> <span class="n">broadcast</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="linenos">21</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;The combat is over. No one stands.&quot;</span><span class="p">,</span> <span class="n">broadcast</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="linenos">22</span> <span class="bp">self</span><span class="o">.</span><span class="n">stop_combat</span><span class="p">()</span>
<span class="linenos">23</span> <span class="k">return</span>
<span class="linenos">24</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">allies</span><span class="p">:</span>
@ -421,7 +421,7 @@ a given combatant has advantage.</p>
<li><p><strong>Line 12</strong>: With our <code class="docutils literal notranslate"><span class="pre">.get_sides()</span></code> method we can easily get the two sides of the conflict.</p></li>
<li><p><strong>Lines 18, 19</strong>: We get everyone still alive <em>and still in the same room</em>. The latter condition is important in case we move away from the battle - you cant hit your enemy from another room.</p></li>
</ul>
<p>In the <code class="docutils literal notranslate"><span class="pre">stop_method</span></code> well need to do a bunch of cleanup. Well hold off on implementing this until we have the Commands written out. Read on.</p>
<p>In the <code class="docutils literal notranslate"><span class="pre">stop_combat</span></code> method well need to do a bunch of cleanup. Well hold off on implementing this until we have the Commands written out. Read on.</p>
</section>
</section>
<section id="commands">
@ -448,7 +448,7 @@ a given combatant has advantage.</p>
<span class="linenos"> 9</span>
<span class="linenos">10</span><span class="k">class</span><span class="w"> </span><span class="nc">_BaseTwitchCombatCommand</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="linenos">11</span><span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="linenos">12</span><span class="sd"> Parent class for all twitch-combat commnads.</span>
<span class="linenos">12</span><span class="sd"> Parent class for all twitch-combat commands.</span>
<span class="linenos">13</span>
<span class="linenos">14</span><span class="sd"> &quot;&quot;&quot;</span>
<span class="linenos">15</span>
@ -668,7 +668,7 @@ You<span class="w"> </span><span class="o">(</span>Wounded<span class="o">)</spa
<span class="c1"># something like `boost str target`</span>
<span class="n">target</span> <span class="o">=</span> <span class="n">recipient</span> <span class="k">if</span> <span class="n">advantage</span> <span class="k">else</span> <span class="s2">&quot;me&quot;</span>
<span class="n">recipient</span> <span class="o">=</span> <span class="s2">&quot;me&quot;</span> <span class="k">if</span> <span class="n">advantage</span> <span class="k">else</span> <span class="n">recipient</span>
<span class="n">we</span> <span class="n">still</span> <span class="n">have</span> <span class="kc">None</span><span class="p">:</span><span class="n">s</span> <span class="n">at</span> <span class="n">this</span> <span class="n">point</span><span class="p">,</span> <span class="n">we</span> <span class="n">can</span><span class="s1">&#39;t continue</span>
<span class="c1"># if any values are still None at this point, we can&#39;t continue</span>
<span class="k">if</span> <span class="kc">None</span> <span class="ow">in</span> <span class="p">(</span><span class="n">stunt_type</span><span class="p">,</span> <span class="n">recipient</span><span class="p">,</span> <span class="n">target</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Both ability, recipient and target of stunt must be given.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span><span class="p">()</span>
@ -704,7 +704,7 @@ You<span class="w"> </span><span class="o">(</span>Wounded<span class="o">)</spa
</pre></div>
</div>
<p>This looks much longer, but that is only because the stunt command should understand many different input structures depending on if you are trying to create a advantage or disadvantage, and if an ally or enemy should receive the effect of the stunt.</p>
<p>This looks much longer, but that is only because the stunt command should understand many different input structures depending on if you are trying to create an advantage or disadvantage, and if an ally or enemy should receive the effect of the stunt.</p>
<p>Note the <code class="docutils literal notranslate"><span class="pre">enums.ABILITY_REVERSE_MAP</span></code> (created in the <a class="reference internal" href="Beginner-Tutorial-Utilities.html"><span class="std std-doc">Utilities lesson</span></a>) being useful to convert your input of str into <code class="docutils literal notranslate"><span class="pre">Ability.STR</span></code> needed by the action dict.</p>
<p>Once weve sorted out the string parsing, the <code class="docutils literal notranslate"><span class="pre">func</span></code> is simple - we find the target and recipient and use them to build the needed action-dict to queue.</p>
</section>
@ -777,8 +777,8 @@ You<span class="w"> </span><span class="o">(</span>Wounded<span class="o">)</spa
<span class="k">class</span><span class="w"> </span><span class="nc">CmdWield</span><span class="p">(</span><span class="n">_BaseTwitchCombatCommand</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Wield a weapon or spell-rune. You will the wield the item, </span>
<span class="sd"> swapping with any other item(s) you were wielded before.</span>
<span class="sd"> Wield a weapon or spell-rune. You wield the item,</span>
<span class="sd"> swapping with any other item(s) you were wielding before.</span>
<span class="sd"> Usage:</span>
<span class="sd"> wield &lt;weapon or spell&gt;</span>
@ -906,7 +906,7 @@ You<span class="w"> </span><span class="o">(</span>Wounded<span class="o">)</spa
<span class="c1"># ...</span>
<span class="k">class</span><span class="w"> </span><span class="nc">TestEvAdventureTwitchCombat</span><span class="p">(</span><span class="n">EvenniaCommandTestMixin</span><span class="p">)</span>
<span class="k">class</span><span class="w"> </span><span class="nc">TestEvAdventureTwitchCombat</span><span class="p">(</span><span class="n">EvenniaCommandTestMixin</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">combathandler</span> <span class="o">=</span> <span class="p">(</span>
@ -917,12 +917,12 @@ You<span class="w"> </span><span class="o">(</span>Wounded<span class="o">)</spa
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evadventure.combat_twitch.unrepeat&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evadventure.combat_twitch.repeat&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span><span class="w"> </span><span class="nf">test_hold_command</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">combat_twitch</span><span class="p">,</span> <span class="n">CmdHold</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You hold back, doing nothing&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">combat_twitch</span><span class="p">,</span> <span class="n">CmdHold</span><span class="p">(),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;You hold back, doing nothing.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">combathandler</span><span class="o">.</span><span class="n">action_dict</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;hold&quot;</span><span class="p">})</span>
</pre></div>
</div>
<p>The <code class="docutils literal notranslate"><span class="pre">EvenniaCommandTestMixin</span></code> as a few default objects, including <code class="docutils literal notranslate"><span class="pre">self.char1</span></code>, which we make use of here.</p>
<p>The <code class="docutils literal notranslate"><span class="pre">EvenniaCommandTestMixin</span></code> has a few default objects, including <code class="docutils literal notranslate"><span class="pre">self.char1</span></code>, which we make use of here.</p>
<p>The two <code class="docutils literal notranslate"><span class="pre">&#64;patch</span></code> lines are Python <a class="reference external" href="https://realpython.com/primer-on-python-decorators/">decorators</a> that patch the <code class="docutils literal notranslate"><span class="pre">test_hold_command</span></code> method. What they do is basically saying “in the following method, whenever any code tries to access <code class="docutils literal notranslate"><span class="pre">evadventure.combat_twitch.un/repeat</span></code>, just return a Mocked object instead”.</p>
<p>We do this patching as an easy way to avoid creating timers in the unit test - these timers would finish after the test finished (which includes deleting its objects) and thus fail.</p>
<p>Inside the test, we use the <code class="docutils literal notranslate"><span class="pre">self.call()</span></code> method to explicitly fire the Command (with no argument) and check that the output is what we expect. Lastly we check that the combathandler is set up correctly, having stored the action-dict on itself.</p>

View file

@ -56,15 +56,15 @@ you can run <code class="docutils literal notranslate"><span class="pre">evennia
<li><p>Linux/Unix</p></li>
<li><p>Windows (Win7, Win8, Win10, Win11)</p></li>
<li><p>Mac OSX (&gt;10.5 recommended)</p></li>
<li><p><a class="reference external" href="https://www.python.org">Python</a> (3.10, 3.11 and 3.12 are tested. 3.12 is recommended)</p></li>
<li><p><a class="reference external" href="https://twistedmatrix.com">Twisted</a> (v23.10+)</p>
<li><p><a class="reference external" href="https://www.python.org">Python</a> (3.11, 3.12 and 3.13 are tested. 3.13 is recommended)</p></li>
<li><p><a class="reference external" href="https://twistedmatrix.com">Twisted</a> (v24.11+)</p>
<ul>
<li><p><a class="reference external" href="https://www.zope.org/Products/ZopeInterface">ZopeInterface</a> (v3.0+) - usually included in Twisted packages</p></li>
<li><p>Linux/Mac users may need the <code class="docutils literal notranslate"><span class="pre">gcc</span></code> and <code class="docutils literal notranslate"><span class="pre">python-dev</span></code> packages or equivalent.</p></li>
<li><p>Windows users need <a class="reference external" href="https://aka.ms/vs/16/release/vs_buildtools.exe">MS Visual C++</a> and <em>maybe</em> <a class="reference external" href="https://pypi.python.org/pypi/pypiwin32">pypiwin32</a>.</p></li>
</ul>
</li>
<li><p><a class="reference external" href="https://www.djangoproject.com">Django</a> (v4.2+), be warned that latest dev version is usually untested with Evennia.</p></li>
<li><p><a class="reference external" href="https://www.djangoproject.com">Django</a> (v5.2+), be warned that latest dev version is usually untested with Evennia.</p></li>
<li><p><a class="reference external" href="https://git-scm.com/">GIT</a> - version control software used if you want to install the sources (but also useful to track your own code)</p>
<ul>
<li><p>Mac users can use the <a class="reference external" href="https://code.google.com/p/git-osx-installer/">git-osx-installer</a> or the <a class="reference external" href="https://git-scm.com/book/en/Getting-Started-Installing-Git#Installing-on-Mac">MacPorts version</a>.</p></li>
@ -86,7 +86,7 @@ you can run <code class="docutils literal notranslate"><span class="pre">evennia
<section id="virtualenv-setup-fails">
<h2>Virtualenv setup fails<a class="headerlink" href="#virtualenv-setup-fails" title="Link to this heading"></a></h2>
<p>When doing the <code class="docutils literal notranslate"><span class="pre">python3.x</span> <span class="pre">-m</span> <span class="pre">venv</span> <span class="pre">evenv</span></code> (where x is the python3 version) step, some users report getting an error; something like:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Error: Command &#39;[&#39;evenv&#39;, &#39;-Im&#39;, &#39;ensurepip&#39;, &#39;--upgrade&#39;, &#39;--default-pip&#39;]&#39;
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>Error: Command &#39;[&#39;evenv&#39;, &#39;-Im&#39;, &#39;ensurepip&#39;, &#39;--upgrade&#39;, &#39;--default-pip&#39;]&#39;
returned non-zero exit status 1
</pre></div>
</div>

View file

@ -46,10 +46,6 @@
<section class="tex2jax_ignore mathjax_ignore" id="installation">
<h1>Installation<a class="headerlink" href="#installation" title="Link to this heading"></a></h1>
<div class="admonition important">
<p class="admonition-title">Important</p>
<p>If you are converting an existing game from a previous Evennia version, you will need to upgrade.</p>
</div>
<p>The fastest way to install Evennia is to use the <code class="docutils literal notranslate"><span class="pre">pip</span></code> installer that comes with Python (read on). You can also <a class="reference internal" href="Installation-Git.html"><span class="std std-doc">clone Evennia from github</span></a> or use <a class="reference internal" href="Installation-Docker.html"><span class="std std-doc">docker</span></a>. Some users have also experimented with <a class="reference internal" href="Installation-Android.html"><span class="std std-doc">installing Evennia on Android</span></a>.</p>
<p>If you are converting an existing game, please follow the <a class="reference internal" href="Installation-Upgrade.html"><span class="std std-doc">upgrade instructions</span></a>.</p>
<section id="requirements">
@ -59,7 +55,7 @@
<p>Installing Evennia doesnt make anything visible online. Apart from installation and updating, you can develop your game without any internet connection if you want to.</p>
</aside>
<ul class="simple">
<li><p>Evennia requires <a class="reference external" href="https://www.python.org/downloads/">Python</a> 3.10, 3.11 or 3.12 (recommended). Any OS that supports Python should work.</p>
<li><p>Evennia requires <a class="reference external" href="https://www.python.org/downloads/">Python</a> 3.11, 3.12 or 3.13 (recommended). Any OS that supports Python should work.</p>
<ul>
<li><p><em>Windows</em>: In the installer, make sure to select <code class="docutils literal notranslate"><span class="pre">add</span> <span class="pre">python</span> <span class="pre">to</span> <span class="pre">path</span></code>. If you have multiple versions of Python installed, use <code class="docutils literal notranslate"><span class="pre">py</span></code> command instead of <code class="docutils literal notranslate"><span class="pre">python</span></code> to have Windows automatically use the latest.</p></li>
</ul>
@ -163,7 +159,7 @@ evennia migrate
<section id="register-with-the-evennia-game-index-optional">
<h2>Register with the Evennia Game Index (optional)<a class="headerlink" href="#register-with-the-evennia-game-index-optional" title="Link to this heading"></a></h2>
<p>To let the world know that you are working on a new Evennia-based game, you may register your server with the <em>Evennia game index</em> by issuing:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>evennia connections
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>evennia connections
</pre></div>
</div>
<p>Then, just follow the prompts. You dont have to be open for players to do this — simply mark your game as closed and “pre-alpha.”</p>

View file

@ -416,16 +416,16 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># The command parser module to use. See the default module for which</span>
<span class="c1"># functions it must implement</span>
<span class="n">COMMAND_PARSER</span> <span class="o">=</span> <span class="s2">&quot;evennia.commands.cmdparser.cmdparser&quot;</span>
<span class="c1"># On a multi-match when search objects or commands, the user has the</span>
<span class="c1"># On a multi-match when searching objects or commands, the user has the</span>
<span class="c1"># ability to search again with an index marker that differentiates</span>
<span class="c1"># the results. If multiple &quot;box&quot; objects</span>
<span class="c1"># are found, they can by default be separated as 1-box, 2-box. Below you</span>
<span class="c1"># can change the regular expression used. The regex must have one</span>
<span class="c1"># have two capturing groups (?P&lt;number&gt;...) and (?P&lt;name&gt;...) - the default</span>
<span class="c1"># parser expects this. It should also involve a number starting from 1.</span>
<span class="c1"># When changing this you must also update SEARCH_MULTIMATCH_TEMPLATE</span>
<span class="c1"># the results. If multiple &quot;box&quot; objects are found, they can by default</span>
<span class="c1"># be separated as box-1, box-2. Below you can change the regular expression</span>
<span class="c1"># used. The regex must have two capturing groups (?P&lt;number&gt;...) and</span>
<span class="c1"># (?P&lt;name&gt;...) - the default parser expects this. It may also have an</span>
<span class="c1"># optional (?P&lt;args&gt;...) group. It should also involve a number starting</span>
<span class="c1"># from 1. When changing this you must also update SEARCH_MULTIMATCH_TEMPLATE</span>
<span class="c1"># to properly describe the syntax.</span>
<span class="n">SEARCH_MULTIMATCH_REGEX</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;(?P&lt;name&gt;[^-]*)-(?P&lt;number&gt;[0-9]+)(?P&lt;args&gt;.*)&quot;</span>
<span class="n">SEARCH_MULTIMATCH_REGEX</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;^(?P&lt;name&gt;.*?)-(?P&lt;number&gt;[0-9]+)(?P&lt;args&gt;(?:\s.*)?)$&quot;</span>
<span class="c1"># To display multimatch errors in various listings we must display</span>
<span class="c1"># the syntax in a way that matches what SEARCH_MULTIMATCH_REGEX understand.</span>
<span class="c1"># The template will be populated with data and expects the following markup:</span>

View file

@ -1527,6 +1527,8 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sub</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="n">_sys</span><span class="o">.</span><span class="n">maxsize</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sub</span><span class="p">,</span> <span class="n">UserString</span><span class="p">):</span>
<span class="n">sub</span> <span class="o">=</span> <span class="n">sub</span><span class="o">.</span><span class="n">data</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">sub</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">isalpha</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -1595,6 +1597,8 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="n">sub</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">rindex</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">sub</span><span class="p">,</span> <span class="n">start</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">end</span><span class="o">=</span><span class="n">_sys</span><span class="o">.</span><span class="n">maxsize</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">sub</span><span class="p">,</span> <span class="n">UserString</span><span class="p">):</span>
<span class="n">sub</span> <span class="o">=</span> <span class="n">sub</span><span class="o">.</span><span class="n">data</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">rindex</span><span class="p">(</span><span class="n">sub</span><span class="p">,</span> <span class="n">start</span><span class="p">,</span> <span class="n">end</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">rjust</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>

View file

@ -1158,7 +1158,7 @@
<span class="n">warnings</span><span class="o">.</span><span class="n">_deprecated</span><span class="p">(</span>
<span class="s2">&quot;collections.abc.ByteString&quot;</span><span class="p">,</span>
<span class="n">remove</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">14</span><span class="p">),</span>
<span class="n">remove</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">17</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__new__</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">,</span> <span class="n">bases</span><span class="p">,</span> <span class="n">namespace</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
@ -1167,14 +1167,18 @@
<span class="n">warnings</span><span class="o">.</span><span class="n">_deprecated</span><span class="p">(</span>
<span class="s2">&quot;collections.abc.ByteString&quot;</span><span class="p">,</span>
<span class="n">remove</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">14</span><span class="p">),</span>
<span class="n">remove</span><span class="o">=</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">17</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__instancecheck__</span><span class="p">(</span><span class="n">instance</span><span class="p">)</span>
<span class="k">class</span><span class="w"> </span><span class="nc">ByteString</span><span class="p">(</span><span class="n">Sequence</span><span class="p">,</span> <span class="n">metaclass</span><span class="o">=</span><span class="n">_DeprecateByteStringMeta</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;This unifies bytes and bytearray.</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Deprecated ABC serving as a common supertype of ``bytes`` and ``bytearray``.</span>
<span class="sd"> XXX Should add all their methods.</span>
<span class="sd"> This ABC is scheduled for removal in Python 3.17.</span>
<span class="sd"> Use ``isinstance(obj, collections.abc.Buffer)`` to test if ``obj``</span>
<span class="sd"> implements the buffer protocol at runtime. For use in type annotations,</span>
<span class="sd"> either use ``Buffer`` or a union that explicitly specifies the types your</span>
<span class="sd"> code supports (e.g., ``bytes | bytearray | memoryview``).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="vm">__slots__</span> <span class="o">=</span> <span class="p">()</span>

View file

@ -246,7 +246,7 @@
<span class="c1"># RemovedInDjango61Warning.</span>
<span class="k">if</span> <span class="n">user</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">warnings</span><span class="o">.</span><span class="n">warn</span><span class="p">(</span>
<span class="s2">&quot;Fallback to request.user when user is None will be removed.&quot;</span><span class="p">,</span>
<span class="s2">&quot;Fallback to request.auser() when user is None will be removed.&quot;</span><span class="p">,</span>
<span class="n">RemovedInDjango61Warning</span><span class="p">,</span>
<span class="n">stacklevel</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="p">)</span>

View file

@ -95,7 +95,7 @@
<span class="k">class</span><span class="w"> </span><span class="nc">DisallowedRedirect</span><span class="p">(</span><span class="n">SuspiciousOperation</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Redirect to scheme not in allowed list&quot;&quot;&quot;</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Redirect was too long or scheme was not in allowed list.&quot;&quot;&quot;</span>
<span class="k">pass</span>

View file

@ -1826,7 +1826,7 @@
<span class="n">meta</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">_meta</span>
<span class="n">pk</span> <span class="o">=</span> <span class="n">meta</span><span class="o">.</span><span class="n">pk</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">CompositePrimaryKey</span><span class="p">):</span>
<span class="k">if</span> <span class="n">meta</span><span class="o">.</span><span class="n">proxy</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">pk</span><span class="p">,</span> <span class="n">CompositePrimaryKey</span><span class="p">):</span>
<span class="k">return</span> <span class="n">errors</span>
<span class="n">seen_columns</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>

View file

@ -463,7 +463,7 @@
<span class="n">clone</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span>
<span class="n">clone</span><span class="o">.</span><span class="n">set_source_expressions</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">expr</span><span class="o">.</span><span class="n">replace_expressions</span><span class="p">(</span><span class="n">replacements</span><span class="p">)</span> <span class="k">if</span> <span class="n">expr</span> <span class="k">else</span> <span class="kc">None</span>
<span class="kc">None</span> <span class="k">if</span> <span class="n">expr</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">expr</span><span class="o">.</span><span class="n">replace_expressions</span><span class="p">(</span><span class="n">replacements</span><span class="p">)</span>
<span class="k">for</span> <span class="n">expr</span> <span class="ow">in</span> <span class="n">source_expressions</span>
<span class="p">]</span>
<span class="p">)</span>

View file

@ -88,10 +88,14 @@
<span class="n">XOR</span> <span class="o">=</span> <span class="s2">&quot;XOR&quot;</span>
<span class="n">default</span> <span class="o">=</span> <span class="n">AND</span>
<span class="n">conditional</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">connectors</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="n">AND</span><span class="p">,</span> <span class="n">OR</span><span class="p">,</span> <span class="n">XOR</span><span class="p">)</span>
<div class="viewcode-block" id="Q.__init__">
<a class="viewcode-back" href="../../../../api/evennia.typeclasses.managers.html#evennia.commands.default.building.Q.__init__">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">_connector</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">_negated</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">if</span> <span class="n">_connector</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connectors</span><span class="p">:</span>
<span class="n">connector_reprs</span> <span class="o">=</span> <span class="s2">&quot;, &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">conn</span><span class="si">!r}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">conn</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">connectors</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;_connector must be one of </span><span class="si">{</span><span class="n">connector_reprs</span><span class="si">}</span><span class="s2">, or None.&quot;</span><span class="p">)</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span>
<span class="n">children</span><span class="o">=</span><span class="p">[</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">*</span><span class="nb">sorted</span><span class="p">(</span><span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">())],</span>
<span class="n">connector</span><span class="o">=</span><span class="n">_connector</span><span class="p">,</span>

View file

@ -71,7 +71,6 @@
<span class="kn">from</span><span class="w"> </span><span class="nn">copy</span><span class="w"> </span><span class="kn">import</span> <span class="n">copy</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">itertools</span><span class="w"> </span><span class="kn">import</span> <span class="n">chain</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">traceback</span><span class="w"> </span><span class="kn">import</span> <span class="n">format_exc</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">weakref</span><span class="w"> </span><span class="kn">import</span> <span class="n">WeakValueDictionary</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">django.conf</span><span class="w"> </span><span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">django.utils.translation</span><span class="w"> </span><span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
@ -88,7 +87,7 @@
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;cmdhandler&quot;</span><span class="p">,</span> <span class="s2">&quot;InterruptCommand&quot;</span><span class="p">)</span>
<span class="n">_GA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span>
<span class="n">_CMDSET_MERGE_CACHE</span> <span class="o">=</span> <span class="n">WeakValueDictionary</span><span class="p">()</span>
<span class="n">_CMDSET_MERGE_CACHE</span> <span class="o">=</span> <span class="p">{}</span>
<span class="c1"># tracks recursive calls by each caller</span>
<span class="c1"># to avoid infinite loops (commands calling themselves)</span>

View file

@ -292,7 +292,8 @@
<span class="k">if</span> <span class="n">cmdset_a</span><span class="o">.</span><span class="n">duplicates</span> <span class="ow">and</span> <span class="n">cmdset_a</span><span class="o">.</span><span class="n">priority</span> <span class="o">==</span> <span class="n">cmdset_b</span><span class="o">.</span><span class="n">priority</span><span class="p">:</span>
<span class="n">cmdset_c</span><span class="o">.</span><span class="n">commands</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">cmdset_b</span><span class="o">.</span><span class="n">commands</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">cmdset_c</span><span class="o">.</span><span class="n">commands</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">cmd</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmdset_b</span> <span class="k">if</span> <span class="n">cmd</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">cmdset_a</span><span class="p">])</span>
<span class="n">existing_commands</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">cmdset_a</span><span class="o">.</span><span class="n">commands</span><span class="p">)</span>
<span class="n">cmdset_c</span><span class="o">.</span><span class="n">commands</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="n">cmd</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmdset_b</span> <span class="k">if</span> <span class="n">cmd</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">existing_commands</span><span class="p">])</span>
<span class="k">return</span> <span class="n">cmdset_c</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_intersect</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmdset_a</span><span class="p">,</span> <span class="n">cmdset_b</span><span class="p">):</span>

View file

@ -2722,6 +2722,25 @@
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">multimatch</span><span class="p">,</span> <span class="s2">&quot;look&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span></div>
</div>
<div class="viewcode-block" id="TestPreCmdOutputTestable">
<a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">TestPreCmdOutputTestable</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<div class="viewcode-block" id="TestPreCmdOutputTestable.test_pre_cmd">
<a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">test_pre_cmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">class</span><span class="w"> </span><span class="nc">CmdTest</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">at_pre_cmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;This should be testable&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span><span class="w"> </span><span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;This should never be executed&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">CmdTest</span><span class="p">(),</span> <span class="s2">&quot;test&quot;</span><span class="p">,</span> <span class="s2">&quot;This should be testable&quot;</span><span class="p">)</span></div>
</div>
</pre></div>
<div class="clearer"></div>

View file

@ -42,6 +42,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">django.conf</span><span class="w"> </span><span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">django.utils.translation</span><span class="w"> </span><span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia.comms.models</span><span class="w"> </span><span class="kn">import</span> <span class="n">Msg</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">evennia.utils</span><span class="w"> </span><span class="kn">import</span> <span class="n">logger</span>
@ -50,7 +51,11 @@
<span class="c1"># the number of reports displayed on each page</span>
<span class="n">_REPORTS_PER_PAGE</span> <span class="o">=</span> <span class="mi">10</span>
<span class="n">_REPORT_STATUS_TAGS</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;closed&quot;</span><span class="p">,</span> <span class="s2">&quot;in progress&quot;</span><span class="p">)</span>
<span class="c1"># the fallback standard tags</span>
<span class="n">_REPORT_STATUS_TAGS</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;in progress&quot;</span><span class="p">,</span> <span class="s2">&quot;rejected&quot;</span><span class="p">)</span>
<span class="c1"># the tag, used to mark a report as &#39;closed&#39;</span>
<span class="n">_REPORT_STATUS_CLOSED_TAG</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;closed&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">settings</span><span class="p">,</span> <span class="s2">&quot;INGAME_REPORT_STATUS_TAGS&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">INGAME_REPORT_STATUS_TAGS</span><span class="p">):</span>
<span class="n">_REPORT_STATUS_TAGS</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">INGAME_REPORT_STATUS_TAGS</span>
@ -58,6 +63,9 @@
<span class="n">logger</span><span class="o">.</span><span class="n">log_warn</span><span class="p">(</span>
<span class="s2">&quot;The &#39;INGAME_REPORT_STATUS_TAGS&#39; setting must be an iterable of strings; falling back to defaults.&quot;</span>
<span class="p">)</span>
<span class="c1"># add the &#39;closed&#39; tag to the tupel of tags</span>
<span class="k">if</span> <span class="n">_REPORT_STATUS_CLOSED_TAG</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">_REPORT_STATUS_TAGS</span><span class="p">:</span>
<span class="n">_REPORT_STATUS_TAGS</span> <span class="o">=</span> <span class="n">_REPORT_STATUS_TAGS</span> <span class="o">+</span> <span class="p">(</span><span class="n">_REPORT_STATUS_CLOSED_TAG</span><span class="p">,)</span>
<div class="viewcode-block" id="menunode_list_reports">
@ -65,30 +73,36 @@
<span class="k">def</span><span class="w"> </span><span class="nf">menunode_list_reports</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Paginates and lists out reports for the provided hub&quot;&quot;&quot;</span>
<span class="n">hub</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_evmenu</span><span class="o">.</span><span class="n">hub</span>
<span class="n">hub_name</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">hub</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">title</span><span class="p">()</span>
<span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Managing </span><span class="si">{</span><span class="n">hub_name</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">hub_name</span> <span class="o">=</span> <span class="n">hub</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;_&quot;</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">title</span><span class="p">()</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span>
<span class="n">hub_name</span> <span class="o">+=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Reports&quot;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Managing </span><span class="si">{hub_name}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hub_name</span><span class="o">=</span><span class="n">hub_name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">report_list</span> <span class="o">:=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_evmenu</span><span class="p">,</span> <span class="s2">&quot;report_list&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)):</span>
<span class="n">report_list</span> <span class="o">=</span> <span class="n">Msg</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">search_message</span><span class="p">(</span><span class="n">receiver</span><span class="o">=</span><span class="n">hub</span><span class="p">)</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;db_date_created&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_evmenu</span><span class="o">.</span><span class="n">report_list</span> <span class="o">=</span> <span class="n">report_list</span>
<span class="c1"># allow the menu to filter print-outs by status</span>
<span class="k">if</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;status&quot;</span><span class="p">):</span>
<span class="n">status</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;status&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">status</span><span class="p">:</span>
<span class="n">new_report_list</span> <span class="o">=</span> <span class="n">report_list</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;status&quot;</span><span class="p">])</span>
<span class="c1"># we don&#39;t filter reports if there are no reports under that filter</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_report_list</span><span class="p">:</span>
<span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;(No </span><span class="si">{</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;status&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> reports)</span><span class="se">\n</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;(No </span><span class="si">{status}</span><span class="s2"> reports)</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;</span><span class="si">{text}</span><span class="s2">&quot;</span>
<span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="n">text</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">report_list</span> <span class="o">=</span> <span class="n">new_report_list</span>
<span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Managing </span><span class="si">{</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;status&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">hub_name</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Managing </span><span class="si">{status}</span><span class="s2"> </span><span class="si">{hub_name}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">hub_name</span><span class="o">=</span><span class="n">hub_name</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">report_list</span> <span class="o">=</span> <span class="n">report_list</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="s2">&quot;closed&quot;</span><span class="p">)</span>
<span class="c1"># use the &#39;closed&#39; tag lowered, to be sure, the translation included no upper case chars</span>
<span class="n">report_list</span> <span class="o">=</span> <span class="n">report_list</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="n">_REPORT_STATUS_CLOSED_TAG</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
<span class="c1"># filter by lock access</span>
<span class="n">report_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">msg</span> <span class="k">for</span> <span class="n">msg</span> <span class="ow">in</span> <span class="n">report_list</span> <span class="k">if</span> <span class="n">msg</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;read&quot;</span><span class="p">)]</span>
<span class="c1"># this will catch both no reports filed and no permissions</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">report_list</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;There is nothing there for you to manage.&quot;</span><span class="p">,</span> <span class="p">{}</span>
<span class="k">return</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;No open </span><span class="si">{hub_name}</span><span class="s2"> at the moment.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hub_name</span><span class="o">=</span><span class="n">hub_name</span><span class="p">),</span> <span class="p">{}</span>
<span class="n">page</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;page&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">start</span> <span class="o">=</span> <span class="n">page</span> <span class="o">*</span> <span class="n">_REPORTS_PER_PAGE</span>
@ -104,14 +118,19 @@
<span class="p">]</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;|uF|nilter by status&quot;</span><span class="p">,</span> <span class="s2">&quot;filter&quot;</span><span class="p">,</span> <span class="s2">&quot;status&quot;</span><span class="p">,</span> <span class="s2">&quot;f&quot;</span><span class="p">),</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;|uF|nilter by status&quot;</span><span class="p">),</span> <span class="s2">&quot;filter&quot;</span><span class="p">,</span> <span class="s2">&quot;status&quot;</span><span class="p">,</span> <span class="s2">&quot;f&quot;</span><span class="p">),</span>
<span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="s2">&quot;menunode_choose_filter&quot;</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">start</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|uP|nrevious </span><span class="si">{</span><span class="n">_REPORTS_PER_PAGE</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;previous&quot;</span><span class="p">,</span> <span class="s2">&quot;prev&quot;</span><span class="p">,</span> <span class="s2">&quot;p&quot;</span><span class="p">),</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;|uP|nrevious </span><span class="si">{_REPORTS_PER_PAGE}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">_REPORTS_PER_PAGE</span><span class="p">,</span> <span class="n">_REPORTS_PER_PAGE</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;previous&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;prev&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;p&quot;</span><span class="p">)</span>
<span class="p">),</span>
<span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="s2">&quot;menunode_list_reports&quot;</span><span class="p">,</span>
<span class="p">{</span><span class="s2">&quot;page&quot;</span><span class="p">:</span> <span class="nb">max</span><span class="p">(</span><span class="n">start</span> <span class="o">-</span> <span class="n">_REPORTS_PER_PAGE</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">//</span> <span class="n">_REPORTS_PER_PAGE</span><span class="p">},</span>
@ -121,7 +140,11 @@
<span class="k">if</span> <span class="n">end</span> <span class="o">&lt;</span> <span class="nb">len</span><span class="p">(</span><span class="n">report_list</span><span class="p">):</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|uN|next </span><span class="si">{</span><span class="n">_REPORTS_PER_PAGE</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;next&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">),</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;|uN|next </span><span class="si">{_REPORTS_PER_PAGE}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">_REPORTS_PER_PAGE</span><span class="o">=</span><span class="n">_REPORTS_PER_PAGE</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;next&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;n&quot;</span><span class="p">)</span>
<span class="p">),</span>
<span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="s2">&quot;menunode_list_reports&quot;</span><span class="p">,</span>
<span class="p">{</span><span class="s2">&quot;page&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">_REPORTS_PER_PAGE</span><span class="p">)</span> <span class="o">//</span> <span class="n">_REPORTS_PER_PAGE</span><span class="p">},</span>
@ -136,14 +159,14 @@
<a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_reports.menu.html#evennia.contrib.base_systems.ingame_reports.menu.menunode_choose_filter">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">menunode_choose_filter</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;apply or clear a status filter to the main report view&quot;&quot;&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="s2">&quot;View which reports?&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;View which reports?&quot;</span><span class="p">)</span>
<span class="c1"># options for all the possible statuses</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="n">status</span><span class="p">,</span> <span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;menunode_list_reports&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;status&quot;</span><span class="p">:</span> <span class="n">status</span><span class="p">})}</span>
<span class="k">for</span> <span class="n">status</span> <span class="ow">in</span> <span class="n">_REPORT_STATUS_TAGS</span>
<span class="p">]</span>
<span class="c1"># no filter</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;All open reports&quot;</span><span class="p">,</span> <span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="s2">&quot;menunode_list_reports&quot;</span><span class="p">})</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;All open reports&quot;</span><span class="p">),</span> <span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="s2">&quot;menunode_list_reports&quot;</span><span class="p">})</span>
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span></div>
@ -164,20 +187,42 @@
<span class="sd"> Read out the full report text and targets, and allow for changing the report&#39;s status.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">receivers</span> <span class="o">=</span> <span class="p">[</span><span class="n">r</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">report</span><span class="o">.</span><span class="n">receivers</span> <span class="k">if</span> <span class="n">r</span> <span class="o">!=</span> <span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">_evmenu</span><span class="o">.</span><span class="n">hub</span><span class="p">]</span>
<span class="n">text</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
<span class="si">{</span><span class="n">report</span><span class="o">.</span><span class="n">message</span><span class="si">}</span>
<span class="si">{</span><span class="n">datetime_format</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">date_created</span><span class="p">)</span><span class="si">}</span><span class="s2"> by </span><span class="si">{</span><span class="n">iter_to_str</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">senders</span><span class="p">)</span><span class="si">}{</span><span class="s1">&#39; about &#39;</span><span class="o">+</span><span class="n">iter_to_str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span><span class="w"> </span><span class="k">for</span><span class="w"> </span><span class="n">r</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">receivers</span><span class="p">)</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">receivers</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;&#39;</span><span class="si">}</span>
<span class="si">{</span><span class="n">iter_to_str</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">())</span><span class="si">}</span><span class="s2">&quot;&quot;&quot;</span>
<span class="n">message</span> <span class="o">=</span> <span class="n">report</span><span class="o">.</span><span class="n">message</span>
<span class="n">timestamp</span> <span class="o">=</span> <span class="n">datetime_format</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">date_created</span><span class="p">)</span>
<span class="n">senders_str</span> <span class="o">=</span> <span class="n">iter_to_str</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">senders</span><span class="p">)</span>
<span class="n">tags_str</span> <span class="o">=</span> <span class="n">iter_to_str</span><span class="p">(</span><span class="n">report</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="k">if</span> <span class="n">receivers</span><span class="p">:</span>
<span class="n">receivers_str</span> <span class="o">=</span> <span class="n">iter_to_str</span><span class="p">(</span><span class="n">r</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">receivers</span><span class="p">)</span>
<span class="n">about_clause</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot; about </span><span class="si">{receivers}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">receivers</span><span class="o">=</span><span class="n">receivers_str</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">about_clause</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{message}</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;</span><span class="si">{timestamp}</span><span class="s2"> by </span><span class="si">{senders}{about_clause}</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;</span><span class="si">{tags}</span><span class="s2">&quot;</span>
<span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">message</span><span class="o">=</span><span class="n">message</span><span class="p">,</span>
<span class="n">timestamp</span><span class="o">=</span><span class="n">timestamp</span><span class="p">,</span>
<span class="n">senders</span><span class="o">=</span><span class="n">senders_str</span><span class="p">,</span>
<span class="n">about_clause</span><span class="o">=</span><span class="n">about_clause</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags_str</span>
<span class="p">)</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">_REPORT_STATUS_TAGS</span><span class="p">:</span>
<span class="k">if</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">report</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
<span class="n">desc</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Unmark as </span><span class="si">{tag}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tag</span><span class="o">=</span><span class="n">tag</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">desc</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Mark as </span><span class="si">{tag}</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">tag</span><span class="o">=</span><span class="n">tag</span><span class="p">)</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="s1">&#39;Unmark&#39;</span><span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="n">tag</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="n">report</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">()</span><span class="w"> </span><span class="k">else</span><span class="w"> </span><span class="s1">&#39;Mark&#39;</span><span class="w"> </span><span class="si">}</span><span class="s2"> as </span><span class="si">{</span><span class="n">tag</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="n">desc</span><span class="p">,</span>
<span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="p">(</span><span class="n">_report_toggle_tag</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;report&quot;</span><span class="p">:</span> <span class="n">report</span><span class="p">,</span> <span class="s2">&quot;tag&quot;</span><span class="p">:</span> <span class="n">tag</span><span class="p">}),</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;Manage another report&quot;</span><span class="p">,</span> <span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="s2">&quot;menunode_list_reports&quot;</span><span class="p">})</span>
<span class="n">options</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Manage another report&quot;</span><span class="p">),</span> <span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="s2">&quot;menunode_list_reports&quot;</span><span class="p">})</span>
<span class="k">return</span> <span class="n">text</span><span class="p">,</span> <span class="n">options</span></div>
</pre></div>

View file

@ -37,7 +37,7 @@
<div class="body" role="main">
<h1>Source code for evennia.contrib.utils.random_string_generator.random_string_generator</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span></span><span class="sa">r</span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Pseudo-random generator and registry</span>
<span class="sd">Evennia contribution - Vincent Le Goff 2017</span>

View file

@ -761,6 +761,11 @@
<span class="s2">&quot;or the setting is malformed.&quot;</span>
<span class="p">)</span>
<span class="c1"># db_key has NOT NULL constraint, convert None to empty string.</span>
<span class="c1"># at_first_save() will convert empty string to #dbref</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># create new instance</span>
<span class="n">new_object</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>

View file

@ -234,7 +234,7 @@
<span class="s2">&quot;prototype-</span><span class="si">{}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hashlib</span><span class="o">.</span><span class="n">md5</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()),</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">hexdigest</span><span class="p">()[:</span><span class="mi">7</span><span class="p">]),</span>
<span class="p">)</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;prototype_tags&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_tags&quot;</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;prototype_locks&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_lock&quot;</span><span class="p">,</span> <span class="n">_PROTOTYPE_FALLBACK_LOCK</span><span class="p">)</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;prototype_locks&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_locks&quot;</span><span class="p">,</span> <span class="n">_PROTOTYPE_FALLBACK_LOCK</span><span class="p">)</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;prototype_desc&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_desc&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;typeclass&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">prototype</span> <span class="ow">and</span> <span class="s2">&quot;prototype_parent&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">prototype</span><span class="p">:</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;typeclass&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span>

View file

@ -715,7 +715,8 @@
<span class="sd"> if it&#39;s not set in the prototype. With `exact=True`, all un-specified properties of the</span>
<span class="sd"> objects will be removed if they exist. This will lead to a more accurate 1:1 correlation</span>
<span class="sd"> between the object and the prototype but is usually impractical.</span>
<span class="sd"> caller (Object or Account, optional): This may be used by protfuncs to do permission checks.</span>
<span class="sd"> caller (Object or Account, optional): The object requesting the update. Required when using</span>
<span class="sd"> protofuncs that perform searches. For example ($obj, $objlist, $dbref, $search).</span>
<span class="sd"> protfunc_raise_errors (bool): Have protfuncs raise explicit errors if malformed/not found.</span>
<span class="sd"> This is highly recommended.</span>
<span class="sd"> Returns:</span>
@ -866,7 +867,7 @@
<span class="n">changed</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">obj</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">if</span> <span class="n">spawn_hook</span> <span class="o">:=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;at_object_post_spawn&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span>
<span class="n">spawn_hook</span><span class="p">(</span><span class="n">prototype</span><span class="o">=</span><span class="n">prototype</span><span class="p">)</span>
<span class="n">spawn_hook</span><span class="p">(</span><span class="n">prototype</span><span class="o">=</span><span class="n">new_prototype</span><span class="p">)</span>
<span class="k">return</span> <span class="n">changed</span></div>
@ -958,7 +959,8 @@
<span class="sd"> prototype_key (will be used to find the prototype) or a full prototype</span>
<span class="sd"> dictionary. These will be batched-spawned as one object each.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> caller (Object or Account, optional): This may be used by protfuncs to do access checks.</span>
<span class="sd"> caller (Object or Account, optional): The object requesting the update. Required when using</span>
<span class="sd"> protofuncs that perform searches. For example ($obj, $objlist, $dbref, $search).</span>
<span class="sd"> prototype_modules (str or list): A python-path to a prototype</span>
<span class="sd"> module, or a list of such paths. These will be used to build</span>
<span class="sd"> the global protparents dictionary accessible by the input</span>

View file

@ -59,7 +59,7 @@
<span class="kn">import</span><span class="w"> </span><span class="nn">signal</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">sys</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">argparse</span><span class="w"> </span><span class="kn">import</span> <span class="n">ArgumentParser</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">distutils.version</span><span class="w"> </span><span class="kn">import</span> <span class="n">LooseVersion</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">packaging.version</span><span class="w"> </span><span class="kn">import</span> <span class="n">Version</span>
<span class="kn">from</span><span class="w"> </span><span class="nn">subprocess</span><span class="w"> </span><span class="kn">import</span> <span class="n">STDOUT</span><span class="p">,</span> <span class="n">CalledProcessError</span><span class="p">,</span> <span class="n">Popen</span><span class="p">,</span> <span class="n">call</span><span class="p">,</span> <span class="n">check_output</span>
<span class="kn">import</span><span class="w"> </span><span class="nn">django</span>
@ -1372,9 +1372,9 @@
<span class="k">def</span><span class="w"> </span><span class="nf">_test_python_version</span><span class="p">():</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Test Python version&quot;&quot;&quot;</span>
<span class="n">python_version</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">sys</span><span class="o">.</span><span class="n">version_info</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="nb">int</span><span class="p">))</span>
<span class="n">python_curr</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">python_version</span><span class="p">)</span>
<span class="n">python_min</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">PYTHON_MIN</span><span class="p">)</span>
<span class="n">python_max</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">PYTHON_MAX_TESTED</span><span class="p">)</span>
<span class="n">python_curr</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">python_version</span><span class="p">)</span>
<span class="n">python_min</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">PYTHON_MIN</span><span class="p">)</span>
<span class="n">python_max</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">PYTHON_MAX_TESTED</span><span class="p">)</span>
<span class="k">if</span> <span class="n">python_curr</span> <span class="o">&lt;</span> <span class="n">python_min</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">ERROR_PYTHON_VERSION</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">python_version</span><span class="o">=</span><span class="n">python_version</span><span class="p">,</span> <span class="n">python_min</span><span class="o">=</span><span class="n">PYTHON_MIN</span><span class="p">))</span>
@ -1398,8 +1398,8 @@
<span class="k">return</span> <span class="kc">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">twisted_version</span> <span class="o">=</span> <span class="n">twisted</span><span class="o">.</span><span class="n">version</span><span class="o">.</span><span class="n">short</span><span class="p">()</span>
<span class="n">twisted_curr</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">twisted_version</span><span class="p">)</span>
<span class="n">twisted_min</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">TWISTED_MIN</span><span class="p">)</span>
<span class="n">twisted_curr</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">twisted_version</span><span class="p">)</span>
<span class="n">twisted_min</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">TWISTED_MIN</span><span class="p">)</span>
<span class="k">if</span> <span class="n">twisted_curr</span> <span class="o">&lt;</span> <span class="n">twisted_min</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span>
@ -1420,11 +1420,9 @@
<span class="k">return</span> <span class="kc">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">django_version</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">num</span><span class="p">)</span> <span class="k">for</span> <span class="n">num</span> <span class="ow">in</span> <span class="n">django</span><span class="o">.</span><span class="n">VERSION</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="nb">int</span><span class="p">))</span>
<span class="c1"># only the main version (1.5, not 1.5.4.0)</span>
<span class="n">django_version</span> <span class="o">=</span> <span class="s2">&quot;.&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">django_version</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">)[:</span><span class="mi">2</span><span class="p">])</span>
<span class="n">django_curr</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">django_version</span><span class="p">)</span>
<span class="n">django_min</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">DJANGO_MIN</span><span class="p">)</span>
<span class="n">django_max</span> <span class="o">=</span> <span class="n">LooseVersion</span><span class="p">(</span><span class="n">DJANGO_MAX_TESTED</span><span class="p">)</span>
<span class="n">django_curr</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">django_version</span><span class="p">)</span>
<span class="n">django_min</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">DJANGO_MIN</span><span class="p">)</span>
<span class="n">django_max</span> <span class="o">=</span> <span class="n">Version</span><span class="p">(</span><span class="n">DJANGO_MAX_TESTED</span><span class="p">)</span>
<span class="k">if</span> <span class="n">django_curr</span> <span class="o">&lt;</span> <span class="n">django_min</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span>

View file

@ -784,12 +784,17 @@
<span class="k">def</span><span class="w"> </span><span class="nf">wrapped</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">replacement_string</span> <span class="o">=</span> <span class="n">_query_super</span><span class="p">(</span><span class="n">func_name</span><span class="p">)(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="c1"># Convert to sets for O(1) membership testing</span>
<span class="n">code_indexes_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">)</span>
<span class="n">char_indexes_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">)</span>
<span class="n">to_string</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">char_counter</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">:</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">code_indexes_set</span><span class="p">:</span>
<span class="n">to_string</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">index</span><span class="p">])</span>
<span class="k">elif</span> <span class="n">index</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">char_indexes_set</span><span class="p">:</span>
<span class="n">to_string</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">replacement_string</span><span class="p">[</span><span class="n">char_counter</span><span class="p">])</span>
<span class="n">char_counter</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">return</span> <span class="n">ANSIString</span><span class="p">(</span>
@ -1120,10 +1125,12 @@
<span class="k">return</span> <span class="n">ANSIString</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">last_mark</span> <span class="o">=</span> <span class="n">slice_indexes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># Check between the slice intervals for escape sequences.</span>
<span class="c1"># Convert to set for O(1) membership testing</span>
<span class="n">code_indexes_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">)</span>
<span class="n">i</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">slice_indexes</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">last_mark</span><span class="p">,</span> <span class="n">i</span><span class="p">):</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">:</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">code_indexes_set</span><span class="p">:</span>
<span class="n">string</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
<span class="n">last_mark</span> <span class="o">=</span> <span class="n">i</span>
<span class="k">try</span><span class="p">:</span>
@ -1157,15 +1164,24 @@
<span class="n">append_tail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_interleving</span><span class="p">(</span><span class="n">item</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">append_tail</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">item</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">[</span><span class="n">item</span><span class="p">]</span>
<span class="n">clean</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">item</span><span class="p">]</span>
<span class="n">result</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># Get the character they&#39;re after, and replay all escape sequences</span>
<span class="c1"># previous to it.</span>
<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">item</span> <span class="o">+</span> <span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">:</span>
<span class="n">result</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
<span class="n">char_pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">[</span><span class="n">item</span><span class="p">]</span>
<span class="n">clean</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">char_pos</span><span class="p">]</span>
<span class="n">code_indexes_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">)</span>
<span class="c1"># Only collect codes after the last reset to avoid accumulating</span>
<span class="c1"># cancelled codes when slicing</span>
<span class="n">start_pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_find_last_reset_before</span><span class="p">(</span><span class="n">char_pos</span><span class="p">)</span>
<span class="n">result_chars</span> <span class="o">=</span> <span class="p">[</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
<span class="k">for</span> <span class="n">index</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">start_pos</span><span class="p">,</span> <span class="n">char_pos</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">code_indexes_set</span>
<span class="p">]</span>
<span class="n">result</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result_chars</span><span class="p">)</span>
<span class="k">return</span> <span class="n">ANSIString</span><span class="p">(</span><span class="n">result</span> <span class="o">+</span> <span class="n">clean</span> <span class="o">+</span> <span class="n">append_tail</span><span class="p">,</span> <span class="n">decoded</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<div class="viewcode-block" id="ANSIString.clean">
@ -1254,9 +1270,28 @@
<span class="c1"># Plain string, no ANSI codes.</span>
<span class="k">return</span> <span class="n">code_indexes</span><span class="p">,</span> <span class="nb">list</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">)))</span>
<span class="c1"># all indexes not occupied by ansi codes are normal characters</span>
<span class="n">char_indexes</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">))</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">code_indexes</span><span class="p">]</span>
<span class="n">code_indexes_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">code_indexes</span><span class="p">)</span>
<span class="n">char_indexes</span> <span class="o">=</span> <span class="p">[</span><span class="n">i</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">))</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">code_indexes_set</span><span class="p">]</span>
<span class="k">return</span> <span class="n">code_indexes</span><span class="p">,</span> <span class="n">char_indexes</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_find_last_reset_before</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">pos</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Find the end position of the last ANSI reset sequence</span>
<span class="sd"> that occurs before the given position.</span>
<span class="sd"> Args:</span>
<span class="sd"> pos (int): Position in _raw_string to search before.</span>
<span class="sd"> Returns:</span>
<span class="sd"> int: The index immediately after the last reset sequence,</span>
<span class="sd"> or 0 if no reset was found before pos.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">reset_pos</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="o">.</span><span class="n">rfind</span><span class="p">(</span><span class="n">ANSI_NORMAL</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="n">pos</span><span class="p">)</span>
<span class="k">if</span> <span class="n">reset_pos</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">return</span> <span class="mi">0</span>
<span class="k">return</span> <span class="n">reset_pos</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">ANSI_NORMAL</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_get_interleving</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">index</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get the code characters from the given slice end to the next</span>
@ -1267,12 +1302,17 @@
<span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">[</span><span class="n">index</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># Convert to sets for O(1) membership testing</span>
<span class="n">char_indexes_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">)</span>
<span class="n">code_indexes_set</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">)</span>
<span class="n">s</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="n">index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">:</span>
<span class="k">if</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">char_indexes_set</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">elif</span> <span class="n">index</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_code_indexes</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">index</span> <span class="ow">in</span> <span class="n">code_indexes_set</span><span class="p">:</span>
<span class="n">s</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">index</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">break</span>

View file

@ -276,6 +276,9 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">text</span> <span class="ow">and</span> <span class="n">decoderr</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">UnicodeDecodeError</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">decoderr</span><span class="p">),</span> <span class="nb">bytearray</span><span class="p">(),</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">text</span><span class="p">:</span>
<span class="n">text</span> <span class="o">=</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\r\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\r</span><span class="s2">&quot;</span><span class="p">,</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">text</span></div>

View file

@ -170,7 +170,7 @@
<span class="n">more</span><span class="o">.</span><span class="n">page_quit</span><span class="p">()</span>
<span class="c1"># re-fire the command (in new cmdset)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span><span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span></div>
</div>

View file

@ -1256,12 +1256,12 @@
<span class="sd"> - &quot;$search(beach, category=outdoors, type=tag)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># clean out funcparser-specific kwargs so we can use the kwargs for</span>
<span class="c1"># clean out funcparser and protfunc_parser-specific kwargs so we can use the kwargs for</span>
<span class="c1"># searching</span>
<span class="n">search_kwargs</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">value</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;funcparser&quot;</span><span class="p">,</span> <span class="s2">&quot;raise_errors&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">,</span> <span class="s2">&quot;return_list&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;funcparser&quot;</span><span class="p">,</span> <span class="s2">&quot;raise_errors&quot;</span><span class="p">,</span> <span class="s2">&quot;type&quot;</span><span class="p">,</span> <span class="s2">&quot;return_list&quot;</span><span class="p">,</span> <span class="s2">&quot;prototype&quot;</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">return_list</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;return_list&quot;</span><span class="p">,</span> <span class="s2">&quot;false&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;true&quot;</span>

View file

@ -518,7 +518,6 @@
<span class="n">cmdobj</span><span class="o">.</span><span class="n">raw_string</span> <span class="o">=</span> <span class="n">raw_string</span> <span class="k">if</span> <span class="n">raw_string</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">input_args</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span> <span class="ow">or</span> <span class="p">(</span><span class="n">caller</span> <span class="k">if</span> <span class="n">caller</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="p">)</span>
<span class="n">inputs</span> <span class="o">=</span> <span class="n">inputs</span> <span class="ow">or</span> <span class="p">[]</span>
<span class="c1"># set up receivers</span>
<span class="n">receiver_mapping</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
@ -543,42 +542,40 @@
<span class="c1"># cmdhandler. This will have the mocked .msg be called as part of the</span>
<span class="c1"># execution. Mocks remembers what was sent to them so we will be able</span>
<span class="c1"># to retrieve what was sent later.</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">at_pre_cmd</span><span class="p">():</span>
<span class="k">return</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">func</span><span class="p">()</span>
<span class="c1"># handle func&#39;s with yield in them (making them generators)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ret</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">GeneratorType</span><span class="p">):</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">inputs</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">if</span> <span class="n">inputs</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">inp</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># this mimics a user&#39;s reply to a prompt</span>
<span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">at_pre_cmd</span><span class="p">():</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">cmdobj</span><span class="o">.</span><span class="n">func</span><span class="p">()</span>
<span class="c1"># handle func&#39;s with yield in them (making them generators)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">ret</span><span class="p">,</span> <span class="n">types</span><span class="o">.</span><span class="n">GeneratorType</span><span class="p">):</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">inputs</span><span class="o">.</span><span class="n">pop</span><span class="p">()</span> <span class="k">if</span> <span class="n">inputs</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">inp</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># this mimics a user&#39;s reply to a prompt</span>
<span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
<span class="nb">next</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># non-input yield, like yield(10). We don&#39;t pause</span>
<span class="c1"># but fire it immediately.</span>
<span class="nb">next</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="n">ret</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># non-input yield, like yield(10). We don&#39;t pause</span>
<span class="c1"># but fire it immediately.</span>
<span class="nb">next</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">break</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">at_post_cmd</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">except</span> <span class="n">InterruptCommand</span><span class="p">:</span>
<span class="k">pass</span>
<span class="n">cmdobj</span><span class="o">.</span><span class="n">at_post_cmd</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">StopIteration</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">except</span> <span class="n">InterruptCommand</span><span class="p">:</span>
<span class="k">pass</span>
<span class="k">for</span> <span class="n">inp</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">:</span>
<span class="c1"># if there are any inputs left, we may have a non-generator</span>
<span class="c1"># input to handle (get_input/ask_yes_no that uses a separate</span>
<span class="c1"># cmdset rather than a yield</span>
<span class="n">caller</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">for</span> <span class="n">inp</span> <span class="ow">in</span> <span class="n">inputs</span><span class="p">:</span>
<span class="c1"># if there are any inputs left, we may have a non-generator</span>
<span class="c1"># input to handle (get_input/ask_yes_no that uses a separate</span>
<span class="c1"># cmdset rather than a yield</span>
<span class="n">caller</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="c1"># At this point the mocked .msg methods on each receiver will have</span>
<span class="c1"># stored all calls made to them (that&#39;s a basic function of the Mock</span>

View file

@ -360,7 +360,7 @@
<span class="n">urls</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get_urls</span><span class="p">()</span>
<span class="n">custom_urls</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">path</span><span class="p">(</span>
<span class="s2">&quot;account-object-link/&lt;int:pk&gt;&quot;</span><span class="p">,</span>
<span class="s2">&quot;account-object-link/&lt;int:object_id&gt;&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">admin_site</span><span class="o">.</span><span class="n">admin_view</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">link_object_to_account</span><span class="p">),</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;object-account-link&quot;</span><span class="p">,</span>
<span class="p">)</span>

View file

@ -241,18 +241,18 @@
<span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">subTest</span><span class="p">(</span><span class="n">msg</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Testing </span><span class="si">{</span><span class="n">view</span><span class="o">.</span><span class="n">view_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">):</span>
<span class="n">view_url</span> <span class="o">=</span> <span class="n">reverse</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;api:</span><span class="si">{</span><span class="n">view</span><span class="o">.</span><span class="n">view_name</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;pk&quot;</span><span class="p">:</span> <span class="n">view</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">})</span>
<span class="c1"># check failures from not sending required fields</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">view_url</span><span class="p">)</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">view_url</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span> <span class="mi">400</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Response was: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="c1"># test adding an attribute</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">view</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">some_test_attr</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">attr_name</span> <span class="o">=</span> <span class="s2">&quot;some_test_attr&quot;</span>
<span class="n">attr_data</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;db_key&quot;</span><span class="p">:</span> <span class="n">attr_name</span><span class="p">,</span> <span class="s2">&quot;db_value&quot;</span><span class="p">:</span> <span class="s2">&quot;test_value&quot;</span><span class="p">}</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">view_url</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">attr_data</span><span class="p">)</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">view_url</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">attr_data</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Response was: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">view</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">attr_name</span><span class="p">),</span> <span class="s2">&quot;test_value&quot;</span><span class="p">)</span>
<span class="c1"># now test removing it</span>
<span class="n">attr_data</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;db_key&quot;</span><span class="p">:</span> <span class="n">attr_name</span><span class="p">}</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">post</span><span class="p">(</span><span class="n">view_url</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">attr_data</span><span class="p">)</span>
<span class="n">response</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="n">view_url</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">attr_data</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">response</span><span class="o">.</span><span class="n">status_code</span><span class="p">,</span> <span class="mi">200</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;Response was: </span><span class="si">{</span><span class="n">response</span><span class="o">.</span><span class="n">data</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">view</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">attr_name</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span></div>
</div>

View file

@ -107,7 +107,7 @@
<div class="viewcode-block" id="TypeclassViewSetMixin.set_attribute">
<a class="viewcode-back" href="../../../../api/evennia.web.api.views.html#evennia.web.api.views.TypeclassViewSetMixin.set_attribute">[docs]</a>
<span class="nd">@action</span><span class="p">(</span><span class="n">detail</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;put&quot;</span><span class="p">,</span> <span class="s2">&quot;post&quot;</span><span class="p">])</span>
<span class="nd">@action</span><span class="p">(</span><span class="n">detail</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">methods</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;put&quot;</span><span class="p">])</span>
<span class="k">def</span><span class="w"> </span><span class="nf">set_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">request</span><span class="p">,</span> <span class="n">pk</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This action will set an attribute if the db_value is defined, or remove</span>

View file

@ -988,8 +988,7 @@
<span class="k">class</span><span class="w"> </span><span class="nc">singledispatchmethod</span><span class="p">:</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Single-dispatch generic method descriptor.</span>
<span class="sd"> Supports wrapping existing descriptors and handles non-descriptor</span>
<span class="sd"> callables as instance methods.</span>
<span class="sd"> Supports wrapping existing descriptors.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">func</span><span class="p">):</span>

View file

@ -1197,7 +1197,7 @@
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Provide a tokeneater() method to detect the end of a code block.&quot;&quot;&quot;</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">indent</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">islambda</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">singleline</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">started</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">passline</span> <span class="o">=</span> <span class="kc">False</span>
<span class="bp">self</span><span class="o">.</span><span class="n">indecorator</span> <span class="o">=</span> <span class="kc">False</span>
@ -1206,19 +1206,24 @@
<span class="k">def</span><span class="w"> </span><span class="nf">tokeneater</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">type</span><span class="p">,</span> <span class="n">token</span><span class="p">,</span> <span class="n">srowcol</span><span class="p">,</span> <span class="n">erowcol</span><span class="p">,</span> <span class="n">line</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">started</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">indecorator</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">type</span> <span class="ow">in</span> <span class="p">(</span><span class="n">tokenize</span><span class="o">.</span><span class="n">INDENT</span><span class="p">,</span> <span class="n">tokenize</span><span class="o">.</span><span class="n">COMMENT</span><span class="p">,</span> <span class="n">tokenize</span><span class="o">.</span><span class="n">NL</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">elif</span> <span class="n">token</span> <span class="o">==</span> <span class="s2">&quot;async&quot;</span><span class="p">:</span>
<span class="k">pass</span>
<span class="c1"># skip any decorators</span>
<span class="k">if</span> <span class="n">token</span> <span class="o">==</span> <span class="s2">&quot;@&quot;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">token</span> <span class="o">==</span> <span class="s2">&quot;@&quot;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">indecorator</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># look for the first &quot;def&quot;, &quot;class&quot; or &quot;lambda&quot;</span>
<span class="k">elif</span> <span class="n">token</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;def&quot;</span><span class="p">,</span> <span class="s2">&quot;class&quot;</span><span class="p">,</span> <span class="s2">&quot;lambda&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">token</span> <span class="o">==</span> <span class="s2">&quot;lambda&quot;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">islambda</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># For &quot;def&quot; and &quot;class&quot; scan to the end of the block.</span>
<span class="c1"># For &quot;lambda&quot; and generator expression scan to</span>
<span class="c1"># the end of the logical line.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">singleline</span> <span class="o">=</span> <span class="n">token</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;def&quot;</span><span class="p">,</span> <span class="s2">&quot;class&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">started</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">passline</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># skip to the end of the line</span>
<span class="k">elif</span> <span class="nb">type</span> <span class="o">==</span> <span class="n">tokenize</span><span class="o">.</span><span class="n">NEWLINE</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">passline</span> <span class="o">=</span> <span class="kc">False</span> <span class="c1"># stop skipping when a NEWLINE is seen</span>
<span class="bp">self</span><span class="o">.</span><span class="n">last</span> <span class="o">=</span> <span class="n">srowcol</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">islambda</span><span class="p">:</span> <span class="c1"># lambdas always end at the first NEWLINE</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">singleline</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">EndOfBlock</span>
<span class="c1"># hitting a NEWLINE when in a decorator without args</span>
<span class="c1"># ends the decorator</span>
@ -2053,17 +2058,21 @@
<span class="k">if</span> <span class="n">meth</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="c1"># NOTE: The meth may wraps a non-user-defined callable.</span>
<span class="c1"># In this case, we treat the meth as non-user-defined callable too.</span>
<span class="c1"># (e.g. cls.__new__ generated by @warnings.deprecated)</span>
<span class="n">unwrapped_meth</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">follow_wrapper_chains</span><span class="p">:</span>
<span class="n">meth</span> <span class="o">=</span> <span class="n">unwrap</span><span class="p">(</span><span class="n">meth</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="p">(</span><span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="s2">&quot;__signature__&quot;</span><span class="p">)</span>
<span class="n">unwrapped_meth</span> <span class="o">=</span> <span class="n">unwrap</span><span class="p">(</span><span class="n">meth</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="p">(</span><span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="s2">&quot;__signature__&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">_signature_is_builtin</span><span class="p">(</span><span class="n">m</span><span class="p">)))</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">meth</span><span class="p">,</span> <span class="n">_NonUserDefinedCallables</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">meth</span><span class="p">,</span> <span class="n">_NonUserDefinedCallables</span><span class="p">)</span>
<span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">unwrapped_meth</span><span class="p">,</span> <span class="n">_NonUserDefinedCallables</span><span class="p">)):</span>
<span class="c1"># Once &#39;__signature__&#39; will be added to &#39;C&#39;-level</span>
<span class="c1"># callables, this check won&#39;t be necessary</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">method_name</span> <span class="o">!=</span> <span class="s1">&#39;__new__&#39;</span><span class="p">:</span>
<span class="n">meth</span> <span class="o">=</span> <span class="n">_descriptor_get</span><span class="p">(</span><span class="n">meth</span><span class="p">,</span> <span class="bp">cls</span><span class="p">)</span>
<span class="k">if</span> <span class="n">follow_wrapper_chains</span><span class="p">:</span>
<span class="n">meth</span> <span class="o">=</span> <span class="n">unwrap</span><span class="p">(</span><span class="n">meth</span><span class="p">,</span> <span class="n">stop</span><span class="o">=</span><span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="s2">&quot;__signature__&quot;</span><span class="p">))</span>
<span class="k">return</span> <span class="n">meth</span>

View file

@ -569,7 +569,7 @@
<span class="n">colorize</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;colorize&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="n">row</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">filename</span> <span class="o">=</span> <span class="n">frame_summary</span><span class="o">.</span><span class="n">filename</span>
<span class="k">if</span> <span class="n">frame_summary</span><span class="o">.</span><span class="n">filename</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;&lt;stdin&gt;-&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">frame_summary</span><span class="o">.</span><span class="n">filename</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;&lt;stdin-&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="n">frame_summary</span><span class="o">.</span><span class="n">filename</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="s1">&#39;&gt;&#39;</span><span class="p">):</span>
<span class="n">filename</span> <span class="o">=</span> <span class="s2">&quot;&lt;stdin&gt;&quot;</span>
<span class="k">if</span> <span class="n">colorize</span><span class="p">:</span>
<span class="n">row</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s1">&#39; File </span><span class="si">{}</span><span class="s1">&quot;</span><span class="si">{}</span><span class="s1">&quot;</span><span class="si">{}</span><span class="s1">, line </span><span class="si">{}{}{}</span><span class="s1">, in </span><span class="si">{}{}{}</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>

View file

@ -127,8 +127,6 @@
<span class="fm">__hash__</span> <span class="o">=</span> <span class="n">ref</span><span class="o">.</span><span class="fm">__hash__</span>
<div class="viewcode-block" id="WeakValueDictionary">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">WeakValueDictionary</span><span class="p">(</span><span class="n">_collections_abc</span><span class="o">.</span><span class="n">MutableMapping</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Mapping class that references values weakly.</span>
@ -141,8 +139,6 @@
<span class="c1"># objects are unwrapped on the way out, and we always wrap on the</span>
<span class="c1"># way in).</span>
<div class="viewcode-block" id="WeakValueDictionary.__init__">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.__init__">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="o">=</span><span class="p">(),</span> <span class="o">/</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">):</span>
<span class="k">def</span><span class="w"> </span><span class="nf">remove</span><span class="p">(</span><span class="n">wr</span><span class="p">,</span> <span class="n">selfref</span><span class="o">=</span><span class="n">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">),</span> <span class="n">_atomic_removal</span><span class="o">=</span><span class="n">_remove_dead_weakref</span><span class="p">):</span>
<span class="bp">self</span> <span class="o">=</span> <span class="n">selfref</span><span class="p">()</span>
@ -158,8 +154,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_iterating</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">other</span><span class="p">,</span> <span class="o">**</span><span class="n">kw</span><span class="p">)</span>
<span class="k">def</span><span class="w"> </span><span class="nf">_commit_removals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_atomic_removal</span><span class="o">=</span><span class="n">_remove_dead_weakref</span><span class="p">):</span>
<span class="n">pop</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="o">.</span><span class="n">pop</span>
@ -209,8 +204,6 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">KeyedRef</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_remove</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<div class="viewcode-block" id="WeakValueDictionary.copy">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.copy">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
@ -220,8 +213,7 @@
<span class="n">o</span> <span class="o">=</span> <span class="n">wr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">o</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">new</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">o</span>
<span class="k">return</span> <span class="n">new</span></div>
<span class="k">return</span> <span class="n">new</span>
<span class="n">__copy__</span> <span class="o">=</span> <span class="n">copy</span>
@ -237,8 +229,6 @@
<span class="n">new</span><span class="p">[</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">memo</span><span class="p">)]</span> <span class="o">=</span> <span class="n">o</span>
<span class="k">return</span> <span class="n">new</span>
<div class="viewcode-block" id="WeakValueDictionary.get">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.get">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
@ -252,11 +242,8 @@
<span class="c1"># This should only happen</span>
<span class="k">return</span> <span class="n">default</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">o</span></div>
<span class="k">return</span> <span class="n">o</span>
<div class="viewcode-block" id="WeakValueDictionary.items">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.items">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">items</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
@ -264,24 +251,18 @@
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">wr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">wr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">v</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span></div>
<span class="k">yield</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span>
<div class="viewcode-block" id="WeakValueDictionary.keys">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.keys">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
<span class="k">with</span> <span class="n">_IterationGuard</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">wr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">wr</span><span class="p">()</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">k</span></div>
<span class="k">yield</span> <span class="n">k</span>
<span class="fm">__iter__</span> <span class="o">=</span> <span class="n">keys</span>
<div class="viewcode-block" id="WeakValueDictionary.itervaluerefs">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">itervaluerefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Return an iterator that yields the weak references to the values.</span>
@ -295,11 +276,8 @@
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
<span class="k">with</span> <span class="n">_IterationGuard</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">()</span></div>
<span class="k">yield from</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
<div class="viewcode-block" id="WeakValueDictionary.values">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.values">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
@ -307,11 +285,8 @@
<span class="k">for</span> <span class="n">wr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">wr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">yield</span> <span class="n">obj</span></div>
<span class="k">yield</span> <span class="n">obj</span>
<div class="viewcode-block" id="WeakValueDictionary.popitem">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.popitem">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">popitem</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
@ -319,11 +294,8 @@
<span class="n">key</span><span class="p">,</span> <span class="n">wr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">popitem</span><span class="p">()</span>
<span class="n">o</span> <span class="o">=</span> <span class="n">wr</span><span class="p">()</span>
<span class="k">if</span> <span class="n">o</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">return</span> <span class="n">key</span><span class="p">,</span> <span class="n">o</span></div>
<span class="k">return</span> <span class="n">key</span><span class="p">,</span> <span class="n">o</span>
<div class="viewcode-block" id="WeakValueDictionary.pop">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.pop">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
@ -337,11 +309,8 @@
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">o</span></div>
<span class="k">return</span> <span class="n">o</span>
<div class="viewcode-block" id="WeakValueDictionary.setdefault">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.setdefault">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">setdefault</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">o</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]()</span>
@ -353,11 +322,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">KeyedRef</span><span class="p">(</span><span class="n">default</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_remove</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<span class="k">return</span> <span class="n">default</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">o</span></div>
<span class="k">return</span> <span class="n">o</span>
<div class="viewcode-block" id="WeakValueDictionary.update">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.update">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">/</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
@ -368,11 +334,8 @@
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">other</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">d</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">KeyedRef</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_remove</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">d</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">KeyedRef</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_remove</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span></div>
<span class="n">d</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">KeyedRef</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_remove</span><span class="p">,</span> <span class="n">key</span><span class="p">)</span>
<div class="viewcode-block" id="WeakValueDictionary.valuerefs">
<a class="viewcode-back" href="../api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.valuerefs">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">valuerefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Return a list of weak references to the values.</span>
@ -385,8 +348,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pending_removals</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_commit_removals</span><span class="p">()</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">())</span></div>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="k">def</span><span class="w"> </span><span class="fm">__ior__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
@ -405,8 +367,7 @@
<span class="n">c</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="n">c</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<span class="k">return</span> <span class="n">c</span>
<span class="k">return</span> <span class="bp">NotImplemented</span></div>
<span class="k">return</span> <span class="bp">NotImplemented</span>
<span class="k">class</span><span class="w"> </span><span class="nc">KeyedRef</span><span class="p">(</span><span class="n">ref</span><span class="p">):</span>
@ -431,7 +392,7 @@
<div class="viewcode-block" id="WeakKeyDictionary">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary">[docs]</a>
<span class="k">class</span><span class="w"> </span><span class="nc">WeakKeyDictionary</span><span class="p">(</span><span class="n">_collections_abc</span><span class="o">.</span><span class="n">MutableMapping</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot; Mapping class that references keys weakly.</span>
@ -444,7 +405,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="WeakKeyDictionary.__init__">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.__init__">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.__init__">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">dict</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">def</span><span class="w"> </span><span class="nf">remove</span><span class="p">(</span><span class="n">k</span><span class="p">,</span> <span class="n">selfref</span><span class="o">=</span><span class="n">ref</span><span class="p">(</span><span class="bp">self</span><span class="p">)):</span>
@ -510,7 +471,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">[</span><span class="n">ref</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_remove</span><span class="p">)]</span> <span class="o">=</span> <span class="n">value</span>
<div class="viewcode-block" id="WeakKeyDictionary.copy">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.copy">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.copy">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">copy</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">new</span> <span class="o">=</span> <span class="n">WeakKeyDictionary</span><span class="p">()</span>
<span class="k">with</span> <span class="n">_IterationGuard</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -534,7 +495,7 @@
<span class="k">return</span> <span class="n">new</span>
<div class="viewcode-block" id="WeakKeyDictionary.get">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.get">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.get">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">ref</span><span class="p">(</span><span class="n">key</span><span class="p">),</span><span class="n">default</span><span class="p">)</span></div>
@ -547,7 +508,7 @@
<span class="k">return</span> <span class="n">wr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span>
<div class="viewcode-block" id="WeakKeyDictionary.items">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.items">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.items">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">items</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">with</span> <span class="n">_IterationGuard</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">wr</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
@ -557,7 +518,7 @@
<div class="viewcode-block" id="WeakKeyDictionary.keys">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.keys">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.keys">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">keys</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">with</span> <span class="n">_IterationGuard</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">wr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="p">:</span>
@ -569,7 +530,7 @@
<span class="fm">__iter__</span> <span class="o">=</span> <span class="n">keys</span>
<div class="viewcode-block" id="WeakKeyDictionary.values">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.values">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.values">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">with</span> <span class="n">_IterationGuard</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">for</span> <span class="n">wr</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
@ -578,7 +539,7 @@
<div class="viewcode-block" id="WeakKeyDictionary.keyrefs">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.keyrefs">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.keyrefs">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">keyrefs</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="w"> </span><span class="sd">&quot;&quot;&quot;Return a list of weak references to the keys.</span>
@ -593,7 +554,7 @@
<div class="viewcode-block" id="WeakKeyDictionary.popitem">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.popitem">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.popitem">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">popitem</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_dirty_len</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">while</span> <span class="kc">True</span><span class="p">:</span>
@ -604,20 +565,20 @@
<div class="viewcode-block" id="WeakKeyDictionary.pop">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.pop">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.pop">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">pop</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_dirty_len</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">ref</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="o">*</span><span class="n">args</span><span class="p">)</span></div>
<div class="viewcode-block" id="WeakKeyDictionary.setdefault">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.setdefault">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.setdefault">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">setdefault</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">ref</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_remove</span><span class="p">),</span><span class="n">default</span><span class="p">)</span></div>
<div class="viewcode-block" id="WeakKeyDictionary.update">
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdhandler.WeakKeyDictionary.update">[docs]</a>
<a class="viewcode-back" href="../api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.update">[docs]</a>
<span class="k">def</span><span class="w"> </span><span class="nf">update</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="nb">dict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">/</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">d</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">data</span>
<span class="k">if</span> <span class="nb">dict</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>

View file

@ -2,11 +2,55 @@
## Main branch
- Security dependency updates: Django >5.2.8 (<5.3), Django RestFramework 3.16
- [Feat][pull3599]: Make at_pre_cmd
- [Fix]: API /openapi/setattribute endpoints were both POST and PUT, causing schema
errors; now changed to PUT only. (Griatch)
- [Fix][pull3799]: Fix typo in `basic_tc.py` contrib for beginner tutorial (Tharic99)
- [Fix][pull3806]: EvMore wouldn't pass Session to next cmd when exiting (gas-public-wooden-clean)
- [Fix][pull3809]: Admin page - Repair link to Account button (UserlandAlchemist)
- [Fix][pull3811]: Website login banner shows before login attempt (UserlandAlchemist)
- [Fix][pull3817]: `ingame_reports` i18n fix (peddn)
- [Fix][pull3818]: Update spawn hook to use `new_prototype` (InspectorCaracal)
- [Fix][pull3815]: Performance improvement in large cmdset mergers (blongden)
- [Fix][pull3831]: Performance optimization in ANSIString, performance boost for large colored
strings (count-infinity)
- [Fix][pull3832]: Fix typo in prototype causing homogenized locks to use
fallbacks incorrectly (count-infinity)
- [Fix][pull3834]: Fix so `$obj(#123)` inline function works in prototype spawning (count-infinity)
- [Fix][pull3836]: Correctly handling calling `create_object` with `key=None` (count-infinity)
- [Fix][pull3852]: Django 5.2+ was not properly detected. Fixing distutils being
removed in py3.12 for new installs (count-infinity)
- [Fix][pull3845]: Fix exponential ANSI markup explosions when slicing
ANSIString after reset (speeds up EvForm other string ops, fixes compatibility) (count-infinity)
- [Fix][pull3853]: Properly handle multimatch separations with native dashes, like
't-shirt-1' (count-infinity)
- [Doc][pull3801]: Move Evennia doc build system to latest Sphinx/myST
(PowershellNinja, also honorary mention to electroglyph)
- [Doc][pull3800]: Describe support for Telnet SSH in HAProxy documentation (holl0wstar)
- [Doc][pull3825]: Update Portuguese translation (marado)
- [Doc][pull3826]: Fix broken links in README (marado)
- Docs: marado, Griatch, Hasna878, count-infinity
[pull3799]: https://github.com/evennia/evennia/issues/3799
[pull3800]: https://github.com/evennia/evennia/issues/3800
[pull3799]: https://github.com/evennia/evennia/pull/3799
[pull3800]: https://github.com/evennia/evennia/pull/3800
[pull3801]: https://github.com/evennia/evennia/pull/3801
[pull3806]: https://github.com/evennia/evennia/pull/3806
[pull3809]: https://github.com/evennia/evennia/pull/3809
[pull3811]: https://github.com/evennia/evennia/pull/3811
[pull3815]: https://github.com/evennia/evennia/pull/3815
[pull3817]: https://github.com/evennia/evennia/pull/3817
[pull3818]: https://github.com/evennia/evennia/pull/3818
[pull3825]: https://github.com/evennia/evennia/pull/3825
[pull3826]: https://github.com/evennia/evennia/pull/3826
[pull3831]: https://github.com/evennia/evennia/pull/3831
[pull3832]: https://github.com/evennia/evennia/pull/3832
[pull3834]: https://github.com/evennia/evennia/pull/3834
[pull3836]: https://github.com/evennia/evennia/pull/3836
[pull3599]: https://github.com/evennia/evennia/pull/3599
[pull3852]: https://github.com/evennia/evennia/pull/3852
[pull3853]: https://github.com/evennia/evennia/pull/3853
[pull3854]: https://github.com/evennia/evennia/pull/3853
## Evennia 5.0.1
@ -31,10 +75,10 @@ This upgrade requires running `evennia migrate` on your existing database
- Feat (backwards incompatible): RUN MIGRATIONS (`evennia migrate`): Now requiring Django 5.1 (Griatch)
- Feat (backwards incompatible): Drop support and testing for Python 3.10 (Griatch)
- [Feat][pull3719]: Support Python 3.13. (0xDEADFED5)
- [Feat][pull3719]: Support Python 3.13. (electroglyph)
- [Feat][pull3633]: Default object's default descs are now taken from a `default_description`
class variable instead of the `desc` Attribute always being set (count-infinity)
- [Feat][pull3718]: Remove twistd.bat creation for Windows, should not be needed anymore (0xDEADFED5)
- [Feat][pull3718]: Remove twistd.bat creation for Windows, should not be needed anymore (electroglyph)
- [Feat][pull3756]: Updated German translation (JohnFi)
- [Feat][pull3757]: Add more i18n strings to `DefaultObject` for easier translation (JohnFi)
- [Feat][pull3783]: Support users of `ruff` linter by adding compatible config in `pyproject.toml` (jaborsh)
@ -50,8 +94,8 @@ This upgrade requires running `evennia migrate` on your existing database
- [Fix][pull3690]: 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)
- [Fix][pull3694]: Funcparser swallowing rest of line after a `\`-escape (count-infinity)
- [Fix][pull3705]: Properly serialize `IntFlag` enum types (0xDEADFED5)
- [Fix][pull3707]: Correct links in `about` command (0xDEADFED5)
- [Fix][pull3705]: Properly serialize `IntFlag` enum types (electroglyph)
- [Fix][pull3707]: Correct links in `about` command (electroglyph)
- [Fix][pull3710]: Clean reduntant session clearin in `at_server_cold_start` (InspectorCaracal)
- [Fix][pull3711]: Usability improvements in the Discord integration (InspectorCaracal)
- [Fix][pull3721]: Avoid loading cmdsets that don't need to be checked, avoiding
@ -67,7 +111,7 @@ This upgrade requires running `evennia migrate` on your existing database
- [Fix][pull3743]: Log full stack trace on failed object creation (aMiss-aWry)
- [Fix][pull3747]: TutorialWorld bridge-room didn't correctly randomize weather effects (SpyrosRoum)
- [Fix][pull3765]: Storing TickerHandler `store_key` in a db attribute would not
work correctly (0xDEADFED5)
work correctly (electroglyph)
- [Fix][pull3753]: Make sure `AttributeProperty`s are initialized with default values also in parent class (JohnFi)
- [Fix][pull3751]: The `access` and `inventory` commands would traceback if run on a character without an Account (EliasWatson)
- [Fix][pull3768]: Make sure the `CmdCopy` command copies object categories,
@ -82,7 +126,7 @@ This upgrade requires running `evennia migrate` on your existing database
it caused an OnDemandHandler save error on reload. Will now clean up on save. (Griatch)
used as the task's category (Griatch)
- Fix: Correct aws contrib's use of legacy django string utils (Griatch)
- [Docs]: Fixes from InspectorCaracal, Griatch, ChrisLR, JohnFi, 0xDEADFED5, jaborsh, Problematic, BlaneWins
- [Docs]: Fixes from InspectorCaracal, Griatch, ChrisLR, JohnFi, electroglyph, jaborsh, Problematic, BlaneWins
[pull3633]: https://github.com/evennia/evennia/pull/3633
[pull3677]: https://github.com/evennia/evennia/pull/3677
@ -204,7 +248,7 @@ Sep 29, 2024
- Feat: Support `scripts key:typeclass` to create global scripts
with dynamic keys (rather than just relying on typeclass' key) (Griatch)
- [Feat][pull3595]: Tweak Sqlite3 PRAGMAs for better performance (0xDEADFED5)
- [Feat][pull3595]: Tweak Sqlite3 PRAGMAs for better performance (electroglyph)
- Feat: Make Sqlite3 PRAGMAs configurable via settings (Griatch)
- [Feat][pull3592]: Revised German locationlization ('Du' instead of 'Sie',
cleanup) (Drakon72)
@ -213,7 +257,7 @@ with dynamic keys (rather than just relying on typeclass' key) (Griatch)
- [Feat][pull3588]: New `DefaultObject` hooks: `at_object_post_creation`, called once after
first creation but after any prototypes have been applied, and
`at_object_post_spawn(prototype)`, called only after creation/update with a prototype (InspectorCaracal)
- [Fix][pull3594]: Update/clean some Evennia dependencies (0xDEADFED5)
- [Fix][pull3594]: Update/clean some Evennia dependencies (electroglyph)
- [Fix][issue3556]: Better error if trying to treat ObjectDB as a typeclass (Griatch)
- [Fix][issue3590]: Make `examine` command properly show `strattr` type
Attribute values (Griatch)
@ -227,7 +271,7 @@ did not add it to the handler's object (Griatch)
- [Fix][pull3605]: Correctly pass node kwargs through `@list_node` decorated evmenu nodes
(InspectorCaracal)
- [Fix][pull3597]: Address timing issue for testing `new_task_waiting_input `on
Windows (0xDEADFED5)
Windows (electroglyph)
- [Fix][pull3611]: Fix and update for Reports contrib (InspectorCaracal)
- [Fix][pull3625]: Lycanthropy tutorial page had some issues (feyrkh)
- [Fix][pull3622]: Fix for examine command tracebacking with strvalue error
@ -273,10 +317,10 @@ Aug 11, 2024
- [Feat][pull3531]: New contrib; `in-game reports` for handling user reports,
bugs etc in-game (InspectorCaracal)
- [Feat][pull3586]: Add ANSI color support `|U`, `|I`, `|i`, `|s`, `|S` for
underline reset, italic/reset and strikethrough/reset (0xDEADFED5)
underline reset, italic/reset and strikethrough/reset (electroglyph)
- Feat: Add `Trait.traithandler` back-reference so custom Traits from the Traits
contrib can find and reference other Traits. (Griatch)
- [Feat][pull3582]: Add true-color parsing/fallback for ANSIString (0xDEADFED5)
- [Feat][pull3582]: Add true-color parsing/fallback for ANSIString (electroglyph)
- [Fix][pull3571]: Better visual display of partial multimatch search results
(InspectorCaracal)
- [Fix][issue3378]: Prototype 'alias' key was not properly homogenized to a list
@ -286,8 +330,8 @@ underline reset, italic/reset and strikethrough/reset (0xDEADFED5)
- [Fix][pull3585]: `TagCmd.switch_options` was misnamed (erratic-pattern)
- [Fix][pull3580]: Fix typo that made `find/loc` show the wrong dbref in result (erratic-pattern)
- [Fix][pull3589]: Fix regex escaping in `utils.py` for future Python versions (hhsiao)
- [Docs]: Add True-color description for Colors documentation (0xDEADFED5)
- [Docs]: Doc fixes (Griatch, InspectorCaracal, 0xDEADFED5)
- [Docs]: Add True-color description for Colors documentation (electroglyph)
- [Docs]: Doc fixes (Griatch, InspectorCaracal, electroglyph)
[pull3585]: https://github.com/evennia/evennia/pull/3585
[pull3580]: https://github.com/evennia/evennia/pull/3580

View file

@ -167,9 +167,8 @@ The default protfuncs available out of the box are defined in `evennia/prototype
| `$div(<value1>, <value2>)` | Returns value2 / value1 |
| `$toint(<value>)` | Returns value converted to integer (or value if not possible) |
| `$eval(<code>)` | Returns result of [literal-eval](https://docs.python.org/2/library/ast.html#ast.literal_eval) of code string. Only simple python expressions. |
| `$obj(<query>)` | Returns object #dbref searched globally by key, tag or #dbref. Error if more than one found. |
| `$objlist(<query>)` | Like `$obj`, except always returns a list of zero, one or more results. |
| `$dbref(dbref)` | Returns argument if it is formed as a #dbref (e.g. #1234), otherwise error. |
| `$obj(<query>)` | Returns object searched globally by key, tag or #dbref. Requires `caller` kwarg in `spawner.spawn()` for access checks. See [searching callables](./FuncParser.md#evenniautilsfuncparsersearching_callables). ($dbref(<query>) is an alias and works the same) |
| `$objlist(<query>)` | Like `$obj`, except always returns a list of zero, one or more results. Requires `caller` kwarg in `spawner.spawn()` for access checks. See [searching callables](./FuncParser.md#evenniautilsfuncparsersearching_callables). |
For developers with access to Python, using protfuncs in prototypes is generally not useful. Passing real Python functions is a lot more powerful and flexible. Their main use is to allow in-game builders to do limited coding/scripting for their prototypes without giving them direct access to raw Python.

View file

@ -1,47 +1,47 @@
# Player Characters
In the [previous lesson about rules and dice rolling](./Beginner-Tutorial-Rules.md) we made some assumptions about the "Player Character" entity:
In the [previous lesson about rules and dice rolling](./Beginner-Tutorial-Rules.md) we made some assumptions about the "Player Character" entity:
- It should store Abilities on itself as `character.strength`, `character.constitution` etc.
- It should have a `.heal(amount)` method.
So we have some guidelines of how it should look! A Character is a database entity with values that should be able to be changed over time. It makes sense to base it off Evennia's
[DefaultCharacter Typeclass](../../../Components/Typeclasses.md). The Character class is like a 'character sheet' in a tabletop
So we have some guidelines of how it should look! A Character is a database entity with values that should be able to be changed over time. It makes sense to base it off Evennia's
[DefaultCharacter Typeclass](../../../Components/Typeclasses.md). The Character class is like a 'character sheet' in a tabletop
RPG, it will hold everything relevant to that PC.
## Inheritance structure
Player Characters (PCs) are not the only "living" things in our world. We also have _NPCs_
(like shopkeepers and other friendlies) as well as _monsters_ (mobs) that can attack us.
Player Characters (PCs) are not the only "living" things in our world. We also have _NPCs_
(like shopkeepers and other friendlies) as well as _monsters_ (mobs) that can attack us.
In code, there are a few ways we could structure this. If NPCs/monsters were just special cases of PCs, we could use a class inheritance like this:
In code, there are a few ways we could structure this. If NPCs/monsters were just special cases of PCs, we could use a class inheritance like this:
```python
from evennia import DefaultCharacter
from evennia import DefaultCharacter
class EvAdventureCharacter(DefaultCharacter):
# stuff
class EvAdventureCharacter(DefaultCharacter):
# stuff
class EvAdventureNPC(EvAdventureCharacter):
# more stuff
class EvAdventureMob(EvAdventureNPC):
# more stuff
# more stuff
class EvAdventureMob(EvAdventureNPC):
# more stuff
```
All code we put on the `Character` class would now be inherited to `NPC` and `Mob` automatically.
All code we put on the `Character` class would now be inherited to `NPC` and `Mob` automatically.
However, in _Knave_, NPCs and particularly monsters are _not_ using the same rules as PCs - they are simplified to use a Hit-Die (HD) concept. So while still character-like, NPCs should be separate from PCs like this:
```python
from evennia import DefaultCharacter
from evennia import DefaultCharacter
class EvAdventureCharacter(DefaultCharacter):
# stuff
class EvAdventureCharacter(DefaultCharacter):
# stuff
class EvAdventureNPC(DefaultCharacter):
# separate stuff
# separate stuff
class EvAdventureMob(EvadventureNPC):
# more separate stuff
```
@ -57,18 +57,18 @@ Nevertheless, there are some things that _should_ be common for all 'living thin
We don't want to code this separately for every class but we no longer have a common parent class to put it on. So instead we'll use the concept of a _mixin_ class:
```python
from evennia import DefaultCharacter
```python
from evennia import DefaultCharacter
class LivingMixin:
# stuff common for all living things
class EvAdventureCharacter(LivingMixin, DefaultCharacter):
# stuff
class EvAdventureCharacter(LivingMixin, DefaultCharacter):
# stuff
class EvAdventureNPC(LivingMixin, DefaultCharacter):
# stuff
# stuff
class EvAdventureMob(LivingMixin, EvadventureNPC):
# more stuff
```
@ -77,7 +77,8 @@ class EvAdventureMob(LivingMixin, EvadventureNPC):
In [evennia/contrib/tutorials/evadventure/characters.py](../../../api/evennia.contrib.tutorials.evadventure.characters.md)
is an example of a character class structure.
```
Above, the `LivingMixin` class cannot work on its own - it just 'patches' the other classes with some extra functionality all living things should be able to do. This is an example of _multiple inheritance_. It's useful to know about, but one should not over-do multiple inheritance since it can also get confusing to follow the code.
Above, the `LivingMixin` class cannot work on its own - it just 'patches' the other classes with some extra functionality all living things should be able to do. This is an example of _multiple inheritance_. The order of inheritance matters here - the `LivingMixin` must come _before_ `DefaultCharacter` (or EvAdventureNPC etc) so that its methods are found first when called.Multiple inheritance is a powerful tool in object-oriented programming, and useful to know about. Be careful to over-use it, however. If you have too many mixins it can get hard to follow which method comes from where.
## Living mixin class
@ -85,15 +86,15 @@ Above, the `LivingMixin` class cannot work on its own - it just 'patches' the ot
Let's get some useful common methods all living things should have in our game.
```python
# in mygame/evadventure/characters.py
```python
# in mygame/evadventure/characters.py
from .rules import dice
from .rules import dice
class LivingMixin:
# makes it easy for mobs to know to attack PCs
is_pc = False
is_pc = False
@property
def hurt_level(self):
@ -118,58 +119,58 @@ class LivingMixin:
elif percent == 0:
return "|RCollapsed!|n"
def heal(self, hp):
"""
def heal(self, hp):
"""
Heal hp amount of health, not allowing to exceed our max hp
"""
damage = self.hp_max - self.hp
healed = min(damage, hp)
self.hp += healed
self.msg(f"You heal for {healed} HP.")
"""
damage = self.hp_max - self.hp
healed = min(damage, hp)
self.hp += healed
self.msg(f"You heal for {healed} HP.")
def at_pay(self, amount):
"""When paying coins, make sure to never detract more than we have"""
amount = min(amount, self.coins)
self.coins -= amount
return amount
def at_attacked(self, attacker, **kwargs):
def at_attacked(self, attacker, **kwargs):
"""Called when being attacked and combat starts."""
pass
def at_damage(self, damage, attacker=None):
"""Called when attacked and taking damage."""
self.hp -= damage
def at_defeat(self):
self.hp -= damage
def at_defeat(self):
"""Called when defeated. By default this means death."""
self.at_death()
def at_death(self):
"""Called when this thing dies."""
# this will mean different things for different living things
pass
pass
def at_do_loot(self, looted):
"""Called when looting another entity"""
"""Called when looting another entity"""
looted.at_looted(self)
def at_looted(self, looter):
"""Called when looted by another entity"""
# default to stealing some coins
max_steal = dice.roll("1d10")
"""Called when looted by another entity"""
# default to stealing some coins
max_steal = dice.roll("1d10")
stolen = self.at_pay(max_steal)
looter.coins += stolen
```
Most of these are empty since they will behave differently for characters and npcs. But having them in the mixin means we can expect these methods to be available for all living things.
Once we create more of our game, we will need to remember to actually call these hook methods so they serve a purpose. For example, once we implement combat, we must remember to call `at_attacked` as well as the other methods involving taking damage, getting defeated or dying.
Once we create more of our game, we will need to remember to actually call these hook methods so they serve a purpose. For example, once we implement combat, we must remember to call `at_attacked` as well as the other methods involving taking damage, getting defeated or dying.
## Character class
## Character class
We will now start making the basic Character class, based on what we need from _Knave_.
@ -177,28 +178,28 @@ We will now start making the basic Character class, based on what we need from _
# in mygame/evadventure/characters.py
from evennia import DefaultCharacter, AttributeProperty
from .rules import dice
from .rules import dice
class LivingMixin:
# ...
# ...
class EvAdventureCharacter(LivingMixin, DefaultCharacter):
"""
A character to use for EvAdventure.
"""
is_pc = True
A character to use for EvAdventure.
"""
is_pc = True
strength = AttributeProperty(1)
strength = AttributeProperty(1)
dexterity = AttributeProperty(1)
constitution = AttributeProperty(1)
intelligence = AttributeProperty(1)
wisdom = AttributeProperty(1)
charisma = AttributeProperty(1)
hp = AttributeProperty(8)
hp = AttributeProperty(8)
hp_max = AttributeProperty(8)
level = AttributeProperty(1)
xp = AttributeProperty(0)
coins = AttributeProperty(0)
@ -213,18 +214,18 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter):
"$You() $conj(collapse) in a heap, alive but beaten.",
from_obj=self)
self.heal(self.hp_max)
def at_death(self):
"""We rolled 'dead' on the death table."""
self.location.msg_contents(
"$You() collapse in a heap, embraced by death.",
from_obj=self)
# TODO - go back into chargen to make a new character!
from_obj=self)
# TODO - go back into chargen to make a new character!
```
We make an assumption about our rooms here - that they have a property `.allow_death`. We need to make a note to actually add such a property to rooms later!
In our `Character` class we implement all attributes we want to simulate from the _Knave_ ruleset. The `AttributeProperty` is one way to add an Attribute in a field-like way; these will be accessible on every character in several ways:
In our `Character` class we implement all attributes we want to simulate from the _Knave_ ruleset. The `AttributeProperty` is one way to add an Attribute in a field-like way; these will be accessible on every character in several ways:
- As `character.strength`
- As `character.db.strength`
@ -234,7 +235,7 @@ See [Attributes](../../../Components/Attributes.md) for seeing how Attributes wo
Unlike in base _Knave_, we store `coins` as a separate Attribute rather than as items in the inventory, this makes it easier to handle barter and trading later.
We implement the Player Character versions of `at_defeat` and `at_death`. We also make use of `.heal()` from the `LivingMixin` class.
We implement the Player Character versions of `at_defeat` and `at_death`. We also make use of `.heal()` from the `LivingMixin` class.
### Funcparser inlines
@ -259,68 +260,68 @@ Note how `$conj()` chose `collapse/collapses` to make the sentences grammaticall
We make our first use of the `rules.dice` roller to roll on the death table! As you may recall, in the previous lesson, we didn't know just what to do when rolling 'dead' on this table. Now we know - we should be calling `at_death` on the character. So let's add that where we had TODOs before:
```python
# mygame/evadventure/rules.py
```python
# mygame/evadventure/rules.py
class EvAdventureRollEngine:
# ...
def roll_death(self, character):
# ...
def roll_death(self, character):
ability_name = self.roll_random_table("1d8", death_table)
if ability_name == "dead":
# kill the character!
character.at_death() # <------ TODO no more
else:
# ...
if current_ability < -10:
else:
# ...
if current_ability < -10:
# kill the character!
character.at_death() # <------- TODO no more
else:
# ...
# ...
```
## Connecting the Character with Evennia
## Connecting the Character with Evennia
You can easily make yourself an `EvAdventureCharacter` in-game by using the
`type` command:
You can easily make yourself an `EvAdventureCharacter` in-game by using the
`type` command:
type self = evadventure.characters.EvAdventureCharacter
You can now do `examine self` to check your type updated.
You can now do `examine self` to check your type updated.
If you want _all_ new Characters to be of this type you need to tell Evennia about it. Evennia uses a global setting `BASE_CHARACTER_TYPECLASS` to know which typeclass to use when creating Characters (when logging in, for example). This defaults to `typeclasses.characters.Character` (that is, the `Character` class in `mygame/typeclasses/characters.py`).
If you want _all_ new Characters to be of this type you need to tell Evennia about it. Evennia uses a global setting `BASE_CHARACTER_TYPECLASS` to know which typeclass to use when creating Characters (when logging in, for example). This defaults to `typeclasses.characters.Character` (that is, the `Character` class in `mygame/typeclasses/characters.py`).
There are thus two ways to weave your new Character class into Evennia:
There are thus two ways to weave your new Character class into Evennia:
1. Change `mygame/server/conf/settings.py` and add `BASE_CHARACTER_TYPECLASS = "evadventure.characters.EvAdventureCharacter"`.
2. Or, change `typeclasses.characters.Character` to inherit from `EvAdventureCharacter`.
2. Or, change `typeclasses.characters.Character` to inherit from `EvAdventureCharacter`.
You must always reload the server for changes like this to take effect.
```{important}
In this tutorial we are making all changes in a folder `mygame/evadventure/`. This means we can isolate
our code but means we need to do some extra steps to tie the character (and other objects) into Evennia.
For your own game it would be just fine to start editing `mygame/typeclasses/characters.py` directly
In this tutorial we are making all changes in a folder `mygame/evadventure/`. This means we can isolate
our code but means we need to do some extra steps to tie the character (and other objects) into Evennia.
For your own game it would be just fine to start editing `mygame/typeclasses/characters.py` directly
instead.
```
## Unit Testing
## Unit Testing
> Create a new module `mygame/evadventure/tests/test_characters.py`
For testing, we just need to create a new EvAdventure character and check that calling the methods on it doesn't error out.
For testing, we just need to create a new EvAdventure character and check that calling the methods on it doesn't error out.
```python
# mygame/evadventure/tests/test_characters.py
# mygame/evadventure/tests/test_characters.py
from evennia.utils import create
from evennia.utils.test_resources import BaseEvenniaTest
from evennia.utils.test_resources import BaseEvenniaTest
from ..characters import EvAdventureCharacter
from ..characters import EvAdventureCharacter
class TestCharacters(BaseEvenniaTest):
def setUp(self):
@ -328,73 +329,73 @@ class TestCharacters(BaseEvenniaTest):
self.character = create.create_object(EvAdventureCharacter, key="testchar")
def test_heal(self):
self.character.hp = 0
self.character.hp_max = 8
self.character.hp = 0
self.character.hp_max = 8
self.character.heal(1)
self.assertEqual(self.character.hp, 1)
# make sure we can't heal more than max
self.character.heal(100)
self.assertEqual(self.character.hp, 8)
def test_at_pay(self):
self.character.coins = 100
self.character.coins = 100
result = self.character.at_pay(60)
self.assertEqual(result, 60)
self.assertEqual(result, 60)
self.assertEqual(self.character.coins, 40)
# can't get more coins than we have
# can't get more coins than we have
result = self.character.at_pay(100)
self.assertEqual(result, 40)
self.assertEqual(self.character.coins, 0)
# tests for other methods ...
# tests for other methods ...
```
If you followed the previous lessons, these tests should look familiar. Consider adding tests for other methods as practice. Refer to previous lessons for details.
If you followed the previous lessons, these tests should look familiar. Consider adding tests for other methods as practice. Refer to previous lessons for details.
For running the tests you do:
For running the tests you do:
evennia test --settings settings.py .evadventure.tests.test_characters
## About races and classes
## About races and classes
_Knave_ doesn't have any D&D-style _classes_ (like Thief, Fighter etc). It also does not bother with _races_ (like dwarves, elves etc). This makes the tutorial shorter, but you may ask yourself how you'd add these functions.
_Knave_ doesn't have any D&D-style _classes_ (like Thief, Fighter etc). It also does not bother with _races_ (like dwarves, elves etc). This makes the tutorial shorter, but you may ask yourself how you'd add these functions.
In the framework we have sketched out for _Knave_, it would be simple - you'd add your race/class as an Attribute on your Character:
In the framework we have sketched out for _Knave_, it would be simple - you'd add your race/class as an Attribute on your Character:
```python
# mygame/evadventure/characters.py
from evennia import DefaultCharacter, AttributeProperty
# ...
# ...
class EvAdventureCharacter(LivingMixin, DefaultCharacter):
# ...
# ...
charclass = AttributeProperty("Fighter")
charrace = AttributeProperty("Human")
```
We use `charclass` rather than `class` here, because `class` is a reserved Python keyword. Naming `race` as `charrace` thus matches in style.
We use `charclass` rather than `class` here, because `class` is a reserved Python keyword. Naming `race` as `charrace` thus matches in style.
We'd then need to expand our [rules module](./Beginner-Tutorial-Rules.md) (and later
We'd then need to expand our [rules module](./Beginner-Tutorial-Rules.md) (and later
[character generation](./Beginner-Tutorial-Chargen.md) to check and include what these classes mean.
## Summary
With the `EvAdventureCharacter` class in place, we have a better understanding of how our PCs will look like under _Knave_.
With the `EvAdventureCharacter` class in place, we have a better understanding of how our PCs will look like under _Knave_.
For now, we only have bits and pieces and haven't been testing this code in-game. But if you want you can swap yourself into `EvAdventureCharacter` right now. Log into your game and run the command
For now, we only have bits and pieces and haven't been testing this code in-game. But if you want you can swap yourself into `EvAdventureCharacter` right now. Log into your game and run the command
type self = evadventure.characters.EvAdventureCharacter
type self = evadventure.characters.EvAdventureCharacter
If all went well, `ex self` will now show your typeclass as being `EvAdventureCharacter`. Check out your strength with
If all went well, `ex self` will now show your typeclass as being `EvAdventureCharacter`. Check out your strength with
py self.strength = 3

View file

@ -164,7 +164,7 @@ class EvadventureTurnbasedCombatHandler(EvAdventureCombatBaseHandler):
def get_sides(self, combatant):
"""
Get a listing of the two 'sides' of this combat,
m the perspective of the provided combatant.
from the perspective of the provided combatant.
"""
if self.obj.allow_pvp:
# in pvp, everyone else is an ememy
@ -218,7 +218,7 @@ class EvadventureTurnbasedCombatHandler(EvAdventureCombatBaseHandler):
We use the `advantage/disadvantage_matrix` Attributes to track who has advantage against whom.
```{sidebar} .pop()
The Python `.pop()` method exists on lists and dicts as well as some other iterables. It 'pops' and returns an element from the container. For a list, it's either popped by index or by popping the last element. For a dict (like here), a specific key must be given to pop. If you don't provide a default value as a second element, an error will be raised if the key you try to pop is not found.
The Python `.pop()` method removes an element from a list or dict and returns it. For a list, it removes by index (or the last element by default). For a dict (like here), you specify which key to remove. Providing a default value as a second argument prevents an error if the key doesn't exist.
```
In the `has dis/advantage` methods we `pop` the target from the matrix which will result either in the value `True` or `False` (the default value we give to `pop` if the target is not in the matrix). This means that the advantage, once gained, can only be used once.
@ -478,7 +478,7 @@ class EvadventureTurnbasedCombatHandler(EvAdventureCombatBaseHandler):
surviving_combatant = None
allies, enemies = (), ()
else:
# grab a random survivor and check of they have any living enemies.
# grab a random survivor and check if they have any living enemies.
surviving_combatant = random.choice(list(self.combatants.keys()))
allies, enemies = self.get_sides(surviving_combatant)
@ -722,7 +722,7 @@ Using this in an option will rerun the current node, but will preserve the `kwar
### Stepping through the wizard
Our particualr menu is very symmetric - you select an option and then you will just select a series of option before you come back. So we will make another goto-function to help us easily do this. To understand, let's first show how we plan to use this:
Our particular menu is very symmetric - you select an option and then you will just select a series of option before you come back. So we will make another goto-function to help us easily do this. To understand, let's first show how we plan to use this:
```python
# in the base combat-node function (just shown as an example)
@ -816,7 +816,7 @@ We will make one final helper function, to quickly add the `back` (and `abort`)
# ...
_get_default_wizard_options(caller, **kwargs):
def _get_default_wizard_options(caller, **kwargs):
return [
{
"key": "back",
@ -932,7 +932,6 @@ def node_choose_ability(caller, raw_string, **kwargs):
Ability.DEX,
Ability.CON,
Ability.INT,
Ability.INT,
Ability.WIS,
Ability.CHA,
)
@ -979,7 +978,7 @@ def node_choose_wield_item(caller, raw_string, **kwargs):
Our [equipment handler](./Beginner-Tutorial-Equipment.md) has the very useful help method `.get_usable_objects_from_backpack`. We just call this to get a list of all the items we want to choose. Otherwise this node should look pretty familiar by now.
The `node_choose_wiqld_item` is very similar, except it uses `caller.equipment.get_wieldable_objects_from_backpack()` instead. We'll leave the implementation of this up to the reader.
The `node_choose_wield_item` is very similar, except it uses `caller.equipment.get_wieldable_objects_from_backpack()` instead. We'll leave the implementation of this up to the reader.
### The main menu node
@ -1084,11 +1083,11 @@ def node_combat(caller, raw_string, **kwargs):
This starts off the `_step_wizard` for each action choice. It also lays out the `action_dict` for every action, leaving `None` values for the fields that will be set by the following nodes.
Note how we add the `"repeat"` key to some actions. Having them automatically repeat means the player don't have to insert the same action every time.
Note how we add the `"repeat"` key to some actions. Having them automatically repeat means the player doesn't have to insert the same action every time.
## Attack Command
We will only need one single Command to run the Turnbased combat system. This is the `attack` command. Once you use it once, you will be in the menu.
We will only need one single command to run the turnbased combat system. This is the `attack` command. Once you use it once, you will be in the menu.
```python
@ -1317,7 +1316,7 @@ But apart from the `# HEADER` and `# CODE` specials, this just a series of norma
Log into the game with a developer/superuser account and run
> batchcmd evadventure.batchscripts.turnbased_combat_demo
> batchcode evadventure.batchscripts.turnbased_combat_demo
This should place you in the arena with the dummy (if not, check for errors in the output! Use `objects` and `delete` commands to list and delete objects if you need to start over.)
@ -1325,6 +1324,6 @@ You can now try `attack dummy` and should be able to pound away at the dummy (lo
## Conclusions
At this point we have coverered some ideas on how to implement both twitch- and turnbased combat systems. Along the way you have been exposed to many concepts such as classes, scripts and handlers, Commands, EvMenus and more.
At this point we have covered some ideas on how to implement both twitch- and turnbased combat systems. Along the way you have been exposed to many concepts such as classes, scripts and handlers, Commands, EvMenus and more.
Before our combat system is actually usable, we need our enemies to actually fight back. We'll get to that next.

View file

@ -259,7 +259,7 @@ class EvAdventureCombatTwitchHandler(EvAdventureCombatBaseHandler):
"""
if action_dict["key"] not in self.action_classes:
self.obj.msg("This is an unkown action!")
self.obj.msg("This is an unknown action!")
return
# store action dict and schedule it to run in dt time
@ -285,7 +285,7 @@ class EvAdventureCombatTwitchHandler(EvAdventureCombatBaseHandler):
- **Line 43**: We simply store the given action dict in the Attribute `action_dict` on the handler. Simple and effective!
- **Line 44**: When you enter e.g. `attack`, you expect in this type of combat to see the `attack` command repeat automatically even if you don't enter anything more. To this end we are looking for a new key in action dicts, indicating that this action should _repeat_ with a certain rate (`dt`, given in seconds). We make this compatible with all action dicts by simply assuming it's zero if not specified.
[evennia.utils.utils.repeat](evennia.utils.utils.repeat) and [evennia.utils.utils.unrepeat](evennia.utils.utils.unrepeat) are convenient shortcuts to the [TickerHandler](../../../Components/TickerHandler.md). You tell `repeat` to call a given method/function at a certain rate. What you get back is a reference that you can then later use to 'un-repeat' (stop the repeating) later. We make sure to store this reference (we don't care exactly how it looks, just that we need to store it) in `the current_ticket_ref` Attribute (**Line 26**).
[evennia.utils.utils.repeat](evennia.utils.utils.repeat) and [evennia.utils.utils.unrepeat](evennia.utils.utils.unrepeat) are convenient shortcuts to the [TickerHandler](../../../Components/TickerHandler.md). You tell `repeat` to call a given method/function at a certain rate. What you get back is a reference that you can then later use to 'un-repeat' (stop the repeating) later. We make sure to store this reference (we don't care exactly how it looks, just that we need to store it) in the `current_ticker_ref` Attribute (**Line 26**).
- **Line 48**: Whenever we queue a new action (it may replace an existing one) we must make sure to kill (un-repeat) any old repeats that are ongoing. Otherwise we would get old actions firing over and over and new ones starting alongside them.
- **Line 49**: If `dt` is set, we call `repeat` to set up a new repeat action at the given rate. We store this new reference. After `dt` seconds, the `.execute_next_action` method will fire (we'll create that in the next section).
@ -305,30 +305,30 @@ class EvAdventureCombatTwitchHandler(EvAdventureCombatBaseHandler):
# ...
def execute_next_action(self):
"""
Triggered after a delay by the command
"""
combatant = self.obj
action_dict = self.action_dict
action_class = self.action_classes[action_dict["key"]]
action = action_class(self, combatant, action_dict)
if action.can_use():
action.execute()
action.post_execute()
if not action_dict.get("repeat", True):
# not a repeating action, use the fallback (normally the original attack)
self.action_dict = self.fallback_action_dict
self.queue_action(self.fallback_action_dict)
self.check_stop_combat()
"""
Triggered after a delay by the command
"""
combatant = self.obj
action_dict = self.action_dict
action_class = self.action_classes[action_dict["key"]]
action = action_class(self, combatant, action_dict)
if action.can_use():
action.execute()
action.post_execute()
if not action_dict.get("repeat", True):
# not a repeating action, use the fallback (normally the original attack)
self.action_dict = self.fallback_action_dict
self.queue_action(self.fallback_action_dict)
self.check_stop_combat()
```
This is the method called after `dt` seconds in `queue_action`.
- **Line 5**: We defined a 'fallback action'. This is used after a one-time action (one that should not repeat) has completed.
- **Line 15**: We take the `'key'` from the `action-dict` and use the `action_classes` mapping to get an action class (e.g. `ACtionAttack` we defined [here](./Beginner-Tutorial-Combat-Base.md#attack-action)).
- **Line 15**: We take the `'key'` from the `action_dict` and use the `action_classes` mapping to get an action class (e.g. `ActionAttack` we defined [here](./Beginner-Tutorial-Combat-Base.md#attack-action)).
- **Line 16**: Here we initialize the action class with the actual current data - the combatant and the `action_dict`. This calls the `__init__` method on the class and makes the action ready to use.
```{sidebar} New action-dict keys
To summarize, for twitch-combat use we have now introduced two new keys to action-dicts:
@ -365,7 +365,7 @@ class EvAdventureCombatTwitchHandler(EvAdventureCombatBaseHandler):
enemies = [comb for comb in enemies if comb.hp > 0 and comb.location == location]
if not allies and not enemies:
self.msg("The combat is over. Noone stands.", broadcast=False)
self.msg("The combat is over. No one stands.", broadcast=False)
self.stop_combat()
return
if not allies:
@ -384,7 +384,7 @@ We must make sure to check if combat is over.
- **Line 12**: With our `.get_sides()` method we can easily get the two sides of the conflict.
- **Lines 18, 19**: We get everyone still alive _and still in the same room_. The latter condition is important in case we move away from the battle - you can't hit your enemy from another room.
In the `stop_method` we'll need to do a bunch of cleanup. We'll hold off on implementing this until we have the Commands written out. Read on.
In the `stop_combat` method we'll need to do a bunch of cleanup. We'll hold off on implementing this until we have the Commands written out. Read on.
## Commands
@ -416,7 +416,7 @@ from evennia import InterruptCommand
class _BaseTwitchCombatCommand(Command):
"""
Parent class for all twitch-combat commnads.
Parent class for all twitch-combat commands.
"""
@ -641,7 +641,7 @@ class CmdStunt(_BaseTwitchCombatCommand):
# something like `boost str target`
target = recipient if advantage else "me"
recipient = "me" if advantage else recipient
we still have None:s at this point, we can't continue
# if any values are still None at this point, we can't continue
if None in (stunt_type, recipient, target):
self.msg("Both ability, recipient and target of stunt must be given.")
raise InterruptCommand()
@ -677,7 +677,7 @@ class CmdStunt(_BaseTwitchCombatCommand):
```
This looks much longer, but that is only because the stunt command should understand many different input structures depending on if you are trying to create a advantage or disadvantage, and if an ally or enemy should receive the effect of the stunt.
This looks much longer, but that is only because the stunt command should understand many different input structures depending on if you are trying to create an advantage or disadvantage, and if an ally or enemy should receive the effect of the stunt.
Note the `enums.ABILITY_REVERSE_MAP` (created in the [Utilities lesson](./Beginner-Tutorial-Utilities.md)) being useful to convert your input of 'str' into `Ability.STR` needed by the action dict.
@ -754,8 +754,8 @@ To use an item, we need to make sure we are carrying it. Luckily our work in the
class CmdWield(_BaseTwitchCombatCommand):
"""
Wield a weapon or spell-rune. You will the wield the item,
swapping with any other item(s) you were wielded before.
Wield a weapon or spell-rune. You wield the item,
swapping with any other item(s) you were wielding before.
Usage:
wield <weapon or spell>
@ -893,7 +893,7 @@ from .. import combat_twitch
# ...
class TestEvAdventureTwitchCombat(EvenniaCommandTestMixin)
class TestEvAdventureTwitchCombat(EvenniaCommandTestMixin):
def setUp(self):
self.combathandler = (
@ -904,12 +904,12 @@ class TestEvAdventureTwitchCombat(EvenniaCommandTestMixin)
@patch("evadventure.combat_twitch.unrepeat", new=Mock())
@patch("evadventure.combat_twitch.repeat", new=Mock())
def test_hold_command(self):
self.call(combat_twitch, CmdHold(), "", "You hold back, doing nothing")
self.call(combat_twitch, CmdHold(), "", "You hold back, doing nothing.")
self.assertEqual(self.combathandler.action_dict, {"key": "hold"})
```
The `EvenniaCommandTestMixin` as a few default objects, including `self.char1`, which we make use of here.
The `EvenniaCommandTestMixin` has a few default objects, including `self.char1`, which we make use of here.
The two `@patch` lines are Python [decorators](https://realpython.com/primer-on-python-decorators/) that 'patch' the `test_hold_command` method. What they do is basically saying "in the following method, whenever any code tries to access `evadventure.combat_twitch.un/repeat`, just return a Mocked object instead".

View file

@ -12,18 +12,18 @@ Any system that supports Python3.10+ should work.
- Windows (Win7, Win8, Win10, Win11)
- Mac OSX (>10.5 recommended)
- [Python](https://www.python.org) (3.10, 3.11 and 3.12 are tested. 3.12 is recommended)
- [Twisted](https://twistedmatrix.com) (v23.10+)
- [Python](https://www.python.org) (3.11, 3.12 and 3.13 are tested. 3.13 is recommended)
- [Twisted](https://twistedmatrix.com) (v24.11+)
- [ZopeInterface](https://www.zope.org/Products/ZopeInterface) (v3.0+) - usually included in Twisted packages
- Linux/Mac users may need the `gcc` and `python-dev` packages or equivalent.
- Windows users need [MS Visual C++](https://aka.ms/vs/16/release/vs_buildtools.exe) and *maybe* [pypiwin32](https://pypi.python.org/pypi/pypiwin32).
- [Django](https://www.djangoproject.com) (v4.2+), be warned that latest dev version is usually untested with Evennia.
- [GIT](https://git-scm.com/) - version control software used if you want to install the sources (but also useful to track your own code)
- [Django](https://www.djangoproject.com) (v5.2+), be warned that latest dev version is usually untested with Evennia.
- [GIT](https://git-scm.com/) - version control software used if you want to install the sources (but also useful to track your own code)
- Mac users can use the [git-osx-installer](https://code.google.com/p/git-osx-installer/) or the [MacPorts version](https://git-scm.com/book/en/Getting-Started-Installing-Git#Installing-on-Mac).
## Confusion of location (GIT installation)
When doing the [Git installation](./Installation-Git.md), some may be confused and install Evennia in the wrong location. After following the instructions (and using a virtualenv), the folder structure should look like this:
When doing the [Git installation](./Installation-Git.md), some may be confused and install Evennia in the wrong location. After following the instructions (and using a virtualenv), the folder structure should look like this:
```
muddev/
@ -34,14 +34,14 @@ muddev/
The evennia library code itself is found inside `evennia/evennia/` (so two levels down). You shouldn't change this; do all work in `mygame/`. Your settings file is `mygame/server/conf/settings.py` and the _parent_ setting file is `evennia/evennia/settings_default.py`.
## Virtualenv setup fails
## Virtualenv setup fails
When doing the `python3.x -m venv evenv` (where x is the python3 version) step, some users report getting an error; something like:
Error: Command '['evenv', '-Im', 'ensurepip', '--upgrade', '--default-pip']'
Error: Command '['evenv', '-Im', 'ensurepip', '--upgrade', '--default-pip']'
returned non-zero exit status 1
You can solve this by installing the `python3.11-venv` (or later) package (or equivalent for your OS). Alternatively you can bootstrap it in this way:
You can solve this by installing the `python3.11-venv` (or later) package (or equivalent for your OS). Alternatively you can bootstrap it in this way:
python3.x -m --without-pip evenv
@ -49,13 +49,13 @@ This should set up the virtualenv without `pip`. Activate the new virtualenv and
python -m ensurepip --upgrade
If that fails, a worse alternative to try is
If that fails, a worse alternative to try is
curl https://bootstrap.pypa.io/get-pip.py | python3.x (linux/unix/WSL only)
Either way, you should now be able to continue with the installation.
## Localhost not found
## Localhost not found
If `localhost` doesn't work when trying to connect to your local game, try `127.0.0.1`, which is the same thing.
@ -63,7 +63,7 @@ If `localhost` doesn't work when trying to connect to your local game, try `127.
- If you get an error when installing Evennia (especially with lines mentioning
failing to include `Python.h`) then try `sudo apt-get install python3-setuptools python3-dev`. Once installed, run `pip install -e evennia` again.
- When doing a [git install](./Installation-Git.md), some not-updated Linux distributions may give errors
- When doing a [git install](./Installation-Git.md), some not-updated Linux distributions may give errors
about a too-old `setuptools` or missing `functools`. If so, update your environment
with `pip install --upgrade pip wheel setuptools`. Then try `pip install -e evennia` again.
- One user reported a rare issue on Ubuntu 16 is an install error on installing Twisted; `Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-build-vnIFTg/twisted/` with errors like `distutils.errors.DistutilsError: Could not find suitable distribution for Requirement.parse('incremental>=16.10.1')`. This appears possible to solve by simply updating Ubuntu with `sudo apt-get update && sudo apt-get dist-upgrade`.
@ -80,9 +80,9 @@ If `localhost` doesn't work when trying to connect to your local game, try `127.
## Windows Troubleshooting
- If you install with `pip install evennia` and find that the `evennia` command is not available, run `py -m evennia` once. This should add the evennia binary to your environment. If this fails, make sure you are using a [virtualenv](./Installation-Git.md#virtualenv). Worst case, you can keep using `py -m evennia` in the places where the `evennia` command is used.
- - If you get a `command not found` when trying to run the `evennia` program directly after installation, try closing the Windows Console and starting it again (remember to re-activate the virtualenv if you use one!). Sometimes Windows is not updating its environment properly and `evennia` will be available only in the new console.
- - If you get a `command not found` when trying to run the `evennia` program directly after installation, try closing the Windows Console and starting it again (remember to re-activate the virtualenv if you use one!). Sometimes Windows is not updating its environment properly and `evennia` will be available only in the new console.
- If you installed Python but the `python` command is not available (even in a new console), then you might have missed installing Python on the path. In the Windows Python installer you get a list of options for what to install. Most or all options are pre-checked except this one, and you may even have to scroll down to see it. Reinstall Python and make sure it's checked. Install Python [from the Python homepage](https://www.python.org/downloads/windows/). You will need to be a Windows Administrator to install packages.
- If your MUD client cannot connect to `localhost:4000`, try the equivalent `127.0.0.1:4000` instead. Some MUD clients on Windows does not appear to understand the alias `localhost`.
- Some Windows users get an error installing the Twisted 'wheel'. A wheel is a pre-compiled binary package for Python. A common reason for this error is that you are using a 32-bit version of Python, but Twisted has not yet uploaded the latest 32-bit wheel. Easiest way to fix this is to install a slightly older Twisted version. So if, say, version `22.1` failed, install `22.0` manually with `pip install twisted==22.0`. Alternatively you could check that you are using the 64-bit version of Python and uninstall any 32bit one. If so, you must then `deactivate` the virtualenv, delete the `evenv` folder and recreate it anew with your new Python.
- If you've done a git installation, and your server won't start with an error message like `AttributeError: module 'evennia' has no attribute '_init'`, it may be a python path issue. In a terminal, cd to `(your python directory)\site-packages` and run the command `echo "C:\absolute\path\to\evennia" > local-vendors.pth`. Open the created file in your favorite IDE and make sure it is saved with *UTF-8* encoding and not *UTF-8 with BOM*.
- Some users have reported issues with Windows WSL and anti-virus software during Evennia development. Timeout errors and the inability to run `evennia connections` may be due to your anti-virus software interfering. Try disabling or changing your anti-virus software settings.
- Some users have reported issues with Windows WSL and anti-virus software during Evennia development. Timeout errors and the inability to run `evennia connections` may be due to your anti-virus software interfering. Try disabling or changing your anti-virus software settings.

View file

@ -1,9 +1,5 @@
# Installation
```{important}
If you are converting an existing game from a previous Evennia version, you will need to upgrade.
```
The fastest way to install Evennia is to use the `pip` installer that comes with Python (read on). You can also [clone Evennia from github](./Installation-Git.md) or use [docker](./Installation-Docker.md). Some users have also experimented with [installing Evennia on Android](./Installation-Android.md).
If you are converting an existing game, please follow the [upgrade instructions](./Installation-Upgrade.md).
@ -13,9 +9,9 @@ If you are converting an existing game, please follow the [upgrade instructions]
```{sidebar} Develop in isolation
Installing Evennia doesn't make anything visible online. Apart from installation and updating, you can develop your game without any internet connection if you want to.
```
- Evennia requires [Python](https://www.python.org/downloads/) 3.10, 3.11 or 3.12 (recommended). Any OS that supports Python should work.
- Evennia requires [Python](https://www.python.org/downloads/) 3.11, 3.12 or 3.13 (recommended). Any OS that supports Python should work.
- _Windows_: In the installer, make sure to select `add python to path`. If you have multiple versions of Python installed, use `py` command instead of `python` to have Windows automatically use the latest.
- Don't install Evennia as administrator or superuser.
- Don't install Evennia as administrator or superuser.
- If you run into trouble, see [installation troubleshooting](./Installation-Troubleshooting.md).
## Install with `pip`
@ -34,11 +30,11 @@ Optional: If you use a [contrib](../Contribs/Contribs-Overview.md) that warns yo
pip install evennia[extra]
To update Evennia later, do the following:
To update Evennia later, do the following:
pip install --upgrade evennia
```{note} **Windows users only -**
```{note} **Windows users only -**
You now must run `python -m evennia` once. This should permanently make the `evennia` command available in your environment.
```
@ -46,7 +42,7 @@ Once installed, make sure the `evennia` command works. Use `evennia -h` for usag
## Initialize a New Game
We will create a new "game dir" in which to create your game. Here, and in the rest of the Evennia documentation, we refer to this game dir as `mygame`, but you should, of course, name your game whatever you like. To create the new `mygame` folder&mdash;or whatever you choose&mdash;in your current location:
We will create a new "game dir" in which to create your game. Here, and in the rest of the Evennia documentation, we refer to this game dir as `mygame`, but you should, of course, name your game whatever you like. To create the new `mygame` folder&mdash;or whatever you choose&mdash;in your current location:
```{sidebar} Game Dir vs Game Name
The game dir you create doesn't have to match the name of your game. You can change the name of your game later by editing `mygame/server/conf/settings.py`.
@ -102,21 +98,21 @@ or just:
evennia -l
Press `Ctrl-C` (`Cmd-C` for Mac) to stop viewing the live log.
Press `Ctrl-C` (`Cmd-C` for Mac) to stop viewing the live log.
You may also begin viewing the real-time log immediately by adding `-l/--log` to `evennia` commands, such as when starting the server:
evennia start -l
## Server Configuration
## Server Configuration
Your server's configuration file is `mygame/server/conf/settings.py`. It's empty by default. Copy and paste **only** the settings you want/need from the [default settings file](./Settings-Default.md) to your server's `settings.py`. See the [Settings](./Settings.md) documentation for more information before configuring your server at this time.
## Register with the Evennia Game Index (optional)
To let the world know that you are working on a new Evennia-based game, you may register your server with the _Evennia game index_ by issuing:
To let the world know that you are working on a new Evennia-based game, you may register your server with the _Evennia game index_ by issuing:
evennia connections
evennia connections
Then, just follow the prompts. You don't have to be open for players to do this &mdash; simply mark your game as closed and "pre-alpha."
@ -124,6 +120,6 @@ See [here](./Evennia-Game-Index.md) for more instructions and please [check out
## Next Steps
You are good to go!
You are good to go!
Next, why not head over to the [Starting Tutorial](../Howtos/Beginner-Tutorial/Beginner-Tutorial-Overview.md) to learn how to begin making your new game!

View file

@ -376,16 +376,16 @@ WEBCLIENT_OPTIONS = {
# The command parser module to use. See the default module for which
# functions it must implement
COMMAND_PARSER = "evennia.commands.cmdparser.cmdparser"
# On a multi-match when search objects or commands, the user has the
# On a multi-match when searching objects or commands, the user has the
# ability to search again with an index marker that differentiates
# the results. If multiple "box" objects
# are found, they can by default be separated as 1-box, 2-box. Below you
# can change the regular expression used. The regex must have one
# have two capturing groups (?P<number>...) and (?P<name>...) - the default
# parser expects this. It should also involve a number starting from 1.
# When changing this you must also update SEARCH_MULTIMATCH_TEMPLATE
# the results. If multiple "box" objects are found, they can by default
# be separated as box-1, box-2. Below you can change the regular expression
# used. The regex must have two capturing groups (?P<number>...) and
# (?P<name>...) - the default parser expects this. It may also have an
# optional (?P<args>...) group. It should also involve a number starting
# from 1. When changing this you must also update SEARCH_MULTIMATCH_TEMPLATE
# to properly describe the syntax.
SEARCH_MULTIMATCH_REGEX = r"(?P<name>[^-]*)-(?P<number>[0-9]+)(?P<args>.*)"
SEARCH_MULTIMATCH_REGEX = r"^(?P<name>.*?)-(?P<number>[0-9]+)(?P<args>(?:\s.*)?)$"
# To display multimatch errors in various listings we must display
# the syntax in a way that matches what SEARCH_MULTIMATCH_REGEX understand.
# The template will be populated with data and expects the following markup:

View file

@ -1,6 +1,6 @@
# Evennia Documentation
This is the manual of [Evennia](https://www.evennia.com), the open source Python `MU*` creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated outubro 26, 2024, see the [Evennia Changelog](Coding/Changelog.md). Latest released Evennia version is 5.0.1.
This is the manual of [Evennia](https://www.evennia.com), the open source Python `MU*` creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated January 12, 2026, see the [Evennia Changelog](Coding/Changelog.md). Latest released Evennia version is 5.0.1.
- [Introduction](./Evennia-Introduction.md) - what is this Evennia thing?
- [Evennia in Pictures](./Evennia-In-Pictures.md) - a visual overview of Evennia

View file

@ -712,21 +712,6 @@
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.NoCmdSets"><code class="docutils literal notranslate"><span class="pre">NoCmdSets</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary</span></code></a><ul>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.__init__"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.__init__()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.copy"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.copy()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.get"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.get()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.items"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.items()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.itervaluerefs()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.keys"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.keys()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.pop"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.pop()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.popitem"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.popitem()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.setdefault"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.setdefault()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.update"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.update()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.valuerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.valuerefs()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.values"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.values()</span></code></a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.chain"><code class="docutils literal notranslate"><span class="pre">chain</span></code></a><ul>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.chain.from_iterable"><code class="docutils literal notranslate"><span class="pre">chain.from_iterable()</span></code></a></li>
</ul>
@ -1898,6 +1883,7 @@
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -2270,6 +2256,7 @@
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -3243,6 +3230,10 @@
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands.test_multimatch"><code class="docutils literal notranslate"><span class="pre">TestSystemCommands.test_multimatch()</span></code></a></li>
</ul>
</li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable</span></code></a><ul>
<li class="toctree-l6"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable.test_pre_cmd()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.unloggedin.html">evennia.commands.default.unloggedin</a><ul>
@ -5433,6 +5424,7 @@
<li class="toctree-l5"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -5837,6 +5829,7 @@
<li class="toctree-l5"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -7634,6 +7627,7 @@
<li class="toctree-l5"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -470,92 +470,6 @@ or the key of such a command.</p>
<p>No cmdsets found. Critical error.</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.commands.cmdhandler.</span></span><span class="sig-name descname"><span class="pre">WeakValueDictionary</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">()</span></span></em>, <em class="sig-param"><span class="positional-only-separator o"><abbr title="Positional-only parameter separator (PEP 570)"><span class="pre">/</span></abbr></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.utils.dbserialize.html#evennia.utils.dbserialize.MutableMapping" title="collections.abc.MutableMapping"><code class="xref py py-class docutils literal notranslate"><span class="pre">MutableMapping</span></code></a></p>
<p>Mapping class that references values weakly.</p>
<p>Entries in the dictionary will be discarded when no strong
reference to the value exists anymore</p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.__init__">
<span class="sig-name descname"><span class="pre">__init__</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">other</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">()</span></span></em>, <em class="sig-param"><span class="positional-only-separator o"><abbr title="Positional-only parameter separator (PEP 570)"><span class="pre">/</span></abbr></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kw</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.__init__"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.__init__" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.copy">
<span class="sig-name descname"><span class="pre">copy</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.copy"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.copy" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.get">
<span class="sig-name descname"><span class="pre">get</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">k</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">d</span></span></em><span class="optional">]</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">D[k]</span> <span class="pre">if</span> <span class="pre">k</span> <span class="pre">in</span> <span class="pre">D,</span> <span class="pre">else</span> <span class="pre">d.</span>&#160; <span class="pre">d</span> <span class="pre">defaults</span> <span class="pre">to</span> <span class="pre">None.</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.get"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.get" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.items">
<span class="sig-name descname"><span class="pre">items</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">a</span> <span class="pre">set-like</span> <span class="pre">object</span> <span class="pre">providing</span> <span class="pre">a</span> <span class="pre">view</span> <span class="pre">on</span> <span class="pre">D's</span> <span class="pre">items</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.items"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.items" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs">
<span class="sig-name descname"><span class="pre">itervaluerefs</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.itervaluerefs"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs" title="Link to this definition"></a></dt>
<dd><p>Return an iterator that yields the weak references to the values.</p>
<p>The references are not guaranteed to be live at the time
they are used, so the result of calling the references needs
to be checked before being used. This can be used to avoid
creating references that will cause the garbage collector to
keep the values around longer than needed.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.keys">
<span class="sig-name descname"><span class="pre">keys</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">a</span> <span class="pre">set-like</span> <span class="pre">object</span> <span class="pre">providing</span> <span class="pre">a</span> <span class="pre">view</span> <span class="pre">on</span> <span class="pre">D's</span> <span class="pre">keys</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.keys"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.keys" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.pop">
<span class="sig-name descname"><span class="pre">pop</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">k</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">d</span></span></em><span class="optional">]</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">v,</span> <span class="pre">remove</span> <span class="pre">specified</span> <span class="pre">key</span> <span class="pre">and</span> <span class="pre">return</span> <span class="pre">the</span> <span class="pre">corresponding</span> <span class="pre">value.</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.pop"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.pop" title="Link to this definition"></a></dt>
<dd><p>If key is not found, d is returned if given, otherwise KeyError is raised.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.popitem">
<span class="sig-name descname"><span class="pre">popitem</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">(k,</span> <span class="pre">v),</span> <span class="pre">remove</span> <span class="pre">and</span> <span class="pre">return</span> <span class="pre">some</span> <span class="pre">(key,</span> <span class="pre">value)</span> <span class="pre">pair</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.popitem"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.popitem" title="Link to this definition"></a></dt>
<dd><p>as a 2-tuple; but raise KeyError if D is empty.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.setdefault">
<span class="sig-name descname"><span class="pre">setdefault</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">k</span></span></em><span class="optional">[</span>, <em class="sig-param"><span class="n"><span class="pre">d</span></span></em><span class="optional">]</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">D.get(k,d),</span> <span class="pre">also</span> <span class="pre">set</span> <span class="pre">D[k]=d</span> <span class="pre">if</span> <span class="pre">k</span> <span class="pre">not</span> <span class="pre">in</span> <span class="pre">D</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.setdefault"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.setdefault" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.update">
<span class="sig-name descname"><span class="pre">update</span></span><span class="sig-paren">(</span><span class="optional">[</span><em class="sig-param"><span class="n"><span class="pre">E</span></span></em>, <span class="optional">]</span><em class="sig-param"><span class="n"><span class="pre">**F</span></span></em><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">None.</span>&#160; <span class="pre">Update</span> <span class="pre">D</span> <span class="pre">from</span> <span class="pre">mapping/iterable</span> <span class="pre">E</span> <span class="pre">and</span> <span class="pre">F.</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.update"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.update" title="Link to this definition"></a></dt>
<dd><p>If E present and has a .keys() method, does: for k in E.keys(): D[k] = E[k]
If E present and lacks .keys() method, does: for (k, v) in E: D[k] = v
In either case, this is followed by: for k, v in F.items(): D[k] = v</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.valuerefs">
<span class="sig-name descname"><span class="pre">valuerefs</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.valuerefs"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.valuerefs" title="Link to this definition"></a></dt>
<dd><p>Return a list of weak references to the values.</p>
<p>The references are not guaranteed to be live at the time
they are used, so the result of calling the references needs
to be checked before being used. This can be used to avoid
creating references that will cause the garbage collector to
keep the values around longer than needed.</p>
</dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.WeakValueDictionary.values">
<span class="sig-name descname"><span class="pre">values</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span> <span class="sig-return"><span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint"><span class="pre">an</span> <span class="pre">object</span> <span class="pre">providing</span> <span class="pre">a</span> <span class="pre">view</span> <span class="pre">on</span> <span class="pre">D's</span> <span class="pre">values</span></span></span><a class="reference internal" href="../_modules/weakref.html#WeakValueDictionary.values"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.cmdhandler.WeakValueDictionary.values" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.commands.cmdhandler.chain">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.commands.cmdhandler.</span></span><span class="sig-name descname"><span class="pre">chain</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">iterables</span></span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.commands.cmdhandler.chain" title="Link to this definition"></a></dt>
@ -811,21 +725,6 @@ Could be empty if there are no matches.</p>
</ul>
</li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.NoCmdSets"><code class="docutils literal notranslate"><span class="pre">NoCmdSets</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary</span></code></a><ul>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.__init__"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.copy"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.copy()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.get"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.get()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.items"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.items()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.itervaluerefs()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.keys"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.keys()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.pop"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.pop()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.popitem"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.popitem()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.setdefault"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.setdefault()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.update"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.update()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.valuerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.valuerefs()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.WeakValueDictionary.values"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.values()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.chain"><code class="docutils literal notranslate"><span class="pre">chain</span></code></a><ul>
<li><a class="reference internal" href="#evennia.commands.cmdhandler.chain.from_iterable"><code class="docutils literal notranslate"><span class="pre">chain.from_iterable()</span></code></a></li>
</ul>

View file

@ -81,7 +81,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.account.CmdOOCLook.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['l',</span> <span class="pre">'ls']</span></em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['ls',</span> <span class="pre">'l']</span></em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -112,7 +112,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.account.CmdOOCLook.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'l</span> <span class="pre">ls',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">l</span> <span class="pre">ls',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlook</span> <span class="pre">while</span> <span class="pre">out-of-character\n\nUsage:\n</span>&#160; <span class="pre">look\n\nLook</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">ooc</span> <span class="pre">state.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'ls</span> <span class="pre">l',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">ls</span> <span class="pre">l',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlook</span> <span class="pre">while</span> <span class="pre">out-of-character\n\nUsage:\n</span>&#160; <span class="pre">look\n\nLook</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">ooc</span> <span class="pre">state.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -86,7 +86,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.batchprocess.CmdBatchCommands.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['batchcmd',</span> <span class="pre">'batchcommand']</span></em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['batchcommand',</span> <span class="pre">'batchcmd']</span></em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -117,7 +117,7 @@ skipping, reloading etc.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'batchcmd</span> <span class="pre">batchcommand',</span> <span class="pre">'category':</span> <span class="pre">'building',</span> <span class="pre">'key':</span> <span class="pre">'batchcommands',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">batchcmd</span> <span class="pre">batchcommand',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nbuild</span> <span class="pre">from</span> <span class="pre">batch-command</span> <span class="pre">file\n\nUsage:\n</span> <span class="pre">batchcommands[/interactive]</span> <span class="pre">&lt;python.path.to.file&gt;\n\nSwitch:\n</span>&#160;&#160; <span class="pre">interactive</span> <span class="pre">-</span> <span class="pre">this</span> <span class="pre">mode</span> <span class="pre">will</span> <span class="pre">offer</span> <span class="pre">more</span> <span class="pre">control</span> <span class="pre">when\n</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">executing</span> <span class="pre">the</span> <span class="pre">batch</span> <span class="pre">file,</span> <span class="pre">like</span> <span class="pre">stepping,\n</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">skipping,</span> <span class="pre">reloading</span> <span class="pre">etc.\n\nRuns</span> <span class="pre">batches</span> <span class="pre">of</span> <span class="pre">commands</span> <span class="pre">from</span> <span class="pre">a</span> <span class="pre">batch-cmd</span> <span class="pre">text</span> <span class="pre">file</span> <span class="pre">(*.ev).\n\n'}</span></em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'batchcommand</span> <span class="pre">batchcmd',</span> <span class="pre">'category':</span> <span class="pre">'building',</span> <span class="pre">'key':</span> <span class="pre">'batchcommands',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">batchcommand</span> <span class="pre">batchcmd',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nbuild</span> <span class="pre">from</span> <span class="pre">batch-command</span> <span class="pre">file\n\nUsage:\n</span> <span class="pre">batchcommands[/interactive]</span> <span class="pre">&lt;python.path.to.file&gt;\n\nSwitch:\n</span>&#160;&#160; <span class="pre">interactive</span> <span class="pre">-</span> <span class="pre">this</span> <span class="pre">mode</span> <span class="pre">will</span> <span class="pre">offer</span> <span class="pre">more</span> <span class="pre">control</span> <span class="pre">when\n</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">executing</span> <span class="pre">the</span> <span class="pre">batch</span> <span class="pre">file,</span> <span class="pre">like</span> <span class="pre">stepping,\n</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">skipping,</span> <span class="pre">reloading</span> <span class="pre">etc.\n\nRuns</span> <span class="pre">batches</span> <span class="pre">of</span> <span class="pre">commands</span> <span class="pre">from</span> <span class="pre">a</span> <span class="pre">batch-cmd</span> <span class="pre">text</span> <span class="pre">file</span> <span class="pre">(*.ev).\n\n'}</span></em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

File diff suppressed because one or more lines are too long

View file

@ -3126,6 +3126,11 @@ matches against the expressions.</p>
<span class="sig-name descname"><span class="pre">conditional</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">True</span></em><a class="headerlink" href="#evennia.commands.default.comms.Q.conditional" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.comms.Q.connectors">
<span class="sig-name descname"><span class="pre">connectors</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">(None,</span> <span class="pre">'AND',</span> <span class="pre">'OR',</span> <span class="pre">'XOR')</span></em><a class="headerlink" href="#evennia.commands.default.comms.Q.connectors" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.default.comms.Q.deconstruct">
<span class="sig-name descname"><span class="pre">deconstruct</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/django/db/models/query_utils.html#Q.deconstruct"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.default.comms.Q.deconstruct" title="Link to this definition"></a></dt>
@ -3586,6 +3591,7 @@ all if the file is shorter than nlines.</p>
<li><a class="reference internal" href="#evennia.commands.default.comms.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.default.comms.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.default.comms.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.default.comms.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.default.comms.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.default.comms.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li><a class="reference internal" href="#evennia.commands.default.comms.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

File diff suppressed because one or more lines are too long

View file

@ -1048,6 +1048,7 @@
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -1420,6 +1421,7 @@
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -2393,6 +2395,10 @@
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands.test_multimatch"><code class="docutils literal notranslate"><span class="pre">TestSystemCommands.test_multimatch()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable.test_pre_cmd()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="evennia.commands.default.unloggedin.html">evennia.commands.default.unloggedin</a><ul>

File diff suppressed because one or more lines are too long

View file

@ -1087,6 +1087,17 @@ set in self.parse())</p>
</dd></dl>
<dl class="py class">
<dt class="sig sig-object py" id="evennia.commands.default.tests.TestPreCmdOutputTestable">
<em class="property"><span class="k"><span class="pre">class</span></span><span class="w"> </span></em><span class="sig-prename descclassname"><span class="pre">evennia.commands.default.tests.</span></span><span class="sig-name descname"><span class="pre">TestPreCmdOutputTestable</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="n"><span class="pre">methodName</span></span><span class="o"><span class="pre">=</span></span><span class="default_value"><span class="pre">'runTest'</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestPreCmdOutputTestable"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.default.tests.TestPreCmdOutputTestable" title="Link to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.utils.test_resources.html#evennia.utils.test_resources.BaseEvenniaCommandTest" title="evennia.utils.test_resources.BaseEvenniaCommandTest"><code class="xref py py-class docutils literal notranslate"><span class="pre">BaseEvenniaCommandTest</span></code></a></p>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd">
<span class="sig-name descname"><span class="pre">test_pre_cmd</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestPreCmdOutputTestable.test_pre_cmd"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
@ -1324,6 +1335,10 @@ set in self.parse())</p>
<li><a class="reference internal" href="#evennia.commands.default.tests.TestSystemCommands.test_multimatch"><code class="docutils literal notranslate"><span class="pre">TestSystemCommands.test_multimatch()</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#evennia.commands.default.tests.TestPreCmdOutputTestable"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable</span></code></a><ul>
<li><a class="reference internal" href="#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable.test_pre_cmd()</span></code></a></li>
</ul>
</li>
</ul>
</li>
</ul>

View file

@ -70,7 +70,7 @@ connect “account name” “pass word”</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['conn',</span> <span class="pre">'co',</span> <span class="pre">'con']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['con',</span> <span class="pre">'co',</span> <span class="pre">'conn']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -105,7 +105,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'conn</span> <span class="pre">co</span> <span class="pre">con',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'connect',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">conn</span> <span class="pre">co</span> <span class="pre">con',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nconnect</span> <span class="pre">to</span> <span class="pre">the</span> <span class="pre">game\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160; <span class="pre">connect</span> <span class="pre">accountname</span> <span class="pre">password\n</span>&#160; <span class="pre">connect</span> <span class="pre">&quot;account</span> <span class="pre">name&quot;</span> <span class="pre">&quot;pass</span> <span class="pre">word&quot;\n\nUse</span> <span class="pre">the</span> <span class="pre">create</span> <span class="pre">command</span> <span class="pre">to</span> <span class="pre">first</span> <span class="pre">create</span> <span class="pre">an</span> <span class="pre">account</span> <span class="pre">before</span> <span class="pre">logging</span> <span class="pre">in.\n\nIf</span> <span class="pre">you</span> <span class="pre">have</span> <span class="pre">spaces</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">name,</span> <span class="pre">enclose</span> <span class="pre">it</span> <span class="pre">in</span> <span class="pre">double</span> <span class="pre">quotes.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'con</span> <span class="pre">co</span> <span class="pre">conn',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'connect',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">con</span> <span class="pre">co</span> <span class="pre">conn',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nconnect</span> <span class="pre">to</span> <span class="pre">the</span> <span class="pre">game\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160; <span class="pre">connect</span> <span class="pre">accountname</span> <span class="pre">password\n</span>&#160; <span class="pre">connect</span> <span class="pre">&quot;account</span> <span class="pre">name&quot;</span> <span class="pre">&quot;pass</span> <span class="pre">word&quot;\n\nUse</span> <span class="pre">the</span> <span class="pre">create</span> <span class="pre">command</span> <span class="pre">to</span> <span class="pre">first</span> <span class="pre">create</span> <span class="pre">an</span> <span class="pre">account</span> <span class="pre">before</span> <span class="pre">logging</span> <span class="pre">in.\n\nIf</span> <span class="pre">you</span> <span class="pre">have</span> <span class="pre">spaces</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">name,</span> <span class="pre">enclose</span> <span class="pre">it</span> <span class="pre">in</span> <span class="pre">double</span> <span class="pre">quotes.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -129,7 +129,7 @@ create “account name” “pass word”</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedCreate.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['cr',</span> <span class="pre">'cre']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['cre',</span> <span class="pre">'cr']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -166,7 +166,7 @@ create “account name” “pass word”</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedCreate.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'cr</span> <span class="pre">cre',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'create',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">cr</span> <span class="pre">cre',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\ncreate</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account</span> <span class="pre">account\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160; <span class="pre">create</span> <span class="pre">&lt;accountname&gt;</span> <span class="pre">&lt;password&gt;\n</span>&#160; <span class="pre">create</span> <span class="pre">&quot;account</span> <span class="pre">name&quot;</span> <span class="pre">&quot;pass</span> <span class="pre">word&quot;\n\nThis</span> <span class="pre">creates</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account</span> <span class="pre">account.\n\nIf</span> <span class="pre">you</span> <span class="pre">have</span> <span class="pre">spaces</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">name,</span> <span class="pre">enclose</span> <span class="pre">it</span> <span class="pre">in</span> <span class="pre">double</span> <span class="pre">quotes.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'cre</span> <span class="pre">cr',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'create',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">cre</span> <span class="pre">cr',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\ncreate</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account</span> <span class="pre">account\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160; <span class="pre">create</span> <span class="pre">&lt;accountname&gt;</span> <span class="pre">&lt;password&gt;\n</span>&#160; <span class="pre">create</span> <span class="pre">&quot;account</span> <span class="pre">name&quot;</span> <span class="pre">&quot;pass</span> <span class="pre">word&quot;\n\nThis</span> <span class="pre">creates</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account</span> <span class="pre">account.\n\nIf</span> <span class="pre">you</span> <span class="pre">have</span> <span class="pre">spaces</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">name,</span> <span class="pre">enclose</span> <span class="pre">it</span> <span class="pre">in</span> <span class="pre">double</span> <span class="pre">quotes.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedCreate.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -190,7 +190,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['q',</span> <span class="pre">'qu']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['qu',</span> <span class="pre">'q']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -216,7 +216,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'q</span> <span class="pre">qu',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'quit',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">q</span> <span class="pre">qu',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nquit</span> <span class="pre">when</span> <span class="pre">in</span> <span class="pre">unlogged-in</span> <span class="pre">state\n\nUsage:\n</span>&#160; <span class="pre">quit\n\nWe</span> <span class="pre">maintain</span> <span class="pre">a</span> <span class="pre">different</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">quit</span> <span class="pre">command\nhere</span> <span class="pre">for</span> <span class="pre">unconnected</span> <span class="pre">accounts</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">sake</span> <span class="pre">of</span> <span class="pre">simplicity.</span> <span class="pre">The</span> <span class="pre">logged</span> <span class="pre">in\nversion</span> <span class="pre">is</span> <span class="pre">a</span> <span class="pre">bit</span> <span class="pre">more</span> <span class="pre">complicated.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'qu</span> <span class="pre">q',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'quit',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">qu</span> <span class="pre">q',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nquit</span> <span class="pre">when</span> <span class="pre">in</span> <span class="pre">unlogged-in</span> <span class="pre">state\n\nUsage:\n</span>&#160; <span class="pre">quit\n\nWe</span> <span class="pre">maintain</span> <span class="pre">a</span> <span class="pre">different</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">quit</span> <span class="pre">command\nhere</span> <span class="pre">for</span> <span class="pre">unconnected</span> <span class="pre">accounts</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">sake</span> <span class="pre">of</span> <span class="pre">simplicity.</span> <span class="pre">The</span> <span class="pre">logged</span> <span class="pre">in\nversion</span> <span class="pre">is</span> <span class="pre">a</span> <span class="pre">bit</span> <span class="pre">more</span> <span class="pre">complicated.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -289,7 +289,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['?',</span> <span class="pre">'h']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['h',</span> <span class="pre">'?']</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -315,7 +315,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'?</span> <span class="pre">h',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'help',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">?</span> <span class="pre">h',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nget</span> <span class="pre">help</span> <span class="pre">when</span> <span class="pre">in</span> <span class="pre">unconnected-in</span> <span class="pre">state\n\nUsage:\n</span>&#160; <span class="pre">help\n\nThis</span> <span class="pre">is</span> <span class="pre">an</span> <span class="pre">unconnected</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">help</span> <span class="pre">command,\nfor</span> <span class="pre">simplicity.</span> <span class="pre">It</span> <span class="pre">shows</span> <span class="pre">a</span> <span class="pre">pane</span> <span class="pre">of</span> <span class="pre">info.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'h</span> <span class="pre">?',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'help',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">h</span> <span class="pre">?',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nget</span> <span class="pre">help</span> <span class="pre">when</span> <span class="pre">in</span> <span class="pre">unconnected-in</span> <span class="pre">state\n\nUsage:\n</span>&#160; <span class="pre">help\n\nThis</span> <span class="pre">is</span> <span class="pre">an</span> <span class="pre">unconnected</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">help</span> <span class="pre">command,\nfor</span> <span class="pre">simplicity.</span> <span class="pre">It</span> <span class="pre">shows</span> <span class="pre">a</span> <span class="pre">pane</span> <span class="pre">of</span> <span class="pre">info.\n'}</span></em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -91,21 +91,6 @@ Evennia.</p>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.NoCmdSets"><code class="docutils literal notranslate"><span class="pre">NoCmdSets</span></code></a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.__init__"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.__init__()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.copy"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.copy()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.get"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.get()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.items"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.items()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.itervaluerefs()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.keys"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.keys()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.pop"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.pop()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.popitem"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.popitem()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.setdefault"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.setdefault()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.update"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.update()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.valuerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.valuerefs()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.values"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.values()</span></code></a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.chain"><code class="docutils literal notranslate"><span class="pre">chain</span></code></a><ul>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.chain.from_iterable"><code class="docutils literal notranslate"><span class="pre">chain.from_iterable()</span></code></a></li>
</ul>
@ -1284,6 +1269,7 @@ Evennia.</p>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -1656,6 +1642,7 @@ Evennia.</p>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -2629,6 +2616,10 @@ Evennia.</p>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands.test_multimatch"><code class="docutils literal notranslate"><span class="pre">TestSystemCommands.test_multimatch()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable.test_pre_cmd()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="evennia.commands.default.unloggedin.html">evennia.commands.default.unloggedin</a><ul>

View file

@ -87,7 +87,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['conn',</span> <span class="pre">'co',</span> <span class="pre">'con']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['con',</span> <span class="pre">'co',</span> <span class="pre">'conn']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -117,7 +117,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'conn</span> <span class="pre">co</span> <span class="pre">con',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'connect',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">conn</span> <span class="pre">co</span> <span class="pre">con',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nConnect</span> <span class="pre">to</span> <span class="pre">the</span> <span class="pre">game.\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160;&#160;&#160; <span class="pre">connect</span> <span class="pre">&lt;email&gt;</span> <span class="pre">&lt;password&gt;\n\nUse</span> <span class="pre">the</span> <span class="pre">create</span> <span class="pre">command</span> <span class="pre">to</span> <span class="pre">first</span> <span class="pre">create</span> <span class="pre">an</span> <span class="pre">account</span> <span class="pre">before</span> <span class="pre">logging</span> <span class="pre">in.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'con</span> <span class="pre">co</span> <span class="pre">conn',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'connect',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">con</span> <span class="pre">co</span> <span class="pre">conn',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nConnect</span> <span class="pre">to</span> <span class="pre">the</span> <span class="pre">game.\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160;&#160;&#160; <span class="pre">connect</span> <span class="pre">&lt;email&gt;</span> <span class="pre">&lt;password&gt;\n\nUse</span> <span class="pre">the</span> <span class="pre">create</span> <span class="pre">command</span> <span class="pre">to</span> <span class="pre">first</span> <span class="pre">create</span> <span class="pre">an</span> <span class="pre">account</span> <span class="pre">before</span> <span class="pre">logging</span> <span class="pre">in.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -139,7 +139,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedCreate.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['cr',</span> <span class="pre">'cre']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedCreate.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['cre',</span> <span class="pre">'cr']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedCreate.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -181,7 +181,7 @@ name enclosed in quotes:</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedCreate.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'cr</span> <span class="pre">cre',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'create',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">cr</span> <span class="pre">cre',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nCreate</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account.\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160;&#160;&#160; <span class="pre">create</span> <span class="pre">&quot;accountname&quot;</span> <span class="pre">&lt;email&gt;</span> <span class="pre">&lt;password&gt;\n\nThis</span> <span class="pre">creates</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account</span> <span class="pre">account.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedCreate.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'cre</span> <span class="pre">cr',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'create',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">cre</span> <span class="pre">cr',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nCreate</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account.\n\nUsage</span> <span class="pre">(at</span> <span class="pre">login</span> <span class="pre">screen):\n</span>&#160;&#160;&#160; <span class="pre">create</span> <span class="pre">&quot;accountname&quot;</span> <span class="pre">&lt;email&gt;</span> <span class="pre">&lt;password&gt;\n\nThis</span> <span class="pre">creates</span> <span class="pre">a</span> <span class="pre">new</span> <span class="pre">account</span> <span class="pre">account.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedCreate.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -200,7 +200,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['q',</span> <span class="pre">'qu']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['qu',</span> <span class="pre">'q']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -226,7 +226,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'q</span> <span class="pre">qu',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'quit',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">q</span> <span class="pre">qu',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nWe</span> <span class="pre">maintain</span> <span class="pre">a</span> <span class="pre">different</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">`quit`</span> <span class="pre">command\nhere</span> <span class="pre">for</span> <span class="pre">unconnected</span> <span class="pre">accounts</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">sake</span> <span class="pre">of</span> <span class="pre">simplicity.</span> <span class="pre">The</span> <span class="pre">logged</span> <span class="pre">in\nversion</span> <span class="pre">is</span> <span class="pre">a</span> <span class="pre">bit</span> <span class="pre">more</span> <span class="pre">complicated.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'qu</span> <span class="pre">q',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'quit',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">qu</span> <span class="pre">q',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nWe</span> <span class="pre">maintain</span> <span class="pre">a</span> <span class="pre">different</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">`quit`</span> <span class="pre">command\nhere</span> <span class="pre">for</span> <span class="pre">unconnected</span> <span class="pre">accounts</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">sake</span> <span class="pre">of</span> <span class="pre">simplicity.</span> <span class="pre">The</span> <span class="pre">logged</span> <span class="pre">in\nversion</span> <span class="pre">is</span> <span class="pre">a</span> <span class="pre">bit</span> <span class="pre">more</span> <span class="pre">complicated.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedQuit.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -289,7 +289,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['?',</span> <span class="pre">'h']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['h',</span> <span class="pre">'?']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -315,7 +315,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'?</span> <span class="pre">h',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'help',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">?</span> <span class="pre">h',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nThis</span> <span class="pre">is</span> <span class="pre">an</span> <span class="pre">unconnected</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">help</span> <span class="pre">command,\nfor</span> <span class="pre">simplicity.</span> <span class="pre">It</span> <span class="pre">shows</span> <span class="pre">a</span> <span class="pre">pane</span> <span class="pre">of</span> <span class="pre">info.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'h</span> <span class="pre">?',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'help',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">h</span> <span class="pre">?',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nThis</span> <span class="pre">is</span> <span class="pre">an</span> <span class="pre">unconnected</span> <span class="pre">version</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">help</span> <span class="pre">command,\nfor</span> <span class="pre">simplicity.</span> <span class="pre">It</span> <span class="pre">shows</span> <span class="pre">a</span> <span class="pre">pane</span> <span class="pre">of</span> <span class="pre">info.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedHelp.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -64,7 +64,7 @@
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['&#64;callback',</span> <span class="pre">'&#64;callbacks',</span> <span class="pre">'&#64;calls']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['&#64;calls',</span> <span class="pre">'&#64;callbacks',</span> <span class="pre">'&#64;callback']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -145,7 +145,7 @@ on user permission.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'&#64;callback</span> <span class="pre">&#64;callbacks</span> <span class="pre">&#64;calls',</span> <span class="pre">'category':</span> <span class="pre">'building',</span> <span class="pre">'key':</span> <span class="pre">'&#64;call',</span> <span class="pre">'no_prefix':</span> <span class="pre">'call</span> <span class="pre">callback</span> <span class="pre">callbacks</span> <span class="pre">calls',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nCommand</span> <span class="pre">to</span> <span class="pre">edit</span> <span class="pre">callbacks.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'&#64;calls</span> <span class="pre">&#64;callbacks</span> <span class="pre">&#64;callback',</span> <span class="pre">'category':</span> <span class="pre">'building',</span> <span class="pre">'key':</span> <span class="pre">'&#64;call',</span> <span class="pre">'no_prefix':</span> <span class="pre">'call</span> <span class="pre">calls</span> <span class="pre">callbacks</span> <span class="pre">callback',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nCommand</span> <span class="pre">to</span> <span class="pre">edit</span> <span class="pre">callbacks.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -100,7 +100,7 @@ players</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_reports.reports.CmdManageReports.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['manage</span> <span class="pre">players',</span> <span class="pre">'manage</span> <span class="pre">ideas',</span> <span class="pre">'manage</span> <span class="pre">bugs']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_reports.reports.CmdManageReports.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['manage</span> <span class="pre">bugs',</span> <span class="pre">'manage</span> <span class="pre">players',</span> <span class="pre">'manage</span> <span class="pre">ideas']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_reports.reports.CmdManageReports.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -136,7 +136,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.ingame_reports.reports.CmdManageReports.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'manage</span> <span class="pre">players</span> <span class="pre">manage</span> <span class="pre">ideas</span> <span class="pre">manage</span> <span class="pre">bugs',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'manage</span> <span class="pre">reports',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">manage</span> <span class="pre">players</span> <span class="pre">manage</span> <span class="pre">ideas</span> <span class="pre">manage</span> <span class="pre">bugs',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nmanage</span> <span class="pre">the</span> <span class="pre">various</span> <span class="pre">reports\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">manage</span> <span class="pre">[report</span> <span class="pre">type]\n\nAvailable</span> <span class="pre">report</span> <span class="pre">types:\n</span>&#160;&#160;&#160; <span class="pre">bugs\n</span>&#160;&#160;&#160; <span class="pre">ideas\n</span>&#160;&#160;&#160; <span class="pre">players\n\nInitializes</span> <span class="pre">a</span> <span class="pre">menu</span> <span class="pre">for</span> <span class="pre">reviewing</span> <span class="pre">and</span> <span class="pre">changing</span> <span class="pre">the</span> <span class="pre">status</span> <span class="pre">of</span> <span class="pre">current</span> <span class="pre">reports.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_reports.reports.CmdManageReports.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'manage</span> <span class="pre">bugs</span> <span class="pre">manage</span> <span class="pre">players</span> <span class="pre">manage</span> <span class="pre">ideas',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'manage</span> <span class="pre">reports',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">manage</span> <span class="pre">bugs</span> <span class="pre">manage</span> <span class="pre">players</span> <span class="pre">manage</span> <span class="pre">ideas',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nmanage</span> <span class="pre">the</span> <span class="pre">various</span> <span class="pre">reports\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">manage</span> <span class="pre">[report</span> <span class="pre">type]\n\nAvailable</span> <span class="pre">report</span> <span class="pre">types:\n</span>&#160;&#160;&#160; <span class="pre">bugs\n</span>&#160;&#160;&#160; <span class="pre">ideas\n</span>&#160;&#160;&#160; <span class="pre">players\n\nInitializes</span> <span class="pre">a</span> <span class="pre">menu</span> <span class="pre">for</span> <span class="pre">reviewing</span> <span class="pre">and</span> <span class="pre">changing</span> <span class="pre">the</span> <span class="pre">status</span> <span class="pre">of</span> <span class="pre">current</span> <span class="pre">reports.\n'}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_reports.reports.CmdManageReports.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -165,7 +165,7 @@ for that channel.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['delaliaschan',</span> <span class="pre">'delchanalias']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['delchanalias',</span> <span class="pre">'delaliaschan']</span></em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -196,7 +196,7 @@ for that channel.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'delaliaschan</span> <span class="pre">delchanalias',</span> <span class="pre">'category':</span> <span class="pre">'comms',</span> <span class="pre">'key':</span> <span class="pre">'delcom',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">delaliaschan</span> <span class="pre">delchanalias',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">&quot;\nremove</span> <span class="pre">a</span> <span class="pre">channel</span> <span class="pre">alias</span> <span class="pre">and/or</span> <span class="pre">unsubscribe</span> <span class="pre">from</span> <span class="pre">channel\n\nUsage:\n</span>&#160;&#160; <span class="pre">delcom</span> <span class="pre">&lt;alias</span> <span class="pre">or</span> <span class="pre">channel&gt;\n</span>&#160;&#160; <span class="pre">delcom/all</span> <span class="pre">&lt;channel&gt;\n\nIf</span> <span class="pre">the</span> <span class="pre">full</span> <span class="pre">channel</span> <span class="pre">name</span> <span class="pre">is</span> <span class="pre">given,</span> <span class="pre">unsubscribe</span> <span class="pre">from</span> <span class="pre">the\nchannel.</span> <span class="pre">If</span> <span class="pre">an</span> <span class="pre">alias</span> <span class="pre">is</span> <span class="pre">given,</span> <span class="pre">remove</span> <span class="pre">the</span> <span class="pre">alias</span> <span class="pre">but</span> <span class="pre">don't\nunsubscribe.</span> <span class="pre">If</span> <span class="pre">the</span> <span class="pre">'all'</span> <span class="pre">switch</span> <span class="pre">is</span> <span class="pre">used,</span> <span class="pre">remove</span> <span class="pre">all</span> <span class="pre">aliases\nfor</span> <span class="pre">that</span> <span class="pre">channel.\n&quot;}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'delchanalias</span> <span class="pre">delaliaschan',</span> <span class="pre">'category':</span> <span class="pre">'comms',</span> <span class="pre">'key':</span> <span class="pre">'delcom',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">delchanalias</span> <span class="pre">delaliaschan',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">&quot;\nremove</span> <span class="pre">a</span> <span class="pre">channel</span> <span class="pre">alias</span> <span class="pre">and/or</span> <span class="pre">unsubscribe</span> <span class="pre">from</span> <span class="pre">channel\n\nUsage:\n</span>&#160;&#160; <span class="pre">delcom</span> <span class="pre">&lt;alias</span> <span class="pre">or</span> <span class="pre">channel&gt;\n</span>&#160;&#160; <span class="pre">delcom/all</span> <span class="pre">&lt;channel&gt;\n\nIf</span> <span class="pre">the</span> <span class="pre">full</span> <span class="pre">channel</span> <span class="pre">name</span> <span class="pre">is</span> <span class="pre">given,</span> <span class="pre">unsubscribe</span> <span class="pre">from</span> <span class="pre">the\nchannel.</span> <span class="pre">If</span> <span class="pre">an</span> <span class="pre">alias</span> <span class="pre">is</span> <span class="pre">given,</span> <span class="pre">remove</span> <span class="pre">the</span> <span class="pre">alias</span> <span class="pre">but</span> <span class="pre">don't\nunsubscribe.</span> <span class="pre">If</span> <span class="pre">the</span> <span class="pre">'all'</span> <span class="pre">switch</span> <span class="pre">is</span> <span class="pre">used,</span> <span class="pre">remove</span> <span class="pre">all</span> <span class="pre">aliases\nfor</span> <span class="pre">that</span> <span class="pre">channel.\n&quot;}</span></em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -159,7 +159,7 @@ the operation will be general or on the room.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['chicken</span> <span class="pre">out',</span> <span class="pre">'abort',</span> <span class="pre">'q',</span> <span class="pre">'quit']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['abort',</span> <span class="pre">'chicken</span> <span class="pre">out',</span> <span class="pre">'quit',</span> <span class="pre">'q']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -183,7 +183,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'chicken</span> <span class="pre">out</span> <span class="pre">abort</span> <span class="pre">q</span> <span class="pre">quit',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'give</span> <span class="pre">up',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">chicken</span> <span class="pre">out</span> <span class="pre">abort</span> <span class="pre">q</span> <span class="pre">quit',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nGive</span> <span class="pre">up\n\nUsage:\n</span>&#160; <span class="pre">give</span> <span class="pre">up\n\nAbandons</span> <span class="pre">your</span> <span class="pre">attempts</span> <span class="pre">at</span> <span class="pre">escaping</span> <span class="pre">and</span> <span class="pre">of</span> <span class="pre">ever</span> <span class="pre">winning</span> <span class="pre">the</span> <span class="pre">pie-eating</span> <span class="pre">contest.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'abort</span> <span class="pre">chicken</span> <span class="pre">out</span> <span class="pre">quit</span> <span class="pre">q',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'give</span> <span class="pre">up',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">abort</span> <span class="pre">chicken</span> <span class="pre">out</span> <span class="pre">quit</span> <span class="pre">q',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nGive</span> <span class="pre">up\n\nUsage:\n</span>&#160; <span class="pre">give</span> <span class="pre">up\n\nAbandons</span> <span class="pre">your</span> <span class="pre">attempts</span> <span class="pre">at</span> <span class="pre">escaping</span> <span class="pre">and</span> <span class="pre">of</span> <span class="pre">ever</span> <span class="pre">winning</span> <span class="pre">the</span> <span class="pre">pie-eating</span> <span class="pre">contest.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -204,7 +204,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['l',</span> <span class="pre">'ls']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['ls',</span> <span class="pre">'l']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -238,7 +238,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'l</span> <span class="pre">ls',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">l</span> <span class="pre">ls',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nLook</span> <span class="pre">at</span> <span class="pre">the</span> <span class="pre">room,</span> <span class="pre">an</span> <span class="pre">object</span> <span class="pre">or</span> <span class="pre">the</span> <span class="pre">currently</span> <span class="pre">focused</span> <span class="pre">object\n\nUsage:\n</span>&#160; <span class="pre">look</span> <span class="pre">[obj]\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'ls</span> <span class="pre">l',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">ls</span> <span class="pre">l',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nLook</span> <span class="pre">at</span> <span class="pre">the</span> <span class="pre">room,</span> <span class="pre">an</span> <span class="pre">object</span> <span class="pre">or</span> <span class="pre">the</span> <span class="pre">currently</span> <span class="pre">focused</span> <span class="pre">object\n\nUsage:\n</span>&#160; <span class="pre">look</span> <span class="pre">[obj]\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdLook.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -319,7 +319,7 @@ shout</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['whisper',</span> <span class="pre">';',</span> <span class="pre">'shout']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['shout',</span> <span class="pre">'whisper',</span> <span class="pre">';']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -348,7 +348,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'whisper</span> <span class="pre">;</span> <span class="pre">shout',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'say',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">whisper</span> <span class="pre">;</span> <span class="pre">shout',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPerform</span> <span class="pre">an</span> <span class="pre">communication</span> <span class="pre">action.\n\nUsage:\n</span>&#160; <span class="pre">say</span> <span class="pre">&lt;text&gt;\n</span>&#160; <span class="pre">whisper\n</span>&#160; <span class="pre">shout\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'shout</span> <span class="pre">whisper</span> <span class="pre">;',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'say',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">shout</span> <span class="pre">whisper</span> <span class="pre">;',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPerform</span> <span class="pre">an</span> <span class="pre">communication</span> <span class="pre">action.\n\nUsage:\n</span>&#160; <span class="pre">say</span> <span class="pre">&lt;text&gt;\n</span>&#160; <span class="pre">whisper\n</span>&#160; <span class="pre">shout\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -376,7 +376,7 @@ emote /me points to /box and /lever.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['pose',</span> <span class="pre">':']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">[':',</span> <span class="pre">'pose']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -415,7 +415,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'pose</span> <span class="pre">:',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'emote',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">pose</span> <span class="pre">:',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPerform</span> <span class="pre">a</span> <span class="pre">free-form</span> <span class="pre">emote.</span> <span class="pre">Use</span> <span class="pre">/me</span> <span class="pre">to\ninclude</span> <span class="pre">yourself</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">emote</span> <span class="pre">and</span> <span class="pre">/name\nto</span> <span class="pre">include</span> <span class="pre">other</span> <span class="pre">objects</span> <span class="pre">or</span> <span class="pre">characters.\nUse</span> <span class="pre">&quot;...&quot;</span> <span class="pre">to</span> <span class="pre">enact</span> <span class="pre">speech.\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">emote</span> <span class="pre">&lt;emote&gt;\n</span>&#160;&#160;&#160; <span class="pre">:&lt;emote\n\nExample:\n</span>&#160;&#160;&#160; <span class="pre">emote</span> <span class="pre">/me</span> <span class="pre">smiles</span> <span class="pre">at</span> <span class="pre">/peter\n</span>&#160;&#160;&#160; <span class="pre">emote</span> <span class="pre">/me</span> <span class="pre">points</span> <span class="pre">to</span> <span class="pre">/box</span> <span class="pre">and</span> <span class="pre">/lever.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">':</span> <span class="pre">pose',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'emote',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">:</span> <span class="pre">pose',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPerform</span> <span class="pre">a</span> <span class="pre">free-form</span> <span class="pre">emote.</span> <span class="pre">Use</span> <span class="pre">/me</span> <span class="pre">to\ninclude</span> <span class="pre">yourself</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">emote</span> <span class="pre">and</span> <span class="pre">/name\nto</span> <span class="pre">include</span> <span class="pre">other</span> <span class="pre">objects</span> <span class="pre">or</span> <span class="pre">characters.\nUse</span> <span class="pre">&quot;...&quot;</span> <span class="pre">to</span> <span class="pre">enact</span> <span class="pre">speech.\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">emote</span> <span class="pre">&lt;emote&gt;\n</span>&#160;&#160;&#160; <span class="pre">:&lt;emote\n\nExample:\n</span>&#160;&#160;&#160; <span class="pre">emote</span> <span class="pre">/me</span> <span class="pre">smiles</span> <span class="pre">at</span> <span class="pre">/peter\n</span>&#160;&#160;&#160; <span class="pre">emote</span> <span class="pre">/me</span> <span class="pre">points</span> <span class="pre">to</span> <span class="pre">/box</span> <span class="pre">and</span> <span class="pre">/lever.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdEmote.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -438,7 +438,7 @@ looks and what actions is available.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['examine',</span> <span class="pre">'e',</span> <span class="pre">'ex',</span> <span class="pre">'unfocus']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['examine',</span> <span class="pre">'unfocus',</span> <span class="pre">'ex',</span> <span class="pre">'e']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -467,7 +467,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'examine</span> <span class="pre">e</span> <span class="pre">ex</span> <span class="pre">unfocus',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'focus',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">examine</span> <span class="pre">e</span> <span class="pre">ex</span> <span class="pre">unfocus',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nFocus</span> <span class="pre">your</span> <span class="pre">attention</span> <span class="pre">on</span> <span class="pre">a</span> <span class="pre">target.\n\nUsage:\n</span>&#160; <span class="pre">focus</span> <span class="pre">&lt;obj&gt;\n\nOnce</span> <span class="pre">focusing</span> <span class="pre">on</span> <span class="pre">an</span> <span class="pre">object,</span> <span class="pre">use</span> <span class="pre">look</span> <span class="pre">to</span> <span class="pre">get</span> <span class="pre">more</span> <span class="pre">information</span> <span class="pre">about</span> <span class="pre">how</span> <span class="pre">it\nlooks</span> <span class="pre">and</span> <span class="pre">what</span> <span class="pre">actions</span> <span class="pre">is</span> <span class="pre">available.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'examine</span> <span class="pre">unfocus</span> <span class="pre">ex</span> <span class="pre">e',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'focus',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">examine</span> <span class="pre">unfocus</span> <span class="pre">ex</span> <span class="pre">e',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nFocus</span> <span class="pre">your</span> <span class="pre">attention</span> <span class="pre">on</span> <span class="pre">a</span> <span class="pre">target.\n\nUsage:\n</span>&#160; <span class="pre">focus</span> <span class="pre">&lt;obj&gt;\n\nOnce</span> <span class="pre">focusing</span> <span class="pre">on</span> <span class="pre">an</span> <span class="pre">object,</span> <span class="pre">use</span> <span class="pre">look</span> <span class="pre">to</span> <span class="pre">get</span> <span class="pre">more</span> <span class="pre">information</span> <span class="pre">about</span> <span class="pre">how</span> <span class="pre">it\nlooks</span> <span class="pre">and</span> <span class="pre">what</span> <span class="pre">actions</span> <span class="pre">is</span> <span class="pre">available.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -529,7 +529,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['inv',</span> <span class="pre">'give',</span> <span class="pre">'i',</span> <span class="pre">'inventory']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['inventory',</span> <span class="pre">'give',</span> <span class="pre">'i',</span> <span class="pre">'inv']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -553,7 +553,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'inv</span> <span class="pre">give</span> <span class="pre">i</span> <span class="pre">inventory',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'get',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">inv</span> <span class="pre">give</span> <span class="pre">i</span> <span class="pre">inventory',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nUse</span> <span class="pre">focus</span> <span class="pre">/</span> <span class="pre">examine</span> <span class="pre">instead.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'inventory</span> <span class="pre">give</span> <span class="pre">i</span> <span class="pre">inv',</span> <span class="pre">'category':</span> <span class="pre">'evscaperoom',</span> <span class="pre">'key':</span> <span class="pre">'get',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">inventory</span> <span class="pre">give</span> <span class="pre">i</span> <span class="pre">inv',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nUse</span> <span class="pre">focus</span> <span class="pre">/</span> <span class="pre">examine</span> <span class="pre">instead.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGet.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -574,7 +574,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['&#64;dig',</span> <span class="pre">'&#64;open']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['&#64;open',</span> <span class="pre">'&#64;dig']</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -599,7 +599,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'&#64;dig</span> <span class="pre">&#64;open',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'open',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">dig</span> <span class="pre">open',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nInteract</span> <span class="pre">with</span> <span class="pre">an</span> <span class="pre">object</span> <span class="pre">in</span> <span class="pre">focus.\n\nUsage:\n</span>&#160;&#160; <span class="pre">&lt;action&gt;</span> <span class="pre">[arg]\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'&#64;open</span> <span class="pre">&#64;dig',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'open',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">open</span> <span class="pre">dig',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nInteract</span> <span class="pre">with</span> <span class="pre">an</span> <span class="pre">object</span> <span class="pre">in</span> <span class="pre">focus.\n\nUsage:\n</span>&#160;&#160; <span class="pre">&lt;action&gt;</span> <span class="pre">[arg]\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -223,7 +223,7 @@ achievements/progress rats</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.game_systems.achievements.achievements.CmdAchieve.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['achieve',</span> <span class="pre">'achieves',</span> <span class="pre">'achievement']</span></em><a class="headerlink" href="#evennia.contrib.game_systems.achievements.achievements.CmdAchieve.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['achievement',</span> <span class="pre">'achieves',</span> <span class="pre">'achieve']</span></em><a class="headerlink" href="#evennia.contrib.game_systems.achievements.achievements.CmdAchieve.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -273,7 +273,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.game_systems.achievements.achievements.CmdAchieve.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'achieve</span> <span class="pre">achieves</span> <span class="pre">achievement',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'achievements',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">achieve</span> <span class="pre">achieves</span> <span class="pre">achievement',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nview</span> <span class="pre">achievements\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">achievements[/switches]</span> <span class="pre">[args]\n\nSwitches:\n</span>&#160;&#160;&#160; <span class="pre">all</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">View</span> <span class="pre">all</span> <span class="pre">achievements,</span> <span class="pre">including</span> <span class="pre">locked</span> <span class="pre">ones.\n</span>&#160;&#160;&#160; <span class="pre">completed</span>&#160;&#160;&#160; <span class="pre">View</span> <span class="pre">achievements</span> <span class="pre">you\'ve</span> <span class="pre">completed.\n</span>&#160;&#160;&#160; <span class="pre">progress</span>&#160;&#160;&#160;&#160; <span class="pre">View</span> <span class="pre">achievements</span> <span class="pre">you</span> <span class="pre">have</span> <span class="pre">partially</span> <span class="pre">completed\n\nCheck</span> <span class="pre">your</span> <span class="pre">achievement</span> <span class="pre">statuses</span> <span class="pre">or</span> <span class="pre">browse</span> <span class="pre">the</span> <span class="pre">list.</span> <span class="pre">Providing</span> <span class="pre">a</span> <span class="pre">command</span> <span class="pre">argument\nwill</span> <span class="pre">search</span> <span class="pre">all</span> <span class="pre">your</span> <span class="pre">currently</span> <span class="pre">unlocked</span> <span class="pre">achievements</span> <span class="pre">for</span> <span class="pre">matches,</span> <span class="pre">and</span> <span class="pre">the</span> <span class="pre">switches\nwill</span> <span class="pre">filter</span> <span class="pre">the</span> <span class="pre">list</span> <span class="pre">to</span> <span class="pre">something</span> <span class="pre">other</span> <span class="pre">than</span> <span class="pre">&quot;all</span> <span class="pre">unlocked&quot;.</span> <span class="pre">Combining</span> <span class="pre">a</span> <span class="pre">command\nargument</span> <span class="pre">with</span> <span class="pre">a</span> <span class="pre">switch</span> <span class="pre">will</span> <span class="pre">search</span> <span class="pre">only</span> <span class="pre">in</span> <span class="pre">that</span> <span class="pre">list.\n\nExamples:\n</span>&#160;&#160;&#160; <span class="pre">achievements</span> <span class="pre">apples\n</span>&#160;&#160;&#160; <span class="pre">achievements/all\n</span>&#160;&#160;&#160; <span class="pre">achievements/progress</span> <span class="pre">rats\n'}</span></em><a class="headerlink" href="#evennia.contrib.game_systems.achievements.achievements.CmdAchieve.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'achievement</span> <span class="pre">achieves</span> <span class="pre">achieve',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'achievements',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">achievement</span> <span class="pre">achieves</span> <span class="pre">achieve',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nview</span> <span class="pre">achievements\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">achievements[/switches]</span> <span class="pre">[args]\n\nSwitches:\n</span>&#160;&#160;&#160; <span class="pre">all</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">View</span> <span class="pre">all</span> <span class="pre">achievements,</span> <span class="pre">including</span> <span class="pre">locked</span> <span class="pre">ones.\n</span>&#160;&#160;&#160; <span class="pre">completed</span>&#160;&#160;&#160; <span class="pre">View</span> <span class="pre">achievements</span> <span class="pre">you\'ve</span> <span class="pre">completed.\n</span>&#160;&#160;&#160; <span class="pre">progress</span>&#160;&#160;&#160;&#160; <span class="pre">View</span> <span class="pre">achievements</span> <span class="pre">you</span> <span class="pre">have</span> <span class="pre">partially</span> <span class="pre">completed\n\nCheck</span> <span class="pre">your</span> <span class="pre">achievement</span> <span class="pre">statuses</span> <span class="pre">or</span> <span class="pre">browse</span> <span class="pre">the</span> <span class="pre">list.</span> <span class="pre">Providing</span> <span class="pre">a</span> <span class="pre">command</span> <span class="pre">argument\nwill</span> <span class="pre">search</span> <span class="pre">all</span> <span class="pre">your</span> <span class="pre">currently</span> <span class="pre">unlocked</span> <span class="pre">achievements</span> <span class="pre">for</span> <span class="pre">matches,</span> <span class="pre">and</span> <span class="pre">the</span> <span class="pre">switches\nwill</span> <span class="pre">filter</span> <span class="pre">the</span> <span class="pre">list</span> <span class="pre">to</span> <span class="pre">something</span> <span class="pre">other</span> <span class="pre">than</span> <span class="pre">&quot;all</span> <span class="pre">unlocked&quot;.</span> <span class="pre">Combining</span> <span class="pre">a</span> <span class="pre">command\nargument</span> <span class="pre">with</span> <span class="pre">a</span> <span class="pre">switch</span> <span class="pre">will</span> <span class="pre">search</span> <span class="pre">only</span> <span class="pre">in</span> <span class="pre">that</span> <span class="pre">list.\n\nExamples:\n</span>&#160;&#160;&#160; <span class="pre">achievements</span> <span class="pre">apples\n</span>&#160;&#160;&#160; <span class="pre">achievements/all\n</span>&#160;&#160;&#160; <span class="pre">achievements/progress</span> <span class="pre">rats\n'}</span></em><a class="headerlink" href="#evennia.contrib.game_systems.achievements.achievements.CmdAchieve.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -591,7 +591,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['l',</span> <span class="pre">'ls']</span></em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['ls',</span> <span class="pre">'l']</span></em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -611,7 +611,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'l</span> <span class="pre">ls',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">l</span> <span class="pre">ls',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlook\n\nUsage:\n</span>&#160; <span class="pre">look\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;room</span> <span class="pre">detail&gt;\n</span>&#160; <span class="pre">look</span> <span class="pre">*&lt;account&gt;\n\nObserves</span> <span class="pre">your</span> <span class="pre">location,</span> <span class="pre">details</span> <span class="pre">at</span> <span class="pre">your</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">objects</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">vicinity.\n'}</span></em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'ls</span> <span class="pre">l',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">ls</span> <span class="pre">l',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlook\n\nUsage:\n</span>&#160; <span class="pre">look\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;room</span> <span class="pre">detail&gt;\n</span>&#160; <span class="pre">look</span> <span class="pre">*&lt;account&gt;\n\nObserves</span> <span class="pre">your</span> <span class="pre">location,</span> <span class="pre">details</span> <span class="pre">at</span> <span class="pre">your</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">objects</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">vicinity.\n'}</span></em><a class="headerlink" href="#evennia.contrib.grid.extended_room.extended_room.CmdExtendedRoomLook.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -370,7 +370,7 @@ there is no room above/below you, your movement will fail.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.grid.xyzgrid.commands.CmdFlyAndDive.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['dive',</span> <span class="pre">'fly']</span></em><a class="headerlink" href="#evennia.contrib.grid.xyzgrid.commands.CmdFlyAndDive.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['fly',</span> <span class="pre">'dive']</span></em><a class="headerlink" href="#evennia.contrib.grid.xyzgrid.commands.CmdFlyAndDive.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -395,7 +395,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.grid.xyzgrid.commands.CmdFlyAndDive.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'dive</span> <span class="pre">fly',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'fly</span> <span class="pre">or</span> <span class="pre">dive',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">dive</span> <span class="pre">fly',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nFly</span> <span class="pre">or</span> <span class="pre">Dive</span> <span class="pre">up</span> <span class="pre">and</span> <span class="pre">down.\n\nUsage:\n</span>&#160; <span class="pre">fly\n</span>&#160; <span class="pre">dive\n\nWill</span> <span class="pre">fly</span> <span class="pre">up</span> <span class="pre">one</span> <span class="pre">room</span> <span class="pre">or</span> <span class="pre">dive</span> <span class="pre">down</span> <span class="pre">one</span> <span class="pre">room</span> <span class="pre">at</span> <span class="pre">your</span> <span class="pre">current</span> <span class="pre">position.</span> <span class="pre">If\nthere</span> <span class="pre">is</span> <span class="pre">no</span> <span class="pre">room</span> <span class="pre">above/below</span> <span class="pre">you,</span> <span class="pre">your</span> <span class="pre">movement</span> <span class="pre">will</span> <span class="pre">fail.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.grid.xyzgrid.commands.CmdFlyAndDive.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'fly</span> <span class="pre">dive',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'fly</span> <span class="pre">or</span> <span class="pre">dive',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">fly</span> <span class="pre">dive',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nFly</span> <span class="pre">or</span> <span class="pre">Dive</span> <span class="pre">up</span> <span class="pre">and</span> <span class="pre">down.\n\nUsage:\n</span>&#160; <span class="pre">fly\n</span>&#160; <span class="pre">dive\n\nWill</span> <span class="pre">fly</span> <span class="pre">up</span> <span class="pre">one</span> <span class="pre">room</span> <span class="pre">or</span> <span class="pre">dive</span> <span class="pre">down</span> <span class="pre">one</span> <span class="pre">room</span> <span class="pre">at</span> <span class="pre">your</span> <span class="pre">current</span> <span class="pre">position.</span> <span class="pre">If\nthere</span> <span class="pre">is</span> <span class="pre">no</span> <span class="pre">room</span> <span class="pre">above/below</span> <span class="pre">you,</span> <span class="pre">your</span> <span class="pre">movement</span> <span class="pre">will</span> <span class="pre">fail.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.grid.xyzgrid.commands.CmdFlyAndDive.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -670,7 +670,7 @@ commands the caller can use.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['&quot;',</span> <span class="pre">&quot;'&quot;]</span></em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">[&quot;'&quot;,</span> <span class="pre">'&quot;']</span></em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -701,7 +701,7 @@ commands the caller can use.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'&quot;</span> <span class="pre">\'',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'say',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">&quot;</span> <span class="pre">\'',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nspeak</span> <span class="pre">as</span> <span class="pre">your</span> <span class="pre">character\n\nUsage:\n</span>&#160; <span class="pre">say</span> <span class="pre">&lt;message&gt;\n\nTalk</span> <span class="pre">to</span> <span class="pre">those</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">current</span> <span class="pre">location.\n'}</span></em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'\'</span> <span class="pre">&quot;',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'say',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">\'</span> <span class="pre">&quot;',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nspeak</span> <span class="pre">as</span> <span class="pre">your</span> <span class="pre">character\n\nUsage:\n</span>&#160; <span class="pre">say</span> <span class="pre">&lt;message&gt;\n\nTalk</span> <span class="pre">to</span> <span class="pre">those</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">current</span> <span class="pre">location.\n'}</span></em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdSay.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -414,7 +414,7 @@ turn of combat, performing everyones actions in random order.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.combat_turnbased.CmdTurnAttack.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['hit',</span> <span class="pre">'turnbased</span> <span class="pre">combat']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_turnbased.CmdTurnAttack.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['turnbased</span> <span class="pre">combat',</span> <span class="pre">'hit']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_turnbased.CmdTurnAttack.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -460,7 +460,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.combat_turnbased.CmdTurnAttack.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'hit</span> <span class="pre">turnbased</span> <span class="pre">combat',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'attack',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">hit</span> <span class="pre">turnbased</span> <span class="pre">combat',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nStart</span> <span class="pre">or</span> <span class="pre">join</span> <span class="pre">combat.\n\nUsage:\n</span>&#160; <span class="pre">attack</span> <span class="pre">[&lt;target&gt;]\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_turnbased.CmdTurnAttack.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'turnbased</span> <span class="pre">combat</span> <span class="pre">hit',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'attack',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">turnbased</span> <span class="pre">combat</span> <span class="pre">hit',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nStart</span> <span class="pre">or</span> <span class="pre">join</span> <span class="pre">combat.\n\nUsage:\n</span>&#160; <span class="pre">attack</span> <span class="pre">[&lt;target&gt;]\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_turnbased.CmdTurnAttack.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -329,7 +329,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.combat_twitch.CmdLook.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['l',</span> <span class="pre">'ls']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdLook.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['ls',</span> <span class="pre">'l']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdLook.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -349,7 +349,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.combat_twitch.CmdLook.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'l</span> <span class="pre">ls',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">l</span> <span class="pre">ls',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlook</span> <span class="pre">at</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">object\n\nUsage:\n</span>&#160; <span class="pre">look\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n</span>&#160; <span class="pre">look</span> <span class="pre">*&lt;account&gt;\n\nObserves</span> <span class="pre">your</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">objects</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">vicinity.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdLook.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'ls</span> <span class="pre">l',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">ls</span> <span class="pre">l',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlook</span> <span class="pre">at</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">object\n\nUsage:\n</span>&#160; <span class="pre">look\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n</span>&#160; <span class="pre">look</span> <span class="pre">*&lt;account&gt;\n\nObserves</span> <span class="pre">your</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">objects</span> <span class="pre">in</span> <span class="pre">your</span> <span class="pre">vicinity.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdLook.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -425,7 +425,7 @@ boost INT Wizard Goblin</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.combat_twitch.CmdStunt.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['boost',</span> <span class="pre">'foil']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdStunt.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['foil',</span> <span class="pre">'boost']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdStunt.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -459,7 +459,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.combat_twitch.CmdStunt.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'boost</span> <span class="pre">foil',</span> <span class="pre">'category':</span> <span class="pre">'combat',</span> <span class="pre">'key':</span> <span class="pre">'stunt',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">boost</span> <span class="pre">foil',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPerform</span> <span class="pre">a</span> <span class="pre">combat</span> <span class="pre">stunt,</span> <span class="pre">that</span> <span class="pre">boosts</span> <span class="pre">an</span> <span class="pre">ally</span> <span class="pre">against</span> <span class="pre">a</span> <span class="pre">target,</span> <span class="pre">or\nfoils</span> <span class="pre">an</span> <span class="pre">enemy,</span> <span class="pre">giving</span> <span class="pre">them</span> <span class="pre">disadvantage</span> <span class="pre">against</span> <span class="pre">an</span> <span class="pre">ally.\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">[ability]</span> <span class="pre">&lt;recipient&gt;</span> <span class="pre">&lt;target&gt;\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">[ability]</span> <span class="pre">&lt;recipient&gt;</span> <span class="pre">&lt;target&gt;\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">[ability]</span> <span class="pre">&lt;target&gt;</span>&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">(same</span> <span class="pre">as</span> <span class="pre">boost</span> <span class="pre">me</span> <span class="pre">&lt;target&gt;)\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">[ability]</span> <span class="pre">&lt;target&gt;</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">(same</span> <span class="pre">as</span> <span class="pre">foil</span> <span class="pre">&lt;target&gt;</span> <span class="pre">me)\n\nExample:\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">STR</span> <span class="pre">me</span> <span class="pre">Goblin\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">DEX</span> <span class="pre">Goblin\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">STR</span> <span class="pre">Goblin</span> <span class="pre">me\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">INT</span> <span class="pre">Goblin\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">INT</span> <span class="pre">Wizard</span> <span class="pre">Goblin\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdStunt.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'foil</span> <span class="pre">boost',</span> <span class="pre">'category':</span> <span class="pre">'combat',</span> <span class="pre">'key':</span> <span class="pre">'stunt',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">foil</span> <span class="pre">boost',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPerform</span> <span class="pre">a</span> <span class="pre">combat</span> <span class="pre">stunt,</span> <span class="pre">that</span> <span class="pre">boosts</span> <span class="pre">an</span> <span class="pre">ally</span> <span class="pre">against</span> <span class="pre">a</span> <span class="pre">target,</span> <span class="pre">or\nfoils</span> <span class="pre">an</span> <span class="pre">enemy,</span> <span class="pre">giving</span> <span class="pre">them</span> <span class="pre">disadvantage</span> <span class="pre">against</span> <span class="pre">an</span> <span class="pre">ally.\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">[ability]</span> <span class="pre">&lt;recipient&gt;</span> <span class="pre">&lt;target&gt;\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">[ability]</span> <span class="pre">&lt;recipient&gt;</span> <span class="pre">&lt;target&gt;\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">[ability]</span> <span class="pre">&lt;target&gt;</span>&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">(same</span> <span class="pre">as</span> <span class="pre">boost</span> <span class="pre">me</span> <span class="pre">&lt;target&gt;)\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">[ability]</span> <span class="pre">&lt;target&gt;</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">(same</span> <span class="pre">as</span> <span class="pre">foil</span> <span class="pre">&lt;target&gt;</span> <span class="pre">me)\n\nExample:\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">STR</span> <span class="pre">me</span> <span class="pre">Goblin\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">DEX</span> <span class="pre">Goblin\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">STR</span> <span class="pre">Goblin</span> <span class="pre">me\n</span>&#160;&#160;&#160; <span class="pre">foil</span> <span class="pre">INT</span> <span class="pre">Goblin\n</span>&#160;&#160;&#160; <span class="pre">boost</span> <span class="pre">INT</span> <span class="pre">Wizard</span> <span class="pre">Goblin\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.combat_twitch.CmdStunt.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -241,7 +241,7 @@ unwear &lt;item&gt;</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.commands.CmdRemove.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['unwield',</span> <span class="pre">'unwear']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['unwear',</span> <span class="pre">'unwield']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -265,7 +265,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.evadventure.commands.CmdRemove.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'unwield</span> <span class="pre">unwear',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'remove',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">unwield</span> <span class="pre">unwear',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nRemove</span> <span class="pre">a</span> <span class="pre">remove</span> <span class="pre">a</span> <span class="pre">weapon/shield,</span> <span class="pre">armor</span> <span class="pre">or</span> <span class="pre">helmet.\n\nUsage:\n</span>&#160; <span class="pre">remove</span> <span class="pre">&lt;item&gt;\n</span>&#160; <span class="pre">unwield</span> <span class="pre">&lt;item&gt;\n</span>&#160; <span class="pre">unwear</span> <span class="pre">&lt;item&gt;\n\nTo</span> <span class="pre">remove</span> <span class="pre">an</span> <span class="pre">item</span> <span class="pre">from</span> <span class="pre">the</span> <span class="pre">backpack,</span> <span class="pre">use</span> <span class="pre">|wdrop|n</span> <span class="pre">instead.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'unwear</span> <span class="pre">unwield',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'remove',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">unwear</span> <span class="pre">unwield',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nRemove</span> <span class="pre">a</span> <span class="pre">remove</span> <span class="pre">a</span> <span class="pre">weapon/shield,</span> <span class="pre">armor</span> <span class="pre">or</span> <span class="pre">helmet.\n\nUsage:\n</span>&#160; <span class="pre">remove</span> <span class="pre">&lt;item&gt;\n</span>&#160; <span class="pre">unwield</span> <span class="pre">&lt;item&gt;\n</span>&#160; <span class="pre">unwear</span> <span class="pre">&lt;item&gt;\n\nTo</span> <span class="pre">remove</span> <span class="pre">an</span> <span class="pre">item</span> <span class="pre">from</span> <span class="pre">the</span> <span class="pre">backpack,</span> <span class="pre">use</span> <span class="pre">|wdrop|n</span> <span class="pre">instead.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.evadventure.commands.CmdRemove.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -94,7 +94,7 @@ such as when closing the lid and un-blinding a character.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['press',</span> <span class="pre">'press</span> <span class="pre">button',</span> <span class="pre">'push']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['press</span> <span class="pre">button',</span> <span class="pre">'press',</span> <span class="pre">'push']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -123,7 +123,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'press</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">push',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'push</span> <span class="pre">button',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">press</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">push',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPush</span> <span class="pre">the</span> <span class="pre">red</span> <span class="pre">button</span> <span class="pre">(lid</span> <span class="pre">closed)\n\nUsage:\n</span>&#160; <span class="pre">push</span> <span class="pre">button\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'press</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">push',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'push</span> <span class="pre">button',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">push',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPush</span> <span class="pre">the</span> <span class="pre">red</span> <span class="pre">button</span> <span class="pre">(lid</span> <span class="pre">closed)\n\nUsage:\n</span>&#160; <span class="pre">push</span> <span class="pre">button\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -193,7 +193,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['smash',</span> <span class="pre">'smash</span> <span class="pre">lid',</span> <span class="pre">'break</span> <span class="pre">lid']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['smash</span> <span class="pre">lid',</span> <span class="pre">'smash',</span> <span class="pre">'break</span> <span class="pre">lid']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -220,7 +220,7 @@ break.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'smash</span> <span class="pre">smash</span> <span class="pre">lid</span> <span class="pre">break</span> <span class="pre">lid',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'smash</span> <span class="pre">glass',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">smash</span> <span class="pre">smash</span> <span class="pre">lid</span> <span class="pre">break</span> <span class="pre">lid',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nSmash</span> <span class="pre">the</span> <span class="pre">protective</span> <span class="pre">glass.\n\nUsage:\n</span>&#160; <span class="pre">smash</span> <span class="pre">glass\n\nTry</span> <span class="pre">to</span> <span class="pre">smash</span> <span class="pre">the</span> <span class="pre">glass</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">button.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'smash</span> <span class="pre">lid</span> <span class="pre">smash</span> <span class="pre">break</span> <span class="pre">lid',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'smash</span> <span class="pre">glass',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">smash</span> <span class="pre">lid</span> <span class="pre">smash</span> <span class="pre">break</span> <span class="pre">lid',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nSmash</span> <span class="pre">the</span> <span class="pre">protective</span> <span class="pre">glass.\n\nUsage:\n</span>&#160; <span class="pre">smash</span> <span class="pre">glass\n\nTry</span> <span class="pre">to</span> <span class="pre">smash</span> <span class="pre">the</span> <span class="pre">glass</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">button.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -320,7 +320,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['press',</span> <span class="pre">'press</span> <span class="pre">button',</span> <span class="pre">'push']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['press</span> <span class="pre">button',</span> <span class="pre">'press',</span> <span class="pre">'push']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -349,7 +349,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'press</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">push',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'push</span> <span class="pre">button',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">press</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">push',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPush</span> <span class="pre">the</span> <span class="pre">red</span> <span class="pre">button\n\nUsage:\n</span>&#160; <span class="pre">push</span> <span class="pre">button\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'press</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">push',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'push</span> <span class="pre">button',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">push',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPush</span> <span class="pre">the</span> <span class="pre">red</span> <span class="pre">button\n\nUsage:\n</span>&#160; <span class="pre">push</span> <span class="pre">button\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -447,7 +447,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['listen',</span> <span class="pre">'ex',</span> <span class="pre">'l',</span> <span class="pre">'examine',</span> <span class="pre">'feel',</span> <span class="pre">'get']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['get',</span> <span class="pre">'listen',</span> <span class="pre">'examine',</span> <span class="pre">'l',</span> <span class="pre">'ex',</span> <span class="pre">'feel']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -473,7 +473,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'listen</span> <span class="pre">ex</span> <span class="pre">l</span> <span class="pre">examine</span> <span class="pre">feel</span> <span class="pre">get',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">listen</span> <span class="pre">ex</span> <span class="pre">l</span> <span class="pre">examine</span> <span class="pre">feel</span> <span class="pre">get',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">&quot;\nLooking</span> <span class="pre">around</span> <span class="pre">in</span> <span class="pre">darkness\n\nUsage:\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n\n...</span> <span class="pre">not</span> <span class="pre">that</span> <span class="pre">there's</span> <span class="pre">much</span> <span class="pre">to</span> <span class="pre">see</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">dark.\n\n&quot;}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'get</span> <span class="pre">listen</span> <span class="pre">examine</span> <span class="pre">l</span> <span class="pre">ex</span> <span class="pre">feel',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">get</span> <span class="pre">listen</span> <span class="pre">examine</span> <span class="pre">l</span> <span class="pre">ex</span> <span class="pre">feel',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">&quot;\nLooking</span> <span class="pre">around</span> <span class="pre">in</span> <span class="pre">darkness\n\nUsage:\n</span>&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n\n...</span> <span class="pre">not</span> <span class="pre">that</span> <span class="pre">there's</span> <span class="pre">much</span> <span class="pre">to</span> <span class="pre">see</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">dark.\n\n&quot;}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -504,7 +504,7 @@ shift green root up/down</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['shiftroot',</span> <span class="pre">'push',</span> <span class="pre">'pull',</span> <span class="pre">'move']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['pull',</span> <span class="pre">'move',</span> <span class="pre">'push',</span> <span class="pre">'shiftroot']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -540,7 +540,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'shiftroot</span> <span class="pre">push</span> <span class="pre">pull</span> <span class="pre">move',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'shift',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">shiftroot</span> <span class="pre">push</span> <span class="pre">pull</span> <span class="pre">move',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nShifts</span> <span class="pre">roots</span> <span class="pre">around.\n\nUsage:\n</span>&#160; <span class="pre">shift</span> <span class="pre">blue</span> <span class="pre">root</span> <span class="pre">left/right\n</span>&#160; <span class="pre">shift</span> <span class="pre">red</span> <span class="pre">root</span> <span class="pre">left/right\n</span>&#160; <span class="pre">shift</span> <span class="pre">yellow</span> <span class="pre">root</span> <span class="pre">up/down\n</span>&#160; <span class="pre">shift</span> <span class="pre">green</span> <span class="pre">root</span> <span class="pre">up/down\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'pull</span> <span class="pre">move</span> <span class="pre">push</span> <span class="pre">shiftroot',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'shift',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">pull</span> <span class="pre">move</span> <span class="pre">push</span> <span class="pre">shiftroot',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nShifts</span> <span class="pre">roots</span> <span class="pre">around.\n\nUsage:\n</span>&#160; <span class="pre">shift</span> <span class="pre">blue</span> <span class="pre">root</span> <span class="pre">left/right\n</span>&#160; <span class="pre">shift</span> <span class="pre">red</span> <span class="pre">root</span> <span class="pre">left/right\n</span>&#160; <span class="pre">shift</span> <span class="pre">yellow</span> <span class="pre">root</span> <span class="pre">up/down\n</span>&#160; <span class="pre">shift</span> <span class="pre">green</span> <span class="pre">root</span> <span class="pre">up/down\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -557,7 +557,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['push</span> <span class="pre">button',</span> <span class="pre">'button',</span> <span class="pre">'press</span> <span class="pre">button']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['push</span> <span class="pre">button',</span> <span class="pre">'press</span> <span class="pre">button',</span> <span class="pre">'button']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -583,7 +583,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'push</span> <span class="pre">button</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">button',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'press',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">push</span> <span class="pre">button</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">button',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPresses</span> <span class="pre">a</span> <span class="pre">button.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'push</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">button',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'press',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">push</span> <span class="pre">button</span> <span class="pre">press</span> <span class="pre">button</span> <span class="pre">button',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nPresses</span> <span class="pre">a</span> <span class="pre">button.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdPressButton.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -727,7 +727,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['parry',</span> <span class="pre">'defend',</span> <span class="pre">'pierce',</span> <span class="pre">'chop',</span> <span class="pre">'slash',</span> <span class="pre">'stab',</span> <span class="pre">'bash',</span> <span class="pre">'hit',</span> <span class="pre">'kill',</span> <span class="pre">'fight',</span> <span class="pre">'thrust']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['stab',</span> <span class="pre">'parry',</span> <span class="pre">'bash',</span> <span class="pre">'thrust',</span> <span class="pre">'hit',</span> <span class="pre">'slash',</span> <span class="pre">'kill',</span> <span class="pre">'fight',</span> <span class="pre">'chop',</span> <span class="pre">'pierce',</span> <span class="pre">'defend']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -753,7 +753,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'parry</span> <span class="pre">defend</span> <span class="pre">pierce</span> <span class="pre">chop</span> <span class="pre">slash</span> <span class="pre">stab</span> <span class="pre">bash</span> <span class="pre">hit</span> <span class="pre">kill</span> <span class="pre">fight</span> <span class="pre">thrust',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'attack',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">parry</span> <span class="pre">defend</span> <span class="pre">pierce</span> <span class="pre">chop</span> <span class="pre">slash</span> <span class="pre">stab</span> <span class="pre">bash</span> <span class="pre">hit</span> <span class="pre">kill</span> <span class="pre">fight</span> <span class="pre">thrust',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nAttack</span> <span class="pre">the</span> <span class="pre">enemy.</span> <span class="pre">Commands:\n\n</span>&#160; <span class="pre">stab</span> <span class="pre">&lt;enemy&gt;\n</span>&#160; <span class="pre">slash</span> <span class="pre">&lt;enemy&gt;\n</span>&#160; <span class="pre">parry\n\nstab</span> <span class="pre">-</span> <span class="pre">(thrust)</span> <span class="pre">makes</span> <span class="pre">a</span> <span class="pre">lot</span> <span class="pre">of</span> <span class="pre">damage</span> <span class="pre">but</span> <span class="pre">is</span> <span class="pre">harder</span> <span class="pre">to</span> <span class="pre">hit</span> <span class="pre">with.\nslash</span> <span class="pre">-</span> <span class="pre">is</span> <span class="pre">easier</span> <span class="pre">to</span> <span class="pre">land,</span> <span class="pre">but</span> <span class="pre">does</span> <span class="pre">not</span> <span class="pre">make</span> <span class="pre">as</span> <span class="pre">much</span> <span class="pre">damage.\nparry</span> <span class="pre">-</span> <span class="pre">forgoes</span> <span class="pre">your</span> <span class="pre">attack</span> <span class="pre">but</span> <span class="pre">will</span> <span class="pre">make</span> <span class="pre">you</span> <span class="pre">harder</span> <span class="pre">to</span> <span class="pre">hit</span> <span class="pre">on</span> <span class="pre">next\n</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">enemy</span> <span class="pre">attack.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'stab</span> <span class="pre">parry</span> <span class="pre">bash</span> <span class="pre">thrust</span> <span class="pre">hit</span> <span class="pre">slash</span> <span class="pre">kill</span> <span class="pre">fight</span> <span class="pre">chop</span> <span class="pre">pierce</span> <span class="pre">defend',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'attack',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">stab</span> <span class="pre">parry</span> <span class="pre">bash</span> <span class="pre">thrust</span> <span class="pre">hit</span> <span class="pre">slash</span> <span class="pre">kill</span> <span class="pre">fight</span> <span class="pre">chop</span> <span class="pre">pierce</span> <span class="pre">defend',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nAttack</span> <span class="pre">the</span> <span class="pre">enemy.</span> <span class="pre">Commands:\n\n</span>&#160; <span class="pre">stab</span> <span class="pre">&lt;enemy&gt;\n</span>&#160; <span class="pre">slash</span> <span class="pre">&lt;enemy&gt;\n</span>&#160; <span class="pre">parry\n\nstab</span> <span class="pre">-</span> <span class="pre">(thrust)</span> <span class="pre">makes</span> <span class="pre">a</span> <span class="pre">lot</span> <span class="pre">of</span> <span class="pre">damage</span> <span class="pre">but</span> <span class="pre">is</span> <span class="pre">harder</span> <span class="pre">to</span> <span class="pre">hit</span> <span class="pre">with.\nslash</span> <span class="pre">-</span> <span class="pre">is</span> <span class="pre">easier</span> <span class="pre">to</span> <span class="pre">land,</span> <span class="pre">but</span> <span class="pre">does</span> <span class="pre">not</span> <span class="pre">make</span> <span class="pre">as</span> <span class="pre">much</span> <span class="pre">damage.\nparry</span> <span class="pre">-</span> <span class="pre">forgoes</span> <span class="pre">your</span> <span class="pre">attack</span> <span class="pre">but</span> <span class="pre">will</span> <span class="pre">make</span> <span class="pre">you</span> <span class="pre">harder</span> <span class="pre">to</span> <span class="pre">hit</span> <span class="pre">on</span> <span class="pre">next\n</span>&#160;&#160;&#160;&#160;&#160;&#160;&#160; <span class="pre">enemy</span> <span class="pre">attack.\n\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -196,7 +196,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['l',</span> <span class="pre">'ls']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['ls',</span> <span class="pre">'l']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -211,7 +211,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'l</span> <span class="pre">ls',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">l</span> <span class="pre">ls',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlooks</span> <span class="pre">at</span> <span class="pre">the</span> <span class="pre">room</span> <span class="pre">and</span> <span class="pre">on</span> <span class="pre">details\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n</span>&#160;&#160;&#160; <span class="pre">look</span> <span class="pre">&lt;room</span> <span class="pre">detail&gt;\n</span>&#160;&#160;&#160; <span class="pre">look</span> <span class="pre">*&lt;account&gt;\n\nObserves</span> <span class="pre">your</span> <span class="pre">location,</span> <span class="pre">details</span> <span class="pre">at</span> <span class="pre">your</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">objects\nin</span> <span class="pre">your</span> <span class="pre">vicinity.\n\nTutorial:</span> <span class="pre">This</span> <span class="pre">is</span> <span class="pre">a</span> <span class="pre">child</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">default</span> <span class="pre">Look</span> <span class="pre">command,</span> <span class="pre">that</span> <span class="pre">also\nallows</span> <span class="pre">us</span> <span class="pre">to</span> <span class="pre">look</span> <span class="pre">at</span> <span class="pre">&quot;details&quot;</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">room.</span>&#160; <span class="pre">These</span> <span class="pre">details</span> <span class="pre">are\nthings</span> <span class="pre">to</span> <span class="pre">examine</span> <span class="pre">and</span> <span class="pre">offers</span> <span class="pre">some</span> <span class="pre">extra</span> <span class="pre">description</span> <span class="pre">without\nactually</span> <span class="pre">having</span> <span class="pre">to</span> <span class="pre">be</span> <span class="pre">actual</span> <span class="pre">database</span> <span class="pre">objects.</span> <span class="pre">It</span> <span class="pre">uses</span> <span class="pre">the\nreturn_detail()</span> <span class="pre">hook</span> <span class="pre">on</span> <span class="pre">TutorialRooms</span> <span class="pre">for</span> <span class="pre">this.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'ls</span> <span class="pre">l',</span> <span class="pre">'category':</span> <span class="pre">'tutorialworld',</span> <span class="pre">'key':</span> <span class="pre">'look',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">ls</span> <span class="pre">l',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nlooks</span> <span class="pre">at</span> <span class="pre">the</span> <span class="pre">room</span> <span class="pre">and</span> <span class="pre">on</span> <span class="pre">details\n\nUsage:\n</span>&#160;&#160;&#160; <span class="pre">look</span> <span class="pre">&lt;obj&gt;\n</span>&#160;&#160;&#160; <span class="pre">look</span> <span class="pre">&lt;room</span> <span class="pre">detail&gt;\n</span>&#160;&#160;&#160; <span class="pre">look</span> <span class="pre">*&lt;account&gt;\n\nObserves</span> <span class="pre">your</span> <span class="pre">location,</span> <span class="pre">details</span> <span class="pre">at</span> <span class="pre">your</span> <span class="pre">location</span> <span class="pre">or</span> <span class="pre">objects\nin</span> <span class="pre">your</span> <span class="pre">vicinity.\n\nTutorial:</span> <span class="pre">This</span> <span class="pre">is</span> <span class="pre">a</span> <span class="pre">child</span> <span class="pre">of</span> <span class="pre">the</span> <span class="pre">default</span> <span class="pre">Look</span> <span class="pre">command,</span> <span class="pre">that</span> <span class="pre">also\nallows</span> <span class="pre">us</span> <span class="pre">to</span> <span class="pre">look</span> <span class="pre">at</span> <span class="pre">&quot;details&quot;</span> <span class="pre">in</span> <span class="pre">the</span> <span class="pre">room.</span>&#160; <span class="pre">These</span> <span class="pre">details</span> <span class="pre">are\nthings</span> <span class="pre">to</span> <span class="pre">examine</span> <span class="pre">and</span> <span class="pre">offers</span> <span class="pre">some</span> <span class="pre">extra</span> <span class="pre">description</span> <span class="pre">without\nactually</span> <span class="pre">having</span> <span class="pre">to</span> <span class="pre">be</span> <span class="pre">actual</span> <span class="pre">database</span> <span class="pre">objects.</span> <span class="pre">It</span> <span class="pre">uses</span> <span class="pre">the\nreturn_detail()</span> <span class="pre">hook</span> <span class="pre">on</span> <span class="pre">TutorialRooms</span> <span class="pre">for</span> <span class="pre">this.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -766,7 +766,7 @@ if they fall off the bridge.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['?',</span> <span class="pre">'h']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['h',</span> <span class="pre">'?']</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -792,7 +792,7 @@ if they fall off the bridge.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'?</span> <span class="pre">h',</span> <span class="pre">'category':</span> <span class="pre">'tutorial</span> <span class="pre">world',</span> <span class="pre">'key':</span> <span class="pre">'help',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">?</span> <span class="pre">h',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nOverwritten</span> <span class="pre">help</span> <span class="pre">command</span> <span class="pre">while</span> <span class="pre">on</span> <span class="pre">the</span> <span class="pre">bridge.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'h</span> <span class="pre">?',</span> <span class="pre">'category':</span> <span class="pre">'tutorial</span> <span class="pre">world',</span> <span class="pre">'key':</span> <span class="pre">'help',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">h</span> <span class="pre">?',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nOverwritten</span> <span class="pre">help</span> <span class="pre">command</span> <span class="pre">while</span> <span class="pre">on</span> <span class="pre">the</span> <span class="pre">bridge.\n'}</span></em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdBridgeHelp.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -823,21 +823,6 @@ with q, remove the break line and restart server when finished.</p></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.NoCmdSets"><code class="docutils literal notranslate"><span class="pre">NoCmdSets</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.__init__"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.copy"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.copy()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.get"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.get()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.items"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.items()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.itervaluerefs()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.keys"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.keys()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.pop"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.pop()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.popitem"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.popitem()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.setdefault"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.setdefault()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.update"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.update()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.valuerefs"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.valuerefs()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.values"><code class="docutils literal notranslate"><span class="pre">WeakValueDictionary.values()</span></code></a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.chain"><code class="docutils literal notranslate"><span class="pre">chain</span></code></a><ul>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.chain.from_iterable"><code class="docutils literal notranslate"><span class="pre">chain.from_iterable()</span></code></a></li>
</ul>
@ -2012,6 +1997,7 @@ with q, remove the break line and restart server when finished.</p></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -2384,6 +2370,7 @@ with q, remove the break line and restart server when finished.</p></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.comms.html#evennia.commands.default.comms.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -3357,6 +3344,10 @@ with q, remove the break line and restart server when finished.</p></li>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestSystemCommands.test_multimatch"><code class="docutils literal notranslate"><span class="pre">TestSystemCommands.test_multimatch()</span></code></a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable</span></code></a><ul>
<li class="toctree-l5"><a class="reference internal" href="evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd"><code class="docutils literal notranslate"><span class="pre">TestPreCmdOutputTestable.test_pre_cmd()</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="evennia.commands.default.unloggedin.html">evennia.commands.default.unloggedin</a><ul>
@ -11211,6 +11202,7 @@ with q, remove the break line and restart server when finished.</p></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -11615,6 +11607,7 @@ with q, remove the break line and restart server when finished.</p></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>
@ -13412,6 +13405,7 @@ with q, remove the break line and restart server when finished.</p></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -78,6 +78,7 @@ objects inherit from classes in this package.</p>
<li class="toctree-l3"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.objects.manager.html#evennia.objects.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -501,6 +501,11 @@ matches against the expressions.</p>
<span class="sig-name descname"><span class="pre">conditional</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">True</span></em><a class="headerlink" href="#evennia.objects.manager.Q.conditional" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.objects.manager.Q.connectors">
<span class="sig-name descname"><span class="pre">connectors</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">(None,</span> <span class="pre">'AND',</span> <span class="pre">'OR',</span> <span class="pre">'XOR')</span></em><a class="headerlink" href="#evennia.objects.manager.Q.connectors" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.objects.manager.Q.deconstruct">
<span class="sig-name descname"><span class="pre">deconstruct</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/django/db/models/query_utils.html#Q.deconstruct"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.objects.manager.Q.deconstruct" title="Link to this definition"></a></dt>
@ -1362,6 +1367,7 @@ array) instead of strings.</p></li>
<li><a class="reference internal" href="#evennia.objects.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.objects.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li><a class="reference internal" href="#evennia.objects.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li><a class="reference internal" href="#evennia.objects.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li><a class="reference internal" href="#evennia.objects.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li><a class="reference internal" href="#evennia.objects.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li><a class="reference internal" href="#evennia.objects.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -378,7 +378,8 @@ expected - for example, one usually do not want to remove the objects locatio
if its not set in the prototype. With <strong>exact=True</strong>, all un-specified properties of the
objects will be removed if they exist. This will lead to a more accurate 1:1 correlation
between the object and the prototype but is usually impractical.</p></li>
<li><p><strong>caller</strong> (<em>Object</em><em> or </em><em>Account</em><em>, </em><em>optional</em>) This may be used by protfuncs to do permission checks.</p></li>
<li><p><strong>caller</strong> (<em>Object</em><em> or </em><em>Account</em><em>, </em><em>optional</em>) The object requesting the update. Required when using
protofuncs that perform searches. For example ($obj, $objlist, $dbref, $search).</p></li>
<li><p><strong>protfunc_raise_errors</strong> (<em>bool</em>) Have protfuncs raise explicit errors if malformed/not found.
This is highly recommended.</p></li>
</ul>
@ -460,7 +461,8 @@ dictionary. These will be batched-spawned as one object each.</p>
</dd>
<dt class="field-even">Keyword Arguments<span class="colon">:</span></dt>
<dd class="field-even"><ul class="simple">
<li><p><strong>caller</strong> (<em>Object</em><em> or </em><em>Account</em><em>, </em><em>optional</em>) This may be used by protfuncs to do access checks.</p></li>
<li><p><strong>caller</strong> (<em>Object</em><em> or </em><em>Account</em><em>, </em><em>optional</em>) The object requesting the update. Required when using
protofuncs that perform searches. For example ($obj, $objlist, $dbref, $search).</p></li>
<li><p><strong>prototype_modules</strong> (<em>str</em><em> or </em><em>list</em>) A python-path to a prototype
module, or a list of such paths. These will be used to build
the global protparents dictionary accessible by the input

View file

@ -74,6 +74,7 @@ timed effects.</p>
<li class="toctree-l3"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.scripts.manager.html#evennia.scripts.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -285,6 +285,11 @@ matches against the expressions.</p>
<span class="sig-name descname"><span class="pre">conditional</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">True</span></em><a class="headerlink" href="#evennia.scripts.manager.Q.conditional" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.scripts.manager.Q.connectors">
<span class="sig-name descname"><span class="pre">connectors</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">(None,</span> <span class="pre">'AND',</span> <span class="pre">'OR',</span> <span class="pre">'XOR')</span></em><a class="headerlink" href="#evennia.scripts.manager.Q.connectors" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.scripts.manager.Q.deconstruct">
<span class="sig-name descname"><span class="pre">deconstruct</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/django/db/models/query_utils.html#Q.deconstruct"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.scripts.manager.Q.deconstruct" title="Link to this definition"></a></dt>
@ -1097,6 +1102,7 @@ object.</p>
<li><a class="reference internal" href="#evennia.scripts.manager.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.manager.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.manager.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.manager.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.manager.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.manager.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li><a class="reference internal" href="#evennia.scripts.manager.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -307,6 +307,7 @@ Attribute and Tag models are defined along with their handlers.</p>
<li class="toctree-l3"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -1039,6 +1039,11 @@ matches against the expressions.</p>
<span class="sig-name descname"><span class="pre">conditional</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">True</span></em><a class="headerlink" href="#evennia.typeclasses.managers.Q.conditional" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.typeclasses.managers.Q.connectors">
<span class="sig-name descname"><span class="pre">connectors</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">(None,</span> <span class="pre">'AND',</span> <span class="pre">'OR',</span> <span class="pre">'XOR')</span></em><a class="headerlink" href="#evennia.typeclasses.managers.Q.connectors" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt class="sig sig-object py" id="evennia.typeclasses.managers.Q.deconstruct">
<span class="sig-name descname"><span class="pre">deconstruct</span></span><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/django/db/models/query_utils.html#Q.deconstruct"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.typeclasses.managers.Q.deconstruct" title="Link to this definition"></a></dt>
@ -1704,6 +1709,7 @@ are replaced by the <strong>default</strong> argument.</p>
<li><a class="reference internal" href="#evennia.typeclasses.managers.Q.__init__"><code class="docutils literal notranslate"><span class="pre">Q.__init__()</span></code></a></li>
<li><a class="reference internal" href="#evennia.typeclasses.managers.Q.check"><code class="docutils literal notranslate"><span class="pre">Q.check()</span></code></a></li>
<li><a class="reference internal" href="#evennia.typeclasses.managers.Q.conditional"><code class="docutils literal notranslate"><span class="pre">Q.conditional</span></code></a></li>
<li><a class="reference internal" href="#evennia.typeclasses.managers.Q.connectors"><code class="docutils literal notranslate"><span class="pre">Q.connectors</span></code></a></li>
<li><a class="reference internal" href="#evennia.typeclasses.managers.Q.deconstruct"><code class="docutils literal notranslate"><span class="pre">Q.deconstruct()</span></code></a></li>
<li><a class="reference internal" href="#evennia.typeclasses.managers.Q.default"><code class="docutils literal notranslate"><span class="pre">Q.default</span></code></a></li>
<li><a class="reference internal" href="#evennia.typeclasses.managers.Q.flatten"><code class="docutils literal notranslate"><span class="pre">Q.flatten()</span></code></a></li>

View file

@ -290,7 +290,7 @@ indentation.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.utils.eveditor.CmdEditorGroup.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">[':u',</span> <span class="pre">':h',</span> <span class="pre">':fi',</span> <span class="pre">':q!',</span> <span class="pre">':x',</span> <span class="pre">':dd',</span> <span class="pre">':I',</span> <span class="pre">':A',</span> <span class="pre">':uu',</span> <span class="pre">':S',</span> <span class="pre">':&gt;',</span> <span class="pre">':DD',</span> <span class="pre">':::',</span> <span class="pre">':p',</span> <span class="pre">':&lt;',</span> <span class="pre">':=',</span> <span class="pre">':q',</span> <span class="pre">':UU',</span> <span class="pre">':s',</span> <span class="pre">':i',</span> <span class="pre">':y',</span> <span class="pre">':w',</span> <span class="pre">'::',</span> <span class="pre">':dw',</span> <span class="pre">':!',</span> <span class="pre">':f',</span> <span class="pre">':',</span> <span class="pre">':j',</span> <span class="pre">':r',</span> <span class="pre">':fd',</span> <span class="pre">':echo',</span> <span class="pre">':wq']</span></em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">[':y',</span> <span class="pre">':u',</span> <span class="pre">':::',</span> <span class="pre">':fd',</span> <span class="pre">':s',</span> <span class="pre">':dw',</span> <span class="pre">':dd',</span> <span class="pre">':A',</span> <span class="pre">':!',</span> <span class="pre">':f',</span> <span class="pre">':uu',</span> <span class="pre">':h',</span> <span class="pre">':r',</span> <span class="pre">':echo',</span> <span class="pre">':q',</span> <span class="pre">':&gt;',</span> <span class="pre">':DD',</span> <span class="pre">':&lt;',</span> <span class="pre">':i',</span> <span class="pre">':S',</span> <span class="pre">':I',</span> <span class="pre">':UU',</span> <span class="pre">':fi',</span> <span class="pre">'::',</span> <span class="pre">':j',</span> <span class="pre">':q!',</span> <span class="pre">':p',</span> <span class="pre">':=',</span> <span class="pre">':x',</span> <span class="pre">':',</span> <span class="pre">':wq',</span> <span class="pre">':w']</span></em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -318,7 +318,7 @@ efficient presentation.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.utils.eveditor.CmdEditorGroup.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">':u</span> <span class="pre">:h</span> <span class="pre">:fi</span> <span class="pre">:q!</span> <span class="pre">:x</span> <span class="pre">:dd</span> <span class="pre">:I</span> <span class="pre">:A</span> <span class="pre">:uu</span> <span class="pre">:S</span> <span class="pre">:&gt;</span> <span class="pre">:DD</span> <span class="pre">:::</span> <span class="pre">:p</span> <span class="pre">:&lt;</span> <span class="pre">:=</span> <span class="pre">:q</span> <span class="pre">:UU</span> <span class="pre">:s</span> <span class="pre">:i</span> <span class="pre">:y</span> <span class="pre">:w</span> <span class="pre">::</span> <span class="pre">:dw</span> <span class="pre">:!</span> <span class="pre">:f</span> <span class="pre">:</span> <span class="pre">:j</span> <span class="pre">:r</span> <span class="pre">:fd</span> <span class="pre">:echo</span> <span class="pre">:wq',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">':editor_command_group',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">:u</span> <span class="pre">:h</span> <span class="pre">:fi</span> <span class="pre">:q!</span> <span class="pre">:x</span> <span class="pre">:dd</span> <span class="pre">:I</span> <span class="pre">:A</span> <span class="pre">:uu</span> <span class="pre">:S</span> <span class="pre">:&gt;</span> <span class="pre">:DD</span> <span class="pre">:::</span> <span class="pre">:p</span> <span class="pre">:&lt;</span> <span class="pre">:=</span> <span class="pre">:q</span> <span class="pre">:UU</span> <span class="pre">:s</span> <span class="pre">:i</span> <span class="pre">:y</span> <span class="pre">:w</span> <span class="pre">::</span> <span class="pre">:dw</span> <span class="pre">:!</span> <span class="pre">:f</span> <span class="pre">:</span> <span class="pre">:j</span> <span class="pre">:r</span> <span class="pre">:fd</span> <span class="pre">:echo</span> <span class="pre">:wq',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nCommands</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">editor\n'}</span></em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">':y</span> <span class="pre">:u</span> <span class="pre">:::</span> <span class="pre">:fd</span> <span class="pre">:s</span> <span class="pre">:dw</span> <span class="pre">:dd</span> <span class="pre">:A</span> <span class="pre">:!</span> <span class="pre">:f</span> <span class="pre">:uu</span> <span class="pre">:h</span> <span class="pre">:r</span> <span class="pre">:echo</span> <span class="pre">:q</span> <span class="pre">:&gt;</span> <span class="pre">:DD</span> <span class="pre">:&lt;</span> <span class="pre">:i</span> <span class="pre">:S</span> <span class="pre">:I</span> <span class="pre">:UU</span> <span class="pre">:fi</span> <span class="pre">::</span> <span class="pre">:j</span> <span class="pre">:q!</span> <span class="pre">:p</span> <span class="pre">:=</span> <span class="pre">:x</span> <span class="pre">:</span> <span class="pre">:wq</span> <span class="pre">:w',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">':editor_command_group',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">:y</span> <span class="pre">:u</span> <span class="pre">:::</span> <span class="pre">:fd</span> <span class="pre">:s</span> <span class="pre">:dw</span> <span class="pre">:dd</span> <span class="pre">:A</span> <span class="pre">:!</span> <span class="pre">:f</span> <span class="pre">:uu</span> <span class="pre">:h</span> <span class="pre">:r</span> <span class="pre">:echo</span> <span class="pre">:q</span> <span class="pre">:&gt;</span> <span class="pre">:DD</span> <span class="pre">:&lt;</span> <span class="pre">:i</span> <span class="pre">:S</span> <span class="pre">:I</span> <span class="pre">:UU</span> <span class="pre">:fi</span> <span class="pre">::</span> <span class="pre">:j</span> <span class="pre">:q!</span> <span class="pre">:p</span> <span class="pre">:=</span> <span class="pre">:x</span> <span class="pre">:</span> <span class="pre">:wq</span> <span class="pre">:w',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nCommands</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">editor\n'}</span></em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -882,7 +882,7 @@ single question.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.utils.evmenu.CmdYesNoQuestion.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['__nomatch_command',</span> <span class="pre">'y',</span> <span class="pre">'no',</span> <span class="pre">'yes',</span> <span class="pre">'a',</span> <span class="pre">'abort',</span> <span class="pre">'n']</span></em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['__nomatch_command',</span> <span class="pre">'a',</span> <span class="pre">'yes',</span> <span class="pre">'abort',</span> <span class="pre">'no',</span> <span class="pre">'y',</span> <span class="pre">'n']</span></em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -908,7 +908,7 @@ single question.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'__nomatch_command</span> <span class="pre">y</span> <span class="pre">no</span> <span class="pre">yes</span> <span class="pre">a</span> <span class="pre">abort</span> <span class="pre">n',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'__noinput_command',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">__nomatch_command</span> <span class="pre">y</span> <span class="pre">no</span> <span class="pre">yes</span> <span class="pre">a</span> <span class="pre">abort</span> <span class="pre">n',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nHandle</span> <span class="pre">a</span> <span class="pre">prompt</span> <span class="pre">for</span> <span class="pre">yes</span> <span class="pre">or</span> <span class="pre">no.</span> <span class="pre">Press</span> <span class="pre">[return]</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">default</span> <span class="pre">choice.\n\n'}</span></em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'__nomatch_command</span> <span class="pre">a</span> <span class="pre">yes</span> <span class="pre">abort</span> <span class="pre">no</span> <span class="pre">y</span> <span class="pre">n',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'__noinput_command',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">__nomatch_command</span> <span class="pre">a</span> <span class="pre">yes</span> <span class="pre">abort</span> <span class="pre">no</span> <span class="pre">y</span> <span class="pre">n',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nHandle</span> <span class="pre">a</span> <span class="pre">prompt</span> <span class="pre">for</span> <span class="pre">yes</span> <span class="pre">or</span> <span class="pre">no.</span> <span class="pre">Press</span> <span class="pre">[return]</span> <span class="pre">for</span> <span class="pre">the</span> <span class="pre">default</span> <span class="pre">choice.\n\n'}</span></em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -85,7 +85,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.utils.evmore.CmdMore.aliases">
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['quit',</span> <span class="pre">'previous',</span> <span class="pre">'p',</span> <span class="pre">'top',</span> <span class="pre">'q',</span> <span class="pre">'a',</span> <span class="pre">'end',</span> <span class="pre">'next',</span> <span class="pre">'abort',</span> <span class="pre">'n',</span> <span class="pre">'e',</span> <span class="pre">'t']</span></em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">aliases</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">['top',</span> <span class="pre">'a',</span> <span class="pre">'quit',</span> <span class="pre">'previous',</span> <span class="pre">'abort',</span> <span class="pre">'p',</span> <span class="pre">'e',</span> <span class="pre">'next',</span> <span class="pre">'t',</span> <span class="pre">'end',</span> <span class="pre">'n',</span> <span class="pre">'q']</span></em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Link to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -111,7 +111,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt class="sig sig-object py" id="evennia.utils.evmore.CmdMore.search_index_entry">
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'quit</span> <span class="pre">previous</span> <span class="pre">p</span> <span class="pre">top</span> <span class="pre">q</span> <span class="pre">a</span> <span class="pre">end</span> <span class="pre">next</span> <span class="pre">abort</span> <span class="pre">n</span> <span class="pre">e</span> <span class="pre">t',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'__noinput_command',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">quit</span> <span class="pre">previous</span> <span class="pre">p</span> <span class="pre">top</span> <span class="pre">q</span> <span class="pre">a</span> <span class="pre">end</span> <span class="pre">next</span> <span class="pre">abort</span> <span class="pre">n</span> <span class="pre">e</span> <span class="pre">t',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nManipulate</span> <span class="pre">the</span> <span class="pre">text</span> <span class="pre">paging.</span> <span class="pre">Catch</span> <span class="pre">no-input</span> <span class="pre">with</span> <span class="pre">aliases.\n'}</span></em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Link to this definition"></a></dt>
<span class="sig-name descname"><span class="pre">search_index_entry</span></span><em class="property"><span class="w"> </span><span class="p"><span class="pre">=</span></span><span class="w"> </span><span class="pre">{'aliases':</span> <span class="pre">'top</span> <span class="pre">a</span> <span class="pre">quit</span> <span class="pre">previous</span> <span class="pre">abort</span> <span class="pre">p</span> <span class="pre">e</span> <span class="pre">next</span> <span class="pre">t</span> <span class="pre">end</span> <span class="pre">n</span> <span class="pre">q',</span> <span class="pre">'category':</span> <span class="pre">'general',</span> <span class="pre">'key':</span> <span class="pre">'__noinput_command',</span> <span class="pre">'no_prefix':</span> <span class="pre">'</span> <span class="pre">top</span> <span class="pre">a</span> <span class="pre">quit</span> <span class="pre">previous</span> <span class="pre">abort</span> <span class="pre">p</span> <span class="pre">e</span> <span class="pre">next</span> <span class="pre">t</span> <span class="pre">end</span> <span class="pre">n</span> <span class="pre">q',</span> <span class="pre">'tags':</span> <span class="pre">'',</span> <span class="pre">'text':</span> <span class="pre">'\nManipulate</span> <span class="pre">the</span> <span class="pre">text</span> <span class="pre">paging.</span> <span class="pre">Catch</span> <span class="pre">no-input</span> <span class="pre">with</span> <span class="pre">aliases.\n'}</span></em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Link to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -100,8 +100,6 @@
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.ErrorReported.__init__">(evennia.commands.cmdhandler.ErrorReported method)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.ExecSystemCommand.__init__">(evennia.commands.cmdhandler.ExecSystemCommand method)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.__init__">(evennia.commands.cmdhandler.WeakValueDictionary method)</a>
</li>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.CmdSet.__init__">(evennia.commands.cmdset.CmdSet method)</a>
</li>
@ -5140,12 +5138,12 @@
</ul></li>
<li><a href="api/evennia.contrib.grid.simpledoor.simpledoor.html#evennia.contrib.grid.simpledoor.simpledoor.CmdOpenCloseDoor">CmdOpenCloseDoor (class in evennia.contrib.grid.simpledoor.simpledoor)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.CmdOpenLid">CmdOpenLid (class in evennia.contrib.tutorials.red_button.red_button)</a>
</li>
<li><a href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOption">CmdOption (class in evennia.commands.default.account)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.full_systems.evscaperoom.commands.html#evennia.contrib.full_systems.evscaperoom.commands.CmdOptions">CmdOptions (class in evennia.contrib.full_systems.evscaperoom.commands)</a>
</li>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdPage">CmdPage (class in evennia.commands.default.comms)</a>
@ -5840,6 +5838,18 @@
</ul></li>
<li><a href="api/evennia.server.connection_wizard.html#evennia.server.connection_wizard.ConnectionWizard">ConnectionWizard (class in evennia.server.connection_wizard)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.Q.connectors">connectors (evennia.commands.default.building.Q attribute)</a>
<ul>
<li><a href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.Q.connectors">(evennia.commands.default.comms.Q attribute)</a>
</li>
<li><a href="api/evennia.objects.manager.html#evennia.objects.manager.Q.connectors">(evennia.objects.manager.Q attribute)</a>
</li>
<li><a href="api/evennia.scripts.manager.html#evennia.scripts.manager.Q.connectors">(evennia.scripts.manager.Q attribute)</a>
</li>
<li><a href="api/evennia.typeclasses.managers.html#evennia.typeclasses.managers.Q.connectors">(evennia.typeclasses.managers.Q attribute)</a>
</li>
</ul></li>
<li><a href="api/evennia.contrib.tutorials.evadventure.characters.html#evennia.contrib.tutorials.evadventure.characters.EvAdventureCharacter.constitution">constitution (evennia.contrib.tutorials.evadventure.characters.EvAdventureCharacter attribute)</a>
<ul>
@ -5979,8 +5989,6 @@
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.defaultdict.copy">copy() (evennia.commands.cmdhandler.defaultdict method)</a>
<ul>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.copy">(evennia.commands.cmdhandler.WeakValueDictionary method)</a>
</li>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.copy">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
<li><a href="api/evennia.commands.default.general.html#evennia.commands.default.general.DefaultObject.copy">(evennia.commands.default.general.DefaultObject method)</a>
@ -12989,8 +12997,6 @@
<li><a href="api/evennia.accounts.manager.html#evennia.accounts.manager.TypeclassManager.get">(evennia.accounts.manager.TypeclassManager method)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.CmdSet.get">(evennia.commands.cmdhandler.CmdSet method)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.get">(evennia.commands.cmdhandler.WeakValueDictionary method)</a>
</li>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.CmdSet.get">(evennia.commands.cmdset.CmdSet method)</a>
</li>
@ -15772,11 +15778,11 @@
<li><a href="api/evennia.web.admin.tags.html#evennia.web.admin.tags.InlineTagForm">InlineTagForm (class in evennia.web.admin.tags)</a>
</li>
<li><a href="api/evennia.web.admin.tags.html#evennia.web.admin.tags.InlineTagForm.Meta">InlineTagForm.Meta (class in evennia.web.admin.tags)</a>
</li>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.InMemoryAttribute">InMemoryAttribute (class in evennia.typeclasses.attributes)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.InMemoryAttribute">InMemoryAttribute (class in evennia.typeclasses.attributes)</a>
</li>
<li><a href="api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.InMemoryAttributeBackend">InMemoryAttributeBackend (class in evennia.typeclasses.attributes)</a>
<ul>
@ -16109,11 +16115,9 @@
</li>
<li><a href="api/evennia.contrib.game_systems.turnbattle.tb_items.html#evennia.contrib.game_systems.turnbattle.tb_items.ITEMFUNCS">ITEMFUNCS (in module evennia.contrib.game_systems.turnbattle.tb_items)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.items">items() (evennia.commands.cmdhandler.WeakValueDictionary method)</a>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.items">items() (evennia.commands.cmdset.WeakKeyDictionary method)</a>
<ul>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.items">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.OrderedDict.items">(evennia.utils.dbserialize.OrderedDict method)</a>
</li>
</ul></li>
@ -16124,8 +16128,6 @@
</li>
</ul></li>
<li><a href="api/evennia.utils.utils.html#evennia.utils.utils.iter_to_string">iter_to_string() (in module evennia.utils.utils)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.itervaluerefs">itervaluerefs() (evennia.commands.cmdhandler.WeakValueDictionary method)</a>
</li>
</ul></td>
</tr></table>
@ -17009,11 +17011,9 @@
</li>
<li><a href="api/evennia.contrib.base_systems.building_menu.building_menu.html#evennia.contrib.base_systems.building_menu.building_menu.Choice.keys">keys (evennia.contrib.base_systems.building_menu.building_menu.Choice property)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.keys">keys() (evennia.commands.cmdhandler.WeakValueDictionary method)</a>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.keys">keys() (evennia.commands.cmdset.WeakKeyDictionary method)</a>
<ul>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.keys">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.OrderedDict.keys">(evennia.utils.dbserialize.OrderedDict method)</a>
</li>
</ul></li>
@ -22268,11 +22268,9 @@
</li>
<li><a href="api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.pong">pong() (evennia.server.portal.irc.IRCBot method)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.pop">pop() (evennia.commands.cmdhandler.WeakValueDictionary method)</a>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.pop">pop() (evennia.commands.cmdset.WeakKeyDictionary method)</a>
<ul>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.pop">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.deque.pop">(evennia.utils.dbserialize.deque method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.MutableMapping.pop">(evennia.utils.dbserialize.MutableMapping method)</a>
@ -22284,11 +22282,9 @@
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.OrderedDict.pop">(evennia.utils.dbserialize.OrderedDict method)</a>
</li>
</ul></li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.popitem">popitem() (evennia.commands.cmdhandler.WeakValueDictionary method)</a>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.popitem">popitem() (evennia.commands.cmdset.WeakKeyDictionary method)</a>
<ul>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.popitem">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.MutableMapping.popitem">(evennia.utils.dbserialize.MutableMapping method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.OrderedDict.popitem">(evennia.utils.dbserialize.OrderedDict method)</a>
@ -25044,10 +25040,10 @@
<li><a href="api/evennia.server.portal.webclient.html#evennia.server.portal.webclient.WebSocketClient.sendLine">(evennia.server.portal.webclient.WebSocketClient method)</a>
</li>
</ul></li>
<li><a href="api/evennia.contrib.utils.fieldfill.fieldfill.html#evennia.contrib.utils.fieldfill.fieldfill.sendmessage">sendmessage() (in module evennia.contrib.utils.fieldfill.fieldfill)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.contrib.utils.fieldfill.fieldfill.html#evennia.contrib.utils.fieldfill.fieldfill.sendmessage">sendmessage() (in module evennia.contrib.utils.fieldfill.fieldfill)</a>
</li>
<li><a href="api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.SENWMapLink">SENWMapLink (class in evennia.contrib.grid.xyzgrid.xymap_legend)</a>
</li>
<li><a href="api/evennia.contrib.base_systems.building_menu.building_menu.html#evennia.contrib.base_systems.building_menu.building_menu.BuildingMenu.sep_keys">sep_keys (evennia.contrib.base_systems.building_menu.building_menu.BuildingMenu attribute)</a>
@ -25278,11 +25274,9 @@
</li>
<li><a href="api/evennia.html#evennia.set_trace">set_trace() (in module evennia)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.setdefault">setdefault() (evennia.commands.cmdhandler.WeakValueDictionary method)</a>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.setdefault">setdefault() (evennia.commands.cmdset.WeakKeyDictionary method)</a>
<ul>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.setdefault">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.MutableMapping.setdefault">(evennia.utils.dbserialize.MutableMapping method)</a>
</li>
<li><a href="api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.OrderedDict.setdefault">(evennia.utils.dbserialize.OrderedDict method)</a>
@ -28001,6 +27995,8 @@
<li><a href="api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_possessive_selfref">test_possessive_selfref() (evennia.contrib.rpg.rpsystem.tests.TestRPSystem method)</a>
</li>
<li><a href="api/evennia.web.website.tests.html#evennia.web.website.tests.LogoutTest.test_post">test_post() (evennia.web.website.tests.LogoutTest method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable.test_pre_cmd">test_pre_cmd() (evennia.commands.default.tests.TestPreCmdOutputTestable method)</a>
</li>
<li><a href="api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftingRecipeBase.test_pre_craft">test_pre_craft() (evennia.contrib.game_systems.crafting.tests.TestCraftingRecipeBase method)</a>
</li>
@ -29095,6 +29091,8 @@
<li><a href="api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestNumericTraitOperators">TestNumericTraitOperators (class in evennia.contrib.rpg.traits.tests)</a>
</li>
<li><a href="api/evennia.utils.idmapper.tests.html#evennia.utils.idmapper.tests.SharedMemorysTest.testObjectDeletion">testObjectDeletion() (evennia.utils.idmapper.tests.SharedMemorysTest method)</a>
</li>
<li><a href="api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestPreCmdOutputTestable">TestPreCmdOutputTestable (class in evennia.commands.default.tests)</a>
</li>
<li><a href="api/evennia.utils.verb_conjugation.tests.html#evennia.utils.verb_conjugation.tests.TestPronounMapping">TestPronounMapping (class in evennia.utils.verb_conjugation.tests)</a>
</li>
@ -30122,8 +30120,6 @@
<ul>
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.Throttle.update">(evennia.accounts.accounts.Throttle method)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.update">(evennia.commands.cmdhandler.WeakValueDictionary method)</a>
</li>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.update">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
@ -30158,10 +30154,10 @@
</li>
<li><a href="api/evennia.utils.idmapper.models.html#evennia.utils.idmapper.models.update_cached_instance">update_cached_instance() (in module evennia.utils.idmapper.models)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.server.service.html#evennia.server.service.EvenniaServerService.update_defaults">update_defaults() (evennia.server.service.EvenniaServerService method)</a>
</li>
</ul></td>
<td style="width: 33%; vertical-align: top;"><ul>
<li><a href="api/evennia.accounts.accounts.html#evennia.accounts.accounts.ValidationError.update_error_dict">update_error_dict() (evennia.accounts.accounts.ValidationError method)</a>
</li>
<li><a href="api/evennia.server.serversession.html#evennia.server.serversession.ServerSession.update_flags">update_flags() (evennia.server.serversession.ServerSession method)</a>
@ -30455,14 +30451,10 @@
<li><a href="api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.value_to_obj_or_any">value_to_obj_or_any() (in module evennia.prototypes.prototypes)</a>
</li>
<li><a href="api/evennia.utils.picklefield.html#evennia.utils.picklefield.PickledObjectField.value_to_string">value_to_string() (evennia.utils.picklefield.PickledObjectField method)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.valuerefs">valuerefs() (evennia.commands.cmdhandler.WeakValueDictionary method)</a>
</li>
<li><a href="api/evennia.accounts.manager.html#evennia.accounts.manager.TypeclassManager.values">values() (evennia.accounts.manager.TypeclassManager method)</a>
<ul>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary.values">(evennia.commands.cmdhandler.WeakValueDictionary method)</a>
</li>
<li><a href="api/evennia.commands.cmdset.html#evennia.commands.cmdset.WeakKeyDictionary.values">(evennia.commands.cmdset.WeakKeyDictionary method)</a>
</li>
<li><a href="api/evennia.objects.manager.html#evennia.objects.manager.TypeclassManager.values">(evennia.objects.manager.TypeclassManager method)</a>
@ -30621,8 +30613,6 @@
<li><a href="api/evennia.utils.idmapper.models.html#evennia.utils.idmapper.models.WeakSharedMemoryModel.Meta">WeakSharedMemoryModel.Meta (class in evennia.utils.idmapper.models)</a>
</li>
<li><a href="api/evennia.utils.idmapper.models.html#evennia.utils.idmapper.models.WeakSharedMemoryModelBase">WeakSharedMemoryModelBase (class in evennia.utils.idmapper.models)</a>
</li>
<li><a href="api/evennia.commands.cmdhandler.html#evennia.commands.cmdhandler.WeakValueDictionary">WeakValueDictionary (class in evennia.commands.cmdhandler)</a>
</li>
<li><a href="api/evennia.contrib.tutorials.evadventure.characters.html#evennia.contrib.tutorials.evadventure.characters.EvAdventureCharacter.weapon">weapon (evennia.contrib.tutorials.evadventure.characters.EvAdventureCharacter property)</a>
</li>

View file

@ -41,7 +41,7 @@
<section class="tex2jax_ignore mathjax_ignore" id="evennia-documentation">
<h1>Evennia Documentation<a class="headerlink" href="#evennia-documentation" title="Link to this heading"></a></h1>
<p>This is the manual of <a class="reference external" href="https://www.evennia.com">Evennia</a>, the open source Python <code class="docutils literal notranslate"><span class="pre">MU*</span></code> creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated outubro 26, 2024, see the <a class="reference internal" href="Coding/Changelog.html"><span class="std std-doc">Evennia Changelog</span></a>. Latest released Evennia version is 5.0.1.</p>
<p>This is the manual of <a class="reference external" href="https://www.evennia.com">Evennia</a>, the open source Python <code class="docutils literal notranslate"><span class="pre">MU*</span></code> creation system. Use the Search bar on the left to find or discover interesting articles. This manual was last updated January 12, 2026, see the <a class="reference internal" href="Coding/Changelog.html"><span class="std std-doc">Evennia Changelog</span></a>. Latest released Evennia version is 5.0.1.</p>
<ul class="simple">
<li><p><a class="reference internal" href="Evennia-Introduction.html"><span class="std std-doc">Introduction</span></a> - what is this Evennia thing?</p></li>
<li><p><a class="reference internal" href="Evennia-In-Pictures.html"><span class="std std-doc">Evennia in Pictures</span></a> - a visual overview of Evennia</p></li>

Binary file not shown.

File diff suppressed because one or more lines are too long