Updated HTML docs

This commit is contained in:
Evennia docbuilder action 2022-02-08 12:09:39 +00:00
parent 92402ccca7
commit f3dcfa1076
194 changed files with 4234 additions and 3189 deletions

View file

@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
config: 53b070ed38bc6c8d1b9b39f31b1fde86
config: b0c74fd4155f19df730d5c4fad06634c
tags: 645f666f9bcd5a90fca523b33c5a78b7

View file

@ -363,7 +363,7 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="p">((</span><span class="s2">&quot;typeclasses&quot;</span><span class="p">,</span> <span class="s2">&quot;defaultplayer&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;typeclasses&quot;</span><span class="p">,</span> <span class="s2">&quot;defaultaccount&quot;</span><span class="p">)),</span>
<span class="p">]</span>
<span class="c1"># Default type of autofield (required by Django)</span>
<span class="n">DEFAULT_AUTO_FIELD</span> <span class="o">=</span> <span class="s1">&#39;django.db.models.AutoField&#39;</span>
<span class="n">DEFAULT_AUTO_FIELD</span> <span class="o">=</span> <span class="s2">&quot;django.db.models.AutoField&quot;</span>
<span class="c1">######################################################################</span>
<span class="c1"># Evennia webclient options</span>
@ -378,7 +378,7 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># Shows notifications of new messages as popup windows</span>
<span class="s2">&quot;notification_popup&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
<span class="c1"># Plays a sound for notifications of new messages</span>
<span class="s2">&quot;notification_sound&quot;</span><span class="p">:</span> <span class="kc">False</span>
<span class="s2">&quot;notification_sound&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1">######################################################################</span>
@ -549,7 +549,7 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># input. By default the command-name should end with a space or / (since the</span>
<span class="c1"># default commands uses MuxCommand and /switches). Note that the extra \n</span>
<span class="c1"># is necessary for use with batchprocessor.</span>
<span class="n">COMMAND_DEFAULT_ARG_REGEX</span> <span class="o">=</span> <span class="sa">r</span><span class="s1">&#39;^[ /]|\n|$&#39;</span>
<span class="n">COMMAND_DEFAULT_ARG_REGEX</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;^[ /]|\n|$&quot;</span>
<span class="c1"># By default, Command.msg will only send data to the Session calling</span>
<span class="c1"># the Command in the first place. If set, Command.msg will instead return</span>
<span class="c1"># data to all Sessions connected to the Account/Character associated with</span>
@ -723,9 +723,9 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># This changes the start-symbol for the funcparser callable. Note that</span>
<span class="c1"># this will make a lot of documentation invalid and there may also be</span>
<span class="c1"># other unexpected side effects, so change with caution.</span>
<span class="n">FUNCPARSER_START_CHAR</span> <span class="o">=</span> <span class="s1">&#39;$&#39;</span>
<span class="n">FUNCPARSER_START_CHAR</span> <span class="o">=</span> <span class="s2">&quot;$&quot;</span>
<span class="c1"># The symbol to use to escape Func</span>
<span class="n">FUNCPARSER_ESCAPE_CHAR</span> <span class="o">=</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&#39;</span>
<span class="n">FUNCPARSER_ESCAPE_CHAR</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span>
<span class="c1"># This is the global max nesting-level for nesting functions in</span>
<span class="c1"># the funcparser. This protects against infinite loops.</span>
<span class="n">FUNCPARSER_MAX_NESTING</span> <span class="o">=</span> <span class="mi">20</span>
@ -738,8 +738,10 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;evennia.utils.funcparser&quot;</span><span class="p">,</span> <span class="s2">&quot;server.conf.inlinefuncs&quot;</span><span class="p">]</span>
<span class="c1"># Prototype values are also parsed with FuncParser. These modules</span>
<span class="c1"># define which $func callables are available to use in prototypes.</span>
<span class="n">FUNCPARSER_PROTOTYPE_PARSING_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;evennia.prototypes.protfuncs&quot;</span><span class="p">,</span>
<span class="s2">&quot;server.conf.prototypefuncs&quot;</span><span class="p">]</span>
<span class="n">FUNCPARSER_PROTOTYPE_PARSING_MODULES</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;evennia.prototypes.protfuncs&quot;</span><span class="p">,</span>
<span class="s2">&quot;server.conf.prototypefuncs&quot;</span><span class="p">,</span>
<span class="p">]</span>
<span class="c1">######################################################################</span>
<span class="c1"># Global Scripts</span>
@ -807,7 +809,7 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># since they can be exploitative. This list defines Account-level permissions</span>
<span class="c1"># (and higher) that bypass this stripping. It is used as a fallback if a</span>
<span class="c1"># specific list of perms are not given to the helper function.</span>
<span class="n">INPUT_CLEANUP_BYPASS_PERMISSIONS</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;Builder&#39;</span><span class="p">]</span>
<span class="n">INPUT_CLEANUP_BYPASS_PERMISSIONS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Builder&quot;</span><span class="p">]</span>
<span class="c1">######################################################################</span>
@ -960,8 +962,8 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># Where to find locales (no need to change this, most likely)</span>
<span class="n">LOCALE_PATHS</span> <span class="o">=</span> <span class="p">[</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">EVENNIA_DIR</span><span class="p">,</span> <span class="s2">&quot;locale/&quot;</span><span class="p">)]</span>
<span class="c1"># How to display time stamps in e.g. the admin</span>
<span class="n">SHORT_DATETIME_FORMAT</span> <span class="o">=</span> <span class="s1">&#39;Y-m-d H:i:s.u&#39;</span>
<span class="n">DATETIME_FORMAT</span> <span class="o">=</span> <span class="s1">&#39;Y-m-d H:i:s&#39;</span> <span class="c1"># ISO 8601 but without T and timezone</span>
<span class="n">SHORT_DATETIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;Y-m-d H:i:s.u&quot;</span>
<span class="n">DATETIME_FORMAT</span> <span class="o">=</span> <span class="s2">&quot;Y-m-d H:i:s&quot;</span> <span class="c1"># ISO 8601 but without T and timezone</span>
<span class="c1"># This should be turned off unless you want to do tests with Django&#39;s</span>
<span class="c1"># development webserver (normally Evennia runs its own server)</span>
<span class="n">SERVE_MEDIA</span> <span class="o">=</span> <span class="kc">False</span>
@ -1027,16 +1029,14 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># Django cache settings</span>
<span class="c1"># https://docs.djangoproject.com/en/dev/topics/cache/#setting-up-the-cache</span>
<span class="n">CACHES</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;default&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;BACKEND&#39;</span><span class="p">:</span> <span class="s1">&#39;django.core.cache.backends.locmem.LocMemCache&#39;</span><span class="p">,</span>
<span class="s2">&quot;default&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;BACKEND&quot;</span><span class="p">:</span> <span class="s2">&quot;django.core.cache.backends.locmem.LocMemCache&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="s2">&quot;throttle&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;BACKEND&quot;</span><span class="p">:</span> <span class="s2">&quot;django.core.cache.backends.locmem.LocMemCache&quot;</span><span class="p">,</span>
<span class="s2">&quot;TIMEOUT&quot;</span><span class="p">:</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">5</span><span class="p">,</span>
<span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;MAX_ENTRIES&quot;</span><span class="p">:</span> <span class="mi">2000</span><span class="p">},</span>
<span class="p">},</span>
<span class="s1">&#39;throttle&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;BACKEND&#39;</span><span class="p">:</span> <span class="s1">&#39;django.core.cache.backends.locmem.LocMemCache&#39;</span><span class="p">,</span>
<span class="s1">&#39;TIMEOUT&#39;</span><span class="p">:</span> <span class="mi">60</span> <span class="o">*</span> <span class="mi">5</span><span class="p">,</span>
<span class="s1">&#39;OPTIONS&#39;</span><span class="p">:</span> <span class="p">{</span>
<span class="s1">&#39;MAX_ENTRIES&#39;</span><span class="p">:</span> <span class="mi">2000</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="p">}</span>
<span class="c1"># MiddleWare are semi-transparent extensions to Django&#39;s functionality.</span>
<span class="c1"># see http://www.djangoproject.com/documentation/middleware/ for a more detailed</span>
@ -1101,8 +1101,14 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="c1"># Username validation plugins</span>
<span class="n">AUTH_USERNAME_VALIDATORS</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;NAME&quot;</span><span class="p">:</span> <span class="s2">&quot;django.contrib.auth.validators.ASCIIUsernameValidator&quot;</span><span class="p">},</span>
<span class="p">{</span><span class="s2">&quot;NAME&quot;</span><span class="p">:</span> <span class="s2">&quot;django.core.validators.MinLengthValidator&quot;</span><span class="p">,</span> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;limit_value&quot;</span><span class="p">:</span> <span class="mi">3</span><span class="p">},},</span>
<span class="p">{</span><span class="s2">&quot;NAME&quot;</span><span class="p">:</span> <span class="s2">&quot;django.core.validators.MaxLengthValidator&quot;</span><span class="p">,</span> <span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;limit_value&quot;</span><span class="p">:</span> <span class="mi">30</span><span class="p">},},</span>
<span class="p">{</span>
<span class="s2">&quot;NAME&quot;</span><span class="p">:</span> <span class="s2">&quot;django.core.validators.MinLengthValidator&quot;</span><span class="p">,</span>
<span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;limit_value&quot;</span><span class="p">:</span> <span class="mi">3</span><span class="p">},</span>
<span class="p">},</span>
<span class="p">{</span>
<span class="s2">&quot;NAME&quot;</span><span class="p">:</span> <span class="s2">&quot;django.core.validators.MaxLengthValidator&quot;</span><span class="p">,</span>
<span class="s2">&quot;OPTIONS&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;limit_value&quot;</span><span class="p">:</span> <span class="mi">30</span><span class="p">},</span>
<span class="p">},</span>
<span class="p">{</span><span class="s2">&quot;NAME&quot;</span><span class="p">:</span> <span class="s2">&quot;evennia.server.validators.EvenniaUsernameAvailabilityValidator&quot;</span><span class="p">},</span>
<span class="p">]</span>
@ -1121,7 +1127,9 @@ to change into <code class="docutils literal notranslate"><span class="pre">myga
<span class="s2">&quot;DEFAULT_PAGINATION_CLASS&quot;</span><span class="p">:</span> <span class="s2">&quot;rest_framework.pagination.LimitOffsetPagination&quot;</span><span class="p">,</span>
<span class="s2">&quot;PAGE_SIZE&quot;</span><span class="p">:</span> <span class="mi">25</span><span class="p">,</span>
<span class="c1"># require logged in users to call API so that access checks can work on them</span>
<span class="s2">&quot;DEFAULT_PERMISSION_CLASSES&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;rest_framework.permissions.IsAuthenticated&quot;</span><span class="p">,],</span>
<span class="s2">&quot;DEFAULT_PERMISSION_CLASSES&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="s2">&quot;rest_framework.permissions.IsAuthenticated&quot;</span><span class="p">,</span>
<span class="p">],</span>
<span class="c1"># These are the different ways people can authenticate for API requests - via</span>
<span class="c1"># session or with user/password. Other ways are possible, such as via tokens</span>
<span class="c1"># or oauth, but require additional dependencies.</span>

View file

@ -141,6 +141,7 @@
<span class="n">GLOBAL_SCRIPTS</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">OPTION_CLASSES</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_create_version</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper function for building the version string</span>

View file

@ -96,11 +96,12 @@
<span class="c1"># Create throttles for too many account-creations and login attempts</span>
<span class="n">CREATION_THROTTLE</span> <span class="o">=</span> <span class="n">Throttle</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;creation&#39;</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_LIMIT</span><span class="p">,</span>
<span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_TIMEOUT</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;creation&quot;</span><span class="p">,</span>
<span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_LIMIT</span><span class="p">,</span>
<span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CREATION_THROTTLE_TIMEOUT</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">LOGIN_THROTTLE</span> <span class="o">=</span> <span class="n">Throttle</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="s1">&#39;login&#39;</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_LIMIT</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_TIMEOUT</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;login&quot;</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_LIMIT</span><span class="p">,</span> <span class="n">timeout</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">LOGIN_THROTTLE_TIMEOUT</span>
<span class="p">)</span>
@ -844,8 +845,11 @@
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;There was an error creating the Account. &quot;</span>
<span class="s2">&quot;If this problem persists, contact an admin.&quot;</span><span class="p">))</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;There was an error creating the Account. &quot;</span>
<span class="s2">&quot;If this problem persists, contact an admin.&quot;</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="n">errors</span>
@ -921,7 +925,6 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">delete</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="k">return</span> <span class="kc">True</span></div>
<span class="c1"># methods inherited from database model</span>
<div class="viewcode-block" id="DefaultAccount.msg"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.msg">[docs]</a> <span class="k">def</span> <span class="nf">msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">from_obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
@ -1010,9 +1013,7 @@
<span class="n">sessions</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()</span>
<span class="n">session</span> <span class="o">=</span> <span class="n">sessions</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">sessions</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">_CMDHANDLER</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">callertype</span><span class="o">=</span><span class="s2">&quot;account&quot;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span></div>
<span class="k">return</span> <span class="n">_CMDHANDLER</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">callertype</span><span class="o">=</span><span class="s2">&quot;account&quot;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="c1"># channel receive hooks</span>
@ -1042,11 +1043,11 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">senders</span><span class="p">:</span>
<span class="n">sender_string</span> <span class="o">=</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">sender</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">for</span> <span class="n">sender</span> <span class="ow">in</span> <span class="n">senders</span><span class="p">)</span>
<span class="n">sender_string</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">sender</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="k">for</span> <span class="n">sender</span> <span class="ow">in</span> <span class="n">senders</span><span class="p">)</span>
<span class="n">message_lstrip</span> <span class="o">=</span> <span class="n">message</span><span class="o">.</span><span class="n">lstrip</span><span class="p">()</span>
<span class="k">if</span> <span class="n">message_lstrip</span><span class="o">.</span><span class="n">startswith</span><span class="p">((</span><span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="s1">&#39;;&#39;</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">message_lstrip</span><span class="o">.</span><span class="n">startswith</span><span class="p">((</span><span class="s2">&quot;:&quot;</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="p">)):</span>
<span class="c1"># this is a pose, should show as e.g. &quot;User1 smiles to channel&quot;</span>
<span class="n">spacing</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">message_lstrip</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">startswith</span><span class="p">((</span><span class="s1">&#39;:&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="se">\&#39;</span><span class="s1">&#39;</span><span class="p">,</span> <span class="s1">&#39;,&#39;</span><span class="p">))</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
<span class="n">spacing</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span> <span class="k">if</span> <span class="n">message_lstrip</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">startswith</span><span class="p">((</span><span class="s2">&quot;:&quot;</span><span class="p">,</span> <span class="s2">&quot;&#39;&quot;</span><span class="p">,</span> <span class="s2">&quot;,&quot;</span><span class="p">))</span> <span class="k">else</span> <span class="s2">&quot; &quot;</span>
<span class="n">message</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sender_string</span><span class="si">}{</span><span class="n">spacing</span><span class="si">}{</span><span class="n">message_lstrip</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># normal message</span>
@ -1077,8 +1078,11 @@
<span class="sd"> to customize the message for the receiver on the channel-level.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;from_channel&quot;</span><span class="p">:</span> <span class="n">channel</span><span class="o">.</span><span class="n">id</span><span class="p">}),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="n">senders</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;from_channel&quot;</span><span class="p">:</span> <span class="n">channel</span><span class="o">.</span><span class="n">id</span><span class="p">})</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;from_channel&quot;</span><span class="p">:</span> <span class="n">channel</span><span class="o">.</span><span class="n">id</span><span class="p">}),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="n">senders</span><span class="p">,</span>
<span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;from_channel&quot;</span><span class="p">:</span> <span class="n">channel</span><span class="o">.</span><span class="n">id</span><span class="p">},</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultAccount.at_post_channel_msg"><a class="viewcode-back" href="../../../api/evennia.accounts.accounts.html#evennia.accounts.accounts.DefaultAccount.at_post_channel_msg">[docs]</a> <span class="k">def</span> <span class="nf">at_post_channel_msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -1415,8 +1419,7 @@
<span class="k">if</span> <span class="n">_MUDINFO_CHANNEL</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">CHANNEL_MUDINFO</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">_MUDINFO_CHANNEL</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CHANNEL_MUDINFO</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">])</span>
<span class="n">_MUDINFO_CHANNEL</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CHANNEL_MUDINFO</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">])</span>
<span class="k">except</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
@ -1425,7 +1428,8 @@
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">CHANNEL_CONNECTINFO</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">_CONNECT_CHANNEL</span> <span class="o">=</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CHANNEL_CONNECTINFO</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">])</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">CHANNEL_CONNECTINFO</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">]</span>
<span class="p">)</span>
<span class="k">except</span> <span class="n">ChannelDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
@ -1703,7 +1707,8 @@
<span class="k">if</span> <span class="n">sess</span> <span class="ow">and</span> <span class="n">sid</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> - |G</span><span class="si">{</span><span class="n">char</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">|n [</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span><span class="si">}</span><span class="s2">] &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(played by you in session </span><span class="si">{</span><span class="n">sid</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;(played by you in session </span><span class="si">{</span><span class="n">sid</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> - |R</span><span class="si">{</span><span class="n">char</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">|n [</span><span class="si">{</span><span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span><span class="si">}</span><span class="s2">] &quot;</span>

View file

@ -371,9 +371,7 @@
<span class="n">chstr</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_channel</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_network</span><span class="si">}</span><span class="s2">:</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">irc_port</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="n">nicklist</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">sorted</span><span class="p">(</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;nicklist&quot;</span><span class="p">],</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="n">n</span><span class="o">.</span><span class="n">lower</span><span class="p">()))</span>
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_nicklist_callers</span><span class="p">:</span>
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;Nicks at </span><span class="si">{chstr}</span><span class="s2">:</span><span class="se">\n</span><span class="s2"> </span><span class="si">{nicklist}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">chstr</span><span class="o">=</span><span class="n">chstr</span><span class="p">,</span> <span class="n">nicklist</span><span class="o">=</span><span class="n">nicklist</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Nicks at </span><span class="si">{chstr}</span><span class="s2">:</span><span class="se">\n</span><span class="s2"> </span><span class="si">{nicklist}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">chstr</span><span class="o">=</span><span class="n">chstr</span><span class="p">,</span> <span class="n">nicklist</span><span class="o">=</span><span class="n">nicklist</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_nicklist_callers</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">return</span>

View file

@ -318,8 +318,11 @@
<span class="n">new_account</span><span class="o">.</span><span class="n">set_password</span><span class="p">(</span><span class="n">password</span><span class="p">)</span>
<span class="n">new_account</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span> <span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span>
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">permissions</span><span class="o">=</span><span class="n">permissions</span><span class="p">,</span>
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># saving will trigger the signal that calls the</span>
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>

View file

@ -122,47 +122,63 @@
<span class="c1"># is the normal &quot;production message to echo to the account.</span>
<span class="n">_ERROR_UNTRAPPED</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">An untrapped error occurred.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">An untrapped error occurred. Please file a bug report detailing the steps to reproduce.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">An untrapped error occurred.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">An untrapped error occurred. Please file a bug report detailing the steps to reproduce.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="n">_ERROR_CMDSETS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">A cmdset merger-error occurred. This is often due to a syntax</span>
<span class="s2">error in one of the cmdsets to merge.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">A cmdset merger-error occurred. Please file a bug report detailing the</span>
<span class="s2">steps to reproduce.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">A cmdset merger-error occurred. This is often due to a syntax</span>
<span class="sd">error in one of the cmdsets to merge.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">A cmdset merger-error occurred. Please file a bug report detailing the</span>
<span class="sd">steps to reproduce.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="n">_ERROR_NOCMDSETS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">No command sets found! This is a critical bug that can have</span>
<span class="s2">multiple causes.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">No command sets found! This is a sign of a critical bug. If</span>
<span class="s2">disconnecting/reconnecting doesn&#39;t&quot; solve the problem, try to contact</span>
<span class="s2">the server admin through&quot; some other means for assistance.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">No command sets found! This is a critical bug that can have</span>
<span class="sd">multiple causes.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">No command sets found! This is a sign of a critical bug. If</span>
<span class="sd">disconnecting/reconnecting doesn&#39;t&quot; solve the problem, try to contact</span>
<span class="sd">the server admin through&quot; some other means for assistance.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="n">_ERROR_CMDHANDLER</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">A command handler bug occurred. If this is not due to a local change,</span>
<span class="s2">please file a bug report with the Evennia project, including the</span>
<span class="s2">traceback and steps to reproduce.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">A command handler bug occurred. Please notify staff - they should</span>
<span class="s2">likely file a bug report with the Evennia project.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">A command handler bug occurred. If this is not due to a local change,</span>
<span class="sd">please file a bug report with the Evennia project, including the</span>
<span class="sd">traceback and steps to reproduce.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">A command handler bug occurred. Please notify staff - they should</span>
<span class="sd">likely file a bug report with the Evennia project.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="n">_ERROR_RECURSION_LIMIT</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>

View file

@ -113,7 +113,7 @@
<span class="k">for</span> <span class="n">cmdname</span> <span class="ow">in</span> <span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="p">]</span> <span class="o">+</span> <span class="n">cmd</span><span class="o">.</span><span class="n">aliases</span>
<span class="k">if</span> <span class="n">cmdname</span>
<span class="ow">and</span> <span class="n">l_raw_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">cmdname</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">l_raw_string</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmdname</span><span class="p">):]))</span>
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">l_raw_string</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmdname</span><span class="p">)</span> <span class="p">:]))</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
@ -132,7 +132,7 @@
<span class="k">if</span> <span class="p">(</span>
<span class="n">cmdname</span>
<span class="ow">and</span> <span class="n">l_raw_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">cmdname</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">l_raw_string</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmdname</span><span class="p">):]))</span>
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">l_raw_string</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmdname</span><span class="p">)</span> <span class="p">:]))</span>
<span class="p">):</span>
<span class="n">matches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">create_match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="n">raw_cmdname</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
@ -167,7 +167,10 @@
<span class="c1"># the user might be trying to identify the command</span>
<span class="c1"># with a #num-command style syntax. We expect the regex to</span>
<span class="c1"># contain the groups &quot;number&quot; and &quot;name&quot;.</span>
<span class="n">mindex</span><span class="p">,</span> <span class="n">new_raw_string</span> <span class="o">=</span> <span class="p">(</span><span class="n">num_ref_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;number&quot;</span><span class="p">),</span> <span class="n">num_ref_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="n">num_ref_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;args&quot;</span><span class="p">))</span>
<span class="n">mindex</span><span class="p">,</span> <span class="n">new_raw_string</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">num_ref_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;number&quot;</span><span class="p">),</span>
<span class="n">num_ref_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;name&quot;</span><span class="p">)</span> <span class="o">+</span> <span class="n">num_ref_match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;args&quot;</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">mindex</span><span class="p">),</span> <span class="n">new_raw_string</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span></div>
@ -224,9 +227,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">matches</span> <span class="ow">and</span> <span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">:</span>
<span class="c1"># still no match. Try to strip prefixes</span>
<span class="n">raw_string</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">raw_string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_string</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">raw_string</span>
<span class="p">)</span>
<span class="n">raw_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_string</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">raw_string</span>
<span class="n">matches</span> <span class="o">=</span> <span class="n">build_matches</span><span class="p">(</span><span class="n">raw_string</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">,</span> <span class="n">include_prefixes</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="c1"># only select command matches we are actually allowed to call.</span>

View file

@ -400,14 +400,18 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">perm</span> <span class="o">=</span> <span class="s2">&quot;perm&quot;</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">persistent</span> <span class="k">else</span> <span class="s2">&quot;non-perm&quot;</span>
<span class="n">options</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="s2">&quot;</span><span class="si">{}</span><span class="s2">:</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">opt</span><span class="p">,</span> <span class="s2">&quot;T&quot;</span> <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;F&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;no_exits&quot;</span><span class="p">,</span> <span class="s2">&quot;no_objs&quot;</span><span class="p">,</span> <span class="s2">&quot;no_channels&quot;</span><span class="p">,</span> <span class="s2">&quot;duplicates&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</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="n">options</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="p">[</span>
<span class="s2">&quot;</span><span class="si">{}</span><span class="s2">:</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">opt</span><span class="p">,</span> <span class="s2">&quot;T&quot;</span> <span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span> <span class="k">else</span> <span class="s2">&quot;F&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;no_exits&quot;</span><span class="p">,</span> <span class="s2">&quot;no_objs&quot;</span><span class="p">,</span> <span class="s2">&quot;no_channels&quot;</span><span class="p">,</span> <span class="s2">&quot;duplicates&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">opt</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="p">)</span>
<span class="n">options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;, &quot;</span> <span class="o">+</span> <span class="n">options</span><span class="p">)</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&lt;CmdSet </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">perm</span><span class="si">}</span><span class="s2">, prio </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&gt;: &quot;</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">cmd</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">key</span><span class="p">)]))</span>
<span class="k">return</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;&lt;CmdSet </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">mergetype</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">perm</span><span class="si">}</span><span class="s2">, prio </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">priority</span><span class="si">}{</span><span class="n">options</span><span class="si">}</span><span class="s2">&gt;: &quot;</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">cmd</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">o</span><span class="p">:</span> <span class="n">o</span><span class="o">.</span><span class="n">key</span><span class="p">)])</span>
<span class="p">)</span>
<span class="k">def</span> <span class="fm">__iter__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -561,10 +565,12 @@
<span class="k">try</span><span class="p">:</span>
<span class="n">cmdset</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instantiate</span><span class="p">(</span><span class="n">cmdset</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;Adding cmdset </span><span class="si">{cmdset}</span><span class="s2"> to </span><span class="si">{cls}</span><span class="s2"> lead to an &quot;</span>
<span class="s2">&quot;infinite loop. When adding a cmdset to another, &quot;</span>
<span class="s2">&quot;make sure they are not themself cyclically added to &quot;</span>
<span class="s2">&quot;the new cmdset somewhere in the chain.&quot;</span><span class="p">)</span>
<span class="n">err</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;Adding cmdset </span><span class="si">{cmdset}</span><span class="s2"> to </span><span class="si">{cls}</span><span class="s2"> lead to an &quot;</span>
<span class="s2">&quot;infinite loop. When adding a cmdset to another, &quot;</span>
<span class="s2">&quot;make sure they are not themself cyclically added to &quot;</span>
<span class="s2">&quot;the new cmdset somewhere in the chain.&quot;</span>
<span class="p">)</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">cmdset</span><span class="o">=</span><span class="n">cmdset</span><span class="p">,</span> <span class="bp">cls</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)))</span>
<span class="n">cmds</span> <span class="o">=</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">commands</span>
<span class="k">elif</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">cmd</span><span class="p">):</span>

View file

@ -465,8 +465,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">mergetype_stack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">new_current</span><span class="o">.</span><span class="n">actual_mergetype</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current</span> <span class="o">=</span> <span class="n">new_current</span></div>
<div class="viewcode-block" id="CmdSetHandler.add"><a class="viewcode-back" href="../../../api/evennia.commands.cmdsethandler.html#evennia.commands.cmdsethandler.CmdSetHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">,</span> <span class="n">emit_to_obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default_cmdset</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>
<div class="viewcode-block" id="CmdSetHandler.add"><a class="viewcode-back" href="../../../api/evennia.commands.cmdsethandler.html#evennia.commands.cmdsethandler.CmdSetHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">,</span> <span class="n">emit_to_obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">default_cmdset</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Add a cmdset to the handler, on top of the old ones, unless it</span>
<span class="sd"> is set as the default one (it will then end up at the bottom of the stack)</span>
@ -493,9 +492,11 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s2">&quot;permanent&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span><span class="s2">&quot;obj.cmdset.add() kwarg &#39;permanent&#39; has changed name to &quot;</span>
<span class="s2">&quot;&#39;persistent&#39; and now defaults to True.&quot;</span><span class="p">)</span>
<span class="n">persistent</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;permanent&#39;</span><span class="p">]</span> <span class="k">if</span> <span class="n">persistent</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">persistent</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span>
<span class="s2">&quot;obj.cmdset.add() kwarg &#39;permanent&#39; has changed name to &quot;</span>
<span class="s2">&quot;&#39;persistent&#39; and now defaults to True.&quot;</span>
<span class="p">)</span>
<span class="n">persistent</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;permanent&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">persistent</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">persistent</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">or</span> <span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">CmdSet</span><span class="p">)):</span>
<span class="n">string</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Only CmdSets can be added to the cmdsethandler!&quot;</span><span class="p">)</span>
@ -533,9 +534,10 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s2">&quot;permanent&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span><span class="s2">&quot;obj.cmdset.add_default() kwarg &#39;permanent&#39; has changed name to &quot;</span>
<span class="s2">&quot;&#39;persistent&#39;.&quot;</span><span class="p">)</span>
<span class="n">persistent</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;permanent&#39;</span><span class="p">]</span> <span class="k">if</span> <span class="n">persistent</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">persistent</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span>
<span class="s2">&quot;obj.cmdset.add_default() kwarg &#39;permanent&#39; has changed name to &#39;persistent&#39;.&quot;</span>
<span class="p">)</span>
<span class="n">persistent</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;permanent&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="n">persistent</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">persistent</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">emit_to_obj</span><span class="o">=</span><span class="n">emit_to_obj</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span> <span class="n">default_cmdset</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdSetHandler.remove"><a class="viewcode-back" href="../../../api/evennia.commands.cmdsethandler.html#evennia.commands.cmdsethandler.CmdSetHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmdset</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">default_cmdset</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>

View file

@ -144,16 +144,16 @@
<span class="c1"># pre-prepare a help index entry for quicker lookup</span>
<span class="c1"># strip the @- etc to allow help to be agnostic</span>
<span class="n">stripped_key</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">key</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="bp">cls</span><span class="o">.</span><span class="n">key</span> <span class="ow">and</span> <span class="bp">cls</span><span class="o">.</span><span class="n">key</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">CMD_IGNORE_PREFIXES</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">stripped_aliases</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">al</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">al</span> <span class="ow">and</span> <span class="n">al</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">CMD_IGNORE_PREFIXES</span> <span class="k">else</span> <span class="n">al</span>
<span class="k">for</span> <span class="n">al</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">aliases</span><span class="p">))</span>
<span class="n">stripped_aliases</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">al</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="n">al</span> <span class="ow">and</span> <span class="n">al</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">CMD_IGNORE_PREFIXES</span> <span class="k">else</span> <span class="n">al</span> <span class="k">for</span> <span class="n">al</span> <span class="ow">in</span> <span class="bp">cls</span><span class="o">.</span><span class="n">aliases</span>
<span class="p">)</span>
<span class="bp">cls</span><span class="o">.</span><span class="n">search_index_entry</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="s2">&quot;aliases&quot;</span><span class="p">:</span> <span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">cls</span><span class="o">.</span><span class="n">aliases</span><span class="p">),</span>
<span class="s2">&quot;no_prefix&quot;</span><span class="p">:</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">stripped_key</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">stripped_aliases</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="s2">&quot;category&quot;</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="n">help_category</span><span class="p">,</span>
<span class="s2">&quot;text&quot;</span><span class="p">:</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">,</span>
<span class="s2">&quot;tags&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span>
<span class="s2">&quot;tags&quot;</span><span class="p">:</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="p">}</span>
@ -604,7 +604,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">reverse</span><span class="p">(</span>
<span class="s1">&#39;help-entry-detail&#39;</span><span class="p">,</span>
<span class="s2">&quot;help-entry-detail&quot;</span><span class="p">,</span>
<span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;category&quot;</span><span class="p">:</span> <span class="n">slugify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">help_category</span><span class="p">),</span> <span class="s2">&quot;topic&quot;</span><span class="p">:</span> <span class="n">slugify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">)},</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>

View file

@ -259,7 +259,7 @@
<span class="n">ipregex</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">ipregex</span><span class="p">)</span>
<span class="n">bantup</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">ban</span><span class="p">,</span> <span class="n">ipregex</span><span class="p">,</span> <span class="n">now</span><span class="p">,</span> <span class="n">reason</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Are you sure you want to </span><span class="si">{</span><span class="n">typ</span><span class="si">}</span><span class="s2">-ban &#39;|w</span><span class="si">{</span><span class="n">ban</span><span class="si">}</span><span class="s2">|n&#39; [Y]/N?&quot;</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Are you sure you want to </span><span class="si">{</span><span class="n">typ</span><span class="si">}</span><span class="s2">-ban &#39;|w</span><span class="si">{</span><span class="n">ban</span><span class="si">}</span><span class="s2">|n&#39; [Y]/N?&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>
@ -315,7 +315,7 @@
<span class="n">ban</span> <span class="o">=</span> <span class="n">banlist</span><span class="p">[</span><span class="n">num</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span>
<span class="n">value</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">s</span> <span class="k">for</span> <span class="n">s</span> <span class="ow">in</span> <span class="n">ban</span><span class="p">[:</span><span class="mi">2</span><span class="p">]]))</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">ret</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Are you sure you want to unban </span><span class="si">{</span><span class="n">num</span><span class="si">}</span><span class="s2">: &#39;|w</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">|n&#39; [Y]/N?&quot;</span><span class="p">)</span>
<span class="n">ret</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Are you sure you want to unban </span><span class="si">{</span><span class="n">num</span><span class="si">}</span><span class="s2">: &#39;|w</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">|n&#39; [Y]/N?&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">str</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;no&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>

View file

@ -59,7 +59,8 @@
<span class="n">class_from_module</span><span class="p">,</span>
<span class="n">get_all_typeclasses</span><span class="p">,</span>
<span class="n">variable_from_module</span><span class="p">,</span>
<span class="n">dbref</span><span class="p">,</span> <span class="n">crop</span><span class="p">,</span>
<span class="n">dbref</span><span class="p">,</span>
<span class="n">crop</span><span class="p">,</span>
<span class="n">interactive</span><span class="p">,</span>
<span class="n">list_to_string</span><span class="p">,</span>
<span class="n">display_len</span><span class="p">,</span>
@ -1540,9 +1541,11 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">location</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Usage: open &lt;new exit&gt;[;alias...][:typeclass]&quot;</span>
<span class="s2">&quot;[,&lt;return exit&gt;[;alias..][:typeclass]]] &quot;</span>
<span class="s2">&quot;= &lt;destination&gt;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;Usage: open &lt;new exit&gt;[;alias...][:typeclass]&quot;</span>
<span class="s2">&quot;[,&lt;return exit&gt;[;alias..][:typeclass]]] &quot;</span>
<span class="s2">&quot;= &lt;destination&gt;&quot;</span>
<span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You cannot create an exit from a None-location.&quot;</span><span class="p">)</span>
@ -1561,8 +1564,9 @@
<span class="sd"> as well as the self.create_exit() method.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Create exit</span>
<span class="n">ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_exit</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">exit_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit_aliases</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit_typeclass</span><span class="p">)</span>
<span class="n">ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_exit</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit_aliases</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">exit_typeclass</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span>
<span class="c1"># an error; the exit was not created, so we quit.</span>
<span class="k">return</span>
@ -1571,8 +1575,13 @@
<span class="n">back_exit_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
<span class="n">back_exit_aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span>
<span class="n">back_exit_typeclass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">&quot;option&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">create_exit</span><span class="p">(</span><span class="n">back_exit_name</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">,</span> <span class="n">back_exit_aliases</span><span class="p">,</span>
<span class="n">back_exit_typeclass</span><span class="p">)</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">create_exit</span><span class="p">(</span>
<span class="n">back_exit_name</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">,</span>
<span class="n">back_exit_aliases</span><span class="p">,</span>
<span class="n">back_exit_typeclass</span><span class="p">,</span>
<span class="p">)</span></div></div>
<span class="k">def</span> <span class="nf">_convert_from_string</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">strobj</span><span class="p">):</span>
@ -1782,8 +1791,10 @@
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">)</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Deleted attribute </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">/|w</span><span class="si">{</span><span class="n">attr</span><span class="si">}</span><span class="s2">|n [category:</span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">].&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">No attribute </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">/|w</span><span class="si">{</span><span class="n">attr</span><span class="si">}</span><span class="s2">|n [category: </span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">] &quot;</span>
<span class="s2">&quot;was found to delete.&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">No attribute </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">/|w</span><span class="si">{</span><span class="n">attr</span><span class="si">}</span><span class="s2">|n [category: </span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">] &quot;</span>
<span class="s2">&quot;was found to delete.&quot;</span>
<span class="p">)</span>
<span class="n">error</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">No attribute </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">/|w</span><span class="si">{</span><span class="n">attr</span><span class="si">}</span><span class="s2">|n [category: </span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">] was found to delete.&quot;</span>
<span class="k">if</span> <span class="n">nested</span><span class="p">:</span>
<span class="n">error</span> <span class="o">+=</span> <span class="s2">&quot; (Nested lookups attempted)&quot;</span>
@ -1855,7 +1866,7 @@
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="c1"># we set empty buffer on nonexisting Attribute because otherwise</span>
<span class="c1"># we&#39;d always have the string &quot;None&quot; in the buffer to start with</span>
<span class="n">old_value</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="n">old_value</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">old_value</span><span class="p">)</span> <span class="c1"># we already confirmed we are ok with this</span>
<span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">buf</span><span class="p">):</span>
@ -1867,11 +1878,12 @@
<span class="k">try</span><span class="p">:</span>
<span class="n">old_value</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</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">old_value</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span>
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;|rWarning: Attribute |w</span><span class="si">{</span><span class="n">attr</span><span class="si">}</span><span class="s2">|r is of type |w</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="n">old_value</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2">|r. &quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">To continue editing, it must be converted to (and saved as) a string. &quot;</span>
<span class="s2">&quot;Continue? [Y]/N?&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;no&#39;</span><span class="p">):</span>
<span class="s2">&quot;Continue? [Y]/N?&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;no&quot;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Aborted edit.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
@ -1945,9 +1957,11 @@
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;The Line editor can only be applied &quot;</span> <span class="s2">&quot;to one attribute at a time.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">attrs</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Use `set/edit &lt;objname&gt;/&lt;attr&gt;` to define the Attribute to edit.</span><span class="se">\n</span><span class="s2">To &quot;</span>
<span class="s2">&quot;edit the current room description, use `set/edit here/desc` (or &quot;</span>
<span class="s2">&quot;use the `desc` command).&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;Use `set/edit &lt;objname&gt;/&lt;attr&gt;` to define the Attribute to edit.</span><span class="se">\n</span><span class="s2">To &quot;</span>
<span class="s2">&quot;edit the current room description, use `set/edit here/desc` (or &quot;</span>
<span class="s2">&quot;use the `desc` command).&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">edit_handler</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attrs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">caller</span><span class="p">)</span>
<span class="k">return</span>
@ -1978,8 +1992,10 @@
<span class="k">global</span> <span class="n">_ATTRFUNCPARSER</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ATTRFUNCPARSER</span><span class="p">:</span>
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">FuncParser</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;dbref&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">,</span>
<span class="s2">&quot;search&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">}</span>
<span class="p">{</span>
<span class="s2">&quot;dbref&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">,</span>
<span class="s2">&quot;search&quot;</span><span class="p">:</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_search</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;control&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;edit&quot;</span><span class="p">)):</span>
@ -1993,10 +2009,13 @@
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">parsed_value</span><span class="p">,</span> <span class="s2">&quot;access&quot;</span><span class="p">):</span>
<span class="c1"># if this is an object we must have the right to read it, if so,</span>
<span class="c1"># we will not convert it to a string</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">parsed_value</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;control&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;edit&quot;</span><span class="p">)):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You don&#39;t have permission to set &quot;</span>
<span class="sa">f</span><span class="s2">&quot;object with identifier &#39;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
<span class="n">parsed_value</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;control&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">parsed_value</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;edit&quot;</span><span class="p">)</span>
<span class="p">):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;You don&#39;t have permission to set &quot;</span> <span class="sa">f</span><span class="s2">&quot;object with identifier &#39;</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&#39;.&quot;</span>
<span class="p">)</span>
<span class="k">continue</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">parsed_value</span>
<span class="k">else</span><span class="p">:</span>
@ -2080,7 +2099,7 @@
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">elif</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">__dbclass__</span> <span class="o">==</span> <span class="n">dbclass</span><span class="p">):</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">__dbclass__</span> <span class="o">==</span> <span class="n">dbclass</span><span class="p">:</span>
<span class="c1"># applying account while caller is object</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Trying to search </span><span class="si">{</span><span class="n">new_typeclass</span><span class="si">}</span><span class="s2"> with query &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">query</span><span class="p">)</span>
@ -2113,7 +2132,7 @@
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="k">if</span> <span class="s2">&quot;list&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdname</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;typeclasses&#39;</span><span class="p">,</span> <span class="s1">&#39;@typeclasses&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="s2">&quot;list&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;typeclasses&quot;</span><span class="p">,</span> <span class="s2">&quot;@typeclasses&quot;</span><span class="p">):</span>
<span class="n">tclasses</span> <span class="o">=</span> <span class="n">get_all_typeclasses</span><span class="p">()</span>
<span class="n">contribs</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tclasses</span><span class="p">)</span> <span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;evennia.contrib&quot;</span><span class="p">)]</span> <span class="ow">or</span> <span class="p">[</span>
<span class="s2">&quot;&lt;None loaded&gt;&quot;</span>
@ -2230,8 +2249,10 @@
<span class="n">is_same</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">is_typeclass</span><span class="p">(</span><span class="n">new_typeclass</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">is_same</span> <span class="ow">and</span> <span class="s2">&quot;force&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> already has the typeclass &#39;</span><span class="si">{</span><span class="n">new_typeclass</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
<span class="s2">&quot;Use /force to override.&quot;</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> already has the typeclass &#39;</span><span class="si">{</span><span class="n">new_typeclass</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
<span class="s2">&quot;Use /force to override.&quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">update</span> <span class="o">=</span> <span class="s2">&quot;update&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="n">reset</span> <span class="o">=</span> <span class="s2">&quot;reset&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
@ -2262,7 +2283,8 @@
<span class="k">if</span> <span class="s2">&quot;prototype&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">modified</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
<span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">obj</span><span class="p">],</span> <span class="n">caller</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
<span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">obj</span><span class="p">],</span> <span class="n">caller</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="p">)</span>
<span class="n">prototype_success</span> <span class="o">=</span> <span class="n">modified</span> <span class="o">&gt;</span> <span class="mi">0</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_success</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">%s</span><span class="s2"> failed to apply.&quot;</span> <span class="o">%</span> <span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">])</span>
@ -2585,9 +2607,7 @@
<div class="viewcode-block" id="CmdExamine.format_locks"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_locks">[docs]</a> <span class="k">def</span> <span class="nf">format_locks</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="n">locks</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="p">)</span>
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span>
<span class="s2">&quot;; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">lock</span> <span class="k">for</span> <span class="n">lock</span> <span class="ow">in</span> <span class="n">locks</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="n">indent</span><span class="o">=</span><span class="mi">2</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">utils</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="s2">&quot;; &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">lock</span> <span class="k">for</span> <span class="n">lock</span> <span class="ow">in</span> <span class="n">locks</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="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
<span class="k">return</span> <span class="s2">&quot;Default&quot;</span></div>
<div class="viewcode-block" id="CmdExamine.format_scripts"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_scripts">[docs]</a> <span class="k">def</span> <span class="nf">format_scripts</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
@ -2614,6 +2634,7 @@
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">string</span><span class="si">}</span><span class="s2">: T&quot;</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">string</span><span class="si">}</span><span class="s2">: F&quot;</span>
<span class="n">txt</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">_truefalse</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">opt</span><span class="p">))</span>
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;no_exits&quot;</span><span class="p">,</span> <span class="s2">&quot;no_objs&quot;</span><span class="p">,</span> <span class="s2">&quot;no_channels&quot;</span><span class="p">,</span> <span class="s2">&quot;duplicates&quot;</span><span class="p">)</span>
@ -2649,13 +2670,18 @@
<span class="c1"># we only show the first session&#39;s cmdset here (it is -in principle- possible</span>
<span class="c1"># that different sessions have different cmdsets but for admins who want such</span>
<span class="c1"># madness it is better that they overload with their own CmdExamine to handle it).</span>
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">extend</span><span class="p">([(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span>
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">()])</span>
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
<span class="p">[(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">()]</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># we have to protect this since many objects don&#39;t have sessions.</span>
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">extend</span><span class="p">([(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span>
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_session</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">())</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">()])</span>
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
<span class="p">[</span>
<span class="p">(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span>
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_session</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">())</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="ne">AttributeError</span><span class="p">):</span>
<span class="c1"># an error means we are merging an object without a session</span>
<span class="k">pass</span>
@ -2701,8 +2727,10 @@
<span class="n">typ</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; |B[type: </span><span class="si">{</span><span class="n">typ</span><span class="si">}</span><span class="s2">]|n&quot;</span> <span class="k">if</span> <span class="n">typ</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">_FUNCPARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">ansi_raw</span><span class="p">(</span><span class="n">value</span><span class="p">),</span> <span class="n">escape</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Attribute </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">header_color</span><span class="si">}{</span><span class="n">key</span><span class="si">}</span><span class="s2">|n &quot;</span>
<span class="sa">f</span><span class="s2">&quot;[category=</span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">]</span><span class="si">{</span><span class="n">typ</span><span class="si">}</span><span class="s2">:</span><span class="se">\n\n</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div>
<span class="k">return</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Attribute </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">header_color</span><span class="si">}{</span><span class="n">key</span><span class="si">}</span><span class="s2">|n &quot;</span>
<span class="sa">f</span><span class="s2">&quot;[category=</span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">]</span><span class="si">{</span><span class="n">typ</span><span class="si">}</span><span class="s2">:</span><span class="se">\n\n</span><span class="si">{</span><span class="n">value</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_single_attribute"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_single_attribute">[docs]</a> <span class="k">def</span> <span class="nf">format_single_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
<span class="k">global</span> <span class="n">_FUNCPARSER</span>
@ -2722,8 +2750,7 @@
<div class="viewcode-block" id="CmdExamine.format_attributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_attributes">[docs]</a> <span class="k">def</span> <span class="nf">format_attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="n">output</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</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="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_attributes</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_attributes</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">output</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
<span class="c1"># we don&#39;t want just an empty line</span>
@ -2737,8 +2764,7 @@
<span class="k">if</span> <span class="n">ndb_attr</span> <span class="ow">and</span> <span class="n">ndb_attr</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</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="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ndb_attr</span><span class="p">)</span>
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> <span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ndb_attr</span><span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_exits"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_exits">[docs]</a> <span class="k">def</span> <span class="nf">format_exits</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
@ -2748,14 +2774,16 @@
<div class="viewcode-block" id="CmdExamine.format_chars"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_chars">[docs]</a> <span class="k">def</span> <span class="nf">format_chars</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;contents&quot;</span><span class="p">):</span>
<span class="n">chars</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">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">dbref</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">contents</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="p">)</span>
<span class="n">chars</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">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">dbref</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">contents</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="p">)</span>
<span class="k">return</span> <span class="n">chars</span> <span class="k">if</span> <span class="n">chars</span> <span class="k">else</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="CmdExamine.format_things"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_things">[docs]</a> <span class="k">def</span> <span class="nf">format_things</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;contents&quot;</span><span class="p">):</span>
<span class="n">things</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">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">dbref</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">contents</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span>
<span class="n">things</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">obj</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">dbref</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">contents</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">things</span> <span class="k">if</span> <span class="n">things</span> <span class="k">else</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="CmdExamine.format_script_desc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_script_desc">[docs]</a> <span class="k">def</span> <span class="nf">format_script_desc</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
@ -2778,8 +2806,10 @@
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">remaining_repeats</span><span class="p">()</span>
<span class="n">remaining_repeats</span> <span class="o">=</span> <span class="mi">0</span> <span class="k">if</span> <span class="n">remaining_repeats</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">remaining_repeats</span>
<span class="n">repeats</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; - </span><span class="si">{</span><span class="n">remaining_repeats</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">db_repeats</span><span class="si">}</span><span class="s2"> remain&quot;</span>
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">active</span><span class="si">}</span><span class="s2"> - interval: </span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">s &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(next: </span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}{</span><span class="n">repeats</span><span class="si">}</span><span class="s2">, start_delay: </span><span class="si">{</span><span class="n">start_delay</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span></div>
<span class="k">return</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">active</span><span class="si">}</span><span class="s2"> - interval: </span><span class="si">{</span><span class="n">interval</span><span class="si">}</span><span class="s2">s &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(next: </span><span class="si">{</span><span class="n">next_repeat</span><span class="si">}{</span><span class="n">repeats</span><span class="si">}</span><span class="s2">, start_delay: </span><span class="si">{</span><span class="n">start_delay</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_sub_totals"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_sub_totals">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_sub_totals</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_account_subscriptions&quot;</span><span class="p">):</span>
@ -2794,14 +2824,16 @@
<span class="n">account_subs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_account_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="k">if</span> <span class="n">account_subs</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</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">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">account_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">account_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.format_channel_object_subs"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_channel_object_subs">[docs]</a> <span class="k">def</span> <span class="nf">format_channel_object_subs</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_object_subscriptions&quot;</span><span class="p">):</span>
<span class="n">object_subs</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_object_subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="k">if</span> <span class="n">object_subs</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &quot;</span> <span class="o">+</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">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">object_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">))</span></div>
<span class="n">format_grid</span><span class="p">([</span><span class="n">sub</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">sub</span> <span class="ow">in</span> <span class="n">object_subs</span><span class="p">],</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="CmdExamine.get_formatted_obj_data"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.get_formatted_obj_data">[docs]</a> <span class="k">def</span> <span class="nf">get_formatted_obj_data</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -2823,13 +2855,14 @@
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Destination&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_destination</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Permissions&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_permissions</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Locks&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_locks</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">current_cmdset</span>
<span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="o">==</span> <span class="mi">1</span>
<span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">current</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;_EMPTY_CMDSET&quot;</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">current_cmdset</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span>
<span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">current</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;_EMPTY_CMDSET&quot;</span>
<span class="p">):</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Stored Cmdset(s)&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_stored_cmdsets</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Merged Cmdset(s)&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_merged_cmdsets</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="sa">f</span><span class="s2">&quot;Commands vailable to </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> (result of Merged Cmdset(s))&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">format_current_cmds</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">))</span>
<span class="n">objdata</span><span class="p">[</span>
<span class="sa">f</span><span class="s2">&quot;Commands vailable to </span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> (result of Merged Cmdset(s))&quot;</span>
<span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_current_cmds</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">current_cmdset</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">object_type</span> <span class="o">==</span> <span class="s2">&quot;script&quot;</span><span class="p">:</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Description&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_desc</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="n">objdata</span><span class="p">[</span><span class="s2">&quot;Persistent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_script_is_persistent</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
@ -2901,10 +2934,11 @@
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="s2">&quot;Multiple </span><span class="si">{objtype}</span><span class="s2"> found with key </span><span class="si">{obj_name}</span><span class="s2">:</span><span class="se">\n</span><span class="si">{matches}</span><span class="s2">&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">=</span><span class="n">obj_name</span><span class="p">,</span>
<span class="n">matches</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">ob</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">(#</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">)</span>
<span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">err</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">obj_name</span><span class="o">=</span><span class="n">obj_name</span><span class="p">,</span> <span class="n">matches</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">ob</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">(#</span><span class="si">{</span><span class="n">ob</span><span class="o">.</span><span class="n">id</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">ob</span> <span class="ow">in</span> <span class="n">obj</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
@ -2929,13 +2963,16 @@
<span class="c1"># is not so common anyway.</span>
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">obj_name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="c1"># name</span>
<span class="n">obj_name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">&quot;name&quot;</span><span class="p">]</span> <span class="c1"># name</span>
<span class="n">obj_attrs</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="c1"># /attrs</span>
<span class="c1"># identify object type, in prio account - script - channel</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;object&quot;</span>
<span class="k">if</span> <span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;evennia.accounts.accounts.DefaultAccount&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="s2">&quot;account&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)):</span>
<span class="k">if</span> <span class="p">(</span>
<span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;evennia.accounts.accounts.DefaultAccount&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="s2">&quot;account&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">)</span>
<span class="p">):</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;account&quot;</span>
<span class="k">elif</span> <span class="s2">&quot;script&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">object_type</span> <span class="o">=</span> <span class="s2">&quot;script&quot;</span>
@ -3335,7 +3372,7 @@
<span class="s2">&quot;start&quot;</span><span class="p">:</span> <span class="s2">&quot;|gStarted|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;stop&quot;</span><span class="p">:</span> <span class="s2">&quot;|RStopped|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;pause&quot;</span><span class="p">:</span> <span class="s2">&quot;|Paused|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="s2">&quot;|rDeleted|n&quot;</span>
<span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="s2">&quot;|rDeleted|n&quot;</span><span class="p">,</span>
<span class="p">}</span>
<span class="k">def</span> <span class="nf">_search_script</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">args</span><span class="p">):</span>
@ -3349,7 +3386,7 @@
<span class="k">return</span> <span class="n">scripts</span>
<span class="k">if</span> <span class="s2">&quot;-&quot;</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
<span class="c1"># may be a dbref-range</span>
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="p">(</span><span class="n">dbref</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">=</span> <span class="p">(</span><span class="n">dbref</span><span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">args</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">1</span><span class="p">))</span>
<span class="k">if</span> <span class="n">val1</span> <span class="ow">and</span> <span class="n">val2</span><span class="p">:</span>
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="p">(</span><span class="nb">range</span><span class="p">(</span><span class="n">val1</span><span class="p">,</span> <span class="n">val2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)))</span>
<span class="k">if</span> <span class="n">scripts</span><span class="p">:</span>
@ -3390,11 +3427,14 @@
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Script |w</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="si">}</span><span class="s2">|n successfully added and &quot;</span>
<span class="sa">f</span><span class="s2">&quot;started on </span><span class="si">{</span><span class="n">obj</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="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;started on </span><span class="si">{</span><span class="n">obj</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="si">}</span><span class="s2">.&quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Script </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="si">}</span><span class="s2"> could not be added and/or started &quot;</span>
<span class="sa">f</span><span class="s2">&quot;on </span><span class="si">{</span><span class="n">obj</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="si">}</span><span class="s2"> (or it started and &quot;</span>
<span class="s2">&quot;immediately shut down).&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Script </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="si">}</span><span class="s2"> could not be added and/or started &quot;</span>
<span class="sa">f</span><span class="s2">&quot;on </span><span class="si">{</span><span class="n">obj</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="si">}</span><span class="s2"> (or it started and &quot;</span>
<span class="s2">&quot;immediately shut down).&quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># just show all scripts on object</span>
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_obj</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span>
@ -3416,12 +3456,15 @@
<span class="n">new_script</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">new_script</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Global Script Created - &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">new_script</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">new_script</span><span class="o">.</span><span class="n">typeclass_path</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Global Script Created - &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">new_script</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">new_script</span><span class="o">.</span><span class="n">typeclass_path</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="p">)</span>
<span class="n">ScriptEvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="p">[</span><span class="n">new_script</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>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Global Script |rNOT|n Created |r(see log)|n - &quot;</span>
<span class="sa">f</span><span class="s2">&quot;arguments: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Global Script |rNOT|n Created |r(see log)|n - &quot;</span> <span class="sa">f</span><span class="s2">&quot;arguments: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">scripts</span> <span class="ow">or</span> <span class="n">obj</span><span class="p">:</span>
<span class="c1"># modification switches - must operate on existing scripts</span>
@ -3430,9 +3473,11 @@
<span class="n">scripts</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_obj</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span>
<span class="k">if</span> <span class="n">scripts</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">ret</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Multiple scripts found: </span><span class="si">{</span><span class="n">scripts</span><span class="si">}</span><span class="s2">. Are you sure you want to &quot;</span>
<span class="s2">&quot;operate on all of them? [Y]/N? &quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ret</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;no&#39;</span><span class="p">):</span>
<span class="n">ret</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Multiple scripts found: </span><span class="si">{</span><span class="n">scripts</span><span class="si">}</span><span class="s2">. Are you sure you want to &quot;</span>
<span class="s2">&quot;operate on all of them? [Y]/N? &quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">ret</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;no&quot;</span><span class="p">):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>
@ -3448,11 +3493,14 @@
<span class="nb">getattr</span><span class="p">(</span><span class="n">script</span><span class="p">,</span> <span class="n">switch</span><span class="p">)()</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="n">msgs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">scripttype</span><span class="si">}</span><span class="s2"> |rNOT|n </span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> |r(see log)|n - &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">script_key</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">script_typeclass_path</span><span class="si">}</span><span class="s2">)|n&quot;</span><span class="p">)</span>
<span class="n">msgs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">scripttype</span><span class="si">}</span><span class="s2"> |rNOT|n </span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> |r(see log)|n - &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">script_key</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">script_typeclass_path</span><span class="si">}</span><span class="s2">)|n&quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">msgs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">scripttype</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> - &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">script_key</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">script_typeclass_path</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
<span class="n">msgs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">scripttype</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">verb</span><span class="si">}</span><span class="s2"> - &quot;</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">script_key</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">script_typeclass_path</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</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">msgs</span><span class="p">))</span>
<span class="k">if</span> <span class="s2">&quot;delete&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
<span class="n">ScriptEvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="p">[</span><span class="n">script</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>
@ -3530,7 +3578,7 @@
<span class="p">)</span>
<span class="c1"># last N table</span>
<span class="n">objs</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</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="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">nobjs</span> <span class="o">-</span> <span class="n">nlim</span><span class="p">):</span> <span class="p">]</span>
<span class="n">objs</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</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="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">nobjs</span> <span class="o">-</span> <span class="n">nlim</span><span class="p">)</span> <span class="p">:]</span>
<span class="n">latesttable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span>
<span class="s2">&quot;|wcreated|n&quot;</span><span class="p">,</span> <span class="s2">&quot;|wdbref|n&quot;</span><span class="p">,</span> <span class="s2">&quot;|wname|n&quot;</span><span class="p">,</span> <span class="s2">&quot;|wtypeclass|n&quot;</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="s2">&quot;l&quot;</span><span class="p">,</span> <span class="n">border</span><span class="o">=</span><span class="s2">&quot;table&quot;</span>
<span class="p">)</span>
@ -3662,14 +3710,18 @@
<span class="c1"># check any locks</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="s2">&quot;Admin&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj_to_teleport</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;teleport&quot;</span><span class="p">)):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">obj_to_teleport</span><span class="si">}</span><span class="s2"> &#39;teleport&#39;-lock blocks you from teleporting &quot;</span>
<span class="s2">&quot;it anywhere.&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">obj_to_teleport</span><span class="si">}</span><span class="s2"> &#39;teleport&#39;-lock blocks you from teleporting &quot;</span> <span class="s2">&quot;it anywhere.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="s2">&quot;Admin&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">destination</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">obj_to_teleport</span><span class="p">,</span> <span class="s2">&quot;teleport_here&quot;</span><span class="p">)):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">destination</span><span class="si">}</span><span class="s2"> &#39;teleport_here&#39;-lock blocks </span><span class="si">{</span><span class="n">obj_to_teleport</span><span class="si">}</span><span class="s2"> from &quot;</span>
<span class="s2">&quot;moving there.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span>
<span class="n">caller</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="s2">&quot;Admin&quot;</span><span class="p">)</span>
<span class="ow">or</span> <span class="n">destination</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">obj_to_teleport</span><span class="p">,</span> <span class="s2">&quot;teleport_here&quot;</span><span class="p">)</span>
<span class="p">):</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">destination</span><span class="si">}</span><span class="s2"> &#39;teleport_here&#39;-lock blocks </span><span class="si">{</span><span class="n">obj_to_teleport</span><span class="si">}</span><span class="s2"> from &quot;</span> <span class="s2">&quot;moving there.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="c1"># try the teleport</span>
@ -3678,8 +3730,11 @@
<span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">destination</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Teleported </span><span class="si">{</span><span class="n">obj_to_teleport</span><span class="si">}</span><span class="s2"> None -&gt; </span><span class="si">{</span><span class="n">destination</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">move_to</span><span class="p">(</span>
<span class="n">destination</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="s2">&quot;quiet&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">,</span>
<span class="n">emit_to_obj</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span> <span class="n">use_destination</span><span class="o">=</span><span class="s2">&quot;intoexit&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">):</span>
<span class="n">destination</span><span class="p">,</span>
<span class="n">quiet</span><span class="o">=</span><span class="s2">&quot;quiet&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">,</span>
<span class="n">emit_to_obj</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
<span class="n">use_destination</span><span class="o">=</span><span class="s2">&quot;intoexit&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">,</span>
<span class="p">):</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">caller</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Teleported to </span><span class="si">{</span><span class="n">destination</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
@ -4037,7 +4092,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;No prototypes found.&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_list_prototypes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Display prototypes as a list, optionally limited by key/tags. &quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;Display prototypes as a list, optionally limited by key/tags.&quot;&quot;&quot;</span>
<span class="n">protlib</span><span class="o">.</span><span class="n">list_prototypes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</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>
<span class="nd">@interactive</span>
@ -4081,7 +4136,9 @@
<span class="k">return</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">n_updated</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
<span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">existing_objects</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
<span class="n">prototype</span><span class="p">,</span>
<span class="n">objects</span><span class="o">=</span><span class="n">existing_objects</span><span class="p">,</span>
<span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>

View file

@ -62,16 +62,15 @@
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
<span class="n">CHANNEL_DEFAULT_TYPECLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span>
<span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">FALLBACK_CHANNEL_TYPECLASS</span><span class="p">)</span>
<span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHANNEL_TYPECLASS</span><span class="p">,</span> <span class="n">fallback</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">FALLBACK_CHANNEL_TYPECLASS</span>
<span class="p">)</span>
<span class="c1"># limit symbol import for API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;CmdChannel&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdObjectChannel&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdPage&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdIRC2Chan&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdIRCStatus&quot;</span><span class="p">,</span>
<span class="s2">&quot;CmdRSS2Chan&quot;</span><span class="p">,</span>
@ -249,6 +248,7 @@
<span class="sd"> ban mychannel1,mychannel2= EvilUser : Was banned for spamming.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;@channel&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;@chan&quot;</span><span class="p">,</span> <span class="s2">&quot;@channels&quot;</span><span class="p">]</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;Comms&quot;</span>
@ -257,8 +257,25 @@
<span class="c1"># the manage: lock controls access to /create/destroy/desc/lock/unlock switches</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:not pperm(channel_banned);admin:all();manage:all();changelocks:perm(Admin)&quot;</span>
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;list&quot;</span><span class="p">,</span> <span class="s2">&quot;all&quot;</span><span class="p">,</span> <span class="s2">&quot;history&quot;</span><span class="p">,</span> <span class="s2">&quot;sub&quot;</span><span class="p">,</span> <span class="s2">&quot;unsub&quot;</span><span class="p">,</span> <span class="s2">&quot;mute&quot;</span><span class="p">,</span> <span class="s2">&quot;unmute&quot;</span><span class="p">,</span> <span class="s2">&quot;alias&quot;</span><span class="p">,</span> <span class="s2">&quot;unalias&quot;</span><span class="p">,</span>
<span class="s2">&quot;create&quot;</span><span class="p">,</span> <span class="s2">&quot;destroy&quot;</span><span class="p">,</span> <span class="s2">&quot;desc&quot;</span><span class="p">,</span> <span class="s2">&quot;lock&quot;</span><span class="p">,</span> <span class="s2">&quot;unlock&quot;</span><span class="p">,</span> <span class="s2">&quot;boot&quot;</span><span class="p">,</span> <span class="s2">&quot;ban&quot;</span><span class="p">,</span> <span class="s2">&quot;unban&quot;</span><span class="p">,</span> <span class="s2">&quot;who&quot;</span><span class="p">,)</span>
<span class="s2">&quot;list&quot;</span><span class="p">,</span>
<span class="s2">&quot;all&quot;</span><span class="p">,</span>
<span class="s2">&quot;history&quot;</span><span class="p">,</span>
<span class="s2">&quot;sub&quot;</span><span class="p">,</span>
<span class="s2">&quot;unsub&quot;</span><span class="p">,</span>
<span class="s2">&quot;mute&quot;</span><span class="p">,</span>
<span class="s2">&quot;unmute&quot;</span><span class="p">,</span>
<span class="s2">&quot;alias&quot;</span><span class="p">,</span>
<span class="s2">&quot;unalias&quot;</span><span class="p">,</span>
<span class="s2">&quot;create&quot;</span><span class="p">,</span>
<span class="s2">&quot;destroy&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">,</span>
<span class="s2">&quot;lock&quot;</span><span class="p">,</span>
<span class="s2">&quot;unlock&quot;</span><span class="p">,</span>
<span class="s2">&quot;boot&quot;</span><span class="p">,</span>
<span class="s2">&quot;ban&quot;</span><span class="p">,</span>
<span class="s2">&quot;unban&quot;</span><span class="p">,</span>
<span class="s2">&quot;who&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># disable this in child command classes if wanting on-character channels</span>
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
@ -295,17 +312,24 @@
<span class="n">channels</span> <span class="o">=</span> <span class="n">CHANNEL_DEFAULT_TYPECLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">channel_search</span><span class="p">(</span><span class="n">channelname</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="n">exact</span><span class="p">)</span>
<span class="c1"># check permissions</span>
<span class="n">channels</span> <span class="o">=</span> <span class="p">[</span><span class="n">channel</span> <span class="k">for</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">channels</span>
<span class="k">if</span> <span class="n">channel</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="s1">&#39;listen&#39;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">channel</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="s1">&#39;control&#39;</span><span class="p">)]</span>
<span class="n">channels</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">channel</span>
<span class="k">for</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">channels</span>
<span class="k">if</span> <span class="n">channel</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;listen&quot;</span><span class="p">)</span> <span class="ow">or</span> <span class="n">channel</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;control&quot;</span><span class="p">)</span>
<span class="p">]</span>
<span class="k">if</span> <span class="n">handle_errors</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channels</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="sa">f</span><span class="s2">&quot;No channel found matching &#39;</span><span class="si">{</span><span class="n">channelname</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;(could also be due to missing access).&quot;</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="sa">f</span><span class="s2">&quot;No channel found matching &#39;</span><span class="si">{</span><span class="n">channelname</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;(could also be due to missing access).&quot;</span>
<span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">channels</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</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;Multiple possible channel matches/alias for &quot;</span>
<span class="s2">&quot;&#39;</span><span class="si">{channelname}</span><span class="s2">&#39;:</span><span class="se">\n</span><span class="s2">&quot;</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">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</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;Multiple possible channel matches/alias for &quot;</span>
<span class="s2">&quot;&#39;</span><span class="si">{channelname}</span><span class="s2">&#39;:</span><span class="se">\n</span><span class="s2">&quot;</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">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
@ -354,6 +378,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">line</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">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;[-]&quot;</span> <span class="ow">in</span> <span class="n">line</span> <span class="k">else</span> <span class="n">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">lines</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># asynchronously tail the log file</span>
<span class="n">tail_log_file</span><span class="p">(</span><span class="n">log_file</span><span class="p">,</span> <span class="n">start_index</span><span class="p">,</span> <span class="mi">20</span><span class="p">,</span> <span class="n">callback</span><span class="o">=</span><span class="n">send_msg</span><span class="p">)</span></div>
@ -533,7 +558,8 @@
<span class="n">lockstring</span> <span class="o">=</span> <span class="s2">&quot;send:all();listen:all();control:id(</span><span class="si">%s</span><span class="s2">)&quot;</span> <span class="o">%</span> <span class="n">caller</span><span class="o">.</span><span class="n">id</span>
<span class="n">new_chan</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_channel</span><span class="p">(</span>
<span class="n">name</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">description</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">)</span>
<span class="n">name</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="n">description</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sub_to_channel</span><span class="p">(</span><span class="n">new_chan</span><span class="p">)</span>
<span class="k">return</span> <span class="n">new_chan</span><span class="p">,</span> <span class="s2">&quot;&quot;</span></div>
@ -556,14 +582,14 @@
<span class="n">channel_key</span> <span class="o">=</span> <span class="n">channel</span><span class="o">.</span><span class="n">key</span>
<span class="k">if</span> <span class="n">message</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">message</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|rChannel </span><span class="si">{</span><span class="n">channel_key</span><span class="si">}</span><span class="s2"> is being destroyed. &quot;</span>
<span class="s2">&quot;Make sure to clean any channel aliases.|n&quot;</span><span class="p">)</span>
<span class="n">message</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;|rChannel </span><span class="si">{</span><span class="n">channel_key</span><span class="si">}</span><span class="s2"> is being destroyed. &quot;</span>
<span class="s2">&quot;Make sure to clean any channel aliases.|n&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">message</span><span class="p">:</span>
<span class="n">channel</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span> <span class="n">bypass_mute</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">channel</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
<span class="s2">&quot;Channel </span><span class="si">{}</span><span class="s2"> was deleted by </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">channel_key</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
<span class="p">)</span></div>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span><span class="s2">&quot;Channel </span><span class="si">{}</span><span class="s2"> was deleted by </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">channel_key</span><span class="p">,</span> <span class="n">caller</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdChannel.set_lock"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.set_lock">[docs]</a> <span class="k">def</span> <span class="nf">set_lock</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">lockstring</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -652,8 +678,10 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">quiet</span><span class="p">:</span>
<span class="n">channel</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> was booted from channel by </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">.</span><span class="si">{</span><span class="n">reason</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Channel Boot: </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (Channel: </span><span class="si">{</span><span class="n">channel</span><span class="si">}</span><span class="s2">, &quot;</span>
<span class="sa">f</span><span class="s2">&quot;Reason: </span><span class="si">{</span><span class="n">reason</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">, Caller: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Channel Boot: </span><span class="si">{</span><span class="n">target</span><span class="si">}</span><span class="s2"> (Channel: </span><span class="si">{</span><span class="n">channel</span><span class="si">}</span><span class="s2">, &quot;</span>
<span class="sa">f</span><span class="s2">&quot;Reason: </span><span class="si">{</span><span class="n">reason</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">, Caller: </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="s2">&quot;&quot;</span></div>
<div class="viewcode-block" id="CmdChannel.ban_user"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannel.ban_user">[docs]</a> <span class="k">def</span> <span class="nf">ban_user</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">channel</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">reason</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">):</span>
@ -726,7 +754,7 @@
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="n">mute_list</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">mutelist</span><span class="p">)</span>
<span class="n">online_list</span> <span class="o">=</span> <span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">online</span><span class="p">()</span>
<span class="k">if</span> <span class="n">channel</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="s1">&#39;control&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">channel</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;control&quot;</span><span class="p">):</span>
<span class="c1"># for those with channel control, show also offline users</span>
<span class="n">all_subs</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">channel</span><span class="o">.</span><span class="n">subscriptions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
<span class="k">else</span><span class="p">:</span>
@ -736,8 +764,10 @@
<span class="n">who_list</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">subscriber</span> <span class="ow">in</span> <span class="n">all_subs</span><span class="p">:</span>
<span class="n">name</span> <span class="o">=</span> <span class="n">subscriber</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="n">conditions</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;muting&quot;</span> <span class="k">if</span> <span class="n">subscriber</span> <span class="ow">in</span> <span class="n">mute_list</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="s2">&quot;offline&quot;</span> <span class="k">if</span> <span class="n">subscriber</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">online_list</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">conditions</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;muting&quot;</span> <span class="k">if</span> <span class="n">subscriber</span> <span class="ow">in</span> <span class="n">mute_list</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="s2">&quot;offline&quot;</span> <span class="k">if</span> <span class="n">subscriber</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">online_list</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">conditions</span> <span class="o">=</span> <span class="p">[</span><span class="n">cond</span> <span class="k">for</span> <span class="n">cond</span> <span class="ow">in</span> <span class="n">conditions</span> <span class="k">if</span> <span class="n">cond</span><span class="p">]</span>
<span class="n">cond_text</span> <span class="o">=</span> <span class="s2">&quot;(&quot;</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">conditions</span><span class="p">)</span> <span class="o">+</span> <span class="s2">&quot;)&quot;</span> <span class="k">if</span> <span class="n">conditions</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">who_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}{</span><span class="n">cond_text</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
@ -785,7 +815,7 @@
<span class="s2">&quot;locks&quot;</span><span class="p">,</span>
<span class="s2">&quot;description&quot;</span><span class="p">,</span>
<span class="n">align</span><span class="o">=</span><span class="s2">&quot;l&quot;</span><span class="p">,</span>
<span class="n">maxwidth</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span>
<span class="n">maxwidth</span><span class="o">=</span><span class="n">_DEFAULT_WIDTH</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">subscribed</span><span class="p">:</span>
@ -798,14 +828,14 @@
<span class="n">my_aliases</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="bp">self</span><span class="o">.</span><span class="n">get_channel_aliases</span><span class="p">(</span><span class="n">chan</span><span class="p">))</span>
<span class="n">comtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="o">*</span><span class="p">(</span>
<span class="n">chanid</span><span class="p">,</span>
<span class="s2">&quot;</span><span class="si">{key}{aliases}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="s2">&quot;;&quot;</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">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">),</span>
<span class="n">my_aliases</span><span class="p">,</span>
<span class="n">locks</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span>
<span class="n">chanid</span><span class="p">,</span>
<span class="s2">&quot;</span><span class="si">{key}{aliases}</span><span class="s2">&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="s2">&quot;;&quot;</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">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="p">),</span>
<span class="n">my_aliases</span><span class="p">,</span>
<span class="n">locks</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">comtable</span></div>
@ -841,11 +871,14 @@
<span class="n">substatus</span> <span class="o">=</span> <span class="s2">&quot;|gYes|n&quot;</span>
<span class="n">my_aliases</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="bp">self</span><span class="o">.</span><span class="n">get_channel_aliases</span><span class="p">(</span><span class="n">chan</span><span class="p">))</span>
<span class="n">comtable</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="o">*</span><span class="p">(</span><span class="n">substatus</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">my_aliases</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">))</span>
<span class="o">*</span><span class="p">(</span>
<span class="n">substatus</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="s2">&quot;,&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="k">if</span> <span class="n">chan</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">my_aliases</span><span class="p">,</span>
<span class="n">chan</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">comtable</span><span class="o">.</span><span class="n">reformat_column</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="mi">8</span><span class="p">)</span>
<span class="k">return</span> <span class="n">comtable</span></div>
@ -860,16 +893,17 @@
<span class="n">switches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
<span class="n">channel_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">name</span> <span class="k">for</span> <span class="n">name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span> <span class="k">if</span> <span class="n">name</span><span class="p">]</span>
<span class="c1">#from evennia import set_trace;set_trace()</span>
<span class="c1"># from evennia import set_trace;set_trace()</span>
<span class="k">if</span> <span class="s1">&#39;all&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;all&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># show all available channels</span>
<span class="n">subscribed</span><span class="p">,</span> <span class="n">available</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">list_channels</span><span class="p">()</span>
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_all_channels</span><span class="p">(</span><span class="n">subscribed</span><span class="p">,</span> <span class="n">available</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;</span><span class="se">\n</span><span class="s2">|wAvailable channels|n (use no argument to &quot;</span>
<span class="sa">f</span><span class="s2">&quot;only show your subscriptions)</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;only show your subscriptions)</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channel_names</span><span class="p">:</span>
@ -877,15 +911,16 @@
<span class="n">subscribed</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">list_channels</span><span class="p">()</span>
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_subbed_channels</span><span class="p">(</span><span class="n">subscribed</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;</span><span class="se">\n</span><span class="s2">|wChannel subscriptions|n &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(use |w/all|n to see all available):</span><span class="se">\n</span><span class="si">{</span><span class="n">table</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">msg</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|wChannel subscriptions|n &quot;</span> <span class="sa">f</span><span class="s2">&quot;(use |w/all|n to see all available):</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</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">msg</span><span class="p">(</span><span class="s2">&quot;Usage[/switches]: channel [= message]&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;create&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;create&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># create a new channel</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;manage&quot;</span><span class="p">):</span>
@ -907,7 +942,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;unalias&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;unalias&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># remove a personal alias (no channel needed)</span>
<span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span><span class="p">:</span>
@ -926,12 +961,11 @@
<span class="c1"># channels without a space in their name), we need to check if the</span>
<span class="c1"># first &#39;channel name&#39; is in fact &#39;channelname text&#39;</span>
<span class="n">no_rhs_channel_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">possible_lhs_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">no_rhs_channel_name</span><span class="p">):]</span>
<span class="k">if</span> <span class="n">possible_lhs_message</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s1">&#39;=&#39;</span><span class="p">:</span>
<span class="n">possible_lhs_message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">no_rhs_channel_name</span><span class="p">)</span> <span class="p">:]</span>
<span class="k">if</span> <span class="n">possible_lhs_message</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="o">==</span> <span class="s2">&quot;=&quot;</span><span class="p">:</span>
<span class="n">possible_lhs_message</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">channel_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">no_rhs_channel_name</span><span class="p">)</span>
<span class="n">channels</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">errors</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">channel_name</span> <span class="ow">in</span> <span class="n">channel_names</span><span class="p">:</span>
@ -939,16 +973,20 @@
<span class="c1"># &#39;listen/control&#39; perms.</span>
<span class="n">found_channels</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_channel</span><span class="p">(</span><span class="n">channel_name</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">handle_errors</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">found_channels</span><span class="p">:</span>
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No channel found matching &#39;</span><span class="si">{</span><span class="n">channel_name</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;(could also be due to missing access).&quot;</span><span class="p">)</span>
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;No channel found matching &#39;</span><span class="si">{</span><span class="n">channel_name</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;(could also be due to missing access).&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">found_channels</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">&quot;Multiple possible channel matches/alias for &quot;</span>
<span class="s2">&quot;&#39;</span><span class="si">{channel_name}</span><span class="s2">&#39;:</span><span class="se">\n</span><span class="s2">&quot;</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">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">found_channels</span><span class="p">))</span>
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="s2">&quot;Multiple possible channel matches/alias for &quot;</span>
<span class="s2">&quot;&#39;</span><span class="si">{channel_name}</span><span class="s2">&#39;:</span><span class="se">\n</span><span class="s2">&quot;</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">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">found_channels</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">channels</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">found_channels</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">channels</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="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">errors</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;</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">errors</span><span class="p">))</span>
<span class="k">return</span>
<span class="c1"># we have at least one channel at this point</span>
@ -967,30 +1005,35 @@
<span class="k">if</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">subscribed</span><span class="p">:</span>
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_subbed_channels</span><span class="p">([</span><span class="n">channel</span><span class="p">])</span>
<span class="n">header</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Channel |w</span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">|n&quot;</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;</span><span class="si">{</span><span class="n">header</span><span class="si">}</span><span class="se">\n</span><span class="s2">(use |w</span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> &lt;msg&gt;|n (or a channel-alias) &quot;</span>
<span class="sa">f</span><span class="s2">&quot;to chat and the &#39;channel&#39; command &quot;</span>
<span class="sa">f</span><span class="s2">&quot;to customize)</span><span class="se">\n</span><span class="si">{</span><span class="n">table</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">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">header</span><span class="si">}</span><span class="se">\n</span><span class="s2">(use |w</span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> &lt;msg&gt;|n (or a channel-alias) &quot;</span>
<span class="sa">f</span><span class="s2">&quot;to chat and the &#39;channel&#39; command &quot;</span>
<span class="sa">f</span><span class="s2">&quot;to customize)</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">channel</span> <span class="ow">in</span> <span class="n">available</span><span class="p">:</span>
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_all_channels</span><span class="p">([],</span> <span class="p">[</span><span class="n">channel</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;</span><span class="se">\n</span><span class="s2">|wNot subscribed to this channel|n (use /list to &quot;</span>
<span class="sa">f</span><span class="s2">&quot;show all subscriptions)</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;show all subscriptions)</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;history&#39;</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">or</span> <span class="s1">&#39;hist&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;history&quot;</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">or</span> <span class="s2">&quot;hist&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># view channel history</span>
<span class="n">index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">or</span> <span class="mi">0</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">index</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="nb">int</span><span class="p">(</span><span class="n">index</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">ValueError</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;The history index (describing how many lines to go back) &quot;</span>
<span class="s2">&quot;must be an integer &gt;= 0.&quot;</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;The history index (describing how many lines to go back) &quot;</span>
<span class="s2">&quot;must be an integer &gt;= 0.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">get_channel_history</span><span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="n">start_index</span><span class="o">=</span><span class="n">index</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;sub&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;sub&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># subscribe to a channel</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
@ -999,26 +1042,29 @@
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
<span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add_alias</span><span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="n">alias</span><span class="p">)</span>
<span class="n">alias_txt</span> <span class="o">=</span> <span class="s1">&#39;, &#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">aliases</span><span class="p">)</span>
<span class="n">alias_txt</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; using alias(es) </span><span class="si">{</span><span class="n">alias_txt</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">aliases</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You are now subscribed &quot;</span>
<span class="sa">f</span><span class="s2">&quot;to the channel </span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}{</span><span class="n">alias_txt</span><span class="si">}</span><span class="s2">. Use /alias to &quot;</span>
<span class="s2">&quot;add additional aliases for referring to the channel.&quot;</span><span class="p">)</span>
<span class="n">alias_txt</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">aliases</span><span class="p">)</span>
<span class="n">alias_txt</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot; using alias(es) </span><span class="si">{</span><span class="n">alias_txt</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">aliases</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;You are now subscribed &quot;</span>
<span class="sa">f</span><span class="s2">&quot;to the channel </span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}{</span><span class="n">alias_txt</span><span class="si">}</span><span class="s2">. Use /alias to &quot;</span>
<span class="s2">&quot;add additional aliases for referring to the channel.&quot;</span>
<span class="p">)</span>
<span class="k">else</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="n">err</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;unsub&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;unsub&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># un-subscribe from a channel</span>
<span class="n">success</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsub_from_channel</span><span class="p">(</span><span class="n">channel</span><span class="p">)</span>
<span class="k">if</span> <span class="n">success</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="sa">f</span><span class="s2">&quot;You un-subscribed from channel </span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">. &quot;</span>
<span class="s2">&quot;All aliases were cleared.&quot;</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="sa">f</span><span class="s2">&quot;You un-subscribed from channel </span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">. &quot;</span> <span class="s2">&quot;All aliases were cleared.&quot;</span>
<span class="p">)</span>
<span class="k">else</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="n">err</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;alias&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;alias&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># create a new personal alias for a channel</span>
<span class="n">alias</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">alias</span><span class="p">:</span>
@ -1028,7 +1074,7 @@
<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;Added/updated your alias &#39;</span><span class="si">{</span><span class="n">alias</span><span class="si">}</span><span class="s2">&#39; for channel </span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;mute&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;mute&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># mute a given channel</span>
<span class="n">success</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">mute_channel</span><span class="p">(</span><span class="n">channel</span><span class="p">)</span>
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
@ -1037,7 +1083,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;unmute&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;unmute&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># unmute a given channel</span>
<span class="n">success</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">unmute_channel</span><span class="p">(</span><span class="n">channel</span><span class="p">)</span>
<span class="k">if</span> <span class="n">success</span><span class="p">:</span>
@ -1046,7 +1092,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;destroy&#39;</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">or</span> <span class="s1">&#39;delete&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;destroy&quot;</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">or</span> <span class="s2">&quot;delete&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># destroy a channel we control</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;manage&quot;</span><span class="p">):</span>
@ -1070,10 +1116,10 @@
<span class="s2">&quot;remove all users&#39; aliases. </span><span class="si">{options}</span><span class="s2">?&quot;</span><span class="p">,</span>
<span class="n">yes_action</span><span class="o">=</span><span class="n">_perform_delete</span><span class="p">,</span>
<span class="n">no_action</span><span class="o">=</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="s2">&quot;N&quot;</span>
<span class="n">default</span><span class="o">=</span><span class="s2">&quot;N&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;desc&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;desc&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># set channel description</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;manage&quot;</span><span class="p">):</span>
@ -1093,7 +1139,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">set_desc</span><span class="p">(</span><span class="n">channel</span><span class="p">,</span> <span class="n">desc</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;Updated channel description.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;lock&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;lock&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># add a lockstring to channel</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;changelocks&quot;</span><span class="p">):</span>
@ -1117,7 +1163,7 @@
<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;Could not add/update lock: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;unlock&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;unlock&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># remove/update lockstring from channel</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;changelocks&quot;</span><span class="p">):</span>
@ -1141,7 +1187,7 @@
<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;Could not remove lock: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;boot&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;boot&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># boot a user from channel(s)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;admin&quot;</span><span class="p">):</span>
@ -1176,8 +1222,9 @@
<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;Cannot boot </span><span class="si">{</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> from channel </span><span class="si">{</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">channames</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">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">)</span>
<span class="n">reasonwarn</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;. Also note that your reason will be echoed to the channel&quot;</span>
<span class="k">if</span> <span class="n">reason</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">reasonwarn</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;. Also note that your reason will be echoed to the channel&quot;</span> <span class="k">if</span> <span class="n">reason</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">)</span>
<span class="n">ask_yes_no</span><span class="p">(</span>
<span class="n">caller</span><span class="p">,</span>
<span class="n">prompt</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;Are you sure you want to boot user </span><span class="si">{</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> from &quot;</span>
@ -1185,11 +1232,11 @@
<span class="s2">&quot;</span><span class="si">{options}</span><span class="s2">?&quot;</span><span class="p">,</span>
<span class="n">yes_action</span><span class="o">=</span><span class="n">_boot_user</span><span class="p">,</span>
<span class="n">no_action</span><span class="o">=</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="s2">&quot;Y&quot;</span>
<span class="n">default</span><span class="o">=</span><span class="s2">&quot;Y&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;ban&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;ban&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># ban a user from channel(s)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;admin&quot;</span><span class="p">):</span>
@ -1203,8 +1250,10 @@
<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 need &#39;control&#39;-access to view bans on channel </span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">bans</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;Channel bans &quot;</span>
<span class="s2">&quot;(to ban, use channel/ban channel[,channel,...] = username [:reason]&quot;</span><span class="p">]</span>
<span class="n">bans</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;Channel bans &quot;</span>
<span class="s2">&quot;(to ban, use channel/ban channel[,channel,...] = username [:reason]&quot;</span>
<span class="p">]</span>
<span class="n">bans</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">channel_list_bans</span><span class="p">(</span><span class="n">channel</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;</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">bans</span><span class="p">))</span>
<span class="k">return</span>
@ -1233,8 +1282,9 @@
<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;Cannot boot </span><span class="si">{</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> from channel </span><span class="si">{</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">channames</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">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">)</span>
<span class="n">reasonwarn</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;. Also note that your reason will be echoed to the channel&quot;</span>
<span class="k">if</span> <span class="n">reason</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">reasonwarn</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;. Also note that your reason will be echoed to the channel&quot;</span> <span class="k">if</span> <span class="n">reason</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">)</span>
<span class="n">ask_yes_no</span><span class="p">(</span>
<span class="n">caller</span><span class="p">,</span>
<span class="sa">f</span><span class="s2">&quot;Are you sure you want to ban user </span><span class="si">{</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> from &quot;</span>
@ -1245,7 +1295,7 @@
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="s1">&#39;unban&#39;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;unban&quot;</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
<span class="c1"># unban a previously banned user from channel</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</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;admin&quot;</span><span class="p">):</span>
@ -1456,7 +1506,6 @@
<span class="n">receiver</span><span class="o">=</span><span class="n">receiver</span><span class="p">,</span>
<span class="n">message</span><span class="o">=</span><span class="n">page</span><span class="o">.</span><span class="n">message</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">lastpages</span> <span class="o">=</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">listing</span><span class="p">)</span>
@ -1507,6 +1556,7 @@
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;No irc bots found.&quot;</span>
<div class="viewcode-block" id="CmdIRC2Chan"><a class="viewcode-back" href="../../../../api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdIRC2Chan">[docs]</a><span class="k">class</span> <span class="nc">CmdIRC2Chan</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Link an evennia channel to an external IRC channel</span>

View file

@ -424,10 +424,13 @@
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;You are not carrying anything.&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">raw</span> <span class="k">as</span> <span class="n">raw_ansi</span>
<span class="n">table</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">styled_table</span><span class="p">(</span><span class="n">border</span><span class="o">=</span><span class="s2">&quot;header&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|C</span><span class="si">{</span><span class="n">item</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;</span><span class="si">{}</span><span class="s2">|n&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">raw_ansi</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">))</span>
<span class="n">table</span><span class="o">.</span><span class="n">add_row</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;|C</span><span class="si">{</span><span class="n">item</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2">|n&quot;</span><span class="p">,</span>
<span class="s2">&quot;</span><span class="si">{}</span><span class="s2">|n&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">raw_ansi</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">),</span> <span class="n">width</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;|wYou are carrying:</span><span class="se">\n</span><span class="si">{</span><span class="n">table</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>

View file

@ -61,11 +61,7 @@
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">ANSIString</span>
<span class="kn">from</span> <span class="nn">evennia.help.filehelp</span> <span class="kn">import</span> <span class="n">FILE_HELP_ENTRIES</span>
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="kn">import</span> <span class="n">EvEditor</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">class_from_module</span><span class="p">,</span>
<span class="n">inherits_from</span><span class="p">,</span>
<span class="n">format_grid</span><span class="p">,</span> <span class="n">pad</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">inherits_from</span><span class="p">,</span> <span class="n">format_grid</span><span class="p">,</span> <span class="n">pad</span>
<span class="kn">from</span> <span class="nn">evennia.help.utils</span> <span class="kn">import</span> <span class="n">help_search_with_index</span><span class="p">,</span> <span class="n">parse_entry_for_subcategories</span>
<span class="n">CMD_IGNORE_PREFIXES</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CMD_IGNORE_PREFIXES</span>
@ -77,12 +73,14 @@
<span class="c1"># limit symbol import for API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;CmdHelp&quot;</span><span class="p">,</span> <span class="s2">&quot;CmdSetHelp&quot;</span><span class="p">)</span>
<span class="nd">@dataclass</span>
<span class="k">class</span> <span class="nc">HelpCategory</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Mock &#39;help entry&#39; to search categories with the same code.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span><span class="p">:</span> <span class="nb">str</span>
<span class="nd">@property</span>
@ -155,7 +153,10 @@
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">help_more</span><span class="p">:</span>
<span class="n">usemore</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_key</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;websocket&quot;</span><span class="p">,</span> <span class="s2">&quot;ajax/comet&quot;</span><span class="p">,):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="o">.</span><span class="n">protocol_key</span> <span class="ow">in</span> <span class="p">(</span>
<span class="s2">&quot;websocket&quot;</span><span class="p">,</span>
<span class="s2">&quot;ajax/comet&quot;</span><span class="p">,</span>
<span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">options</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_saved_webclient_options</span>
<span class="k">if</span> <span class="n">options</span> <span class="ow">and</span> <span class="n">options</span><span class="p">[</span><span class="s2">&quot;helppopup&quot;</span><span class="p">]:</span>
@ -169,8 +170,15 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;help&quot;</span><span class="p">}))</span></div>
<div class="viewcode-block" id="CmdHelp.format_help_entry"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.format_help_entry">[docs]</a> <span class="k">def</span> <span class="nf">format_help_entry</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">topic</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">suggested</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">subtopics</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">click_topics</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<div class="viewcode-block" id="CmdHelp.format_help_entry"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.format_help_entry">[docs]</a> <span class="k">def</span> <span class="nf">format_help_entry</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">topic</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">suggested</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">subtopics</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;This visually formats the help entry.</span>
<span class="sd"> This method can be overriden to customize the way a help</span>
<span class="sd"> entry is displayed.</span>
@ -194,28 +202,24 @@
<span class="n">title</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;|CHelp for |w</span><span class="si">{</span><span class="n">topic</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">if</span> <span class="n">topic</span> <span class="k">else</span> <span class="s2">&quot;|rNo help found|n&quot;</span>
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot; |C(aliases: </span><span class="si">{}</span><span class="s2">|C)|n&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;|C,|n &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">ali</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">ali</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">))</span>
<span class="p">)</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot; |C(aliases: </span><span class="si">{}</span><span class="s2">|C)|n&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;|C,|n &quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">ali</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">ali</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">help_text</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">dedent</span><span class="p">(</span><span class="n">help_text</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">))</span> <span class="k">if</span> <span class="n">help_text</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">help_text</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">dedent</span><span class="p">(</span><span class="n">help_text</span><span class="o">.</span><span class="n">strip</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">if</span> <span class="n">help_text</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">subtopics</span><span class="p">:</span>
<span class="k">if</span> <span class="n">click_topics</span><span class="p">:</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="p">[</span>
<span class="sa">f</span><span class="s2">&quot;|lchelp </span><span class="si">{</span><span class="n">topic</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">subtop</span><span class="si">}</span><span class="s2">|lt|w</span><span class="si">{</span><span class="n">topic</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">subtop</span><span class="si">}</span><span class="s2">|n|le&quot;</span>
<span class="k">for</span> <span class="n">subtop</span> <span class="ow">in</span> <span class="n">subtopics</span>
<span class="p">]</span>
<span class="sa">f</span><span class="s2">&quot;|lchelp </span><span class="si">{</span><span class="n">topic</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">subtop</span><span class="si">}</span><span class="s2">|lt|w</span><span class="si">{</span><span class="n">topic</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">subtop</span><span class="si">}</span><span class="s2">|n|le&quot;</span> <span class="k">for</span> <span class="n">subtop</span> <span class="ow">in</span> <span class="n">subtopics</span>
<span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">topic</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">subtop</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">subtop</span> <span class="ow">in</span> <span class="n">subtopics</span><span class="p">]</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|CSubtopics:|n</span><span class="se">\n</span><span class="s2"> </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="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">format_grid</span><span class="p">(</span><span class="n">subtopics</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">())))</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|CSubtopics:|n</span><span class="se">\n</span><span class="s2"> </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="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">format_grid</span><span class="p">(</span><span class="n">subtopics</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">()))</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">suggested</span><span class="p">:</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">suggested</span><span class="p">)</span>
@ -223,12 +227,11 @@
<span class="n">suggested</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|lchelp </span><span class="si">{</span><span class="n">sug</span><span class="si">}</span><span class="s2">|lt|w</span><span class="si">{</span><span class="n">sug</span><span class="si">}</span><span class="s2">|n|le&quot;</span> <span class="k">for</span> <span class="n">sug</span> <span class="ow">in</span> <span class="n">suggested</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">sug</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">sug</span> <span class="ow">in</span> <span class="n">suggested</span><span class="p">]</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|COther topic suggestions:|n</span><span class="se">\n</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="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">format_grid</span><span class="p">(</span><span class="n">suggested</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">())))</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|COther topic suggestions:|n</span><span class="se">\n</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="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">format_grid</span><span class="p">(</span><span class="n">suggested</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">()))</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="n">suggested</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">end</span> <span class="o">=</span> <span class="n">start</span>
@ -236,8 +239,9 @@
<span class="k">return</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">part</span><span class="o">.</span><span class="n">rstrip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">partorder</span> <span class="k">if</span> <span class="n">part</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdHelp.format_help_index"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.format_help_index">[docs]</a> <span class="k">def</span> <span class="nf">format_help_index</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd_help_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">db_help_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title_lone_category</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<div class="viewcode-block" id="CmdHelp.format_help_index"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.format_help_index">[docs]</a> <span class="k">def</span> <span class="nf">format_help_index</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">cmd_help_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">db_help_dict</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">title_lone_category</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">click_topics</span><span class="o">=</span><span class="kc">True</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Output a category-ordered g for displaying the main help, grouped by</span>
<span class="sd"> category.</span>
@ -261,6 +265,7 @@
<span class="sd"> commands and topics.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_group_by_category</span><span class="p">(</span><span class="n">help_dict</span><span class="p">):</span>
<span class="n">grid</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">verbatim_elements</span> <span class="o">=</span> <span class="p">[]</span>
@ -273,9 +278,7 @@
<span class="c1"># make the help topics clickable</span>
<span class="k">if</span> <span class="n">click_topics</span><span class="p">:</span>
<span class="n">entries</span> <span class="o">=</span> <span class="p">[</span>
<span class="sa">f</span><span class="s1">&#39;|lchelp </span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s1">|lt</span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s1">|le&#39;</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">entries</span>
<span class="p">]</span>
<span class="n">entries</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|lchelp </span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s2">|lt</span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s2">|le&quot;</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">entries</span><span class="p">]</span>
<span class="c1"># add the entries to the grid</span>
<span class="n">grid</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">entries</span><span class="p">)</span>
@ -285,7 +288,8 @@
<span class="n">category_str</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;-- </span><span class="si">{</span><span class="n">category</span><span class="o">.</span><span class="n">title</span><span class="p">()</span><span class="si">}</span><span class="s2"> &quot;</span>
<span class="n">grid</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">ANSIString</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">index_category_clr</span> <span class="o">+</span> <span class="n">category_str</span>
<span class="bp">self</span><span class="o">.</span><span class="n">index_category_clr</span>
<span class="o">+</span> <span class="n">category_str</span>
<span class="o">+</span> <span class="s2">&quot;-&quot;</span> <span class="o">*</span> <span class="p">(</span><span class="n">width</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">category_str</span><span class="p">))</span>
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span>
<span class="p">)</span>
@ -297,9 +301,7 @@
<span class="c1"># make the help topics clickable</span>
<span class="k">if</span> <span class="n">click_topics</span><span class="p">:</span>
<span class="n">entries</span> <span class="o">=</span> <span class="p">[</span>
<span class="sa">f</span><span class="s1">&#39;|lchelp </span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s1">|lt</span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s1">|le&#39;</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">entries</span>
<span class="p">]</span>
<span class="n">entries</span> <span class="o">=</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|lchelp </span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s2">|lt</span><span class="si">{</span><span class="n">entry</span><span class="si">}</span><span class="s2">|le&quot;</span> <span class="k">for</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">entries</span><span class="p">]</span>
<span class="c1"># add the entries to the grid</span>
<span class="n">grid</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">entries</span><span class="p">)</span>
@ -314,18 +316,22 @@
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">cmd_help_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
<span class="c1"># get the command-help entries by-category</span>
<span class="n">sep1</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">index_type_separator_clr</span>
<span class="o">+</span> <span class="n">pad</span><span class="p">(</span><span class="s2">&quot;Commands&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">)</span>
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span><span class="p">)</span>
<span class="n">sep1</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">index_type_separator_clr</span>
<span class="o">+</span> <span class="n">pad</span><span class="p">(</span><span class="s2">&quot;Commands&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">)</span>
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span>
<span class="p">)</span>
<span class="n">grid</span><span class="p">,</span> <span class="n">verbatim_elements</span> <span class="o">=</span> <span class="n">_group_by_category</span><span class="p">(</span><span class="n">cmd_help_dict</span><span class="p">)</span>
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span><span class="p">)</span>
<span class="n">cmd_grid</span> <span class="o">=</span> <span class="n">ANSIString</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">join</span><span class="p">(</span><span class="n">gridrows</span><span class="p">)</span> <span class="k">if</span> <span class="n">gridrows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">db_help_dict</span><span class="o">.</span><span class="n">values</span><span class="p">()):</span>
<span class="c1"># get db-based help entries by-category</span>
<span class="n">sep2</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">index_type_separator_clr</span>
<span class="o">+</span> <span class="n">pad</span><span class="p">(</span><span class="s2">&quot;Game &amp; World&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s1">&#39;-&#39;</span><span class="p">)</span>
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span><span class="p">)</span>
<span class="n">sep2</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">index_type_separator_clr</span>
<span class="o">+</span> <span class="n">pad</span><span class="p">(</span><span class="s2">&quot;Game &amp; World&quot;</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">fillchar</span><span class="o">=</span><span class="s2">&quot;-&quot;</span><span class="p">)</span>
<span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">index_topic_clr</span>
<span class="p">)</span>
<span class="n">grid</span><span class="p">,</span> <span class="n">verbatim_elements</span> <span class="o">=</span> <span class="n">_group_by_category</span><span class="p">(</span><span class="n">db_help_dict</span><span class="p">)</span>
<span class="n">gridrows</span> <span class="o">=</span> <span class="n">format_grid</span><span class="p">(</span><span class="n">grid</span><span class="p">,</span> <span class="n">width</span><span class="p">,</span> <span class="n">sep</span><span class="o">=</span><span class="s2">&quot; &quot;</span><span class="p">,</span> <span class="n">verbatim_elements</span><span class="o">=</span><span class="n">verbatim_elements</span><span class="p">)</span>
<span class="n">db_grid</span> <span class="o">=</span> <span class="n">ANSIString</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">join</span><span class="p">(</span><span class="n">gridrows</span><span class="p">)</span> <span class="k">if</span> <span class="n">gridrows</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
@ -358,9 +364,9 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">cmd_or_topic</span><span class="p">,</span> <span class="s2">&quot;evennia.commands.command.Command&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">cmd_or_topic</span><span class="o">.</span><span class="n">auto_help</span> <span class="ow">and</span> <span class="n">cmd_or_topic</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="s1">&#39;read&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="n">cmd_or_topic</span><span class="o">.</span><span class="n">auto_help</span> <span class="ow">and</span> <span class="n">cmd_or_topic</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="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">cmd_or_topic</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="s1">&#39;read&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">cmd_or_topic</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="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdHelp.can_list_topic"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.can_list_topic">[docs]</a> <span class="k">def</span> <span class="nf">can_list_topic</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd_or_topic</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -397,12 +403,12 @@
<span class="p">)</span>
<span class="k">if</span> <span class="n">has_view</span><span class="p">:</span>
<span class="k">return</span> <span class="n">cmd_or_topic</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="s1">&#39;view&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">return</span> <span class="n">cmd_or_topic</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;view&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># no explicit &#39;view&#39; lock - use the &#39;read&#39; lock</span>
<span class="k">return</span> <span class="n">cmd_or_topic</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="s1">&#39;read&#39;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">cmd_or_topic</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="n">default</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdHelp.collect_topics"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.collect_topics">[docs]</a> <span class="k">def</span> <span class="nf">collect_topics</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;list&#39;</span><span class="p">):</span>
<div class="viewcode-block" id="CmdHelp.collect_topics"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.collect_topics">[docs]</a> <span class="k">def</span> <span class="nf">collect_topics</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;list&quot;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Collect help topics from all sources (cmd/db/file).</span>
@ -425,43 +431,45 @@
<span class="n">cmdset</span><span class="o">.</span><span class="n">make_unique</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
<span class="c1"># retrieve all available commands and database / file-help topics.</span>
<span class="c1"># also check the &#39;cmd:&#39; lock here</span>
<span class="n">cmd_help_topics</span> <span class="o">=</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</span> <span class="k">if</span> <span class="n">cmd</span> <span class="ow">and</span> <span class="n">cmd</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="s1">&#39;cmd&#39;</span><span class="p">)]</span>
<span class="n">cmd_help_topics</span> <span class="o">=</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</span> <span class="k">if</span> <span class="n">cmd</span> <span class="ow">and</span> <span class="n">cmd</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;cmd&quot;</span><span class="p">)]</span>
<span class="c1"># get all file-based help entries, checking perms</span>
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">topic</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">topic</span>
<span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">FILE_HELP_ENTRIES</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="p">}</span>
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="n">topic</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">topic</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">FILE_HELP_ENTRIES</span><span class="o">.</span><span class="n">all</span><span class="p">()}</span>
<span class="c1"># get db-based help entries, checking perms</span>
<span class="n">db_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">topic</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">topic</span>
<span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">HelpEntry</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="p">}</span>
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s1">&#39;list&#39;</span><span class="p">:</span>
<span class="n">db_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="n">topic</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span> <span class="n">topic</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">HelpEntry</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()}</span>
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;list&quot;</span><span class="p">:</span>
<span class="c1"># check the view lock for all help entries/commands and determine key</span>
<span class="n">cmd_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">&quot;auto_help_display_key&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</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">cmd_help_topics</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">)}</span>
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">&quot;auto_help_display_key&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</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">cmd_help_topics</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">db_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">file_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)}</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">file_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_list_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
<span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># query - check the read lock on entries</span>
<span class="n">cmd_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">&quot;auto_help_display_key&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</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">cmd_help_topics</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">)}</span>
<span class="n">cmd</span><span class="o">.</span><span class="n">auto_help_display_key</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">&quot;auto_help_display_key&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</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">cmd_help_topics</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">db_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">file_help_topics</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">file_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)}</span>
<span class="n">key</span><span class="p">:</span> <span class="n">entry</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">entry</span> <span class="ow">in</span> <span class="n">file_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">can_read_topic</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">caller</span><span class="p">)</span>
<span class="p">}</span>
<span class="k">return</span> <span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span></div>
@ -494,9 +502,7 @@
<span class="c1"># return of this will either be a HelpCategory, a Command or a</span>
<span class="c1"># HelpEntry/FileHelpEntry.</span>
<span class="n">matches</span><span class="p">,</span> <span class="n">suggestions</span> <span class="o">=</span> <span class="n">help_search_with_index</span><span class="p">(</span>
<span class="n">match_query</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span>
<span class="n">suggestion_maxnum</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">suggestion_maxnum</span><span class="p">,</span>
<span class="n">fields</span><span class="o">=</span><span class="n">search_fields</span>
<span class="n">match_query</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span> <span class="n">suggestion_maxnum</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">suggestion_maxnum</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="n">search_fields</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">matches</span><span class="p">:</span>
<span class="n">match</span> <span class="o">=</span> <span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
@ -520,8 +526,9 @@
<span class="c1"># parse the query</span>
<span class="k">if</span> <span class="bp">self</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">subtopics</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subtopic_separator_char</span><span class="p">)]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">subtopics</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">subtopic_separator_char</span><span class="p">)</span>
<span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">topic</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">subtopics</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">topic</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
@ -547,7 +554,6 @@
<span class="k">return</span> <span class="n">key</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
<span class="k">return</span> <span class="n">key</span></div>
<div class="viewcode-block" id="CmdHelp.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.help.html#evennia.commands.default.help.CmdHelp.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Run the dynamic help entry creator.</span>
@ -560,8 +566,9 @@
<span class="c1"># list all available help entries, grouped by category. We want to</span>
<span class="c1"># build dictionaries {category: [topic, topic, ...], ...}</span>
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> \
<span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;list&#39;</span><span class="p">)</span>
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span>
<span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;list&quot;</span>
<span class="p">)</span>
<span class="c1"># db-topics override file-based ones</span>
<span class="n">file_db_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">db_help_topics</span><span class="p">}</span>
@ -580,21 +587,21 @@
<span class="n">file_db_help_by_category</span><span class="p">[</span><span class="n">entry</span><span class="o">.</span><span class="n">help_category</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
<span class="c1"># generate the index and display</span>
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</span><span class="p">(</span><span class="n">cmd_help_by_category</span><span class="p">,</span>
<span class="n">file_db_help_by_category</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span><span class="p">)</span>
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</span><span class="p">(</span>
<span class="n">cmd_help_by_category</span><span class="p">,</span> <span class="n">file_db_help_by_category</span><span class="p">,</span> <span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># search for a specific entry. We need to check for &#39;read&#39; access here before</span>
<span class="c1"># building the set of possibilities.</span>
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> \
<span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;query&#39;</span><span class="p">)</span>
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span>
<span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;query&quot;</span>
<span class="p">)</span>
<span class="c1"># get a collection of all keys + aliases to be able to strip prefixes like @</span>
<span class="n">key_and_aliases</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span>
<span class="n">chain</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">_keyaliases</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmd_help_topics</span><span class="o">.</span><span class="n">values</span><span class="p">())))</span>
<span class="n">key_and_aliases</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">chain</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">cmd</span><span class="o">.</span><span class="n">_keyaliases</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmd_help_topics</span><span class="o">.</span><span class="n">values</span><span class="p">())))</span>
<span class="c1"># db-help topics takes priority over file-help</span>
<span class="n">file_db_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">db_help_topics</span><span class="p">}</span>
@ -603,8 +610,9 @@
<span class="n">all_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_db_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">cmd_help_topics</span><span class="p">}</span>
<span class="c1"># get all categories</span>
<span class="n">all_categories</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span>
<span class="n">HelpCategory</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
<span class="n">all_categories</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">set</span><span class="p">(</span><span class="n">HelpCategory</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="p">)</span>
<span class="c1"># all available help options - will be searched in order. We also check # the</span>
<span class="c1"># read-permission here.</span>
@ -628,23 +636,26 @@
<span class="k">for</span> <span class="n">match_query</span> <span class="ow">in</span> <span class="p">[</span><span class="n">query</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">query</span><span class="si">}</span><span class="s2">*&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;*</span><span class="si">{</span><span class="n">query</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">]:</span>
<span class="n">_</span><span class="p">,</span> <span class="n">suggestions</span> <span class="o">=</span> <span class="n">help_search_with_index</span><span class="p">(</span>
<span class="n">match_query</span><span class="p">,</span> <span class="n">entries</span><span class="p">,</span>
<span class="n">match_query</span><span class="p">,</span>
<span class="n">entries</span><span class="p">,</span>
<span class="n">suggestion_maxnum</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">suggestion_maxnum</span><span class="p">,</span>
<span class="n">fields</span><span class="o">=</span><span class="n">search_fields</span>
<span class="n">fields</span><span class="o">=</span><span class="n">search_fields</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">suggestions</span><span class="p">:</span>
<span class="n">help_text</span> <span class="o">+=</span> <span class="p">(</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">... But matches where found within the help &quot;</span>
<span class="s2">&quot;texts of the suggestions below.&quot;</span><span class="p">)</span>
<span class="n">suggestions</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">strip_cmd_prefix</span><span class="p">(</span><span class="n">sugg</span><span class="p">,</span> <span class="n">key_and_aliases</span><span class="p">)</span>
<span class="k">for</span> <span class="n">sugg</span> <span class="ow">in</span> <span class="n">suggestions</span><span class="p">]</span>
<span class="s2">&quot;texts of the suggestions below.&quot;</span>
<span class="p">)</span>
<span class="n">suggestions</span> <span class="o">=</span> <span class="p">[</span>
<span class="bp">self</span><span class="o">.</span><span class="n">strip_cmd_prefix</span><span class="p">(</span><span class="n">sugg</span><span class="p">,</span> <span class="n">key_and_aliases</span><span class="p">)</span> <span class="k">for</span> <span class="n">sugg</span> <span class="ow">in</span> <span class="n">suggestions</span>
<span class="p">]</span>
<span class="k">break</span>
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_entry</span><span class="p">(</span>
<span class="n">topic</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="c1"># this will give a no-match style title</span>
<span class="n">help_text</span><span class="o">=</span><span class="n">help_text</span><span class="p">,</span>
<span class="n">suggested</span><span class="o">=</span><span class="n">suggestions</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
@ -654,14 +665,20 @@
<span class="c1"># no subtopics for categories - these are just lists of topics</span>
<span class="n">category</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">key</span>
<span class="n">category_lower</span> <span class="o">=</span> <span class="n">category</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">cmds_in_category</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmd_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">category_lower</span> <span class="o">==</span> <span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span><span class="p">]</span>
<span class="n">topics_in_category</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">file_db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">category_lower</span> <span class="o">==</span> <span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">]</span>
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</span><span class="p">({</span><span class="n">category</span><span class="p">:</span> <span class="n">cmds_in_category</span><span class="p">},</span>
<span class="p">{</span><span class="n">category</span><span class="p">:</span> <span class="n">topics_in_category</span><span class="p">},</span>
<span class="n">title_lone_category</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span><span class="p">)</span>
<span class="n">cmds_in_category</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">key</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmd_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">category_lower</span> <span class="o">==</span> <span class="n">cmd</span><span class="o">.</span><span class="n">help_category</span>
<span class="p">]</span>
<span class="n">topics_in_category</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">key</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">file_db_help_topics</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="n">category_lower</span> <span class="o">==</span> <span class="n">topic</span><span class="o">.</span><span class="n">help_category</span>
<span class="p">]</span>
<span class="n">output</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_help_index</span><span class="p">(</span>
<span class="p">{</span><span class="n">category</span><span class="p">:</span> <span class="n">cmds_in_category</span><span class="p">},</span>
<span class="p">{</span><span class="n">category</span><span class="p">:</span> <span class="n">topics_in_category</span><span class="p">},</span>
<span class="n">title_lone_category</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
<span class="k">return</span>
@ -716,7 +733,7 @@
<span class="n">topic</span><span class="o">=</span><span class="n">topic</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;No help entry found for &#39;</span><span class="si">{</span><span class="n">checked_topic</span><span class="si">}</span><span class="s2">&#39;&quot;</span><span class="p">,</span>
<span class="n">subtopics</span><span class="o">=</span><span class="n">subtopic_index</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">output</span><span class="p">)</span>
<span class="k">return</span>
@ -744,7 +761,7 @@
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="n">subtopics</span><span class="o">=</span><span class="n">subtopic_index</span><span class="p">,</span>
<span class="n">suggested</span><span class="o">=</span><span class="n">suggested</span><span class="p">,</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span>
<span class="n">click_topics</span><span class="o">=</span><span class="n">clickable_topics</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg_help</span><span class="p">(</span><span class="n">output</span><span class="p">)</span></div></div>
@ -871,15 +888,17 @@
<span class="c1"># check if we have an old entry with the same name</span>
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> \
<span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;query&#39;</span><span class="p">)</span>
<span class="n">cmd_help_topics</span><span class="p">,</span> <span class="n">db_help_topics</span><span class="p">,</span> <span class="n">file_help_topics</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">collect_topics</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s2">&quot;query&quot;</span>
<span class="p">)</span>
<span class="c1"># db-help topics takes priority over file-help</span>
<span class="n">file_db_help_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">db_help_topics</span><span class="p">}</span>
<span class="c1"># commands take priority over the other types</span>
<span class="n">all_topics</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="n">file_db_help_topics</span><span class="p">,</span> <span class="o">**</span><span class="n">cmd_help_topics</span><span class="p">}</span>
<span class="c1"># get all categories</span>
<span class="n">all_categories</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span>
<span class="n">HelpCategory</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="o">.</span><span class="n">values</span><span class="p">()))</span>
<span class="n">all_categories</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">set</span><span class="p">(</span><span class="n">HelpCategory</span><span class="p">(</span><span class="n">topic</span><span class="o">.</span><span class="n">help_category</span><span class="p">)</span> <span class="k">for</span> <span class="n">topic</span> <span class="ow">in</span> <span class="n">all_topics</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
<span class="p">)</span>
<span class="c1"># all available help options - will be searched in order. We also check # the</span>
<span class="c1"># read-permission here.</span>
<span class="n">entries</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">all_topics</span><span class="o">.</span><span class="n">values</span><span class="p">())</span> <span class="o">+</span> <span class="n">all_categories</span>
@ -895,29 +914,35 @@
<span class="k">if</span> <span class="n">match</span><span class="p">:</span>
<span class="n">warning</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="n">HelpCategory</span><span class="p">):</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the name of &quot;</span>
<span class="s2">&quot;help-category &#39;</span><span class="si">{match.key}</span><span class="s2">&#39;. If you continue, your help entry will &quot;</span>
<span class="s2">&quot;take precedence and the category (or part of its name) *may* not &quot;</span>
<span class="s2">&quot;be usable for grouping help entries anymore.&quot;</span><span class="p">)</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the name of &quot;</span>
<span class="s2">&quot;help-category &#39;</span><span class="si">{match.key}</span><span class="s2">&#39;. If you continue, your help entry will &quot;</span>
<span class="s2">&quot;take precedence and the category (or part of its name) *may* not &quot;</span>
<span class="s2">&quot;be usable for grouping help entries anymore.&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="s2">&quot;evennia.commands.command.Command&quot;</span><span class="p">):</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the key/alias of &quot;</span>
<span class="s2">&quot;Command &#39;</span><span class="si">{match.key}</span><span class="s2">&#39;. Command-help take precedence over other &quot;</span>
<span class="s2">&quot;help entries so your help *may* be impossible to reach for those &quot;</span>
<span class="s2">&quot;with access to that command.&quot;</span><span class="p">)</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the key/alias of &quot;</span>
<span class="s2">&quot;Command &#39;</span><span class="si">{match.key}</span><span class="s2">&#39;. Command-help take precedence over other &quot;</span>
<span class="s2">&quot;help entries so your help *may* be impossible to reach for those &quot;</span>
<span class="s2">&quot;with access to that command.&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="s2">&quot;evennia.help.filehelp.FileHelpEntry&quot;</span><span class="p">):</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the name/alias of the &quot;</span>
<span class="sa">f</span><span class="s2">&quot;file-based help topic &#39;</span><span class="si">{</span><span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39;. File-help entries cannot be &quot;</span>
<span class="s2">&quot;modified from in-game (they are files on-disk). If you continue, &quot;</span>
<span class="s2">&quot;your help entry may shadow the file-based one&#39;s name partly or &quot;</span>
<span class="s2">&quot;completely.&quot;</span><span class="p">)</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the name/alias of the &quot;</span>
<span class="sa">f</span><span class="s2">&quot;file-based help topic &#39;</span><span class="si">{</span><span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39;. File-help entries cannot be &quot;</span>
<span class="s2">&quot;modified from in-game (they are files on-disk). If you continue, &quot;</span>
<span class="s2">&quot;your help entry may shadow the file-based one&#39;s name partly or &quot;</span>
<span class="s2">&quot;completely.&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">warning</span><span class="p">:</span>
<span class="c1"># show a warning for a clashing help-entry type. Even if user accepts this</span>
<span class="c1"># we don&#39;t break here since we may need to show warnings for other inputs.</span>
<span class="c1"># We don&#39;t count this as an old-entry hit because we can&#39;t edit these</span>
<span class="c1"># types of entries.</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;|rWarning:</span><span class="se">\n</span><span class="s2">|r</span><span class="si">{</span><span class="n">warning</span><span class="si">}</span><span class="s2">|n&quot;</span><span class="p">)</span>
<span class="n">repl</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="s2">&quot;|wDo you still want to continue? Y/[N]?|n&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">repl</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">,</span> <span class="s1">&#39;yes&#39;</span><span class="p">):</span>
<span class="n">repl</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="s2">&quot;|wDo you still want to continue? Y/[N]?|n&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">repl</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;y&quot;</span><span class="p">,</span> <span class="s2">&quot;yes&quot;</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;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
@ -939,7 +964,11 @@
<span class="n">helpentry</span> <span class="o">=</span> <span class="n">old_entry</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">helpentry</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_help_entry</span><span class="p">(</span>
<span class="n">topicstr</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="n">topicstr</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span>
<span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">_editing_help</span> <span class="o">=</span> <span class="n">helpentry</span>
@ -1018,9 +1047,7 @@
<span class="p">)</span>
<span class="k">return</span>
<span class="k">else</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="sa">f</span><span class="s2">&quot;Error when creating topic &#39;</span><span class="si">{</span><span class="n">topicstr</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">aliastxt</span><span class="si">}</span><span class="s2">! Contact an admin.&quot;</span>
<span class="p">)</span></div></div>
<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;Error when creating topic &#39;</span><span class="si">{</span><span class="n">topicstr</span><span class="si">}</span><span class="s2">&#39;</span><span class="si">{</span><span class="n">aliastxt</span><span class="si">}</span><span class="s2">! Contact an admin.&quot;</span><span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>

View file

@ -635,13 +635,15 @@
<span class="k">if</span> <span class="n">delmode</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You cannot remove a core Evennia service (named &#39;Evennia*&#39;).&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;|RYou seem to be shutting down a core Evennia &quot;</span>
<span class="s2">&quot;service (named &#39;Evennia*&#39;).</span><span class="se">\n</span><span class="s2">Note that stopping &quot;</span>
<span class="s2">&quot;some TCP port services will *not* disconnect users &quot;</span>
<span class="s2">&quot;*already* connected on those ports, but *may* &quot;</span>
<span class="s2">&quot;instead cause spurious errors for them.</span><span class="se">\n</span><span class="s2">To safely &quot;</span>
<span class="s2">&quot;and permanently remove ports, change settings file &quot;</span>
<span class="s2">&quot;and restart the server.|n</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;|RYou seem to be shutting down a core Evennia &quot;</span>
<span class="s2">&quot;service (named &#39;Evennia*&#39;).</span><span class="se">\n</span><span class="s2">Note that stopping &quot;</span>
<span class="s2">&quot;some TCP port services will *not* disconnect users &quot;</span>
<span class="s2">&quot;*already* connected on those ports, but *may* &quot;</span>
<span class="s2">&quot;instead cause spurious errors for them.</span><span class="se">\n</span><span class="s2">To safely &quot;</span>
<span class="s2">&quot;and permanently remove ports, change settings file &quot;</span>
<span class="s2">&quot;and restart the server.|n</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">if</span> <span class="n">delmode</span><span class="p">:</span>
@ -653,9 +655,11 @@
<span class="k">try</span><span class="p">:</span>
<span class="n">service</span><span class="o">.</span><span class="n">stopService</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|rErrors were reported when stopping this service</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;If there are remaining problems, try reloading &quot;</span>
<span class="s2">&quot;or rebooting the server.&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;|rErrors were reported when stopping this service</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;If there are remaining problems, try reloading &quot;</span>
<span class="s2">&quot;or rebooting the server.&quot;</span>
<span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;|g... Stopped service &#39;</span><span class="si">%s</span><span class="s2">&#39;.|n&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span>
@ -668,9 +672,11 @@
<span class="k">try</span><span class="p">:</span>
<span class="n">service</span><span class="o">.</span><span class="n">startService</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|rErrors were reported when starting this service</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;If there are remaining problems, try reloading the server, changing the &quot;</span>
<span class="s2">&quot;settings if it&#39;s a non-standard service.|n&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;|rErrors were reported when starting this service</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;If there are remaining problems, try reloading the server, changing the &quot;</span>
<span class="s2">&quot;settings if it&#39;s a non-standard service.|n&quot;</span>
<span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;|gService started.|n&quot;</span><span class="p">)</span></div></div>
@ -1015,8 +1021,8 @@
<div class="viewcode-block" id="CmdTasks.coll_date_func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.system.html#evennia.commands.default.system.CmdTasks.coll_date_func">[docs]</a> <span class="nd">@staticmethod</span>
<span class="k">def</span> <span class="nf">coll_date_func</span><span class="p">(</span><span class="n">task</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Replace regex characters in date string and collect deferred function name.&quot;&quot;&quot;</span>
<span class="n">t_comp_date</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s1">&#39;-&#39;</span><span class="p">,</span> <span class="s1">&#39;/&#39;</span><span class="p">)</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="n">t_comp_date</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">&quot;-&quot;</span><span class="p">,</span> <span class="s2">&quot;/&quot;</span><span class="p">)</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">1</span><span class="p">])</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="n">t_func_mem_ref</span> <span class="o">=</span> <span class="n">t_func_name</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">t_func_name</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">4</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">return</span> <span class="n">t_comp_date</span><span class="p">,</span> <span class="n">t_func_mem_ref</span></div>
@ -1036,19 +1042,19 @@
<span class="c1"># verify manipulating the correct task</span>
<span class="n">task_args</span> <span class="o">=</span> <span class="n">_TASK_HANDLER</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">task_id</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">task_args</span><span class="p">:</span> <span class="c1"># check if the task is still active</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s1">&#39;Task completed while waiting for input.&#39;</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;Task completed while waiting for input.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># make certain a task with matching IDs has not been created</span>
<span class="n">t_comp_date</span><span class="p">,</span> <span class="n">t_func_mem_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">coll_date_func</span><span class="p">(</span><span class="n">task_args</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_comp_date</span> <span class="o">!=</span> <span class="n">t_comp_date</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">t_func_mem_ref</span> <span class="o">!=</span> <span class="n">t_func_mem_ref</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="s1">&#39;Task completed while waiting for input.&#39;</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;Task completed while waiting for input.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># Do the action requested by command caller</span>
<span class="n">action_return</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">task_action</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="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">action_request</span><span class="si">}</span><span class="s1"> request completed.&#39;</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="sa">f</span><span class="s1">&#39;The task function </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">action_request</span><span class="si">}</span><span class="s1"> returned: </span><span class="si">{</span><span class="n">action_return</span><span class="si">}</span><span class="s1">&#39;</span><span class="p">)</span></div>
<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;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">action_request</span><span class="si">}</span><span class="s2"> request completed.&quot;</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="sa">f</span><span class="s2">&quot;The task function </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">action_request</span><span class="si">}</span><span class="s2"> returned: </span><span class="si">{</span><span class="n">action_return</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdTasks.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.system.html#evennia.commands.default.system.CmdTasks.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># get a reference of the global task handler</span>
@ -1057,9 +1063,9 @@
<span class="kn">from</span> <span class="nn">evennia.scripts.taskhandler</span> <span class="kn">import</span> <span class="n">TASK_HANDLER</span> <span class="k">as</span> <span class="n">_TASK_HANDLER</span>
<span class="c1"># handle no tasks active.</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_TASK_HANDLER</span><span class="o">.</span><span class="n">tasks</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="s1">&#39;There are no active tasks.&#39;</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;There are no active tasks.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="bp">self</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">msg</span><span class="p">(</span><span class="s1">&#39;Likely the task has completed and been removed.&#39;</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;Likely the task has completed and been removed.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># handle caller&#39;s request to manipulate a task(s)</span>
@ -1075,8 +1081,8 @@
<span class="c1"># if the argument is a task id, proccess the action on a single task</span>
<span class="k">if</span> <span class="n">arg_is_id</span><span class="p">:</span>
<span class="n">err_arg_msg</span> <span class="o">=</span> <span class="s1">&#39;Switch and task ID are required when manipulating a task.&#39;</span>
<span class="n">task_comp_msg</span> <span class="o">=</span> <span class="s1">&#39;Task completed while processing request.&#39;</span>
<span class="n">err_arg_msg</span> <span class="o">=</span> <span class="s2">&quot;Switch and task ID are required when manipulating a task.&quot;</span>
<span class="n">task_comp_msg</span> <span class="o">=</span> <span class="s2">&quot;Task completed while processing request.&quot;</span>
<span class="c1"># handle missing arguments or switches</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
@ -1089,14 +1095,16 @@
<span class="c1"># handle task no longer existing</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">task</span><span class="o">.</span><span class="n">exists</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="sa">f</span><span class="s1">&#39;Task </span><span class="si">{</span><span class="n">task_id</span><span class="si">}</span><span class="s1"> does not exist.&#39;</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="sa">f</span><span class="s2">&quot;Task </span><span class="si">{</span><span class="n">task_id</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># get a reference of the function caller requested</span>
<span class="n">switch_action</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">task</span><span class="p">,</span> <span class="n">action_request</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">switch_action</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="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s1">, is not an acceptable task action or &#39;</span> \
<span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">task_comp_msg</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2">, is not an acceptable task action or &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">task_comp_msg</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="c1"># verify manipulating the correct task</span>
<span class="k">if</span> <span class="n">task_id</span> <span class="ow">in</span> <span class="n">_TASK_HANDLER</span><span class="o">.</span><span class="n">tasks</span><span class="p">:</span>
@ -1106,25 +1114,29 @@
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">t_comp_date</span><span class="p">,</span> <span class="n">t_func_mem_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">coll_date_func</span><span class="p">(</span><span class="n">task_args</span><span class="p">)</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task_args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task_args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</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="n">t_func_name</span> <span class="o">=</span> <span class="n">t_func_name</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">t_func_name</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">2</span> <span class="k">else</span> <span class="kc">None</span>
<span class="k">if</span> <span class="n">task</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span> <span class="c1"># make certain the task has not been called yet.</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">action_request</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()</span><span class="si">}</span><span class="s1"> task </span><span class="si">{</span><span class="n">task_id</span><span class="si">}</span><span class="s1"> with completion date &#39;</span>
<span class="sa">f</span><span class="s1">&#39;</span><span class="si">{</span><span class="n">t_comp_date</span><span class="si">}</span><span class="s1"> (</span><span class="si">{</span><span class="n">t_func_name</span><span class="si">}</span><span class="s1">) </span><span class="se">{{</span><span class="s1">options</span><span class="se">}}</span><span class="s1">?&#39;</span><span class="p">)</span>
<span class="n">no_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;No </span><span class="si">{</span><span class="n">action_request</span><span class="si">}</span><span class="s1"> processed.&#39;</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">action_request</span><span class="o">.</span><span class="n">capitalize</span><span class="p">()</span><span class="si">}</span><span class="s2"> task </span><span class="si">{</span><span class="n">task_id</span><span class="si">}</span><span class="s2"> with completion date &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">t_comp_date</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">t_func_name</span><span class="si">}</span><span class="s2">) </span><span class="se">{{</span><span class="s2">options</span><span class="se">}}</span><span class="s2">?&quot;</span>
<span class="p">)</span>
<span class="n">no_msg</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;No </span><span class="si">{</span><span class="n">action_request</span><span class="si">}</span><span class="s2"> processed.&quot;</span>
<span class="c1"># record variables for use in do_task_action method</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_id</span> <span class="o">=</span> <span class="n">task_id</span>
<span class="bp">self</span><span class="o">.</span><span class="n">t_comp_date</span> <span class="o">=</span> <span class="n">t_comp_date</span>
<span class="bp">self</span><span class="o">.</span><span class="n">t_func_mem_ref</span> <span class="o">=</span> <span class="n">t_func_mem_ref</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_action</span> <span class="o">=</span> <span class="n">switch_action</span>
<span class="bp">self</span><span class="o">.</span><span class="n">action_request</span> <span class="o">=</span> <span class="n">action_request</span>
<span class="n">ask_yes_no</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span>
<span class="n">prompt</span><span class="o">=</span><span class="n">prompt</span><span class="p">,</span>
<span class="n">yes_action</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">do_task_action</span><span class="p">,</span>
<span class="n">no_action</span><span class="o">=</span><span class="n">no_msg</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="s2">&quot;Y&quot;</span><span class="p">,</span>
<span class="n">allow_abort</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">ask_yes_no</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span>
<span class="n">prompt</span><span class="o">=</span><span class="n">prompt</span><span class="p">,</span>
<span class="n">yes_action</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">do_task_action</span><span class="p">,</span>
<span class="n">no_action</span><span class="o">=</span><span class="n">no_msg</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="s2">&quot;Y&quot;</span><span class="p">,</span>
<span class="n">allow_abort</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">else</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="n">task_comp_msg</span><span class="p">)</span>
@ -1144,7 +1156,7 @@
<span class="c1"># call requested action on all tasks with the function name</span>
<span class="k">for</span> <span class="n">task_id</span><span class="p">,</span> <span class="n">task_args</span> <span class="ow">in</span> <span class="n">current_tasks</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task_args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task_args</span><span class="p">[</span><span class="mi">1</span><span class="p">])</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="n">t_func_name</span> <span class="o">=</span> <span class="n">t_func_name</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">t_func_name</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">2</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># skip this task if it is not for the function desired</span>
<span class="k">if</span> <span class="n">arg_func_name</span> <span class="o">!=</span> <span class="n">t_func_name</span><span class="p">:</span>
@ -1154,33 +1166,39 @@
<span class="n">switch_action</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">task</span><span class="p">,</span> <span class="n">action_request</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="n">switch_action</span><span class="p">:</span>
<span class="n">action_return</span> <span class="o">=</span> <span class="n">switch_action</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="sa">f</span><span class="s1">&#39;Task action </span><span class="si">{</span><span class="n">action_request</span><span class="si">}</span><span class="s1"> completed on task ID </span><span class="si">{</span><span class="n">task_id</span><span class="si">}</span><span class="s1">.&#39;</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="sa">f</span><span class="s1">&#39;The task function </span><span class="si">{</span><span class="n">action_request</span><span class="si">}</span><span class="s1"> returned: </span><span class="si">{</span><span class="n">action_return</span><span class="si">}</span><span class="s1">&#39;</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="sa">f</span><span class="s2">&quot;Task action </span><span class="si">{</span><span class="n">action_request</span><span class="si">}</span><span class="s2"> completed on task ID </span><span class="si">{</span><span class="n">task_id</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">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The task function </span><span class="si">{</span><span class="n">action_request</span><span class="si">}</span><span class="s2"> returned: </span><span class="si">{</span><span class="n">action_return</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="c1"># provide a message if not tasks of the function name was found</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">name_match_found</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="sa">f</span><span class="s1">&#39;No tasks deferring function name </span><span class="si">{</span><span class="n">arg_func_name</span><span class="si">}</span><span class="s1"> found.&#39;</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="sa">f</span><span class="s2">&quot;No tasks deferring function name </span><span class="si">{</span><span class="n">arg_func_name</span><span class="si">}</span><span class="s2"> found.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="c1"># check if an maleformed request was created</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</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="s1">&#39;Task command misformed.&#39;</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="s1">&#39;Proper format tasks[/switch] [function name or task id]&#39;</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;Task command misformed.&quot;</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;Proper format tasks[/switch] [function name or task id]&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># No task manupilation requested, build a table of tasks and display it</span>
<span class="c1"># get the width of screen in characters</span>
<span class="n">width</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">()</span>
<span class="c1"># create table header and list to hold tasks data and actions</span>
<span class="n">tasks_header</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;Task ID&#39;</span><span class="p">,</span> <span class="s1">&#39;Completion Date&#39;</span><span class="p">,</span> <span class="s1">&#39;Function&#39;</span><span class="p">,</span> <span class="s1">&#39;Arguments&#39;</span><span class="p">,</span> <span class="s1">&#39;KWARGS&#39;</span><span class="p">,</span>
<span class="s1">&#39;persistent&#39;</span><span class="p">)</span>
<span class="n">tasks_header</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;Task ID&quot;</span><span class="p">,</span>
<span class="s2">&quot;Completion Date&quot;</span><span class="p">,</span>
<span class="s2">&quot;Function&quot;</span><span class="p">,</span>
<span class="s2">&quot;Arguments&quot;</span><span class="p">,</span>
<span class="s2">&quot;KWARGS&quot;</span><span class="p">,</span>
<span class="s2">&quot;persistent&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># empty list of lists, the size of the header</span>
<span class="n">tasks_list</span> <span class="o">=</span> <span class="p">[</span><span class="nb">list</span><span class="p">()</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">tasks_header</span><span class="p">))]</span>
<span class="k">for</span> <span class="n">task_id</span><span class="p">,</span> <span class="n">task</span> <span class="ow">in</span> <span class="n">_TASK_HANDLER</span><span class="o">.</span><span class="n">tasks</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="c1"># collect data from the task</span>
<span class="n">t_comp_date</span><span class="p">,</span> <span class="n">t_func_mem_ref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">coll_date_func</span><span class="p">(</span><span class="n">task</span><span class="p">)</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">)</span>
<span class="n">t_func_name</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">1</span><span class="p">])</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="n">t_func_name</span> <span class="o">=</span> <span class="n">t_func_name</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">t_func_name</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="mi">2</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">t_args</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="n">t_kwargs</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">task</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
@ -1190,9 +1208,10 @@
<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="n">tasks_header</span><span class="p">)):</span>
<span class="n">tasks_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">task_data</span><span class="p">[</span><span class="n">i</span><span class="p">])</span>
<span class="c1"># create and display the table</span>
<span class="n">tasks_table</span> <span class="o">=</span> <span class="n">EvTable</span><span class="p">(</span><span class="o">*</span><span class="n">tasks_header</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">tasks_list</span><span class="p">,</span> <span class="n">maxwidth</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">border</span><span class="o">=</span><span class="s1">&#39;cells&#39;</span><span class="p">,</span>
<span class="n">align</span><span class="o">=</span><span class="s1">&#39;center&#39;</span><span class="p">)</span>
<span class="n">actions</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s1">&#39;/</span><span class="si">{</span><span class="n">switch</span><span class="si">}</span><span class="s1">&#39;</span> <span class="k">for</span> <span class="n">switch</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span><span class="p">)</span>
<span class="n">tasks_table</span> <span class="o">=</span> <span class="n">EvTable</span><span class="p">(</span>
<span class="o">*</span><span class="n">tasks_header</span><span class="p">,</span> <span class="n">table</span><span class="o">=</span><span class="n">tasks_list</span><span class="p">,</span> <span class="n">maxwidth</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">border</span><span class="o">=</span><span class="s2">&quot;cells&quot;</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="s2">&quot;center&quot;</span>
<span class="p">)</span>
<span class="n">actions</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;/</span><span class="si">{</span><span class="n">switch</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">switch</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switch_options</span><span class="p">)</span>
<span class="n">helptxt</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Actions: </span><span class="si">{</span><span class="n">iter_to_str</span><span class="p">(</span><span class="n">actions</span><span class="p">)</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tasks_table</span><span class="p">)</span> <span class="o">+</span> <span class="n">helptxt</span><span class="p">)</span></div></div>
</pre></div>

File diff suppressed because it is too large Load diff

View file

@ -243,13 +243,17 @@
<span class="n">non_normalized_username</span> <span class="o">=</span> <span class="n">username</span>
<span class="n">username</span> <span class="o">=</span> <span class="n">Account</span><span class="o">.</span><span class="n">normalize_username</span><span class="p">(</span><span class="n">username</span><span class="p">)</span>
<span class="k">if</span> <span class="n">non_normalized_username</span> <span class="o">!=</span> <span class="n">username</span><span class="p">:</span>
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Note: your username was normalized to strip spaces and remove characters &quot;</span>
<span class="s2">&quot;that could be visually confusing.&quot;</span><span class="p">)</span>
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;Note: your username was normalized to strip spaces and remove characters &quot;</span>
<span class="s2">&quot;that could be visually confusing.&quot;</span>
<span class="p">)</span>
<span class="c1"># have the user verify their new account was what they intended</span>
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;You want to create an account &#39;</span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s2">&#39; with password &#39;</span><span class="si">{</span><span class="n">password</span><span class="si">}</span><span class="s2">&#39;.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Is this what you intended? [Y]/N?&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;no&#39;</span><span class="p">):</span>
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;You want to create an account &#39;</span><span class="si">{</span><span class="n">username</span><span class="si">}</span><span class="s2">&#39; with password &#39;</span><span class="si">{</span><span class="n">password</span><span class="si">}</span><span class="s2">&#39;.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Is this what you intended? [Y]/N?&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;no&quot;</span><span class="p">):</span>
<span class="n">session</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Aborted. If your user name contains spaces, surround it by quotes.&quot;</span><span class="p">)</span>
<span class="k">return</span>
@ -386,7 +390,7 @@
<span class="sd"> If you don&#39;t submit an encoding, the current encoding will be displayed</span>
<span class="sd"> instead.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;encoding&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot;encode&quot;</span>

View file

@ -149,7 +149,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_log_file</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_log_file</span> <span class="o">=</span> <span class="bp">self</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="s2">&quot;log_file&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">log_file</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">channelname</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()))</span>
<span class="s2">&quot;log_file&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">log_file</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">channelname</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
<span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_log_file</span></div>
<div class="viewcode-block" id="DefaultChannel.set_log_filename"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.set_log_filename">[docs]</a> <span class="k">def</span> <span class="nf">set_log_filename</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">filename</span><span class="p">):</span>
@ -497,8 +498,13 @@
<span class="c1"># needing to use the `channel` command explicitly.</span>
<span class="n">msg_nick_pattern</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel_msg_nick_pattern</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">alias</span><span class="o">=</span><span class="n">alias</span><span class="p">)</span>
<span class="n">msg_nick_replacement</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel_msg_nick_replacement</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">channelname</span><span class="o">=</span><span class="n">chan_key</span><span class="p">)</span>
<span class="n">user</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">msg_nick_pattern</span><span class="p">,</span> <span class="n">msg_nick_replacement</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;inputline&quot;</span><span class="p">,</span>
<span class="n">pattern_is_regex</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">user</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="n">msg_nick_pattern</span><span class="p">,</span>
<span class="n">msg_nick_replacement</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="s2">&quot;inputline&quot;</span><span class="p">,</span>
<span class="n">pattern_is_regex</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">chan_key</span> <span class="o">!=</span> <span class="n">alias</span><span class="p">:</span>
<span class="c1"># this allows for using the alias for general channel lookups</span>
@ -588,7 +594,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">bypass_mute</span><span class="p">:</span>
<span class="n">receivers</span> <span class="o">=</span> <span class="p">[</span><span class="n">receiver</span> <span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">receivers</span> <span class="k">if</span> <span class="n">receiver</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mutelist</span><span class="p">]</span>
<span class="n">send_kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;senders&#39;</span><span class="p">:</span> <span class="n">senders</span><span class="p">,</span> <span class="s1">&#39;bypass_mute&#39;</span><span class="p">:</span> <span class="n">bypass_mute</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">}</span>
<span class="n">send_kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;senders&quot;</span><span class="p">:</span> <span class="n">senders</span><span class="p">,</span> <span class="s2">&quot;bypass_mute&quot;</span><span class="p">:</span> <span class="n">bypass_mute</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">}</span>
<span class="c1"># pre-send hook</span>
<span class="n">message</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_pre_msg</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="o">**</span><span class="n">send_kwargs</span><span class="p">)</span>
@ -868,27 +874,37 @@
<span class="c1"># TODO Evennia 1.0+ removed hooks. Remove in 1.1.</span>
<div class="viewcode-block" id="DefaultChannel.message_transform"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.message_transform">[docs]</a> <span class="k">def</span> <span class="nf">message_transform</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="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Channel.message_transform is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span><span class="p">)</span></div>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="s2">&quot;Channel.message_transform is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultChannel.distribute_message"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.distribute_message">[docs]</a> <span class="k">def</span> <span class="nf">distribute_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msgobj</span><span class="p">,</span> <span class="n">online</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">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Channel.distribute_message is no longer used in 1.0+.&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="DefaultChannel.format_senders"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.format_senders">[docs]</a> <span class="k">def</span> <span class="nf">format_senders</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">senders</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Channel.format_senders is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span><span class="p">)</span></div>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="s2">&quot;Channel.format_senders is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultChannel.pose_transform"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.pose_transform">[docs]</a> <span class="k">def</span> <span class="nf">pose_transform</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msgobj</span><span class="p">,</span> <span class="n">sender_string</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Channel.pose_transform is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span><span class="p">)</span></div>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="s2">&quot;Channel.pose_transform is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultChannel.format_external"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.format_external">[docs]</a> <span class="k">def</span> <span class="nf">format_external</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msgobj</span><span class="p">,</span> <span class="n">senders</span><span class="p">,</span> <span class="n">emit</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">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Channel.format_external is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span><span class="p">)</span></div>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="s2">&quot;Channel.format_external is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultChannel.format_message"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.format_message">[docs]</a> <span class="k">def</span> <span class="nf">format_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msgobj</span><span class="p">,</span> <span class="n">emit</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">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Channel.format_message is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span><span class="p">)</span></div>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="s2">&quot;Channel.format_message is no longer used in 1.0+. &quot;</span>
<span class="s2">&quot;Use Account/Object.at_pre_channel_msg instead.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultChannel.pre_send_message"><a class="viewcode-back" href="../../../api/evennia.comms.comms.html#evennia.comms.comms.DefaultChannel.pre_send_message">[docs]</a> <span class="k">def</span> <span class="nf">pre_send_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;Channel.pre_send_message was renamed to Channel.at_pre_msg.&quot;</span><span class="p">)</span></div>

View file

@ -257,7 +257,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_receivers_accounts</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">db_hide_from_accounts</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">typ</span> <span class="o">==</span> <span class="s2">&quot;object&quot;</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_receivers_objects</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span><span class="o">.</span><span class="n">exclude</span><span class="p">(</span><span class="n">db_hide_from_objects</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">typ</span> <span class="o">==</span> <span class="s1">&#39;script&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">typ</span> <span class="o">==</span> <span class="s2">&quot;script&quot;</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_receivers_scripts</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">CommError</span></div>
@ -299,7 +299,7 @@
<span class="n">sender_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_sender_accounts__pk</span><span class="o">=</span><span class="n">spk</span><span class="p">)</span> <span class="o">&amp;</span> <span class="o">~</span><span class="n">Q</span><span class="p">(</span><span class="n">db_hide_from_accounts__pk</span><span class="o">=</span><span class="n">spk</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">styp</span> <span class="o">==</span> <span class="s2">&quot;object&quot;</span><span class="p">:</span>
<span class="n">sender_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_sender_objects__pk</span><span class="o">=</span><span class="n">spk</span><span class="p">)</span> <span class="o">&amp;</span> <span class="o">~</span><span class="n">Q</span><span class="p">(</span><span class="n">db_hide_from_objects__pk</span><span class="o">=</span><span class="n">spk</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">styp</span> <span class="o">==</span> <span class="s1">&#39;script&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">styp</span> <span class="o">==</span> <span class="s2">&quot;script&quot;</span><span class="p">:</span>
<span class="n">sender_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_sender_scripts__pk</span><span class="o">=</span><span class="n">spk</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">sender_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">()</span>
@ -308,16 +308,16 @@
<span class="k">if</span> <span class="n">receiver</span><span class="p">:</span>
<span class="n">rpk</span> <span class="o">=</span> <span class="n">receiver</span><span class="o">.</span><span class="n">pk</span>
<span class="k">if</span> <span class="n">rtyp</span> <span class="o">==</span> <span class="s2">&quot;account&quot;</span><span class="p">:</span>
<span class="n">receiver_restrict</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">Q</span><span class="p">(</span><span class="n">db_receivers_accounts__pk</span><span class="o">=</span><span class="n">rpk</span><span class="p">)</span> <span class="o">&amp;</span> <span class="o">~</span><span class="n">Q</span><span class="p">(</span><span class="n">db_hide_from_accounts__pk</span><span class="o">=</span><span class="n">rpk</span><span class="p">))</span>
<span class="n">receiver_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_receivers_accounts__pk</span><span class="o">=</span><span class="n">rpk</span><span class="p">)</span> <span class="o">&amp;</span> <span class="o">~</span><span class="n">Q</span><span class="p">(</span><span class="n">db_hide_from_accounts__pk</span><span class="o">=</span><span class="n">rpk</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">rtyp</span> <span class="o">==</span> <span class="s2">&quot;object&quot;</span><span class="p">:</span>
<span class="n">receiver_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_receivers_objects__pk</span><span class="o">=</span><span class="n">rpk</span><span class="p">)</span> <span class="o">&amp;</span> <span class="o">~</span><span class="n">Q</span><span class="p">(</span><span class="n">db_hide_from_objects__pk</span><span class="o">=</span><span class="n">rpk</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">rtyp</span> <span class="o">==</span> <span class="s1">&#39;script&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">rtyp</span> <span class="o">==</span> <span class="s2">&quot;script&quot;</span><span class="p">:</span>
<span class="n">receiver_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_receivers_scripts__pk</span><span class="o">=</span><span class="n">rpk</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">rtyp</span> <span class="o">==</span> <span class="s2">&quot;channel&quot;</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="s2">&quot;Msg.objects.search don&#39;t accept channel recipients since &quot;</span>
<span class="s2">&quot;Channels no longer accepts Msg objects.&quot;</span><span class="p">)</span>
<span class="s2">&quot;Channels no longer accepts Msg objects.&quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">receiver_restrict</span> <span class="o">=</span> <span class="n">Q</span><span class="p">()</span>
<span class="c1"># filter by full text</span>
@ -331,8 +331,9 @@
<span class="c1"># back-compatibility alias</span>
<span class="n">message_search</span> <span class="o">=</span> <span class="n">search_message</span>
<div class="viewcode-block" id="MsgManager.create_message"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.MsgManager.create_message">[docs]</a> <span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">senderobj</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">receivers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="MsgManager.create_message"><a class="viewcode-back" href="../../../api/evennia.comms.managers.html#evennia.comms.comms.MsgManager.create_message">[docs]</a> <span class="k">def</span> <span class="nf">create_message</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">senderobj</span><span class="p">,</span> <span class="n">message</span><span class="p">,</span> <span class="n">receivers</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">header</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create a new communication Msg. Msgs represent a unit of</span>
<span class="sd"> database-persistent communication between entites.</span>
@ -357,7 +358,7 @@
<span class="sd"> it&#39;s up to the command definitions to limit this as desired.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="s1">&#39;channels&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;channels&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="s2">&quot;create_message() does not accept &#39;channel&#39; kwarg anymore &quot;</span>
<span class="s2">&quot;- channels no longer accept Msg objects.&quot;</span>
@ -381,6 +382,7 @@
<span class="n">new_message</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">return</span> <span class="n">new_message</span></div></div>
<span class="c1">#</span>
<span class="c1"># Channel manager</span>
<span class="c1">#</span>

View file

@ -146,7 +146,7 @@
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;Identifier for single external sender, for use with senders &quot;</span>
<span class="s2">&quot;not represented by a regular database model.&quot;</span>
<span class="s2">&quot;not represented by a regular database model.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">db_receivers_accounts</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
@ -179,7 +179,7 @@
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;Identifier for single external receiver, for use with recievers &quot;</span>
<span class="s2">&quot;not represented by a regular database model.&quot;</span>
<span class="s2">&quot;not represented by a regular database model.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># header could be used for meta-info about the message if your system needs</span>
@ -328,7 +328,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">receivers</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db_receiver_external</span> <span class="o">=</span> <span class="n">receivers</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">update_fields</span><span class="o">=</span><span class="p">[</span><span class="s1">&#39;db_receiver_external&#39;</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">update_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;db_receiver_external&quot;</span><span class="p">])</span>
<span class="k">return</span>
<span class="k">for</span> <span class="n">receiver</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">receivers</span><span class="p">):</span>

View file

@ -163,7 +163,11 @@
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/plain&quot;</span><span class="p">,</span> <span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,}</span>
<span class="n">content</span><span class="p">,</span>
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/plain&quot;</span><span class="p">,</span>
<span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_with_acl"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.awsstorage.tests.html#evennia.contrib.base_systems.awsstorage.tests.S3Boto3StorageTests.test_storage_save_with_acl">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_with_acl</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -178,7 +182,11 @@
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/plain&quot;</span><span class="p">,</span> <span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="s2">&quot;private&quot;</span><span class="p">,}</span>
<span class="n">content</span><span class="p">,</span>
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;text/plain&quot;</span><span class="p">,</span>
<span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="s2">&quot;private&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_content_type"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.awsstorage.tests.html#evennia.contrib.base_systems.awsstorage.tests.S3Boto3StorageTests.test_content_type">[docs]</a> <span class="k">def</span> <span class="nf">test_content_type</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -193,7 +201,11 @@
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket</span><span class="o">.</span><span class="n">Object</span><span class="o">.</span><span class="n">return_value</span>
<span class="n">obj</span><span class="o">.</span><span class="n">upload_fileobj</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">content</span><span class="p">,</span> <span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;image/jpeg&quot;</span><span class="p">,</span> <span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,}</span>
<span class="n">content</span><span class="p">,</span>
<span class="n">ExtraArgs</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;ContentType&quot;</span><span class="p">:</span> <span class="s2">&quot;image/jpeg&quot;</span><span class="p">,</span>
<span class="s2">&quot;ACL&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">default_acl</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_save_gzipped"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.awsstorage.tests.html#evennia.contrib.base_systems.awsstorage.tests.S3Boto3StorageTests.test_storage_save_gzipped">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_save_gzipped</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -421,7 +433,10 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">uploaded_content</span><span class="p">,</span> <span class="n">written_content</span><span class="p">)</span>
<span class="n">multipart</span><span class="o">.</span><span class="n">complete</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">MultipartUpload</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;Parts&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;ETag&quot;</span><span class="p">:</span> <span class="s2">&quot;123&quot;</span><span class="p">,</span> <span class="s2">&quot;PartNumber&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span> <span class="p">{</span><span class="s2">&quot;ETag&quot;</span><span class="p">:</span> <span class="s2">&quot;456&quot;</span><span class="p">,</span> <span class="s2">&quot;PartNumber&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">},]</span>
<span class="s2">&quot;Parts&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;ETag&quot;</span><span class="p">:</span> <span class="s2">&quot;123&quot;</span><span class="p">,</span> <span class="s2">&quot;PartNumber&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">},</span>
<span class="p">{</span><span class="s2">&quot;ETag&quot;</span><span class="p">:</span> <span class="s2">&quot;456&quot;</span><span class="p">,</span> <span class="s2">&quot;PartNumber&quot;</span><span class="p">:</span> <span class="mi">2</span><span class="p">},</span>
<span class="p">]</span>
<span class="p">}</span>
<span class="p">)</span></div>
@ -436,7 +451,10 @@
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_get_or_create_bucket</span><span class="p">(</span><span class="s2">&quot;testbucketname&quot;</span><span class="p">)</span>
<span class="n">Bucket</span><span class="o">.</span><span class="n">create</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span> <span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;LocationConstraint&quot;</span><span class="p">:</span> <span class="s2">&quot;sa-east-1&quot;</span><span class="p">,}</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span>
<span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;LocationConstraint&quot;</span><span class="p">:</span> <span class="s2">&quot;sa-east-1&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_auto_creating_bucket_with_acl"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.awsstorage.tests.html#evennia.contrib.base_systems.awsstorage.tests.S3Boto3StorageTests.test_auto_creating_bucket_with_acl">[docs]</a> <span class="k">def</span> <span class="nf">test_auto_creating_bucket_with_acl</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -451,22 +469,28 @@
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">_get_or_create_bucket</span><span class="p">(</span><span class="s2">&quot;testbucketname&quot;</span><span class="p">)</span>
<span class="n">Bucket</span><span class="o">.</span><span class="n">create</span><span class="o">.</span><span class="n">assert_called_once_with</span><span class="p">(</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span> <span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;LocationConstraint&quot;</span><span class="p">:</span> <span class="s2">&quot;sa-east-1&quot;</span><span class="p">,}</span>
<span class="n">ACL</span><span class="o">=</span><span class="s2">&quot;public-read&quot;</span><span class="p">,</span>
<span class="n">CreateBucketConfiguration</span><span class="o">=</span><span class="p">{</span>
<span class="s2">&quot;LocationConstraint&quot;</span><span class="p">:</span> <span class="s2">&quot;sa-east-1&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.awsstorage.tests.html#evennia.contrib.base_systems.awsstorage.tests.S3Boto3StorageTests.test_storage_exists">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists</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">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;file.txt&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Key</span><span class="o">=</span><span class="s2">&quot;file.txt&quot;</span><span class="p">,</span>
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span>
<span class="n">Key</span><span class="o">=</span><span class="s2">&quot;file.txt&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists_false"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.awsstorage.tests.html#evennia.contrib.base_systems.awsstorage.tests.S3Boto3StorageTests.test_storage_exists_false">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists_false</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">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="n">ClientError</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;Error&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;Code&quot;</span><span class="p">:</span> <span class="s2">&quot;404&quot;</span><span class="p">,</span> <span class="s2">&quot;Message&quot;</span><span class="p">:</span> <span class="s2">&quot;Not Found&quot;</span><span class="p">}},</span> <span class="s2">&quot;HeadObject&quot;</span><span class="p">,</span>
<span class="p">{</span><span class="s2">&quot;Error&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;Code&quot;</span><span class="p">:</span> <span class="s2">&quot;404&quot;</span><span class="p">,</span> <span class="s2">&quot;Message&quot;</span><span class="p">:</span> <span class="s2">&quot;Not Found&quot;</span><span class="p">}},</span>
<span class="s2">&quot;HeadObject&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">exists</span><span class="p">(</span><span class="s2">&quot;file.txt&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">connection</span><span class="o">.</span><span class="n">meta</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">head_object</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span>
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span> <span class="n">Key</span><span class="o">=</span><span class="s2">&quot;file.txt&quot;</span><span class="p">,</span>
<span class="n">Bucket</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">bucket_name</span><span class="p">,</span>
<span class="n">Key</span><span class="o">=</span><span class="s2">&quot;file.txt&quot;</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="S3Boto3StorageTests.test_storage_exists_doesnt_create_bucket"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.awsstorage.tests.html#evennia.contrib.base_systems.awsstorage.tests.S3Boto3StorageTests.test_storage_exists_doesnt_create_bucket">[docs]</a> <span class="k">def</span> <span class="nf">test_storage_exists_doesnt_create_bucket</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -487,8 +511,14 @@
<span class="c1"># 4.txt</span>
<span class="n">pages</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span>
<span class="s2">&quot;CommonPrefixes&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;some&quot;</span><span class="p">},</span> <span class="p">{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;other&quot;</span><span class="p">},],</span>
<span class="s2">&quot;Contents&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;2.txt&quot;</span><span class="p">},</span> <span class="p">{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;4.txt&quot;</span><span class="p">},],</span>
<span class="s2">&quot;CommonPrefixes&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;some&quot;</span><span class="p">},</span>
<span class="p">{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;other&quot;</span><span class="p">},</span>
<span class="p">],</span>
<span class="s2">&quot;Contents&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;2.txt&quot;</span><span class="p">},</span>
<span class="p">{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;4.txt&quot;</span><span class="p">},</span>
<span class="p">],</span>
<span class="p">},</span>
<span class="p">]</span>
@ -507,7 +537,14 @@
<span class="c1"># some/path/1.txt</span>
<span class="c1"># some/2.txt</span>
<span class="n">pages</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;CommonPrefixes&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;some/path&quot;</span><span class="p">},],</span> <span class="s2">&quot;Contents&quot;</span><span class="p">:</span> <span class="p">[{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;some/2.txt&quot;</span><span class="p">},],},</span>
<span class="p">{</span>
<span class="s2">&quot;CommonPrefixes&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;Prefix&quot;</span><span class="p">:</span> <span class="s2">&quot;some/path&quot;</span><span class="p">},</span>
<span class="p">],</span>
<span class="s2">&quot;Contents&quot;</span><span class="p">:</span> <span class="p">[</span>
<span class="p">{</span><span class="s2">&quot;Key&quot;</span><span class="p">:</span> <span class="s2">&quot;some/2.txt&quot;</span><span class="p">},</span>
<span class="p">],</span>
<span class="p">},</span>
<span class="p">]</span>
<span class="n">paginator</span> <span class="o">=</span> <span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">()</span>

View file

@ -46,7 +46,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.commands.default.tests</span> <span class="kn">import</span> <span class="n">BaseEvenniaCommandTest</span>
<span class="kn">from</span> <span class="nn">.</span> <span class="n">building_menu</span> <span class="kn">import</span> <span class="nn">BuildingMenu</span><span class="o">,</span> <span class="nn">CmdNoMatch</span>
<span class="kn">from</span> <span class="nn">.building_menu</span> <span class="kn">import</span> <span class="n">BuildingMenu</span><span class="p">,</span> <span class="n">CmdNoMatch</span>
<div class="viewcode-block" id="Submenu"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.building_menu.tests.html#evennia.contrib.base_systems.building_menu.tests.Submenu">[docs]</a><span class="k">class</span> <span class="nc">Submenu</span><span class="p">(</span><span class="n">BuildingMenu</span><span class="p">):</span>

View file

@ -193,8 +193,9 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">days</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">weeks</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">months</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="s2">&quot;realtime_to_gametime: days/weeks/months cannot be set &lt;= 0, &quot;</span>
<span class="s2">&quot;they start from 1.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;realtime_to_gametime: days/weeks/months cannot be set &lt;= 0, &quot;</span> <span class="s2">&quot;they start from 1.&quot;</span>
<span class="p">)</span>
<span class="c1"># days/weeks/months start from 1, we need to adjust them to work mathematically.</span>
<span class="n">days</span><span class="p">,</span> <span class="n">weeks</span><span class="p">,</span> <span class="n">months</span> <span class="o">=</span> <span class="n">days</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">weeks</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">months</span> <span class="o">-</span> <span class="mi">1</span>

View file

@ -73,17 +73,27 @@
<div class="viewcode-block" id="TestEventHandler.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestEventHandler.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create the event handler.&quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.EventHandler&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.EventHandler&quot;</span>
<span class="p">)</span>
<span class="c1"># Copy old events if necessary</span>
<span class="k">if</span> <span class="n">OLD_EVENTS</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">events</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">OLD_EVENTS</span><span class="p">)</span>
<span class="c1"># Alter typeclasses</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventExit&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestEventHandler.tearDown"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestEventHandler.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -295,17 +305,27 @@
<div class="viewcode-block" id="TestCmdCallback.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestCmdCallback.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create the callback handler.&quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.EventHandler&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.EventHandler&quot;</span>
<span class="p">)</span>
<span class="c1"># Copy old events if necessary</span>
<span class="k">if</span> <span class="n">OLD_EVENTS</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">events</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">OLD_EVENTS</span><span class="p">)</span>
<span class="c1"># Alter typeclasses</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventExit&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCmdCallback.tearDown"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestCmdCallback.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -474,17 +494,27 @@
<div class="viewcode-block" id="TestDefaultCallbacks.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestDefaultCallbacks.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Create the callback handler.&quot;&quot;&quot;</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.EventHandler&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.EventHandler&quot;</span>
<span class="p">)</span>
<span class="c1"># Copy old events if necessary</span>
<span class="k">if</span> <span class="n">OLD_EVENTS</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">events</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span><span class="n">OLD_EVENTS</span><span class="p">)</span>
<span class="c1"># Alter typeclasses</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">char2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventCharacter&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">room2</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventRoom&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">exit</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.base_systems.ingame_python.typeclasses.EventExit&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestDefaultCallbacks.tearDown"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.ingame_python.tests.html#evennia.contrib.base_systems.ingame_python.tests.TestDefaultCallbacks.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -215,7 +215,9 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">seconds</span><span class="p">,</span> <span class="n">usual</span><span class="p">,</span> <span class="n">key</span> <span class="o">=</span> <span class="n">get_next_wait</span><span class="p">(</span><span class="n">parameters</span><span class="p">)</span>
<span class="n">script</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript&quot;</span><span class="p">,</span> <span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="n">obj</span>
<span class="s2">&quot;evennia.contrib.base_systems.ingame_python.scripts.TimeEventScript&quot;</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span>
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">script</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">script</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="s2">&quot;event on </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">key</span><span class="p">)</span>

View file

@ -182,7 +182,7 @@
<span class="n">account_caller</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="CmdDelCom.func"><a class="viewcode-back" href="../../../../../api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Implementing the command. &quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;Implementing the command.&quot;&quot;&quot;</span>
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
@ -249,8 +249,7 @@
<span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="n">subscribed</span><span class="p">,</span> <span class="n">available</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">list_channels</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;</span><span class="se">\n</span><span class="s2">|wAvailable channels:</span><span class="se">\n</span><span class="si">{table}</span><span class="s2">&quot;</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;</span><span class="se">\n</span><span class="s2">|wAvailable channels:</span><span class="se">\n</span><span class="si">{table}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">return</span>
@ -395,7 +394,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">success</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">boot_user</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="s1">&#39;quiet&#39;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">)</span>
<span class="n">success</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">boot_user</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="s2">&quot;quiet&quot;</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">)</span>
<span class="k">if</span> <span class="n">success</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="sa">f</span><span class="s2">&quot;Booted </span><span class="si">{</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> from </span><span class="si">{</span><span class="n">channel</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_sec</span><span class="p">(</span>

View file

@ -385,7 +385,7 @@
<span class="c1"># Evennia hooks</span>
<div class="viewcode-block" id="EvscaperoomObject.return_appearance"><a class="viewcode-back" href="../../../../../api/evennia.contrib.full_systems.evscaperoom.objects.html#evennia.contrib.full_systems.evscaperoom.objects.EvscaperoomObject.return_appearance">[docs]</a> <span class="k">def</span> <span class="nf">return_appearance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot; Could be modified per state. We generally don&#39;t worry about the</span>
<span class="sd">&quot;&quot;&quot;Could be modified per state. We generally don&#39;t worry about the</span>
<span class="sd"> contents of the object by default.</span>
<span class="sd"> &quot;&quot;&quot;</span>

View file

@ -709,8 +709,8 @@
<span class="n">consumable_kwargs</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">if</span> <span class="n">location</span><span class="p">:</span>
<span class="n">tool_kwargs</span><span class="p">[</span><span class="s1">&#39;location&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">location</span>
<span class="n">consumable_kwargs</span><span class="p">[</span><span class="s1">&#39;location&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">location</span>
<span class="n">tool_kwargs</span><span class="p">[</span><span class="s2">&quot;location&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">location</span>
<span class="n">consumable_kwargs</span><span class="p">[</span><span class="s2">&quot;location&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">location</span>
<span class="n">tool_key</span> <span class="o">=</span> <span class="n">tool_kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">cons_key</span> <span class="o">=</span> <span class="n">consumable_kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
@ -1008,6 +1008,7 @@
<span class="sd"> things in the current location, like a furnace, windmill or anvil.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;craft&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>

View file

@ -120,6 +120,7 @@
<span class="c1"># Sword recipe</span>
<span class="c1"># ------------------------------------------------------------</span>
<div class="viewcode-block" id="PigIronRecipe"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.example_recipes.html#evennia.contrib.game_systems.crafting.example_recipes.PigIronRecipe">[docs]</a><span class="k">class</span> <span class="nc">PigIronRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Pig iron is a high-carbon result of melting iron in a blast furnace.</span>
@ -373,9 +374,9 @@
<span class="n">exact_consumable_order</span> <span class="o">=</span> <span class="kc">True</span></div>
<span class="c1">#------------------------------------------------------------</span>
<span class="c1"># ------------------------------------------------------------</span>
<span class="c1"># Recipes for spell casting</span>
<span class="c1">#------------------------------------------------------------</span>
<span class="c1"># ------------------------------------------------------------</span>
<span class="k">class</span> <span class="nc">_MagicRecipe</span><span class="p">(</span><span class="n">CraftingRecipe</span><span class="p">):</span>
@ -390,6 +391,7 @@
<span class="sd"> We also assume that the crafter has skills set on itself as plain Attributes.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># all spells require a spellbook and a wand (so there!)</span>
<span class="n">tool_tags</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;spellbook&quot;</span><span class="p">,</span> <span class="s2">&quot;wand&quot;</span><span class="p">]</span>
@ -432,15 +434,15 @@
<span class="n">skill_value</span> <span class="o">=</span> <span class="n">crafter</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">skill_name</span><span class="p">)</span>
<span class="k">if</span> <span class="n">skill_value</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">skill_value</span> <span class="o">&lt;</span> <span class="n">min_value</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="bp">self</span><span class="o">.</span><span class="n">error_too_low_skill_level</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">skill_name</span><span class="o">=</span><span class="n">skill_name</span><span class="p">,</span>
<span class="n">spell</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</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="bp">self</span><span class="o">.</span><span class="n">error_too_low_skill_level</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">skill_name</span><span class="o">=</span><span class="n">skill_name</span><span class="p">,</span> <span class="n">spell</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">raise</span> <span class="n">CraftingValidationError</span>
<span class="c1"># get the value of the skill to roll</span>
<span class="bp">self</span><span class="o">.</span><span class="n">skill_roll_value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">crafter</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="bp">self</span><span class="o">.</span><span class="n">skill_roll</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">skill_roll_value</span> <span class="ow">is</span> <span class="kc">None</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="bp">self</span><span class="o">.</span><span class="n">error_no_skill_roll</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">skill_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">skill_roll</span><span class="p">,</span>
<span class="n">spell</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</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="bp">self</span><span class="o">.</span><span class="n">error_no_skill_roll</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">skill_name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">skill_roll</span><span class="p">,</span> <span class="n">spell</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">))</span>
<span class="k">raise</span> <span class="n">CraftingValidationError</span>
<span class="k">def</span> <span class="nf">do_craft</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
@ -488,12 +490,13 @@
<span class="sd"> need to be created to understand what they mean when used.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;fireball&quot;</span>
<span class="n">skill_requirements</span> <span class="o">=</span> <span class="p">[(</span><span class="s1">&#39;firemagic&#39;</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span> <span class="c1"># skill &#39;firemagic&#39; lvl 10 or higher</span>
<span class="n">skill_requirements</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;firemagic&quot;</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span> <span class="c1"># skill &#39;firemagic&#39; lvl 10 or higher</span>
<span class="n">skill_roll</span> <span class="o">=</span> <span class="s2">&quot;firemagic&quot;</span>
<span class="n">success_message</span> <span class="o">=</span> <span class="s2">&quot;A ball of flame appears!&quot;</span>
<span class="n">desired_effects</span> <span class="o">=</span> <span class="p">[(</span><span class="s1">&#39;target_fire_damage&#39;</span><span class="p">,</span> <span class="mi">25</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;ranged_attack&#39;</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;mana_cost&#39;</span><span class="p">,</span> <span class="mi">12</span><span class="p">)]</span>
<span class="n">failure_effects</span> <span class="o">=</span> <span class="p">[(</span><span class="s1">&#39;self_fire_damage&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;mana_cost&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)]</span></div>
<span class="n">desired_effects</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;target_fire_damage&quot;</span><span class="p">,</span> <span class="mi">25</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;ranged_attack&quot;</span><span class="p">,</span> <span class="o">-</span><span class="mi">2</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;mana_cost&quot;</span><span class="p">,</span> <span class="mi">12</span><span class="p">)]</span>
<span class="n">failure_effects</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;self_fire_damage&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;mana_cost&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)]</span></div>
<div class="viewcode-block" id="HealingRecipe"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.example_recipes.html#evennia.contrib.game_systems.crafting.example_recipes.HealingRecipe">[docs]</a><span class="k">class</span> <span class="nc">HealingRecipe</span><span class="p">(</span><span class="n">_MagicRecipe</span><span class="p">):</span>
@ -504,11 +507,12 @@
<span class="sd"> need to be created to understand what they mean.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;heal&quot;</span>
<span class="n">skill_requirements</span> <span class="o">=</span> <span class="p">[(</span><span class="s1">&#39;bodymagic&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;empathy&quot;</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span>
<span class="n">skill_requirements</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;bodymagic&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;empathy&quot;</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span>
<span class="n">skill_roll</span> <span class="o">=</span> <span class="s2">&quot;bodymagic&quot;</span>
<span class="n">success_message</span> <span class="o">=</span> <span class="s2">&quot;You successfully extend your healing aura.&quot;</span>
<span class="n">desired_effects</span> <span class="o">=</span> <span class="p">[(</span><span class="s1">&#39;healing&#39;</span><span class="p">,</span> <span class="mi">15</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;mana_cost&#39;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)]</span>
<span class="n">desired_effects</span> <span class="o">=</span> <span class="p">[(</span><span class="s2">&quot;healing&quot;</span><span class="p">,</span> <span class="mi">15</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;mana_cost&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)]</span>
<span class="n">failure_effects</span> <span class="o">=</span> <span class="p">[]</span></div>
@ -520,7 +524,8 @@
<span class="sd"> cast &lt;spell&gt; &lt;target&gt;</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s1">&#39;cast&#39;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;cast&quot;</span>
<div class="viewcode-block" id="CmdCast.parse"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.example_recipes.html#evennia.contrib.game_systems.crafting.example_recipes.CmdCast.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -530,8 +535,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">target</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</span> <span class="s1">&#39; &#39;</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">spellname</span><span class="p">,</span> <span class="o">*</span><span class="n">target</span> <span class="o">=</span> <span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s1">&#39; &#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot; &quot;</span> <span class="ow">in</span> <span class="n">args</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">spellname</span><span class="p">,</span> <span class="o">*</span><span class="n">target</span> <span class="o">=</span> <span class="n">args</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">1</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">spellname</span> <span class="o">=</span> <span class="n">args</span>
@ -554,8 +559,9 @@
<span class="k">try</span><span class="p">:</span>
<span class="c1"># if this completes without an exception, the caster will have</span>
<span class="c1"># a new magic_effect set on themselves, ready to use or apply in some way.</span>
<span class="n">success</span><span class="p">,</span> <span class="n">effects</span> <span class="o">=</span> <span class="n">craft</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">spellname</span><span class="p">,</span> <span class="o">*</span><span class="n">possible_tools</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">success</span><span class="p">,</span> <span class="n">effects</span> <span class="o">=</span> <span class="n">craft</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">spellname</span><span class="p">,</span> <span class="o">*</span><span class="n">possible_tools</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="k">except</span> <span class="n">CraftingValidationError</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
@ -569,8 +575,10 @@
<span class="c1"># (which could be yourself) by a number of health points given by the recipe.</span>
<span class="n">effect_txt</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">eff</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="si">}</span><span class="s2">(</span><span class="si">{</span><span class="n">eff</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">for</span> <span class="n">eff</span> <span class="ow">in</span> <span class="n">effects</span><span class="p">)</span>
<span class="n">success_txt</span> <span class="o">=</span> <span class="s2">&quot;|gsucceeded|n&quot;</span> <span class="k">if</span> <span class="n">success</span> <span class="k">else</span> <span class="s2">&quot;|rfailed|n&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Casting the spell </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">spellname</span><span class="si">}</span><span class="s2"> on </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">success_txt</span><span class="si">}</span><span class="s2">, &quot;</span>
<span class="sa">f</span><span class="s2">&quot;causing the following effects: </span><span class="si">{</span><span class="n">effect_txt</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Casting the spell </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">spellname</span><span class="si">}</span><span class="s2"> on </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">target</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">success_txt</span><span class="si">}</span><span class="s2">, &quot;</span>
<span class="sa">f</span><span class="s2">&quot;causing the following effects: </span><span class="si">{</span><span class="n">effect_txt</span><span class="si">}</span><span class="s2">.&quot;</span>
<span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>

View file

@ -207,7 +207,7 @@
<span class="k">pass</span></div>
<div class="viewcode-block" id="TestCraftingRecipe.test_error_format"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftingRecipe.test_error_format">[docs]</a> <span class="k">def</span> <span class="nf">test_error_format</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test the automatic error formatter &quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;Test the automatic error formatter&quot;&quot;&quot;</span>
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span>
<span class="p">)</span>
@ -470,7 +470,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_tool_order__fail"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftingRecipe.test_craft_tool_order__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_tool_order__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Strict tool-order recipe fail &quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;Strict tool-order recipe fail&quot;&quot;&quot;</span>
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span>
<span class="p">)</span>
@ -493,7 +493,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertIsNotNone</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestCraftingRecipe.test_craft_cons_order__fail"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftingRecipe.test_craft_cons_order__fail">[docs]</a> <span class="k">def</span> <span class="nf">test_craft_cons_order__fail</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Strict tool-order recipe fail &quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;Strict tool-order recipe fail&quot;&quot;&quot;</span>
<span class="n">recipe</span> <span class="o">=</span> <span class="n">_MockRecipe</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">crafter</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">tool2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons3</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons2</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">cons1</span>
<span class="p">)</span>
@ -695,7 +695,10 @@
<div class="viewcode-block" id="TestCraftCommand"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftCommand">[docs]</a><span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.game_systems.crafting.crafting._load_recipes&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">mock</span><span class="o">.</span><span class="n">MagicMock</span><span class="p">())</span>
<span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.game_systems.crafting.crafting._RECIPE_CLASSES&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;testrecipe&quot;</span><span class="p">:</span> <span class="n">_MockRecipe</span><span class="p">})</span>
<span class="nd">@mock</span><span class="o">.</span><span class="n">patch</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.game_systems.crafting.crafting._RECIPE_CLASSES&quot;</span><span class="p">,</span>
<span class="n">new</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;testrecipe&quot;</span><span class="p">:</span> <span class="n">_MockRecipe</span><span class="p">},</span>
<span class="p">)</span>
<span class="nd">@override_settings</span><span class="p">(</span><span class="n">CRAFT_RECIPE_MODULES</span><span class="o">=</span><span class="p">[])</span>
<span class="k">class</span> <span class="nc">TestCraftCommand</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test the crafting command&quot;&quot;&quot;</span>

View file

@ -64,7 +64,9 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">gendersub</span><span class="o">.</span><span class="n">_RE_GENDER_PRONOUN</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="n">char</span><span class="o">.</span><span class="n">_get_pronoun</span><span class="p">,</span> <span class="n">txt</span><span class="p">),</span> <span class="s2">&quot;Test their gender&quot;</span>
<span class="p">)</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.game_systems.gendersub.gendersub.DefaultCharacter.msg&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">mock_msg</span><span class="p">:</span>
<span class="k">with</span> <span class="n">patch</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.game_systems.gendersub.gendersub.DefaultCharacter.msg&quot;</span>
<span class="p">)</span> <span class="k">as</span> <span class="n">mock_msg</span><span class="p">:</span>
<span class="n">char</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gender</span> <span class="o">=</span> <span class="s2">&quot;female&quot;</span>
<span class="n">char</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Test |p gender&quot;</span><span class="p">)</span>
<span class="n">mock_msg</span><span class="o">.</span><span class="n">assert_called_with</span><span class="p">(</span><span class="s2">&quot;Test her gender&quot;</span><span class="p">,</span> <span class="n">from_obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div></div>

View file

@ -346,6 +346,7 @@
<span class="sd"> A character able to participate in turn-based combat. Has attributes for current</span>
<span class="sd"> and maximum HP, and access to combat commands.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rules</span> <span class="o">=</span> <span class="n">COMBAT_RULES</span>
<div class="viewcode-block" id="TBBasicCharacter.at_object_creation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_basic.html#evennia.contrib.game_systems.turnbattle.tb_basic.TBBasicCharacter.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -285,6 +285,7 @@
<span class="sd"> Fights persist until only one participant is left with any HP or all</span>
<span class="sd"> remaining participants choose to end the combat with the &#39;disengage&#39; command.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rules</span> <span class="o">=</span> <span class="n">COMBAT_RULES</span></div>
@ -300,6 +301,7 @@
<span class="sd"> A weapon which can be wielded in combat with the &#39;wield&#39; command.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rules</span> <span class="o">=</span> <span class="n">COMBAT_RULES</span>
<div class="viewcode-block" id="TBEWeapon.at_object_creation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_equip.html#evennia.contrib.game_systems.turnbattle.tb_equip.TBEWeapon.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -555,8 +557,9 @@
<span class="n">weapon</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">candidates</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">weapon</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">weapon</span><span class="o">.</span><span class="n">is_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.game_systems.turnbattle.tb_equip.TBEWeapon&quot;</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">weapon</span><span class="o">.</span><span class="n">is_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.game_systems.turnbattle.tb_equip.TBEWeapon&quot;</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span>
<span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;That&#39;s not a weapon!&quot;</span><span class="p">)</span>
<span class="c1"># Remember to update the path to the weapon typeclass if you move this module!</span>
<span class="k">return</span>
@ -639,8 +642,9 @@
<span class="n">armor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">candidates</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">contents</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">armor</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">armor</span><span class="o">.</span><span class="n">is_typeclass</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.game_systems.turnbattle.tb_equip.TBEArmor&quot;</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">armor</span><span class="o">.</span><span class="n">is_typeclass</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.game_systems.turnbattle.tb_equip.TBEArmor&quot;</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span>
<span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;That&#39;s not armor!&quot;</span><span class="p">)</span>
<span class="c1"># Remember to update the path to the armor typeclass if you move this module!</span>
<span class="k">return</span>

View file

@ -146,7 +146,6 @@
<div class="viewcode-block" id="ItemCombatRules"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_items.html#evennia.contrib.game_systems.turnbattle.tb_items.ItemCombatRules">[docs]</a><span class="k">class</span> <span class="nc">ItemCombatRules</span><span class="p">(</span><span class="n">tb_basic</span><span class="o">.</span><span class="n">BasicCombatRules</span><span class="p">):</span>
<div class="viewcode-block" id="ItemCombatRules.get_attack"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_items.html#evennia.contrib.game_systems.turnbattle.tb_items.ItemCombatRules.get_attack">[docs]</a> <span class="k">def</span> <span class="nf">get_attack</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="n">defender</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a value for an attack roll.</span>
@ -741,7 +740,7 @@
<span class="n">AMULET_OF_WEAKNESS</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;The Amulet of Weakness&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;The one who holds this amulet can call upon its power to gain great weakness. &quot;</span>
<span class="s2">&quot;It&#39;s not a terribly useful artifact.&quot;</span><span class="p">,</span>
<span class="s2">&quot;It&#39;s not a terribly useful artifact.&quot;</span><span class="p">,</span>
<span class="s2">&quot;item_func&quot;</span><span class="p">:</span> <span class="s2">&quot;add_condition&quot;</span><span class="p">,</span>
<span class="s2">&quot;item_selfonly&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">,</span>
<span class="s2">&quot;item_kwargs&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;conditions&quot;</span><span class="p">:</span> <span class="p">[(</span><span class="s2">&quot;Damage Down&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;Accuracy Down&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;Defense Down&quot;</span><span class="p">,</span> <span class="mi">3</span><span class="p">)]},</span>

View file

@ -135,8 +135,8 @@
<span class="sd">in the docstring for each function.</span>
<span class="sd">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="MagicCombatRules"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_magic.html#evennia.contrib.game_systems.turnbattle.tb_magic.MagicCombatRules">[docs]</a><span class="k">class</span> <span class="nc">MagicCombatRules</span><span class="p">(</span><span class="n">tb_basic</span><span class="o">.</span><span class="n">BasicCombatRules</span><span class="p">):</span>
<div class="viewcode-block" id="MagicCombatRules"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_magic.html#evennia.contrib.game_systems.turnbattle.tb_magic.MagicCombatRules">[docs]</a><span class="k">class</span> <span class="nc">MagicCombatRules</span><span class="p">(</span><span class="n">tb_basic</span><span class="o">.</span><span class="n">BasicCombatRules</span><span class="p">):</span>
<div class="viewcode-block" id="MagicCombatRules.spell_healing"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_magic.html#evennia.contrib.game_systems.turnbattle.tb_magic.MagicCombatRules.spell_healing">[docs]</a> <span class="k">def</span> <span class="nf">spell_healing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caster</span><span class="p">,</span> <span class="n">spell_name</span><span class="p">,</span> <span class="n">targets</span><span class="p">,</span> <span class="n">cost</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Spell that restores HP to a target or targets.</span>
@ -367,11 +367,7 @@
<span class="s2">&quot;attack_name&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;A jet of flame&quot;</span><span class="p">,</span> <span class="s2">&quot;jets of flame&quot;</span><span class="p">),</span>
<span class="s2">&quot;damage_range&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">25</span><span class="p">,</span> <span class="mi">35</span><span class="p">),</span>
<span class="p">},</span>
<span class="s2">&quot;cure wounds&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;spellfunc&quot;</span><span class="p">:</span> <span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">spell_healing</span><span class="p">,</span>
<span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="s2">&quot;anychar&quot;</span><span class="p">,</span>
<span class="s2">&quot;cost&quot;</span><span class="p">:</span> <span class="mi">5</span>
<span class="p">},</span>
<span class="s2">&quot;cure wounds&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;spellfunc&quot;</span><span class="p">:</span> <span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">spell_healing</span><span class="p">,</span> <span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="s2">&quot;anychar&quot;</span><span class="p">,</span> <span class="s2">&quot;cost&quot;</span><span class="p">:</span> <span class="mi">5</span><span class="p">},</span>
<span class="s2">&quot;mass cure wounds&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;spellfunc&quot;</span><span class="p">:</span> <span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">spell_healing</span><span class="p">,</span>
<span class="s2">&quot;target&quot;</span><span class="p">:</span> <span class="s2">&quot;anychar&quot;</span><span class="p">,</span>
@ -418,6 +414,7 @@
<span class="sd"> and maximum HP, access to combat commands and magic.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rules</span> <span class="o">=</span> <span class="n">COMBAT_RULES</span>
<div class="viewcode-block" id="TBMagicCharacter.at_object_creation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_magic.html#evennia.contrib.game_systems.turnbattle.tb_magic.TBMagicCharacter.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -164,7 +164,6 @@
<div class="viewcode-block" id="RangedCombatRules"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_range.html#evennia.contrib.game_systems.turnbattle.tb_range.RangedCombatRules">[docs]</a><span class="k">class</span> <span class="nc">RangedCombatRules</span><span class="p">(</span><span class="n">tb_basic</span><span class="o">.</span><span class="n">BasicCombatRules</span><span class="p">):</span>
<div class="viewcode-block" id="RangedCombatRules.get_attack"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_range.html#evennia.contrib.game_systems.turnbattle.tb_range.RangedCombatRules.get_attack">[docs]</a> <span class="k">def</span> <span class="nf">get_attack</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="n">defender</span><span class="p">,</span> <span class="n">attack_type</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a value for an attack roll.</span>
@ -196,7 +195,7 @@
<span class="n">attack_value</span> <span class="o">-=</span> <span class="mi">15</span>
<span class="k">return</span> <span class="n">attack_value</span></div>
<div class="viewcode-block" id="RangedCombatRules.get_defense"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_range.html#evennia.contrib.game_systems.turnbattle.tb_range.RangedCombatRules.get_defense">[docs]</a> <span class="k">def</span> <span class="nf">get_defense</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="n">defender</span><span class="p">,</span> <span class="n">attack_type</span><span class="o">=</span><span class="s1">&#39;melee&#39;</span><span class="p">):</span>
<div class="viewcode-block" id="RangedCombatRules.get_defense"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_range.html#evennia.contrib.game_systems.turnbattle.tb_range.RangedCombatRules.get_defense">[docs]</a> <span class="k">def</span> <span class="nf">get_defense</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="n">defender</span><span class="p">,</span> <span class="n">attack_type</span><span class="o">=</span><span class="s2">&quot;melee&quot;</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns a value for defense, which an attack roll must equal or exceed in order</span>
<span class="sd"> for an attack to hit.</span>
@ -326,8 +325,9 @@
<span class="k">if</span> <span class="n">thing</span> <span class="o">!=</span> <span class="n">mover</span> <span class="ow">and</span> <span class="n">thing</span> <span class="o">!=</span> <span class="n">target</span><span class="p">:</span>
<span class="c1"># Move away from each object closer to the target than you, if it&#39;s also closer to</span>
<span class="c1"># you than you are to the target.</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">thing</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">thing</span><span class="p">)</span>
<span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">thing</span><span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">target</span><span class="p">)):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">thing</span><span class="p">)</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">thing</span><span class="p">)</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span>
<span class="n">mover</span><span class="p">,</span> <span class="n">thing</span>
<span class="p">)</span> <span class="o">&lt;</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">mover</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">distance_inc</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">thing</span><span class="p">)</span>
<span class="c1"># Move away from anything your target is engaged with</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">thing</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
@ -338,8 +338,9 @@
<span class="c1"># Then, move away from your target.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">distance_inc</span><span class="p">(</span><span class="n">mover</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span></div>
<div class="viewcode-block" id="RangedCombatRules.resolve_attack"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_range.html#evennia.contrib.game_systems.turnbattle.tb_range.RangedCombatRules.resolve_attack">[docs]</a> <span class="k">def</span> <span class="nf">resolve_attack</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="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">attack_type</span><span class="o">=</span><span class="s1">&#39;melee&#39;</span><span class="p">):</span>
<div class="viewcode-block" id="RangedCombatRules.resolve_attack"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.turnbattle.tb_range.html#evennia.contrib.game_systems.turnbattle.tb_range.RangedCombatRules.resolve_attack">[docs]</a> <span class="k">def</span> <span class="nf">resolve_attack</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="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">attack_type</span><span class="o">=</span><span class="s2">&quot;melee&quot;</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Resolves an attack and outputs the result.</span>
@ -538,6 +539,7 @@
<span class="sd"> A character able to participate in turn-based combat. Has attributes for current</span>
<span class="sd"> and maximum HP, and access to combat commands.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rules</span> <span class="o">=</span> <span class="n">COMBAT_RULES</span></div>
@ -839,15 +841,17 @@
<span class="n">in_melee</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">attacker</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">combat_range</span><span class="p">:</span>
<span class="c1"># Object is engaged and has HP</span>
<span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rules</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">attacker</span><span class="p">,</span> <span class="n">defender</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
<span class="ow">and</span> <span class="n">target</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="ow">and</span> <span class="n">target</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">rules</span><span class="o">.</span><span class="n">get_range</span><span class="p">(</span><span class="n">attacker</span><span class="p">,</span> <span class="n">defender</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span>
<span class="ow">and</span> <span class="n">target</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span>
<span class="ow">and</span> <span class="n">target</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="p">):</span>
<span class="n">in_melee</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">target</span><span class="p">)</span> <span class="c1"># Add to list of targets in melee</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">in_melee</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;You can&#39;t shoot because there are fighters engaged with you (</span><span class="si">%s</span><span class="s2">) - you need &quot;</span>
<span class="s2">&quot;to retreat! (see: help withdraw)&quot;</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">obj</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">in_melee</span><span class="p">)</span>
<span class="s2">&quot;to retreat! (see: help withdraw)&quot;</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">obj</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">in_melee</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span>

View file

@ -175,8 +175,9 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">==</span> <span class="mi">7</span><span class="p">)</span>
<span class="c1"># Resolve attack</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">=</span> <span class="mi">40</span>
<span class="n">tb_basic</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span>
<span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">tb_basic</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">&lt;</span> <span class="mi">40</span><span class="p">)</span>
<span class="c1"># Combat cleanup</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Combat_attribute</span> <span class="o">=</span> <span class="kc">True</span>
@ -269,7 +270,9 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">==</span> <span class="mi">7</span><span class="p">)</span>
<span class="c1"># Resolve attack</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">=</span> <span class="mi">40</span>
<span class="n">tb_equip</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">tb_equip</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">&lt;</span> <span class="mi">40</span><span class="p">)</span>
<span class="c1"># Combat cleanup</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Combat_attribute</span> <span class="o">=</span> <span class="kc">True</span>
@ -347,12 +350,14 @@
<span class="n">initiative</span> <span class="o">=</span> <span class="n">tb_range</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">roll_init</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">initiative</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">initiative</span> <span class="o">&lt;=</span> <span class="mi">1000</span><span class="p">)</span>
<span class="c1"># Attack roll</span>
<span class="n">attack_roll</span> <span class="o">=</span> <span class="n">tb_range</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">get_attack</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span>
<span class="n">attack_type</span><span class="o">=</span><span class="s2">&quot;test&quot;</span><span class="p">)</span>
<span class="n">attack_roll</span> <span class="o">=</span> <span class="n">tb_range</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">get_attack</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_type</span><span class="o">=</span><span class="s2">&quot;test&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">attack_roll</span> <span class="o">&gt;=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="n">attack_roll</span> <span class="o">&lt;=</span> <span class="mi">100</span><span class="p">)</span>
<span class="c1"># Defense roll</span>
<span class="n">defense_roll</span> <span class="o">=</span> <span class="n">tb_range</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">get_defense</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span>
<span class="n">attack_type</span><span class="o">=</span><span class="s2">&quot;test&quot;</span><span class="p">)</span>
<span class="n">defense_roll</span> <span class="o">=</span> <span class="n">tb_range</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">get_defense</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_type</span><span class="o">=</span><span class="s2">&quot;test&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">defense_roll</span> <span class="o">==</span> <span class="mi">50</span><span class="p">)</span>
<span class="c1"># Damage roll</span>
<span class="n">damage_roll</span> <span class="o">=</span> <span class="n">tb_range</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">get_damage</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">)</span>
@ -478,8 +483,9 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">==</span> <span class="mi">7</span><span class="p">)</span>
<span class="c1"># Resolve attack</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">=</span> <span class="mi">40</span>
<span class="n">tb_items</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
<span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">tb_items</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">&lt;</span> <span class="mi">40</span><span class="p">)</span>
<span class="c1"># Combat cleanup</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Combat_attribute</span> <span class="o">=</span> <span class="kc">True</span>
@ -597,8 +603,9 @@
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">==</span> <span class="mi">7</span><span class="p">)</span>
<span class="c1"># Resolve attack</span>
<span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">=</span> <span class="mi">40</span>
<span class="n">tb_magic</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
<span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span>
<span class="n">tb_magic</span><span class="o">.</span><span class="n">COMBAT_RULES</span><span class="o">.</span><span class="n">resolve_attack</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="p">,</span> <span class="n">attack_value</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span> <span class="n">defense_value</span><span class="o">=</span><span class="mi">10</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">hp</span> <span class="o">&lt;</span> <span class="mi">40</span><span class="p">)</span>
<span class="c1"># Combat cleanup</span>
<span class="bp">self</span><span class="o">.</span><span class="n">attacker</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">Combat_attribute</span> <span class="o">=</span> <span class="kc">True</span>

View file

@ -100,6 +100,7 @@
<span class="sd"> are given, the target is a location on the XYZGrid.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_search_by_xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inp</span><span class="p">):</span>
<span class="n">inp</span> <span class="o">=</span> <span class="n">inp</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;()&quot;</span><span class="p">)</span>
<span class="n">X</span><span class="p">,</span> <span class="n">Y</span><span class="p">,</span> <span class="o">*</span><span class="n">Z</span> <span class="o">=</span> <span class="n">inp</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>
@ -111,8 +112,10 @@
<span class="k">try</span><span class="p">:</span>
<span class="n">xyz</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">xyz</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Z-coordinate is also required since you are not currently &quot;</span>
<span class="s2">&quot;in a room with a Z coordinate of its own.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;Z-coordinate is also required since you are not currently &quot;</span>
<span class="s2">&quot;in a room with a Z coordinate of its own.&quot;</span>
<span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">Z</span> <span class="o">=</span> <span class="n">xyz</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
@ -176,9 +179,11 @@
<span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">location</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Usage: open &lt;new exit&gt;[;alias...][:typeclass]&quot;</span>
<span class="s2">&quot;[,&lt;return exit&gt;[;alias..][:typeclass]]] &quot;</span>
<span class="s2">&quot;= &lt;destination or (X,Y,Z)&gt;&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;Usage: open &lt;new exit&gt;[;alias...][:typeclass]&quot;</span>
<span class="s2">&quot;[,&lt;return exit&gt;[;alias..][:typeclass]]] &quot;</span>
<span class="s2">&quot;= &lt;destination or (X,Y,Z)&gt;&quot;</span>
<span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You cannot create an exit from a None-location.&quot;</span><span class="p">)</span>
@ -226,6 +231,7 @@
<span class="sd"> Builders can optionally specify a specific grid coordinate (X,Y) to go to.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;goto&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">&quot;path&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;General&quot;</span>
@ -249,11 +255,19 @@
<span class="k">def</span> <span class="nf">_search_by_key_and_alias</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inp</span><span class="p">,</span> <span class="n">xyz_start</span><span class="p">):</span>
<span class="n">Z</span> <span class="o">=</span> <span class="n">xyz_start</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">candidates</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">XYZRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="n">Z</span><span class="p">)))</span>
<span class="n">candidates</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">XYZRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="n">Z</span><span class="p">)))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">inp</span><span class="p">,</span> <span class="n">candidates</span><span class="o">=</span><span class="n">candidates</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_auto_step</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">step_sequence</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">_auto_step</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">caller</span><span class="p">,</span>
<span class="n">session</span><span class="p">,</span>
<span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">step_sequence</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">step</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">):</span>
<span class="n">path_data</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">xy_path_data</span>
@ -263,8 +277,12 @@
<span class="c1"># stop any old task in its tracks</span>
<span class="n">path_data</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">cancel</span><span class="p">()</span>
<span class="n">path_data</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">xy_path_data</span> <span class="o">=</span> <span class="n">PathData</span><span class="p">(</span>
<span class="n">target</span><span class="o">=</span><span class="n">target</span><span class="p">,</span> <span class="n">xymap</span><span class="o">=</span><span class="n">xymap</span><span class="p">,</span> <span class="n">directions</span><span class="o">=</span><span class="n">directions</span><span class="p">,</span>
<span class="n">step_sequence</span><span class="o">=</span><span class="n">step_sequence</span><span class="p">,</span> <span class="n">task</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
<span class="n">target</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">=</span><span class="n">xymap</span><span class="p">,</span>
<span class="n">directions</span><span class="o">=</span><span class="n">directions</span><span class="p">,</span>
<span class="n">step_sequence</span><span class="o">=</span><span class="n">step_sequence</span><span class="p">,</span>
<span class="n">task</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">step</span> <span class="ow">and</span> <span class="n">path_data</span><span class="p">:</span>
@ -327,7 +345,7 @@
<span class="n">xymap</span><span class="o">=</span><span class="n">path_data</span><span class="o">.</span><span class="n">xymap</span><span class="p">,</span>
<span class="n">directions</span><span class="o">=</span><span class="n">directions</span><span class="p">,</span>
<span class="n">step_sequence</span><span class="o">=</span><span class="n">step_sequence</span><span class="p">,</span>
<span class="n">task</span><span class="o">=</span><span class="kc">None</span>
<span class="n">task</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># the map can itself tell the stepper to stop the auto-step prematurely</span>
<span class="n">interrupt_node_or_link</span> <span class="o">=</span> <span class="kc">None</span>
@ -343,7 +361,8 @@
<span class="c1"># the exit name does not need to be the same as the cardinal direction!</span>
<span class="n">exit_name</span><span class="p">,</span> <span class="o">*</span><span class="n">_</span> <span class="o">=</span> <span class="n">first_link</span><span class="o">.</span><span class="n">spawn_aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">direction</span><span class="p">,</span> <span class="n">current_node</span><span class="o">.</span><span class="n">direction_spawn_defaults</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">direction</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;unknown&#39;</span><span class="p">,</span> <span class="p">)))</span>
<span class="n">direction</span><span class="p">,</span> <span class="n">current_node</span><span class="o">.</span><span class="n">direction_spawn_defaults</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">direction</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;unknown&quot;</span><span class="p">,))</span>
<span class="p">)</span>
<span class="n">exit_obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">exit_name</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">exit_obj</span><span class="p">:</span>
@ -357,13 +376,15 @@
<span class="c1"># premature stop of pathfind-step because of map node/link of interrupt type</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">interrupt_node_or_link</span><span class="p">,</span> <span class="s2">&quot;node_index&quot;</span><span class="p">):</span>
<span class="n">message</span> <span class="o">=</span> <span class="n">exit_obj</span><span class="o">.</span><span class="n">destination</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="s2">&quot;xyz_path_interrupt_msg&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">default_xyz_path_interrupt_msg</span><span class="p">)</span>
<span class="s2">&quot;xyz_path_interrupt_msg&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">default_xyz_path_interrupt_msg</span>
<span class="p">)</span>
<span class="c1"># we move into the node/room and then stop</span>
<span class="n">caller</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="n">exit_name</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># if the link is interrupted we don&#39;t cross it at all</span>
<span class="n">message</span> <span class="o">=</span> <span class="n">exit_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="s2">&quot;xyz_path_interrupt_msg&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">default_xyz_path_interrupt_msg</span><span class="p">)</span>
<span class="s2">&quot;xyz_path_interrupt_msg&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">default_xyz_path_interrupt_msg</span>
<span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">message</span><span class="p">)</span>
<span class="k">return</span>
@ -377,7 +398,7 @@
<span class="n">xymap</span><span class="o">=</span><span class="n">path_data</span><span class="o">.</span><span class="n">xymap</span><span class="p">,</span>
<span class="n">directions</span><span class="o">=</span><span class="n">path_data</span><span class="o">.</span><span class="n">directions</span><span class="p">,</span>
<span class="n">step_sequence</span><span class="o">=</span><span class="n">path_data</span><span class="o">.</span><span class="n">step_sequence</span><span class="p">,</span>
<span class="n">task</span><span class="o">=</span><span class="n">delay</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auto_step_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_auto_step</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">session</span><span class="p">)</span>
<span class="n">task</span><span class="o">=</span><span class="n">delay</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">auto_step_delay</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_auto_step</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">session</span><span class="p">),</span>
<span class="p">)</span>
<div class="viewcode-block" id="CmdGoto.func"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.commands.html#evennia.contrib.grid.xyzgrid.commands.CmdGoto.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -386,7 +407,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="n">goto_mode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdname</span> <span class="o">==</span> <span class="s1">&#39;goto&#39;</span>
<span class="n">goto_mode</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdname</span> <span class="o">==</span> <span class="s2">&quot;goto&quot;</span>
<span class="c1"># check if we have an existing path</span>
<span class="n">path_data</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">xy_path_data</span>
@ -401,8 +422,7 @@
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Aborted auto-walking to </span><span class="si">{</span><span class="n">target_name</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># goto/path-command will show current path</span>
<span class="n">current_path</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">(</span>
<span class="p">[</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">step</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">path_data</span><span class="o">.</span><span class="n">directions</span><span class="p">])</span>
<span class="n">current_path</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">([</span><span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">step</span><span class="si">}</span><span class="s2">|n&quot;</span> <span class="k">for</span> <span class="n">step</span> <span class="ow">in</span> <span class="n">path_data</span><span class="o">.</span><span class="n">directions</span><span class="p">])</span>
<span class="n">moving</span> <span class="o">=</span> <span class="s2">&quot;(moving)&quot;</span> <span class="k">if</span> <span class="n">task</span> <span class="ow">and</span> <span class="n">task</span><span class="o">.</span><span class="n">active</span><span class="p">()</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Path to </span><span class="si">{</span><span class="n">target_name</span><span class="si">}{</span><span class="n">moving</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">current_path</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
@ -447,12 +467,21 @@
<span class="n">xy_end</span> <span class="o">=</span> <span class="n">xyz_end</span><span class="p">[:</span><span class="mi">2</span><span class="p">]</span>
<span class="n">directions</span><span class="p">,</span> <span class="n">step_sequence</span> <span class="o">=</span> <span class="n">xymap</span><span class="o">.</span><span class="n">get_shortest_path</span><span class="p">(</span><span class="n">xy_start</span><span class="p">,</span> <span class="n">xy_end</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;There are </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">directions</span><span class="p">)</span><span class="si">}</span><span class="s2"> steps to </span><span class="si">{</span><span class="n">target</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="si">}</span><span class="s2">: &quot;</span>
<span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">list_to_string</span><span class="p">(</span><span class="n">directions</span><span class="p">,</span> <span class="n">endsep</span><span class="o">=</span><span class="s1">&#39;|n, and finally|w&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">|n&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;There are </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">directions</span><span class="p">)</span><span class="si">}</span><span class="s2"> steps to </span><span class="si">{</span><span class="n">target</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="si">}</span><span class="s2">: &quot;</span>
<span class="sa">f</span><span class="s2">&quot;|w</span><span class="si">{</span><span class="n">list_to_string</span><span class="p">(</span><span class="n">directions</span><span class="p">,</span> <span class="n">endsep</span><span class="o">=</span><span class="s1">&#39;|n, and finally|w&#39;</span><span class="p">)</span><span class="si">}</span><span class="s2">|n&quot;</span>
<span class="p">)</span>
<span class="c1"># create data for display and start stepping if we used goto</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_auto_step</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">,</span> <span class="n">target</span><span class="o">=</span><span class="n">target</span><span class="p">,</span> <span class="n">xymap</span><span class="o">=</span><span class="n">xymap</span><span class="p">,</span>
<span class="n">directions</span><span class="o">=</span><span class="n">directions</span><span class="p">,</span> <span class="n">step_sequence</span><span class="o">=</span><span class="n">step_sequence</span><span class="p">,</span> <span class="n">step</span><span class="o">=</span><span class="n">goto_mode</span><span class="p">)</span></div></div>
<span class="bp">self</span><span class="o">.</span><span class="n">_auto_step</span><span class="p">(</span>
<span class="n">caller</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">,</span>
<span class="n">target</span><span class="o">=</span><span class="n">target</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">=</span><span class="n">xymap</span><span class="p">,</span>
<span class="n">directions</span><span class="o">=</span><span class="n">directions</span><span class="p">,</span>
<span class="n">step_sequence</span><span class="o">=</span><span class="n">step_sequence</span><span class="p">,</span>
<span class="n">step</span><span class="o">=</span><span class="n">goto_mode</span><span class="p">,</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdMap"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.commands.html#evennia.contrib.grid.xyzgrid.commands.CmdMap">[docs]</a><span class="k">class</span> <span class="nc">CmdMap</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
@ -466,6 +495,7 @@
<span class="sd"> This is a builder-command.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;map&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:perm(Builders)&quot;</span>
@ -495,8 +525,10 @@
<span class="n">xymap</span> <span class="o">=</span> <span class="n">xyzgrid</span><span class="o">.</span><span class="n">get_map</span><span class="p">(</span><span class="n">Z</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">xymap</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;XYMap &#39;</span><span class="si">{</span><span class="n">Z</span><span class="si">}</span><span class="s2">&#39; is not found on the grid. Try &#39;map list&#39; to see &quot;</span>
<span class="s2">&quot;available maps/Zcoords.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;XYMap &#39;</span><span class="si">{</span><span class="n">Z</span><span class="si">}</span><span class="s2">&#39; is not found on the grid. Try &#39;map list&#39; to see &quot;</span>
<span class="s2">&quot;available maps/Zcoords.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">ansi</span><span class="o">.</span><span class="n">raw</span><span class="p">(</span><span class="n">xymap</span><span class="o">.</span><span class="n">mapstring</span><span class="p">))</span></div></div>
@ -507,6 +539,7 @@
<span class="sd"> Cmdset for easily adding the above cmds to the character cmdset.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;xyzgrid_cmdset&quot;</span>
<div class="viewcode-block" id="XYZGridCmdSet.at_cmdset_creation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.commands.html#evennia.contrib.grid.xyzgrid.commands.XYZGridCmdSet.at_cmdset_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_cmdset_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -123,14 +123,13 @@
<span class="sd"> into a room but only acts as a target for finding the exit&#39;s destination.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;T&#39;</span>
<span class="n">target_map_xyz</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;the small cave&#39;</span><span class="p">)</span></div>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;T&quot;</span>
<span class="n">target_map_xyz</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;the small cave&quot;</span><span class="p">)</span></div>
<span class="c1"># extends the default legend</span>
<span class="n">LEGEND_MAP1</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;T&#39;</span><span class="p">:</span> <span class="n">TransitionToCave</span>
<span class="p">}</span>
<span class="n">LEGEND_MAP1</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="n">TransitionToCave</span><span class="p">}</span>
<span class="c1"># link coordinates to rooms</span>
@ -138,70 +137,62 @@
<span class="c1"># node/room prototypes</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Dungeon Entrance&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;To the east, a narrow opening leads into darkness.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;To the east, a narrow opening leads into darkness.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">1</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Under the foilage of a giant tree&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;High above the branches of a giant tree blocks out the sunlight. A slide &quot;</span>
<span class="s2">&quot;leading down from the upper branches ends here.&quot;</span>
<span class="s2">&quot;leading down from the upper branches ends here.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">4</span><span class="p">,</span> <span class="mi">4</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;The slide&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A slide leads down to the ground from here. It looks like a one-way trip.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A slide leads down to the ground from here. It looks like a one-way trip.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">6</span><span class="p">,</span> <span class="mi">1</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Thorny path&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;To the east is a pathway of thorns. If you get through, you don&#39;t think you&#39;ll be &quot;</span>
<span class="s2">&quot;able to get back here the same way.&quot;</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">1</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;By a large tree&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;You are standing at the root of a great tree.&quot;</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;At the top of the tree&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;You are at the top of the tree.&quot;</span>
<span class="s2">&quot;able to get back here the same way.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">1</span><span class="p">):</span> <span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;By a large tree&quot;</span><span class="p">,</span> <span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;You are standing at the root of a great tree.&quot;</span><span class="p">},</span>
<span class="p">(</span><span class="mi">8</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span> <span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;At the top of the tree&quot;</span><span class="p">,</span> <span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;You are at the top of the tree.&quot;</span><span class="p">},</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">7</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Dense foilage&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;The foilage to the east is extra dense. It will take forever to get through it.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;The foilage to the east is extra dense. It will take forever to get through it.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">6</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;On a huge branch&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;To the east is a glowing light, may be a teleporter to a higher branch.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;To the east is a glowing light, may be a teleporter to a higher branch.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">9</span><span class="p">,</span> <span class="mi">7</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;On an enormous branch&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;To the west is a glowing light. It may be a teleporter to a lower branch.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;To the west is a glowing light. It may be a teleporter to a lower branch.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="mi">8</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;A gorgeous view&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;The view from here is breathtaking, showing the forest stretching far and wide.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;The view from here is breathtaking, showing the forest stretching far and wide.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="c1"># default rooms</span>
<span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">):</span> <span class="p">{</span>
<span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Among the branches of a giant tree&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;These branches are wide enough to easily walk on. There&#39;s green all around.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;These branches are wide enough to easily walk on. There&#39;s green all around.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="c1"># directional prototypes</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark passage into the underworld.&quot;</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;e&quot;</span><span class="p">):</span> <span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark passage into the underworld.&quot;</span><span class="p">},</span>
<span class="p">}</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">PROTOTYPES_MAP1</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="c1"># we don&#39;t want to give exits the room typeclass!</span>
<span class="n">prot</span><span class="p">[</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ROOM_PARENT</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ROOM_PARENT</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">prot</span><span class="p">[</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">EXIT_PARENT</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">EXIT_PARENT</span>
<span class="n">XYMAP_DATA_MAP1</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;zcoord&quot;</span><span class="p">:</span> <span class="s2">&quot;the large tree&quot;</span><span class="p">,</span>
<span class="s2">&quot;map&quot;</span><span class="p">:</span> <span class="n">MAP1</span><span class="p">,</span>
<span class="s2">&quot;legend&quot;</span><span class="p">:</span> <span class="n">LEGEND_MAP1</span><span class="p">,</span>
<span class="s2">&quot;prototypes&quot;</span><span class="p">:</span> <span class="n">PROTOTYPES_MAP1</span>
<span class="s2">&quot;prototypes&quot;</span><span class="p">:</span> <span class="n">PROTOTYPES_MAP1</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># -------------------------------------- map2</span>
@ -230,14 +221,13 @@
<span class="sd"> into a room by only acts as a target for finding the exit&#39;s destination.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;T&#39;</span>
<span class="n">target_map_xyz</span> <span class="o">=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;the large tree&#39;</span><span class="p">)</span></div>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;T&quot;</span>
<span class="n">target_map_xyz</span> <span class="o">=</span> <span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;the large tree&quot;</span><span class="p">)</span></div>
<span class="c1"># this extends the default legend (that defines #,-+ etc)</span>
<span class="n">LEGEND_MAP2</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="n">TransitionToLargeTree</span>
<span class="p">}</span>
<span class="n">LEGEND_MAP2</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;T&quot;</span><span class="p">:</span> <span class="n">TransitionToLargeTree</span><span class="p">}</span>
<span class="c1"># prototypes for specific locations</span>
<span class="n">PROTOTYPES_MAP2</span> <span class="o">=</span> <span class="p">{</span>
@ -245,64 +235,54 @@
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;The entrance&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;This is the entrance to a small cave leading into the ground. &quot;</span>
<span class="s2">&quot;Light sifts in from the outside, while cavernous passages disappear &quot;</span>
<span class="s2">&quot;into darkness.&quot;</span>
<span class="s2">&quot;Light sifts in from the outside, while cavernous passages disappear &quot;</span>
<span class="s2">&quot;into darkness.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">0</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;A gruesome sight.&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;Something was killed here recently. The smell is unbearable.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;Something was killed here recently. The smell is unbearable.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark pathway&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;The path splits three ways here. To the north a faint light can be seen.&quot;</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;The path splits three ways here. To the north a faint light can be seen.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Stagnant water&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A pool of stagnant, black water dominates this small chamber. To the nortwest &quot;</span>
<span class="s2">&quot;a faint light can be seen.&quot;</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark alcove&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;This alcove is empty.&quot;</span>
<span class="s2">&quot;a faint light can be seen.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> <span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark alcove&quot;</span><span class="p">,</span> <span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;This alcove is empty.&quot;</span><span class="p">},</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;South-west corner of the atrium&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;Sunlight sifts down into a large underground chamber. Weeds and grass sprout &quot;</span>
<span class="s2">&quot;between the stones.&quot;</span>
<span class="s2">&quot;between the stones.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">2</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;South-east corner of the atrium&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;Sunlight sifts down into a large underground chamber. Weeds and grass sprout &quot;</span>
<span class="s2">&quot;between the stones.&quot;</span>
<span class="s2">&quot;between the stones.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;North-west corner of the atrium&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;Sunlight sifts down into a large underground chamber. Weeds and grass sprout &quot;</span>
<span class="s2">&quot;between the stones.&quot;</span>
<span class="s2">&quot;between the stones.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;North-east corner of the atrium&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;Sunlight sifts down into a large underground chamber. Weeds and grass sprout &quot;</span>
<span class="s2">&quot;between the stones. To the east is a dark passage.&quot;</span>
<span class="s2">&quot;between the stones. To the east is a dark passage.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="mi">3</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;Craggy crevice&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;This is the deepest part of the dungeon. The path shrinks away and there &quot;</span>
<span class="s2">&quot;is no way to continue deeper.&quot;</span>
<span class="s2">&quot;is no way to continue deeper.&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="c1"># default fallback for undefined nodes</span>
<span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark room&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark, but empty, room.&quot;</span>
<span class="p">},</span>
<span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">):</span> <span class="p">{</span><span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark room&quot;</span><span class="p">,</span> <span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark, but empty, room.&quot;</span><span class="p">},</span>
<span class="c1"># directional prototypes</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A narrow path to the fresh air of the outside world.&quot;</span>
<span class="p">},</span>
<span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">):</span> <span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A narrow path to the fresh air of the outside world.&quot;</span><span class="p">},</span>
<span class="c1"># directional fallbacks for unset directions</span>
<span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">):</span> <span class="p">{</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark passage&quot;</span>
<span class="p">}</span>
<span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">):</span> <span class="p">{</span><span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;A dark passage&quot;</span><span class="p">},</span>
<span class="p">}</span>
<span class="c1"># this is required by the prototypes, but we add it all at once so we don&#39;t</span>
@ -310,9 +290,9 @@
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">PROTOTYPES_MAP2</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="c1"># we don&#39;t want to give exits the room typeclass!</span>
<span class="n">prot</span><span class="p">[</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ROOM_PARENT</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">ROOM_PARENT</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">prot</span><span class="p">[</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">EXIT_PARENT</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">EXIT_PARENT</span>
<span class="n">XYMAP_DATA_MAP2</span> <span class="o">=</span> <span class="p">{</span>
@ -320,17 +300,11 @@
<span class="s2">&quot;zcoord&quot;</span><span class="p">:</span> <span class="s2">&quot;the small cave&quot;</span><span class="p">,</span>
<span class="s2">&quot;legend&quot;</span><span class="p">:</span> <span class="n">LEGEND_MAP2</span><span class="p">,</span>
<span class="s2">&quot;prototypes&quot;</span><span class="p">:</span> <span class="n">PROTOTYPES_MAP2</span><span class="p">,</span>
<span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="s2">&quot;map_visual_range&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">&quot;map_mode&quot;</span><span class="p">:</span> <span class="s1">&#39;scan&#39;</span>
<span class="p">}</span>
<span class="s2">&quot;options&quot;</span><span class="p">:</span> <span class="p">{</span><span class="s2">&quot;map_visual_range&quot;</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span> <span class="s2">&quot;map_mode&quot;</span><span class="p">:</span> <span class="s2">&quot;scan&quot;</span><span class="p">},</span>
<span class="p">}</span>
<span class="c1"># This is read by the parser</span>
<span class="n">XYMAP_DATA_LIST</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">XYMAP_DATA_MAP1</span><span class="p">,</span>
<span class="n">XYMAP_DATA_MAP2</span>
<span class="p">]</span>
<span class="n">XYMAP_DATA_LIST</span> <span class="o">=</span> <span class="p">[</span><span class="n">XYMAP_DATA_MAP1</span><span class="p">,</span> <span class="n">XYMAP_DATA_MAP2</span><span class="p">]</span>
</pre></div>
<div class="clearer"></div>

View file

@ -202,11 +202,12 @@
<span class="s2">&quot;add&quot;</span><span class="p">:</span> <span class="n">_HELP_ADD</span><span class="p">,</span>
<span class="s2">&quot;spawn&quot;</span><span class="p">:</span> <span class="n">_HELP_SPAWN</span><span class="p">,</span>
<span class="s2">&quot;initpath&quot;</span><span class="p">:</span> <span class="n">_HELP_INITPATH</span><span class="p">,</span>
<span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="n">_HELP_DELETE</span>
<span class="s2">&quot;delete&quot;</span><span class="p">:</span> <span class="n">_HELP_DELETE</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">evennia</span><span class="o">.</span><span class="n">_init</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">_option_help</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Show help &lt;command&gt; aid.</span>
@ -230,6 +231,7 @@
<span class="c1"># override grid&#39;s logger to echo directly to console</span>
<span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<span class="n">xyzgrid</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">_log</span>
<span class="n">xymap_data</span> <span class="o">=</span> <span class="n">xyzgrid</span><span class="o">.</span><span class="n">grid</span>
@ -252,7 +254,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">xymap</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No XYMap with Z=&#39;</span><span class="si">{</span><span class="n">zcoord</span><span class="si">}</span><span class="s2">&#39; was found on grid.&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">nrooms</span> <span class="o">=</span> <span class="n">xyzgrid</span><span class="o">.</span><span class="n">get_room</span><span class="p">((</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="n">zcoord</span><span class="p">))</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
<span class="n">nrooms</span> <span class="o">=</span> <span class="n">xyzgrid</span><span class="o">.</span><span class="n">get_room</span><span class="p">((</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="n">zcoord</span><span class="p">))</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">xymap</span><span class="o">.</span><span class="n">node_index_map</span><span class="p">)</span>
<span class="nb">print</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="nb">str</span><span class="p">(</span><span class="nb">repr</span><span class="p">(</span><span class="n">xymap</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;:</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">checkwarning</span> <span class="o">=</span> <span class="kc">True</span>
@ -260,22 +262,29 @@
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">nrooms</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> rooms are spawned.&quot;</span><span class="p">)</span>
<span class="n">checkwarning</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">elif</span> <span class="n">nrooms</span> <span class="o">&lt;</span> <span class="n">nnodes</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">nrooms</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> rooms are spawned</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Note: Transitional nodes are *not* spawned (they just point </span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;to another map), so the &#39;missing room(s)&#39; may just be from such nodes.&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">nrooms</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> rooms are spawned</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Note: Transitional nodes are *not* spawned (they just point </span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;to another map), so the &#39;missing room(s)&#39; may just be from such nodes.&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">nrooms</span> <span class="o">&gt;</span> <span class="n">nnodes</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">nrooms</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> rooms are spawned</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Note: Maybe some rooms were removed from map. Run &#39;spawn&#39; to re-sync.&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">nrooms</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> rooms are spawned</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Note: Maybe some rooms were removed from map. Run &#39;spawn&#39; to re-sync.&quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">nrooms</span><span class="si">}</span><span class="s2"> / </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> rooms are spawned</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">checkwarning</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Note: This check is not complete; it does not consider changed map &quot;</span>
<span class="s2">&quot;topology</span><span class="se">\n</span><span class="s2">like relocated nodes/rooms and new/removed links/exits - this &quot;</span>
<span class="s2">&quot;is calculated only during a spawn.&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;Note: This check is not complete; it does not consider changed map &quot;</span>
<span class="s2">&quot;topology</span><span class="se">\n</span><span class="s2">like relocated nodes/rooms and new/removed links/exits - this &quot;</span>
<span class="s2">&quot;is calculated only during a spawn.&quot;</span>
<span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Displayed map (as appearing in-game):</span><span class="se">\n\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">ansi</span><span class="o">.</span><span class="n">parse_ansi</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">xymap</span><span class="p">)))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Raw map string (including axes and invisible nodes/links):</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">xymap</span><span class="o">.</span><span class="n">mapstring</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Raw map string (including axes and invisible nodes/links):</span><span class="se">\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">xymap</span><span class="o">.</span><span class="n">mapstring</span><span class="p">)</span>
<span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Custom map options: </span><span class="si">{</span><span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">legend</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">node_or_link</span> <span class="ow">in</span> <span class="n">xymap</span><span class="o">.</span><span class="n">legend</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
@ -302,6 +311,7 @@
<span class="c1"># override grid&#39;s logger to echo directly to console</span>
<span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">_log</span>
<span class="n">xymap_data_list</span> <span class="o">=</span> <span class="p">[]</span>
@ -332,35 +342,44 @@
<span class="c1"># override grid&#39;s logger to echo directly to console</span>
<span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">_log</span>
<span class="k">if</span> <span class="n">suboptions</span><span class="p">:</span>
<span class="n">opts</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">suboptions</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;()&#39;</span><span class="p">)</span>
<span class="n">opts</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">suboptions</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;()&quot;</span><span class="p">)</span>
<span class="c1"># coordinate tuple</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">opts</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="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;spawn coordinate must be given as (X, Y, Z) tuple, where &#39;*&#39; act &quot;</span>
<span class="s2">&quot;wild cards and Z is the mapname/z-coord of the map to load.&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;spawn coordinate must be given as (X, Y, Z) tuple, where &#39;*&#39; act &quot;</span>
<span class="s2">&quot;wild cards and Z is the mapname/z-coord of the map to load.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">y</span> <span class="o">==</span> <span class="n">z</span> <span class="o">==</span> <span class="s1">&#39;*&#39;</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&quot;This will (re)spawn the entire grid. If it was built before, it may spawn </span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;new rooms or delete rooms that no longer matches the grid.</span><span class="se">\n</span><span class="s2">Do you want to &quot;</span>
<span class="s2">&quot;continue? [Y]/N? &quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">y</span> <span class="o">==</span> <span class="n">z</span> <span class="o">==</span> <span class="s2">&quot;*&quot;</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span>
<span class="s2">&quot;This will (re)spawn the entire grid. If it was built before, it may spawn </span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;new rooms or delete rooms that no longer matches the grid.</span><span class="se">\n</span><span class="s2">Do you want to &quot;</span>
<span class="s2">&quot;continue? [Y]/N? &quot;</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&quot;This will spawn/delete objects in the database matching grid coordinates </span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">) (where &#39;*&#39; is a wildcard).</span><span class="se">\n</span><span class="s2">Do you want to continue? [Y]/N? &quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">inp</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;no&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">):</span>
<span class="n">inp</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span>
<span class="s2">&quot;This will spawn/delete objects in the database matching grid coordinates </span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="sa">f</span><span class="s2">&quot;(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">) (where &#39;*&#39; is a wildcard).</span><span class="se">\n</span><span class="s2">Do you want to continue? [Y]/N? &quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">inp</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;no&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Beginner-Tutorial spawn ...&quot;</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">spawn</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;... spawn complete!</span><span class="se">\n</span><span class="s2">It&#39;s recommended to reload the server to refresh caches if this &quot;</span>
<span class="s2">&quot;modified an existing grid.&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;... spawn complete!</span><span class="se">\n</span><span class="s2">It&#39;s recommended to reload the server to refresh caches if this &quot;</span>
<span class="s2">&quot;modified an existing grid.&quot;</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">_option_initpath</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">):</span>
@ -373,6 +392,7 @@
<span class="c1"># override grid&#39;s logger to echo directly to console</span>
<span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">_log</span>
<span class="n">xymaps</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">all_maps</span><span class="p">()</span>
@ -396,19 +416,24 @@
<span class="c1"># override grid&#39;s logger to echo directly to console</span>
<span class="k">def</span> <span class="nf">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">log</span> <span class="o">=</span> <span class="n">_log</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">suboptions</span><span class="p">:</span>
<span class="n">repl</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&quot;WARNING: This will delete the ENTIRE Grid and wipe all rooms/exits!&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Objects/Chars inside deleted rooms will be moved to their home locations.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">This can&#39;t be undone. Are you sure you want to continue? Y/[N]? &quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">repl</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;yes&#39;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">):</span>
<span class="n">repl</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span>
<span class="s2">&quot;WARNING: This will delete the ENTIRE Grid and wipe all rooms/exits!&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Objects/Chars inside deleted rooms will be moved to their home locations.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">This can&#39;t be undone. Are you sure you want to continue? Y/[N]? &quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">repl</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Deleting grid ...&quot;</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;... done.</span><span class="se">\n</span><span class="s2">Please reload the server now; otherwise &quot;</span>
<span class="s2">&quot;removed rooms may linger in cache.&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;... done.</span><span class="se">\n</span><span class="s2">Please reload the server now; otherwise &quot;</span>
<span class="s2">&quot;removed rooms may linger in cache.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="n">zcoords</span> <span class="o">=</span> <span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">suboptions</span><span class="p">)</span>
@ -418,21 +443,24 @@
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Mapname/zcoord </span><span class="si">{</span><span class="n">zcoord</span><span class="si">}</span><span class="s2"> is not a part of the grid.&quot;</span><span class="p">)</span>
<span class="n">err</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">err</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Valid mapnames/zcoords are</span><span class="se">\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="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">Z</span> <span class="k">for</span> <span class="n">xymap</span> <span class="ow">in</span> <span class="n">grid</span><span class="o">.</span><span class="n">all_rooms</span><span class="p">()))</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Valid mapnames/zcoords are</span><span class="se">\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="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">xymap</span><span class="o">.</span><span class="n">Z</span> <span class="k">for</span> <span class="n">xymap</span> <span class="ow">in</span> <span class="n">grid</span><span class="o">.</span><span class="n">all_rooms</span><span class="p">()))</span>
<span class="k">return</span>
<span class="n">repl</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span><span class="s2">&quot;This will delete map(s) {&#39;, &#39;.join(zcoords)} and wipe all corresponding</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;rooms/exits!&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Objects/Chars inside deleted rooms will be moved to their home locations.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">This can&#39;t be undone. Are you sure you want to continue? Y/[N]? &quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">repl</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;yes&#39;</span><span class="p">,</span> <span class="s1">&#39;y&#39;</span><span class="p">):</span>
<span class="n">repl</span> <span class="o">=</span> <span class="nb">input</span><span class="p">(</span>
<span class="s2">&quot;This will delete map(s) {&#39;, &#39;.join(zcoords)} and wipe all corresponding</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;rooms/exits!&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Objects/Chars inside deleted rooms will be moved to their home locations.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">This can&#39;t be undone. Are you sure you want to continue? Y/[N]? &quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">repl</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="s2">&quot;y&quot;</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Aborted.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Deleting selected xymaps ...&quot;</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">remove_map</span><span class="p">(</span><span class="o">*</span><span class="n">zcoords</span><span class="p">,</span> <span class="n">remove_objects</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;... done.</span><span class="se">\n</span><span class="s2">Please reload the server to refresh room caches.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Also remember to remove any links from remaining maps pointing to deleted maps.&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot;... done.</span><span class="se">\n</span><span class="s2">Please reload the server to refresh room caches.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">Also remember to remove any links from remaining maps pointing to deleted maps.&quot;</span>
<span class="p">)</span>
<div class="viewcode-block" id="xyzcommand"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.launchcmd.html#evennia.contrib.grid.xyzgrid.launchcmd.xyzcommand">[docs]</a><span class="k">def</span> <span class="nf">xyzcommand</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">):</span>
@ -447,23 +475,22 @@
<span class="n">option</span><span class="p">,</span> <span class="o">*</span><span class="n">suboptions</span> <span class="o">=</span> <span class="n">args</span>
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;help&#39;</span><span class="p">,</span> <span class="s1">&#39;h&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;help&quot;</span><span class="p">,</span> <span class="s2">&quot;h&quot;</span><span class="p">):</span>
<span class="n">_option_help</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">)</span>
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;list&#39;</span><span class="p">,</span> <span class="s1">&#39;show&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;list&quot;</span><span class="p">,</span> <span class="s2">&quot;show&quot;</span><span class="p">):</span>
<span class="n">_option_list</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s1">&#39;init&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s2">&quot;init&quot;</span><span class="p">:</span>
<span class="n">_option_init</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s1">&#39;add&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s2">&quot;add&quot;</span><span class="p">:</span>
<span class="n">_option_add</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s1">&#39;spawn&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s2">&quot;spawn&quot;</span><span class="p">:</span>
<span class="n">_option_spawn</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s1">&#39;initpath&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s2">&quot;initpath&quot;</span><span class="p">:</span>
<span class="n">_option_initpath</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s1">&#39;delete&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">option</span> <span class="o">==</span> <span class="s2">&quot;delete&quot;</span><span class="p">:</span>
<span class="n">_option_delete</span><span class="p">(</span><span class="o">*</span><span class="n">suboptions</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Unknown option &#39;</span><span class="si">{</span><span class="n">option</span><span class="si">}</span><span class="s2">&#39;. Use &#39;evennia xyzgrid help&#39; for valid arguments.&quot;</span><span class="p">)</span></div>
</pre></div>
<div class="clearer"></div>

File diff suppressed because it is too large Load diff

View file

@ -72,13 +72,15 @@
<span class="c1"># errors for Map system</span>
<div class="viewcode-block" id="MapError"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.utils.html#evennia.contrib.grid.xyzgrid.utils.MapError">[docs]</a><span class="k">class</span> <span class="nc">MapError</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
<div class="viewcode-block" id="MapError"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.utils.html#evennia.contrib.grid.xyzgrid.utils.MapError">[docs]</a><span class="k">class</span> <span class="nc">MapError</span><span class="p">(</span><span class="ne">RuntimeError</span><span class="p">):</span>
<div class="viewcode-block" id="MapError.__init__"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.utils.html#evennia.contrib.grid.xyzgrid.utils.MapError.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">error</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">node_or_link</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">node_or_link</span><span class="p">:</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> &#39;</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">symbol</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;at XYZ=(</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">X</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">Y</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">Z</span><span class="si">}</span><span class="s2">) &quot;</span><span class="p">)</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> &#39;</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">symbol</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;at XYZ=(</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">X</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">Y</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">Z</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">node_or_link</span> <span class="o">=</span> <span class="n">node_or_link</span>
<span class="bp">self</span><span class="o">.</span><span class="n">message</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">prefix</span><span class="si">}{</span><span class="n">error</span><span class="si">}</span><span class="s2">&quot;</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="bp">self</span><span class="o">.</span><span class="n">message</span><span class="p">)</span></div></div>
@ -94,6 +96,7 @@
<span class="sd"> leads to another map.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
</pre></div>

View file

@ -146,7 +146,8 @@
<span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ImportError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="se">\n</span><span class="s2">The XYZgrid contrib requires &quot;</span>
<span class="s2">&quot;the SciPy package. Install with `pip install scipy&#39;.&quot;</span><span class="p">)</span>
<span class="s2">&quot;the SciPy package. Install with `pip install scipy&#39;.&quot;</span>
<span class="p">)</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">variable_from_module</span><span class="p">,</span> <span class="n">mod_import</span><span class="p">,</span> <span class="n">is_iter</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
@ -164,9 +165,7 @@
<span class="n">_LOADED_PROTOTYPES</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_XYZROOMCLASS</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">MAP_DATA_KEYS</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;zcoord&quot;</span><span class="p">,</span> <span class="s2">&quot;map&quot;</span><span class="p">,</span> <span class="s2">&quot;legend&quot;</span><span class="p">,</span> <span class="s2">&quot;prototypes&quot;</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="s2">&quot;module_path&quot;</span>
<span class="p">]</span>
<span class="n">MAP_DATA_KEYS</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;zcoord&quot;</span><span class="p">,</span> <span class="s2">&quot;map&quot;</span><span class="p">,</span> <span class="s2">&quot;legend&quot;</span><span class="p">,</span> <span class="s2">&quot;prototypes&quot;</span><span class="p">,</span> <span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="s2">&quot;module_path&quot;</span><span class="p">]</span>
<span class="n">DEFAULT_LEGEND</span> <span class="o">=</span> <span class="n">xymap_legend</span><span class="o">.</span><span class="n">LEGEND</span>
@ -214,11 +213,11 @@
<span class="sd"> but recommended for readability!</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">mapcorner_symbol</span> <span class="o">=</span> <span class="s1">&#39;+&#39;</span>
<span class="n">mapcorner_symbol</span> <span class="o">=</span> <span class="s2">&quot;+&quot;</span>
<span class="n">max_pathfinding_length</span> <span class="o">=</span> <span class="mi">500</span>
<span class="n">empty_symbol</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span>
<span class="n">empty_symbol</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
<span class="c1"># we normally only accept one single character for the legend key</span>
<span class="n">legend_key_exceptions</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">legend_key_exceptions</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span>
<div class="viewcode-block" id="XYMap.__init__"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">map_module_or_dict</span><span class="p">,</span> <span class="n">Z</span><span class="o">=</span><span class="s2">&quot;map&quot;</span><span class="p">,</span> <span class="n">xyzgrid</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -252,7 +251,9 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">_LOADED_PROTOTYPES</span><span class="p">:</span>
<span class="c1"># inject default prototypes, but don&#39;t override prototype-keys loaded from</span>
<span class="c1"># settings, if they exist (that means the user wants to replace the defaults)</span>
<span class="n">protlib</span><span class="o">.</span><span class="n">load_module_prototypes</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.grid.xyzgrid.prototypes&quot;</span><span class="p">,</span> <span class="n">override</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="n">protlib</span><span class="o">.</span><span class="n">load_module_prototypes</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.grid.xyzgrid.prototypes&quot;</span><span class="p">,</span> <span class="n">override</span><span class="o">=</span><span class="kc">False</span>
<span class="p">)</span>
<span class="n">_LOADED_PROTOTYPES</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Z</span> <span class="o">=</span> <span class="n">Z</span>
@ -306,7 +307,7 @@
<span class="n">nnodes</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">node_index_map</span><span class="p">:</span>
<span class="n">nnodes</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node_index_map</span><span class="p">)</span>
<span class="k">return</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;&lt;XYMap(Z=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_X</span> <span class="o">+</span> <span class="mi">1</span><span class="si">}</span><span class="s2">x</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_Y</span> <span class="o">+</span> <span class="mi">1</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> nodes&gt;&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;XYMap(Z=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="si">}</span><span class="s2">), </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_X</span> <span class="o">+</span> <span class="mi">1</span><span class="si">}</span><span class="s2">x</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_Y</span> <span class="o">+</span> <span class="mi">1</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">nnodes</span><span class="si">}</span><span class="s2"> nodes&gt;&quot;</span>
<div class="viewcode-block" id="XYMap.log"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.log">[docs]</a> <span class="k">def</span> <span class="nf">log</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">msg</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">xyzgrid</span><span class="p">:</span>
@ -359,34 +360,41 @@
<span class="n">mapdata</span> <span class="o">=</span> <span class="n">variable_from_module</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;XYMAP_DATA&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">mapdata</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="s2">&quot;No valid XYMAP_DATA or XYMAP_DATA_LIST could be found from &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">map_module_or_dict</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span>
<span class="s2">&quot;No valid XYMAP_DATA or XYMAP_DATA_LIST could be found from &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">map_module_or_dict</span><span class="si">}</span><span class="s2">.&quot;</span>
<span class="p">)</span>
<span class="c1"># validate</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">mapdata</span> <span class="k">if</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">MAP_DATA_KEYS</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Mapdata has keys </span><span class="si">{</span><span class="nb">list</span><span class="p">(</span><span class="n">mapdata</span><span class="p">)</span><span class="si">}</span><span class="s2">, but only &quot;</span>
<span class="sa">f</span><span class="s2">&quot;keys </span><span class="si">{</span><span class="n">MAP_DATA_KEYS</span><span class="si">}</span><span class="s2"> are allowed.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Mapdata has keys </span><span class="si">{</span><span class="nb">list</span><span class="p">(</span><span class="n">mapdata</span><span class="p">)</span><span class="si">}</span><span class="s2">, but only &quot;</span> <span class="sa">f</span><span class="s2">&quot;keys </span><span class="si">{</span><span class="n">MAP_DATA_KEYS</span><span class="si">}</span><span class="s2"> are allowed.&quot;</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;legend&#39;</span><span class="p">,</span> <span class="n">DEFAULT_LEGEND</span><span class="p">):</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;legend&quot;</span><span class="p">,</span> <span class="n">DEFAULT_LEGEND</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">or</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</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="bp">self</span><span class="o">.</span><span class="n">legend_key_exceptions</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Map-legend key &#39;</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39; is invalid: All keys must &quot;</span>
<span class="s2">&quot;be exactly one character long. Use the node/link&#39;s &quot;</span>
<span class="s2">&quot;`.display_symbol` property to change how it is &quot;</span>
<span class="s2">&quot;displayed.&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="s1">&#39;map&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mapdata</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">mapdata</span><span class="p">[</span><span class="s1">&#39;map&#39;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Map-legend key &#39;</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39; is invalid: All keys must &quot;</span>
<span class="s2">&quot;be exactly one character long. Use the node/link&#39;s &quot;</span>
<span class="s2">&quot;`.display_symbol` property to change how it is &quot;</span>
<span class="s2">&quot;displayed.&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;map&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mapdata</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">mapdata</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]:</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="s2">&quot;No map found. Add &#39;map&#39; key to map-data dict.&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">prototype</span> <span class="ow">in</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prototypes&#39;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">prototype</span> <span class="ow">in</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototypes&quot;</span><span class="p">,</span> <span class="p">{})</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">is_iter</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">2</span> <span class="o">&lt;=</span> <span class="nb">len</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="o">&lt;=</span> <span class="mi">3</span><span class="p">)):</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Prototype override key </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2"> is malformed: It must be a &quot;</span>
<span class="s2">&quot;coordinate (X, Y) for nodes or (X, Y, direction) for links; &quot;</span>
<span class="s2">&quot;where direction is a supported direction string (&#39;n&#39;, &#39;ne&#39;, etc).&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Prototype override key </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2"> is malformed: It must be a &quot;</span>
<span class="s2">&quot;coordinate (X, Y) for nodes or (X, Y, direction) for links; &quot;</span>
<span class="s2">&quot;where direction is a supported direction string (&#39;n&#39;, &#39;ne&#39;, etc).&quot;</span>
<span class="p">)</span>
<span class="c1"># store/update result</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Z</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;zcoord&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mapstring</span> <span class="o">=</span> <span class="n">mapdata</span><span class="p">[</span><span class="s1">&#39;map&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prototypes&#39;</span><span class="p">,</span> <span class="p">{})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;options&#39;</span><span class="p">,</span> <span class="p">{})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">Z</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;zcoord&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mapstring</span> <span class="o">=</span> <span class="n">mapdata</span><span class="p">[</span><span class="s2">&quot;map&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototypes&quot;</span><span class="p">,</span> <span class="p">{})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">options</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="p">{})</span>
<span class="c1"># merge the custom legend onto the default legend to allow easily</span>
<span class="c1"># overriding only parts of it</span>
@ -399,8 +407,9 @@
<span class="c1"># nothing more to do</span>
<span class="k">continue</span>
<span class="c1"># we need to load the prototype dict onto each for ease of access. Note that</span>
<span class="n">proto</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">require_single</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">no_db</span><span class="o">=</span><span class="n">_NO_DB_PROTOTYPES</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">proto</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span>
<span class="n">prototype</span><span class="p">,</span> <span class="n">require_single</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">no_db</span><span class="o">=</span><span class="n">_NO_DB_PROTOTYPES</span>
<span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">node_or_link_class</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="n">proto</span></div>
<div class="viewcode-block" id="XYMap.parse"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -433,7 +442,8 @@
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;The mapstring must have at least two &#39;</span><span class="si">{</span><span class="n">mapcorner_symbol</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;symbols marking the upper- and bottom-left corners of the &quot;</span>
<span class="s2">&quot;grid area.&quot;</span><span class="p">)</span>
<span class="s2">&quot;grid area.&quot;</span>
<span class="p">)</span>
<span class="c1"># find the the position (in the string as a whole) of the top-left corner-marker</span>
<span class="n">maplines</span> <span class="o">=</span> <span class="n">mapstring</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
@ -448,13 +458,15 @@
<span class="c1"># find the position (in the string as a whole) of the bottom-left corner-marker</span>
<span class="c1"># this is always in a stright line down from the first marker</span>
<span class="n">botleft_marker_x</span><span class="p">,</span> <span class="n">botleft_marker_y</span> <span class="o">=</span> <span class="n">topleft_marker_x</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span>
<span class="k">for</span> <span class="n">botleft_marker_y</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">maplines</span><span class="p">[</span><span class="n">topleft_marker_y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:]):</span>
<span class="k">for</span> <span class="n">botleft_marker_y</span><span class="p">,</span> <span class="n">line</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">maplines</span><span class="p">[</span><span class="n">topleft_marker_y</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]):</span>
<span class="k">if</span> <span class="n">line</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">mapcorner_symbol</span><span class="p">)</span> <span class="o">==</span> <span class="n">topleft_marker_x</span><span class="p">:</span>
<span class="k">break</span>
<span class="k">if</span> <span class="n">botleft_marker_y</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No bottom-left corner-marker (</span><span class="si">{</span><span class="n">mapcorner_symbol</span><span class="si">}</span><span class="s2">) found! &quot;</span>
<span class="s2">&quot;Make sure it lines up with the top-left corner-marker &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(found at column </span><span class="si">{</span><span class="n">topleft_marker_x</span><span class="si">}</span><span class="s2"> of the string).&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;No bottom-left corner-marker (</span><span class="si">{</span><span class="n">mapcorner_symbol</span><span class="si">}</span><span class="s2">) found! &quot;</span>
<span class="s2">&quot;Make sure it lines up with the top-left corner-marker &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(found at column </span><span class="si">{</span><span class="n">topleft_marker_x</span><span class="si">}</span><span class="s2"> of the string).&quot;</span>
<span class="p">)</span>
<span class="c1"># the actual coordinate is dy below the topleft marker so we need to shift</span>
<span class="n">botleft_marker_y</span> <span class="o">+=</span> <span class="n">topleft_marker_y</span> <span class="o">+</span> <span class="mi">1</span>
@ -485,8 +497,7 @@
<span class="n">mapnode_or_link_class</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">legend</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">char</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">mapnode_or_link_class</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Symbol &#39;</span><span class="si">{</span><span class="n">char</span><span class="si">}</span><span class="s2">&#39; on XY=(</span><span class="si">{</span><span class="n">ix</span> <span class="o">/</span> <span class="mi">2</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">iy</span> <span class="o">/</span> <span class="mi">2</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">) &quot;</span>
<span class="s2">&quot;is not found in LEGEND.&quot;</span>
<span class="sa">f</span><span class="s2">&quot;Symbol &#39;</span><span class="si">{</span><span class="n">char</span><span class="si">}</span><span class="s2">&#39; on XY=(</span><span class="si">{</span><span class="n">ix</span> <span class="o">/</span> <span class="mi">2</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">iy</span> <span class="o">/</span> <span class="mi">2</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">) &quot;</span> <span class="s2">&quot;is not found in LEGEND.&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mapnode_or_link_class</span><span class="p">,</span> <span class="s2">&quot;node_index&quot;</span><span class="p">):</span>
<span class="c1"># A mapnode. Mapnodes can only be placed on even grid positions, where</span>
@ -496,7 +507,8 @@
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Symbol &#39;</span><span class="si">{</span><span class="n">char</span><span class="si">}</span><span class="s2">&#39; on XY=(</span><span class="si">{</span><span class="n">ix</span> <span class="o">/</span> <span class="mi">2</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">iy</span> <span class="o">/</span> <span class="mi">2</span><span class="si">:</span><span class="s2">g</span><span class="si">}</span><span class="s2">) marks a &quot;</span>
<span class="s2">&quot;MapNode but is located between integer (X,Y) positions (only &quot;</span>
<span class="s2">&quot;Links can be placed between coordinates)!&quot;</span><span class="p">)</span>
<span class="s2">&quot;Links can be placed between coordinates)!&quot;</span>
<span class="p">)</span>
<span class="c1"># save the node to several different maps for different uses</span>
<span class="c1"># in both coordinate systems</span>
@ -504,14 +516,17 @@
<span class="n">max_X</span><span class="p">,</span> <span class="n">max_Y</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_X</span><span class="p">,</span> <span class="n">iX</span><span class="p">),</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_Y</span><span class="p">,</span> <span class="n">iY</span><span class="p">)</span>
<span class="n">node_index</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">xygrid</span><span class="p">[</span><span class="n">ix</span><span class="p">][</span><span class="n">iy</span><span class="p">]</span> <span class="o">=</span> <span class="n">XYgrid</span><span class="p">[</span><span class="n">iX</span><span class="p">][</span><span class="n">iY</span><span class="p">]</span> <span class="o">=</span> <span class="n">node_index_map</span><span class="p">[</span><span class="n">node_index</span><span class="p">]</span> <span class="o">=</span> \
<span class="n">mapnode_or_link_class</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">ix</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">iy</span><span class="p">,</span> <span class="n">Z</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">,</span>
<span class="n">node_index</span><span class="o">=</span><span class="n">node_index</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="n">char</span><span class="p">,</span> <span class="n">xymap</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="n">xygrid</span><span class="p">[</span><span class="n">ix</span><span class="p">][</span><span class="n">iy</span><span class="p">]</span> <span class="o">=</span> <span class="n">XYgrid</span><span class="p">[</span><span class="n">iX</span><span class="p">][</span><span class="n">iY</span><span class="p">]</span> <span class="o">=</span> <span class="n">node_index_map</span><span class="p">[</span>
<span class="n">node_index</span>
<span class="p">]</span> <span class="o">=</span> <span class="n">mapnode_or_link_class</span><span class="p">(</span>
<span class="n">x</span><span class="o">=</span><span class="n">ix</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">iy</span><span class="p">,</span> <span class="n">Z</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">,</span> <span class="n">node_index</span><span class="o">=</span><span class="n">node_index</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="n">char</span><span class="p">,</span> <span class="n">xymap</span><span class="o">=</span><span class="bp">self</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># we have a link at this xygrid position (this is ok everywhere)</span>
<span class="n">xygrid</span><span class="p">[</span><span class="n">ix</span><span class="p">][</span><span class="n">iy</span><span class="p">]</span> <span class="o">=</span> <span class="n">mapnode_or_link_class</span><span class="p">(</span><span class="n">x</span><span class="o">=</span><span class="n">ix</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">iy</span><span class="p">,</span> <span class="n">Z</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="n">char</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="n">xygrid</span><span class="p">[</span><span class="n">ix</span><span class="p">][</span><span class="n">iy</span><span class="p">]</span> <span class="o">=</span> <span class="n">mapnode_or_link_class</span><span class="p">(</span>
<span class="n">x</span><span class="o">=</span><span class="n">ix</span><span class="p">,</span> <span class="n">y</span><span class="o">=</span><span class="n">iy</span><span class="p">,</span> <span class="n">Z</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="n">char</span><span class="p">,</span> <span class="n">xymap</span><span class="o">=</span><span class="bp">self</span>
<span class="p">)</span>
<span class="c1"># store the symbol mapping for transition lookups</span>
<span class="n">symbol_map</span><span class="p">[</span><span class="n">char</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">xygrid</span><span class="p">[</span><span class="n">ix</span><span class="p">][</span><span class="n">iy</span><span class="p">])</span>
@ -541,20 +556,23 @@
<span class="n">node_coord</span> <span class="o">=</span> <span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">Y</span><span class="p">)</span>
<span class="c1"># load prototype from override, or use default</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">node</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="n">flatten_prototype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">node_coord</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">),</span> <span class="n">node</span><span class="o">.</span><span class="n">prototype</span><span class="p">)),</span>
<span class="n">no_db</span><span class="o">=</span><span class="n">_NO_DB_PROTOTYPES</span>
<span class="n">node</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="n">flatten_prototype</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">node_coord</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">node</span><span class="o">.</span><span class="n">prototype</span><span class="p">)</span>
<span class="p">),</span>
<span class="n">no_db</span><span class="o">=</span><span class="n">_NO_DB_PROTOTYPES</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Room prototype malformed: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">node</span><span class="p">)</span>
<span class="c1"># do the same for links (x, y, direction) coords</span>
<span class="k">for</span> <span class="n">direction</span><span class="p">,</span> <span class="n">maplink</span> <span class="ow">in</span> <span class="n">node</span><span class="o">.</span><span class="n">first_links</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">maplink</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="n">flatten_prototype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">node_coord</span> <span class="o">+</span> <span class="p">(</span><span class="n">direction</span><span class="p">,),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">),</span> <span class="n">maplink</span><span class="o">.</span><span class="n">prototype</span><span class="p">)),</span>
<span class="n">no_db</span><span class="o">=</span><span class="n">_NO_DB_PROTOTYPES</span>
<span class="n">maplink</span><span class="o">.</span><span class="n">prototype</span> <span class="o">=</span> <span class="n">flatten_prototype</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">node_coord</span> <span class="o">+</span> <span class="p">(</span><span class="n">direction</span><span class="p">,),</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototypes</span><span class="o">.</span><span class="n">get</span><span class="p">((</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">maplink</span><span class="o">.</span><span class="n">prototype</span><span class="p">),</span>
<span class="p">),</span>
<span class="n">no_db</span><span class="o">=</span><span class="n">_NO_DB_PROTOTYPES</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Exit prototype malformed: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="n">maplink</span><span class="p">)</span>
@ -581,8 +599,10 @@
<span class="sd"> This performs a depth-first pass down the the given dist.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">_scan_neighbors</span><span class="p">(</span><span class="n">start_node</span><span class="p">,</span> <span class="n">points</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">xmin</span><span class="o">=</span><span class="n">BIGVAL</span><span class="p">,</span> <span class="n">ymin</span><span class="o">=</span><span class="n">BIGVAL</span><span class="p">,</span> <span class="n">xmax</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="mi">0</span><span class="p">):</span>
<span class="k">def</span> <span class="nf">_scan_neighbors</span><span class="p">(</span>
<span class="n">start_node</span><span class="p">,</span> <span class="n">points</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">xmin</span><span class="o">=</span><span class="n">BIGVAL</span><span class="p">,</span> <span class="n">ymin</span><span class="o">=</span><span class="n">BIGVAL</span><span class="p">,</span> <span class="n">xmax</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">depth</span><span class="o">=</span><span class="mi">0</span>
<span class="p">):</span>
<span class="n">x0</span><span class="p">,</span> <span class="n">y0</span> <span class="o">=</span> <span class="n">start_node</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="n">start_node</span><span class="o">.</span><span class="n">y</span>
<span class="n">points</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">x0</span><span class="p">,</span> <span class="n">y0</span><span class="p">))</span>
@ -600,9 +620,15 @@
<span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">ymin</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="nb">max</span><span class="p">(</span><span class="n">ymax</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span>
<span class="n">points</span><span class="p">,</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">=</span> <span class="n">_scan_neighbors</span><span class="p">(</span>
<span class="n">end_node</span><span class="p">,</span> <span class="n">points</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="n">dist</span><span class="p">,</span>
<span class="n">xmin</span><span class="o">=</span><span class="n">xmin</span><span class="p">,</span> <span class="n">ymin</span><span class="o">=</span><span class="n">ymin</span><span class="p">,</span> <span class="n">xmax</span><span class="o">=</span><span class="n">xmax</span><span class="p">,</span> <span class="n">ymax</span><span class="o">=</span><span class="n">ymax</span><span class="p">,</span>
<span class="n">depth</span><span class="o">=</span><span class="n">depth</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">end_node</span><span class="p">,</span>
<span class="n">points</span><span class="p">,</span>
<span class="n">dist</span><span class="o">=</span><span class="n">dist</span><span class="p">,</span>
<span class="n">xmin</span><span class="o">=</span><span class="n">xmin</span><span class="p">,</span>
<span class="n">ymin</span><span class="o">=</span><span class="n">ymin</span><span class="p">,</span>
<span class="n">xmax</span><span class="o">=</span><span class="n">xmax</span><span class="p">,</span>
<span class="n">ymax</span><span class="o">=</span><span class="n">ymax</span><span class="p">,</span>
<span class="n">depth</span><span class="o">=</span><span class="n">depth</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">points</span><span class="p">,</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span>
@ -623,14 +649,16 @@
<span class="c1"># check if the solution for this grid was already solved previously.</span>
<span class="n">mapstr</span><span class="p">,</span> <span class="n">dist_matrix</span><span class="p">,</span> <span class="n">pathfinding_routes</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pathfinder_baked_filename</span><span class="p">,</span> <span class="s1">&#39;rb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fil</span><span class="p">:</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pathfinder_baked_filename</span><span class="p">,</span> <span class="s2">&quot;rb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fil</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">mapstr</span><span class="p">,</span> <span class="n">dist_matrix</span><span class="p">,</span> <span class="n">pathfinding_routes</span> <span class="o">=</span> <span class="n">pickle</span><span class="o">.</span><span class="n">load</span><span class="p">(</span><span class="n">fil</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
<span class="k">if</span> <span class="p">(</span><span class="n">mapstr</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapstring</span>
<span class="ow">and</span> <span class="n">dist_matrix</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
<span class="ow">and</span> <span class="n">pathfinding_routes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">):</span>
<span class="k">if</span> <span class="p">(</span>
<span class="n">mapstr</span> <span class="o">==</span> <span class="bp">self</span><span class="o">.</span><span class="n">mapstring</span>
<span class="ow">and</span> <span class="n">dist_matrix</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
<span class="ow">and</span> <span class="n">pathfinding_routes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
<span class="p">):</span>
<span class="c1"># this is important - it means the map hasn&#39;t changed so</span>
<span class="c1"># we can re-use the stored data!</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dist_matrix</span> <span class="o">=</span> <span class="n">dist_matrix</span>
@ -648,16 +676,20 @@
<span class="c1"># solve using Dijkstra&#39;s algorithm</span>
<span class="bp">self</span><span class="o">.</span><span class="n">dist_matrix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathfinding_routes</span> <span class="o">=</span> <span class="n">dijkstra</span><span class="p">(</span>
<span class="n">pathfinding_matrix</span><span class="p">,</span> <span class="n">directed</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">return_predecessors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">max_pathfinding_length</span><span class="p">)</span>
<span class="n">pathfinding_matrix</span><span class="p">,</span>
<span class="n">directed</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">return_predecessors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">limit</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">max_pathfinding_length</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathfinder_baked_filename</span><span class="p">:</span>
<span class="c1"># try to cache the results</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pathfinder_baked_filename</span><span class="p">,</span> <span class="s1">&#39;wb&#39;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fil</span><span class="p">:</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">mapstring</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dist_matrix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathfinding_routes</span><span class="p">),</span>
<span class="n">fil</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="mi">4</span><span class="p">)</span></div>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">pathfinder_baked_filename</span><span class="p">,</span> <span class="s2">&quot;wb&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">fil</span><span class="p">:</span>
<span class="n">pickle</span><span class="o">.</span><span class="n">dump</span><span class="p">(</span>
<span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mapstring</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">dist_matrix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathfinding_routes</span><span class="p">),</span> <span class="n">fil</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="mi">4</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="XYMap.spawn_nodes"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.spawn_nodes">[docs]</a> <span class="k">def</span> <span class="nf">spawn_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">)):</span>
<div class="viewcode-block" id="XYMap.spawn_nodes"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.spawn_nodes">[docs]</a> <span class="k">def</span> <span class="nf">spawn_nodes</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">)):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert the nodes of this XYMap into actual in-world rooms by spawning their</span>
<span class="sd"> related prototypes in the correct coordinate positions. This must be done *first*</span>
@ -680,12 +712,14 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">_XYZROOMCLASS</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.grid.xyzgrid.xyzroom</span> <span class="kn">import</span> <span class="n">XYZRoom</span> <span class="k">as</span> <span class="n">_XYZROOMCLASS</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">xy</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s1">&#39;*&#39;</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s2">&quot;*&quot;</span>
<span class="n">spawned</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># find existing nodes, in case some rooms need to be removed</span>
<span class="n">map_coords</span> <span class="o">=</span> <span class="p">[(</span><span class="n">node</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">Y</span><span class="p">)</span> <span class="k">for</span> <span class="n">node</span> <span class="ow">in</span>
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node_index_map</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="n">n</span><span class="o">.</span><span class="n">X</span><span class="p">))]</span>
<span class="n">map_coords</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">(</span><span class="n">node</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">node</span><span class="o">.</span><span class="n">Y</span><span class="p">)</span>
<span class="k">for</span> <span class="n">node</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node_index_map</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="n">n</span><span class="o">.</span><span class="n">X</span><span class="p">))</span>
<span class="p">]</span>
<span class="k">for</span> <span class="n">existing_room</span> <span class="ow">in</span> <span class="n">_XYZROOMCLASS</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">)):</span>
<span class="n">roomX</span><span class="p">,</span> <span class="n">roomY</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">existing_room</span><span class="o">.</span><span class="n">xyz</span>
<span class="k">if</span> <span class="p">(</span><span class="n">roomX</span><span class="p">,</span> <span class="n">roomY</span><span class="p">)</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">map_coords</span><span class="p">:</span>
@ -699,7 +733,7 @@
<span class="n">spawned</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
<span class="k">return</span> <span class="n">spawned</span></div>
<div class="viewcode-block" id="XYMap.spawn_links"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.spawn_links">[docs]</a> <span class="k">def</span> <span class="nf">spawn_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">),</span> <span class="n">nodes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="XYMap.spawn_links"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.spawn_links">[docs]</a> <span class="k">def</span> <span class="nf">spawn_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xy</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">nodes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Convert links of this XYMap into actual in-game exits by spawning their related</span>
<span class="sd"> prototypes. It&#39;s possible to only spawn a specic exit by specifying the node and</span>
@ -718,7 +752,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">=</span> <span class="n">xy</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s1">&#39;*&#39;</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s2">&quot;*&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">nodes</span><span class="p">:</span>
<span class="n">nodes</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">node_index_map</span><span class="o">.</span><span class="n">values</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">n</span><span class="p">:</span> <span class="p">(</span><span class="n">n</span><span class="o">.</span><span class="n">Z</span><span class="p">,</span> <span class="n">n</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="n">n</span><span class="o">.</span><span class="n">X</span><span class="p">))</span>
@ -748,8 +782,10 @@
<span class="n">iX</span><span class="p">,</span> <span class="n">iY</span> <span class="o">=</span> <span class="n">xy</span>
<span class="k">if</span> <span class="ow">not</span> <span class="p">((</span><span class="mi">0</span> <span class="o">&lt;=</span> <span class="n">iX</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_X</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="mi">0</span> <span class="o">&lt;=</span> <span class="n">iY</span> <span class="o">&lt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_Y</span><span class="p">)):</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;get_node_from_coord got coordinate </span><span class="si">{</span><span class="n">xy</span><span class="si">}</span><span class="s2"> which is &quot;</span>
<span class="sa">f</span><span class="s2">&quot;outside the grid size of (0,0) - (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_X</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_Y</span><span class="si">}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;get_node_from_coord got coordinate </span><span class="si">{</span><span class="n">xy</span><span class="si">}</span><span class="s2"> which is &quot;</span>
<span class="sa">f</span><span class="s2">&quot;outside the grid size of (0,0) - (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_X</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">max_Y</span><span class="si">}</span><span class="s2">).&quot;</span>
<span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">XYgrid</span><span class="p">[</span><span class="n">iX</span><span class="p">][</span><span class="n">iY</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
@ -795,8 +831,10 @@
<span class="n">istartnode</span> <span class="o">=</span> <span class="n">startnode</span><span class="o">.</span><span class="n">node_index</span>
<span class="n">inextnode</span> <span class="o">=</span> <span class="n">endnode</span><span class="o">.</span><span class="n">node_index</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Map.get_shortest_path received start/end nodes </span><span class="si">{</span><span class="n">startnode</span><span class="si">}</span><span class="s2"> and &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">endnode</span><span class="si">}</span><span class="s2">. They must both be MapNodes (not Links)&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Map.get_shortest_path received start/end nodes </span><span class="si">{</span><span class="n">startnode</span><span class="si">}</span><span class="s2"> and &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">endnode</span><span class="si">}</span><span class="s2">. They must both be MapNodes (not Links)&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">pathfinding_routes</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">calculate_path_matrix</span><span class="p">()</span>
@ -824,13 +862,18 @@
<span class="k">return</span> <span class="n">directions</span><span class="p">,</span> <span class="n">path</span></div>
<div class="viewcode-block" id="XYMap.get_visual_range"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.get_visual_range">[docs]</a> <span class="k">def</span> <span class="nf">get_visual_range</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xy</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="n">mode</span><span class="o">=</span><span class="s1">&#39;nodes&#39;</span><span class="p">,</span>
<span class="n">character</span><span class="o">=</span><span class="s1">&#39;@&#39;</span><span class="p">,</span>
<span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">target_path_style</span><span class="o">=</span><span class="s2">&quot;|y</span><span class="si">{display_symbol}</span><span class="s2">|n&quot;</span><span class="p">,</span>
<span class="n">max_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">indent</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">return_str</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<div class="viewcode-block" id="XYMap.get_visual_range"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap.html#evennia.contrib.grid.xyzgrid.xymap.XYMap.get_visual_range">[docs]</a> <span class="k">def</span> <span class="nf">get_visual_range</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">xy</span><span class="p">,</span>
<span class="n">dist</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">mode</span><span class="o">=</span><span class="s2">&quot;nodes&quot;</span><span class="p">,</span>
<span class="n">character</span><span class="o">=</span><span class="s2">&quot;@&quot;</span><span class="p">,</span>
<span class="n">target</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">target_path_style</span><span class="o">=</span><span class="s2">&quot;|y</span><span class="si">{display_symbol}</span><span class="s2">|n&quot;</span><span class="p">,</span>
<span class="n">max_size</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">indent</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">return_str</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get a part of the grid centered on a specific point and extended a certain number</span>
<span class="sd"> of nodes or grid points in every direction.</span>
@ -918,7 +961,7 @@
<span class="c1"># nothing but ourselves or emptiness</span>
<span class="k">return</span> <span class="n">character</span> <span class="k">if</span> <span class="n">character</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">empty_symbol</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s1">&#39;nodes&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;nodes&quot;</span><span class="p">:</span>
<span class="c1"># dist measures only full, reachable nodes.</span>
<span class="n">points</span><span class="p">,</span> <span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span><span class="p">,</span> <span class="n">ymin</span><span class="p">,</span> <span class="n">ymax</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_topology_around_coord</span><span class="p">(</span><span class="n">xy</span><span class="p">,</span> <span class="n">dist</span><span class="o">=</span><span class="n">dist</span><span class="p">)</span>
@ -930,7 +973,7 @@
<span class="k">for</span> <span class="p">(</span><span class="n">ix0</span><span class="p">,</span> <span class="n">iy0</span><span class="p">)</span> <span class="ow">in</span> <span class="n">points</span><span class="p">:</span>
<span class="n">gridmap</span><span class="p">[</span><span class="n">iy0</span> <span class="o">-</span> <span class="n">ymin</span><span class="p">][</span><span class="n">ix0</span> <span class="o">-</span> <span class="n">xmin</span><span class="p">]</span> <span class="o">=</span> <span class="n">display_map</span><span class="p">[</span><span class="n">iy0</span><span class="p">][</span><span class="n">ix0</span><span class="p">]</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s1">&#39;scan&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;scan&quot;</span><span class="p">:</span>
<span class="c1"># scan-mode - dist measures individual grid points</span>
<span class="n">xmin</span><span class="p">,</span> <span class="n">xmax</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">ix</span> <span class="o">-</span> <span class="n">dist</span><span class="p">),</span> <span class="nb">min</span><span class="p">(</span><span class="n">width</span><span class="p">,</span> <span class="n">ix</span> <span class="o">+</span> <span class="n">dist</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
@ -939,8 +982,10 @@
<span class="n">gridmap</span> <span class="o">=</span> <span class="p">[</span><span class="n">line</span><span class="p">[</span><span class="n">xmin</span><span class="p">:</span><span class="n">xmax</span><span class="p">]</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">display_map</span><span class="p">[</span><span class="n">ymin</span><span class="p">:</span><span class="n">ymax</span><span class="p">]]</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Map.get_visual_range &#39;mode&#39; was &#39;</span><span class="si">{</span><span class="n">mode</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;- it must be either &#39;scan&#39; or &#39;nodes&#39;.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Map.get_visual_range &#39;mode&#39; was &#39;</span><span class="si">{</span><span class="n">mode</span><span class="si">}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;- it must be either &#39;scan&#39; or &#39;nodes&#39;.&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">character</span><span class="p">:</span>
<span class="n">gridmap</span><span class="p">[</span><span class="n">iyc</span><span class="p">][</span><span class="n">ixc</span><span class="p">]</span> <span class="o">=</span> <span class="n">character</span> <span class="c1"># correct indexing; it&#39;s a list of lines</span>
@ -948,8 +993,7 @@
<span class="c1"># stylize path to target</span>
<span class="k">def</span> <span class="nf">_default_callable</span><span class="p">(</span><span class="n">node</span><span class="p">):</span>
<span class="k">return</span> <span class="n">target_path_style</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">display_symbol</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">get_display_symbol</span><span class="p">())</span>
<span class="k">return</span> <span class="n">target_path_style</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">display_symbol</span><span class="o">=</span><span class="n">node</span><span class="o">.</span><span class="n">get_display_symbol</span><span class="p">())</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">target_path_style</span><span class="p">):</span>
<span class="n">_target_path_style</span> <span class="o">=</span> <span class="n">target_path_style</span>
@ -958,7 +1002,7 @@
<span class="n">_</span><span class="p">,</span> <span class="n">path</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_shortest_path</span><span class="p">(</span><span class="n">xy</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
<span class="n">maxstep</span> <span class="o">=</span> <span class="n">dist</span> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s1">&#39;nodes&#39;</span> <span class="k">else</span> <span class="n">dist</span> <span class="o">/</span> <span class="mi">2</span>
<span class="n">maxstep</span> <span class="o">=</span> <span class="n">dist</span> <span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;nodes&quot;</span> <span class="k">else</span> <span class="n">dist</span> <span class="o">/</span> <span class="mi">2</span>
<span class="n">nsteps</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">for</span> <span class="n">node_or_link</span> <span class="ow">in</span> <span class="n">path</span><span class="p">[</span><span class="mi">1</span><span class="p">:]:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">node_or_link</span><span class="p">,</span> <span class="s2">&quot;node_index&quot;</span><span class="p">):</span>

View file

@ -56,7 +56,8 @@
<span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ImportError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="se">\n</span><span class="s2">The XYZgrid contrib requires &quot;</span>
<span class="s2">&quot;the SciPy package. Install with `pip install scipy&#39;.&quot;</span><span class="p">)</span>
<span class="s2">&quot;the SciPy package. Install with `pip install scipy&#39;.&quot;</span>
<span class="p">)</span>
<span class="kn">import</span> <span class="nn">uuid</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">defaultdict</span>
@ -75,6 +76,7 @@
<span class="c1"># Nodes/Links</span>
<div class="viewcode-block" id="MapNode"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.MapNode">[docs]</a><span class="k">class</span> <span class="nc">MapNode</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This represents a &#39;room&#39; node on the map. Note that the map system deals with two grids, the</span>
@ -104,8 +106,9 @@
<span class="sd"> for various reasons, mostly map-transitions).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># symbol used to identify this link on the map</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;#&#39;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;#&quot;</span>
<span class="c1"># if printing this node should show another symbol. If set</span>
<span class="c1"># to the empty string, use `symbol`.</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="kc">None</span>
@ -121,16 +124,16 @@
<span class="n">multilink</span> <span class="o">=</span> <span class="kc">True</span>
<span class="c1"># default values to use if the exit doesn&#39;t have a &#39;spawn_aliases&#39; iterable</span>
<span class="n">direction_spawn_defaults</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;n&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;north&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">),</span>
<span class="s1">&#39;ne&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;northeast&#39;</span><span class="p">,</span> <span class="s1">&#39;ne&#39;</span><span class="p">,</span> <span class="s1">&#39;north-east&#39;</span><span class="p">),</span>
<span class="s1">&#39;e&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;east&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">),</span>
<span class="s1">&#39;se&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;southeast&#39;</span><span class="p">,</span> <span class="s1">&#39;se&#39;</span><span class="p">,</span> <span class="s1">&#39;south-east&#39;</span><span class="p">),</span>
<span class="s1">&#39;s&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;south&#39;</span><span class="p">,</span> <span class="s1">&#39;s&#39;</span><span class="p">),</span>
<span class="s1">&#39;sw&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;southwest&#39;</span><span class="p">,</span> <span class="s1">&#39;sw&#39;</span><span class="p">,</span> <span class="s1">&#39;south-west&#39;</span><span class="p">),</span>
<span class="s1">&#39;w&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;west&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">),</span>
<span class="s1">&#39;nw&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;northwest&#39;</span><span class="p">,</span> <span class="s1">&#39;nw&#39;</span><span class="p">,</span> <span class="s1">&#39;north-west&#39;</span><span class="p">),</span>
<span class="s1">&#39;d&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;down&#39;</span><span class="p">,</span> <span class="s1">&#39;d&#39;</span><span class="p">,</span> <span class="s1">&#39;do&#39;</span><span class="p">),</span>
<span class="s1">&#39;u&#39;</span><span class="p">:</span> <span class="p">(</span><span class="s1">&#39;up&#39;</span><span class="p">,</span> <span class="s1">&#39;u&#39;</span><span class="p">),</span>
<span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;north&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">),</span>
<span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;northeast&quot;</span><span class="p">,</span> <span class="s2">&quot;ne&quot;</span><span class="p">,</span> <span class="s2">&quot;north-east&quot;</span><span class="p">),</span>
<span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;east&quot;</span><span class="p">,</span> <span class="s2">&quot;e&quot;</span><span class="p">),</span>
<span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;southeast&quot;</span><span class="p">,</span> <span class="s2">&quot;se&quot;</span><span class="p">,</span> <span class="s2">&quot;south-east&quot;</span><span class="p">),</span>
<span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;south&quot;</span><span class="p">,</span> <span class="s2">&quot;s&quot;</span><span class="p">),</span>
<span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;southwest&quot;</span><span class="p">,</span> <span class="s2">&quot;sw&quot;</span><span class="p">,</span> <span class="s2">&quot;south-west&quot;</span><span class="p">),</span>
<span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;west&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">),</span>
<span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;northwest&quot;</span><span class="p">,</span> <span class="s2">&quot;nw&quot;</span><span class="p">,</span> <span class="s2">&quot;north-west&quot;</span><span class="p">),</span>
<span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;down&quot;</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">,</span> <span class="s2">&quot;do&quot;</span><span class="p">),</span>
<span class="s2">&quot;u&quot;</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;up&quot;</span><span class="p">,</span> <span class="s2">&quot;u&quot;</span><span class="p">),</span>
<span class="p">}</span>
<div class="viewcode-block" id="MapNode.__init__"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.MapNode.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">Z</span><span class="p">,</span> <span class="n">node_index</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="n">symbol</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">xymap</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
@ -244,7 +247,9 @@
<span class="k">if</span> <span class="n">first_step_name</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">closest_neighbor_names</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;has more than one outgoing direction &#39;</span><span class="si">{</span><span class="n">first_step_name</span><span class="si">}</span><span class="s2">&#39;. &quot;</span>
<span class="s2">&quot;All directions out of a node must be unique.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="s2">&quot;All directions out of a node must be unique.&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">closest_neighbor_names</span><span class="p">[</span><span class="n">first_step_name</span><span class="p">]</span> <span class="o">=</span> <span class="n">direction</span>
<span class="n">node_index</span> <span class="o">=</span> <span class="n">end_node</span><span class="o">.</span><span class="n">node_index</span>
@ -257,8 +262,9 @@
<span class="c1"># used for building the shortest path. Note that we store the</span>
<span class="c1"># aliased link directions here, for quick display by the</span>
<span class="c1"># shortest-route solver</span>
<span class="n">shortest_route</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">shortest_route_to_node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">node_index</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[],</span> <span class="n">BIGVAL</span><span class="p">))[</span><span class="mi">2</span><span class="p">]</span>
<span class="n">shortest_route</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">shortest_route_to_node</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">node_index</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="p">[],</span> <span class="n">BIGVAL</span><span class="p">))[</span>
<span class="mi">2</span>
<span class="p">]</span>
<span class="k">if</span> <span class="n">weight</span> <span class="o">&lt;</span> <span class="n">shortest_route</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">shortest_route_to_node</span><span class="p">[</span><span class="n">node_index</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">first_step_name</span><span class="p">,</span> <span class="n">steps</span><span class="p">,</span> <span class="n">weight</span><span class="p">)</span></div>
@ -322,11 +328,9 @@
<span class="sd"> str or tuple: The key of the spawned exit, or a tuple (key, alias, alias, ...)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">first_links</span><span class="p">[</span><span class="n">direction</span><span class="p">]</span>
<span class="o">.</span><span class="n">spawn_aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">direction</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">direction_spawn_defaults</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">direction</span><span class="p">,</span> <span class="p">(</span><span class="s1">&#39;unknown&#39;</span><span class="p">,</span> <span class="p">))))</span>
<span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">first_links</span><span class="p">[</span><span class="n">direction</span><span class="p">]</span><span class="o">.</span><span class="n">spawn_aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">direction</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">direction_spawn_defaults</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">direction</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;unknown&quot;</span><span class="p">,))</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">return_aliases</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">aliases</span><span class="p">)</span>
<span class="k">return</span> <span class="n">key</span></div>
@ -355,28 +359,24 @@
<span class="n">nodeobj</span> <span class="o">=</span> <span class="n">NodeTypeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="n">xyz</span><span class="p">)</span>
<span class="k">except</span> <span class="n">django_exceptions</span><span class="o">.</span><span class="n">ObjectDoesNotExist</span><span class="p">:</span>
<span class="c1"># create a new entity with proper coordinates etc</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="p">[</span><span class="s1">&#39;typeclass&#39;</span><span class="p">]</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s1">&#39; (</span><span class="si">{</span><span class="n">tclass</span><span class="si">}</span><span class="s1">)&#39;</span>
<span class="k">if</span> <span class="n">tclass</span> <span class="o">!=</span> <span class="s1">&#39;evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom&#39;</span>
<span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; spawning room at xyz=</span><span class="si">{</span><span class="n">xyz</span><span class="si">}{</span><span class="n">tclass</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">nodeobj</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">NodeTypeclass</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;key&#39;</span><span class="p">,</span> <span class="s1">&#39;An empty room&#39;</span><span class="p">),</span>
<span class="n">xyz</span><span class="o">=</span><span class="n">xyz</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;typeclass&quot;</span><span class="p">]</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">tclass</span><span class="si">}</span><span class="s2">)&quot;</span> <span class="k">if</span> <span class="n">tclass</span> <span class="o">!=</span> <span class="s2">&quot;evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom&quot;</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; spawning room at xyz=</span><span class="si">{</span><span class="n">xyz</span><span class="si">}{</span><span class="n">tclass</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">nodeobj</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">NodeTypeclass</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="s2">&quot;An empty room&quot;</span><span class="p">),</span> <span class="n">xyz</span><span class="o">=</span><span class="n">xyz</span><span class="p">)</span>
<span class="k">if</span> <span class="n">err</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; updating existing room (if changed) at xyz=</span><span class="si">{</span><span class="n">xyz</span><span class="si">}</span><span class="s2">&quot;</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">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prototype_key&#39;</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">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">):</span>
<span class="c1"># make sure there is a prototype_key in prototype</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="p">[</span><span class="s1">&#39;prototype_key&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_prototype_key</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_prototype_key</span><span class="p">()</span>
<span class="c1"># apply prototype to node. This will not override the XYZ tags since</span>
<span class="c1"># these are not in the prototype and exact=False</span>
<span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">nodeobj</span><span class="p">],</span> <span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
<span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">nodeobj</span><span class="p">],</span> <span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
<div class="viewcode-block" id="MapNode.spawn_links"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.MapNode.spawn_links">[docs]</a> <span class="k">def</span> <span class="nf">spawn_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -406,9 +406,9 @@
<span class="k">for</span> <span class="n">direction</span><span class="p">,</span> <span class="n">link</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">first_links</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">key</span><span class="p">,</span> <span class="o">*</span><span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_exit_spawn_name</span><span class="p">(</span><span class="n">direction</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">link</span><span class="o">.</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prototype_key&#39;</span><span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">link</span><span class="o">.</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">):</span>
<span class="c1"># generate a deterministic prototype_key if it doesn&#39;t exist</span>
<span class="n">link</span><span class="o">.</span><span class="n">prototype</span><span class="p">[</span><span class="s1">&#39;prototype_key&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_prototype_key</span><span class="p">()</span>
<span class="n">link</span><span class="o">.</span><span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">generate_prototype_key</span><span class="p">()</span>
<span class="n">maplinks</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">aliases</span><span class="p">,</span> <span class="n">direction</span><span class="p">,</span> <span class="n">link</span><span class="p">)</span>
<span class="c1"># remove duplicates</span>
@ -422,8 +422,7 @@
<span class="c1"># we need to search for exits in all directions since some</span>
<span class="c1"># may have been removed since last sync</span>
<span class="n">linkobjs</span> <span class="o">=</span> <span class="p">{</span><span class="n">exi</span><span class="o">.</span><span class="n">db_key</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">exi</span>
<span class="k">for</span> <span class="n">exi</span> <span class="ow">in</span> <span class="n">ExitTypeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="n">xyz</span><span class="p">)}</span>
<span class="n">linkobjs</span> <span class="o">=</span> <span class="p">{</span><span class="n">exi</span><span class="o">.</span><span class="n">db_key</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">exi</span> <span class="k">for</span> <span class="n">exi</span> <span class="ow">in</span> <span class="n">ExitTypeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="n">xyz</span><span class="p">)}</span>
<span class="c1"># figure out if the topology changed between grid and map (will always</span>
<span class="c1"># build all exits first run)</span>
@ -453,16 +452,19 @@
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
<span class="n">linkobjs</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">exi</span>
<span class="n">prot</span> <span class="o">=</span> <span class="n">maplinks</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()][</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">prototype</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="n">prot</span><span class="p">[</span><span class="s1">&#39;typeclass&#39;</span><span class="p">]</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s1">&#39; (</span><span class="si">{</span><span class="n">tclass</span><span class="si">}</span><span class="s1">)&#39;</span>
<span class="k">if</span> <span class="n">tclass</span> <span class="o">!=</span> <span class="s1">&#39;evennia.contrib.grid.xyzgrid.xyzroom.XYZExit&#39;</span>
<span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="n">prot</span><span class="p">[</span><span class="s2">&quot;typeclass&quot;</span><span class="p">]</span>
<span class="n">tclass</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot; (</span><span class="si">{</span><span class="n">tclass</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="k">if</span> <span class="n">tclass</span> <span class="o">!=</span> <span class="s2">&quot;evennia.contrib.grid.xyzgrid.xyzroom.XYZExit&quot;</span>
<span class="k">else</span> <span class="s2">&quot;&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; spawning/updating exit xyz=</span><span class="si">{</span><span class="n">xyz</span><span class="si">}</span><span class="s2">, direction=</span><span class="si">{</span><span class="n">key</span><span class="si">}{</span><span class="n">tclass</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="c1"># apply prototypes to catch any changes</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">linkobj</span> <span class="ow">in</span> <span class="n">linkobjs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
<span class="n">maplinks</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()][</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">linkobj</span><span class="p">],</span> <span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span></div>
<span class="n">maplinks</span><span class="p">[</span><span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()][</span><span class="mi">3</span><span class="p">]</span><span class="o">.</span><span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">linkobj</span><span class="p">],</span> <span class="n">exact</span><span class="o">=</span><span class="kc">False</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="MapNode.unspawn"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.MapNode.unspawn">[docs]</a> <span class="k">def</span> <span class="nf">unspawn</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -508,8 +510,9 @@
<span class="sd"> actual rooms (`#`) on the other map (NOT to the `T`s)!</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;T&#39;</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;T&quot;</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
<span class="c1"># X,Y,Z coordinates of target node</span>
<span class="n">taget_map_xyz</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
@ -519,10 +522,13 @@
<span class="sd"> the exit to this node (since the prototype is None, this node itself will not be built).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="kc">True</span> <span class="k">for</span> <span class="n">coord</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_map_xyz</span> <span class="k">if</span> <span class="n">coord</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s1">&#39;unset&#39;</span><span class="p">)):</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;(Z=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">xymap</span><span class="o">.</span><span class="n">Z</span><span class="si">}</span><span class="s2">) has not defined its &quot;</span>
<span class="s2">&quot;`.target_map_xyz` property. It must point &quot;</span>
<span class="s2">&quot;to another valid xymap (Z coordinate).&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="kc">True</span> <span class="k">for</span> <span class="n">coord</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_map_xyz</span> <span class="k">if</span> <span class="n">coord</span> <span class="ow">in</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="s2">&quot;unset&quot;</span><span class="p">)):</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;(Z=</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">xymap</span><span class="o">.</span><span class="n">Z</span><span class="si">}</span><span class="s2">) has not defined its &quot;</span>
<span class="s2">&quot;`.target_map_xyz` property. It must point &quot;</span>
<span class="s2">&quot;to another valid xymap (Z coordinate).&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">target_map_xyz</span></div>
@ -590,6 +596,7 @@
<span class="sd"> `node.get_exit_spawn_name(direction)`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># symbol for identifying this link on the map</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># if `None`, use .symbol</span>
@ -703,7 +710,9 @@
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="kc">None</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;was connected to from the direction </span><span class="si">{</span><span class="n">start_direction</span><span class="si">}</span><span class="s2">, but &quot;</span>
<span class="s2">&quot;is not set up to link in that direction.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="s2">&quot;is not set up to link in that direction.&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># note that if `get_direction` returns an unknown direction, this will be equivalent</span>
<span class="c1"># to pointing to an empty location, which makes sense</span>
@ -716,8 +725,7 @@
<span class="n">next_target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_empty_target</span><span class="p">(</span><span class="n">start_direction</span><span class="p">,</span> <span class="n">end_direction</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">next_target</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;points to empty space in the direction </span><span class="si">{</span><span class="n">end_direction</span><span class="si">}</span><span class="s2">!&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;points to empty space in the direction </span><span class="si">{</span><span class="n">end_direction</span><span class="si">}</span><span class="s2">!&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">_weight</span> <span class="o">+=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_weight</span><span class="p">(</span><span class="n">start_direction</span><span class="p">,</span> <span class="n">_weight</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_steps</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
@ -730,13 +738,16 @@
<span class="k">return</span> <span class="p">(</span>
<span class="n">next_target</span><span class="p">,</span>
<span class="n">_weight</span> <span class="o">/</span> <span class="nb">max</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="n">_linklen</span><span class="p">)</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">average_long_link_weights</span> <span class="k">else</span> <span class="n">_weight</span><span class="p">,</span>
<span class="n">_steps</span>
<span class="n">_steps</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># we hit another link. Progress recursively.</span>
<span class="k">return</span> <span class="n">next_target</span><span class="o">.</span><span class="n">traverse</span><span class="p">(</span>
<span class="n">REVERSE_DIRECTIONS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">end_direction</span><span class="p">,</span> <span class="n">end_direction</span><span class="p">),</span>
<span class="n">_weight</span><span class="o">=</span><span class="n">_weight</span><span class="p">,</span> <span class="n">_linklen</span><span class="o">=</span><span class="n">_linklen</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">_steps</span><span class="o">=</span><span class="n">_steps</span><span class="p">)</span></div>
<span class="n">_weight</span><span class="o">=</span><span class="n">_weight</span><span class="p">,</span>
<span class="n">_linklen</span><span class="o">=</span><span class="n">_linklen</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span>
<span class="n">_steps</span><span class="o">=</span><span class="n">_steps</span><span class="p">,</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="MapLink.get_linked_neighbors"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.MapLink.get_linked_neighbors">[docs]</a> <span class="k">def</span> <span class="nf">get_linked_neighbors</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -762,8 +773,7 @@
<span class="c1"># there is is something there, we need to check if it is either</span>
<span class="c1"># a map node or a link connecting in our direction</span>
<span class="n">node_or_link</span> <span class="o">=</span> <span class="n">xygrid</span><span class="p">[</span><span class="n">end_x</span><span class="p">][</span><span class="n">end_y</span><span class="p">]</span>
<span class="k">if</span> <span class="p">(</span><span class="n">node_or_link</span><span class="o">.</span><span class="n">multilink</span>
<span class="ow">or</span> <span class="n">node_or_link</span><span class="o">.</span><span class="n">get_direction</span><span class="p">(</span><span class="n">direction</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">node_or_link</span><span class="o">.</span><span class="n">multilink</span> <span class="ow">or</span> <span class="n">node_or_link</span><span class="o">.</span><span class="n">get_direction</span><span class="p">(</span><span class="n">direction</span><span class="p">):</span>
<span class="n">links</span><span class="p">[</span><span class="n">direction</span><span class="p">]</span> <span class="o">=</span> <span class="n">node_or_link</span>
<span class="k">return</span> <span class="n">links</span></div>
@ -887,7 +897,8 @@
<span class="k">for</span> <span class="n">direction</span> <span class="ow">in</span> <span class="n">unhandled_links_copy</span><span class="p">:</span>
<span class="k">if</span> <span class="n">REVERSE_DIRECTIONS</span><span class="p">[</span><span class="n">direction</span><span class="p">]</span> <span class="ow">in</span> <span class="n">unhandled_links_copy</span><span class="p">:</span>
<span class="n">directions</span><span class="p">[</span><span class="n">direction</span><span class="p">]</span> <span class="o">=</span> <span class="n">REVERSE_DIRECTIONS</span><span class="p">[</span>
<span class="n">unhandled_links</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">unhandled_links</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">direction</span><span class="p">))]</span>
<span class="n">unhandled_links</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">unhandled_links</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">direction</span><span class="p">))</span>
<span class="p">]</span>
<span class="c1"># check if we have any non-cross-through paths left to handle</span>
<span class="n">n_unhandled</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">unhandled_links</span><span class="p">)</span>
@ -898,7 +909,8 @@
<span class="k">if</span> <span class="n">n_unhandled</span> <span class="o">!=</span> <span class="mi">2</span><span class="p">:</span>
<span class="n">links</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">unhandled_links</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;cannot determine how to connect in/out directions </span><span class="si">{</span><span class="n">links</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;cannot determine how to connect in/out directions </span><span class="si">{</span><span class="n">links</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">,</span> <span class="bp">self</span>
<span class="p">)</span>
<span class="n">directions</span><span class="p">[</span><span class="n">unhandled_links</span><span class="p">[</span><span class="mi">0</span><span class="p">]]</span> <span class="o">=</span> <span class="n">unhandled_links</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">directions</span><span class="p">[</span><span class="n">unhandled_links</span><span class="p">[</span><span class="mi">1</span><span class="p">]]</span> <span class="o">=</span> <span class="n">unhandled_links</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
@ -907,6 +919,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">start_direction</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="SmartTeleporterMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.SmartTeleporterMapLink">[docs]</a><span class="k">class</span> <span class="nc">SmartTeleporterMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> The teleport link works by connecting to nowhere - and will then continue</span>
@ -931,10 +944,11 @@
<span class="sd"> -#-t-# - invalid, only one connected link is allowed.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;t&#39;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;t&quot;</span>
<span class="c1"># usually invisible</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="s1">&#39; &#39;</span>
<span class="n">direction_name</span> <span class="o">=</span> <span class="s1">&#39;teleport&#39;</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
<span class="n">direction_name</span> <span class="o">=</span> <span class="s2">&quot;teleport&quot;</span>
<div class="viewcode-block" id="SmartTeleporterMapLink.__init__"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.SmartTeleporterMapLink.__init__">[docs]</a> <span class="k">def</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="o">**</span><span class="n">kwargs</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="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
@ -974,7 +988,9 @@
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">found_teleporters</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="s2">&quot;found too many matching teleporters (must be exactly one more): &quot;</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">found_teleporters</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">found_teleporters</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">other_teleporter</span> <span class="o">=</span> <span class="n">found_teleporters</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># link the two so we don&#39;t need to scan again for the other one</span>
@ -994,9 +1010,10 @@
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">neighbors</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span><span class="s2">&quot;must have exactly one link connected to it.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">direction</span><span class="p">,</span> <span class="n">link</span> <span class="o">=</span> <span class="nb">next</span><span class="p">(</span><span class="nb">iter</span><span class="p">(</span><span class="n">neighbors</span><span class="o">.</span><span class="n">items</span><span class="p">()))</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s1">&#39;node_index&#39;</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span><span class="s2">&quot;can only connect to a Link. Found </span><span class="si">{link}</span><span class="s2"> in &quot;</span>
<span class="s2">&quot;direction </span><span class="si">{direction}</span><span class="s2">.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">link</span><span class="p">,</span> <span class="s2">&quot;node_index&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="n">MapParserError</span><span class="p">(</span>
<span class="s2">&quot;can only connect to a Link. Found </span><span class="si">{link}</span><span class="s2"> in &quot;</span> <span class="s2">&quot;direction </span><span class="si">{direction}</span><span class="s2">.&quot;</span><span class="p">,</span> <span class="bp">self</span>
<span class="p">)</span>
<span class="c1"># the string &#39;teleport&#39; will not be understood by the traverser, leading to</span>
<span class="c1"># this being interpreted as an empty target and the `at_empty_target`</span>
<span class="c1"># hook firing when trying to traverse this link.</span>
@ -1004,12 +1021,10 @@
<span class="k">if</span> <span class="n">start_direction</span> <span class="o">==</span> <span class="n">direction_name</span><span class="p">:</span>
<span class="c1"># called while traversing another teleport</span>
<span class="c1"># - we must make sure we can always access/leave the teleport.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="n">direction_name</span><span class="p">:</span> <span class="n">direction</span><span class="p">,</span>
<span class="n">direction</span><span class="p">:</span> <span class="n">direction_name</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="n">direction_name</span><span class="p">:</span> <span class="n">direction</span><span class="p">,</span> <span class="n">direction</span><span class="p">:</span> <span class="n">direction_name</span><span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># called while traversing a normal link</span>
<span class="bp">self</span><span class="o">.</span><span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="n">start_direction</span><span class="p">:</span> <span class="n">direction_name</span><span class="p">,</span>
<span class="n">direction_name</span><span class="p">:</span> <span class="n">direction</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="n">start_direction</span><span class="p">:</span> <span class="n">direction_name</span><span class="p">,</span> <span class="n">direction_name</span><span class="p">:</span> <span class="n">direction</span><span class="p">}</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">start_direction</span><span class="p">)</span></div></div>
@ -1058,6 +1073,7 @@
<span class="sd"> # |</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">multilink</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="SmartMapLink.get_direction"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.SmartMapLink.get_direction">[docs]</a> <span class="k">def</span> <span class="nf">get_direction</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">start_direction</span><span class="p">):</span>
@ -1069,8 +1085,11 @@
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="p">:</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">neighbors</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_linked_neighbors</span><span class="p">()</span>
<span class="n">nodes</span> <span class="o">=</span> <span class="p">[</span><span class="n">direction</span> <span class="k">for</span> <span class="n">direction</span><span class="p">,</span> <span class="n">neighbor</span> <span class="ow">in</span> <span class="n">neighbors</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">neighbor</span><span class="p">,</span> <span class="s1">&#39;node_index&#39;</span><span class="p">)]</span>
<span class="n">nodes</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">direction</span>
<span class="k">for</span> <span class="n">direction</span><span class="p">,</span> <span class="n">neighbor</span> <span class="ow">in</span> <span class="n">neighbors</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">neighbor</span><span class="p">,</span> <span class="s2">&quot;node_index&quot;</span><span class="p">)</span>
<span class="p">]</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">nodes</span><span class="p">)</span> <span class="o">==</span> <span class="mi">2</span><span class="p">:</span>
<span class="c1"># prefer link to these two nodes</span>
@ -1084,7 +1103,9 @@
<span class="s2">&quot;must have exactly two connections - either directly to &quot;</span>
<span class="s2">&quot;two nodes or connecting directly to one node and with exactly one other &quot;</span>
<span class="sa">f</span><span class="s2">&quot;link direction. The neighbor(s) in directions </span><span class="si">{</span><span class="nb">list</span><span class="p">(</span><span class="n">neighbors</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span><span class="si">}</span><span class="s2"> do &quot;</span>
<span class="s2">&quot;not fulfill these criteria.&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="s2">&quot;not fulfill these criteria.&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">directions</span> <span class="o">=</span> <span class="n">directions</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">start_direction</span><span class="p">)</span></div></div>
@ -1113,20 +1134,26 @@
<span class="c1"># this allows for normal movement directions even if the invisible-node</span>
<span class="c1"># is marked with a different symbol.</span>
<span class="n">direction_aliases</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;n&#39;</span><span class="p">:</span> <span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;ne&#39;</span><span class="p">:</span> <span class="s1">&#39;ne&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">:</span> <span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;se&#39;</span><span class="p">:</span> <span class="s1">&#39;se&#39;</span><span class="p">,</span>
<span class="s1">&#39;s&#39;</span><span class="p">:</span> <span class="s1">&#39;s&#39;</span><span class="p">,</span> <span class="s1">&#39;sw&#39;</span><span class="p">:</span> <span class="s1">&#39;sw&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">:</span> <span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="s1">&#39;nw&#39;</span><span class="p">:</span> <span class="s1">&#39;nw&#39;</span>
<span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;n&quot;</span><span class="p">,</span>
<span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="s2">&quot;ne&quot;</span><span class="p">,</span>
<span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="s2">&quot;e&quot;</span><span class="p">,</span>
<span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="s2">&quot;se&quot;</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;s&quot;</span><span class="p">,</span>
<span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="s2">&quot;sw&quot;</span><span class="p">,</span>
<span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span>
<span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="s2">&quot;nw&quot;</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># replace current link position with what the smart links &quot;should&quot; look like</span>
<span class="n">display_symbol_aliases</span> <span class="o">=</span> <span class="p">{</span>
<span class="p">((</span><span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;s&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;s&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">)):</span> <span class="s1">&#39;|&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s1">&#39;n&#39;</span><span class="p">,</span> <span class="s1">&#39;s&#39;</span><span class="p">),):</span> <span class="s1">&#39;v&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s1">&#39;s&#39;</span><span class="p">,</span> <span class="s1">&#39;n&#39;</span><span class="p">)):</span> <span class="s1">&#39;^&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">)):</span> <span class="s1">&#39;-&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s1">&#39;e&#39;</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">),):</span> <span class="s1">&#39;&gt;&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s1">&#39;w&#39;</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">),):</span> <span class="s1">&#39;&lt;&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s1">&#39;nw&#39;</span><span class="p">,</span> <span class="s1">&#39;se&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;sw&#39;</span><span class="p">,</span> <span class="s1">&#39;ne&#39;</span><span class="p">)):</span> <span class="s1">&#39;</span><span class="se">\\</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s1">&#39;ne&#39;</span><span class="p">,</span> <span class="s1">&#39;sw&#39;</span><span class="p">),</span> <span class="p">(</span><span class="s1">&#39;sw&#39;</span><span class="p">,</span> <span class="s1">&#39;ne&#39;</span><span class="p">)):</span> <span class="s1">&#39;/&#39;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;s&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;s&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">)):</span> <span class="s2">&quot;|&quot;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;s&quot;</span><span class="p">),):</span> <span class="s2">&quot;v&quot;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;s&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">)):</span> <span class="s2">&quot;^&quot;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;e&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;e&quot;</span><span class="p">)):</span> <span class="s2">&quot;-&quot;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;e&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">),):</span> <span class="s2">&quot;&gt;&quot;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;e&quot;</span><span class="p">),):</span> <span class="s2">&quot;&lt;&quot;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;nw&quot;</span><span class="p">,</span> <span class="s2">&quot;se&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;sw&quot;</span><span class="p">,</span> <span class="s2">&quot;ne&quot;</span><span class="p">)):</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="p">((</span><span class="s2">&quot;ne&quot;</span><span class="p">,</span> <span class="s2">&quot;sw&quot;</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;sw&quot;</span><span class="p">,</span> <span class="s2">&quot;ne&quot;</span><span class="p">)):</span> <span class="s2">&quot;/&quot;</span><span class="p">,</span>
<span class="p">}</span>
<div class="viewcode-block" id="InvisibleSmartMapLink.get_display_symbol"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.InvisibleSmartMapLink.get_display_symbol">[docs]</a> <span class="k">def</span> <span class="nf">get_display_symbol</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -1140,12 +1167,10 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;_cached_display_symbol&quot;</span><span class="p">):</span>
<span class="n">legend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xymap</span><span class="o">.</span><span class="n">legend</span>
<span class="n">default_symbol</span> <span class="o">=</span> <span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">symbol</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_symbol</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_symbol</span><span class="p">)</span>
<span class="n">default_symbol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">symbol</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_symbol</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_symbol</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cached_display_symbol</span> <span class="o">=</span> <span class="n">default_symbol</span>
<span class="n">dirtuple</span> <span class="o">=</span> <span class="nb">tuple</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">directions</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="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
<span class="n">dirtuple</span> <span class="o">=</span> <span class="nb">tuple</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">directions</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="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="o">.</span><span class="n">keys</span><span class="p">()))</span>
<span class="n">replacement_symbol</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">display_symbol_aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">dirtuple</span><span class="p">,</span> <span class="n">default_symbol</span><span class="p">)</span>
@ -1154,16 +1179,19 @@
<span class="k">if</span> <span class="n">node_or_link_class</span><span class="p">:</span>
<span class="c1"># initiate class in the current location and run get_display_symbol</span>
<span class="c1"># to get what it would show.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cached_display_symbol</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">node_or_link_class</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Z</span><span class="p">)</span><span class="o">.</span><span class="n">get_display_symbol</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cached_display_symbol</span> <span class="o">=</span> <span class="n">node_or_link_class</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">x</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">y</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">Z</span>
<span class="p">)</span><span class="o">.</span><span class="n">get_display_symbol</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cached_display_symbol</span></div></div>
<span class="c1"># ----------------------------------</span>
<span class="c1"># Default nodes and link classes</span>
<div class="viewcode-block" id="BasicMapNode"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.BasicMapNode">[docs]</a><span class="k">class</span> <span class="nc">BasicMapNode</span><span class="p">(</span><span class="n">MapNode</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A map node/room&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;#&quot;</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_room&quot;</span></div>
@ -1171,20 +1199,25 @@
<div class="viewcode-block" id="InterruptMapNode"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.InterruptMapNode">[docs]</a><span class="k">class</span> <span class="nc">InterruptMapNode</span><span class="p">(</span><span class="n">MapNode</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A point of interest node/room. Pathfinder will ignore but auto-stepper will</span>
<span class="sd"> stop here if passing through. Beginner-Tutorial from here is fine.&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;I&quot;</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="s2">&quot;#&quot;</span>
<span class="n">interrupt_path</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_room&quot;</span></div>
<div class="viewcode-block" id="MapTransitionNode"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.MapTransitionNode">[docs]</a><span class="k">class</span> <span class="nc">MapTransitionNode</span><span class="p">(</span><span class="n">TransitionMapNode</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Transition-target node to other map. This is not actually spawned in-game.&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;T&quot;</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="kc">None</span> <span class="c1"># important to leave None!</span>
<span class="n">target_map_xyz</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="c1"># must be set manually</span></div>
<div class="viewcode-block" id="NSMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.NSMapLink">[docs]</a><span class="k">class</span> <span class="nc">NSMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Two-way, North-South link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;|&quot;</span>
<span class="n">display_symbol</span> <span class="o">=</span> <span class="s2">&quot;||&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;s&quot;</span><span class="p">,</span> <span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;n&quot;</span><span class="p">}</span>
@ -1193,6 +1226,7 @@
<div class="viewcode-block" id="EWMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.EWMapLink">[docs]</a><span class="k">class</span> <span class="nc">EWMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Two-way, East-West link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;-&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="s2">&quot;e&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1200,6 +1234,7 @@
<div class="viewcode-block" id="NESWMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.NESWMapLink">[docs]</a><span class="k">class</span> <span class="nc">NESWMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Two-way, NorthWest-SouthWest link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;/&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="s2">&quot;sw&quot;</span><span class="p">,</span> <span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="s2">&quot;ne&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1207,6 +1242,7 @@
<div class="viewcode-block" id="SENWMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.SENWMapLink">[docs]</a><span class="k">class</span> <span class="nc">SENWMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Two-way, SouthEast-NorthWest link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\\</span><span class="s2">&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="s2">&quot;nw&quot;</span><span class="p">,</span> <span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="s2">&quot;se&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1214,22 +1250,23 @@
<div class="viewcode-block" id="PlusMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.PlusMapLink">[docs]</a><span class="k">class</span> <span class="nc">PlusMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Two-way, crossing North-South and East-West links&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;+&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;s&quot;</span><span class="p">,</span>
<span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="s2">&quot;e&quot;</span><span class="p">}</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;n&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;s&quot;</span><span class="p">,</span> <span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="s2">&quot;w&quot;</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="s2">&quot;e&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
<div class="viewcode-block" id="CrossMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.CrossMapLink">[docs]</a><span class="k">class</span> <span class="nc">CrossMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Two-way, crossing NorthEast-SouthWest and SouthEast-NorthWest links&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;x&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="s2">&quot;sw&quot;</span><span class="p">,</span> <span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="s2">&quot;ne&quot;</span><span class="p">,</span>
<span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="s2">&quot;nw&quot;</span><span class="p">,</span> <span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="s2">&quot;se&quot;</span><span class="p">}</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="s2">&quot;sw&quot;</span><span class="p">,</span> <span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="s2">&quot;ne&quot;</span><span class="p">,</span> <span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="s2">&quot;nw&quot;</span><span class="p">,</span> <span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="s2">&quot;se&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
<div class="viewcode-block" id="NSOneWayMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.NSOneWayMapLink">[docs]</a><span class="k">class</span> <span class="nc">NSOneWayMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;One-way North-South link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;v&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="s2">&quot;s&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1237,6 +1274,7 @@
<div class="viewcode-block" id="SNOneWayMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.SNOneWayMapLink">[docs]</a><span class="k">class</span> <span class="nc">SNOneWayMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;One-way South-North link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;^&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="s2">&quot;n&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1244,6 +1282,7 @@
<div class="viewcode-block" id="EWOneWayMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.EWOneWayMapLink">[docs]</a><span class="k">class</span> <span class="nc">EWOneWayMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;One-way East-West link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;&lt;&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="s2">&quot;w&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1251,6 +1290,7 @@
<div class="viewcode-block" id="WEOneWayMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.WEOneWayMapLink">[docs]</a><span class="k">class</span> <span class="nc">WEOneWayMapLink</span><span class="p">(</span><span class="n">MapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;One-way West-East link&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;&gt;&quot;</span>
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="s2">&quot;e&quot;</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1258,21 +1298,39 @@
<div class="viewcode-block" id="UpMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.UpMapLink">[docs]</a><span class="k">class</span> <span class="nc">UpMapLink</span><span class="p">(</span><span class="n">SmartMapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Up direction. Note that this stays on the same z-coord so it&#39;s a &#39;fake&#39; up.&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;u&#39;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;u&quot;</span>
<span class="c1"># all movement over this link is &#39;up&#39;, regardless of where on the xygrid we move.</span>
<span class="n">direction_aliases</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;n&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;ne&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;se&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s1">&#39;s&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;sw&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;nw&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">}</span>
<span class="n">direction_aliases</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">spawn_aliases</span> <span class="o">=</span> <span class="p">{</span><span class="n">direction</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;up&quot;</span><span class="p">,</span> <span class="s2">&quot;u&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">direction</span> <span class="ow">in</span> <span class="n">direction_aliases</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
<div class="viewcode-block" id="DownMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.DownMapLink">[docs]</a><span class="k">class</span> <span class="nc">DownMapLink</span><span class="p">(</span><span class="n">UpMapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Down direction. Note that this stays on the same z-coord, so it&#39;s a &#39;fake&#39; down.&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;d&#39;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;d&quot;</span>
<span class="c1"># all movement over this link is &#39;down&#39;, regardless of where on the xygrid we move.</span>
<span class="n">direction_aliases</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;n&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;ne&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;se&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s1">&#39;s&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;sw&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span> <span class="s1">&#39;nw&#39;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">}</span>
<span class="n">direction_aliases</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="n">symbol</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">spawn_aliases</span> <span class="o">=</span> <span class="p">{</span><span class="n">direction</span><span class="p">:</span> <span class="p">(</span><span class="s2">&quot;down&quot;</span><span class="p">,</span> <span class="s2">&quot;d&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">direction</span> <span class="ow">in</span> <span class="n">direction_aliases</span><span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1280,6 +1338,7 @@
<div class="viewcode-block" id="InterruptMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.InterruptMapLink">[docs]</a><span class="k">class</span> <span class="nc">InterruptMapLink</span><span class="p">(</span><span class="n">InvisibleSmartMapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A (still passable) link. Pathfinder will treat this as any link, but auto-stepper</span>
<span class="sd"> will always abort before crossing this link - so this must be crossed manually.&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;i&quot;</span>
<span class="n">interrupt_path</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
@ -1292,14 +1351,24 @@
<span class="sd"> link in any paths.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;b&#39;</span>
<span class="n">weights</span> <span class="o">=</span> <span class="p">{</span><span class="s1">&#39;n&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span> <span class="s1">&#39;ne&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span> <span class="s1">&#39;e&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span> <span class="s1">&#39;se&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s1">&#39;s&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span> <span class="s1">&#39;sw&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span> <span class="s1">&#39;w&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span> <span class="s1">&#39;nw&#39;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">}</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;b&quot;</span>
<span class="n">weights</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s2">&quot;ne&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s2">&quot;e&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s2">&quot;se&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s2">&quot;s&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s2">&quot;sw&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s2">&quot;w&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="n">BIGVAL</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="s2">&quot;xyz_exit&quot;</span></div>
<div class="viewcode-block" id="RouterMapLink"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xymap_legend.html#evennia.contrib.grid.xyzgrid.xymap_legend.RouterMapLink">[docs]</a><span class="k">class</span> <span class="nc">RouterMapLink</span><span class="p">(</span><span class="n">SmartRerouterMapLink</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A link that connects other links to build &#39;knees&#39;, pass-throughs etc.&quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;o&quot;</span></div>
@ -1308,7 +1377,8 @@
<span class="sd"> Teleporter links. Must appear in pairs on the same xy map. To make it one-way, add additional</span>
<span class="sd"> one-way link out of the teleporter on one side.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">symbol</span> <span class="o">=</span> <span class="s1">&#39;t&#39;</span></div>
<span class="n">symbol</span> <span class="o">=</span> <span class="s2">&quot;t&quot;</span></div>
<span class="c1"># all map components; used as base if not overridden</span>
@ -1333,7 +1403,7 @@
<span class="s2">&quot;d&quot;</span><span class="p">:</span> <span class="n">DownMapLink</span><span class="p">,</span>
<span class="s2">&quot;b&quot;</span><span class="p">:</span> <span class="n">BlockedMapLink</span><span class="p">,</span>
<span class="s2">&quot;i&quot;</span><span class="p">:</span> <span class="n">InterruptMapLink</span><span class="p">,</span>
<span class="s1">&#39;t&#39;</span><span class="p">:</span> <span class="n">TeleporterMapLink</span><span class="p">,</span>
<span class="s2">&quot;t&quot;</span><span class="p">:</span> <span class="n">TeleporterMapLink</span><span class="p">,</span>
<span class="p">}</span>
</pre></div>

View file

@ -70,6 +70,7 @@
<span class="sd"> Main grid class. This organizes the Maps based on their name/Z-coordinate.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="XYZGrid.at_script_creation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzgrid.html#evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid.at_script_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_script_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> What we store persistently is data used to create each map (the legends, names etc)</span>
@ -130,7 +131,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="n">xyz</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="XYZGrid.get_exit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzgrid.html#evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid.get_exit">[docs]</a> <span class="k">def</span> <span class="nf">get_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s1">&#39;north&#39;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="XYZGrid.get_exit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzgrid.html#evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid.get_exit">[docs]</a> <span class="k">def</span> <span class="nf">get_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;north&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get one or more exit object at coordinate.</span>
@ -144,7 +145,7 @@
<span class="sd"> Queryset: A queryset of XYZExit(s) found.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;db_key&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">name</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;db_key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">name</span>
<span class="k">return</span> <span class="n">XYZExit</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz_exit</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="n">xyz</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="XYZGrid.maps_from_module"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzgrid.html#evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid.maps_from_module">[docs]</a> <span class="k">def</span> <span class="nf">maps_from_module</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">module_path</span><span class="p">):</span>
@ -169,7 +170,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">mapdata</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Could not find or load map from </span><span class="si">{</span><span class="n">module_path</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">mapdata</span><span class="p">[</span><span class="s1">&#39;module_path&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">module_path</span>
<span class="n">mapdata</span><span class="p">[</span><span class="s2">&quot;module_path&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">module_path</span>
<span class="k">return</span> <span class="n">map_data_list</span></div>
<div class="viewcode-block" id="XYZGrid.reload"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzgrid.html#evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid.reload">[docs]</a> <span class="k">def</span> <span class="nf">reload</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -196,9 +197,9 @@
<span class="c1"># we reload the map from module</span>
<span class="n">new_mapdata</span> <span class="o">=</span> <span class="n">loaded_mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">zcoord</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_mapdata</span><span class="p">:</span>
<span class="k">if</span> <span class="s1">&#39;module_path&#39;</span> <span class="ow">in</span> <span class="n">old_mapdata</span><span class="p">:</span>
<span class="k">for</span> <span class="n">mapdata</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">maps_from_module</span><span class="p">(</span><span class="n">old_mapdata</span><span class="p">[</span><span class="s1">&#39;module_path&#39;</span><span class="p">]):</span>
<span class="n">loaded_mapdata</span><span class="p">[</span><span class="n">mapdata</span><span class="p">[</span><span class="s1">&#39;zcoord&#39;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">mapdata</span>
<span class="k">if</span> <span class="s2">&quot;module_path&quot;</span> <span class="ow">in</span> <span class="n">old_mapdata</span><span class="p">:</span>
<span class="k">for</span> <span class="n">mapdata</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">maps_from_module</span><span class="p">(</span><span class="n">old_mapdata</span><span class="p">[</span><span class="s2">&quot;module_path&quot;</span><span class="p">]):</span>
<span class="n">loaded_mapdata</span><span class="p">[</span><span class="n">mapdata</span><span class="p">[</span><span class="s2">&quot;zcoord&quot;</span><span class="p">]]</span> <span class="o">=</span> <span class="n">mapdata</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># nowhere to reload from - use what we have</span>
<span class="n">loaded_mapdata</span><span class="p">[</span><span class="n">zcoord</span><span class="p">]</span> <span class="o">=</span> <span class="n">old_mapdata</span>
@ -240,7 +241,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">mapdata</span> <span class="ow">in</span> <span class="n">mapdatas</span><span class="p">:</span>
<span class="n">zcoord</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;zcoord&#39;</span><span class="p">)</span>
<span class="n">zcoord</span> <span class="o">=</span> <span class="n">mapdata</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;zcoord&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">zcoord</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="s2">&quot;XYZGrid.add_map data must contain &#39;zcoord&#39;.&quot;</span><span class="p">)</span>
@ -262,7 +263,7 @@
<span class="k">if</span> <span class="n">remove_objects</span><span class="p">:</span>
<span class="c1"># we can&#39;t batch-delete because we want to run the .delete</span>
<span class="c1"># method that also wipes exits and moves content to save locations</span>
<span class="k">for</span> <span class="n">xyzroom</span> <span class="ow">in</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="n">zcoord</span><span class="p">)):</span>
<span class="k">for</span> <span class="n">xyzroom</span> <span class="ow">in</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="n">zcoord</span><span class="p">)):</span>
<span class="n">xyzroom</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">reload</span><span class="p">()</span></div>
@ -276,7 +277,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">remove_map</span><span class="p">(</span><span class="o">*</span><span class="p">(</span><span class="n">zcoord</span> <span class="k">for</span> <span class="n">zcoord</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">map_data</span><span class="p">),</span> <span class="n">remove_objects</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<div class="viewcode-block" id="XYZGrid.spawn"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzgrid.html#evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid.spawn">[docs]</a> <span class="k">def</span> <span class="nf">spawn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">),</span> <span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="XYZGrid.spawn"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzgrid.html#evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid.spawn">[docs]</a> <span class="k">def</span> <span class="nf">spawn</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">directions</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Create/recreate/update the in-game grid based on the stored Maps or for a specific Map</span>
<span class="sd"> or coordinate.</span>
@ -297,7 +298,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">xyz</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s1">&#39;*&#39;</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s2">&quot;*&quot;</span>
<span class="k">if</span> <span class="n">z</span> <span class="o">==</span> <span class="n">wildcard</span><span class="p">:</span>
<span class="n">xymaps</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span>
@ -335,8 +336,10 @@
<span class="n">xyzgrid</span><span class="o">.</span><span class="n">reload</span><span class="p">()</span>
<span class="k">return</span> <span class="n">xyzgrid</span>
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">xyzgrid</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="p">(</span><span class="s2">&quot;Warning: More than one XYZGrid instances were found. This is an error and &quot;</span>
<span class="s2">&quot;only the first one will be used. Delete the other one(s) manually.&quot;</span><span class="p">)</span>
<span class="p">(</span>
<span class="s2">&quot;Warning: More than one XYZGrid instances were found. This is an error and &quot;</span>
<span class="s2">&quot;only the first one will be used. Delete the other one(s) manually.&quot;</span>
<span class="p">)</span>
<span class="n">xyzgrid</span> <span class="o">=</span> <span class="n">xyzgrid</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">xyzgrid</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">loaded</span><span class="p">:</span>

View file

@ -73,7 +73,8 @@
<span class="sd"> efficiently querying the room in the database based on XY coordinates.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="XYZManager.filter_xyz"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZManager.filter_xyz">[docs]</a> <span class="k">def</span> <span class="nf">filter_xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="XYZManager.filter_xyz"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZManager.filter_xyz">[docs]</a> <span class="k">def</span> <span class="nf">filter_xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Filter queryset based on XYZ position on the grid. The Z-position is the name of the XYMap</span>
<span class="sd"> Set a coordinate to `&#39;*&#39;` to act as a wildcard (setting all coords to `*` will thus find</span>
@ -91,23 +92,28 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">xyz</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s1">&#39;*&#39;</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s2">&quot;*&quot;</span>
<span class="k">return</span> <span class="p">(</span>
<span class="bp">self</span>
<span class="o">.</span><span class="n">filter_family</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filter_family</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_X_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_X_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">y</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Y_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">y</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Y_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">z</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">z</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="XYZManager.get_xyz"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZManager.get_xyz">[docs]</a> <span class="k">def</span> <span class="nf">get_xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</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="s1">&#39;map&#39;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="XYZManager.get_xyz"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZManager.get_xyz">[docs]</a> <span class="k">def</span> <span class="nf">get_xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</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;map&quot;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Always return a single matched entity directly. This accepts no `*`-wildcards.</span>
<span class="sd"> This will also find children of XYZRooms on the given coordinates.</span>
@ -135,8 +141,9 @@
<span class="c1"># error - mimic default get() behavior but with a little more info</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">xyz</span>
<span class="n">inp</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Query: xyz=(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">), &quot;</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">key</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="n">val</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</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">inp</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;Query: xyz=(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">), &quot;</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">key</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="n">val</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</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="p">)</span>
<span class="k">if</span> <span class="n">ncount</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">MultipleObjectsReturned</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
@ -150,8 +157,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="XYZExitManager.filter_xyz_exit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZExitManager.filter_xyz_exit">[docs]</a> <span class="k">def</span> <span class="nf">filter_xyz_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">),</span>
<span class="n">xyz_destination</span><span class="o">=</span><span class="p">(</span><span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">,</span> <span class="s1">&#39;*&#39;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="XYZExitManager.filter_xyz_exit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZExitManager.filter_xyz_exit">[docs]</a> <span class="k">def</span> <span class="nf">filter_xyz_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="n">xyz_destination</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">,</span> <span class="s2">&quot;*&quot;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Used by exits (objects with a source and -destination property).</span>
<span class="sd"> Find all exits out of a source or to a particular destination. This will also find</span>
@ -180,32 +186,43 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">xyz</span>
<span class="n">xdest</span><span class="p">,</span> <span class="n">ydest</span><span class="p">,</span> <span class="n">zdest</span> <span class="o">=</span> <span class="n">xyz_destination</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s1">&#39;*&#39;</span>
<span class="n">wildcard</span> <span class="o">=</span> <span class="s2">&quot;*&quot;</span>
<span class="k">return</span> <span class="p">(</span>
<span class="bp">self</span>
<span class="o">.</span><span class="n">filter_family</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">filter_family</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_X_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">x</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_X_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">y</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Y_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">y</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Y_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">z</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">z</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">xdest</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">xdest</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_XDEST_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">xdest</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">xdest</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_XDEST_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">ydest</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">ydest</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_YDEST_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">ydest</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">ydest</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_YDEST_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">Q</span><span class="p">()</span> <span class="k">if</span> <span class="n">zdest</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">zdest</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_ZDEST_TAG_CATEGORY</span><span class="p">))</span>
<span class="n">Q</span><span class="p">()</span>
<span class="k">if</span> <span class="n">zdest</span> <span class="o">==</span> <span class="n">wildcard</span>
<span class="k">else</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key</span><span class="o">=</span><span class="nb">str</span><span class="p">(</span><span class="n">zdest</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_ZDEST_TAG_CATEGORY</span><span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="XYZExitManager.get_xyz_exit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZExitManager.get_xyz_exit">[docs]</a> <span class="k">def</span> <span class="nf">get_xyz_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</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="s1">&#39;map&#39;</span><span class="p">),</span> <span class="n">xyz_destination</span><span class="o">=</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="s1">&#39;map&#39;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="XYZExitManager.get_xyz_exit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZExitManager.get_xyz_exit">[docs]</a> <span class="k">def</span> <span class="nf">get_xyz_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</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;map&quot;</span><span class="p">),</span> <span class="n">xyz_destination</span><span class="o">=</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;map&quot;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Used by exits (objects with a source and -destination property). Get a single</span>
<span class="sd"> exit. All source/destination coordinates (as well as the map&#39;s name) are required.</span>
@ -241,8 +258,7 @@
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="p">(</span>
<span class="bp">self</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="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">)</span>
<span class="bp">self</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="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">)</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="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_X_TAG_CATEGORY</span><span class="p">)</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="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_Y_TAG_CATEGORY</span><span class="p">)</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="nb">str</span><span class="p">(</span><span class="n">xdest</span><span class="p">),</span> <span class="n">db_tags__db_category</span><span class="o">=</span><span class="n">MAP_XDEST_TAG_CATEGORY</span><span class="p">)</span>
@ -251,10 +267,12 @@
<span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">except</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="n">inp</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;xyz=(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">),xyz_destination=(</span><span class="si">{</span><span class="n">xdest</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">ydest</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">zdest</span><span class="si">}</span><span class="s2">),&quot;</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">key</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="n">val</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</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">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> &quot;</span>
<span class="sa">f</span><span class="s2">&quot;matching query </span><span class="si">{</span><span class="n">inp</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span><span class="p">)</span></div></div>
<span class="n">inp</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;xyz=(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">),xyz_destination=(</span><span class="si">{</span><span class="n">xdest</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">ydest</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">zdest</span><span class="si">}</span><span class="s2">),&quot;</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">key</span><span class="si">}</span><span class="s2">=</span><span class="si">{</span><span class="n">val</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</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="p">)</span>
<span class="k">raise</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="vm">__name__</span><span class="si">}</span><span class="s2"> &quot;</span> <span class="sa">f</span><span class="s2">&quot;matching query </span><span class="si">{</span><span class="n">inp</span><span class="si">}</span><span class="s2"> does not exist.&quot;</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="XYZRoom"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom">[docs]</a><span class="k">class</span> <span class="nc">XYZRoom</span><span class="p">(</span><span class="n">DefaultRoom</span><span class="p">):</span>
@ -286,10 +304,10 @@
<span class="c1"># default settings for map visualization</span>
<span class="n">map_display</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">map_mode</span> <span class="o">=</span> <span class="s1">&#39;nodes&#39;</span> <span class="c1"># or &#39;scan&#39;</span>
<span class="n">map_mode</span> <span class="o">=</span> <span class="s2">&quot;nodes&quot;</span> <span class="c1"># or &#39;scan&#39;</span>
<span class="n">map_visual_range</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">map_character_symbol</span> <span class="o">=</span> <span class="s2">&quot;|g@|n&quot;</span>
<span class="n">map_align</span> <span class="o">=</span> <span class="s1">&#39;c&#39;</span>
<span class="n">map_align</span> <span class="o">=</span> <span class="s2">&quot;c&quot;</span>
<span class="n">map_target_path_style</span> <span class="o">=</span> <span class="s2">&quot;|y</span><span class="si">{display_symbol}</span><span class="s2">|n&quot;</span>
<span class="n">map_fill_all</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">map_separator_char</span> <span class="o">=</span> <span class="s2">&quot;|x~|n&quot;</span>
@ -309,8 +327,10 @@
<span class="n">z</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="k">if</span> <span class="n">x</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">y</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">z</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># don&#39;t cache unfinished coordinate (probably tags have not finished saving)</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">coord</span><span class="p">)</span> <span class="k">if</span> <span class="n">coord</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">coord</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="n">coord</span>
<span class="k">for</span> <span class="n">coord</span> <span class="ow">in</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">))</span>
<span class="k">return</span> <span class="nb">tuple</span><span class="p">(</span>
<span class="nb">int</span><span class="p">(</span><span class="n">coord</span><span class="p">)</span> <span class="k">if</span> <span class="n">coord</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">coord</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="n">coord</span>
<span class="k">for</span> <span class="n">coord</span> <span class="ow">in</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># cache result, convert to correct types (tags are strings)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_xyz</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">coord</span><span class="p">)</span> <span class="k">if</span> <span class="n">coord</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="k">else</span> <span class="n">coord</span> <span class="k">for</span> <span class="n">coord</span> <span class="ow">in</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">))</span>
@ -332,7 +352,7 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_xymap</span>
<div class="viewcode-block" id="XYZRoom.create"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom.create">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</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="s1">&#39;map&#39;</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="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</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;map&quot;</span><span class="p">),</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creation method aware of XYZ coordinates.</span>
@ -358,14 +378,18 @@
<span class="k">try</span><span class="p">:</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span> <span class="o">=</span> <span class="n">xyz</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;XYRroom.create got `xyz=</span><span class="si">{</span><span class="n">xyz</span><span class="si">}</span><span class="s2">` - needs a valid (X,Y,Z) &quot;</span>
<span class="s2">&quot;coordinate of ints/strings.&quot;</span><span class="p">]</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[</span>
<span class="sa">f</span><span class="s2">&quot;XYRroom.create got `xyz=</span><span class="si">{</span><span class="n">xyz</span><span class="si">}</span><span class="s2">` - needs a valid (X,Y,Z) &quot;</span>
<span class="s2">&quot;coordinate of ints/strings.&quot;</span>
<span class="p">]</span>
<span class="n">existing_query</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">))</span>
<span class="k">if</span> <span class="n">existing_query</span><span class="o">.</span><span class="n">exists</span><span class="p">():</span>
<span class="n">existing_room</span> <span class="o">=</span> <span class="n">existing_query</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[</span><span class="sa">f</span><span class="s2">&quot;XYRoom XYZ=(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">) already exists &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(existing room is named &#39;</span><span class="si">{</span><span class="n">existing_room</span><span class="o">.</span><span class="n">db_key</span><span class="si">}</span><span class="s2">&#39;)!&quot;</span><span class="p">]</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[</span>
<span class="sa">f</span><span class="s2">&quot;XYRoom XYZ=(</span><span class="si">{</span><span class="n">x</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">y</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">z</span><span class="si">}</span><span class="s2">) already exists &quot;</span>
<span class="sa">f</span><span class="s2">&quot;(existing room is named &#39;</span><span class="si">{</span><span class="n">existing_room</span><span class="o">.</span><span class="n">db_key</span><span class="si">}</span><span class="s2">&#39;)!&quot;</span>
<span class="p">]</span>
<span class="n">tags</span> <span class="o">=</span> <span class="p">(</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">MAP_X_TAG_CATEGORY</span><span class="p">),</span>
@ -452,26 +476,29 @@
<span class="n">xyz</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xyz</span>
<span class="n">xymap</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xyzgrid</span><span class="o">.</span><span class="n">get_map</span><span class="p">(</span><span class="n">xyz</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="k">if</span> <span class="n">xymap</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;map_display&#39;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_display&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_display</span><span class="p">)):</span>
<span class="k">if</span> <span class="n">xymap</span> <span class="ow">and</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_display&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_display&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_display</span><span class="p">)):</span>
<span class="c1"># show the near-area map.</span>
<span class="n">map_character_symbol</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="s1">&#39;map_character_symbol&#39;</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_character_symbol&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_character_symbol</span><span class="p">))</span>
<span class="s2">&quot;map_character_symbol&quot;</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_character_symbol&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_character_symbol</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">map_visual_range</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;map_visual_range&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_visual_range&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_visual_range</span><span class="p">))</span>
<span class="n">map_mode</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;map_mode&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_mode&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_mode</span><span class="p">))</span>
<span class="n">map_align</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;map_align&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_align&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_align</span><span class="p">))</span>
<span class="s2">&quot;map_visual_range&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_visual_range&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_visual_range</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">map_mode</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;map_mode&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_mode&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_mode</span><span class="p">))</span>
<span class="n">map_align</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;map_align&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_align&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_align</span><span class="p">))</span>
<span class="n">map_target_path_style</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;map_target_path_style&quot;</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_target_path_style&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_target_path_style</span><span class="p">))</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_target_path_style&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_target_path_style</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">map_area_client</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;map_fill_all&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_fill_all&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_fill_all</span><span class="p">))</span>
<span class="s2">&quot;map_fill_all&quot;</span><span class="p">,</span> <span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_fill_all&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_fill_all</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">map_separator_char</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;map_separator_char&quot;</span><span class="p">,</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_separator_char&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_separator_char</span><span class="p">))</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;map_separator_char&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">map_separator_char</span><span class="p">),</span>
<span class="p">)</span>
<span class="n">client_width</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">looker</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_client_size</span><span class="p">()</span>
@ -480,15 +507,14 @@
<span class="k">if</span> <span class="n">map_area_client</span><span class="p">:</span>
<span class="n">display_width</span> <span class="o">=</span> <span class="n">client_width</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">display_width</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">map_width</span><span class="p">,</span>
<span class="nb">max</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">room_desc</span><span class="o">.</span><span class="n">split</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="n">display_width</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">map_width</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">room_desc</span><span class="o">.</span><span class="n">split</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="c1"># align map</span>
<span class="n">map_indent</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">sep_width</span> <span class="o">=</span> <span class="n">display_width</span>
<span class="k">if</span> <span class="n">map_align</span> <span class="o">==</span> <span class="s1">&#39;r&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">map_align</span> <span class="o">==</span> <span class="s2">&quot;r&quot;</span><span class="p">:</span>
<span class="n">map_indent</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">display_width</span> <span class="o">-</span> <span class="n">map_width</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">map_align</span> <span class="o">==</span> <span class="s1">&#39;c&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">map_align</span> <span class="o">==</span> <span class="s2">&quot;c&quot;</span><span class="p">:</span>
<span class="n">map_indent</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="p">(</span><span class="n">display_width</span> <span class="o">-</span> <span class="n">map_width</span><span class="p">)</span> <span class="o">//</span> <span class="mi">2</span><span class="p">)</span>
<span class="c1"># data set by the goto/path-command, for displaying the shortest path</span>
@ -504,7 +530,7 @@
<span class="n">target_path_style</span><span class="o">=</span><span class="n">map_target_path_style</span><span class="p">,</span>
<span class="n">character</span><span class="o">=</span><span class="n">map_character_symbol</span><span class="p">,</span>
<span class="n">max_size</span><span class="o">=</span><span class="p">(</span><span class="n">display_width</span><span class="p">,</span> <span class="kc">None</span><span class="p">),</span>
<span class="n">indent</span><span class="o">=</span><span class="n">map_indent</span>
<span class="n">indent</span><span class="o">=</span><span class="n">map_indent</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">sep</span> <span class="o">=</span> <span class="n">map_separator_char</span> <span class="o">*</span> <span class="n">sep_width</span>
<span class="n">map_display</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="s2">|n</span><span class="se">\n</span><span class="si">{</span><span class="n">map_display</span><span class="si">}</span><span class="se">\n</span><span class="si">{</span><span class="n">sep</span><span class="si">}</span><span class="s2">&quot;</span>
@ -565,8 +591,16 @@
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_xyz_destination</span>
<div class="viewcode-block" id="XYZExit.create"><a class="viewcode-back" href="../../../../../api/evennia.contrib.grid.xyzgrid.xyzroom.html#evennia.contrib.grid.xyzgrid.xyzroom.XYZExit.create">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">create</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">xyz</span><span class="o">=</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="s1">&#39;map&#39;</span><span class="p">),</span> <span class="n">xyz_destination</span><span class="o">=</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="s1">&#39;map&#39;</span><span class="p">),</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">destination</span><span class="o">=</span><span class="kc">None</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="nf">create</span><span class="p">(</span>
<span class="bp">cls</span><span class="p">,</span>
<span class="n">key</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">xyz</span><span class="o">=</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;map&quot;</span><span class="p">),</span>
<span class="n">xyz_destination</span><span class="o">=</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;map&quot;</span><span class="p">),</span>
<span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">destination</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creation method aware of coordinates.</span>
@ -601,26 +635,36 @@
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;XYExit.create need either `xyz=(X,Y,Z)` coordinate or a `location`.&quot;</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">source</span> <span class="o">=</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">z</span><span class="p">))</span>
<span class="n">tags</span><span class="o">.</span><span class="n">extend</span><span class="p">(((</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">MAP_X_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">MAP_Y_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">)))</span>
<span class="n">tags</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
<span class="p">(</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">),</span> <span class="n">MAP_X_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">),</span> <span class="n">MAP_Y_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">z</span><span class="p">),</span> <span class="n">MAP_Z_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">destination</span><span class="p">:</span>
<span class="n">dest</span> <span class="o">=</span> <span class="n">destination</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">xdest</span><span class="p">,</span> <span class="n">ydest</span><span class="p">,</span> <span class="n">zdest</span> <span class="o">=</span> <span class="n">xyz_destination</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;XYExit.create need either `xyz_destination=(X,Y,Z)` coordinate &quot;</span>
<span class="s2">&quot;or a `destination`.&quot;</span><span class="p">]</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[</span>
<span class="s2">&quot;XYExit.create need either `xyz_destination=(X,Y,Z)` coordinate &quot;</span>
<span class="s2">&quot;or a `destination`.&quot;</span>
<span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">dest</span> <span class="o">=</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_xyz</span><span class="p">(</span><span class="n">xyz</span><span class="o">=</span><span class="p">(</span><span class="n">xdest</span><span class="p">,</span> <span class="n">ydest</span><span class="p">,</span> <span class="n">zdest</span><span class="p">))</span>
<span class="n">tags</span><span class="o">.</span><span class="n">extend</span><span class="p">(((</span><span class="nb">str</span><span class="p">(</span><span class="n">xdest</span><span class="p">),</span> <span class="n">MAP_XDEST_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">ydest</span><span class="p">),</span> <span class="n">MAP_YDEST_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">zdest</span><span class="p">),</span> <span class="n">MAP_ZDEST_TAG_CATEGORY</span><span class="p">)))</span>
<span class="n">tags</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
<span class="p">(</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">xdest</span><span class="p">),</span> <span class="n">MAP_XDEST_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">ydest</span><span class="p">),</span> <span class="n">MAP_YDEST_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">zdest</span><span class="p">),</span> <span class="n">MAP_ZDEST_TAG_CATEGORY</span><span class="p">),</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">DefaultExit</span><span class="o">.</span><span class="n">create</span><span class="p">(</span>
<span class="n">key</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span>
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="bp">cls</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div></div>
<span class="n">key</span><span class="p">,</span> <span class="n">source</span><span class="p">,</span> <span class="n">dest</span><span class="p">,</span> <span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="bp">cls</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>

View file

@ -100,8 +100,7 @@
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">default_cmds</span><span class="p">,</span> <span class="n">CmdSet</span>
<div class="viewcode-block" id="roll"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.dice.dice.html#evennia.contrib.rpg.dice.dice.roll">[docs]</a><span class="k">def</span> <span class="nf">roll</span><span class="p">(</span><span class="n">dicenum</span><span class="p">,</span> <span class="n">dicetype</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">conditional</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_tuple</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<div class="viewcode-block" id="roll"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.dice.dice.html#evennia.contrib.rpg.dice.dice.roll">[docs]</a><span class="k">def</span> <span class="nf">roll</span><span class="p">(</span><span class="n">dicenum</span><span class="p">,</span> <span class="n">dicetype</span><span class="p">,</span> <span class="n">modifier</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">conditional</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_tuple</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This is a standard dice roller.</span>
@ -183,6 +182,7 @@
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">result</span></div>
<span class="c1"># legacy alias</span>
<span class="n">roll_dice</span> <span class="o">=</span> <span class="n">roll</span>

View file

@ -357,7 +357,8 @@
<span class="k">raise</span> <span class="ne">IndexError</span><span class="p">(</span>
<span class="s2">&quot;Could not find a matching phoneme for the grammar &quot;</span>
<span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">()</span><span class="si">}</span><span class="s2">&#39;. Make there is at least one phoneme matching this &quot;</span>
<span class="s2">&quot;combination of consonants and vowels.&quot;</span><span class="p">)</span>
<span class="s2">&quot;combination of consonants and vowels.&quot;</span>
<span class="p">)</span>
<span class="n">translation</span><span class="p">[</span><span class="n">word</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">new_word</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">manual_translations</span><span class="p">:</span>

View file

@ -555,7 +555,7 @@
<span class="n">errors</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_EMOTE_NOMATCH_ERROR</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ref</span><span class="o">=</span><span class="n">marker_match</span><span class="o">.</span><span class="n">group</span><span class="p">()))</span>
<span class="k">elif</span> <span class="n">nmatches</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="c1"># a unique match - parse into intermediary representation</span>
<span class="n">case</span> <span class="o">=</span> <span class="s1">&#39;~&#39;</span> <span class="c1"># retain original case of sdesc</span>
<span class="n">case</span> <span class="o">=</span> <span class="s2">&quot;~&quot;</span> <span class="c1"># retain original case of sdesc</span>
<span class="k">if</span> <span class="n">case_sensitive</span><span class="p">:</span>
<span class="c1"># case sensitive mode</span>
<span class="c1"># internal flags for the case used for the original /query</span>
@ -568,14 +568,14 @@
<span class="c1"># self-refs are kept as-is, others are parsed by case</span>
<span class="n">matchtext</span> <span class="o">=</span> <span class="n">marker_match</span><span class="o">.</span><span class="n">group</span><span class="p">()</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_PREFIX</span><span class="p">)</span>
<span class="k">if</span> <span class="n">matchtext</span><span class="o">.</span><span class="n">istitle</span><span class="p">():</span>
<span class="n">case</span> <span class="o">=</span> <span class="s1">&#39;t&#39;</span>
<span class="n">case</span> <span class="o">=</span> <span class="s2">&quot;t&quot;</span>
<span class="k">elif</span> <span class="n">matchtext</span><span class="o">.</span><span class="n">isupper</span><span class="p">():</span>
<span class="n">case</span> <span class="o">=</span> <span class="s1">&#39;^&#39;</span>
<span class="n">case</span> <span class="o">=</span> <span class="s2">&quot;^&quot;</span>
<span class="k">elif</span> <span class="n">matchtext</span><span class="o">.</span><span class="n">islower</span><span class="p">():</span>
<span class="n">case</span> <span class="o">=</span> <span class="s1">&#39;v&#39;</span>
<span class="n">case</span> <span class="o">=</span> <span class="s2">&quot;v&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;#</span><span class="si">%i%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">case</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="n">string</span><span class="p">[:</span><span class="n">istart0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;{</span><span class="si">%s</span><span class="s2">}&quot;</span> <span class="o">%</span> <span class="n">key</span> <span class="o">+</span> <span class="n">string</span><span class="p">[</span><span class="n">istart</span> <span class="o">+</span> <span class="n">maxscore</span><span class="p">:]</span>
<span class="n">string</span> <span class="o">=</span> <span class="n">string</span><span class="p">[:</span><span class="n">istart0</span><span class="p">]</span> <span class="o">+</span> <span class="s2">&quot;{</span><span class="si">%s</span><span class="s2">}&quot;</span> <span class="o">%</span> <span class="n">key</span> <span class="o">+</span> <span class="n">string</span><span class="p">[</span><span class="n">istart</span> <span class="o">+</span> <span class="n">maxscore</span> <span class="p">:]</span>
<span class="n">mapping</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">obj</span>
<span class="k">else</span><span class="p">:</span>
@ -643,8 +643,9 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">case_sensitive</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;case_sensitive&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">emote</span><span class="p">,</span> <span class="n">obj_mapping</span> <span class="o">=</span> <span class="n">parse_sdescs_and_recogs</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span>
<span class="n">case_sensitive</span><span class="o">=</span><span class="n">case_sensitive</span><span class="p">)</span>
<span class="n">emote</span><span class="p">,</span> <span class="n">obj_mapping</span> <span class="o">=</span> <span class="n">parse_sdescs_and_recogs</span><span class="p">(</span>
<span class="n">sender</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="n">case_sensitive</span>
<span class="p">)</span>
<span class="n">emote</span><span class="p">,</span> <span class="n">language_mapping</span> <span class="o">=</span> <span class="n">parse_language</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">emote</span><span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="n">EmoteError</span><span class="p">,</span> <span class="n">LanguageError</span><span class="p">)</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="c1"># handle all error messages, don&#39;t hide actual coding errors</span>
@ -657,8 +658,8 @@
<span class="c1"># (the text could have nested object mappings).</span>
<span class="n">emote</span> <span class="o">=</span> <span class="n">_RE_REF</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;{{#\1}}&quot;</span><span class="p">,</span> <span class="n">emote</span><span class="p">)</span>
<span class="c1"># if anonymous_add is passed as a kwarg, collect and remove it from kwargs</span>
<span class="k">if</span> <span class="s1">&#39;anonymous_add&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">anonymous_add</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s1">&#39;anonymous_add&#39;</span><span class="p">)</span>
<span class="k">if</span> <span class="s2">&quot;anonymous_add&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">anonymous_add</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;anonymous_add&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">anonymous_add</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">any</span><span class="p">(</span><span class="mi">1</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">obj_mapping</span> <span class="k">if</span> <span class="n">tag</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">skey</span><span class="p">)):</span>
<span class="c1"># no self-reference in the emote - add to the end</span>
<span class="n">obj_mapping</span><span class="p">[</span><span class="n">skey</span><span class="p">]</span> <span class="o">=</span> <span class="n">sender</span>
@ -712,12 +713,13 @@
<span class="p">)</span>
<span class="c1"># make sure receiver always sees their real name</span>
<span class="n">rkey_start</span> <span class="o">=</span> <span class="s2">&quot;#</span><span class="si">%i</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">receiver</span><span class="o">.</span><span class="n">id</span>
<span class="n">rkey_keep_case</span> <span class="o">=</span> <span class="n">rkey_start</span> <span class="o">+</span> <span class="s1">&#39;~&#39;</span> <span class="c1"># signifies keeping the case</span>
<span class="n">rkey_keep_case</span> <span class="o">=</span> <span class="n">rkey_start</span> <span class="o">+</span> <span class="s2">&quot;~&quot;</span> <span class="c1"># signifies keeping the case</span>
<span class="k">for</span> <span class="n">rkey</span> <span class="ow">in</span> <span class="p">(</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">receiver_sdesc_mapping</span> <span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">rkey_start</span><span class="p">)):</span>
<span class="c1"># we could have #%i^, #%it etc depending on input case - we want the</span>
<span class="c1"># self-reference to retain case.</span>
<span class="n">receiver_sdesc_mapping</span><span class="p">[</span><span class="n">rkey</span><span class="p">]</span> <span class="o">=</span> <span class="n">process_sdesc</span><span class="p">(</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">ref</span><span class="o">=</span><span class="n">rkey_keep_case</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">receiver</span><span class="p">,</span> <span class="n">ref</span><span class="o">=</span><span class="n">rkey_keep_case</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span>
<span class="c1"># do the template replacement of the sdesc/recog {#num} markers</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">sendemote</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">receiver_sdesc_mapping</span><span class="p">),</span> <span class="n">from_obj</span><span class="o">=</span><span class="n">sender</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@ -1751,14 +1753,14 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">sdesc</span><span class="p">:</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span>
<span class="n">ref</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="s1">&#39;ref&#39;</span><span class="p">,</span> <span class="s1">&#39;~&#39;</span><span class="p">)</span> <span class="c1"># ~ to keep sdesc unchanged</span>
<span class="k">if</span> <span class="s1">&#39;t&#39;</span> <span class="ow">in</span> <span class="n">ref</span><span class="p">:</span>
<span class="n">ref</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;ref&quot;</span><span class="p">,</span> <span class="s2">&quot;~&quot;</span><span class="p">)</span> <span class="c1"># ~ to keep sdesc unchanged</span>
<span class="k">if</span> <span class="s2">&quot;t&quot;</span> <span class="ow">in</span> <span class="n">ref</span><span class="p">:</span>
<span class="c1"># we only want to capitalize the first letter if there are many words</span>
<span class="n">sdesc</span> <span class="o">=</span> <span class="n">sdesc</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">sdesc</span> <span class="o">=</span> <span class="n">sdesc</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="o">+</span> <span class="n">sdesc</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">sdesc</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">sdesc</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="k">elif</span> <span class="s1">&#39;^&#39;</span> <span class="ow">in</span> <span class="n">ref</span><span class="p">:</span>
<span class="k">elif</span> <span class="s2">&quot;^&quot;</span> <span class="ow">in</span> <span class="n">ref</span><span class="p">:</span>
<span class="n">sdesc</span> <span class="o">=</span> <span class="n">sdesc</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span>
<span class="k">elif</span> <span class="s1">&#39;v&#39;</span> <span class="ow">in</span> <span class="n">ref</span><span class="p">:</span>
<span class="k">elif</span> <span class="s2">&quot;v&quot;</span> <span class="ow">in</span> <span class="n">ref</span><span class="p">:</span>
<span class="n">sdesc</span> <span class="o">=</span> <span class="n">sdesc</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">return</span> <span class="s2">&quot;|b</span><span class="si">%s</span><span class="s2">|n&quot;</span> <span class="o">%</span> <span class="n">sdesc</span></div>

View file

@ -316,7 +316,7 @@
<span class="n">result</span> <span class="o">=</span> <span class="n">rpsystem</span><span class="o">.</span><span class="n">regex_tuple_from_key_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">)</span>
<span class="n">t2</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="c1"># print(f&quot;t1: {t1 - t0}, t2: {t2 - t1}&quot;)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertLess</span><span class="p">(</span><span class="n">t2</span> <span class="o">-</span> <span class="n">t1</span><span class="p">,</span> <span class="mi">10</span> <span class="o">**</span> <span class="o">-</span><span class="mi">4</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertLess</span><span class="p">(</span><span class="n">t2</span> <span class="o">-</span> <span class="n">t1</span><span class="p">,</span> <span class="mi">10</span><span class="o">**-</span><span class="mi">4</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="p">(</span><span class="n">Anything</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">key</span><span class="p">))</span></div></div>

View file

@ -101,16 +101,28 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">traithandler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;Test1&quot;</span><span class="p">,</span> <span class="n">trait_type</span><span class="o">=</span><span class="s2">&quot;trait&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">traithandler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="s2">&quot;test2&quot;</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">&quot;Test2&quot;</span><span class="p">,</span> <span class="n">trait_type</span><span class="o">=</span><span class="s2">&quot;trait&quot;</span><span class="p">,</span> <span class="n">value</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]},</span> <span class="mi">4</span><span class="p">],</span>
<span class="s2">&quot;test2&quot;</span><span class="p">,</span>
<span class="n">name</span><span class="o">=</span><span class="s2">&quot;Test2&quot;</span><span class="p">,</span>
<span class="n">trait_type</span><span class="o">=</span><span class="s2">&quot;trait&quot;</span><span class="p">,</span>
<span class="n">value</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]},</span> <span class="mi">4</span><span class="p">],</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TraitHandlerTest.test_add_trait"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TraitHandlerTest.test_add_trait">[docs]</a> <span class="k">def</span> <span class="nf">test_add_trait</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">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get_dbstore</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">),</span> <span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Test1&quot;</span><span class="p">,</span> <span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_get_dbstore</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">),</span>
<span class="p">{</span>
<span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Test1&quot;</span><span class="p">,</span>
<span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span>
<span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">},</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">_get_dbstore</span><span class="p">(</span><span class="s2">&quot;test2&quot;</span><span class="p">),</span>
<span class="p">{</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Test2&quot;</span><span class="p">,</span> <span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]},</span> <span class="mi">4</span><span class="p">],},</span>
<span class="p">{</span>
<span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Test2&quot;</span><span class="p">,</span>
<span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span>
<span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;1&quot;</span><span class="p">:</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">]},</span> <span class="mi">4</span><span class="p">],</span>
<span class="p">},</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="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">traithandler</span><span class="p">),</span> <span class="mi">2</span><span class="p">)</span></div>
@ -370,7 +382,12 @@
<span class="nb">max</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span>
<span class="n">extra_val1</span><span class="o">=</span><span class="s2">&quot;xvalue1&quot;</span><span class="p">,</span>
<span class="n">extra_val2</span><span class="o">=</span><span class="s2">&quot;xvalue2&quot;</span><span class="p">,</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,},</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span>
<span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span>
<span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span>
<span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span>
<span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">traithandler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">)</span></div>
@ -390,7 +407,12 @@
<span class="s2">&quot;max&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
<span class="s2">&quot;extra_val1&quot;</span><span class="p">:</span> <span class="s2">&quot;xvalue1&quot;</span><span class="p">,</span>
<span class="s2">&quot;extra_val2&quot;</span><span class="p">:</span> <span class="s2">&quot;xvalue2&quot;</span><span class="p">,</span>
<span class="s2">&quot;descs&quot;</span><span class="p">:</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,},</span>
<span class="s2">&quot;descs&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span>
<span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span>
<span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span>
<span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="s2">&quot;rate&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;ratetarget&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
<span class="s2">&quot;last_update&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
@ -549,7 +571,12 @@
<span class="nb">max</span><span class="o">=</span><span class="mi">100</span><span class="p">,</span>
<span class="n">extra_val1</span><span class="o">=</span><span class="s2">&quot;xvalue1&quot;</span><span class="p">,</span>
<span class="n">extra_val2</span><span class="o">=</span><span class="s2">&quot;xvalue2&quot;</span><span class="p">,</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,},</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span>
<span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span>
<span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span>
<span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span>
<span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="n">rate</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">ratetarget</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
@ -621,7 +648,12 @@
<span class="n">mod</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
<span class="n">extra_val1</span><span class="o">=</span><span class="s2">&quot;xvalue1&quot;</span><span class="p">,</span>
<span class="n">extra_val2</span><span class="o">=</span><span class="s2">&quot;xvalue2&quot;</span><span class="p">,</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,},</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span>
<span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span>
<span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span>
<span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span>
<span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">traithandler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">)</span></div>
@ -640,7 +672,12 @@
<span class="s2">&quot;min&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;extra_val1&quot;</span><span class="p">:</span> <span class="s2">&quot;xvalue1&quot;</span><span class="p">,</span>
<span class="s2">&quot;extra_val2&quot;</span><span class="p">:</span> <span class="s2">&quot;xvalue2&quot;</span><span class="p">,</span>
<span class="s2">&quot;descs&quot;</span><span class="p">:</span> <span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,},</span>
<span class="s2">&quot;descs&quot;</span><span class="p">:</span> <span class="p">{</span>
<span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span>
<span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span>
<span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span>
<span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="s2">&quot;rate&quot;</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
<span class="s2">&quot;ratetarget&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
<span class="s2">&quot;last_update&quot;</span><span class="p">:</span> <span class="kc">None</span><span class="p">,</span>
@ -805,7 +842,12 @@
<span class="nb">min</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span>
<span class="n">extra_val1</span><span class="o">=</span><span class="s2">&quot;xvalue1&quot;</span><span class="p">,</span>
<span class="n">extra_val2</span><span class="o">=</span><span class="s2">&quot;xvalue2&quot;</span><span class="p">,</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span><span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span> <span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,},</span>
<span class="n">descs</span><span class="o">=</span><span class="p">{</span>
<span class="mi">0</span><span class="p">:</span> <span class="s2">&quot;range0&quot;</span><span class="p">,</span>
<span class="mi">2</span><span class="p">:</span> <span class="s2">&quot;range1&quot;</span><span class="p">,</span>
<span class="mi">5</span><span class="p">:</span> <span class="s2">&quot;range2&quot;</span><span class="p">,</span>
<span class="mi">7</span><span class="p">:</span> <span class="s2">&quot;range3&quot;</span><span class="p">,</span>
<span class="p">},</span>
<span class="n">rate</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span>
<span class="n">ratetarget</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
@ -873,8 +915,20 @@
<div class="viewcode-block" id="TestNumericTraitOperators.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestNumericTraitOperators.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># direct instantiation for testing only; use TraitHandler in production</span>
<span class="bp">self</span><span class="o">.</span><span class="n">st</span> <span class="o">=</span> <span class="n">traits</span><span class="o">.</span><span class="n">Trait</span><span class="p">({</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Strength&quot;</span><span class="p">,</span> <span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at</span> <span class="o">=</span> <span class="n">traits</span><span class="o">.</span><span class="n">Trait</span><span class="p">({</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Attack&quot;</span><span class="p">,</span> <span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span> <span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,})</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">st</span> <span class="o">=</span> <span class="n">traits</span><span class="o">.</span><span class="n">Trait</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Strength&quot;</span><span class="p">,</span>
<span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span>
<span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="mi">8</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at</span> <span class="o">=</span> <span class="n">traits</span><span class="o">.</span><span class="n">Trait</span><span class="p">(</span>
<span class="p">{</span>
<span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="s2">&quot;Attack&quot;</span><span class="p">,</span>
<span class="s2">&quot;trait_type&quot;</span><span class="p">:</span> <span class="s2">&quot;trait&quot;</span><span class="p">,</span>
<span class="s2">&quot;value&quot;</span><span class="p">:</span> <span class="mi">4</span><span class="p">,</span>
<span class="p">}</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestNumericTraitOperators.tearDown"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestNumericTraitOperators.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</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">st</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">at</span> <span class="o">=</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span></div>

View file

@ -568,6 +568,7 @@
<span class="sd"> &quot;&quot;&quot;</span></div>
<div class="viewcode-block" id="TraitHandler"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.traits.html#evennia.contrib.rpg.traits.traits.TraitHandler">[docs]</a><span class="k">class</span> <span class="nc">TraitHandler</span><span class="p">:</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Factory class that instantiates Trait objects. Must be assigned as a property</span>
@ -836,10 +837,7 @@
<span class="n">trait</span> <span class="o">=</span> <span class="n">traithandler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_trait_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">trait</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># initialize the trait</span>
<span class="n">traithandler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_trait_key</span><span class="p">,</span>
<span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">_trait_properties</span>
<span class="p">)</span>
<span class="n">traithandler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_trait_key</span><span class="p">,</span> <span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">_trait_properties</span><span class="p">)</span>
<span class="n">trait</span> <span class="o">=</span> <span class="n">traithandler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_trait_key</span><span class="p">)</span> <span class="c1"># caches it in the traithandler</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">instance</span><span class="p">]</span> <span class="o">=</span> <span class="n">trait</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_cache</span><span class="p">[</span><span class="n">instance</span><span class="p">]</span>
@ -851,6 +849,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<span class="c1"># Parent Trait class</span>

View file

@ -84,6 +84,7 @@
<span class="c1"># Commands for the state when the lid covering the button is closed.</span>
<div class="viewcode-block" id="CmdPushLidClosed"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed">[docs]</a><span class="k">class</span> <span class="nc">CmdPushLidClosed</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Push the red button (lid closed)</span>
@ -163,23 +164,27 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">rand</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> tries to smash the glass of the button.&quot;</span><span class="p">,</span>
<span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> tries to smash the glass of the button.&quot;</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">rand</span> <span class="o">&lt;</span> <span class="mf">0.2</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;You smash your hand against the glass&quot;</span>
<span class="s2">&quot; with all your might. The lid won&#39;t budge&quot;</span>
<span class="s2">&quot; but you cause quite the tremor through the button&#39;s mount.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">It looks like the button&#39;s lamp stopped working for the time being, &quot;</span>
<span class="s2">&quot;but the lid is still as closed as ever.&quot;</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;You smash your hand against the glass&quot;</span>
<span class="s2">&quot; with all your might. The lid won&#39;t budge&quot;</span>
<span class="s2">&quot; but you cause quite the tremor through the button&#39;s mount.&quot;</span>
<span class="s2">&quot;</span><span class="se">\n</span><span class="s2">It looks like the button&#39;s lamp stopped working for the time being, &quot;</span>
<span class="s2">&quot;but the lid is still as closed as ever.&quot;</span>
<span class="p">)</span>
<span class="c1"># self.obj is the button itself</span>
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">break_lamp</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">rand</span> <span class="o">&lt;</span> <span class="mf">0.6</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;You hit the lid hard. It doesn&#39;t move an inch.&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;You place a well-aimed fist against the glass of the lid.&quot;</span>
<span class="s2">&quot; Unfortunately all you get is a pain in your hand. Maybe&quot;</span>
<span class="s2">&quot; you should just try to just ... open the lid instead?&quot;</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;You place a well-aimed fist against the glass of the lid.&quot;</span>
<span class="s2">&quot; Unfortunately all you get is a pain in your hand. Maybe&quot;</span>
<span class="s2">&quot; you should just try to just ... open the lid instead?&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>
@ -207,8 +212,8 @@
<span class="n">string</span> <span class="o">+=</span> <span class="s2">&quot;the lid will soon close again.&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> opens the lid of the button.&quot;</span><span class="p">,</span>
<span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> opens the lid of the button.&quot;</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">to_open_state</span><span class="p">()</span></div></div>
@ -242,6 +247,7 @@
<span class="c1"># Commands for the state when the button&#39;s protective cover is open - now the</span>
<span class="c1"># push command will work. You can also close the lid again.</span>
<div class="viewcode-block" id="CmdPushLidOpen"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen">[docs]</a><span class="k">class</span> <span class="nc">CmdPushLidOpen</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Push the red button</span>
@ -267,15 +273,15 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># pause a little between each message.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You reach out to press the big red button ...&quot;</span><span class="p">)</span>
<span class="k">yield</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># pause 2s before next message</span>
<span class="k">yield</span> <span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># pause 2s before next message</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">|wBOOOOM! A bright light blinds you!|n&quot;</span><span class="p">)</span>
<span class="k">yield</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># pause 1s before next message</span>
<span class="k">yield</span> <span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># pause 1s before next message</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">|xThe world goes dark ...|n&quot;</span><span class="p">)</span>
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> presses the button. BOOM! </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> is blinded by a flash!&quot;</span><span class="p">,</span>
<span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> presses the button. BOOM! </span><span class="si">{</span><span class="n">name</span><span class="si">}</span><span class="s2"> is blinded by a flash!&quot;</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="o">.</span><span class="n">blind_target</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span></div>
@ -301,8 +307,8 @@
<span class="c1"># this will clean out scripts dependent on lid being open.</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You close the button&#39;s lid. It clicks back into place.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> closes the button&#39;s lid.&quot;</span><span class="p">,</span>
<span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span></div></div>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> closes the button&#39;s lid.&quot;</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="LidOpenCmdSet"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.LidOpenCmdSet">[docs]</a><span class="k">class</span> <span class="nc">LidOpenCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>
@ -328,6 +334,7 @@
<span class="c1"># Commands for when the button has been pushed and the player is blinded. This</span>
<span class="c1"># replaces commands on the player making them &#39;blind&#39; for a while.</span>
<div class="viewcode-block" id="CmdBlindLook"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook">[docs]</a><span class="k">class</span> <span class="nc">CmdBlindLook</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Looking around in darkness</span>
@ -359,12 +366,14 @@
<span class="n">string</span> <span class="o">=</span> <span class="s2">&quot;You fumble around, hands outstretched. You bump your knee.&quot;</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># trying to look</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;You are temporarily blinded by the flash. &quot;</span>
<span class="s2">&quot;Until it wears off, all you can do is feel around blindly.&quot;</span><span class="p">)</span>
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;You are temporarily blinded by the flash. &quot;</span>
<span class="s2">&quot;Until it wears off, all you can do is feel around blindly.&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> stumbles around, blinded.&quot;</span><span class="p">,</span>
<span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span></div></div>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> stumbles around, blinded.&quot;</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdBlindHelp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.CmdBlindHelp">[docs]</a><span class="k">class</span> <span class="nc">CmdBlindHelp</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
@ -462,20 +471,26 @@
<span class="sd"> `button = create_object(RedButton, ..., attributes=[(&#39;desc&#39;, &#39;my desc&#39;)])`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># these are the pre-set descriptions. Setting attributes will override</span>
<span class="c1"># these on the fly.</span>
<span class="n">desc_closed_lid</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;This is a large red button, inviting yet evil-looking. &quot;</span>
<span class="s2">&quot;A closed glass lid protects it.&quot;</span><span class="p">)</span>
<span class="n">desc_open_lid</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;This is a large red button, inviting yet evil-looking. &quot;</span>
<span class="s2">&quot;Its glass cover is open and the button exposed.&quot;</span><span class="p">)</span>
<span class="n">desc_closed_lid</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;This is a large red button, inviting yet evil-looking. &quot;</span> <span class="s2">&quot;A closed glass lid protects it.&quot;</span>
<span class="p">)</span>
<span class="n">desc_open_lid</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;This is a large red button, inviting yet evil-looking. &quot;</span>
<span class="s2">&quot;Its glass cover is open and the button exposed.&quot;</span>
<span class="p">)</span>
<span class="n">auto_close_msg</span> <span class="o">=</span> <span class="s2">&quot;The button&#39;s glass lid silently slides back in place.&quot;</span>
<span class="n">lamp_breaks_msg</span> <span class="o">=</span> <span class="s2">&quot;The lamp flickers, the button going dark.&quot;</span>
<span class="n">desc_add_lamp_broken</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="se">\n</span><span class="s2">The big red button has stopped blinking for the time being.&quot;</span>
<span class="c1"># note that this is a list. A random message will display each time</span>
<span class="n">blink_msgs</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;The red button flashes briefly.&quot;</span><span class="p">,</span>
<span class="s2">&quot;The red button blinks invitingly.&quot;</span><span class="p">,</span>
<span class="s2">&quot;The red button flashes. You know you wanna push it!&quot;</span><span class="p">]</span>
<span class="n">blink_msgs</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;The red button flashes briefly.&quot;</span><span class="p">,</span>
<span class="s2">&quot;The red button blinks invitingly.&quot;</span><span class="p">,</span>
<span class="s2">&quot;The red button flashes. You know you wanna push it!&quot;</span><span class="p">,</span>
<span class="p">]</span>
<div class="viewcode-block" id="RedButton.at_object_creation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.RedButton.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -565,9 +580,9 @@
<span class="bp">self</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">LidOpenCmdSet</span><span class="p">)</span>
<span class="c1"># wait 20s then call self.to_closed_state with a message as argument</span>
<span class="n">delay</span><span class="p">(</span><span class="mi">35</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_closed_state</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">auto_close_msg</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">auto_close_msg</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<span class="n">delay</span><span class="p">(</span>
<span class="mi">35</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">to_closed_state</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">auto_close_msg</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">auto_close_msg</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_unblind_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -578,7 +593,8 @@
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You blink feverishly as your eyesight slowly returns.&quot;</span><span class="p">)</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="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">caller</span><span class="o">.</span><span class="n">name</span><span class="si">}</span><span class="s2"> seems to be recovering their eyesight, blinking feverishly.&quot;</span><span class="p">,</span>
<span class="n">exclude</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
<span class="n">exclude</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
<span class="p">)</span>
<div class="viewcode-block" id="RedButton.blind_target"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.red_button.red_button.html#evennia.contrib.tutorials.red_button.red_button.RedButton.blind_target">[docs]</a> <span class="k">def</span> <span class="nf">blind_target</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -596,8 +612,7 @@
<span class="c1"># wait 20s then call self._unblind to remove blindness effect. The</span>
<span class="c1"># persistent=True means the delay should survive a server reload.</span>
<span class="n">delay</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unblind_target</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<span class="n">delay</span><span class="p">(</span><span class="mi">20</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_unblind_target</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<span class="k">def</span> <span class="nf">_unbreak_lamp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -107,8 +107,10 @@
<div class="viewcode-block" id="info3"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.talking_npc.talking_npc.html#evennia.contrib.tutorials.talking_npc.talking_npc.info3">[docs]</a><span class="k">def</span> <span class="nf">info3</span><span class="p">(</span><span class="n">caller</span><span class="p">):</span>
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;&#39;Well ... I&#39;m sort of busy so, have to go. NPC business. &quot;</span>
<span class="s2">&quot;Important stuff. You wouldn&#39;t understand.&#39;&quot;</span><span class="p">)</span>
<span class="n">text</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;&#39;Well ... I&#39;m sort of busy so, have to go. NPC business. &quot;</span>
<span class="s2">&quot;Important stuff. You wouldn&#39;t understand.&#39;&quot;</span>
<span class="p">)</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="s2">&quot;Oookay ... I won&#39;t keep you. Bye.&quot;</span><span class="p">,</span> <span class="s2">&quot;goto&quot;</span><span class="p">:</span> <span class="s2">&quot;END&quot;</span><span class="p">},</span>
@ -133,15 +135,15 @@
<div class="viewcode-block" id="CmdTalk"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.talking_npc.talking_npc.html#evennia.contrib.tutorials.talking_npc.talking_npc.CmdTalk">[docs]</a><span class="k">class</span> <span class="nc">CmdTalk</span><span class="p">(</span><span class="n">default_cmds</span><span class="o">.</span><span class="n">MuxCommand</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Talks to an npc</span>
<span class="sd"> Talks to an npc</span>
<span class="sd"> Usage:</span>
<span class="sd"> talk</span>
<span class="sd"> Usage:</span>
<span class="sd"> talk</span>
<span class="sd"> This command is only available if a talkative non-player-character</span>
<span class="sd"> (NPC) is actually present. It will strike up a conversation with</span>
<span class="sd"> that NPC and give you options on what to talk about.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="sd"> This command is only available if a talkative non-player-character</span>
<span class="sd"> (NPC) is actually present. It will strike up a conversation with</span>
<span class="sd"> that NPC and give you options on what to talk about.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;talk&quot;</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
@ -155,8 +157,11 @@
<span class="c1"># Initiate the menu. Change this if you are putting this on</span>
<span class="c1"># some other custom NPC class.</span>
<span class="n">EvMenu</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;evennia.contrib.tutorials.talking_npc.talking_npc&quot;</span><span class="p">,</span>
<span class="n">startnode</span><span class="o">=</span><span class="s2">&quot;menu_start_node&quot;</span><span class="p">)</span></div></div>
<span class="n">EvMenu</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span>
<span class="s2">&quot;evennia.contrib.tutorials.talking_npc.talking_npc&quot;</span><span class="p">,</span>
<span class="n">startnode</span><span class="o">=</span><span class="s2">&quot;menu_start_node&quot;</span><span class="p">,</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="TalkingCmdSet"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.talking_npc.talking_npc.html#evennia.contrib.tutorials.talking_npc.talking_npc.TalkingCmdSet">[docs]</a><span class="k">class</span> <span class="nc">TalkingCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>

View file

@ -1200,7 +1200,8 @@
<span class="sd"> |wstab/thrust/pierce &lt;target&gt;|n - poke at the enemy. More damage but harder to hit.</span>
<span class="sd"> |wslash/chop/bash &lt;target&gt;|n - swipe at the enemy. Less damage but easier to hit.</span>
<span class="sd"> |wdefend/parry|n - protect yourself and make yourself harder to hit.)</span>
<span class="sd"> &quot;&quot;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">no_more_weapons_msg</span> <span class="o">=</span> <span class="s2">&quot;you find nothing else of use.&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">available_weapons</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;knife&quot;</span><span class="p">,</span> <span class="s2">&quot;dagger&quot;</span><span class="p">,</span> <span class="s2">&quot;sword&quot;</span><span class="p">,</span> <span class="s2">&quot;club&quot;</span><span class="p">]</span></div>

View file

@ -120,6 +120,7 @@
<span class="n">helptext</span> <span class="o">+=</span> <span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2"> (Write &#39;give up&#39; if you want to abandon your quest.)&quot;</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">helptext</span><span class="p">)</span></div></div>
<span class="c1"># for the @detail command we inherit from MuxCommand, since</span>
<span class="c1"># we want to make use of MuxCommand&#39;s pre-parsing of &#39;=&#39; in the</span>
<span class="c1"># argument.</span>
@ -244,22 +245,26 @@
<span class="n">looking_at_obj</span><span class="o">.</span><span class="n">at_desc</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
<span class="k">return</span></div></div>
<div class="viewcode-block" id="CmdTutorialGiveUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.rooms.html#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialGiveUp">[docs]</a><span class="k">class</span> <span class="nc">CmdTutorialGiveUp</span><span class="p">(</span><span class="n">default_cmds</span><span class="o">.</span><span class="n">MuxCommand</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Give up the tutorial-world quest and return to Limbo, the start room of the</span>
<span class="sd"> server.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;give up&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s1">&#39;abort&#39;</span><span class="p">]</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;abort&quot;</span><span class="p">]</span>
<div class="viewcode-block" id="CmdTutorialGiveUp.func"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.rooms.html#evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialGiveUp.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">outro_room</span> <span class="o">=</span> <span class="n">OutroRoom</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="k">if</span> <span class="n">outro_room</span><span class="p">:</span>
<span class="n">outro_room</span> <span class="o">=</span> <span class="n">outro_room</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;That didn&#39;t work (seems like a bug). &quot;</span>
<span class="s2">&quot;Try to use the |wteleport|n command instead.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="s2">&quot;That didn&#39;t work (seems like a bug). &quot;</span>
<span class="s2">&quot;Try to use the |wteleport|n command instead.&quot;</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">move_to</span><span class="p">(</span><span class="n">outro_room</span><span class="p">)</span></div></div>
@ -354,6 +359,7 @@
<span class="sd"> will also clean up the intro command.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="TutorialStartExit.at_object_creation"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.rooms.html#evennia.contrib.tutorials.tutorial_world.rooms.TutorialStartExit.at_object_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_object_creation</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">cmdset</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdSetEvenniaIntro</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
@ -439,6 +445,7 @@
<span class="c1">#</span>
<span class="c1"># -------------------------------------------------------------</span>
<div class="viewcode-block" id="CmdEvenniaIntro"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.rooms.html#evennia.contrib.tutorials.tutorial_world.rooms.CmdEvenniaIntro">[docs]</a><span class="k">class</span> <span class="nc">CmdEvenniaIntro</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Start the Evennia intro wizard.</span>
@ -447,10 +454,12 @@
<span class="sd"> intro</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;intro&quot;</span>
<div class="viewcode-block" id="CmdEvenniaIntro.func"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.rooms.html#evennia.contrib.tutorials.tutorial_world.rooms.CmdEvenniaIntro.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="kn">from</span> <span class="nn">.intro_menu</span> <span class="kn">import</span> <span class="n">init_menu</span>
<span class="c1"># quell also superusers</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">account</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Auto-quelling permissions while in intro ...&quot;</span><span class="p">)</span>
@ -505,6 +514,7 @@
<span class="n">character</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">&quot;quell&quot;</span><span class="p">)</span>
<span class="n">character</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;(Auto-quelling while in tutorial-world)&quot;</span><span class="p">)</span></div></div>
<span class="c1"># -------------------------------------------------------------</span>
<span class="c1">#</span>
<span class="c1"># Bridge - unique room</span>
@ -1218,7 +1228,6 @@
<div class="viewcode-block" id="OutroRoom.at_object_leave"><a class="viewcode-back" href="../../../../../api/evennia.contrib.tutorials.tutorial_world.rooms.html#evennia.contrib.tutorials.tutorial_world.rooms.OutroRoom.at_object_leave">[docs]</a> <span class="k">def</span> <span class="nf">at_object_leave</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">destination</span><span class="p">):</span>
<span class="k">if</span> <span class="n">character</span><span class="o">.</span><span class="n">account</span><span class="p">:</span>
<span class="n">character</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">&quot;unquell&quot;</span><span class="p">)</span></div></div>
</pre></div>
<div class="clearer"></div>

View file

@ -54,10 +54,8 @@
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
<div class="viewcode-block" id="AuditingTest"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest">[docs]</a><span class="nd">@override_settings</span><span class="p">(</span>
<span class="n">AUDIT_MASKS</span><span class="o">=</span><span class="p">[])</span>
<div class="viewcode-block" id="AuditingTest"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest">[docs]</a><span class="nd">@override_settings</span><span class="p">(</span><span class="n">AUDIT_MASKS</span><span class="o">=</span><span class="p">[])</span>
<span class="k">class</span> <span class="nc">AuditingTest</span><span class="p">(</span><span class="n">BaseEvenniaTest</span><span class="p">):</span>
<div class="viewcode-block" id="AuditingTest.setup_session"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest.setup_session">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.server.sessionhandler._ServerSession&quot;</span><span class="p">,</span> <span class="n">AuditedServerSession</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">setup_session</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Overrides default one in EvenniaTest&quot;&quot;&quot;</span>
@ -71,8 +69,10 @@
<span class="n">SESSIONS</span><span class="o">.</span><span class="n">login</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">,</span> <span class="n">testmode</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">session</span> <span class="o">=</span> <span class="n">session</span></div>
<div class="viewcode-block" id="AuditingTest.test_mask"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest.test_mask">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_CALLBACK&quot;</span><span class="p">,</span>
<span class="s2">&quot;evennia.contrib.utils.auditing.outputs.to_syslog&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="AuditingTest.test_mask"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest.test_mask">[docs]</a> <span class="nd">@patch</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_CALLBACK&quot;</span><span class="p">,</span>
<span class="s2">&quot;evennia.contrib.utils.auditing.outputs.to_syslog&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_IN&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_OUT&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_mask</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -142,8 +142,10 @@
<span class="k">for</span> <span class="n">secret</span> <span class="ow">in</span> <span class="n">secrets</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">session</span><span class="o">.</span><span class="n">mask</span><span class="p">(</span><span class="n">secret</span><span class="p">),</span> <span class="n">secret</span><span class="p">)</span></div>
<div class="viewcode-block" id="AuditingTest.test_audit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest.test_audit">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_CALLBACK&quot;</span><span class="p">,</span>
<span class="s2">&quot;evennia.contrib.utils.auditing.outputs.to_syslog&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="AuditingTest.test_audit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.utils.auditing.tests.html#evennia.contrib.utils.auditing.tests.AuditingTest.test_audit">[docs]</a> <span class="nd">@patch</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_CALLBACK&quot;</span><span class="p">,</span>
<span class="s2">&quot;evennia.contrib.utils.auditing.outputs.to_syslog&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_IN&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.utils.auditing.server.AUDIT_OUT&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_audit</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -198,8 +198,10 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_find_elements</span><span class="p">(</span><span class="n">regex</span><span class="p">)</span></div>
<span class="k">def</span> <span class="fm">__repr__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;&lt;evennia.contrib.utils.random_string_generator.RandomStringGenerator for </span><span class="si">{}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="k">return</span> <span class="p">(</span>
<span class="s2">&quot;&lt;evennia.contrib.utils.random_string_generator.RandomStringGenerator for </span><span class="si">{}</span><span class="s2">&gt;&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">_get_script</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -211,7 +213,8 @@
<span class="n">script</span> <span class="o">=</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">db_key</span><span class="o">=</span><span class="s2">&quot;generator_script&quot;</span><span class="p">)</span>
<span class="k">except</span> <span class="n">ScriptDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="n">script</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span>
<span class="s2">&quot;evennia.contrib.utils.random_string_generator.RandomStringGeneratorScript&quot;</span><span class="p">)</span>
<span class="s2">&quot;evennia.contrib.utils.random_string_generator.RandomStringGeneratorScript&quot;</span>
<span class="p">)</span>
<span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">script</span> <span class="o">=</span> <span class="n">script</span>
<span class="k">return</span> <span class="n">script</span>

View file

@ -111,8 +111,7 @@
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">django.urls</span> <span class="kn">import</span> <span class="n">reverse</span>
<span class="kn">from</span> <span class="nn">django.utils.text</span> <span class="kn">import</span> <span class="n">slugify</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">variable_from_module</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">all_from_module</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">variable_from_module</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">all_from_module</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">lazy_property</span>
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="kn">import</span> <span class="n">LockHandler</span>
@ -128,6 +127,7 @@
<span class="sd"> help command.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span><span class="p">:</span> <span class="nb">str</span>
<span class="n">aliases</span><span class="p">:</span> <span class="nb">list</span>
<span class="n">help_category</span><span class="p">:</span> <span class="nb">str</span>
@ -189,7 +189,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">reverse</span><span class="p">(</span>
<span class="s1">&#39;help-entry-detail&#39;</span><span class="p">,</span>
<span class="s2">&quot;help-entry-detail&quot;</span><span class="p">,</span>
<span class="n">kwargs</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;category&quot;</span><span class="p">:</span> <span class="n">slugify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">help_category</span><span class="p">),</span> <span class="s2">&quot;topic&quot;</span><span class="p">:</span> <span class="n">slugify</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">)},</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
@ -234,8 +234,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Initialize the storage.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">help_file_modules</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">part</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">help_file_modules</span><span class="p">)]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">help_file_modules</span> <span class="o">=</span> <span class="p">[</span><span class="nb">str</span><span class="p">(</span><span class="n">part</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">help_file_modules</span><span class="p">)]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">help_entries</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">help_entries_dict</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">load</span><span class="p">()</span></div>
@ -248,13 +247,11 @@
<span class="n">loaded_help_dicts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="n">module_or_path</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">help_file_modules</span><span class="p">:</span>
<span class="n">help_dict_list</span> <span class="o">=</span> <span class="n">variable_from_module</span><span class="p">(</span>
<span class="n">module_or_path</span><span class="p">,</span> <span class="n">variable</span><span class="o">=</span><span class="s2">&quot;HELP_ENTRY_DICTS&quot;</span>
<span class="p">)</span>
<span class="n">help_dict_list</span> <span class="o">=</span> <span class="n">variable_from_module</span><span class="p">(</span><span class="n">module_or_path</span><span class="p">,</span> <span class="n">variable</span><span class="o">=</span><span class="s2">&quot;HELP_ENTRY_DICTS&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">help_dict_list</span><span class="p">:</span>
<span class="n">help_dict_list</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">dct</span> <span class="k">for</span> <span class="n">dct</span> <span class="ow">in</span> <span class="n">all_from_module</span><span class="p">(</span><span class="n">module_or_path</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dct</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)]</span>
<span class="n">dct</span> <span class="k">for</span> <span class="n">dct</span> <span class="ow">in</span> <span class="n">all_from_module</span><span class="p">(</span><span class="n">module_or_path</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dct</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)</span>
<span class="p">]</span>
<span class="k">if</span> <span class="n">help_dict_list</span><span class="p">:</span>
<span class="n">loaded_help_dicts</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">help_dict_list</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
@ -265,19 +262,23 @@
<span class="n">unique_help_entries</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">for</span> <span class="n">dct</span> <span class="ow">in</span> <span class="n">loaded_help_dicts</span><span class="p">:</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;key&#39;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">category</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;category&#39;</span><span class="p">,</span> <span class="n">_DEFAULT_HELP_CATEGORY</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;aliases&#39;</span><span class="p">,</span> <span class="p">[]))</span>
<span class="n">entrytext</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;text&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;locks&#39;</span><span class="p">,</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;key&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="n">strip</span><span class="p">()</span>
<span class="n">category</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;category&quot;</span><span class="p">,</span> <span class="n">_DEFAULT_HELP_CATEGORY</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;aliases&quot;</span><span class="p">,</span> <span class="p">[]))</span>
<span class="n">entrytext</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;text&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">locks</span> <span class="o">=</span> <span class="n">dct</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;locks&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">key</span> <span class="ow">and</span> <span class="n">entrytext</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Cannot load file-help-entry (missing key or text): </span><span class="si">{</span><span class="n">dct</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">continue</span>
<span class="n">unique_help_entries</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">FileHelpEntry</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">help_category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span> <span class="n">lock_storage</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">entrytext</span><span class="o">=</span><span class="n">entrytext</span><span class="p">)</span>
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
<span class="n">help_category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
<span class="n">lock_storage</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
<span class="n">entrytext</span><span class="o">=</span><span class="n">entrytext</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">help_entries_dict</span> <span class="o">=</span> <span class="n">unique_help_entries</span>
<span class="bp">self</span><span class="o">.</span><span class="n">help_entries</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">unique_help_entries</span><span class="o">.</span><span class="n">values</span><span class="p">())</span></div>

View file

@ -61,11 +61,9 @@
<span class="n">_LUNR_GET_BUILDER</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_LUNR_BUILDER_PIPELINE</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_RE_HELP_SUBTOPICS_START</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;^\s*?#\s*?subtopics\s*?$&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span><span class="p">)</span>
<span class="n">_RE_HELP_SUBTOPICS_START</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^\s*?#\s*?subtopics\s*?$&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span><span class="p">)</span>
<span class="n">_RE_HELP_SUBTOPIC_SPLIT</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^\s*?(\#{2,6}\s*?\w+?[a-z0-9 \-\?!,\.]*?)$&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">)</span>
<span class="n">_RE_HELP_SUBTOPIC_PARSE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;^(?P&lt;nesting&gt;\#{2,6})\s*?(?P&lt;name&gt;.*?)$&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span><span class="p">)</span>
<span class="n">_RE_HELP_SUBTOPIC_PARSE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;^(?P&lt;nesting&gt;\#{2,6})\s*?(?P&lt;name&gt;.*?)$&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span><span class="p">)</span>
<span class="n">MAX_SUBTOPIC_NESTING</span> <span class="o">=</span> <span class="mi">5</span>
@ -99,6 +97,7 @@
<span class="kn">from</span> <span class="nn">lunr</span> <span class="kn">import</span> <span class="n">get_default_builder</span> <span class="k">as</span> <span class="n">_LUNR_GET_BUILDER</span>
<span class="kn">from</span> <span class="nn">lunr</span> <span class="kn">import</span> <span class="n">stop_word_filter</span>
<span class="kn">from</span> <span class="nn">lunr.stemmer</span> <span class="kn">import</span> <span class="n">stemmer</span>
<span class="c1"># from lunr.trimmer import trimmer</span>
<span class="c1"># pre-create a lunr index-builder pipeline where we&#39;ve removed some of</span>
@ -132,12 +131,7 @@
<span class="n">builder</span><span class="o">.</span><span class="n">pipeline</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span>
<span class="n">builder</span><span class="o">.</span><span class="n">pipeline</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="o">*</span><span class="n">_LUNR_BUILDER_PIPELINE</span><span class="p">)</span>
<span class="n">search_index</span> <span class="o">=</span> <span class="n">_LUNR</span><span class="p">(</span>
<span class="n">ref</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span>
<span class="n">fields</span><span class="o">=</span><span class="n">fields</span><span class="p">,</span>
<span class="n">documents</span><span class="o">=</span><span class="n">indx</span><span class="p">,</span>
<span class="n">builder</span><span class="o">=</span><span class="n">builder</span>
<span class="p">)</span>
<span class="n">search_index</span> <span class="o">=</span> <span class="n">_LUNR</span><span class="p">(</span><span class="n">ref</span><span class="o">=</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="n">fields</span><span class="o">=</span><span class="n">fields</span><span class="p">,</span> <span class="n">documents</span><span class="o">=</span><span class="n">indx</span><span class="p">,</span> <span class="n">builder</span><span class="o">=</span><span class="n">builder</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">matches</span> <span class="o">=</span> <span class="n">search_index</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">query</span><span class="p">)[:</span><span class="n">suggestion_maxnum</span><span class="p">]</span>
@ -217,7 +211,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">topic</span><span class="p">,</span> <span class="o">*</span><span class="n">subtopics</span> <span class="o">=</span> <span class="n">_RE_HELP_SUBTOPICS_START</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">entry</span><span class="p">,</span> <span class="n">maxsplit</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="n">structure</span> <span class="o">=</span> <span class="p">{</span><span class="kc">None</span><span class="p">:</span> <span class="n">topic</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;</span><span class="se">\n</span><span class="s1">&#39;</span><span class="p">)}</span>
<span class="n">structure</span> <span class="o">=</span> <span class="p">{</span><span class="kc">None</span><span class="p">:</span> <span class="n">topic</span><span class="o">.</span><span class="n">strip</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">if</span> <span class="n">subtopics</span><span class="p">:</span>
<span class="n">subtopics</span> <span class="o">=</span> <span class="n">subtopics</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
@ -235,12 +229,13 @@
<span class="k">if</span> <span class="n">subtopic_match</span><span class="p">:</span>
<span class="c1"># a new sub(-sub..) category starts.</span>
<span class="n">mdict</span> <span class="o">=</span> <span class="n">subtopic_match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span>
<span class="n">subtopic</span> <span class="o">=</span> <span class="n">mdict</span><span class="p">[</span><span class="s1">&#39;name&#39;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="n">new_nesting</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">mdict</span><span class="p">[</span><span class="s1">&#39;nesting&#39;</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="n">subtopic</span> <span class="o">=</span> <span class="n">mdict</span><span class="p">[</span><span class="s2">&quot;name&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="n">strip</span><span class="p">()</span>
<span class="n">new_nesting</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">mdict</span><span class="p">[</span><span class="s2">&quot;nesting&quot;</span><span class="p">])</span> <span class="o">-</span> <span class="mi">1</span>
<span class="k">if</span> <span class="n">new_nesting</span> <span class="o">&gt;</span> <span class="n">MAX_SUBTOPIC_NESTING</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Can have max </span><span class="si">{</span><span class="n">MAX_SUBTOPIC_NESTING</span><span class="si">}</span><span class="s2"> levels of nested help subtopics.&quot;</span><span class="p">)</span>
<span class="sa">f</span><span class="s2">&quot;Can have max </span><span class="si">{</span><span class="n">MAX_SUBTOPIC_NESTING</span><span class="si">}</span><span class="s2"> levels of nested help subtopics.&quot;</span>
<span class="p">)</span>
<span class="n">nestdiff</span> <span class="o">=</span> <span class="n">new_nesting</span> <span class="o">-</span> <span class="n">current_nesting</span>
<span class="k">if</span> <span class="n">nestdiff</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
@ -268,9 +263,7 @@
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">dct</span><span class="p">:</span>
<span class="n">dct</span> <span class="o">=</span> <span class="n">dct</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="n">dct</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span>
<span class="kc">None</span><span class="p">:</span> <span class="n">part</span>
<span class="p">}</span>
<span class="n">dct</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="p">{</span><span class="kc">None</span><span class="p">:</span> <span class="n">part</span><span class="p">}</span>
<span class="k">return</span> <span class="n">structure</span></div>
</pre></div>

View file

@ -85,6 +85,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="all"><a class="viewcode-back" href="../../../api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.all">[docs]</a><span class="k">def</span> <span class="nf">all</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="k">return</span> <span class="kc">True</span></div>

View file

@ -277,8 +277,11 @@
<span class="n">funcname</span><span class="p">,</span> <span class="n">rest</span> <span class="o">=</span> <span class="p">(</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;)&quot;</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">funcstring</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">1</span><span class="p">))</span>
<span class="n">func</span> <span class="o">=</span> <span class="n">_LOCKFUNCS</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">funcname</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">callable</span><span class="p">(</span><span class="n">func</span><span class="p">):</span>
<span class="n">elist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Lock: lock-function &#39;</span><span class="si">{lockfunc}</span><span class="s2">&#39; is not available.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">lockfunc</span><span class="o">=</span><span class="n">funcstring</span><span class="p">))</span>
<span class="n">elist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Lock: lock-function &#39;</span><span class="si">{lockfunc}</span><span class="s2">&#39; is not available.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">lockfunc</span><span class="o">=</span><span class="n">funcstring</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">continue</span>
<span class="n">args</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">arg</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">arg</span> <span class="ow">in</span> <span class="n">rest</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="k">if</span> <span class="n">arg</span> <span class="ow">and</span> <span class="s2">&quot;=&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">arg</span><span class="p">)</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
@ -305,13 +308,16 @@
<span class="k">continue</span>
<span class="k">if</span> <span class="n">access_type</span> <span class="ow">in</span> <span class="n">locks</span><span class="p">:</span>
<span class="n">duplicates</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="n">wlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;LockHandler on </span><span class="si">{obj}</span><span class="s2">: access type &#39;</span><span class="si">{access_type}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;changed from &#39;</span><span class="si">{source}</span><span class="s2">&#39; to &#39;</span><span class="si">{goal}</span><span class="s2">&#39; &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">obj</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="p">,</span>
<span class="n">access_type</span><span class="o">=</span><span class="n">access_type</span><span class="p">,</span>
<span class="n">source</span><span class="o">=</span><span class="n">locks</span><span class="p">[</span><span class="n">access_type</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
<span class="n">goal</span><span class="o">=</span><span class="n">raw_lockstring</span><span class="p">))</span>
<span class="n">wlist</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;LockHandler on </span><span class="si">{obj}</span><span class="s2">: access type &#39;</span><span class="si">{access_type}</span><span class="s2">&#39; &quot;</span>
<span class="s2">&quot;changed from &#39;</span><span class="si">{source}</span><span class="s2">&#39; to &#39;</span><span class="si">{goal}</span><span class="s2">&#39; &quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">obj</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">obj</span><span class="p">,</span>
<span class="n">access_type</span><span class="o">=</span><span class="n">access_type</span><span class="p">,</span>
<span class="n">source</span><span class="o">=</span><span class="n">locks</span><span class="p">[</span><span class="n">access_type</span><span class="p">][</span><span class="mi">2</span><span class="p">],</span>
<span class="n">goal</span><span class="o">=</span><span class="n">raw_lockstring</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">locks</span><span class="p">[</span><span class="n">access_type</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">evalstring</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">(</span><span class="n">lock_funcs</span><span class="p">),</span> <span class="n">raw_lockstring</span><span class="p">)</span>
<span class="k">if</span> <span class="n">wlist</span> <span class="ow">and</span> <span class="n">WARNING_LOG</span><span class="p">:</span>
@ -737,6 +743,7 @@
<span class="n">access_type</span><span class="o">=</span><span class="n">access_type</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">def</span> <span class="nf">check_perm</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">permission</span><span class="p">,</span> <span class="n">no_superuser_bypass</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Shortcut for checking if an object has the given `permission`. If the</span>
@ -755,6 +762,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.locks.lockfuncs</span> <span class="kn">import</span> <span class="n">perm</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">no_superuser_bypass</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">is_superuser</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="n">perm</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">permission</span><span class="p">)</span>

View file

@ -279,8 +279,9 @@
<span class="p">)</span>
<span class="n">type_restriction</span> <span class="o">=</span> <span class="n">typeclasses</span> <span class="ow">and</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_typeclass_path__in</span><span class="o">=</span><span class="n">make_iter</span><span class="p">(</span><span class="n">typeclasses</span><span class="p">))</span> <span class="ow">or</span> <span class="n">Q</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">cand_restriction</span> <span class="o">&amp;</span> <span class="n">type_restriction</span> <span class="o">&amp;</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">cand_restriction</span> <span class="o">&amp;</span> <span class="n">type_restriction</span> <span class="o">&amp;</span> <span class="n">Q</span><span class="p">(</span><span class="o">**</span><span class="n">querykwargs</span><span class="p">))</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span>
<span class="s2">&quot;id&quot;</span>
<span class="p">)</span>
<span class="k">except</span> <span class="n">exceptions</span><span class="o">.</span><span class="n">FieldError</span><span class="p">:</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">none</span><span class="p">()</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
@ -377,8 +378,9 @@
<span class="n">index_matches</span> <span class="o">=</span> <span class="n">string_partial_matching</span><span class="p">(</span><span class="n">key_strings</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">ret_index</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">if</span> <span class="n">index_matches</span><span class="p">:</span>
<span class="c1"># a match by key</span>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span><span class="p">]</span>
<span class="n">match_ids</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">obj</span><span class="o">.</span><span class="n">id</span> <span class="k">for</span> <span class="n">ind</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">search_candidates</span><span class="p">)</span> <span class="k">if</span> <span class="n">ind</span> <span class="ow">in</span> <span class="n">index_matches</span>
<span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># match by alias rather than by key</span>
<span class="n">search_candidates</span> <span class="o">=</span> <span class="n">search_candidates</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>

View file

@ -83,11 +83,15 @@
<span class="sd"> obj (Object): The object on which the</span>
<span class="sd"> handler is defined</span>
<span class="sd"> Notes:</span>
<span class="sd"> This was changed from using `set` to using `dict` internally</span>
<span class="sd"> in order to retain insertion order.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">obj</span> <span class="o">=</span> <span class="n">obj</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</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">_pkcache</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_idcache</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="n">__instance_cache__</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">dict</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init</span><span class="p">()</span></div>
<div class="viewcode-block" id="ContentsHandler.load"><a class="viewcode-back" href="../../../api/evennia.objects.models.html#evennia.objects.models.ContentsHandler.load">[docs]</a> <span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -105,10 +109,10 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">objects</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">load</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span> <span class="o">=</span> <span class="p">{</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">objects</span><span class="p">}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span> <span class="o">=</span> <span class="p">{</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">:</span> <span class="kc">True</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">objects</span><span class="p">}</span>
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">objects</span><span class="p">:</span>
<span class="k">for</span> <span class="n">ctype</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">_content_types</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">ctype</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">ctype</span><span class="p">][</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="ContentsHandler.get"><a class="viewcode-back" href="../../../api/evennia.objects.models.html#evennia.objects.models.ContentsHandler.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">content_type</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -123,11 +127,11 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">content_type</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
<span class="n">pks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">content_type</span><span class="p">]</span>
<span class="n">pks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">content_type</span><span class="p">]</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">pks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span>
<span class="n">pks</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span>
<span class="k">if</span> <span class="n">exclude</span><span class="p">:</span>
<span class="n">pks</span> <span class="o">=</span> <span class="n">pks</span> <span class="o">-</span> <span class="p">{</span><span class="n">excl</span><span class="o">.</span><span class="n">pk</span> <span class="k">for</span> <span class="n">excl</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">exclude</span><span class="p">)}</span>
<span class="n">pks</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">pks</span><span class="p">)</span> <span class="o">-</span> <span class="p">{</span><span class="n">excl</span><span class="o">.</span><span class="n">pk</span> <span class="k">for</span> <span class="n">excl</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">exclude</span><span class="p">)}</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">_idcache</span><span class="p">[</span><span class="n">pk</span><span class="p">]</span> <span class="k">for</span> <span class="n">pk</span> <span class="ow">in</span> <span class="n">pks</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
@ -149,9 +153,9 @@
<span class="sd"> obj (Object): object to add</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span><span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">]</span> <span class="o">=</span> <span class="n">obj</span>
<span class="k">for</span> <span class="n">ctype</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">_content_types</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">ctype</span><span class="p">]</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">ctype</span><span class="p">][</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">]</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="ContentsHandler.remove"><a class="viewcode-back" href="../../../api/evennia.objects.models.html#evennia.objects.models.ContentsHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -161,15 +165,10 @@
<span class="sd"> obj (Object): object to remove</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span>
<span class="c1"># not in pk cache, but can happen deletions happens</span>
<span class="c1"># remotely from out-of-thread.</span>
<span class="k">pass</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">for</span> <span class="n">ctype</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">_content_types</span><span class="p">:</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">pk</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">ctype</span><span class="p">]:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">ctype</span><span class="p">]</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">)</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span><span class="p">[</span><span class="n">ctype</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="ContentsHandler.clear"><a class="viewcode-back" href="../../../api/evennia.objects.models.html#evennia.objects.models.ContentsHandler.clear">[docs]</a> <span class="k">def</span> <span class="nf">clear</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -177,7 +176,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_pkcache</span> <span class="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">set</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_typecache</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">dict</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">init</span><span class="p">()</span></div></div>

View file

@ -64,9 +64,15 @@
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="n">ModelAttributeBackend</span><span class="p">,</span> <span class="n">NickHandler</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.models</span> <span class="kn">import</span> <span class="n">TypeclassBase</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span><span class="p">,</span> <span class="n">create</span><span class="p">,</span> <span class="n">funcparser</span><span class="p">,</span> <span class="n">logger</span><span class="p">,</span> <span class="n">search</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="p">(</span><span class="n">class_from_module</span><span class="p">,</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">lazy_property</span><span class="p">,</span>
<span class="n">list_to_string</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">to_str</span><span class="p">,</span>
<span class="n">variable_from_module</span><span class="p">)</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="p">(</span>
<span class="n">class_from_module</span><span class="p">,</span>
<span class="n">is_iter</span><span class="p">,</span>
<span class="n">lazy_property</span><span class="p">,</span>
<span class="n">list_to_string</span><span class="p">,</span>
<span class="n">make_iter</span><span class="p">,</span>
<span class="n">to_str</span><span class="p">,</span>
<span class="n">variable_from_module</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">_INFLECT</span> <span class="o">=</span> <span class="n">inflect</span><span class="o">.</span><span class="n">engine</span><span class="p">()</span>
<span class="n">_MULTISESSION_MODE</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">MULTISESSION_MODE</span>
@ -254,13 +260,13 @@
<span class="n">objects</span> <span class="o">=</span> <span class="n">ObjectManager</span><span class="p">()</span>
<span class="c1"># populated by `return_apperance`</span>
<span class="n">appearance_template</span> <span class="o">=</span> <span class="s1">&#39;&#39;&#39;</span>
<span class="si">{header}</span><span class="s1"></span>
<span class="s1">|c</span><span class="si">{name}</span><span class="s1">|n</span>
<span class="si">{desc}</span><span class="s1"></span>
<span class="si">{exits}{characters}{things}</span><span class="s1"></span>
<span class="si">{footer}</span><span class="s1"></span>
<span class="s1"> &#39;&#39;&#39;</span>
<span class="n">appearance_template</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="si">{header}</span><span class="s2"></span>
<span class="s2">|c</span><span class="si">{name}</span><span class="s2">|n</span>
<span class="si">{desc}</span><span class="s2"></span>
<span class="si">{exits}{characters}{things}</span><span class="s2"></span>
<span class="si">{footer}</span><span class="s2"></span>
<span class="s2"> &quot;&quot;&quot;</span>
<span class="c1"># on-object properties</span>
@ -574,12 +580,14 @@
<span class="c1"># we re-run exact match agains one of the matches to</span>
<span class="c1"># make sure we were not catching partial matches not belonging</span>
<span class="c1"># to the stack</span>
<span class="n">nstack</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_objs_with_key_or_alias</span><span class="p">(</span>
<span class="n">results</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">candidates</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">results</span><span class="p">),</span>
<span class="n">typeclasses</span><span class="o">=</span><span class="p">[</span><span class="n">typeclass</span><span class="p">]</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="kc">None</span>
<span class="p">))</span>
<span class="n">nstack</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span>
<span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get_objs_with_key_or_alias</span><span class="p">(</span>
<span class="n">results</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">candidates</span><span class="o">=</span><span class="nb">list</span><span class="p">(</span><span class="n">results</span><span class="p">),</span>
<span class="n">typeclasses</span><span class="o">=</span><span class="p">[</span><span class="n">typeclass</span><span class="p">]</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">nstack</span> <span class="o">==</span> <span class="n">nresults</span><span class="p">:</span>
<span class="c1"># a valid stack, return multiple results</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="n">results</span><span class="p">)[:</span><span class="n">stacked</span><span class="p">]</span>
@ -672,9 +680,7 @@
<span class="n">raw_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">nickreplace</span><span class="p">(</span>
<span class="n">raw_string</span><span class="p">,</span> <span class="n">categories</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;inputline&quot;</span><span class="p">,</span> <span class="s2">&quot;channel&quot;</span><span class="p">),</span> <span class="n">include_account</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">_CMDHANDLER</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">callertype</span><span class="o">=</span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span></div>
<span class="k">return</span> <span class="n">_CMDHANDLER</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">callertype</span><span class="o">=</span><span class="s2">&quot;object&quot;</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<div class="viewcode-block" id="DefaultObject.msg"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.msg">[docs]</a> <span class="k">def</span> <span class="nf">msg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">from_obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -832,7 +838,7 @@
<span class="n">mapping</span> <span class="o">=</span> <span class="n">mapping</span> <span class="ow">or</span> <span class="p">{}</span>
<span class="n">you</span> <span class="o">=</span> <span class="n">from_obj</span> <span class="ow">or</span> <span class="bp">self</span>
<span class="k">if</span> <span class="s1">&#39;you&#39;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;you&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">mapping</span><span class="p">:</span>
<span class="n">mapping</span><span class="p">[</span><span class="n">you</span><span class="p">]</span> <span class="o">=</span> <span class="n">you</span>
<span class="n">contents</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">contents</span>
@ -844,14 +850,23 @@
<span class="c1"># actor-stance replacements</span>
<span class="n">inmessage</span> <span class="o">=</span> <span class="n">_MSG_CONTENTS_PARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span>
<span class="n">inmessage</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">return_string</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">caller</span><span class="o">=</span><span class="n">you</span><span class="p">,</span> <span class="n">receiver</span><span class="o">=</span><span class="n">receiver</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span>
<span class="n">inmessage</span><span class="p">,</span>
<span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">return_string</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">caller</span><span class="o">=</span><span class="n">you</span><span class="p">,</span>
<span class="n">receiver</span><span class="o">=</span><span class="n">receiver</span><span class="p">,</span>
<span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># director-stance replacements</span>
<span class="n">outmessage</span> <span class="o">=</span> <span class="n">inmessage</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="o">**</span><span class="p">{</span><span class="n">key</span><span class="p">:</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="n">receiver</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;get_display_name&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()})</span>
<span class="o">**</span><span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="n">receiver</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;get_display_name&quot;</span><span class="p">)</span>
<span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">outmessage</span><span class="p">,</span> <span class="n">outkwargs</span><span class="p">),</span> <span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
@ -908,6 +923,7 @@
<span class="sd"> 7. `self.at_post_move(source_location)`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">logerr</span><span class="p">(</span><span class="n">string</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">err</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Simple log helper method&quot;&quot;&quot;</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">()</span>
@ -1031,8 +1047,10 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
<span class="n">obj</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Something went wrong! You are dumped into nowhere. Contact an admin.&quot;</span><span class="p">))</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="s2">&quot;Missing default home - &#39;</span><span class="si">{name}</span><span class="s2">(#</span><span class="si">{dbid}</span><span class="s2">)&#39; now &quot;</span>
<span class="s2">&quot;has a null location.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dbid</span><span class="o">=</span><span class="n">obj</span><span class="o">.</span><span class="n">dbid</span><span class="p">))</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span>
<span class="s2">&quot;Missing default home - &#39;</span><span class="si">{name}</span><span class="s2">(#</span><span class="si">{dbid}</span><span class="s2">)&#39; now &quot;</span>
<span class="s2">&quot;has a null location.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dbid</span><span class="o">=</span><span class="n">obj</span><span class="o">.</span><span class="n">dbid</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">has_account</span><span class="p">:</span>
@ -1592,7 +1610,8 @@
<span class="c1"># This was created from nowhere and added to an account&#39;s</span>
<span class="c1"># inventory; it&#39;s probably the result of a create command.</span>
<span class="n">string</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;You now have </span><span class="si">{name}</span><span class="s2"> in your possession.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">))</span>
<span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">)</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">return</span>
@ -1796,13 +1815,14 @@
<span class="sd"> lists are the actual objects.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">filter_visible</span><span class="p">(</span><span class="n">obj_list</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">obj</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">obj_list</span> <span class="k">if</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">looker</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="s2">&quot;view&quot;</span><span class="p">)]</span>
<span class="k">return</span> <span class="p">{</span>
<span class="s2">&quot;exits&quot;</span><span class="p">:</span> <span class="n">filter_visible</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contents_get</span><span class="p">(</span><span class="n">content_type</span><span class="o">=</span><span class="s2">&quot;exit&quot;</span><span class="p">)),</span>
<span class="s2">&quot;characters&quot;</span><span class="p">:</span> <span class="n">filter_visible</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contents_get</span><span class="p">(</span><span class="n">content_type</span><span class="o">=</span><span class="s2">&quot;character&quot;</span><span class="p">)),</span>
<span class="s2">&quot;things&quot;</span><span class="p">:</span> <span class="n">filter_visible</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contents_get</span><span class="p">(</span><span class="n">content_type</span><span class="o">=</span><span class="s2">&quot;object&quot;</span><span class="p">))</span>
<span class="s2">&quot;things&quot;</span><span class="p">:</span> <span class="n">filter_visible</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">contents_get</span><span class="p">(</span><span class="n">content_type</span><span class="o">=</span><span class="s2">&quot;object&quot;</span><span class="p">)),</span>
<span class="p">}</span></div>
<div class="viewcode-block" id="DefaultObject.get_content_names"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.get_content_names">[docs]</a> <span class="k">def</span> <span class="nf">get_content_names</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
@ -1831,13 +1851,14 @@
<span class="c1"># a mapping {&#39;exits&#39;: [...], &#39;characters&#39;: [...], &#39;things&#39;: [...]}</span>
<span class="n">contents_map</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_visible_contents</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">character_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">char</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">contents_map</span><span class="p">[</span><span class="s1">&#39;characters&#39;</span><span class="p">]]</span>
<span class="n">exit_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">exi</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">exi</span> <span class="ow">in</span> <span class="n">contents_map</span><span class="p">[</span><span class="s1">&#39;exits&#39;</span><span class="p">]]</span>
<span class="n">character_names</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">char</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">contents_map</span><span class="p">[</span><span class="s2">&quot;characters&quot;</span><span class="p">]</span>
<span class="p">]</span>
<span class="n">exit_names</span> <span class="o">=</span> <span class="p">[</span><span class="n">exi</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span> <span class="k">for</span> <span class="n">exi</span> <span class="ow">in</span> <span class="n">contents_map</span><span class="p">[</span><span class="s2">&quot;exits&quot;</span><span class="p">]]</span>
<span class="c1"># group all same-named things under one name</span>
<span class="n">things</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
<span class="k">for</span> <span class="n">thing</span> <span class="ow">in</span> <span class="n">contents_map</span><span class="p">[</span><span class="s1">&#39;things&#39;</span><span class="p">]:</span>
<span class="k">for</span> <span class="n">thing</span> <span class="ow">in</span> <span class="n">contents_map</span><span class="p">[</span><span class="s2">&quot;things&quot;</span><span class="p">]:</span>
<span class="n">things</span><span class="p">[</span><span class="n">thing</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">thing</span><span class="p">)</span>
<span class="c1"># pluralize same-named things</span>
@ -1848,11 +1869,7 @@
<span class="n">singular</span><span class="p">,</span> <span class="n">plural</span> <span class="o">=</span> <span class="n">thing</span><span class="o">.</span><span class="n">get_numbered_name</span><span class="p">(</span><span class="n">nthings</span><span class="p">,</span> <span class="n">looker</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">thingname</span><span class="p">)</span>
<span class="n">thing_names</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">singular</span> <span class="k">if</span> <span class="n">nthings</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">plural</span><span class="p">)</span>
<span class="k">return</span> <span class="p">{</span>
<span class="s2">&quot;exits&quot;</span><span class="p">:</span> <span class="n">exit_names</span><span class="p">,</span>
<span class="s2">&quot;characters&quot;</span><span class="p">:</span> <span class="n">character_names</span><span class="p">,</span>
<span class="s2">&quot;things&quot;</span><span class="p">:</span> <span class="n">thing_names</span>
<span class="p">}</span></div>
<span class="k">return</span> <span class="p">{</span><span class="s2">&quot;exits&quot;</span><span class="p">:</span> <span class="n">exit_names</span><span class="p">,</span> <span class="s2">&quot;characters&quot;</span><span class="p">:</span> <span class="n">character_names</span><span class="p">,</span> <span class="s2">&quot;things&quot;</span><span class="p">:</span> <span class="n">thing_names</span><span class="p">}</span></div>
<div class="viewcode-block" id="DefaultObject.return_appearance"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.return_appearance">[docs]</a> <span class="k">def</span> <span class="nf">return_appearance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -1882,7 +1899,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">looker</span><span class="p">:</span>
<span class="k">return</span> <span class="s1">&#39;&#39;</span>
<span class="k">return</span> <span class="s2">&quot;&quot;</span>
<span class="c1"># ourselves</span>
<span class="n">name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
@ -1890,20 +1907,20 @@
<span class="c1"># contents</span>
<span class="n">content_names_map</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_content_names</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="n">exits</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">(</span><span class="n">content_names_map</span><span class="p">[</span><span class="s1">&#39;exits&#39;</span><span class="p">])</span>
<span class="n">characters</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">(</span><span class="n">content_names_map</span><span class="p">[</span><span class="s1">&#39;characters&#39;</span><span class="p">])</span>
<span class="n">things</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">(</span><span class="n">content_names_map</span><span class="p">[</span><span class="s1">&#39;things&#39;</span><span class="p">])</span>
<span class="n">exits</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">(</span><span class="n">content_names_map</span><span class="p">[</span><span class="s2">&quot;exits&quot;</span><span class="p">])</span>
<span class="n">characters</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">(</span><span class="n">content_names_map</span><span class="p">[</span><span class="s2">&quot;characters&quot;</span><span class="p">])</span>
<span class="n">things</span> <span class="o">=</span> <span class="n">list_to_string</span><span class="p">(</span><span class="n">content_names_map</span><span class="p">[</span><span class="s2">&quot;things&quot;</span><span class="p">])</span>
<span class="c1"># populate the appearance_template string. It&#39;s a good idea to strip it and</span>
<span class="c1"># let the client add any extra spaces instead.</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">appearance_template</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">header</span><span class="o">=</span><span class="s1">&#39;&#39;</span><span class="p">,</span>
<span class="n">header</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">name</span><span class="o">=</span><span class="n">name</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
<span class="n">exits</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;|wExits:|n </span><span class="si">{</span><span class="n">exits</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">exits</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
<span class="n">characters</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|wCharacters:|n </span><span class="si">{</span><span class="n">characters</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">characters</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
<span class="n">things</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|wYou see:|n </span><span class="si">{</span><span class="n">things</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">things</span> <span class="k">else</span> <span class="s1">&#39;&#39;</span><span class="p">,</span>
<span class="n">footer</span><span class="o">=</span><span class="s1">&#39;&#39;</span>
<span class="n">exits</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;|wExits:|n </span><span class="si">{</span><span class="n">exits</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">exits</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">characters</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|wCharacters:|n </span><span class="si">{</span><span class="n">characters</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">characters</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">things</span><span class="o">=</span><span class="sa">f</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">|wYou see:|n </span><span class="si">{</span><span class="n">things</span><span class="si">}</span><span class="s2">&quot;</span> <span class="k">if</span> <span class="n">things</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">footer</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span></div>
<div class="viewcode-block" id="DefaultObject.at_look"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.at_look">[docs]</a> <span class="k">def</span> <span class="nf">at_look</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
@ -2166,7 +2183,8 @@
<span class="n">msg_type</span> <span class="o">=</span> <span class="s2">&quot;whisper&quot;</span>
<span class="n">msg_self</span> <span class="o">=</span> <span class="p">(</span>
<span class="s1">&#39;</span><span class="si">{self}</span><span class="s1"> whisper to </span><span class="si">{all_receivers}</span><span class="s1">, &quot;|n</span><span class="si">{speech}</span><span class="s1">|n&quot;&#39;</span>
<span class="k">if</span> <span class="n">msg_self</span> <span class="ow">is</span> <span class="kc">True</span> <span class="k">else</span> <span class="n">msg_self</span>
<span class="k">if</span> <span class="n">msg_self</span> <span class="ow">is</span> <span class="kc">True</span>
<span class="k">else</span> <span class="n">msg_self</span>
<span class="p">)</span>
<span class="n">msg_receivers</span> <span class="o">=</span> <span class="n">msg_receivers</span> <span class="ow">or</span> <span class="s1">&#39;</span><span class="si">{object}</span><span class="s1"> whispers: &quot;|n</span><span class="si">{speech}</span><span class="s1">|n&quot;&#39;</span>
<span class="n">msg_location</span> <span class="o">=</span> <span class="kc">None</span>
@ -2374,7 +2392,7 @@
<div class="viewcode-block" id="DefaultCharacter.validate_name"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultCharacter.validate_name">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">validate_name</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="sd">&quot;&quot;&quot; Validate the character name prior to creating. Overload this function to add custom validators</span>
<span class="sd">&quot;&quot;&quot;Validate the character name prior to creating. Overload this function to add custom validators</span>
<span class="sd"> Args:</span>
<span class="sd"> name (str) : The name of the character</span>
@ -2433,8 +2451,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">prelogout_location</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="c1"># save location again to be sure.</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">account</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;|r</span><span class="si">{obj}</span><span class="s2"> has no location and no home is set.|n&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">obj</span><span class="o">=</span><span class="bp">self</span><span class="p">),</span>
<span class="n">session</span><span class="o">=</span><span class="n">session</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;|r</span><span class="si">{obj}</span><span class="s2"> has no location and no home is set.|n&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">obj</span><span class="o">=</span><span class="bp">self</span><span class="p">),</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span>
<span class="p">)</span> <span class="c1"># Note to set home.</span></div>
<div class="viewcode-block" id="DefaultCharacter.at_post_puppet"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultCharacter.at_post_puppet">[docs]</a> <span class="k">def</span> <span class="nf">at_post_puppet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
@ -2456,8 +2473,10 @@
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">),</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;look&quot;</span><span class="p">}),</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">message</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">from_obj</span><span class="p">):</span>
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{name}</span><span class="s2"> has entered the game.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">obj</span><span class="p">)),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">)</span>
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{name}</span><span class="s2"> has entered the game.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">obj</span><span class="p">)),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">for_contents</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="p">],</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span></div>
@ -2480,8 +2499,10 @@
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="k">def</span> <span class="nf">message</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">from_obj</span><span class="p">):</span>
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{name}</span><span class="s2"> has left the game.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">obj</span><span class="p">)),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">)</span>
<span class="n">obj</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{name}</span><span class="s2"> has left the game.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">obj</span><span class="p">)),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="n">from_obj</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">for_contents</span><span class="p">(</span><span class="n">message</span><span class="p">,</span> <span class="n">exclude</span><span class="o">=</span><span class="p">[</span><span class="bp">self</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">db</span><span class="o">.</span><span class="n">prelogout_location</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span>
@ -2624,6 +2645,7 @@
<span class="c1"># Default Exit command, used by the base exit object</span>
<span class="c1">#</span>
<div class="viewcode-block" id="ExitCommand"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.ExitCommand">[docs]</a><span class="k">class</span> <span class="nc">ExitCommand</span><span class="p">(</span><span class="n">_COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This is a command that simply cause the caller to traverse</span>

View file

@ -304,7 +304,8 @@
<span class="k">def</span> <span class="nf">_format_protfuncs</span><span class="p">():</span>
<span class="n">out</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">sorted_funcs</span> <span class="o">=</span> <span class="p">[</span>
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">protlib</span><span class="o">.</span><span class="n">FUNC_PARSER</span><span class="o">.</span><span class="n">callables</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">func</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">func</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">protlib</span><span class="o">.</span><span class="n">FUNC_PARSER</span><span class="o">.</span><span class="n">callables</span><span class="o">.</span><span class="n">items</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="p">]</span>
<span class="k">for</span> <span class="n">protfunc_name</span><span class="p">,</span> <span class="n">protfunc</span> <span class="ow">in</span> <span class="n">sorted_funcs</span><span class="p">:</span>
<span class="n">out</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
@ -2155,8 +2156,9 @@
<span class="n">objects</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;objects&quot;</span><span class="p">]</span>
<span class="n">back_node</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;back_node&quot;</span><span class="p">]</span>
<span class="n">diff</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;diff&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">num_changed</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="n">diff</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">objects</span><span class="p">,</span>
<span class="n">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">)</span>
<span class="n">num_changed</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
<span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="n">diff</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">objects</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span>
<span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;|g</span><span class="si">{num}</span><span class="s2"> objects were updated successfully.|n&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">num</span><span class="o">=</span><span class="n">num_changed</span><span class="p">))</span>
<span class="k">return</span> <span class="n">back_node</span>
@ -2396,7 +2398,7 @@
<div class="viewcode-block" id="node_prototype_save"><a class="viewcode-back" href="../../../api/evennia.prototypes.menus.html#evennia.prototypes.menus.node_prototype_save">[docs]</a><span class="k">def</span> <span class="nf">node_prototype_save</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="sd">&quot;&quot;&quot;Save prototype to disk &quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot;Save prototype to disk&quot;&quot;&quot;</span>
<span class="c1"># these are only set if we selected &#39;yes&#39; to save on a previous pass</span>
<span class="n">prototype</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;prototype&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="c1"># set to True/False if answered, None if first pass</span>

View file

@ -92,16 +92,20 @@
<span class="n">prot_value</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">[</span><span class="n">fieldname</span><span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># check if it&#39;s an attribute</span>
<span class="k">for</span> <span class="n">attrtuple</span> <span class="ow">in</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;attrs&#39;</span><span class="p">,</span> <span class="p">[]):</span>
<span class="k">for</span> <span class="n">attrtuple</span> <span class="ow">in</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;attrs&quot;</span><span class="p">,</span> <span class="p">[]):</span>
<span class="k">if</span> <span class="n">attrtuple</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">fieldname</span><span class="p">:</span>
<span class="n">prot_value</span> <span class="o">=</span> <span class="n">attrtuple</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="k">break</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">fieldname</span><span class="si">}</span><span class="s2"> not found in prototype</span><span class="se">\n</span><span class="si">{</span><span class="n">prototype</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;(neither as prototype-field or as an Attribute&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">fieldname</span><span class="si">}</span><span class="s2"> not found in prototype</span><span class="se">\n</span><span class="si">{</span><span class="n">prototype</span><span class="si">}</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;(neither as prototype-field or as an Attribute&quot;</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">prot_value</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Error in prototype</span><span class="se">\n</span><span class="si">{</span><span class="n">prototype</span><span class="si">}</span><span class="se">\n</span><span class="s2">$protkey can only reference static &quot;</span>
<span class="sa">f</span><span class="s2">&quot;values/attributes (found </span><span class="si">{</span><span class="n">prot_value</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Error in prototype</span><span class="se">\n</span><span class="si">{</span><span class="n">prototype</span><span class="si">}</span><span class="se">\n</span><span class="s2">$protkey can only reference static &quot;</span>
<span class="sa">f</span><span class="s2">&quot;values/attributes (found </span><span class="si">{</span><span class="n">prot_value</span><span class="si">}</span><span class="s2">)&quot;</span>
<span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">funcparser_callable_eval</span><span class="p">(</span><span class="n">prot_value</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="k">except</span> <span class="n">funcparser</span><span class="o">.</span><span class="n">ParsingError</span><span class="p">:</span>

View file

@ -173,8 +173,9 @@
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
<span class="c1"># attrs must be on form [(key, value, category, lockstr)]</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span><span class="s2">&quot;Prototype&#39;s &#39;attr&#39; field must &quot;</span>
<span class="sa">f</span><span class="s2">&quot;be a list of tuples: </span><span class="si">{</span><span class="n">prototype</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_error</span><span class="p">(</span>
<span class="s2">&quot;Prototype&#39;s &#39;attr&#39; field must &quot;</span> <span class="sa">f</span><span class="s2">&quot;be a list of tuples: </span><span class="si">{</span><span class="n">prototype</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">attr</span><span class="p">:</span>
<span class="n">nattr</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="k">if</span> <span class="n">nattr</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
@ -189,14 +190,15 @@
<span class="k">elif</span> <span class="n">key</span> <span class="o">==</span> <span class="s2">&quot;prototype_parent&quot;</span><span class="p">:</span>
<span class="c1"># homogenize any prototype-parents embedded directly as dicts</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">,</span> <span class="p">[])</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">protparents</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="p">[</span><span class="n">protparents</span><span class="p">]</span>
<span class="k">for</span> <span class="n">parent</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">protparents</span><span class="p">):</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># recursively homogenize directly embedded prototype parents</span>
<span class="n">homogenized_parents</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">homogenize_prototype</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">custom_keys</span><span class="o">=</span><span class="n">custom_keys</span><span class="p">))</span>
<span class="n">homogenize_prototype</span><span class="p">(</span><span class="n">parent</span><span class="p">,</span> <span class="n">custom_keys</span><span class="o">=</span><span class="n">custom_keys</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># normal prototype-parent names are added as-is</span>
<span class="n">homogenized_parents</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">parent</span><span class="p">)</span>
@ -212,7 +214,7 @@
<span class="k">if</span> <span class="n">homogenized_tags</span><span class="p">:</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;tags&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized_tags</span>
<span class="k">if</span> <span class="n">homogenized_parents</span><span class="p">:</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s1">&#39;prototype_parent&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized_parents</span>
<span class="n">homogenized</span><span class="p">[</span><span class="s2">&quot;prototype_parent&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">homogenized_parents</span>
<span class="c1"># add required missing parts that had defaults before</span>
@ -232,6 +234,7 @@
<span class="c1"># module/dict-based prototypes</span>
<div class="viewcode-block" id="load_module_prototypes"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.load_module_prototypes">[docs]</a><span class="k">def</span> <span class="nf">load_module_prototypes</span><span class="p">(</span><span class="o">*</span><span class="n">mod_or_prototypes</span><span class="p">,</span> <span class="n">override</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Load module prototypes. Also prototype-dicts passed directly to this function are considered</span>
@ -275,12 +278,16 @@
<span class="c1"># prototype dicts that must have &#39;prototype_key&#39; set.</span>
<span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">prototype_list</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prot</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Prototype read from </span><span class="si">{</span><span class="n">mod</span><span class="si">}</span><span class="s2">.PROTOTYPE_LIST &quot;</span>
<span class="sa">f</span><span class="s2">&quot;is not a dict (skipping): </span><span class="si">{</span><span class="n">prot</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Prototype read from </span><span class="si">{</span><span class="n">mod</span><span class="si">}</span><span class="s2">.PROTOTYPE_LIST &quot;</span>
<span class="sa">f</span><span class="s2">&quot;is not a dict (skipping): </span><span class="si">{</span><span class="n">prot</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">continue</span>
<span class="k">elif</span> <span class="s2">&quot;prototype_key&quot;</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">prot</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Prototype read from </span><span class="si">{</span><span class="n">mod</span><span class="si">}</span><span class="s2">.PROTOTYPE_LIST &quot;</span>
<span class="sa">f</span><span class="s2">&quot;is missing the &#39;prototype_key&#39; (skipping): </span><span class="si">{</span><span class="n">prot</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;Prototype read from </span><span class="si">{</span><span class="n">mod</span><span class="si">}</span><span class="s2">.PROTOTYPE_LIST &quot;</span>
<span class="sa">f</span><span class="s2">&quot;is missing the &#39;prototype_key&#39; (skipping): </span><span class="si">{</span><span class="n">prot</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="k">continue</span>
<span class="n">prots</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">],</span> <span class="n">homogenize_prototype</span><span class="p">(</span><span class="n">prot</span><span class="p">)))</span>
<span class="k">else</span><span class="p">:</span>
@ -312,7 +319,8 @@
<span class="p">{</span>
<span class="s2">&quot;prototype_key&quot;</span><span class="p">:</span> <span class="n">actual_prot_key</span><span class="p">,</span>
<span class="s2">&quot;prototype_desc&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;prototype_desc&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;prototype_desc&quot;</span> <span class="ow">in</span> <span class="n">prototype</span> <span class="k">else</span> <span class="p">(</span><span class="n">mod</span> <span class="ow">or</span> <span class="s2">&quot;N/A&quot;</span><span class="p">)),</span>
<span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;prototype_desc&quot;</span><span class="p">]</span> <span class="k">if</span> <span class="s2">&quot;prototype_desc&quot;</span> <span class="ow">in</span> <span class="n">prototype</span> <span class="k">else</span> <span class="p">(</span><span class="n">mod</span> <span class="ow">or</span> <span class="s2">&quot;N/A&quot;</span><span class="p">)</span>
<span class="p">),</span>
<span class="s2">&quot;prototype_locks&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;prototype_locks&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="s2">&quot;prototype_locks&quot;</span> <span class="ow">in</span> <span class="n">prototype</span>
@ -334,9 +342,11 @@
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mod_or_dict</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="c1"># a single prototype; we must make sure it has its key</span>
<span class="n">prototype_key</span> <span class="o">=</span> <span class="n">mod_or_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;prototype_key&#39;</span><span class="p">)</span>
<span class="n">prototype_key</span> <span class="o">=</span> <span class="n">mod_or_dict</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_key</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The prototype </span><span class="si">{</span><span class="n">mod_or_prototype</span><span class="si">}</span><span class="s2"> does not contain a &#39;prototype_key&#39;&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">ValidationError</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;The prototype </span><span class="si">{</span><span class="n">mod_or_prototype</span><span class="si">}</span><span class="s2"> does not contain a &#39;prototype_key&#39;&quot;</span>
<span class="p">)</span>
<span class="n">prots</span> <span class="o">=</span> <span class="p">[(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">mod_or_dict</span><span class="p">)]</span>
<span class="n">mod</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
@ -349,7 +359,7 @@
<span class="k">for</span> <span class="n">prototype_key</span><span class="p">,</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">prots</span><span class="p">:</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="n">_cleanup_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">prot</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="n">mod</span><span class="p">)</span>
<span class="c1"># the key can change since in-proto key is given prio over variable-name-based keys</span>
<span class="n">actual_prototype_key</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">[</span><span class="s1">&#39;prototype_key&#39;</span><span class="p">]</span>
<span class="n">actual_prototype_key</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span>
<span class="k">if</span> <span class="n">actual_prototype_key</span> <span class="ow">in</span> <span class="n">_MODULE_PROTOTYPES</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">override</span><span class="p">:</span>
<span class="c1"># don&#39;t override - useful to still let settings replace dynamic inserts</span>
@ -504,23 +514,26 @@
<span class="n">stored_prototype</span> <span class="o">=</span> <span class="n">DbPrototype</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">stored_prototype</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">PermissionError</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{prototype_key}</span><span class="s2"> was not found.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">prototype_key</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">PermissionError</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{prototype_key}</span><span class="s2"> was not found.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">prototype_key</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">stored_prototype</span> <span class="o">=</span> <span class="n">stored_prototype</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="n">caller</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">stored_prototype</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;edit&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">PermissionError</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{caller}</span><span class="s2"> needs explicit &#39;edit&#39; permissions to &quot;</span>
<span class="s2">&quot;delete prototype </span><span class="si">{prototype_key}</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">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span> <span class="n">prototype_key</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{caller}</span><span class="s2"> needs explicit &#39;edit&#39; permissions to &quot;</span>
<span class="s2">&quot;delete prototype </span><span class="si">{prototype_key}</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">caller</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span> <span class="n">prototype_key</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">stored_prototype</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="search_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.search_prototype">[docs]</a><span class="k">def</span> <span class="nf">search_prototype</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">require_single</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">return_iterators</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">no_db</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<div class="viewcode-block" id="search_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.search_prototype">[docs]</a><span class="k">def</span> <span class="nf">search_prototype</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">require_single</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">return_iterators</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">no_db</span><span class="o">=</span><span class="kc">False</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Find prototypes based on key and/or tags, or all prototypes.</span>
@ -562,7 +575,7 @@
<span class="c1"># prototype keys are always in lowecase</span>
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">key</span> <span class="o">=</span> <span class="n">key</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="c1"># search module prototypes</span>
@ -629,10 +642,10 @@
<span class="n">nmodules</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">module_prototypes</span><span class="p">)</span>
<span class="n">ndbprots</span> <span class="o">=</span> <span class="n">db_matches</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="k">if</span> <span class="n">db_matches</span> <span class="k">else</span> <span class="mi">0</span>
<span class="k">if</span> <span class="n">nmodules</span> <span class="o">+</span> <span class="n">ndbprots</span> <span class="o">!=</span> <span class="mi">1</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Found </span><span class="si">{num}</span><span class="s2"> matching prototypes among </span><span class="si">{module_prototypes}</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">num</span><span class="o">=</span><span class="n">nmodules</span> <span class="o">+</span> <span class="n">ndbprots</span><span class="p">,</span>
<span class="n">module_prototypes</span><span class="o">=</span><span class="n">module_prototypes</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Found </span><span class="si">{num}</span><span class="s2"> matching prototypes among </span><span class="si">{module_prototypes}</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">num</span><span class="o">=</span><span class="n">nmodules</span> <span class="o">+</span> <span class="n">ndbprots</span><span class="p">,</span> <span class="n">module_prototypes</span><span class="o">=</span><span class="n">module_prototypes</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">return_iterators</span><span class="p">:</span>
@ -712,7 +725,7 @@
<span class="k">else</span><span class="p">:</span>
<span class="c1"># get the correct slice, adjusted for the db-prototypes</span>
<span class="n">pageno</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">pageno</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_npages_db</span><span class="p">)</span>
<span class="k">return</span> <span class="n">modprot_list</span><span class="p">[</span><span class="n">pageno</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">:</span> <span class="n">pageno</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">]</span></div>
<span class="k">return</span> <span class="n">modprot_list</span><span class="p">[</span><span class="n">pageno</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="p">:</span> <span class="n">pageno</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">height</span><span class="p">]</span></div>
<div class="viewcode-block" id="PrototypeEvMore.page_formatter"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.PrototypeEvMore.page_formatter">[docs]</a> <span class="k">def</span> <span class="nf">page_formatter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">page</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -851,12 +864,15 @@
<span class="k">if</span> <span class="n">is_prototype_base</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> requires `typeclass` &quot;</span> <span class="s2">&quot;or &#39;prototype_parent&#39;.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">)</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;warnings&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> can only be used as a mixin since it lacks &quot;</span>
<span class="s2">&quot;&#39;typeclass&#39; or &#39;prototype_parent&#39; keys.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">)</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> can only be used as a mixin since it lacks &quot;</span>
<span class="s2">&quot;&#39;typeclass&#39; or &#39;prototype_parent&#39; keys.&quot;</span>
<span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">strict</span> <span class="ow">and</span> <span class="n">typeclass</span><span class="p">:</span>
@ -864,9 +880,10 @@
<span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ImportError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{err}</span><span class="s2">: Prototype </span><span class="si">{protkey}</span><span class="s2"> is based on typeclass </span><span class="si">{typeclass}</span><span class="s2">, &quot;</span>
<span class="s2">&quot;which could not be imported!&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">err</span><span class="o">=</span><span class="n">err</span><span class="p">,</span> <span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">)</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{err}</span><span class="s2">: Prototype </span><span class="si">{protkey}</span><span class="s2"> is based on typeclass </span><span class="si">{typeclass}</span><span class="s2">, &quot;</span>
<span class="s2">&quot;which could not be imported!&quot;</span>
<span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="o">=</span><span class="n">err</span><span class="p">,</span> <span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">prototype_parent</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype_parent</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
@ -882,20 +899,24 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">protstring</span> <span class="o">=</span> <span class="n">protstring</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">protkey</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">protstring</span> <span class="o">==</span> <span class="n">protkey</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> tries to parent itself.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">))</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> tries to parent itself.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">protparent</span> <span class="o">=</span> <span class="n">protparents</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">protstring</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">protparent</span><span class="p">:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2">&#39;s `prototype_parent` (named &#39;</span><span class="si">{parent}</span><span class="s2">&#39;) &quot;</span>
<span class="s2">&quot;was not found.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="n">protstring</span><span class="p">)</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2">&#39;s `prototype_parent` (named &#39;</span><span class="si">{parent}</span><span class="s2">&#39;) &quot;</span>
<span class="s2">&quot;was not found.&quot;</span>
<span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">,</span> <span class="n">parent</span><span class="o">=</span><span class="n">protstring</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># check for infinite recursion</span>
<span class="k">if</span> <span class="nb">id</span><span class="p">(</span><span class="n">prototype</span><span class="p">)</span> <span class="ow">in</span> <span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;visited&quot;</span><span class="p">]:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> has infinite nesting of prototypes.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span> <span class="ow">or</span> <span class="n">prototype</span><span class="p">)</span>
<span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span> <span class="ow">or</span> <span class="n">prototype</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]:</span>
@ -917,9 +938,11 @@
<span class="c1"># if we get back to the current level without a typeclass it&#39;s an error.</span>
<span class="k">if</span> <span class="n">strict</span> <span class="ow">and</span> <span class="n">is_prototype_base</span> <span class="ow">and</span> <span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;depth&quot;</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="mi">0</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;typeclass&quot;</span><span class="p">]:</span>
<span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;errors&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> has no `typeclass` defined anywhere in its parent</span><span class="se">\n</span><span class="s2"> &quot;</span>
<span class="s2">&quot;chain. Add `typeclass`, or a `prototype_parent` pointing to a &quot;</span>
<span class="s2">&quot;prototype with a typeclass.&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">)</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Prototype </span><span class="si">{protkey}</span><span class="s2"> has no `typeclass` defined anywhere in its parent</span><span class="se">\n</span><span class="s2"> &quot;</span>
<span class="s2">&quot;chain. Add `typeclass`, or a `prototype_parent` pointing to a &quot;</span>
<span class="s2">&quot;prototype with a typeclass.&quot;</span>
<span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">protkey</span><span class="o">=</span><span class="n">protkey</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">_flags</span><span class="p">[</span><span class="s2">&quot;depth&quot;</span><span class="p">]</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
@ -943,8 +966,9 @@
<span class="n">prototype</span><span class="p">[</span><span class="s2">&quot;prototype_locks&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">prototype_locks</span></div>
<div class="viewcode-block" id="protfunc_parser"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.protfunc_parser">[docs]</a><span class="k">def</span> <span class="nf">protfunc_parser</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">available_functions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">testing</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">stacktrace</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="protfunc_parser"><a class="viewcode-back" href="../../../api/evennia.prototypes.prototypes.html#evennia.prototypes.prototypes.protfunc_parser">[docs]</a><span class="k">def</span> <span class="nf">protfunc_parser</span><span class="p">(</span>
<span class="n">value</span><span class="p">,</span> <span class="n">available_functions</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">testing</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">stacktrace</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Parse a prototype value string for a protfunc and process it.</span>
@ -1171,8 +1195,9 @@
<span class="n">stype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
<span class="k">if</span> <span class="n">stype</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
<span class="k">return</span> <span class="p">{</span><span class="n">value_to_obj_or_any</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">value_to_obj_or_any</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">value</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="k">return</span> <span class="p">{</span>
<span class="n">value_to_obj_or_any</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">value_to_obj_or_any</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">value</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">}</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">return</span> <span class="n">stype</span><span class="p">([</span><span class="n">value_to_obj_or_any</span><span class="p">(</span><span class="n">val</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">value</span><span class="p">])</span>
<span class="k">return</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">ObjectDB</span><span class="p">)</span></div>

View file

@ -196,8 +196,13 @@
<span class="n">_CREATE_OBJECT_KWARGS</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">,</span> <span class="s2">&quot;location&quot;</span><span class="p">,</span> <span class="s2">&quot;home&quot;</span><span class="p">,</span> <span class="s2">&quot;destination&quot;</span><span class="p">)</span>
<span class="n">_PROTOTYPE_META_NAMES</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">,</span> <span class="s2">&quot;prototype_desc&quot;</span><span class="p">,</span> <span class="s2">&quot;prototype_tags&quot;</span><span class="p">,</span>
<span class="s2">&quot;prototype_locks&quot;</span><span class="p">,</span> <span class="s2">&quot;prototype_parent&quot;</span><span class="p">)</span>
<span class="n">_PROTOTYPE_META_NAMES</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;prototype_key&quot;</span><span class="p">,</span>
<span class="s2">&quot;prototype_desc&quot;</span><span class="p">,</span>
<span class="s2">&quot;prototype_tags&quot;</span><span class="p">,</span>
<span class="s2">&quot;prototype_locks&quot;</span><span class="p">,</span>
<span class="s2">&quot;prototype_parent&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">_PROTOTYPE_ROOT_NAMES</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;typeclass&quot;</span><span class="p">,</span>
<span class="s2">&quot;key&quot;</span><span class="p">,</span>
@ -277,9 +282,7 @@
<span class="n">parent_prototype</span> <span class="o">=</span> <span class="n">protparents</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="p">{})</span>
<span class="c1"># Build the prot dictionary in reverse order, overloading</span>
<span class="n">new_prot</span> <span class="o">=</span> <span class="n">_get_prototype</span><span class="p">(</span>
<span class="n">parent_prototype</span><span class="p">,</span> <span class="n">protparents</span><span class="p">,</span> <span class="n">_workprot</span><span class="o">=</span><span class="n">_workprot</span>
<span class="p">)</span>
<span class="n">new_prot</span> <span class="o">=</span> <span class="n">_get_prototype</span><span class="p">(</span><span class="n">parent_prototype</span><span class="p">,</span> <span class="n">protparents</span><span class="p">,</span> <span class="n">_workprot</span><span class="o">=</span><span class="n">_workprot</span><span class="p">)</span>
<span class="c1"># attrs, tags have internal structure that should be inherited separately</span>
<span class="n">new_prot</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">_inherit_attrs</span><span class="p">(</span>
@ -318,8 +321,9 @@
<span class="k">if</span> <span class="n">prototype</span><span class="p">:</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">homogenize_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">)</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="p">{</span><span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">prot</span>
<span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span><span class="n">no_db</span><span class="o">=</span><span class="n">no_db</span><span class="p">)}</span>
<span class="n">protparents</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">prot</span> <span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span><span class="n">no_db</span><span class="o">=</span><span class="n">no_db</span><span class="p">)</span>
<span class="p">}</span>
<span class="n">protlib</span><span class="o">.</span><span class="n">validate_prototype</span><span class="p">(</span>
<span class="n">prototype</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">protparents</span><span class="p">,</span> <span class="n">is_prototype_base</span><span class="o">=</span><span class="n">validate</span><span class="p">,</span> <span class="n">strict</span><span class="o">=</span><span class="n">validate</span>
<span class="p">)</span>
@ -384,7 +388,7 @@
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">aliases</span>
<span class="n">tags</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span>
<span class="p">[(</span><span class="n">tag</span><span class="o">.</span><span class="n">db_key</span><span class="p">,</span> <span class="n">tag</span><span class="o">.</span><span class="n">db_category</span><span class="p">,</span> <span class="n">tag</span><span class="o">.</span><span class="n">db_data</span><span class="p">)</span> <span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="n">obj</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">return_objs</span><span class="o">=</span><span class="kc">True</span><span class="p">)],</span>
<span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;tags&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">tags</span>
@ -393,7 +397,7 @@
<span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">attr</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">attr</span><span class="o">.</span><span class="n">category</span><span class="p">,</span> <span class="s2">&quot;;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">attr</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">all</span><span class="p">()))</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
<span class="p">],</span>
<span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">3</span><span class="p">])</span>
<span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">tup</span><span class="p">:</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span> <span class="ow">or</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">3</span><span class="p">]),</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">attrs</span><span class="p">:</span>
<span class="n">prot</span><span class="p">[</span><span class="s2">&quot;attrs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">attrs</span>
@ -531,8 +535,10 @@
<span class="n">out</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">_get_all_nested_diff_instructions</span><span class="p">(</span><span class="n">val</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Diff contains non-dicts that are not on the &quot;</span>
<span class="s2">&quot;form (old, new, action_to_take): </span><span class="si">{diffpart}</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">diffpart</span><span class="p">)</span>
<span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Diff contains non-dicts that are not on the &quot;</span>
<span class="s2">&quot;form (old, new, action_to_take): </span><span class="si">{diffpart}</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">diffpart</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">out</span>
@ -669,8 +675,9 @@
<span class="k">return</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">line</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">texts</span> <span class="k">if</span> <span class="n">line</span><span class="p">)</span></div>
<div class="viewcode-block" id="batch_update_objects_with_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.batch_update_objects_with_prototype">[docs]</a><span class="k">def</span> <span class="nf">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<div class="viewcode-block" id="batch_update_objects_with_prototype"><a class="viewcode-back" href="../../../api/evennia.prototypes.spawner.html#evennia.prototypes.spawner.batch_update_objects_with_prototype">[docs]</a><span class="k">def</span> <span class="nf">batch_update_objects_with_prototype</span><span class="p">(</span>
<span class="n">prototype</span><span class="p">,</span> <span class="n">diff</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Update existing objects with the latest version of the prototype.</span>
@ -983,27 +990,32 @@
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;location&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_location&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span>
<span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;home&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">val</span><span class="p">:</span>
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_home&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_home&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span>
<span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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="k">else</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_home&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span>
<span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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="k">except</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="c1"># settings.DEFAULT_HOME not existing is common for unittests</span>
<span class="k">pass</span>
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;destination&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_destination&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_destination&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span>
<span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;typeclass&quot;</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_OBJECT_TYPECLASS</span><span class="p">)</span>
<span class="n">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_typeclass_path&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">create_kwargs</span><span class="p">[</span><span class="s2">&quot;db_typeclass_path&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">init_spawn_value</span><span class="p">(</span>
<span class="n">val</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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="c1"># extract calls to handlers</span>
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;permissions&quot;</span><span class="p">,</span> <span class="p">[])</span>
@ -1016,8 +1028,13 @@
<span class="n">val</span> <span class="o">=</span> <span class="n">prot</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;tags&quot;</span><span class="p">,</span> <span class="p">[])</span>
<span class="n">tags</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">category</span><span class="p">,</span> <span class="o">*</span><span class="n">data</span><span class="p">)</span> <span class="ow">in</span> <span class="n">val</span><span class="p">:</span>
<span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">((</span><span class="n">init_spawn_value</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">category</span><span class="p">,</span> <span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">data</span> <span class="k">else</span> <span class="kc">None</span><span class="p">))</span>
<span class="n">tags</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">(</span>
<span class="n">init_spawn_value</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="nb">str</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">category</span><span class="p">,</span>
<span class="n">data</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">data</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">prototype_key</span> <span class="o">=</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_key&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">prototype_key</span><span class="p">:</span>
@ -1029,8 +1046,10 @@
<span class="c1"># extract ndb assignments</span>
<span class="n">nattributes</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
<span class="p">(</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">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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="p">(</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">1</span><span class="p">)[</span><span class="mi">1</span><span class="p">],</span>
<span class="n">init_spawn_value</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">value_to_obj</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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="p">)</span>
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">prot</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="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;ndb_&quot;</span><span class="p">)</span>
<span class="p">)</span>
@ -1040,8 +1059,13 @@
<span class="n">attributes</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">for</span> <span class="p">(</span><span class="n">attrname</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="o">*</span><span class="n">rest</span><span class="p">)</span> <span class="ow">in</span> <span class="n">val</span><span class="p">:</span>
<span class="n">attributes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">(</span><span class="n">attrname</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">rest</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">rest</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span> <span class="n">rest</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">rest</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">))</span>
<span class="p">(</span>
<span class="n">attrname</span><span class="p">,</span>
<span class="n">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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">rest</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">rest</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="n">rest</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">rest</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">simple_attributes</span> <span class="o">=</span> <span class="p">[]</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="p">(</span>
@ -1052,8 +1076,14 @@
<span class="k">continue</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">simple_attributes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">init_spawn_value</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">value_to_obj_or_any</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="p">(</span>
<span class="n">key</span><span class="p">,</span>
<span class="n">init_spawn_value</span><span class="p">(</span>
<span class="n">value</span><span class="p">,</span> <span class="n">value_to_obj_or_any</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</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="kc">None</span><span class="p">,</span>
<span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">attributes</span> <span class="o">=</span> <span class="n">attributes</span> <span class="o">+</span> <span class="n">simple_attributes</span>

View file

@ -199,8 +199,6 @@
<span class="c1"># deprecated ...</span>
<span class="k">pass</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">)):</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span>
<span class="n">value</span> <span class="o">=</span> <span class="n">to_str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="n">value</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span> <span class="ow">or</span> <span class="n">value</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">):</span>
<span class="n">dbid</span> <span class="o">=</span> <span class="n">dbref</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">reqhash</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>

View file

@ -150,8 +150,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># if this an Attribute with a category we should differentiate</span>
<span class="n">fieldname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_attr_category_fieldname</span><span class="p">(</span>
<span class="n">fieldname</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_category</span>
<span class="k">if</span> <span class="n">fieldname</span> <span class="o">==</span> <span class="s2">&quot;db_value&quot;</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_category&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
<span class="n">fieldname</span><span class="p">,</span>
<span class="n">obj</span><span class="o">.</span><span class="n">db_category</span> <span class="k">if</span> <span class="n">fieldname</span> <span class="o">==</span> <span class="s2">&quot;db_value&quot;</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;db_category&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">to_delete</span> <span class="o">=</span> <span class="p">[]</span>
@ -166,8 +166,7 @@
<span class="k">for</span> <span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">idstring</span><span class="p">)</span> <span class="ow">in</span> <span class="n">to_delete</span><span class="p">:</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">monitors</span><span class="p">[</span><span class="n">obj</span><span class="p">][</span><span class="n">fieldname</span><span class="p">][</span><span class="n">idstring</span><span class="p">]</span></div>
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="MonitorHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.monitorhandler.html#evennia.scripts.monitorhandler.MonitorHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="n">fieldname</span><span class="p">,</span> <span class="n">callback</span><span class="p">,</span> <span class="n">idstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Add monitoring to a given field or Attribute. A field must</span>
<span class="sd"> be specified with the full db_* name or it will be assumed</span>

View file

@ -91,10 +91,12 @@
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">next_repeat</span> <span class="o">=</span> <span class="s2">&quot;?&quot;</span>
<span class="n">string</span> <span class="o">+=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2"> &#39;</span><span class="si">{key}</span><span class="s2">&#39; (</span><span class="si">{next_repeat}</span><span class="s2">/</span><span class="si">{interval}</span><span class="s2">, </span><span class="si">{repeats}</span><span class="s2"> repeats): </span><span class="si">{desc}</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">key</span><span class="o">=</span><span class="n">script</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">next_repeat</span><span class="o">=</span><span class="n">next_repeat</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="n">script</span><span class="o">.</span><span class="n">key</span><span class="p">,</span>
<span class="n">next_repeat</span><span class="o">=</span><span class="n">next_repeat</span><span class="p">,</span>
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
<span class="n">desc</span><span class="o">=</span><span class="n">script</span><span class="o">.</span><span class="n">desc</span><span class="p">)</span>
<span class="n">desc</span><span class="o">=</span><span class="n">script</span><span class="o">.</span><span class="n">desc</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">string</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
<div class="viewcode-block" id="ScriptHandler.add"><a class="viewcode-back" href="../../../api/evennia.scripts.scripthandler.html#evennia.scripts.scripthandler.ScriptHandler.add">[docs]</a> <span class="k">def</span> <span class="nf">add</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">scriptclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>

View file

@ -515,6 +515,14 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">def</span> <span class="nf">at_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when the Script is cached in the idmapper. This is usually more reliable</span>
<span class="sd"> than overriding `__init__` since the latter can be called at unexpected times.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span>
<span class="k">def</span> <span class="nf">at_script_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Should be overridden in child.</span>

View file

@ -132,6 +132,7 @@
<span class="s2">on-demand rather than using a ticker.</span>
<span class="s2">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="Ticker"><a class="viewcode-back" href="../../../api/evennia.scripts.tickerhandler.html#evennia.scripts.tickerhandler.Ticker">[docs]</a><span class="k">class</span> <span class="nc">Ticker</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Represents a repeatedly running task that calls</span>

View file

@ -48,6 +48,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">import</span> <span class="nn">os</span>
<div class="viewcode-block" id="check_errors"><a class="viewcode-back" href="../../../api/evennia.server.deprecations.html#evennia.server.deprecations.check_errors">[docs]</a><span class="k">def</span> <span class="nf">check_errors</span><span class="p">(</span><span class="n">settings</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Check for deprecations that are critical errors and should stop</span>
@ -103,19 +104,26 @@
<span class="p">)</span>
<span class="n">depstring</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;settings.</span><span class="si">{}</span><span class="s2"> was renamed to </span><span class="si">{}</span><span class="s2">. Update your settings file (the FuncParser &quot;</span>
<span class="s2">&quot;replaces and generalizes that which inlinefuncs used to do).&quot;</span><span class="p">)</span>
<span class="s2">&quot;replaces and generalizes that which inlinefuncs used to do).&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;INLINEFUNC_ENABLED&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;settings.INLINEFUNC_ENABLED&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED&quot;</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;settings.INLINEFUNC_ENABLED&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED&quot;</span>
<span class="p">)</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;INLINEFUNC_STACK_MAXSIZE&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;settings.INLINEFUNC_STACK_MAXSIZE&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_MAX_NESTING&quot;</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;settings.INLINEFUNC_STACK_MAXSIZE&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_MAX_NESTING&quot;</span><span class="p">)</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;INLINEFUNC_MODULES&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;settings.INLINEFUNC_MODULES&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_OUTGOING_MESSAGES_MODULES&quot;</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;settings.INLINEFUNC_MODULES&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_OUTGOING_MESSAGES_MODULES&quot;</span><span class="p">)</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;PROTFUNC_MODULES&quot;</span><span class="p">):</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span><span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="s2">&quot;settings.PROTFUNC_MODULES&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_PROTOTYPE_VALUE_MODULES&quot;</span><span class="p">))</span>
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="n">depstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">&quot;settings.PROTFUNC_MODULES&quot;</span><span class="p">,</span> <span class="s2">&quot;FUNCPARSER_PROTOTYPE_VALUE_MODULES&quot;</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">gametime_deprecation</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;The settings TIME_SEC_PER_MIN, TIME_MIN_PER_HOUR,&quot;</span>
@ -163,7 +171,8 @@
<span class="k">raise</span> <span class="ne">DeprecationWarning</span><span class="p">(</span>
<span class="s2">&quot;settings.CHANNEL_HANDLER_CLASS and CHANNEL COMMAND_CLASS are &quot;</span>
<span class="s2">&quot;unused and should be removed. The ChannelHandler is no more; &quot;</span>
<span class="s2">&quot;channels are now handled by aliasing the default &#39;channel&#39; command.&quot;</span><span class="p">)</span>
<span class="s2">&quot;channels are now handled by aliasing the default &#39;channel&#39; command.&quot;</span>
<span class="p">)</span>
<span class="n">template_overrides_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">&quot;web&quot;</span><span class="p">,</span> <span class="s2">&quot;template_overrides&quot;</span><span class="p">)</span>
<span class="n">static_overrides_dir</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">&quot;web&quot;</span><span class="p">,</span> <span class="s2">&quot;static_overrides&quot;</span><span class="p">)</span>
@ -193,8 +202,10 @@
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">ALLOWED_HOSTS</span> <span class="o">==</span> <span class="p">[</span><span class="s2">&quot;*&quot;</span><span class="p">]:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot; [Devel: settings.ALLOWED_HOSTS set to &#39;*&#39; (all). Limit in production.]&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">settings</span><span class="o">.</span><span class="n">SERVER_HOSTNAME</span> <span class="o">==</span> <span class="s2">&quot;localhost&quot;</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot; [Devel: settings.SERVER_HOSTNAME is set to &#39;localhost&#39;. &quot;</span>
<span class="s2">&quot;Update to the actual hostname in production.]&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="s2">&quot; [Devel: settings.SERVER_HOSTNAME is set to &#39;localhost&#39;. &quot;</span>
<span class="s2">&quot;Update to the actual hostname in production.]&quot;</span>
<span class="p">)</span>
<span class="k">for</span> <span class="n">dbentry</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">DATABASES</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
<span class="k">if</span> <span class="s2">&quot;psycopg&quot;</span> <span class="ow">in</span> <span class="n">dbentry</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ENGINE&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">):</span>

View file

@ -1473,6 +1473,7 @@
<span class="k">if</span> <span class="p">(</span><span class="n">username</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="n">password</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">password</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span>
<span class="n">superuser</span> <span class="o">=</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">create_superuser</span><span class="p">(</span><span class="n">username</span><span class="p">,</span> <span class="n">email</span><span class="p">,</span> <span class="n">password</span><span class="p">)</span>
<span class="n">superuser</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
<span class="k">else</span><span class="p">:</span>
@ -1989,7 +1990,7 @@
<span class="k">return</span> <span class="kc">False</span>
<span class="n">cmdpath</span> <span class="o">=</span> <span class="n">custom_commands</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">option</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cmdpath</span><span class="p">:</span>
<span class="n">modpath</span><span class="p">,</span> <span class="o">*</span><span class="n">cmdname</span> <span class="o">=</span> <span class="n">cmdpath</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s1">&#39;.&#39;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="n">modpath</span><span class="p">,</span> <span class="o">*</span><span class="n">cmdname</span> <span class="o">=</span> <span class="n">cmdpath</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="p">:</span>
<span class="n">cmdname</span> <span class="o">=</span> <span class="n">cmdname</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">importlib</span><span class="o">.</span><span class="n">import_module</span><span class="p">(</span><span class="n">modpath</span><span class="p">)</span>

View file

@ -67,14 +67,16 @@
<span class="s2"> &quot;&quot;&quot;</span>
<span class="n">LIMBO_DESC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">Welcome to your new |wEvennia|n-based game! Visit https://www.evennia.com if you need</span>
<span class="s2">help, want to contribute, report issues or just join the community.</span>
<span class="n">LIMBO_DESC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Welcome to your new |wEvennia|n-based game! Visit https://www.evennia.com if you need</span>
<span class="sd">help, want to contribute, report issues or just join the community.</span>
<span class="s2">As a privileged user, write |wbatchcommand tutorial_world.build|n to build</span>
<span class="s2">tutorial content. Once built, try |wintro|n for starting help and |wtutorial|n to</span>
<span class="s2">play the demo game.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span>
<span class="sd">As a privileged user, write |wbatchcommand tutorial_world.build|n to build</span>
<span class="sd">tutorial content. Once built, try |wintro|n for starting help and |wtutorial|n to</span>
<span class="sd">play the demo game.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">)</span>
<span class="n">WARNING_POSTGRESQL_FIX</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
@ -141,7 +143,8 @@
<span class="n">superuser_character</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="k">except</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">DoesNotExist</span><span class="p">:</span>
<span class="n">superuser_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">character_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">superuser</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">character_typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">superuser</span><span class="o">.</span><span class="n">username</span><span class="p">,</span> <span class="n">nohome</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="n">superuser_character</span><span class="o">.</span><span class="n">db_typeclass_path</span> <span class="o">=</span> <span class="n">character_typeclass</span>
<span class="n">superuser_character</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;This is User #1.&quot;</span><span class="p">)</span>
@ -177,6 +180,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">superuser_character</span><span class="o">.</span><span class="n">home</span><span class="p">:</span>
<span class="n">superuser_character</span><span class="o">.</span><span class="n">home</span> <span class="o">=</span> <span class="n">limbo_obj</span></div>
<div class="viewcode-block" id="at_initial_setup"><a class="viewcode-back" href="../../../api/evennia.server.initial_setup.html#evennia.server.initial_setup.at_initial_setup">[docs]</a><span class="k">def</span> <span class="nf">at_initial_setup</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Custom hook for users to overload some or all parts of the initial</span>
@ -234,7 +238,7 @@
<span class="sd"> the function will exit immediately.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">last_step</span> <span class="ow">in</span><span class="p">(</span><span class="s1">&#39;done&#39;</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="k">if</span> <span class="n">last_step</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;done&quot;</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="c1"># this means we don&#39;t need to handle setup since</span>
<span class="c1"># it already ran sucessfully once. -1 is the legacy</span>
<span class="c1"># value for existing databases.</span>
@ -242,15 +246,15 @@
<span class="c1"># setup sequence</span>
<span class="n">setup_sequence</span> <span class="o">=</span> <span class="p">{</span>
<span class="s1">&#39;create_objects&#39;</span><span class="p">:</span> <span class="n">create_objects</span><span class="p">,</span>
<span class="s1">&#39;at_initial_setup&#39;</span><span class="p">:</span> <span class="n">at_initial_setup</span><span class="p">,</span>
<span class="s1">&#39;collectstatic&#39;</span><span class="p">:</span> <span class="n">collectstatic</span><span class="p">,</span>
<span class="s1">&#39;done&#39;</span><span class="p">:</span> <span class="n">reset_server</span><span class="p">,</span>
<span class="s2">&quot;create_objects&quot;</span><span class="p">:</span> <span class="n">create_objects</span><span class="p">,</span>
<span class="s2">&quot;at_initial_setup&quot;</span><span class="p">:</span> <span class="n">at_initial_setup</span><span class="p">,</span>
<span class="s2">&quot;collectstatic&quot;</span><span class="p">:</span> <span class="n">collectstatic</span><span class="p">,</span>
<span class="s2">&quot;done&quot;</span><span class="p">:</span> <span class="n">reset_server</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># determine the sequence so we can skip ahead</span>
<span class="n">steps</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="n">setup_sequence</span><span class="p">)</span>
<span class="n">steps</span> <span class="o">=</span> <span class="n">steps</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">last_step</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">last_step</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="mi">0</span><span class="p">:]</span>
<span class="n">steps</span> <span class="o">=</span> <span class="n">steps</span><span class="p">[</span><span class="n">steps</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">last_step</span><span class="p">)</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">last_step</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="mi">0</span> <span class="p">:]</span>
<span class="c1"># step through queue from last completed function. Once completed,</span>
<span class="c1"># the &#39;done&#39; key should be set.</span>
@ -263,7 +267,7 @@
<span class="k">else</span><span class="p">:</span>
<span class="c1"># save the step</span>
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="s2">&quot;last_initial_setup_step&quot;</span><span class="p">,</span> <span class="n">stepname</span><span class="p">)</span>
<span class="k">if</span> <span class="n">stepname</span> <span class="o">==</span> <span class="s1">&#39;done&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">stepname</span> <span class="o">==</span> <span class="s2">&quot;done&quot;</span><span class="p">:</span>
<span class="c1"># always exit on &#39;done&#39;</span>
<span class="k">break</span></div>
</pre></div>

View file

@ -84,7 +84,6 @@
<span class="n">_STRIP_MXP</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">def</span> <span class="nf">_NA</span><span class="p">(</span><span class="n">o</span><span class="p">):</span>
<span class="k">return</span> <span class="s2">&quot;N/A&quot;</span>
@ -137,9 +136,7 @@
<span class="c1"># nick replacement</span>
<span class="n">puppet</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">puppet</span>
<span class="k">if</span> <span class="n">puppet</span><span class="p">:</span>
<span class="n">txt</span> <span class="o">=</span> <span class="n">puppet</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">nickreplace</span><span class="p">(</span>
<span class="n">txt</span><span class="p">,</span> <span class="n">categories</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;inputline&quot;</span><span class="p">),</span> <span class="n">include_account</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="n">txt</span> <span class="o">=</span> <span class="n">puppet</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">nickreplace</span><span class="p">(</span><span class="n">txt</span><span class="p">,</span> <span class="n">categories</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;inputline&quot;</span><span class="p">),</span> <span class="n">include_account</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">txt</span> <span class="o">=</span> <span class="n">session</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">nickreplace</span><span class="p">(</span>
<span class="n">txt</span><span class="p">,</span> <span class="n">categories</span><span class="o">=</span><span class="p">(</span><span class="s2">&quot;inputline&quot;</span><span class="p">),</span> <span class="n">include_account</span><span class="o">=</span><span class="kc">False</span>

View file

@ -89,12 +89,12 @@
<span class="n">AMP_MAXLEN</span> <span class="o">=</span> <span class="n">amp</span><span class="o">.</span><span class="n">MAX_VALUE_LENGTH</span> <span class="c1"># max allowed data length in AMP protocol (cannot be changed)</span>
<span class="c1"># amp internal</span>
<span class="n">ASK</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;_ask&#39;</span>
<span class="n">ANSWER</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;_answer&#39;</span>
<span class="n">ERROR</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;_error&#39;</span>
<span class="n">ERROR_CODE</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;_error_code&#39;</span>
<span class="n">ERROR_DESCRIPTION</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;_error_description&#39;</span>
<span class="n">UNKNOWN_ERROR_CODE</span> <span class="o">=</span> <span class="sa">b</span><span class="s1">&#39;UNKNOWN&#39;</span>
<span class="n">ASK</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;_ask&quot;</span>
<span class="n">ANSWER</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;_answer&quot;</span>
<span class="n">ERROR</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;_error&quot;</span>
<span class="n">ERROR_CODE</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;_error_code&quot;</span>
<span class="n">ERROR_DESCRIPTION</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;_error_description&quot;</span>
<span class="n">UNKNOWN_ERROR_CODE</span> <span class="o">=</span> <span class="sa">b</span><span class="s2">&quot;UNKNOWN&quot;</span>
<span class="c1"># buffers</span>
<span class="n">_SENDBATCH</span> <span class="o">=</span> <span class="n">defaultdict</span><span class="p">(</span><span class="nb">list</span><span class="p">)</span>
@ -364,6 +364,7 @@
<span class="sd"> add a specific log of the problem on the erroring side.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">def</span> <span class="nf">formatAnswer</span><span class="p">(</span><span class="n">answerBox</span><span class="p">):</span>
<span class="n">answerBox</span><span class="p">[</span><span class="n">ANSWER</span><span class="p">]</span> <span class="o">=</span> <span class="n">box</span><span class="p">[</span><span class="n">ASK</span><span class="p">]</span>
<span class="k">return</span> <span class="n">answerBox</span>
@ -392,6 +393,7 @@
<span class="n">errorBox</span><span class="p">[</span><span class="n">ERROR_DESCRIPTION</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
<span class="n">errorBox</span><span class="p">[</span><span class="n">ERROR_CODE</span><span class="p">]</span> <span class="o">=</span> <span class="n">code</span>
<span class="k">return</span> <span class="n">errorBox</span>
<span class="n">deferred</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dispatchCommand</span><span class="p">(</span><span class="n">box</span><span class="p">)</span>
<span class="k">if</span> <span class="n">ASK</span> <span class="ow">in</span> <span class="n">box</span><span class="p">:</span>
<span class="n">deferred</span><span class="o">.</span><span class="n">addCallbacks</span><span class="p">(</span><span class="n">formatAnswer</span><span class="p">,</span> <span class="n">formatError</span><span class="p">)</span>

View file

@ -286,7 +286,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">sendLine</span><span class="p">(</span><span class="s2">&quot;NAMES </span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="p">)</span></div>
<div class="viewcode-block" id="IRCBot.irc_RPL_NAMREPLY"><a class="viewcode-back" href="../../../../api/evennia.server.portal.irc.html#evennia.server.portal.irc.IRCBot.irc_RPL_NAMREPLY">[docs]</a> <span class="k">def</span> <span class="nf">irc_RPL_NAMREPLY</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prefix</span><span class="p">,</span> <span class="n">params</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;&quot;Handles IRC NAME request returns (nicklist)&quot;&quot;&quot;</span>
<span class="sd">&quot;&quot;&quot; &quot;Handles IRC NAME request returns (nicklist)&quot;&quot;&quot;</span>
<span class="n">channel</span> <span class="o">=</span> <span class="n">params</span><span class="p">[</span><span class="mi">2</span><span class="p">]</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">if</span> <span class="n">channel</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">channel</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span>
<span class="k">return</span>

View file

@ -400,8 +400,7 @@
<span class="k">for</span> <span class="n">port</span> <span class="ow">in</span> <span class="n">SSH_PORTS</span><span class="p">:</span>
<span class="n">pstring</span> <span class="o">=</span> <span class="s2">&quot;</span><span class="si">%s</span><span class="s2">:</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">ifacestr</span><span class="p">,</span> <span class="n">port</span><span class="p">)</span>
<span class="n">factory</span> <span class="o">=</span> <span class="n">ssh</span><span class="o">.</span><span class="n">makeFactory</span><span class="p">(</span>
<span class="p">{</span><span class="s2">&quot;protocolFactory&quot;</span><span class="p">:</span> <span class="n">_ssh_protocol</span><span class="p">,</span>
<span class="s2">&quot;protocolArgs&quot;</span><span class="p">:</span> <span class="p">(),</span> <span class="s2">&quot;sessions&quot;</span><span class="p">:</span> <span class="n">PORTAL_SESSIONS</span><span class="p">}</span>
<span class="p">{</span><span class="s2">&quot;protocolFactory&quot;</span><span class="p">:</span> <span class="n">_ssh_protocol</span><span class="p">,</span> <span class="s2">&quot;protocolArgs&quot;</span><span class="p">:</span> <span class="p">(),</span> <span class="s2">&quot;sessions&quot;</span><span class="p">:</span> <span class="n">PORTAL_SESSIONS</span><span class="p">}</span>
<span class="p">)</span>
<span class="n">factory</span><span class="o">.</span><span class="n">noisy</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">ssh_service</span> <span class="o">=</span> <span class="n">internet</span><span class="o">.</span><span class="n">TCPServer</span><span class="p">(</span><span class="n">port</span><span class="p">,</span> <span class="n">factory</span><span class="p">,</span> <span class="n">interface</span><span class="o">=</span><span class="n">interface</span><span class="p">)</span>

View file

@ -79,8 +79,9 @@
<span class="c1"># Portal-SessionHandler class</span>
<span class="c1"># -------------------------------------------------------------</span>
<span class="n">DOS_PROTECTION_MSG</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{servername}</span><span class="s2"> DoS protection is active.&quot;</span>
<span class="s2">&quot;You are queued to connect in </span><span class="si">{num}</span><span class="s2"> seconds ...&quot;</span><span class="p">)</span>
<span class="n">DOS_PROTECTION_MSG</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{servername}</span><span class="s2"> DoS protection is active.&quot;</span> <span class="s2">&quot;You are queued to connect in </span><span class="si">{num}</span><span class="s2"> seconds ...&quot;</span>
<span class="p">)</span>
<div class="viewcode-block" id="PortalSessionHandler"><a class="viewcode-back" href="../../../../api/evennia.server.portal.portalsessionhandler.html#evennia.server.portal.portalsessionhandler.PortalSessionHandler">[docs]</a><span class="k">class</span> <span class="nc">PortalSessionHandler</span><span class="p">(</span><span class="n">SessionHandler</span><span class="p">):</span>
@ -159,9 +160,12 @@
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">_CONNECTION_QUEUE</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">session</span><span class="o">.</span><span class="n">data_out</span><span class="p">(</span>
<span class="n">text</span><span class="o">=</span><span class="p">(</span>
<span class="p">(</span><span class="n">DOS_PROTECTION_MSG</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">servername</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVERNAME</span><span class="p">,</span>
<span class="n">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">_CONNECTION_QUEUE</span><span class="p">)</span> <span class="o">*</span> <span class="n">_MIN_TIME_BETWEEN_CONNECTS</span><span class="p">),),</span>
<span class="p">(</span>
<span class="n">DOS_PROTECTION_MSG</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">servername</span><span class="o">=</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVERNAME</span><span class="p">,</span>
<span class="n">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">_CONNECTION_QUEUE</span><span class="p">)</span> <span class="o">*</span> <span class="n">_MIN_TIME_BETWEEN_CONNECTS</span><span class="p">,</span>
<span class="p">),</span>
<span class="p">),</span>
<span class="p">{},</span>
<span class="p">)</span>
<span class="p">)</span>
@ -484,8 +488,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">portal</span><span class="o">.</span><span class="n">amp_protocol</span><span class="o">.</span><span class="n">send_MsgPortal2Server</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="c1"># eventual local echo (text input only)</span>
<span class="k">if</span> <span class="s1">&#39;text&#39;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">&#39;LOCALECHO&#39;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_out</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;text&#39;</span><span class="p">])</span></div>
<span class="k">if</span> <span class="s2">&quot;text&quot;</span> <span class="ow">in</span> <span class="n">kwargs</span> <span class="ow">and</span> <span class="n">session</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;LOCALECHO&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">data_out</span><span class="p">(</span><span class="n">session</span><span class="p">,</span> <span class="n">text</span><span class="o">=</span><span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;text&quot;</span><span class="p">])</span></div>
<div class="viewcode-block" id="PortalSessionHandler.data_out"><a class="viewcode-back" href="../../../../api/evennia.server.portal.portalsessionhandler.html#evennia.server.portal.portalsessionhandler.PortalSessionHandler.data_out">[docs]</a> <span class="k">def</span> <span class="nf">data_out</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -122,6 +122,7 @@
<span class="sd"> This is only to name this better in logs</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">noisy</span> <span class="o">=</span> <span class="kc">False</span>
<div class="viewcode-block" id="SSHServerFactory.logPrefix"><a class="viewcode-back" href="../../../../api/evennia.server.portal.ssh.html#evennia.server.portal.ssh.SSHServerFactory.logPrefix">[docs]</a> <span class="k">def</span> <span class="nf">logPrefix</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -74,8 +74,8 @@
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">to_bytes</span><span class="p">,</span> <span class="n">class_from_module</span>
<span class="n">_RE_N</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;\|n$&quot;</span><span class="p">)</span>
<span class="n">_RE_LEND</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">br</span><span class="s2">&quot;\n$|\r$|\r\n$|\r\x00$|&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
<span class="n">_RE_LINEBREAK</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">br</span><span class="s2">&quot;\n\r|\r\n|\n|\r&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
<span class="n">_RE_LEND</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rb</span><span class="s2">&quot;\n$|\r$|\r\n$|\r\x00$|&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
<span class="n">_RE_LINEBREAK</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rb</span><span class="s2">&quot;\n\r|\r\n|\n|\r&quot;</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
<span class="n">_RE_SCREENREADER_REGEX</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
<span class="sa">r</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">settings</span><span class="o">.</span><span class="n">SCREENREADER_REGEX_STRIP</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span> <span class="o">+</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span>
<span class="p">)</span>
@ -105,6 +105,7 @@
<span class="sd"> This exists only to name this better in logs.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">noisy</span> <span class="o">=</span> <span class="kc">False</span>
<div class="viewcode-block" id="TelnetServerFactory.logPrefix"><a class="viewcode-back" href="../../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.TelnetServerFactory.logPrefix">[docs]</a> <span class="k">def</span> <span class="nf">logPrefix</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -134,6 +135,7 @@
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">dataReceived</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">ValueError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Malformed telnet input: </span><span class="si">{</span><span class="n">err</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TelnetProtocol.connectionMade"><a class="viewcode-back" href="../../../../api/evennia.server.portal.telnet.html#evennia.server.portal.telnet.TelnetProtocol.connectionMade">[docs]</a> <span class="k">def</span> <span class="nf">connectionMade</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -500,8 +502,9 @@
<span class="n">prompt</span> <span class="o">=</span> <span class="n">mxp_parse</span><span class="p">(</span><span class="n">prompt</span><span class="p">)</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="n">to_bytes</span><span class="p">(</span><span class="n">prompt</span><span class="p">,</span> <span class="bp">self</span><span class="p">)</span>
<span class="n">prompt</span> <span class="o">=</span> <span class="n">prompt</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">IAC</span><span class="p">,</span> <span class="n">IAC</span> <span class="o">+</span> <span class="n">IAC</span><span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="sa">b</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">b</span><span class="s2">&quot;</span><span class="se">\r\n</span><span class="s2">&quot;</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">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;NOPROMPTGOAHEAD&quot;</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;NOGOAHEAD&quot;</span><span class="p">,</span> <span class="kc">True</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">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="s2">&quot;NOPROMPTGOAHEAD&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol_flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;NOGOAHEAD&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="p">):</span>
<span class="n">prompt</span> <span class="o">+=</span> <span class="n">IAC</span> <span class="o">+</span> <span class="n">GA</span>
<span class="bp">self</span><span class="o">.</span><span class="n">transport</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">mccp_compress</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prompt</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>

View file

@ -89,14 +89,14 @@
<span class="c1"># pre-compiled regexes</span>
<span class="c1"># returns 2-tuple</span>
<span class="n">msdp_regex_table</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
<span class="sa">br</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">\s*(\w*?)\s*</span><span class="si">%s</span><span class="s2">\s*</span><span class="si">%s</span><span class="s2">(.*?)</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">MSDP_VAR</span><span class="p">,</span> <span class="n">MSDP_VAL</span><span class="p">,</span> <span class="n">MSDP_TABLE_OPEN</span><span class="p">,</span> <span class="n">MSDP_TABLE_CLOSE</span><span class="p">)</span>
<span class="sa">rb</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">\s*(\w*?)\s*</span><span class="si">%s</span><span class="s2">\s*</span><span class="si">%s</span><span class="s2">(.*?)</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">MSDP_VAR</span><span class="p">,</span> <span class="n">MSDP_VAL</span><span class="p">,</span> <span class="n">MSDP_TABLE_OPEN</span><span class="p">,</span> <span class="n">MSDP_TABLE_CLOSE</span><span class="p">)</span>
<span class="p">)</span>
<span class="c1"># returns 2-tuple</span>
<span class="n">msdp_regex_array</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span>
<span class="sa">br</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">\s*(\w*?)\s*</span><span class="si">%s</span><span class="s2">\s*</span><span class="si">%s</span><span class="s2">(.*?)</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">MSDP_VAR</span><span class="p">,</span> <span class="n">MSDP_VAL</span><span class="p">,</span> <span class="n">MSDP_ARRAY_OPEN</span><span class="p">,</span> <span class="n">MSDP_ARRAY_CLOSE</span><span class="p">)</span>
<span class="sa">rb</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">\s*(\w*?)\s*</span><span class="si">%s</span><span class="s2">\s*</span><span class="si">%s</span><span class="s2">(.*?)</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">MSDP_VAR</span><span class="p">,</span> <span class="n">MSDP_VAL</span><span class="p">,</span> <span class="n">MSDP_ARRAY_OPEN</span><span class="p">,</span> <span class="n">MSDP_ARRAY_CLOSE</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">msdp_regex_var</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">br</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">MSDP_VAR</span><span class="p">)</span>
<span class="n">msdp_regex_val</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">br</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">MSDP_VAL</span><span class="p">)</span>
<span class="n">msdp_regex_var</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rb</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">MSDP_VAR</span><span class="p">)</span>
<span class="n">msdp_regex_val</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">rb</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">MSDP_VAL</span><span class="p">)</span>
<span class="n">EVENNIA_TO_GMCP</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;client_options&quot;</span><span class="p">:</span> <span class="s2">&quot;Core.Supports.Get&quot;</span><span class="p">,</span>

View file

@ -83,8 +83,10 @@
<span class="kn">from</span> <span class="nn">twisted.internet.task</span> <span class="kn">import</span> <span class="n">LoopingCall</span>
<span class="kn">import</span> <span class="nn">django</span>
<span class="n">django</span><span class="o">.</span><span class="n">setup</span><span class="p">()</span>
<span class="kn">import</span> <span class="nn">evennia</span> <span class="c1"># noqa</span>
<span class="n">evennia</span><span class="o">.</span><span class="n">_init</span><span class="p">()</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span> <span class="c1"># noqa</span>
@ -256,6 +258,7 @@
<span class="sd"> with the receive time on both ends.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;dummyrunner_echo_response&quot;</span>
<div class="viewcode-block" id="CmdDummyRunnerEchoResponse.func"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner.html#evennia.server.profiling.dummyrunner.CmdDummyRunnerEchoResponse.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -270,9 +273,11 @@
<span class="sd"> Dummyrunner injected cmdset.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="DummyRunnerCmdSet.at_cmdset_creation"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner.html#evennia.server.profiling.dummyrunner.DummyRunnerCmdSet.at_cmdset_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_cmdset_creation</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">add</span><span class="p">(</span><span class="n">CmdDummyRunnerEchoResponse</span><span class="p">())</span></div></div>
<span class="c1"># ------------------------------------------------------------</span>
<span class="c1"># Helper functions</span>
<span class="c1"># ------------------------------------------------------------</span>
@ -327,6 +332,7 @@
<span class="c1"># Client classes</span>
<span class="c1"># ------------------------------------------------------------</span>
<div class="viewcode-block" id="DummyClient"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner.html#evennia.server.profiling.dummyrunner.DummyClient">[docs]</a><span class="k">class</span> <span class="nc">DummyClient</span><span class="p">(</span><span class="n">telnet</span><span class="o">.</span><span class="n">StatefulTelnetProtocol</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Handles connection to a running Evennia server,</span>
@ -338,11 +344,13 @@
<div class="viewcode-block" id="DummyClient.report"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner.html#evennia.server.profiling.dummyrunner.DummyClient.report">[docs]</a> <span class="k">def</span> <span class="nf">report</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">clientkey</span><span class="p">):</span>
<span class="n">pad</span> <span class="o">=</span> <span class="s2">&quot; &quot;</span> <span class="o">*</span> <span class="p">(</span><span class="mi">25</span> <span class="o">-</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">))</span>
<span class="n">tim</span> <span class="o">=</span> <span class="nb">round</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="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">connection_timestamp</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">clientkey</span><span class="si">}{</span><span class="n">pad</span><span class="si">}</span><span class="se">\t</span><span class="s2">&quot;</span>
<span class="sa">f</span><span class="s2">&quot;conn: </span><span class="si">{</span><span class="n">NCONNECTED</span><span class="si">}</span><span class="s2"> -&gt; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;welcome screen: </span><span class="si">{</span><span class="n">NLOGIN_SCREEN</span><span class="si">}</span><span class="s2"> -&gt; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;authing: </span><span class="si">{</span><span class="n">NLOGGING_IN</span><span class="si">}</span><span class="s2"> -&gt; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;loggedin/tot: </span><span class="si">{</span><span class="n">NLOGGED_IN</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">NCLIENTS</span><span class="si">}</span><span class="s2"> (after </span><span class="si">{</span><span class="n">tim</span><span class="si">}</span><span class="s2">s)&quot;</span><span class="p">)</span></div>
<span class="nb">print</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;</span><span class="si">{</span><span class="n">text</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">clientkey</span><span class="si">}{</span><span class="n">pad</span><span class="si">}</span><span class="se">\t</span><span class="s2">&quot;</span>
<span class="sa">f</span><span class="s2">&quot;conn: </span><span class="si">{</span><span class="n">NCONNECTED</span><span class="si">}</span><span class="s2"> -&gt; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;welcome screen: </span><span class="si">{</span><span class="n">NLOGIN_SCREEN</span><span class="si">}</span><span class="s2"> -&gt; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;authing: </span><span class="si">{</span><span class="n">NLOGGING_IN</span><span class="si">}</span><span class="s2"> -&gt; &quot;</span>
<span class="sa">f</span><span class="s2">&quot;loggedin/tot: </span><span class="si">{</span><span class="n">NLOGGED_IN</span><span class="si">}</span><span class="s2">/</span><span class="si">{</span><span class="n">NCLIENTS</span><span class="si">}</span><span class="s2"> (after </span><span class="si">{</span><span class="n">tim</span><span class="si">}</span><span class="s2">s)&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DummyClient.connectionMade"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner.html#evennia.server.profiling.dummyrunner.DummyClient.connectionMade">[docs]</a> <span class="k">def</span> <span class="nf">connectionMade</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -384,7 +392,7 @@
<span class="c1"># (unclear why this would be - overload?)</span>
<span class="c1"># try sending a look to get something to start with</span>
<span class="bp">self</span><span class="o">.</span><span class="n">report</span><span class="p">(</span><span class="s2">&quot;?? retrying welcome screen&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sendLine</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="s2">&quot;look&quot;</span><span class="p">,</span> <span class="s1">&#39;utf-8&#39;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sendLine</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="s2">&quot;look&quot;</span><span class="p">,</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
<span class="c1"># make sure to check again later</span>
<span class="n">reactor</span><span class="o">.</span><span class="n">callLater</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_retry_welcome_screen</span><span class="p">)</span>
@ -405,8 +413,10 @@
<span class="n">TOTAL_LAG_MEASURES</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">TIME_ALL_LOGIN</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;.. running 30s average: ~</span><span class="si">{</span><span class="n">avgrate</span><span class="si">}</span><span class="s2"> actions/s &quot;</span>
<span class="sa">f</span><span class="s2">&quot;lag: </span><span class="si">{</span><span class="n">lag</span><span class="si">:</span><span class="s2">.2</span><span class="si">}</span><span class="s2">s (in: </span><span class="si">{</span><span class="n">lag_in</span><span class="si">:</span><span class="s2">.2</span><span class="si">}</span><span class="s2">s, out: </span><span class="si">{</span><span class="n">lag_out</span><span class="si">:</span><span class="s2">.2</span><span class="si">}</span><span class="s2">s)&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;.. running 30s average: ~</span><span class="si">{</span><span class="n">avgrate</span><span class="si">}</span><span class="s2"> actions/s &quot;</span>
<span class="sa">f</span><span class="s2">&quot;lag: </span><span class="si">{</span><span class="n">lag</span><span class="si">:</span><span class="s2">.2</span><span class="si">}</span><span class="s2">s (in: </span><span class="si">{</span><span class="n">lag_in</span><span class="si">:</span><span class="s2">.2</span><span class="si">}</span><span class="s2">s, out: </span><span class="si">{</span><span class="n">lag_out</span><span class="si">:</span><span class="s2">.2</span><span class="si">}</span><span class="s2">s)&quot;</span>
<span class="p">)</span>
<span class="n">reactor</span><span class="o">.</span><span class="n">callLater</span><span class="p">(</span><span class="mi">30</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_print_statistics</span><span class="p">)</span>
@ -435,7 +445,7 @@
<span class="c1"># negotiation)</span>
<span class="c1"># start client tick</span>
<span class="n">d</span> <span class="o">=</span> <span class="n">LoopingCall</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">step</span><span class="p">)</span>
<span class="n">df</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">TIMESTEP</span> <span class="o">*</span> <span class="mf">0.001</span><span class="p">),</span> <span class="nb">min</span><span class="p">(</span><span class="n">TIMESTEP</span><span class="o">/</span><span class="mi">10</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">))</span>
<span class="n">df</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="nb">abs</span><span class="p">(</span><span class="n">TIMESTEP</span> <span class="o">*</span> <span class="mf">0.001</span><span class="p">),</span> <span class="nb">min</span><span class="p">(</span><span class="n">TIMESTEP</span> <span class="o">/</span> <span class="mi">10</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">))</span>
<span class="c1"># dither next attempt with random time</span>
<span class="n">timestep</span> <span class="o">=</span> <span class="n">TIMESTEP</span> <span class="o">+</span> <span class="p">(</span><span class="o">-</span><span class="n">df</span> <span class="o">+</span> <span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span> <span class="o">*</span> <span class="n">df</span><span class="p">))</span>
<span class="n">d</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">timestep</span><span class="p">,</span> <span class="n">now</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">addErrback</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">error</span><span class="p">)</span>
@ -519,7 +529,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">_logging_out</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_logout</span><span class="p">(</span><span class="bp">self</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">report</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;-&gt; logout/disconnect (</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">istep</span><span class="si">}</span><span class="s2"> actions)&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sendLine</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s1">&#39;utf-8&#39;</span><span class="p">))</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">sendLine</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">))</span></div>
<div class="viewcode-block" id="DummyClient.step"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner.html#evennia.server.profiling.dummyrunner.DummyClient.step">[docs]</a> <span class="k">def</span> <span class="nf">step</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -563,7 +573,7 @@
<span class="c1"># the send as possible</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="n">cmd</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">timestamp</span><span class="o">=</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sendLine</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s1">&#39;utf-8&#39;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">sendLine</span><span class="p">(</span><span class="nb">bytes</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="s2">&quot;utf-8&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">action_started</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">istep</span> <span class="o">+=</span> <span class="mi">1</span>
@ -647,17 +657,19 @@
<span class="n">args</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse_args</span><span class="p">()</span>
<span class="n">nclients</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">args</span><span class="o">.</span><span class="n">nclients</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="nb">print</span><span class="p">(</span><span class="n">INFO_STARTING</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">nclients</span><span class="o">=</span><span class="n">nclients</span><span class="p">,</span>
<span class="n">port</span><span class="o">=</span><span class="n">TELNET_PORT</span><span class="p">,</span>
<span class="n">idmapper_cache_size</span><span class="o">=</span><span class="n">IDMAPPER_CACHE_MAXSIZE</span><span class="p">,</span>
<span class="n">timestep</span><span class="o">=</span><span class="n">TIMESTEP</span><span class="p">,</span>
<span class="n">rate</span><span class="o">=</span><span class="mi">1</span><span class="o">/</span><span class="n">TIMESTEP</span><span class="p">,</span>
<span class="n">chance_of_login</span><span class="o">=</span><span class="n">CHANCE_OF_LOGIN</span> <span class="o">*</span> <span class="mi">100</span><span class="p">,</span>
<span class="n">chance_of_action</span><span class="o">=</span><span class="n">CHANCE_OF_ACTION</span> <span class="o">*</span> <span class="mi">100</span><span class="p">,</span>
<span class="n">avg_rate</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">TIMESTEP</span><span class="p">)</span> <span class="o">*</span> <span class="n">CHANCE_OF_ACTION</span><span class="p">,</span>
<span class="n">avg_rate_total</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">TIMESTEP</span><span class="p">)</span> <span class="o">*</span> <span class="n">CHANCE_OF_ACTION</span> <span class="o">*</span> <span class="n">nclients</span>
<span class="p">))</span>
<span class="nb">print</span><span class="p">(</span>
<span class="n">INFO_STARTING</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">nclients</span><span class="o">=</span><span class="n">nclients</span><span class="p">,</span>
<span class="n">port</span><span class="o">=</span><span class="n">TELNET_PORT</span><span class="p">,</span>
<span class="n">idmapper_cache_size</span><span class="o">=</span><span class="n">IDMAPPER_CACHE_MAXSIZE</span><span class="p">,</span>
<span class="n">timestep</span><span class="o">=</span><span class="n">TIMESTEP</span><span class="p">,</span>
<span class="n">rate</span><span class="o">=</span><span class="mi">1</span> <span class="o">/</span> <span class="n">TIMESTEP</span><span class="p">,</span>
<span class="n">chance_of_login</span><span class="o">=</span><span class="n">CHANCE_OF_LOGIN</span> <span class="o">*</span> <span class="mi">100</span><span class="p">,</span>
<span class="n">chance_of_action</span><span class="o">=</span><span class="n">CHANCE_OF_ACTION</span> <span class="o">*</span> <span class="mi">100</span><span class="p">,</span>
<span class="n">avg_rate</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">TIMESTEP</span><span class="p">)</span> <span class="o">*</span> <span class="n">CHANCE_OF_ACTION</span><span class="p">,</span>
<span class="n">avg_rate_total</span><span class="o">=</span><span class="p">(</span><span class="mi">1</span> <span class="o">/</span> <span class="n">TIMESTEP</span><span class="p">)</span> <span class="o">*</span> <span class="n">CHANCE_OF_ACTION</span> <span class="o">*</span> <span class="n">nclients</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="c1"># run the dummyrunner</span>
<span class="n">TIME_START</span> <span class="o">=</span> <span class="n">t0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>

View file

@ -128,8 +128,9 @@
<span class="c1"># some convenient templates</span>
<span class="n">DUMMY_NAME</span> <span class="o">=</span> <span class="s2">&quot;Dummy_</span><span class="si">{gid}</span><span class="s2">&quot;</span>
<span class="n">DUMMY_PWD</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">digits</span><span class="p">)</span>
<span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;-</span><span class="si">{gid}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">DUMMY_PWD</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">ascii_letters</span> <span class="o">+</span> <span class="n">string</span><span class="o">.</span><span class="n">digits</span><span class="p">)</span> <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">20</span><span class="p">))</span> <span class="o">+</span> <span class="s2">&quot;-</span><span class="si">{gid}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="n">START_ROOM</span> <span class="o">=</span> <span class="s2">&quot;testing_room_start_</span><span class="si">{gid}</span><span class="s2">&quot;</span>
<span class="n">ROOM_TEMPLATE</span> <span class="o">=</span> <span class="s2">&quot;testing_room_</span><span class="si">%s</span><span class="s2">&quot;</span>
<span class="n">EXIT_TEMPLATE</span> <span class="o">=</span> <span class="s2">&quot;exit_</span><span class="si">%s</span><span class="s2">&quot;</span>
@ -143,6 +144,7 @@
<span class="c1"># login/logout</span>
<div class="viewcode-block" id="c_login"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner_settings.html#evennia.server.profiling.dummyrunner_settings.c_login">[docs]</a><span class="k">def</span> <span class="nf">c_login</span><span class="p">(</span><span class="n">client</span><span class="p">):</span>
<span class="s2">&quot;logins to the game&quot;</span>
<span class="c1"># we always use a new client name</span>
@ -173,10 +175,7 @@
<span class="s2">&quot;logins, don&#39;t dig its own room&quot;</span>
<span class="n">cname</span> <span class="o">=</span> <span class="n">DUMMY_NAME</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">gid</span><span class="o">=</span><span class="n">client</span><span class="o">.</span><span class="n">gid</span><span class="p">)</span>
<span class="n">cpwd</span> <span class="o">=</span> <span class="n">DUMMY_PWD</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">gid</span><span class="o">=</span><span class="n">client</span><span class="o">.</span><span class="n">gid</span><span class="p">)</span>
<span class="n">cmds</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;create </span><span class="si">{</span><span class="n">cname</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">cpwd</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span>
<span class="sa">f</span><span class="s2">&quot;connect </span><span class="si">{</span><span class="n">cname</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">cpwd</span><span class="si">}</span><span class="s2">&quot;</span>
<span class="p">)</span>
<span class="n">cmds</span> <span class="o">=</span> <span class="p">(</span><span class="sa">f</span><span class="s2">&quot;create </span><span class="si">{</span><span class="n">cname</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">cpwd</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">,</span> <span class="sa">f</span><span class="s2">&quot;connect </span><span class="si">{</span><span class="n">cname</span><span class="si">}</span><span class="s2"> </span><span class="si">{</span><span class="n">cpwd</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="n">cmds</span></div>
@ -216,7 +215,10 @@
<div class="viewcode-block" id="c_help"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.dummyrunner_settings.html#evennia.server.profiling.dummyrunner_settings.c_help">[docs]</a><span class="k">def</span> <span class="nf">c_help</span><span class="p">(</span><span class="n">client</span><span class="p">):</span>
<span class="s2">&quot;reads help files&quot;</span>
<span class="n">cmds</span> <span class="o">=</span> <span class="p">(</span><span class="s2">&quot;help&quot;</span><span class="p">,</span> <span class="s2">&quot;dummyrunner_echo_response&quot;</span><span class="p">,)</span>
<span class="n">cmds</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;help&quot;</span><span class="p">,</span>
<span class="s2">&quot;dummyrunner_echo_response&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">cmds</span></div>
@ -304,21 +306,16 @@
<span class="n">PROFILE</span> <span class="o">=</span> <span class="s2">&quot;looker&quot;</span>
<span class="k">if</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s1">&#39;idler&#39;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s2">&quot;idler&quot;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">c_login</span><span class="p">,</span>
<span class="n">c_logout</span><span class="p">,</span>
<span class="p">(</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">c_idles</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s1">&#39;looker&#39;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">c_login</span><span class="p">,</span>
<span class="n">c_logout</span><span class="p">,</span>
<span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">c_looks</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s1">&#39;normal_player&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s2">&quot;looker&quot;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">c_login</span><span class="p">,</span> <span class="n">c_logout</span><span class="p">,</span> <span class="p">(</span><span class="mf">0.8</span><span class="p">,</span> <span class="n">c_looks</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">))</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s2">&quot;normal_player&quot;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">c_login</span><span class="p">,</span>
<span class="n">c_logout</span><span class="p">,</span>
@ -327,9 +324,9 @@
<span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">c_help</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.3</span><span class="p">,</span> <span class="n">c_moves</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.05</span><span class="p">,</span> <span class="n">c_socialize</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">)</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s1">&#39;normal_builder&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s2">&quot;normal_builder&quot;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">c_login</span><span class="p">,</span>
<span class="n">c_logout</span><span class="p">,</span>
@ -339,9 +336,9 @@
<span class="p">(</span><span class="mf">0.01</span><span class="p">,</span> <span class="n">c_digs</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.01</span><span class="p">,</span> <span class="n">c_creates_obj</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">c_moves</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">)</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s1">&#39;heavy_builder&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s2">&quot;heavy_builder&quot;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">c_login</span><span class="p">,</span>
<span class="n">c_logout</span><span class="p">,</span>
@ -351,9 +348,9 @@
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_digs</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_creates_obj</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">c_moves</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">)</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s1">&#39;socializing_builder&#39;</span><span class="p">:</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s2">&quot;socializing_builder&quot;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">c_login</span><span class="p">,</span>
<span class="n">c_logout</span><span class="p">,</span>
@ -363,19 +360,15 @@
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_creates_obj</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.2</span><span class="p">,</span> <span class="n">c_digs</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.3</span><span class="p">,</span> <span class="n">c_moves</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s1">&#39;only_digger&#39;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">c_login</span><span class="p">,</span>
<span class="n">c_logout</span><span class="p">,</span>
<span class="p">(</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">c_digs</span><span class="p">),</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">)</span>
<span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">),</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">PROFILE</span> <span class="o">==</span> <span class="s2">&quot;only_digger&quot;</span><span class="p">:</span>
<span class="n">ACTIONS</span> <span class="o">=</span> <span class="p">(</span><span class="n">c_login</span><span class="p">,</span> <span class="n">c_logout</span><span class="p">,</span> <span class="p">(</span><span class="mf">0.9</span><span class="p">,</span> <span class="n">c_digs</span><span class="p">),</span> <span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="n">c_measure_lag</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;No dummyrunner ACTION profile defined.&quot;</span><span class="p">)</span>
<span class="kn">import</span> <span class="nn">sys</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
</pre></div>

View file

@ -73,7 +73,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">counter</span> <span class="o">=</span> <span class="n">Mock</span><span class="p">(</span><span class="n">return_value</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">gid</span> <span class="o">=</span> <span class="s2">&quot;20171025161153-1&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Dummy_</span><span class="si">%s</span><span class="s2">&quot;</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">gid</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="n">Something</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">password</span> <span class="o">=</span> <span class="p">(</span><span class="n">Something</span><span class="p">,)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">start_room</span> <span class="o">=</span> <span class="s2">&quot;testing_room_start_</span><span class="si">%s</span><span class="s2">&quot;</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">gid</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">objs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">exits</span> <span class="o">=</span> <span class="p">[]</span></div>
@ -87,12 +87,12 @@
<span class="n">c_login</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="p">),</span>
<span class="p">(</span>
<span class="n">Something</span><span class="p">,</span> <span class="c1"># create</span>
<span class="s1">&#39;yes&#39;</span><span class="p">,</span> <span class="c1"># confirm creation</span>
<span class="s2">&quot;yes&quot;</span><span class="p">,</span> <span class="c1"># confirm creation</span>
<span class="n">Something</span><span class="p">,</span> <span class="c1"># connect</span>
<span class="s2">&quot;dig </span><span class="si">%s</span><span class="s2">&quot;</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">start_room</span><span class="p">,</span>
<span class="s2">&quot;teleport </span><span class="si">%s</span><span class="s2">&quot;</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">start_room</span><span class="p">,</span>
<span class="s2">&quot;py from evennia.server.profiling.dummyrunner import DummyRunnerCmdSet;&quot;</span>
<span class="s2">&quot;self.cmdset.add(DummyRunnerCmdSet, persistent=False)&quot;</span>
<span class="s2">&quot;self.cmdset.add(DummyRunnerCmdSet, persistent=False)&quot;</span><span class="p">,</span>
<span class="p">),</span>
<span class="p">)</span></div>
@ -128,7 +128,7 @@
<span class="p">)</span></div>
<div class="viewcode-block" id="TestDummyrunnerSettings.test_c_digs"><a class="viewcode-back" href="../../../../api/evennia.server.profiling.tests.html#evennia.server.profiling.tests.TestDummyrunnerSettings.test_c_digs">[docs]</a> <span class="k">def</span> <span class="nf">test_c_digs</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">assertEqual</span><span class="p">(</span><span class="n">c_digs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;dig/tel testing_room_1 = exit_1, exit_1&quot;</span><span class="p">,</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">c_digs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="p">),</span> <span class="p">(</span><span class="s2">&quot;dig/tel testing_room_1 = exit_1, exit_1&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">client</span><span class="o">.</span><span class="n">exits</span><span class="p">,</span> <span class="p">[</span><span class="s2">&quot;exit_1&quot;</span><span class="p">,</span> <span class="s2">&quot;exit_1&quot;</span><span class="p">])</span>
<span class="bp">self</span><span class="o">.</span><span class="n">clear_client_lists</span><span class="p">()</span></div>

View file

@ -326,9 +326,12 @@
<span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">tup</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">settings_compare</span><span class="p">)</span> <span class="k">if</span> <span class="n">i</span> <span class="ow">in</span> <span class="n">mismatches</span>
<span class="p">):</span>
<span class="c1"># update the database</span>
<span class="n">INFO_DICT</span><span class="p">[</span><span class="s2">&quot;info&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot; </span><span class="si">%s</span><span class="s2">:</span><span class="se">\n</span><span class="s2"> &#39;</span><span class="si">%s</span><span class="s2">&#39; changed to &#39;</span><span class="si">%s</span><span class="s2">&#39;. Updating unchanged entries in database ...&quot;</span>
<span class="o">%</span> <span class="p">(</span><span class="n">settings_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">prev</span><span class="p">,</span> <span class="n">curr</span><span class="p">)</span>
<span class="n">INFO_DICT</span><span class="p">[</span>
<span class="s2">&quot;info&quot;</span>
<span class="p">]</span> <span class="o">=</span> <span class="s2">&quot; </span><span class="si">%s</span><span class="s2">:</span><span class="se">\n</span><span class="s2"> &#39;</span><span class="si">%s</span><span class="s2">&#39; changed to &#39;</span><span class="si">%s</span><span class="s2">&#39;. Updating unchanged entries in database ...&quot;</span> <span class="o">%</span> <span class="p">(</span>
<span class="n">settings_names</span><span class="p">[</span><span class="n">i</span><span class="p">],</span>
<span class="n">prev</span><span class="p">,</span>
<span class="n">curr</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">i</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_cmdset_storage__exact</span><span class="o">=</span><span class="n">prev</span><span class="p">)</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
@ -386,7 +389,7 @@
<span class="c1"># i.e. this is an empty DB that needs populating.</span>
<span class="n">INFO_DICT</span><span class="p">[</span><span class="s2">&quot;info&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="s2">&quot; Server started for the first time. Setting defaults.&quot;</span>
<span class="n">initial_setup</span><span class="o">.</span><span class="n">handle_setup</span><span class="p">()</span>
<span class="k">elif</span> <span class="n">last_initial_setup_step</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;done&#39;</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="k">elif</span> <span class="n">last_initial_setup_step</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">&quot;done&quot;</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">):</span>
<span class="c1"># last step crashed, so we weill resume from this step.</span>
<span class="c1"># modules and setup will resume from this step, retrying</span>
<span class="c1"># the last failed module. When all are finished, the step</span>
@ -437,7 +440,7 @@
<span class="sd"> mode (str): One of shutdown, reload or reset</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span>
<span class="kn">from</span> <span class="nn">evennia.typeclasses.models</span> <span class="kn">import</span> <span class="n">TypedObject</span>
<span class="c1"># start server time and maintenance task</span>
<span class="bp">self</span><span class="o">.</span><span class="n">maintenance_task</span> <span class="o">=</span> <span class="n">LoopingCall</span><span class="p">(</span><span class="n">_server_maintenance</span><span class="p">)</span>
@ -446,8 +449,11 @@
<span class="c1"># update eventual changed defaults</span>
<span class="bp">self</span><span class="o">.</span><span class="n">update_defaults</span><span class="p">()</span>
<span class="p">[</span><span class="n">o</span><span class="o">.</span><span class="n">at_init</span><span class="p">()</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">get_all_cached_instances</span><span class="p">()]</span>
<span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">at_init</span><span class="p">()</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">AccountDB</span><span class="o">.</span><span class="n">get_all_cached_instances</span><span class="p">()]</span>
<span class="c1"># run at_init() on all cached entities on reconnect</span>
<span class="p">[</span>
<span class="p">[</span><span class="n">entity</span><span class="o">.</span><span class="n">at_init</span><span class="p">()</span> <span class="k">for</span> <span class="n">entity</span> <span class="ow">in</span> <span class="n">typeclass_db</span><span class="o">.</span><span class="n">get_all_cached_instances</span><span class="p">()]</span>
<span class="k">for</span> <span class="n">typeclass_db</span> <span class="ow">in</span> <span class="n">TypedObject</span><span class="o">.</span><span class="n">__subclasses__</span><span class="p">()</span>
<span class="p">]</span>
<span class="c1"># call correct server hook based on start file value</span>
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;reload&quot;</span><span class="p">:</span>
@ -458,6 +464,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">at_server_cold_start</span><span class="p">()</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_msg</span><span class="p">(</span><span class="s2">&quot;Evennia Server successfully restarted in &#39;reset&#39; mode.&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;shutdown&quot;</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_server_cold_start</span><span class="p">()</span>
<span class="c1"># clear eventual lingering session storages</span>
<span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">clear_all_sessids</span><span class="p">()</span>

View file

@ -227,8 +227,10 @@
<span class="k">global</span> <span class="n">_FUNCPARSER</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">_FUNCPARSER</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span> <span class="kn">import</span> <span class="n">FuncParser</span>
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULES</span><span class="p">,</span>
<span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span>
<span class="n">settings</span><span class="o">.</span><span class="n">FUNCPARSER_OUTGOING_MESSAGES_MODULES</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span>
<span class="n">options</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;options&quot;</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span> <span class="ow">or</span> <span class="p">{}</span>
<span class="n">raw</span> <span class="o">=</span> <span class="n">options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;raw&quot;</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
@ -264,8 +266,11 @@
<span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">)):</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">_utf8</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">if</span> <span class="p">(</span><span class="n">_FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED</span>
<span class="ow">and</span> <span class="ow">not</span> <span class="n">raw</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ServerSessionHandler</span><span class="p">)):</span>
<span class="k">if</span> <span class="p">(</span>
<span class="n">_FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED</span>
<span class="ow">and</span> <span class="ow">not</span> <span class="n">raw</span>
<span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ServerSessionHandler</span><span class="p">)</span>
<span class="p">):</span>
<span class="c1"># only apply funcparser on the outgoing path (sessionhandler-&gt;)</span>
<span class="c1"># data = parse_inlinefunc(data, strip=strip_inlinefunc, session=session)</span>
<span class="n">data</span> <span class="o">=</span> <span class="n">_FUNCPARSER</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="n">strip</span><span class="o">=</span><span class="n">strip_inlinefunc</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="n">session</span><span class="p">)</span>
@ -680,8 +685,7 @@
<span class="c1"># mean connecting from the same host would not catch duplicates</span>
<span class="n">sid</span> <span class="o">=</span> <span class="nb">id</span><span class="p">(</span><span class="n">curr_session</span><span class="p">)</span>
<span class="n">doublet_sessions</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">sess</span> <span class="k">for</span> <span class="n">sess</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">()</span>
<span class="k">if</span> <span class="n">sess</span><span class="o">.</span><span class="n">logged_in</span> <span class="ow">and</span> <span class="n">sess</span><span class="o">.</span><span class="n">uid</span> <span class="o">==</span> <span class="n">uid</span> <span class="ow">and</span> <span class="nb">id</span><span class="p">(</span><span class="n">sess</span><span class="p">)</span> <span class="o">!=</span> <span class="n">sid</span>
<span class="n">sess</span> <span class="k">for</span> <span class="n">sess</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">values</span><span class="p">()</span> <span class="k">if</span> <span class="n">sess</span><span class="o">.</span><span class="n">logged_in</span> <span class="ow">and</span> <span class="n">sess</span><span class="o">.</span><span class="n">uid</span> <span class="o">==</span> <span class="n">uid</span> <span class="ow">and</span> <span class="nb">id</span><span class="p">(</span><span class="n">sess</span><span class="p">)</span> <span class="o">!=</span> <span class="n">sid</span>
<span class="p">]</span>
<span class="k">for</span> <span class="n">session</span> <span class="ow">in</span> <span class="n">doublet_sessions</span><span class="p">:</span>

View file

@ -77,14 +77,14 @@
<span class="sd"> the throttle is imposed!</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">caches</span><span class="p">[</span><span class="s1">&#39;throttle&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">caches</span><span class="p">[</span><span class="s2">&quot;throttle&quot;</span><span class="p">]</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span><span class="s2">&quot;Throttle: Errors encountered; using default cache.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">caches</span><span class="p">[</span><span class="s1">&#39;default&#39;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span> <span class="o">=</span> <span class="n">caches</span><span class="p">[</span><span class="s2">&quot;default&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</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="s1">&#39;name&#39;</span><span class="p">,</span> <span class="s1">&#39;undefined-throttle&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">name</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;name&quot;</span><span class="p">,</span> <span class="s2">&quot;undefined-throttle&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">limit</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;limit&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cache_size</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="s1">&#39;cache_size&#39;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">limit</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">cache_size</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;cache_size&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">limit</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">timeout</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;timeout&quot;</span><span class="p">,</span> <span class="mi">5</span> <span class="o">*</span> <span class="mi">60</span><span class="p">)</span></div>
<div class="viewcode-block" id="Throttle.get_cache_key"><a class="viewcode-back" href="../../../api/evennia.server.throttle.html#evennia.server.throttle.Throttle.get_cache_key">[docs]</a> <span class="k">def</span> <span class="nf">get_cache_key</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>
@ -93,7 +93,7 @@
<span class="sd"> collisions in the same namespace.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="s1">&#39;-&#39;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">))</span></div>
<span class="k">return</span> <span class="s2">&quot;-&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">))</span></div>
<div class="viewcode-block" id="Throttle.touch"><a class="viewcode-back" href="../../../api/evennia.server.throttle.html#evennia.server.throttle.Throttle.touch">[docs]</a> <span class="k">def</span> <span class="nf">touch</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -127,7 +127,7 @@
<span class="n">cache_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">ip</span><span class="p">))</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">cache_key</span><span class="p">,</span> <span class="n">deque</span><span class="p">(</span><span class="n">maxlen</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">cache_size</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">keys_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="s1">&#39;keys&#39;</span><span class="p">)</span>
<span class="n">keys_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="s2">&quot;keys&quot;</span><span class="p">)</span>
<span class="n">keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get_or_set</span><span class="p">(</span><span class="n">keys_key</span><span class="p">,</span> <span class="nb">set</span><span class="p">(),</span> <span class="bp">self</span><span class="o">.</span><span class="n">timeout</span><span class="p">)</span>
<span class="n">data</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get_many</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">))</span>
@ -203,7 +203,7 @@
<span class="sd"> IP, not the cache-prefixed key.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">keys_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="s1">&#39;keys&#39;</span><span class="p">)</span>
<span class="n">keys_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="s2">&quot;keys&quot;</span><span class="p">)</span>
<span class="n">keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">keys_key</span><span class="p">,</span> <span class="nb">set</span><span class="p">())</span>
<span class="n">keys</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">keys_key</span><span class="p">,</span> <span class="n">keys</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">timeout</span><span class="p">)</span>
@ -217,7 +217,7 @@
<span class="sd"> ip(str): IP to remove from list of keys.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">keys_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="s1">&#39;keys&#39;</span><span class="p">)</span>
<span class="n">keys_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_cache_key</span><span class="p">(</span><span class="s2">&quot;keys&quot;</span><span class="p">)</span>
<span class="n">keys</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">storage</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">keys_key</span><span class="p">,</span> <span class="nb">set</span><span class="p">())</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">keys</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">ip</span><span class="p">)</span>

View file

@ -215,10 +215,10 @@
<span class="sd"> foo = AttributeProperty(default=&quot;Bar&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">attrhandler_name</span> <span class="o">=</span> <span class="s2">&quot;attributes&quot;</span>
<div class="viewcode-block" id="AttributeProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</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="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">strattr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">lockstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="n">autocreate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<div class="viewcode-block" id="AttributeProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</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="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">strattr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">lockstring</span><span class="o">=</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Initialize an Attribute as a property descriptor.</span>
@ -260,13 +260,12 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">value</span> <span class="o">=</span> <span class="p">(</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span>
<span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">)</span>
<span class="n">value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">,</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">:</span>
@ -283,12 +282,13 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="p">(</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span>
<span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">value</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">lockstring</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lockstring</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">)</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">value</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
<span class="n">lockstring</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lockstring</span><span class="p">,</span>
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">def</span> <span class="fm">__delete__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">):</span>
@ -296,11 +296,7 @@
<span class="sd"> Called when running `del` on the field. Will remove/clear the Attribute.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="p">(</span>
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span>
<span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">)</span>
<span class="p">)</span></div>
<span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">))</span></div>
<div class="viewcode-block" id="NAttributeProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.NAttributeProperty">[docs]</a><span class="k">class</span> <span class="nc">NAttributeProperty</span><span class="p">(</span><span class="n">AttributeProperty</span><span class="p">):</span>
@ -315,6 +311,7 @@
<span class="sd"> foo = NAttributeProperty(default=&quot;Bar&quot;)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">attrhandler_name</span> <span class="o">=</span> <span class="s2">&quot;nattributes&quot;</span></div>
@ -399,7 +396,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">update_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;db_lock_storage&quot;</span><span class="p">])</span>
<span class="k">def</span> <span class="nf">__lock_storage_del</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">db_lock_storage</span> <span class="o">=</span> <span class="s1">&#39;&#39;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">db_lock_storage</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">save</span><span class="p">(</span><span class="n">update_fields</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;db_lock_storage&quot;</span><span class="p">])</span>
<span class="n">lock_storage</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">__lock_storage_get</span><span class="p">,</span> <span class="n">__lock_storage_set</span><span class="p">,</span> <span class="n">__lock_storage_del</span><span class="p">)</span>
@ -429,6 +426,7 @@
<span class="sd">&quot;&quot;&quot;Deleter. Allows for del attr.value. This removes the entire attribute.&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
<span class="c1">#</span>
<span class="c1"># Handlers making use of the Attribute model</span>
<span class="c1">#</span>
@ -1507,15 +1505,14 @@
<span class="c1"># groups. we need to split out any | - separated parts so we can</span>
<span class="c1"># attach the line-break/ending extras all regexes require.</span>
<span class="n">pattern_regex_string</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;|&quot;</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
<span class="n">or_part</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">&quot;(?:[\n\r]*?)\Z&quot;</span>
<span class="k">for</span> <span class="n">or_part</span> <span class="ow">in</span> <span class="n">_RE_OR</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">pattern</span><span class="p">))</span>
<span class="n">or_part</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">&quot;(?:[\n\r]*?)\Z&quot;</span> <span class="k">for</span> <span class="n">or_part</span> <span class="ow">in</span> <span class="n">_RE_OR</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># Shell pattern syntax - convert $N to argN groups</span>
<span class="c1"># for the shell pattern we make sure we have matching $N on both sides</span>
<span class="n">pattern_args</span> <span class="o">=</span> <span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">_RE_NICK_RAW_ARG</span><span class="o">.</span><span class="n">finditer</span><span class="p">(</span><span class="n">pattern</span><span class="p">)]</span>
<span class="n">replacement_args</span> <span class="o">=</span> <span class="p">[</span>
<span class="k">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">_RE_NICK_RAW_ARG</span><span class="o">.</span><span class="n">finditer</span><span class="p">(</span><span class="n">replacement</span><span class="p">)]</span>
<span class="n">replacement_args</span> <span class="o">=</span> <span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">_RE_NICK_RAW_ARG</span><span class="o">.</span><span class="n">finditer</span><span class="p">(</span><span class="n">replacement</span><span class="p">)]</span>
<span class="k">if</span> <span class="nb">set</span><span class="p">(</span><span class="n">pattern_args</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">set</span><span class="p">(</span><span class="n">replacement_args</span><span class="p">):</span>
<span class="c1"># We don&#39;t have the same amount of argN/$N tags in input/output.</span>
<span class="k">raise</span> <span class="n">NickTemplateInvalid</span><span class="p">(</span><span class="s2">&quot;Nicks: Both in/out-templates must contain the same $N tags.&quot;</span><span class="p">)</span>
@ -1524,7 +1521,8 @@
<span class="n">pattern_regex_string</span> <span class="o">=</span> <span class="n">fnmatch</span><span class="o">.</span><span class="n">translate</span><span class="p">(</span><span class="n">pattern</span><span class="p">)</span>
<span class="n">pattern_regex_string</span> <span class="o">=</span> <span class="n">_RE_NICK_SPACE</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="se">\\</span><span class="s2">s+&quot;</span><span class="p">,</span> <span class="n">pattern_regex_string</span><span class="p">)</span>
<span class="n">pattern_regex_string</span> <span class="o">=</span> <span class="n">_RE_NICK_ARG</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span>
<span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="s2">&quot;(?P&lt;arg</span><span class="si">%s</span><span class="s2">&gt;.+?)&quot;</span> <span class="o">%</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="n">pattern_regex_string</span><span class="p">)</span>
<span class="k">lambda</span> <span class="n">m</span><span class="p">:</span> <span class="s2">&quot;(?P&lt;arg</span><span class="si">%s</span><span class="s2">&gt;.+?)&quot;</span> <span class="o">%</span> <span class="n">m</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">2</span><span class="p">),</span> <span class="n">pattern_regex_string</span>
<span class="p">)</span>
<span class="c1"># we must account for a possible line break coming over the wire</span>
<span class="n">pattern_regex_string</span> <span class="o">=</span> <span class="n">pattern_regex_string</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">&quot;(?:[\n\r]*?)\Z&quot;</span>
@ -1551,8 +1549,9 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">match</span> <span class="o">=</span> <span class="n">template_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">if</span> <span class="n">match</span><span class="p">:</span>
<span class="n">matchdict</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">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">&quot;&quot;</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">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="n">matchdict</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">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">&quot;&quot;</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">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">}</span>
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="n">outtemplate</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">matchdict</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="n">string</span></div>
@ -1655,9 +1654,11 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">nick_regex</span><span class="p">,</span> <span class="n">nick_template</span> <span class="o">=</span> <span class="n">initialize_nick_templates</span><span class="p">(</span>
<span class="n">pattern</span><span class="p">,</span> <span class="n">replacement</span><span class="p">,</span> <span class="n">pattern_is_regex</span><span class="o">=</span><span class="n">pattern_is_regex</span><span class="p">)</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">pattern</span><span class="p">,</span> <span class="p">(</span><span class="n">nick_regex</span><span class="p">,</span> <span class="n">nick_template</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">replacement</span><span class="p">),</span>
<span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="n">pattern</span><span class="p">,</span> <span class="n">replacement</span><span class="p">,</span> <span class="n">pattern_is_regex</span><span class="o">=</span><span class="n">pattern_is_regex</span>
<span class="p">)</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="n">pattern</span><span class="p">,</span> <span class="p">(</span><span class="n">nick_regex</span><span class="p">,</span> <span class="n">nick_template</span><span class="p">,</span> <span class="n">pattern</span><span class="p">,</span> <span class="n">replacement</span><span class="p">),</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="NickHandler.remove"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.NickHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</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">category</span><span class="o">=</span><span class="s2">&quot;inputline&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -556,7 +556,8 @@
<span class="n">typeclass</span><span class="o">=</span><span class="n">F</span><span class="p">(</span><span class="s2">&quot;db_typeclass_path&quot;</span><span class="p">),</span>
<span class="c1"># Calculate this class&#39; percentage of total composition</span>
<span class="n">percent</span><span class="o">=</span><span class="n">ExpressionWrapper</span><span class="p">(</span>
<span class="p">((</span><span class="n">F</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">count</span><span class="p">()))</span> <span class="o">*</span> <span class="mf">100.0</span><span class="p">),</span> <span class="n">output_field</span><span class="o">=</span><span class="n">FloatField</span><span class="p">(),</span>
<span class="p">((</span><span class="n">F</span><span class="p">(</span><span class="s2">&quot;count&quot;</span><span class="p">)</span> <span class="o">/</span> <span class="nb">float</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">count</span><span class="p">()))</span> <span class="o">*</span> <span class="mf">100.0</span><span class="p">),</span>
<span class="n">output_field</span><span class="o">=</span><span class="n">FloatField</span><span class="p">(),</span>
<span class="p">),</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">values</span><span class="p">(</span><span class="s2">&quot;typeclass&quot;</span><span class="p">,</span> <span class="s2">&quot;count&quot;</span><span class="p">,</span> <span class="s2">&quot;percent&quot;</span><span class="p">)</span>
@ -792,11 +793,7 @@
<span class="sd"> Returns:</span>
<span class="sd"> Annotated queryset.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span>
<span class="nb">super</span><span class="p">()</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
<span class="o">.</span><span class="n">annotate</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="p">)</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">annotate</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="k">def</span> <span class="nf">values</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="sd">&quot;&quot;&quot;</span>
@ -808,11 +805,7 @@
<span class="sd"> Returns:</span>
<span class="sd"> Queryset of values dictionaries, just filtered by typeclass first.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span>
<span class="nb">super</span><span class="p">()</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
<span class="o">.</span><span class="n">values</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="p">)</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">values</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="k">def</span> <span class="nf">values_list</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="sd">&quot;&quot;&quot;</span>
@ -824,11 +817,7 @@
<span class="sd"> Returns:</span>
<span class="sd"> Queryset of value_list tuples, just filtered by typeclass first.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="p">(</span>
<span class="nb">super</span><span class="p">()</span>
<span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
<span class="o">.</span><span class="n">values_list</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="p">)</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_typeclass_path</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">path</span><span class="p">)</span><span class="o">.</span><span class="n">values_list</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="k">def</span> <span class="nf">_get_subclasses</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">cls</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -255,7 +255,7 @@
<span class="n">max_length</span><span class="o">=</span><span class="mi">255</span><span class="p">,</span>
<span class="n">null</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;this defines what &#39;type&#39; of entity this is. This variable holds &quot;</span>
<span class="s2">&quot;a Python path to a module with a valid Evennia Typeclass.&quot;</span><span class="p">,</span>
<span class="s2">&quot;a Python path to a module with a valid Evennia Typeclass.&quot;</span><span class="p">,</span>
<span class="n">db_index</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Creation date. This is not changed once the object is created.</span>
@ -265,19 +265,19 @@
<span class="s2">&quot;locks&quot;</span><span class="p">,</span>
<span class="n">blank</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;locks limit access to an entity. A lock is defined as a &#39;lock string&#39; &quot;</span>
<span class="s2">&quot;on the form &#39;type:lockfunctions&#39;, defining what functionality is locked and &quot;</span>
<span class="s2">&quot;how to determine access. Not defining a lock means no access is granted.&quot;</span><span class="p">,</span>
<span class="s2">&quot;on the form &#39;type:lockfunctions&#39;, defining what functionality is locked and &quot;</span>
<span class="s2">&quot;how to determine access. Not defining a lock means no access is granted.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># many2many relationships</span>
<span class="n">db_attributes</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
<span class="n">Attribute</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;attributes on this object. An attribute can hold any pickle-able &quot;</span>
<span class="s2">&quot;python object (see docs for special cases).&quot;</span><span class="p">,</span>
<span class="s2">&quot;python object (see docs for special cases).&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="n">db_tags</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ManyToManyField</span><span class="p">(</span>
<span class="n">Tag</span><span class="p">,</span>
<span class="n">help_text</span><span class="o">=</span><span class="s2">&quot;tags on this object. Tags are simple string markers to identify, &quot;</span>
<span class="s2">&quot;group and alias objects.&quot;</span><span class="p">,</span>
<span class="s2">&quot;group and alias objects.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># Database manager</span>
@ -527,6 +527,14 @@
<span class="c1"># Object manipulation methods</span>
<span class="c1">#</span>
<div class="viewcode-block" id="TypedObject.at_init"><a class="viewcode-back" href="../../../api/evennia.typeclasses.models.html#evennia.typeclasses.models.TypedObject.at_init">[docs]</a> <span class="k">def</span> <span class="nf">at_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Called when this object is loaded into cache. This is more reliable</span>
<span class="sd"> than to override `__init__`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="TypedObject.search"><a class="viewcode-back" href="../../../api/evennia.typeclasses.models.html#evennia.typeclasses.models.TypedObject.search">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">search</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -482,7 +482,7 @@
<span class="sd"> Strip explicitly ansi line breaks and tabs.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsafe_tokens</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s1">&#39;&#39;</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span></div>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">unsafe_tokens</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">string</span><span class="p">)</span></div>
<div class="viewcode-block" id="ANSIParser.parse_ansi"><a class="viewcode-back" href="../../../api/evennia.utils.ansi.html#evennia.utils.ansi.ANSIParser.parse_ansi">[docs]</a> <span class="k">def</span> <span class="nf">parse_ansi</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">xterm256</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">mxp</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -1040,10 +1040,10 @@
<span class="k">return</span> <span class="n">ANSIString</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">slc</span><span class="p">])</span>
<span class="k">if</span> <span class="n">slc</span><span class="o">.</span><span class="n">start</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># this is a [:x] slice</span>
<span class="k">return</span> <span class="n">ANSIString</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">char_indexes</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="k">return</span> <span class="n">ANSIString</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">char_indexes</span><span class="p">[</span><span class="mi">0</span><span class="p">]])</span>
<span class="k">if</span> <span class="n">slc</span><span class="o">.</span><span class="n">stop</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># a [x:] slice</span>
<span class="k">return</span> <span class="n">ANSIString</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">char_indexes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:])</span>
<span class="k">return</span> <span class="n">ANSIString</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">char_indexes</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:])</span>
<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="k">try</span><span class="p">:</span>
<span class="n">string</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="n">slc</span><span class="o">.</span><span class="n">start</span> <span class="ow">or</span> <span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">_raw_string</span>
@ -1146,7 +1146,7 @@
<span class="n">current_index</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">()</span>
<span class="k">for</span> <span class="n">section</span> <span class="ow">in</span> <span class="n">parent_result</span><span class="p">:</span>
<span class="n">result</span> <span class="o">+=</span> <span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="n">current_index</span><span class="p">:</span> <span class="n">current_index</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">section</span><span class="p">)],)</span>
<span class="n">result</span> <span class="o">+=</span> <span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="n">current_index</span> <span class="p">:</span> <span class="n">current_index</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">section</span><span class="p">)],)</span>
<span class="n">current_index</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">section</span><span class="p">)</span>
<span class="k">return</span> <span class="n">result</span></div>
@ -1266,7 +1266,7 @@
<span class="n">start</span> <span class="o">=</span> <span class="nb">next</span> <span class="o">+</span> <span class="n">bylen</span>
<span class="n">maxsplit</span> <span class="o">-=</span> <span class="mi">1</span> <span class="c1"># NB. if it&#39;s already &lt; 0, it stays &lt; 0</span>
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="n">start</span><span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)])</span>
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="n">start</span> <span class="p">:</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="p">)])</span>
<span class="k">if</span> <span class="n">drop_spaces</span><span class="p">:</span>
<span class="k">return</span> <span class="p">[</span><span class="n">part</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">res</span> <span class="k">if</span> <span class="n">part</span> <span class="o">!=</span> <span class="s2">&quot;&quot;</span><span class="p">]</span>
<span class="k">return</span> <span class="n">res</span></div>
@ -1309,7 +1309,7 @@
<span class="k">if</span> <span class="nb">next</span> <span class="o">&lt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">break</span>
<span class="c1"># Get character codes after the index as well.</span>
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="nb">next</span> <span class="o">+</span> <span class="n">bylen</span><span class="p">:</span> <span class="n">end</span><span class="p">])</span>
<span class="n">res</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="p">[</span><span class="nb">next</span> <span class="o">+</span> <span class="n">bylen</span> <span class="p">:</span> <span class="n">end</span><span class="p">])</span>
<span class="n">end</span> <span class="o">=</span> <span class="nb">next</span>
<span class="n">maxsplit</span> <span class="o">-=</span> <span class="mi">1</span> <span class="c1"># NB. if it&#39;s already &lt; 0, it stays &lt; 0</span>
@ -1363,7 +1363,7 @@
<span class="n">ic</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="n">ir2</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="n">rstripped</span> <span class="o">=</span> <span class="n">rstripped</span><span class="p">[::</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
<span class="k">return</span> <span class="n">ANSIString</span><span class="p">(</span><span class="n">lstripped</span> <span class="o">+</span> <span class="n">raw</span><span class="p">[</span><span class="n">ir1</span><span class="p">:</span> <span class="n">ir2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">rstripped</span><span class="p">)</span></div>
<span class="k">return</span> <span class="n">ANSIString</span><span class="p">(</span><span class="n">lstripped</span> <span class="o">+</span> <span class="n">raw</span><span class="p">[</span><span class="n">ir1</span> <span class="p">:</span> <span class="n">ir2</span> <span class="o">+</span> <span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">rstripped</span><span class="p">)</span></div>
<div class="viewcode-block" id="ANSIString.lstrip"><a class="viewcode-back" href="../../../api/evennia.utils.ansi.html#evennia.utils.ansi.ANSIString.lstrip">[docs]</a> <span class="k">def</span> <span class="nf">lstrip</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">chars</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -1482,7 +1482,7 @@
<span class="n">start</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">end</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">_char_indexes</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">prefix</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">_raw_string</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="n">postfix</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:]</span>
<span class="n">postfix</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">_raw_string</span><span class="p">[</span><span class="n">end</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
<span class="n">line</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">_clean_string</span> <span class="o">*</span> <span class="n">amount</span>
<span class="n">code_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="mi">0</span><span class="p">,</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">))]</span>
<span class="n">length</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">prefix</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span>

View file

@ -176,11 +176,12 @@
<span class="n">typeclass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">typeclass_storage</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="n">script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">db_account__isnull</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_obj__isnull</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
<span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span> <span class="n">db_account__isnull</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_obj__isnull</span><span class="o">=</span><span class="kc">True</span>
<span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
<span class="n">kwargs</span> <span class="o">=</span> <span class="p">{</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">loaded_data</span><span class="p">[</span><span class="n">key</span><span class="p">]}</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;key&#39;</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s1">&#39;persistent&#39;</span><span class="p">]</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="s1">&#39;persistent&#39;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;key&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;persistent&quot;</span><span class="p">]</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;persistent&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">compare_hash</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">dumps</span><span class="p">(</span><span class="n">kwargs</span><span class="p">,</span> <span class="n">protocol</span><span class="o">=</span><span class="mi">4</span><span class="p">))</span>
@ -188,8 +189,9 @@
<span class="n">script_hash</span> <span class="o">=</span> <span class="n">script</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="s2">&quot;global_script_settings&quot;</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;settings_hash&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">script_hash</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># legacy - store the hash anew and assume no change</span>
<span class="n">script</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;global_script_settings&quot;</span><span class="p">,</span> <span class="n">compare_hash</span><span class="p">,</span>
<span class="n">category</span><span class="o">=</span><span class="s2">&quot;settings_hash&quot;</span><span class="p">)</span>
<span class="n">script</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
<span class="s2">&quot;global_script_settings&quot;</span><span class="p">,</span> <span class="n">compare_hash</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;settings_hash&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">script_hash</span> <span class="o">!=</span> <span class="n">compare_hash</span><span class="p">:</span>
<span class="c1"># wipe the old version and create anew</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_info</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;GLOBAL_SCRIPTS: Settings changed for </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">typeclass</span><span class="si">}</span><span class="s2">).&quot;</span><span class="p">)</span>
@ -206,8 +208,7 @@
<span class="k">return</span> <span class="kc">None</span>
<span class="c1"># store a hash representation of the setup</span>
<span class="n">script</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;_global_script_settings&quot;</span><span class="p">,</span>
<span class="n">compare_hash</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;settings_hash&quot;</span><span class="p">)</span>
<span class="n">script</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;_global_script_settings&quot;</span><span class="p">,</span> <span class="n">compare_hash</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">&quot;settings_hash&quot;</span><span class="p">)</span>
<span class="n">script</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="k">return</span> <span class="n">script</span>
@ -242,7 +243,8 @@
<span class="bp">self</span><span class="o">.</span><span class="n">typeclass_storage</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;GlobalScriptContainer could not start import global script </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span></div>
<span class="sa">f</span><span class="s2">&quot;GlobalScriptContainer could not start import global script </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">.&quot;</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="GlobalScriptContainer.get"><a class="viewcode-back" href="../../../api/evennia.utils.containers.html#evennia.utils.containers.GlobalScriptContainer.get">[docs]</a> <span class="k">def</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="sd">&quot;&quot;&quot;</span>

View file

@ -433,7 +433,7 @@
<span class="nd">@_save</span>
<span class="k">def</span> <span class="nf">rotate</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="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">rotate</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="nd">@_save</span>
<span class="k">def</span> <span class="nf">remove</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="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>

View file

@ -106,90 +106,104 @@
<span class="c1">#</span>
<span class="c1"># -------------------------------------------------------------</span>
<span class="n">_HELP_TEXT</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2"> &lt;txt&gt; - any non-command is appended to the end of the buffer.</span>
<span class="s2"> : &lt;l&gt; - view buffer or only line(s) &lt;l&gt;</span>
<span class="s2"> :: &lt;l&gt; - raw-view buffer or only line(s) &lt;l&gt;</span>
<span class="s2"> ::: - escape - enter &#39;:&#39; as the only character on the line.</span>
<span class="s2"> :h - this help.</span>
<span class="n">_HELP_TEXT</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> &lt;txt&gt; - any non-command is appended to the end of the buffer.</span>
<span class="sd"> : &lt;l&gt; - view buffer or only line(s) &lt;l&gt;</span>
<span class="sd"> :: &lt;l&gt; - raw-view buffer or only line(s) &lt;l&gt;</span>
<span class="sd"> ::: - escape - enter &#39;:&#39; as the only character on the line.</span>
<span class="sd"> :h - this help.</span>
<span class="s2"> :w - save the buffer (don&#39;t quit)</span>
<span class="s2"> :wq - save buffer and quit</span>
<span class="s2"> :q - quit (will be asked to save if buffer was changed)</span>
<span class="s2"> :q! - quit without saving, no questions asked</span>
<span class="sd"> :w - save the buffer (don&#39;t quit)</span>
<span class="sd"> :wq - save buffer and quit</span>
<span class="sd"> :q - quit (will be asked to save if buffer was changed)</span>
<span class="sd"> :q! - quit without saving, no questions asked</span>
<span class="s2"> :u - (undo) step backwards in undo history</span>
<span class="s2"> :uu - (redo) step forward in undo history</span>
<span class="s2"> :UU - reset all changes back to initial state</span>
<span class="sd"> :u - (undo) step backwards in undo history</span>
<span class="sd"> :uu - (redo) step forward in undo history</span>
<span class="sd"> :UU - reset all changes back to initial state</span>
<span class="s2"> :dd &lt;l&gt; - delete last line or line(s) &lt;l&gt;</span>
<span class="s2"> :dw &lt;l&gt; &lt;w&gt; - delete word or regex &lt;w&gt; in entire buffer or on line &lt;l&gt;</span>
<span class="s2"> :DD - clear entire buffer</span>
<span class="sd"> :dd &lt;l&gt; - delete last line or line(s) &lt;l&gt;</span>
<span class="sd"> :dw &lt;l&gt; &lt;w&gt; - delete word or regex &lt;w&gt; in entire buffer or on line &lt;l&gt;</span>
<span class="sd"> :DD - clear entire buffer</span>
<span class="s2"> :y &lt;l&gt; - yank (copy) line(s) &lt;l&gt; to the copy buffer</span>
<span class="s2"> :x &lt;l&gt; - cut line(s) &lt;l&gt; and store it in the copy buffer</span>
<span class="s2"> :p &lt;l&gt; - put (paste) previously copied line(s) directly after &lt;l&gt;</span>
<span class="s2"> :i &lt;l&gt; &lt;txt&gt; - insert new text &lt;txt&gt; at line &lt;l&gt;. Old line will move down</span>
<span class="s2"> :r &lt;l&gt; &lt;txt&gt; - replace line &lt;l&gt; with text &lt;txt&gt;</span>
<span class="s2"> :I &lt;l&gt; &lt;txt&gt; - insert text at the beginning of line &lt;l&gt;</span>
<span class="s2"> :A &lt;l&gt; &lt;txt&gt; - append text after the end of line &lt;l&gt;</span>
<span class="sd"> :y &lt;l&gt; - yank (copy) line(s) &lt;l&gt; to the copy buffer</span>
<span class="sd"> :x &lt;l&gt; - cut line(s) &lt;l&gt; and store it in the copy buffer</span>
<span class="sd"> :p &lt;l&gt; - put (paste) previously copied line(s) directly after &lt;l&gt;</span>
<span class="sd"> :i &lt;l&gt; &lt;txt&gt; - insert new text &lt;txt&gt; at line &lt;l&gt;. Old line will move down</span>
<span class="sd"> :r &lt;l&gt; &lt;txt&gt; - replace line &lt;l&gt; with text &lt;txt&gt;</span>
<span class="sd"> :I &lt;l&gt; &lt;txt&gt; - insert text at the beginning of line &lt;l&gt;</span>
<span class="sd"> :A &lt;l&gt; &lt;txt&gt; - append text after the end of line &lt;l&gt;</span>
<span class="s2"> :s &lt;l&gt; &lt;w&gt; &lt;txt&gt; - search/replace word or regex &lt;w&gt; in buffer or on line &lt;l&gt;</span>
<span class="sd"> :s &lt;l&gt; &lt;w&gt; &lt;txt&gt; - search/replace word or regex &lt;w&gt; in buffer or on line &lt;l&gt;</span>
<span class="s2"> :j &lt;l&gt; &lt;w&gt; - justify buffer or line &lt;l&gt;. &lt;w&gt; is f, c, l or r. Default f (full)</span>
<span class="s2"> :f &lt;l&gt; - flood-fill entire buffer or line &lt;l&gt;: Equivalent to :j left</span>
<span class="s2"> :fi &lt;l&gt; - indent entire buffer or line &lt;l&gt;</span>
<span class="s2"> :fd &lt;l&gt; - de-indent entire buffer or line &lt;l&gt;</span>
<span class="sd"> :j &lt;l&gt; &lt;w&gt; - justify buffer or line &lt;l&gt;. &lt;w&gt; is f, c, l or r. Default f (full)</span>
<span class="sd"> :f &lt;l&gt; - flood-fill entire buffer or line &lt;l&gt;: Equivalent to :j left</span>
<span class="sd"> :fi &lt;l&gt; - indent entire buffer or line &lt;l&gt;</span>
<span class="sd"> :fd &lt;l&gt; - de-indent entire buffer or line &lt;l&gt;</span>
<span class="s2"> :echo - turn echoing of the input on/off (helpful for some clients)</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span>
<span class="sd"> :echo - turn echoing of the input on/off (helpful for some clients)</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">)</span>
<span class="n">_HELP_LEGEND</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2"> Legend:</span>
<span class="s2"> &lt;l&gt; - line number, like &#39;5&#39; or range, like &#39;3:7&#39;.</span>
<span class="s2"> &lt;w&gt; - a single word, or multiple words with quotes around them.</span>
<span class="s2"> &lt;txt&gt; - longer string, usually not needing quotes.</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span>
<span class="n">_HELP_LEGEND</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Legend:</span>
<span class="sd"> &lt;l&gt; - line number, like &#39;5&#39; or range, like &#39;3:7&#39;.</span>
<span class="sd"> &lt;w&gt; - a single word, or multiple words with quotes around them.</span>
<span class="sd"> &lt;txt&gt; - longer string, usually not needing quotes.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">)</span>
<span class="n">_HELP_CODE</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2"> :! - Execute code buffer without saving</span>
<span class="s2"> :&lt; - Decrease the level of automatic indentation for the next lines</span>
<span class="s2"> :&gt; - Increase the level of automatic indentation for the next lines</span>
<span class="s2"> := - Switch automatic indentation on/off</span>
<span class="s2">&quot;&quot;&quot;</span><span class="o">.</span><span class="n">lstrip</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="n">_HELP_CODE</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> :! - Execute code buffer without saving</span>
<span class="sd"> :&lt; - Decrease the level of automatic indentation for the next lines</span>
<span class="sd"> :&gt; - Increase the level of automatic indentation for the next lines</span>
<span class="sd"> := - Switch automatic indentation on/off</span>
<span class="sd">&quot;&quot;&quot;</span><span class="o">.</span><span class="n">lstrip</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="p">)</span>
<span class="n">_ERROR_LOADFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="si">{error}</span><span class="s2"></span>
<span class="n">_ERROR_LOADFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">{error}</span>
<span class="s2">|rBuffer load function error. Could not load initial data.|n</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span>
<span class="sd">|rBuffer load function error. Could not load initial data.|n</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">)</span>
<span class="n">_ERROR_SAVEFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="si">{error}</span><span class="s2"></span>
<span class="n">_ERROR_SAVEFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">{error}</span>
<span class="s2">|rSave function returned an error. Buffer not saved.|n</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span>
<span class="sd">|rSave function returned an error. Buffer not saved.|n</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">)</span>
<span class="n">_ERROR_NO_SAVEFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;|rNo save function defined. Buffer cannot be saved.|n&quot;</span><span class="p">)</span>
<span class="n">_MSG_SAVE_NO_CHANGE</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;No changes need saving&quot;</span><span class="p">)</span>
<span class="n">_DEFAULT_NO_QUITFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;Exited editor.&quot;</span><span class="p">)</span>
<span class="n">_ERROR_QUITFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="si">{error}</span><span class="s2"></span>
<span class="n">_ERROR_QUITFUNC</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">{error}</span>
<span class="s2">|rQuit function gave an error. Skipping.|n</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span>
<span class="sd">|rQuit function gave an error. Skipping.|n</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">)</span>
<span class="n">_ERROR_PERSISTENT_SAVING</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;&quot;&quot;</span>
<span class="si">{error}</span><span class="s2"></span>
<span class="n">_ERROR_PERSISTENT_SAVING</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">{error}</span>
<span class="s2">|rThe editor state could not be saved for persistent mode. Switching</span>
<span class="s2">to non-persistent mode (which means the editor session won&#39;t survive</span>
<span class="s2">an eventual server reload - so save often!)|n</span>
<span class="s2">&quot;&quot;&quot;</span><span class="p">)</span>
<span class="sd">|rThe editor state could not be saved for persistent mode. Switching</span>
<span class="sd">to non-persistent mode (which means the editor session won&#39;t survive</span>
<span class="sd">an eventual server reload - so save often!)|n</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="p">)</span>
<span class="n">_TRACE_PERSISTENT_SAVING</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;EvEditor persistent-mode error. Commonly, this is because one or &quot;</span>
@ -564,11 +578,15 @@
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Removed </span><span class="si">{arg1}</span><span class="s2"> for lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span> <span class="o">+</span> <span class="mi">1</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Removed </span><span class="si">{arg1}</span><span class="s2"> for lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span> <span class="o">+</span> <span class="mi">1</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Removed </span><span class="si">{arg1}</span><span class="s2"> for </span><span class="si">{line}</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">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Removed </span><span class="si">{arg1}</span><span class="s2"> for </span><span class="si">{line}</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">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">sarea</span> <span class="o">=</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">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
<span class="n">sarea</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">&quot;&#39;&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s1">&#39;&quot;&#39;</span><span class="p">),</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="n">sarea</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">MULTILINE</span><span class="p">)</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">sarea</span><span class="o">.</span><span class="n">split</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">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
@ -603,8 +621,11 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:]</span>
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Pasted buffer </span><span class="si">{cbuf}</span><span class="s2"> to </span><span class="si">{line}</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">cbuf</span><span class="o">=</span><span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Pasted buffer </span><span class="si">{cbuf}</span><span class="s2"> to </span><span class="si">{line}</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">cbuf</span><span class="o">=</span><span class="n">editor</span><span class="o">.</span><span class="n">_copy_buffer</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">&quot;:i&quot;</span><span class="p">:</span>
<span class="c1"># :i &lt;l&gt; &lt;txt&gt; - insert new line</span>
<span class="n">new_lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
@ -613,8 +634,11 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">new_lines</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:]</span>
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Inserted </span><span class="si">{num}</span><span class="s2"> new line(s) at </span><span class="si">{line}</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">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">new_lines</span><span class="p">),</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Inserted </span><span class="si">{num}</span><span class="s2"> new line(s) at </span><span class="si">{line}</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">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">new_lines</span><span class="p">),</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">&quot;:r&quot;</span><span class="p">:</span>
<span class="c1"># :r &lt;l&gt; &lt;txt&gt; - replace lines</span>
<span class="n">new_lines</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
@ -623,8 +647,11 @@
<span class="k">else</span><span class="p">:</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">new_lines</span> <span class="o">+</span> <span class="n">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
<span class="n">editor</span><span class="o">.</span><span class="n">update_buffer</span><span class="p">(</span><span class="n">buf</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Replaced </span><span class="si">{num}</span><span class="s2"> line(s) at </span><span class="si">{line}</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">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">new_lines</span><span class="p">),</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Replaced </span><span class="si">{num}</span><span class="s2"> line(s) at </span><span class="si">{line}</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">num</span><span class="o">=</span><span class="nb">len</span><span class="p">(</span><span class="n">new_lines</span><span class="p">),</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">cmd</span> <span class="o">==</span> <span class="s2">&quot;:I&quot;</span><span class="p">:</span>
<span class="c1"># :I &lt;l&gt; &lt;txt&gt; - insert text at beginning of line(s) &lt;l&gt;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">editor</span><span class="o">.</span><span class="n">_codefunc</span><span class="p">:</span>
@ -660,12 +687,14 @@
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Search-replaced </span><span class="si">{arg1}</span><span class="s2"> -&gt; </span><span class="si">{arg2}</span><span class="s2"> for lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="p">,</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span><span class="p">)</span>
<span class="n">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="p">,</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Search-replaced </span><span class="si">{arg1}</span><span class="s2"> -&gt; </span><span class="si">{arg2}</span><span class="s2"> for </span><span class="si">{line}</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">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">)</span>
<span class="n">arg1</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg1</span><span class="p">,</span> <span class="n">arg2</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">arg2</span><span class="p">,</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="n">sarea</span> <span class="o">=</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">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
@ -687,8 +716,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Flood filled lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Flood filled lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Flood filled </span><span class="si">{line}</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">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
<span class="n">fbuf</span> <span class="o">=</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">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
@ -720,11 +748,15 @@
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{align}</span><span class="s2">-justified lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">align</span><span class="o">=</span><span class="n">align_name</span><span class="p">[</span><span class="n">align</span><span class="p">],</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{align}</span><span class="s2">-justified lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">align</span><span class="o">=</span><span class="n">align_name</span><span class="p">[</span><span class="n">align</span><span class="p">],</span> <span class="n">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{align}</span><span class="s2">-justified </span><span class="si">{line}</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">align</span><span class="o">=</span><span class="n">align_name</span><span class="p">[</span><span class="n">align</span><span class="p">],</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{align}</span><span class="s2">-justified </span><span class="si">{line}</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">align</span><span class="o">=</span><span class="n">align_name</span><span class="p">[</span><span class="n">align</span><span class="p">],</span> <span class="n">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">jbuf</span> <span class="o">=</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">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
<span class="n">jbuf</span> <span class="o">=</span> <span class="n">justify</span><span class="p">(</span><span class="n">jbuf</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">width</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="n">align</span><span class="p">)</span>
<span class="n">buf</span> <span class="o">=</span> <span class="n">linebuffer</span><span class="p">[:</span><span class="n">lstart</span><span class="p">]</span> <span class="o">+</span> <span class="n">jbuf</span><span class="o">.</span><span class="n">split</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">linebuffer</span><span class="p">[</span><span class="n">lend</span><span class="p">:]</span>
@ -746,8 +778,11 @@
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">linerange</span><span class="p">:</span>
<span class="n">lstart</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">lend</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">cline</span> <span class="o">+</span> <span class="mi">1</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Removed left margin (dedented) lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Removed left margin (dedented) lines </span><span class="si">{l1}</span><span class="s2">-</span><span class="si">{l2}</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">l1</span><span class="o">=</span><span class="n">lstart</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">l2</span><span class="o">=</span><span class="n">lend</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;Removed left margin (dedented) </span><span class="si">{line}</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">line</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">lstr</span><span class="p">))</span>
<span class="n">fbuf</span> <span class="o">=</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">linebuffer</span><span class="p">[</span><span class="n">lstart</span><span class="p">:</span><span class="n">lend</span><span class="p">])</span>
@ -769,9 +804,11 @@
<span class="n">editor</span><span class="o">.</span><span class="n">decrease_indent</span><span class="p">()</span>
<span class="n">indent</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span>
<span class="k">if</span> <span class="n">indent</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Decreased indentation: new indentation is </span><span class="si">{indent}</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">indent</span><span class="o">=</span><span class="n">indent</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Decreased indentation: new indentation is </span><span class="si">{indent}</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">indent</span><span class="o">=</span><span class="n">indent</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;|rManual indentation is OFF.|n Use := to turn it on.&quot;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
@ -782,9 +819,11 @@
<span class="n">editor</span><span class="o">.</span><span class="n">increase_indent</span><span class="p">()</span>
<span class="n">indent</span> <span class="o">=</span> <span class="n">editor</span><span class="o">.</span><span class="n">_indent</span>
<span class="k">if</span> <span class="n">indent</span> <span class="o">&gt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span>
<span class="s2">&quot;Increased indentation: new indentation is </span><span class="si">{indent}</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">indent</span><span class="o">=</span><span class="n">indent</span><span class="p">))</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">_</span><span class="p">(</span><span class="s2">&quot;Increased indentation: new indentation is </span><span class="si">{indent}</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">indent</span><span class="o">=</span><span class="n">indent</span>
<span class="p">)</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">_</span><span class="p">(</span><span class="s2">&quot;|rManual indentation is OFF.|n Use := to turn it on.&quot;</span><span class="p">))</span>
<span class="k">else</span><span class="p">:</span>
@ -951,9 +990,11 @@
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_loadfunc</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;|rBuffer is of type |w</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span><span class="si">}</span><span class="s2">)|r. &quot;</span>
<span class="s2">&quot;Continuing, it is converted to a string &quot;</span>
<span class="s2">&quot;(and will be saved as such)!|n&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;|rBuffer is of type |w</span><span class="si">{</span><span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span><span class="si">}</span><span class="s2">)|r. &quot;</span>
<span class="s2">&quot;Continuing, it is converted to a string &quot;</span>
<span class="s2">&quot;(and will be saved as such)!|n&quot;</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span> <span class="o">=</span> <span class="n">to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_buffer</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>

Some files were not shown because too many files have changed in this diff Show more