Updated HTML docs

This commit is contained in:
Griatch 2021-07-23 00:25:23 +02:00
parent 86c930be7a
commit 0639066d17
121 changed files with 16949 additions and 511 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: 86151e183f64ea732443e3117128c91d
config: c80a76ddfafdda4265e209e72b48dcb2
tags: 645f666f9bcd5a90fca523b33c5a78b7

View file

@ -45,6 +45,7 @@
<span class="kn">import</span> <span class="nn">re</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">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span><span class="p">,</span> <span class="n">Min</span><span class="p">,</span> <span class="n">Max</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">InterruptCommand</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.locks.lockhandler</span> <span class="kn">import</span> <span class="n">LockException</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdhandler</span> <span class="kn">import</span> <span class="n">get_and_merge_cmdsets</span>
@ -1528,40 +1529,33 @@
<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">return</span> <span class="n">exit_obj</span></div>
<div class="viewcode-block" id="CmdOpen.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen.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="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="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>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</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="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;option&quot;</span><span class="p">]</span></div>
<div class="viewcode-block" id="CmdOpen.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen.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"> This is where the processing starts.</span>
<span class="sd"> Uses the ObjManipCommand.parser() for pre-processing</span>
<span class="sd"> as well as the self.create_exit() method.</span>
<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="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="n">string</span> <span class="o">=</span> <span class="s2">&quot;Usage: open &lt;new exit&gt;[;alias...][:typeclass][,&lt;return exit&gt;[;alias..][:typeclass]]] &quot;</span>
<span class="n">string</span> <span class="o">+=</span> <span class="s2">&quot;= &lt;destination&gt;&quot;</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">return</span>
<span class="c1"># We must have a location to open an exit</span>
<span class="n">location</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="n">location</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 create an exit from a None-location.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># obtain needed info from cmdline</span>
<span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
<span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span>
<span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;option&quot;</span><span class="p">]</span>
<span class="n">dest_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
<span class="c1"># first, check so the destination exists.</span>
<span class="n">destination</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">dest_name</span><span class="p">,</span> <span class="n">global_search</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">destination</span><span class="p">:</span>
<span class="k">return</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="n">exit_name</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">exit_aliases</span><span class="p">,</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>
@ -1570,9 +1564,8 @@
<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="n">destination</span><span class="p">,</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></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>
@ -3022,28 +3015,37 @@
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:perm(teleport) or perm(Builder)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;Building&quot;</span>
<div class="viewcode-block" id="CmdTeleport.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport.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>
<span class="sd"> Breaking out searching here to make this easier to override.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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">obj_to_teleport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</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">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</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="bp">self</span><span class="o">.</span><span class="n">obj_to_teleport</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;Did not find object to teleport.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">elif</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">destination</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdTeleport.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport.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;Performs the teleport&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">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</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">rhs</span>
<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">obj_to_teleport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj_to_teleport</span>
<span class="n">destination</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span>
<span class="c1"># setting switches</span>
<span class="n">tel_quietly</span> <span class="o">=</span> <span class="s2">&quot;quiet&quot;</span> <span class="ow">in</span> <span class="n">switches</span>
<span class="n">to_none</span> <span class="o">=</span> <span class="s2">&quot;tonone&quot;</span> <span class="ow">in</span> <span class="n">switches</span>
<span class="n">to_loc</span> <span class="o">=</span> <span class="s2">&quot;loc&quot;</span> <span class="ow">in</span> <span class="n">switches</span>
<span class="k">if</span> <span class="n">to_none</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;tonone&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="c1"># teleporting to None</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="n">obj_to_teleport</span> <span class="o">=</span> <span class="n">caller</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</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">obj_to_teleport</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;Did not find object to teleport.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">destination</span><span class="p">:</span>
<span class="c1"># in this case lhs is always the object to teleport</span>
<span class="n">obj_to_teleport</span> <span class="o">=</span> <span class="n">destination</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">has_account</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;Cannot teleport a puppeted object &quot;</span>
@ -3052,57 +3054,54 @@
<span class="p">)</span>
<span class="k">return</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Teleported </span><span class="si">%s</span><span class="s2"> -&gt; None-location.&quot;</span> <span class="o">%</span> <span class="n">obj_to_teleport</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">tel_quietly</span><span class="p">:</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <span class="s2">&quot;quiet&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">obj_to_teleport</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">%s</span><span class="s2"> teleported </span><span class="si">%s</span><span class="s2"> into nothingness.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">obj_to_teleport</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">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">return</span>
<span class="c1"># not teleporting to None location</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">to_none</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;Usage: teleport[/switches] [&lt;obj&gt; =] &lt;target_loc&gt;||home&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">rhs</span><span class="p">:</span>
<span class="n">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</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">obj_to_teleport</span> <span class="o">=</span> <span class="n">caller</span>
<span class="n">destination</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">lhs</span><span class="p">,</span> <span class="n">global_search</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">obj_to_teleport</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;Did not find object to teleport.&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">args</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;Usage: teleport[/switches] [&lt;obj&gt; =] &lt;target or (X,Y,Z)&gt;||home&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">destination</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;Destination not found.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">to_loc</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;loc&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">destination</span> <span class="o">=</span> <span class="n">destination</span><span class="o">.</span><span class="n">location</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">destination</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;Destination has no location.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">destination</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 can&#39;t teleport an object inside of itself!&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">destination</span><span class="o">.</span><span class="n">location</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 can&#39;t teleport an object inside something it holds!&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <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="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="si">%s</span><span class="s2"> is already at </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj_to_teleport</span><span class="p">,</span> <span class="n">destination</span><span class="p">))</span>
<span class="k">return</span>
<span class="n">use_destination</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="s2">&quot;intoexit&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">use_destination</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># try the teleport</span>
<span class="k">if</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="n">tel_quietly</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="n">use_destination</span>
<span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="c1"># teleporting from none-location</span>
<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="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="s2">&quot;Teleported to </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="n">destination</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>
<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="s2">&quot;Teleported </span><span class="si">%s</span><span class="s2"> -&gt; </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj_to_teleport</span><span class="p">,</span> <span class="n">destination</span><span class="p">))</span></div></div>
<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"> -&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">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="s2">&quot;Teleportation failed.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdScript"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdScript">[docs]</a><span class="k">class</span> <span class="nc">CmdScript</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>

View file

@ -124,7 +124,10 @@
<span class="n">target</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="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="p">:</span>
<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="n">caller</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">target</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></div></div>
<span class="n">desc</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="c1"># add the type=look to the outputfunc to make it</span>
<span class="c1"># easy to separate this output in client.</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">desc</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></div></div>
<div class="viewcode-block" id="CmdNick"><a class="viewcode-back" href="../../../../api/evennia.commands.default.general.html#evennia.commands.default.general.CmdNick">[docs]</a><span class="k">class</span> <span class="nc">CmdNick</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>

View file

@ -648,8 +648,8 @@
<div class="viewcode-block" id="TestCmdTasks.test_active_task"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_active_task">[docs]</a> <span class="k">def</span> <span class="nf">test_active_task</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">ptrn</span> <span class="ow">in</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;KWARGS&#39;</span><span class="p">,</span> <span class="s1">&#39;persisten&#39;</span><span class="p">,</span>
<span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+/\d+/\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:\d+\:\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;ms\:\d+&#39;</span><span class="p">,</span> <span class="s1">&#39;func_test&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="k">for</span> <span class="n">ptrn</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;Task ID&#39;</span><span class="p">,</span> <span class="s1">&#39;Completion&#39;</span><span class="p">,</span> <span class="s1">&#39;Date&#39;</span><span class="p">,</span> <span class="s1">&#39;Function&#39;</span><span class="p">,</span> <span class="s1">&#39;KWARGS&#39;</span><span class="p">,</span> <span class="s1">&#39;persisten&#39;</span><span class="p">,</span>
<span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+/\d+/\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\:\d+&#39;</span><span class="p">,</span> <span class="s1">&#39;func_test&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="s1">&#39;False&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="n">ptrn</span><span class="p">)</span></div>
@ -662,18 +662,18 @@
<div class="viewcode-block" id="TestCmdTasks.test_pause_unpause"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_pause_unpause">[docs]</a> <span class="k">def</span> <span class="nf">test_pause_unpause</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># test pause</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/pause </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, pause task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Pause task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">task</span><span class="o">.</span><span class="n">paused</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># test unpause</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/unpause </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</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">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, unpause task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Unpause task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="c1"># verify task continues after unpause</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
@ -681,25 +681,25 @@
<div class="viewcode-block" id="TestCmdTasks.test_do_task"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_do_task">[docs]</a> <span class="k">def</span> <span class="nf">test_do_task</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/do_task </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, do_task task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Do_task task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_remove"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_remove">[docs]</a> <span class="k">def</span> <span class="nf">test_remove</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/remove </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, remove task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Remove task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_call"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_call">[docs]</a> <span class="k">def</span> <span class="nf">test_call</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/call </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, call task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Call task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="c1"># make certain the task is still active</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">task</span><span class="o">.</span><span class="n">active</span><span class="p">())</span>
@ -709,9 +709,9 @@
<div class="viewcode-block" id="TestCmdTasks.test_cancel"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_cancel">[docs]</a> <span class="k">def</span> <span class="nf">test_cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/cancel </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, cancel task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Cancel task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">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">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">active</span><span class="p">())</span></div>

View file

@ -160,7 +160,12 @@
<span class="sd"> obj (Object): object to remove</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">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">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="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>
@ -381,9 +386,11 @@
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
<span class="n">errmsg</span> <span class="o">=</span> <span class="s2">&quot;Error: </span><span class="si">%s</span><span class="s2">.location = </span><span class="si">%s</span><span class="s2"> creates a location loop.&quot;</span> <span class="o">%</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">location</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">errmsg</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="n">errmsg</span> <span class="o">=</span> <span class="s2">&quot;Error (</span><span class="si">%s</span><span class="s2">): </span><span class="si">%s</span><span class="s2"> is not a valid location.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">location</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">errmsg</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="c1"># raising here gives more info for now</span>
<span class="k">raise</span>
<span class="c1"># errmsg = &quot;Error (%s): %s is not a valid location.&quot; % (str(e), location)</span>
<span class="c1"># raise RuntimeError(errmsg)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">__location_del</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -902,7 +902,6 @@
<span class="sd"> 7. `self.at_after_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>
@ -924,7 +923,6 @@
<span class="k">if</span> <span class="n">destination</span><span class="o">.</span><span class="n">destination</span> <span class="ow">and</span> <span class="n">use_destination</span><span class="p">:</span>
<span class="c1"># traverse exits</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">destination</span><span class="o">.</span><span class="n">destination</span>
<span class="c1"># Before the move, call eventual pre-commands.</span>
<span class="k">if</span> <span class="n">move_hooks</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
@ -2312,7 +2310,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;view&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="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></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="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></div>
<div class="viewcode-block" id="DefaultCharacter.at_pre_puppet"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultCharacter.at_pre_puppet">[docs]</a> <span class="k">def</span> <span class="nf">at_pre_puppet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">account</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -2487,7 +2485,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">locks</span> <span class="ow">and</span> <span class="n">account</span><span class="p">:</span>
<span class="n">locks</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">lockstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="n">account</span><span class="o">.</span><span class="n">id</span><span class="p">})</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="n">locks</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">account</span><span class="p">:</span>
<span class="n">locks</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">lockstring</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;id&quot;</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">locks</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">lockstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;id&quot;</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">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>

View file

@ -133,8 +133,8 @@
<span class="sd"> homogenizations like adding missing prototype_keys and setting a default typeclass.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{}</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">return</span> <span class="n">prototype</span>
<span class="n">reserved</span> <span class="o">=</span> <span class="n">_PROTOTYPE_RESERVED_KEYS</span> <span class="o">+</span> <span class="p">(</span><span class="n">custom_keys</span> <span class="ow">or</span> <span class="p">())</span>
@ -185,19 +185,45 @@
<span class="k">return</span> <span class="n">homogenized</span></div>
<span class="c1"># module-based prototypes</span>
<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>
<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"> This is called by `evennia.__init__` as Evennia initializes. It&#39;s important</span>
<span class="sd"> to do this late so as to not interfere with evennia initialization.</span>
<span class="sd"> Load module prototypes. Also prototype-dicts passed directly to this function are considered</span>
<span class="sd"> &#39;module&#39; prototypes (they are impossible to change) but will have a module of None.</span>
<span class="sd"> Args:</span>
<span class="sd"> *mod_or_prototypes (module or dict): Each arg should be a separate module or</span>
<span class="sd"> prototype-dict to load. If none are given, `settings.PROTOTYPE_MODULES` will be used.</span>
<span class="sd"> override (bool, optional): If prototypes should override existing ones already loaded.</span>
<span class="sd"> Disabling this can allow for injecting prototypes into the system dynamically while</span>
<span class="sd"> still allowing same prototype-keys to be overridden from settings (even though settings</span>
<span class="sd"> is usually loaded before dynamic loading).</span>
<span class="sd"> Note:</span>
<span class="sd"> This is called (without arguments) by `evennia.__init__` as Evennia initializes. It&#39;s</span>
<span class="sd"> important to do this late so as to not interfere with evennia initialization. But it can</span>
<span class="sd"> also be used later to add more prototypes to the library on the fly. This is requried</span>
<span class="sd"> before a module-based prototype can be accessed by prototype-key.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">:</span>
<span class="c1"># to remove a default prototype, override it with an empty dict.</span>
<span class="c1"># internally we store as (key, desc, locks, tags, prototype_dict)</span>
<span class="n">prots</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">global</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="p">,</span> <span class="n">_MODULE_PROTOTYPES</span>
<span class="k">def</span> <span class="nf">_prototypes_from_module</span><span class="p">(</span><span class="n">mod</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Load prototypes from a module, first by looking for a global list PROTOTYPE_LIST (a list of</span>
<span class="sd"> dict-prototypes), and if not found, assuming all global-level dicts in the module are</span>
<span class="sd"> prototypes.</span>
<span class="sd"> Args:</span>
<span class="sd"> mod (module): The module to load from.evennia</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: A list of tuples `(prototype_key, prototype-dict)` where the prototype</span>
<span class="sd"> has been homogenized.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">prots</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">prototype_list</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;PROTOTYPE_LIST&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">prototype_list</span><span class="p">:</span>
<span class="c1"># found mod.PROTOTYPE_LIST - this should be a list of valid</span>
@ -220,27 +246,74 @@
<span class="k">if</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">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">variable_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</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">return</span> <span class="n">prots</span>
<span class="c1"># assign module path to each prototype_key for easy reference</span>
<span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">prototype_key</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">mod</span> <span class="k">for</span> <span class="n">prototype_key</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">prots</span><span class="p">})</span>
<span class="c1"># make sure the prototype contains all meta info</span>
<span class="k">def</span> <span class="nf">_cleanup_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">prototype</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> We need to handle externally determined prototype-keys and to make sure</span>
<span class="sd"> the prototype contains all needed meta information.</span>
<span class="sd"> Args:</span>
<span class="sd"> prototype_key (str): The determined name of the prototype.</span>
<span class="sd"> prototype (dict): The prototype itself.</span>
<span class="sd"> mod (module, optional): The module the prototype was loaded from, if any.</span>
<span class="sd"> Returns:</span>
<span class="sd"> dict: The cleaned up prototype.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">actual_prot_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="n">prototype_key</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">prototype</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<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="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>
<span class="k">else</span> <span class="s2">&quot;use:all();edit:false()&quot;</span>
<span class="p">),</span>
<span class="s2">&quot;prototype_tags&quot;</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_tags&quot;</span><span class="p">,</span> <span class="p">[])))</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;module&quot;</span><span class="p">])</span>
<span class="p">),</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">prototype</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">mod_or_prototypes</span><span class="p">:</span>
<span class="c1"># in principle this means PROTOTYPE_MODULES could also contain prototypes, but that is</span>
<span class="c1"># rarely useful ...</span>
<span class="n">mod_or_prototypes</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span>
<span class="k">for</span> <span class="n">mod_or_dict</span> <span class="ow">in</span> <span class="n">mod_or_prototypes</span><span class="p">:</span>
<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="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="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>
<span class="c1"># a module (or path to module). This can contain many prototypes; they can be keyed by</span>
<span class="c1"># variable-name too</span>
<span class="n">prots</span> <span class="o">=</span> <span class="n">_prototypes_from_module</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="nb">repr</span><span class="p">(</span><span class="n">mod_or_dict</span><span class="p">)</span>
<span class="c1"># store all found prototypes</span>
<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">actual_prot_key</span> <span class="o">=</span> <span class="n">prot</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="n">prototype_key</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="o">.</span><span class="n">update</span><span class="p">(</span>
<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="n">prot</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">prot</span> <span class="k">else</span> <span class="n">mod</span><span class="p">,</span>
<span class="s2">&quot;prototype_locks&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="n">prot</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">prot</span>
<span class="k">else</span> <span class="s2">&quot;use:all();edit:false()&quot;</span>
<span class="p">),</span>
<span class="s2">&quot;prototype_tags&quot;</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">prot</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_tags&quot;</span><span class="p">,</span> <span class="p">[])))</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;module&quot;</span><span class="p">])</span>
<span class="p">),</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">_MODULE_PROTOTYPES</span><span class="p">[</span><span class="n">actual_prot_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">prot</span></div>
<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="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>
<span class="k">continue</span>
<span class="c1"># make sure the prototype contains all meta info</span>
<span class="n">_MODULE_PROTOTYPES</span><span class="p">[</span><span class="n">actual_prototype_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">prototype</span>
<span class="c1"># track module path for display purposes</span>
<span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="p">[</span><span class="n">actual_prototype_key</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">mod</span></div>
<span class="c1"># Db-based prototypes</span>
@ -307,11 +380,12 @@
<span class="c1"># we can&#39;t edit a prototype defined in a module</span>
<span class="k">if</span> <span class="n">prototype_key</span> <span class="ow">in</span> <span class="n">_MODULE_PROTOTYPES</span><span class="p">:</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="s2">&quot;N/A&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">{protkey}</span><span class="s2"> is a read-only prototype &quot;</span> <span class="s2">&quot;(defined as code in </span><span class="si">{module}</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">mod</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (defined as code in </span><span class="si">{module}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (passed directly as a dict).&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">PermissionError</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">))</span>
<span class="c1"># make sure meta properties are included with defaults</span>
<span class="n">in_prototype</span><span class="p">[</span><span class="s2">&quot;prototype_desc&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">in_prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
@ -375,11 +449,12 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">prototype_key</span> <span class="ow">in</span> <span class="n">_MODULE_PROTOTYPES</span><span class="p">:</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="s2">&quot;N/A&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">{protkey}</span><span class="s2"> is a read-only prototype &quot;</span> <span class="s2">&quot;(defined as code in </span><span class="si">{module}</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">mod</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (defined as code in </span><span class="si">{module}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (passed directly as a dict).&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">PermissionError</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">))</span>
<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>
@ -450,7 +525,7 @@
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="p">:</span>
<span class="c1"># exact match</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod_matches</span><span class="p">[</span><span class="n">key</span><span class="p">]]</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod_matches</span><span class="p">[</span><span class="n">key</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()]</span>
<span class="n">allow_fuzzy</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># fuzzy matching</span>
@ -460,7 +535,9 @@
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">prototype_key</span>
<span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">match</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
<span class="c1"># note - we return a copy of the prototype dict, otherwise using this with e.g.</span>
<span class="c1"># prototype_from_object will modify the base prototype for every object</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
<span class="c1"># search db-stored prototypes</span>
@ -493,7 +570,7 @@
<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">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 </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="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>
@ -947,10 +1024,12 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s2">&quot;edit&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">prototype_key</span> <span class="ow">in</span> <span class="n">_MODULE_PROTOTYPES</span><span class="p">:</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="s2">&quot;N/A&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;</span><span class="si">{}</span><span class="s2"> is a read-only prototype &quot;</span> <span class="s2">&quot;(defined as code in </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">prototype_key</span><span class="p">,</span> <span class="n">mod</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">mod</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (defined as code in </span><span class="si">{module}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (passed directly as a dict).&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="n">err</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">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="n">search_prototype</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">)</span>
@ -1017,7 +1096,8 @@
<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">iter</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">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

@ -195,7 +195,8 @@
<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="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_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>

View file

@ -1954,6 +1954,51 @@
<span class="nb">print</span><span class="p">(</span><span class="n">table</span><span class="p">)</span></div>
<div class="viewcode-block" id="run_custom_commands"><a class="viewcode-back" href="../../../api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.run_custom_commands">[docs]</a><span class="k">def</span> <span class="nf">run_custom_commands</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Inject a custom option into the evennia launcher command chain.</span>
<span class="sd"> Args:</span>
<span class="sd"> option (str): Incoming option - the first argument after `evennia` on</span>
<span class="sd"> the command line.</span>
<span class="sd"> *args: All args will passed to a found callable.__dict__</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: If a custom command was found and handled the option.</span>
<span class="sd"> Notes:</span>
<span class="sd"> Provide new commands in settings with</span>
<span class="sd"> CUSTOM_EVENNIA_LAUNCHER_COMMANDS = {&quot;mycmd&quot;: &quot;path.to.callable&quot;, ...}</span>
<span class="sd"> The callable will be passed any `*args` given on the command line and is expected to</span>
<span class="sd"> handle/validate the input correctly. Use like any other evennia command option on</span>
<span class="sd"> in the terminal/console, for example:</span>
<span class="sd"> evennia mycmd foo bar</span>
<span class="sd"> &quot;&quot;&quot;</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">import</span> <span class="nn">importlib</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># a dict of {option: callable(*args), ...}</span>
<span class="n">custom_commands</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">EXTRA_LAUNCHER_COMMANDS</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<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="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>
<span class="n">command</span> <span class="o">=</span> <span class="n">mod</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">cmdname</span><span class="p">)</span>
<span class="k">if</span> <span class="n">command</span><span class="p">:</span>
<span class="n">command</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span></div>
<div class="viewcode-block" id="run_menu"><a class="viewcode-back" href="../../../api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.run_menu">[docs]</a><span class="k">def</span> <span class="nf">run_menu</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This launches an interactive menu.</span>
@ -2327,6 +2372,10 @@
<span class="n">django</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">management</span><span class="o">.</span><span class="n">call_command</span><span class="p">(</span><span class="o">*</span><span class="p">([</span><span class="n">option</span><span class="p">]</span> <span class="o">+</span> <span class="n">unknown_args</span><span class="p">))</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">run_custom_commands</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="o">*</span><span class="n">unknown_args</span><span class="p">):</span>
<span class="c1"># run any custom commands</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
<span class="c1"># pass on to the core django manager - re-parse the entire input line</span>
<span class="c1"># but keep &#39;evennia&#39; as the name instead of django-admin. This is</span>
<span class="c1"># an exit condition.</span>

View file

@ -247,6 +247,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">flags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol_flags</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;session flags:&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">,</span> <span class="p">{})</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="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span><span class="p">)</span>
<span class="n">height</span> <span class="o">=</span> <span class="n">flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">,</span> <span class="p">{})</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="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_HEIGHT</span><span class="p">)</span>
<span class="k">return</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span></div>

View file

@ -1301,7 +1301,7 @@
<span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">attrname</span><span class="p">)</span>
<div class="viewcode-block" id="DbHolder.get_all"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.DbHolder.get_all">[docs]</a> <span class="k">def</span> <span class="nf">get_all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">get_all_attributes</span><span class="p">()</span></div>
<span class="k">return</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">backend</span><span class="o">.</span><span class="n">get_all_attributes</span><span class="p">()</span></div>
<span class="nb">all</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_all</span><span class="p">)</span></div>

View file

@ -838,7 +838,7 @@
<span class="n">all_subclasses</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">_get_subclasses</span><span class="p">(</span><span class="n">subclass</span><span class="p">))</span>
<span class="k">return</span> <span class="n">all_subclasses</span>
<span class="k">def</span> <span class="nf">get_family</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>
<span class="k">def</span> <span class="nf">get_family</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>
<span class="sd"> Variation of get that not only returns the current typeclass</span>
<span class="sd"> but also all subclasses of that typeclass.</span>
@ -858,7 +858,7 @@
<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="bp">cls</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span> <span class="k">for</span> <span class="bp">cls</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_subclasses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="p">]</span>
<span class="n">kwargs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">&quot;db_typeclass_path__in&quot;</span><span class="p">:</span> <span class="n">paths</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">get</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get</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">filter_family</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>

View file

@ -285,7 +285,7 @@
<span class="sd"> &gt;: start</span>
<span class="sd"> # node abort</span>
<span class="sd"> ## node abort</span>
<span class="sd"> This exits the menu since there is no `## options` section.</span>

View file

@ -529,7 +529,7 @@ You can specify the /force switch to bypass this confirmation.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdDestroy.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['del', 'delete']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['delete', 'del']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -570,7 +570,7 @@ You can specify the /force switch to bypass this confirmation.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdDestroy.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'del delete', 'category': 'building', 'key': 'destroy', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'delete del', 'category': 'building', 'key': 'destroy', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1031,6 +1031,13 @@ unique.</p>
At this point we know destination is a valid location</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdOpen.parse">
<code class="sig-name descname">parse</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdOpen.parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdOpen.parse" title="Permalink to this definition"></a></dt>
<dd><p>We need to expand the default parsing to get all
the cases, see the module doc.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdOpen.func">
<code class="sig-name descname">func</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdOpen.func"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdOpen.func" title="Permalink to this definition"></a></dt>
@ -1268,7 +1275,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['parent', 'type', 'update', 'swap']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['update', 'parent', 'type', 'swap']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1299,7 +1306,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'parent type update swap', 'category': 'building', 'key': 'typeclass', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object.\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'update parent type swap', 'category': 'building', 'key': 'typeclass', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object.\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1679,6 +1686,12 @@ teleported to the target location.</p>
<code class="sig-name descname">help_category</code><em class="property"> = 'building'</em><a class="headerlink" href="#evennia.commands.default.building.CmdTeleport.help_category" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdTeleport.parse">
<code class="sig-name descname">parse</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdTeleport.parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdTeleport.parse" title="Permalink to this definition"></a></dt>
<dd><p>Breaking out searching here to make this easier to override.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdTeleport.func">
<code class="sig-name descname">func</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdTeleport.func"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdTeleport.func" title="Permalink to this definition"></a></dt>

File diff suppressed because one or more lines are too long

View file

@ -641,7 +641,7 @@ automatically begin with your name.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['emote', ':']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = [':', 'emote']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -677,7 +677,7 @@ space.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -700,7 +700,7 @@ which permission groups you are a member of.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdAccess.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['hierarchy', 'groups']</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['groups', 'hierarchy']</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -731,7 +731,7 @@ which permission groups you are a member of.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdAccess.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdAccess.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -385,7 +385,7 @@ given, &lt;nr&gt; defaults to 10.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdObjects.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['stats', 'listobjects', 'listobjs', 'db']</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['stats', 'db', 'listobjs', 'listobjects']</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -411,7 +411,7 @@ given, &lt;nr&gt; defaults to 10.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdObjects.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'stats listobjects listobjs db', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [&lt;nr&gt;]\n\n Gives statictics on objects in database as well as\n a list of &lt;nr&gt; latest objects in database. If not\n given, &lt;nr&gt; defaults to 10.\n '}</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'stats db listobjs listobjects', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [&lt;nr&gt;]\n\n Gives statictics on objects in database as well as\n a list of &lt;nr&gt; latest objects in database. If not\n given, &lt;nr&gt; defaults to 10.\n '}</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -686,7 +686,7 @@ See <a href="#id11"><span class="problematic" id="id12">|</span></a>luhttps://ww
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['delays', 'task']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['task', 'delays']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -732,7 +732,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'delays task', 'category': 'system', 'key': 'tasks', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'task delays', 'category': 'system', 'key': 'tasks', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -59,7 +59,7 @@ connect “account name” “pass word”</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['co', 'con', 'conn']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'co', 'conn']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -94,7 +94,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -223,7 +223,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -249,7 +249,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -74,7 +74,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['co', 'con', 'conn']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'co', 'conn']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -104,7 +104,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'co con conn', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -226,7 +226,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -252,7 +252,7 @@ All it does is display the connect screen.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -276,7 +276,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.extended_room.CmdExtendedRoomLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -296,7 +296,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.extended_room.CmdExtendedRoomLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

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

View file

@ -801,7 +801,7 @@ Using the command without arguments will list all current recogs.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpsystem.CmdRecog.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['recognize', 'forget']</em><a class="headerlink" href="#evennia.contrib.rpsystem.CmdRecog.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['forget', 'recognize']</em><a class="headerlink" href="#evennia.contrib.rpsystem.CmdRecog.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -828,7 +828,7 @@ Using the command without arguments will list all current recogs.</p>
<dl class="py attribute">
<dt id="evennia.contrib.rpsystem.CmdRecog.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}</em><a class="headerlink" href="#evennia.contrib.rpsystem.CmdRecog.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}</em><a class="headerlink" href="#evennia.contrib.rpsystem.CmdRecog.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -570,7 +570,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_basic.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -591,7 +591,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_basic.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -687,7 +687,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_equip.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -708,7 +708,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_equip.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -721,7 +721,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_items.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -742,7 +742,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_items.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -593,7 +593,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_magic.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -614,7 +614,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_magic.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -1020,7 +1020,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_range.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1041,7 +1041,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_range.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -79,7 +79,7 @@ such as when closing the lid and un-blinding a character.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['press', 'press button', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -108,7 +108,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -178,7 +178,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['break lid', 'smash', 'smash lid']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['smash', 'break lid', 'smash lid']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -205,7 +205,7 @@ break.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'break lid smash smash lid', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'smash break lid smash lid', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -305,7 +305,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['press', 'press button', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -334,7 +334,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -432,7 +432,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdBlindLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['get', 'l', 'feel', 'listen', 'examine', 'ex']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'examine', 'listen', 'get', 'feel', 'ex']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -458,7 +458,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdBlindLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'get l feel listen examine ex', 'category': 'general', 'key': 'look', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l examine listen get feel ex', 'category': 'general', 'key': 'look', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -492,7 +492,7 @@ shift green root up/down</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'shiftroot', 'pull', 'move']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['shiftroot', 'move', 'push', 'pull']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -528,7 +528,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdShiftRoot.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push shiftroot pull move', 'category': 'tutorialworld', 'key': 'shift', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'shiftroot move push pull', 'category': 'tutorialworld', 'key': 'shift', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -545,7 +545,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdPressButton.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push button', 'button', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['push button', 'press button', 'button']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -571,7 +571,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdPressButton.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push button button press button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -715,7 +715,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdAttack.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['hit', 'fight', 'defend', 'thrust', 'pierce', 'slash', 'stab', 'kill', 'parry', 'bash', 'chop']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['defend', 'stab', 'parry', 'fight', 'thrust', 'kill', 'pierce', 'slash', 'chop', 'bash', 'hit']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -741,7 +741,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdAttack.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hit fight defend thrust pierce slash stab kill parry bash chop', 'category': 'tutorialworld', 'key': 'attack', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'defend stab parry fight thrust kill pierce slash chop bash hit', 'category': 'tutorialworld', 'key': 'attack', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -184,7 +184,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdTutorialLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -199,7 +199,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdTutorialLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -865,7 +865,7 @@ to find something.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['search', 'feel', 'l', 'fiddle', 'feel around']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'feel', 'feel around', 'search', 'fiddle']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -893,7 +893,7 @@ random chance of eventually finding a light source.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdLookDark.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'search feel l fiddle feel around', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l feel feel around search fiddle', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -79,9 +79,28 @@ the default reserved keys.</p></li>
<dl class="py function">
<dt id="evennia.prototypes.prototypes.load_module_prototypes">
<code class="sig-prename descclassname">evennia.prototypes.prototypes.</code><code class="sig-name descname">load_module_prototypes</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#load_module_prototypes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.prototypes.prototypes.load_module_prototypes" title="Permalink to this definition"></a></dt>
<dd><p>This is called by <strong>evennia.__init__</strong> as Evennia initializes. Its important
to do this late so as to not interfere with evennia initialization.</p>
<code class="sig-prename descclassname">evennia.prototypes.prototypes.</code><code class="sig-name descname">load_module_prototypes</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">mod_or_prototypes</span></em>, <em class="sig-param"><span class="n">override</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/prototypes.html#load_module_prototypes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.prototypes.prototypes.load_module_prototypes" title="Permalink to this definition"></a></dt>
<dd><p>Load module prototypes. Also prototype-dicts passed directly to this function are considered
module prototypes (they are impossible to change) but will have a module of None.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>*mod_or_prototypes</strong> (<em>module</em><em> or </em><em>dict</em>) Each arg should be a separate module or
prototype-dict to load. If none are given, <strong>settings.PROTOTYPE_MODULES</strong> will be used.</p></li>
<li><p><strong>override</strong> (<em>bool</em><em>, </em><em>optional</em>) If prototypes should override existing ones already loaded.
Disabling this can allow for injecting prototypes into the system dynamically while
still allowing same prototype-keys to be overridden from settings (even though settings
is usually loaded before dynamic loading).</p></li>
</ul>
</dd>
</dl>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>This is called (without arguments) by <strong>evennia.__init__</strong> as Evennia initializes. Its
important to do this late so as to not interfere with evennia initialization. But it can
also be used later to add more prototypes to the library on the fly. This is requried
before a module-based prototype can be accessed by prototype-key.</p>
</div>
</dd></dl>
<dl class="py class">

View file

@ -526,6 +526,35 @@ settings here. The result will be printed to the terminal.</p>
</dl>
</dd></dl>
<dl class="py function">
<dt id="evennia.server.evennia_launcher.run_custom_commands">
<code class="sig-prename descclassname">evennia.server.evennia_launcher.</code><code class="sig-name descname">run_custom_commands</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">option</span></em>, <em class="sig-param"><span class="o">*</span><span class="n">args</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/evennia_launcher.html#run_custom_commands"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.evennia_launcher.run_custom_commands" title="Permalink to this definition"></a></dt>
<dd><p>Inject a custom option into the evennia launcher command chain.</p>
<dl class="field-list simple">
<dt class="field-odd">Parameters</dt>
<dd class="field-odd"><ul class="simple">
<li><p><strong>option</strong> (<em>str</em>) Incoming option - the first argument after <strong>evennia</strong> on
the command line.</p></li>
<li><p><strong>*args</strong> All args will passed to a found callable.__dict__</p></li>
</ul>
</dd>
<dt class="field-even">Returns</dt>
<dd class="field-even"><p><em>bool</em> If a custom command was found and handled the option.</p>
</dd>
</dl>
<p class="rubric">Notes</p>
<p>Provide new commands in settings with</p>
<blockquote>
<div><p>CUSTOM_EVENNIA_LAUNCHER_COMMANDS = {“mycmd”: “path.to.callable”, …}</p>
</div></blockquote>
<p>The callable will be passed any <strong>*args</strong> given on the command line and is expected to
handle/validate the input correctly. Use like any other evennia command option on
in the terminal/console, for example:</p>
<blockquote>
<div><p>evennia mycmd foo bar</p>
</div></blockquote>
</dd></dl>
<dl class="py function">
<dt id="evennia.server.evennia_launcher.run_menu">
<code class="sig-prename descclassname">evennia.server.evennia_launcher.</code><code class="sig-name descname">run_menu</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/server/evennia_launcher.html#run_menu"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.server.evennia_launcher.run_menu" title="Permalink to this definition"></a></dt>

View file

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

View file

@ -258,7 +258,7 @@ Text for Node2. Just go back.
&gt;: start
# node abort
## node abort
This exits the menu since there is no **## options** section.
</pre></div>
@ -940,7 +940,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['a', 'y', 'yes', '__nomatch_command', 'abort', 'no', 'n']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['y', 'a', 'no', 'n', '__nomatch_command', 'abort', 'yes']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -966,7 +966,7 @@ single question.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'a y yes __nomatch_command abort no n', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'y a no n __nomatch_command abort yes', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -75,7 +75,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['a', 'end', 'b', 'e', 'next', 'quit', 'top', 't', 'q', 'abort', 'n', 'back']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['e', 'a', 'top', 'n', 'abort', 'end', 'quit', 'next', 'q', 'back', 't', 'b']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -101,7 +101,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
<dl class="py attribute">
<dt id="evennia.utils.evmore.CmdMore.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'a end b e next quit top t q abort n back', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'e a top n abort end quit next q back t b', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -10217,6 +10217,10 @@
<li><a href="api/evennia.commands.command.html#evennia.commands.command.Command.parse">parse() (evennia.commands.command.Command method)</a>
<ul>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen.parse">(evennia.commands.default.building.CmdOpen method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport.parse">(evennia.commands.default.building.CmdTeleport method)</a>
</li>
<li><a href="api/evennia.commands.default.building.html#evennia.commands.default.building.ObjManipCommand.parse">(evennia.commands.default.building.ObjManipCommand method)</a>
</li>
<li><a href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdNick.parse">(evennia.commands.default.general.CmdNick method)</a>
@ -11219,6 +11223,8 @@
<li><a href="api/evennia.utils.utils.html#evennia.utils.utils.run_async">run_async() (in module evennia.utils.utils)</a>
</li>
<li><a href="api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.run_connect_wizard">run_connect_wizard() (in module evennia.server.evennia_launcher)</a>
</li>
<li><a href="api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.run_custom_commands">run_custom_commands() (in module evennia.server.evennia_launcher)</a>
</li>
<li><a href="api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.run_dummyrunner">run_dummyrunner() (in module evennia.server.evennia_launcher)</a>
</li>

Binary file not shown.

File diff suppressed because one or more lines are too long

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: 0e6af2ce1c5d44eeec8b730fd2f289e5
config: 68bbc71e1a7a5b9df5226cd70b5ae06a
tags: 645f666f9bcd5a90fca523b33c5a78b7

View file

@ -80,6 +80,15 @@ Bugs are reported to the Evennia <a class="reference external" href="https://git
<section id="rooms-movement-and-grid">
<h2>Rooms, movement and grid<a class="headerlink" href="#rooms-movement-and-grid" title="Permalink to this headline"></a></h2>
<p>Contribs modifying locations, movement or helping to creating rooms.</p>
<section id="xyzgrid">
<h3>XYZGrid<a class="headerlink" href="#xyzgrid" title="Permalink to this headline"></a></h3>
<p><em>Griatch 2021</em></p>
<p>Adds an XYZgrid to Evennia, with map-display and pathfinding. Created via map
strings and maintained outside of the game via Evennia launch commands.</p>
<ul class="simple">
<li><p><a class="reference internal" href="XYZGrid.html"><span class="doc">XYZGrid documentation</span></a></p></li>
</ul>
</section>
<section id="extended-room">
<h3>Extended Room<a class="headerlink" href="#extended-room" title="Permalink to this headline"></a></h3>
<p><em>Griatch 2012</em></p>
@ -348,6 +357,7 @@ want to solve the puzzles and mystery yourself).</p></li>
</ul>
</li>
<li><a class="reference internal" href="#rooms-movement-and-grid">Rooms, movement and grid</a><ul>
<li><a class="reference internal" href="#xyzgrid">XYZGrid</a></li>
<li><a class="reference internal" href="#extended-room">Extended Room</a></li>
<li><a class="reference internal" href="#map-builder">Map Builder</a></li>
<li><a class="reference internal" href="#simple-door">Simple Door</a></li>

File diff suppressed because it is too large Load diff

View file

@ -46,6 +46,7 @@
<span class="kn">import</span> <span class="nn">re</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">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span><span class="p">,</span> <span class="n">Min</span><span class="p">,</span> <span class="n">Max</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">InterruptCommand</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.locks.lockhandler</span> <span class="kn">import</span> <span class="n">LockException</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdhandler</span> <span class="kn">import</span> <span class="n">get_and_merge_cmdsets</span>
@ -1529,40 +1530,33 @@
<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">return</span> <span class="n">exit_obj</span></div>
<div class="viewcode-block" id="CmdOpen.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen.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="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="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>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</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="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;option&quot;</span><span class="p">]</span></div>
<div class="viewcode-block" id="CmdOpen.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen.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"> This is where the processing starts.</span>
<span class="sd"> Uses the ObjManipCommand.parser() for pre-processing</span>
<span class="sd"> as well as the self.create_exit() method.</span>
<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="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="n">string</span> <span class="o">=</span> <span class="s2">&quot;Usage: open &lt;new exit&gt;[;alias...][:typeclass][,&lt;return exit&gt;[;alias..][:typeclass]]] &quot;</span>
<span class="n">string</span> <span class="o">+=</span> <span class="s2">&quot;= &lt;destination&gt;&quot;</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">return</span>
<span class="c1"># We must have a location to open an exit</span>
<span class="n">location</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="n">location</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 create an exit from a None-location.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># obtain needed info from cmdline</span>
<span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
<span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span>
<span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;option&quot;</span><span class="p">]</span>
<span class="n">dest_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
<span class="c1"># first, check so the destination exists.</span>
<span class="n">destination</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">dest_name</span><span class="p">,</span> <span class="n">global_search</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">destination</span><span class="p">:</span>
<span class="k">return</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="n">exit_name</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">exit_aliases</span><span class="p">,</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,9 +1565,8 @@
<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="n">destination</span><span class="p">,</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></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>
@ -3023,28 +3016,37 @@
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:perm(teleport) or perm(Builder)&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;Building&quot;</span>
<div class="viewcode-block" id="CmdTeleport.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport.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>
<span class="sd"> Breaking out searching here to make this easier to override.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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">obj_to_teleport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</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">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</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="bp">self</span><span class="o">.</span><span class="n">obj_to_teleport</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;Did not find object to teleport.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">elif</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">destination</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="CmdTeleport.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport.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;Performs the teleport&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">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</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">rhs</span>
<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">obj_to_teleport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj_to_teleport</span>
<span class="n">destination</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">destination</span>
<span class="c1"># setting switches</span>
<span class="n">tel_quietly</span> <span class="o">=</span> <span class="s2">&quot;quiet&quot;</span> <span class="ow">in</span> <span class="n">switches</span>
<span class="n">to_none</span> <span class="o">=</span> <span class="s2">&quot;tonone&quot;</span> <span class="ow">in</span> <span class="n">switches</span>
<span class="n">to_loc</span> <span class="o">=</span> <span class="s2">&quot;loc&quot;</span> <span class="ow">in</span> <span class="n">switches</span>
<span class="k">if</span> <span class="n">to_none</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;tonone&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="c1"># teleporting to None</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="n">obj_to_teleport</span> <span class="o">=</span> <span class="n">caller</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</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">obj_to_teleport</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;Did not find object to teleport.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">destination</span><span class="p">:</span>
<span class="c1"># in this case lhs is always the object to teleport</span>
<span class="n">obj_to_teleport</span> <span class="o">=</span> <span class="n">destination</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">has_account</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;Cannot teleport a puppeted object &quot;</span>
@ -3053,57 +3055,54 @@
<span class="p">)</span>
<span class="k">return</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Teleported </span><span class="si">%s</span><span class="s2"> -&gt; None-location.&quot;</span> <span class="o">%</span> <span class="n">obj_to_teleport</span><span class="p">)</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">tel_quietly</span><span class="p">:</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <span class="s2">&quot;quiet&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">obj_to_teleport</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">%s</span><span class="s2"> teleported </span><span class="si">%s</span><span class="s2"> into nothingness.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">obj_to_teleport</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">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">return</span>
<span class="c1"># not teleporting to None location</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">to_none</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;Usage: teleport[/switches] [&lt;obj&gt; =] &lt;target_loc&gt;||home&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">rhs</span><span class="p">:</span>
<span class="n">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</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">obj_to_teleport</span> <span class="o">=</span> <span class="n">caller</span>
<span class="n">destination</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">lhs</span><span class="p">,</span> <span class="n">global_search</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">obj_to_teleport</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;Did not find object to teleport.&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">args</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;Usage: teleport[/switches] [&lt;obj&gt; =] &lt;target or (X,Y,Z)&gt;||home&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">destination</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;Destination not found.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">to_loc</span><span class="p">:</span>
<span class="k">if</span> <span class="s2">&quot;loc&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">destination</span> <span class="o">=</span> <span class="n">destination</span><span class="o">.</span><span class="n">location</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">destination</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;Destination has no location.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">destination</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 can&#39;t teleport an object inside of itself!&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">destination</span><span class="o">.</span><span class="n">location</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 can&#39;t teleport an object inside something it holds!&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <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="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="si">%s</span><span class="s2"> is already at </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj_to_teleport</span><span class="p">,</span> <span class="n">destination</span><span class="p">))</span>
<span class="k">return</span>
<span class="n">use_destination</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="s2">&quot;intoexit&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">use_destination</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># try the teleport</span>
<span class="k">if</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="n">tel_quietly</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="n">use_destination</span>
<span class="p">):</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="c1"># teleporting from none-location</span>
<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="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="s2">&quot;Teleported to </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="n">destination</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>
<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="s2">&quot;Teleported </span><span class="si">%s</span><span class="s2"> -&gt; </span><span class="si">%s</span><span class="s2">.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj_to_teleport</span><span class="p">,</span> <span class="n">destination</span><span class="p">))</span></div></div>
<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"> -&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">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="s2">&quot;Teleportation failed.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdScript"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdScript">[docs]</a><span class="k">class</span> <span class="nc">CmdScript</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>

View file

@ -125,7 +125,10 @@
<span class="n">target</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="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="p">:</span>
<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="n">caller</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">target</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></div></div>
<span class="n">desc</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">target</span><span class="p">)</span>
<span class="c1"># add the type=look to the outputfunc to make it</span>
<span class="c1"># easy to separate this output in client.</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">desc</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></div></div>
<div class="viewcode-block" id="CmdNick"><a class="viewcode-back" href="../../../../api/evennia.commands.default.general.html#evennia.commands.default.general.CmdNick">[docs]</a><span class="k">class</span> <span class="nc">CmdNick</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>

View file

@ -649,8 +649,8 @@
<div class="viewcode-block" id="TestCmdTasks.test_active_task"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_active_task">[docs]</a> <span class="k">def</span> <span class="nf">test_active_task</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="s1">&#39;&#39;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">ptrn</span> <span class="ow">in</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;KWARGS&#39;</span><span class="p">,</span> <span class="s1">&#39;persisten&#39;</span><span class="p">,</span>
<span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+/\d+/\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:\d+\:\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;ms\:\d+&#39;</span><span class="p">,</span> <span class="s1">&#39;func_test&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="k">for</span> <span class="n">ptrn</span> <span class="ow">in</span> <span class="p">(</span><span class="s1">&#39;Task ID&#39;</span><span class="p">,</span> <span class="s1">&#39;Completion&#39;</span><span class="p">,</span> <span class="s1">&#39;Date&#39;</span><span class="p">,</span> <span class="s1">&#39;Function&#39;</span><span class="p">,</span> <span class="s1">&#39;KWARGS&#39;</span><span class="p">,</span> <span class="s1">&#39;persisten&#39;</span><span class="p">,</span>
<span class="s1">&#39;1&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+/\d+/\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\d+\:\d+&#39;</span><span class="p">,</span> <span class="sa">r</span><span class="s1">&#39;\:\d+&#39;</span><span class="p">,</span> <span class="s1">&#39;func_test&#39;</span><span class="p">,</span> <span class="s1">&#39;</span><span class="si">{}</span><span class="s1">&#39;</span><span class="p">,</span>
<span class="s1">&#39;False&#39;</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="n">ptrn</span><span class="p">)</span></div>
@ -663,18 +663,18 @@
<div class="viewcode-block" id="TestCmdTasks.test_pause_unpause"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_pause_unpause">[docs]</a> <span class="k">def</span> <span class="nf">test_pause_unpause</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># test pause</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/pause </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, pause task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Pause task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">task</span><span class="o">.</span><span class="n">paused</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">timedelay</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># test unpause</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/unpause </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</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">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, unpause task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Unpause task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="c1"># verify task continues after unpause</span>
<span class="bp">self</span><span class="o">.</span><span class="n">task_handler</span><span class="o">.</span><span class="n">clock</span><span class="o">.</span><span class="n">advance</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
@ -682,25 +682,25 @@
<div class="viewcode-block" id="TestCmdTasks.test_do_task"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_do_task">[docs]</a> <span class="k">def</span> <span class="nf">test_do_task</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/do_task </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, do_task task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Do_task task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_remove"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_remove">[docs]</a> <span class="k">def</span> <span class="nf">test_remove</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/remove </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, remove task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Remove task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">task</span><span class="o">.</span><span class="n">exists</span><span class="p">())</span></div>
<div class="viewcode-block" id="TestCmdTasks.test_call"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_call">[docs]</a> <span class="k">def</span> <span class="nf">test_call</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/call </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, call task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Call task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</span><span class="p">)</span>
<span class="c1"># make certain the task is still active</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">task</span><span class="o">.</span><span class="n">active</span><span class="p">())</span>
@ -710,9 +710,9 @@
<div class="viewcode-block" id="TestCmdTasks.test_cancel"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestCmdTasks.test_cancel">[docs]</a> <span class="k">def</span> <span class="nf">test_cancel</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">args</span> <span class="o">=</span> <span class="sa">f</span><span class="s1">&#39;/cancel </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">get_id</span><span class="p">()</span><span class="si">}</span><span class="s1">&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Yes or No, cancel task 1? With completion date&#39;</span>
<span class="n">wanted_msg</span> <span class="o">=</span> <span class="s1">&#39;Cancel task 1 with completion date&#39;</span>
<span class="n">cmd_result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">system</span><span class="o">.</span><span class="n">CmdTasks</span><span class="p">(),</span> <span class="n">args</span><span class="p">,</span> <span class="n">wanted_msg</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39;\. Deferring function func_test_cmd_tasks\.&#39;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertRegex</span><span class="p">(</span><span class="n">cmd_result</span><span class="p">,</span> <span class="s1">&#39; \(func_test_cmd_tasks\) &#39;</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">execute_cmd</span><span class="p">(</span><span class="s1">&#39;y&#39;</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">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">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">active</span><span class="p">())</span></div>

View file

@ -0,0 +1,579 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.xyzgrid.commands &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.commands</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.contrib.xyzgrid.commands</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">XYZ-aware commands</span>
<span class="sd">Just add the XYZGridCmdSet to the default character cmdset to override</span>
<span class="sd">the commands with XYZ-aware equivalents.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="n">namedtuple</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</span> <span class="kn">import</span> <span class="n">InterruptCommand</span>
<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>
<span class="kn">from</span> <span class="nn">evennia.commands.default</span> <span class="kn">import</span> <span class="n">building</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.xyzgrid.xyzroom</span> <span class="kn">import</span> <span class="n">XYZRoom</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.xyzgrid.xyzgrid</span> <span class="kn">import</span> <span class="n">get_xyzgrid</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">ansi</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">list_to_string</span><span class="p">,</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">delay</span>
<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="c1"># temporary store of goto/path data when using the auto-stepper</span>
<span class="n">PathData</span> <span class="o">=</span> <span class="n">namedtuple</span><span class="p">(</span><span class="s2">&quot;PathData&quot;</span><span class="p">,</span> <span class="p">(</span><span class="s2">&quot;target&quot;</span><span class="p">,</span> <span class="s2">&quot;xymap&quot;</span><span class="p">,</span> <span class="s2">&quot;directions&quot;</span><span class="p">,</span> <span class="s2">&quot;step_sequence&quot;</span><span class="p">,</span> <span class="s2">&quot;task&quot;</span><span class="p">))</span>
<div class="viewcode-block" id="CmdXYZTeleport"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.xyzgrid.commands.CmdXYZTeleport">[docs]</a><span class="k">class</span> <span class="nc">CmdXYZTeleport</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> teleport object to another location</span>
<span class="sd"> Usage:</span>
<span class="sd"> tel/switch [&lt;object&gt; to||=] &lt;target location&gt;</span>
<span class="sd"> tel/switch [&lt;object&gt; to||=] (X,Y[,Z])</span>
<span class="sd"> Examples:</span>
<span class="sd"> tel Limbo</span>
<span class="sd"> tel/quiet box = Limbo</span>
<span class="sd"> tel/tonone box</span>
<span class="sd"> tel (3, 3, the small cave)</span>
<span class="sd"> tel (4, 1) # on the same map</span>
<span class="sd"> tel/map Z|mapname</span>
<span class="sd"> Switches:</span>
<span class="sd"> quiet - don&#39;t echo leave/arrive messages to the source/target</span>
<span class="sd"> locations for the move.</span>
<span class="sd"> intoexit - if target is an exit, teleport INTO</span>
<span class="sd"> the exit object instead of to its destination</span>
<span class="sd"> tonone - if set, teleport the object to a None-location. If this</span>
<span class="sd"> switch is set, &lt;target location&gt; is ignored.</span>
<span class="sd"> Note that the only way to retrieve</span>
<span class="sd"> an object from a None location is by direct #dbref</span>
<span class="sd"> reference. A puppeted object cannot be moved to None.</span>
<span class="sd"> loc - teleport object to the target&#39;s location instead of its contents</span>
<span class="sd"> map - show coordinate map of given Zcoord/mapname.</span>
<span class="sd"> Teleports an object somewhere. If no object is given, you yourself are</span>
<span class="sd"> teleported to the target location. If (X,Y) or (X,Y,Z) coordinates</span>
<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>
<span class="k">if</span> <span class="n">Z</span><span class="p">:</span>
<span class="c1"># Z was specified</span>
<span class="n">Z</span> <span class="o">=</span> <span class="n">Z</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="c1"># use current location&#39;s Z, if it exists</span>
<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="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>
<span class="c1"># search by coordinate</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="nb">str</span><span class="p">(</span><span class="n">X</span><span class="p">)</span><span class="o">.</span><span class="n">strip</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="o">.</span><span class="n">strip</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="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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="k">except</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">DoesNotExist</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;Found no target XYZRoom at (</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="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<div class="viewcode-block" id="CmdXYZTeleport.parse"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.xyzgrid.commands.CmdXYZTeleport.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="n">default_cmds</span><span class="o">.</span><span class="n">MuxCommand</span><span class="o">.</span><span class="n">parse</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">obj_to_teleport</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">if</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">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</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="bp">self</span><span class="o">.</span><span class="n">obj_to_teleport</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;Did not find object to teleport.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</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="c1"># search by (X,Y) or (X,Y,Z)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_search_by_xyz</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="k">else</span><span class="p">:</span>
<span class="c1"># fallback to regular search by name/alias</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</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="bp">self</span><span class="o">.</span><span class="n">_search_by_xyz</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</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">destination</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdXYZOpen"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.xyzgrid.commands.CmdXYZOpen">[docs]</a><span class="k">class</span> <span class="nc">CmdXYZOpen</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdOpen</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> open a new exit from the current room</span>
<span class="sd"> Usage:</span>
<span class="sd"> open &lt;new exit&gt;[;alias;..][:typeclass] [,&lt;return exit&gt;[;alias;..][:typeclass]]] = &lt;destination&gt;</span>
<span class="sd"> open &lt;new exit&gt;[;alias;..][:typeclass] [,&lt;return exit&gt;[;alias;..][:typeclass]]] = (X,Y,Z)</span>
<span class="sd"> Handles the creation of exits. If a destination is given, the exit</span>
<span class="sd"> will point there. The destination can also be given as an (X,Y,Z) coordinate on the</span>
<span class="sd"> XYZGrid - this command is used to link non-grid rooms to the grid and vice-versa.</span>
<span class="sd"> The &lt;return exit&gt; argument sets up an exit at the destination leading back to the current room.</span>
<span class="sd"> Apart from (X,Y,Z) coordinate, destination name can be given both as a #dbref and a name, if</span>
<span class="sd"> that name is globally unique.</span>
<span class="sd"> Examples:</span>
<span class="sd"> open kitchen = Kitchen</span>
<span class="sd"> open north, south = Town Center</span>
<span class="sd"> open cave mouth;cave = (3, 4, the small cave)</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="CmdXYZOpen.parse"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.xyzgrid.commands.CmdXYZOpen.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="n">building</span><span class="o">.</span><span class="n">ObjManipCommand</span><span class="o">.</span><span class="n">parse</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">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="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>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="k">if</span> <span class="nb">all</span><span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</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="c1"># search by (X,Y) or (X,Y,Z)</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="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;,&quot;</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">Z</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;A full (X,Y,Z) coordinate must be given for the destination.&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="n">Z</span> <span class="o">=</span> <span class="n">Z</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="c1"># search by coordinate</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="nb">str</span><span class="p">(</span><span class="n">X</span><span class="p">)</span><span class="o">.</span><span class="n">strip</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="o">.</span><span class="n">strip</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="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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="k">except</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">DoesNotExist</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;Found no target XYZRoom at (</span><span class="si">{X}</span><span class="s2">,</span><span class="si">{Y}</span><span class="s2">,</span><span class="si">{Y}</span><span class="s2">).&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="c1"># regular search query</span>
<span class="bp">self</span><span class="o">.</span><span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</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="bp">self</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
<span class="k">raise</span> <span class="n">InterruptCommand</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;name&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;aliases&quot;</span><span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">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">0</span><span class="p">][</span><span class="s2">&quot;option&quot;</span><span class="p">]</span></div></div>
<div class="viewcode-block" id="CmdGoto"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.xyzgrid.commands.CmdGoto">[docs]</a><span class="k">class</span> <span class="nc">CmdGoto</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"> Go to a named location in this area via the shortest path.</span>
<span class="sd"> Usage:</span>
<span class="sd"> path &lt;location&gt; - find shortest path to target location (don&#39;t move)</span>
<span class="sd"> goto &lt;location&gt; - auto-move to target location, using shortest path</span>
<span class="sd"> path - show current target location and shortest path</span>
<span class="sd"> goto - abort current goto, otherwise show current path</span>
<span class="sd"> path clear - clear current path</span>
<span class="sd"> Finds the shortest route to a location in your current area and</span>
<span class="sd"> can then automatically walk you there.</span>
<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>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:all()&quot;</span>
<span class="c1"># how quickly to step (seconds)</span>
<span class="n">auto_step_delay</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">default_xyz_path_interrupt_msg</span> <span class="o">=</span> <span class="s2">&quot;Pathfinding interrupted here.&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">xyz_start</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="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>
<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="c1"># search by coordinate</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="nb">str</span><span class="p">(</span><span class="n">X</span><span class="p">)</span><span class="o">.</span><span class="n">strip</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="o">.</span><span class="n">strip</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="o">.</span><span class="n">strip</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</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">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="k">except</span> <span class="n">XYZRoom</span><span class="o">.</span><span class="n">DoesNotExist</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;Could not find a room at (</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">) (Z=</span><span class="si">{</span><span class="n">Z</span><span class="si">}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">None</span>
<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="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="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="k">if</span> <span class="n">target</span><span class="p">:</span>
<span class="c1"># start/replace an old path if we provide the data for it</span>
<span class="k">if</span> <span class="n">path_data</span> <span class="ow">and</span> <span class="n">path_data</span><span class="o">.</span><span class="n">task</span> <span class="ow">and</span> <span class="n">path_data</span><span class="o">.</span><span class="n">task</span><span class="o">.</span><span class="n">active</span><span class="p">():</span>
<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="k">if</span> <span class="n">step</span> <span class="ow">and</span> <span class="n">path_data</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="k">try</span><span class="p">:</span>
<span class="n">direction</span> <span class="o">=</span> <span class="n">path_data</span><span class="o">.</span><span class="n">directions</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="n">current_node</span> <span class="o">=</span> <span class="n">path_data</span><span class="o">.</span><span class="n">step_sequence</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="n">first_link</span> <span class="o">=</span> <span class="n">path_data</span><span class="o">.</span><span class="n">step_sequence</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">except</span> <span class="ne">IndexError</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;Target reached.&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="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="kc">None</span>
<span class="k">return</span>
<span class="c1"># verfy our current location against the expected location</span>
<span class="n">expected_xyz</span> <span class="o">=</span> <span class="p">(</span><span class="n">current_node</span><span class="o">.</span><span class="n">X</span><span class="p">,</span> <span class="n">current_node</span><span class="o">.</span><span class="n">Y</span><span class="p">,</span> <span class="n">current_node</span><span class="o">.</span><span class="n">Z</span><span class="p">)</span>
<span class="n">location</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">xyz_start</span> <span class="o">=</span> <span class="n">location</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="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="kc">None</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Goto aborted - outside of area.&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="k">return</span>
<span class="k">if</span> <span class="n">xyz_start</span> <span class="o">!=</span> <span class="n">expected_xyz</span><span class="p">:</span>
<span class="c1"># we are not where we expected to be (maybe the user moved</span>
<span class="c1"># manually) - we must recalculate the path to target</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Path changed - recalculating (&#39;goto&#39; to abort)&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="k">try</span><span class="p">:</span>
<span class="n">xyz_end</span> <span class="o">=</span> <span class="n">path_data</span><span class="o">.</span><span class="n">target</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="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="kc">None</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Goto aborted - target outside of area.&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="k">return</span>
<span class="k">if</span> <span class="n">xyz_start</span><span class="p">[</span><span class="mi">2</span><span class="p">]</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="c1"># can&#39;t go to another map</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="kc">None</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Goto aborted - target outside of area.&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="k">return</span>
<span class="c1"># recalculate path</span>
<span class="n">xy_start</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">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">path_data</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="c1"># try again with this path, rebuilding the data</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">direction</span> <span class="o">=</span> <span class="n">directions</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="n">current_node</span> <span class="o">=</span> <span class="n">step_sequence</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="n">first_link</span> <span class="o">=</span> <span class="n">step_sequence</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">except</span> <span class="ne">IndexError</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;Target reached.&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="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="kc">None</span>
<span class="k">return</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">path_data</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">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="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>
<span class="c1"># pop any extra links up until the next node - these are</span>
<span class="c1"># not useful when dealing with exits</span>
<span class="k">while</span> <span class="n">step_sequence</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">interrupt_node_or_link</span> <span class="ow">and</span> <span class="n">step_sequence</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">interrupt_path</span><span class="p">:</span>
<span class="n">interrupt_node_or_link</span> <span class="o">=</span> <span class="n">step_sequence</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">step_sequence</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="s2">&quot;node_index&quot;</span><span class="p">):</span>
<span class="k">break</span>
<span class="n">step_sequence</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="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">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>
<span class="c1"># extra safety measure to avoid trying to walk over and over</span>
<span class="c1"># if there&#39;s something wrong with the exit&#39;s name</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;No exit &#39;</span><span class="si">{</span><span class="n">exit_name</span><span class="si">}</span><span class="s2">&#39; found at current location. Aborting goto.&quot;</span><span class="p">)</span>
<span class="n">caller</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">xy_path_data</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">interrupt_node_or_link</span><span class="p">:</span>
<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="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="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>
<span class="c1"># do the actual move - we use the command to allow for more obvious overrides</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="c1"># namedtuples are unmutables, so we recreate and store</span>
<span class="c1"># with the new task</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">path_data</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">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="p">)</span>
<div class="viewcode-block" id="CmdGoto.func"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Implement command</span>
<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="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>
<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="p">:</span>
<span class="k">if</span> <span class="n">path_data</span><span class="p">:</span>
<span class="n">target_name</span> <span class="o">=</span> <span class="n">path_data</span><span class="o">.</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="n">task</span> <span class="o">=</span> <span class="n">path_data</span><span class="o">.</span><span class="n">task</span>
<span class="k">if</span> <span class="n">goto_mode</span><span class="p">:</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="n">task</span><span class="o">.</span><span class="n">cancel</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;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">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>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Usage: goto|path [&lt;location&gt;]&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">goto_mode</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="o">==</span> <span class="s2">&quot;clear&quot;</span> <span class="ow">and</span> <span class="n">path_data</span><span class="p">:</span>
<span class="c1"># in case there is a target location &#39;clear&#39;, this is only</span>
<span class="c1"># used if path data already exists.</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="kc">None</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Cleared goto-path.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># find target</span>
<span class="n">xyzgrid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">xyz_start</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">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;Cannot path-find since the current location is not on the grid.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">allow_xyz_query</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">check_lockstring</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">&quot;perm(Builder)&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">allow_xyz_query</span> <span class="ow">and</span> <span class="nb">all</span><span class="p">(</span><span class="n">char</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="k">for</span> <span class="n">char</span> <span class="ow">in</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="c1"># search by (X,Y)</span>
<span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_by_xyz</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">xyz_start</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># search by normal key/alias</span>
<span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_by_key_and_alias</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">xyz_start</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="p">:</span>
<span class="k">return</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">xyz_end</span> <span class="o">=</span> <span class="n">target</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;Target location is not on the grid and cannot be auto-walked to.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<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">xyz_start</span><span class="p">[</span><span class="mi">2</span><span class="p">])</span>
<span class="c1"># we only need the xy coords once we have the map</span>
<span class="n">xy_start</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">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="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>
<div class="viewcode-block" id="CmdMap"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Show a map of an area</span>
<span class="sd"> Usage:</span>
<span class="sd"> map [Zcoord]</span>
<span class="sd"> map list</span>
<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>
<div class="viewcode-block" id="CmdMap.func"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.xyzgrid.commands.CmdMap.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;Implement command&quot;&quot;&quot;</span>
<span class="n">xyzgrid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<span class="n">Z</span> <span class="o">=</span> <span class="kc">None</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="p">:</span>
<span class="c1"># show current area&#39;s map</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">try</span><span class="p">:</span>
<span class="n">xyz</span> <span class="o">=</span> <span class="n">location</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;Your current location is not on the grid.&quot;</span><span class="p">)</span>
<span class="k">return</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>
<span class="k">elif</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="o">==</span> <span class="s2">&quot;list&quot;</span><span class="p">:</span>
<span class="n">xymaps</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">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="k">for</span> <span class="n">xymap</span> <span class="ow">in</span> <span class="n">xyzgrid</span><span class="o">.</span><span class="n">all_maps</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;Maps (Z coords) on the grid:</span><span class="se">\n</span><span class="s2"> |w</span><span class="si">{</span><span class="n">xymaps</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">else</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">args</span>
<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="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>
<div class="viewcode-block" id="XYZGridCmdSet"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.commands.html#evennia.contrib.xyzgrid.commands.XYZGridCmdSet">[docs]</a><span class="k">class</span> <span class="nc">XYZGridCmdSet</span><span class="p">(</span><span class="n">CmdSet</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<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.xyzgrid.commands.html#evennia.contrib.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>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">CmdXYZTeleport</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">CmdXYZOpen</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">CmdGoto</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">CmdMap</span><span class="p">())</span></div></div>
</pre></div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="commands.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.commands</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -0,0 +1,380 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.xyzgrid.example &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.example</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.contrib.xyzgrid.example</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Example xymaps to use with the XYZgrid contrib. Build outside of the game using</span>
<span class="sd">the `evennia xyzgrid` launcher command.</span>
<span class="sd">First add the launcher extension in your mygame/server/conf/settings.py:</span>
<span class="sd"> EXTRA_LAUNCHER_COMMANDS[&#39;xyzgrid&#39;] = &#39;evennia.contrib.xyzgrid.launchcmd.xyzcommand&#39;</span>
<span class="sd">Then</span>
<span class="sd"> evennia xyzgrid init</span>
<span class="sd"> evennia xyzgrid add evennia.contrib.xyzgrid.map_example</span>
<span class="sd"> evennia xyzgrid build</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.xyzgrid</span> <span class="kn">import</span> <span class="n">xymap_legend</span>
<span class="c1"># default prototype parent. It&#39;s important that</span>
<span class="c1"># the typeclass inherits from the XYZRoom (or XYZExit)</span>
<span class="c1"># if adding the evennia.contrib.xyzgrid.prototypes to</span>
<span class="c1"># settings.PROTOTYPE_MODULES, one could just set the</span>
<span class="c1"># prototype_parent to &#39;xyz_room&#39; and &#39;xyz_exit&#39; respectively</span>
<span class="c1"># instead.</span>
<span class="n">PARENT</span> <span class="o">=</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="s2">&quot;prototype_key&quot;</span><span class="p">:</span> <span class="s2">&quot;xyzmap_room_map1&quot;</span><span class="p">,</span>
<span class="s2">&quot;typeclass&quot;</span><span class="p">:</span> <span class="s2">&quot;evennia.contrib.xyzgrid.xyzroom.XYZRoom&quot;</span><span class="p">,</span>
<span class="s2">&quot;desc&quot;</span><span class="p">:</span> <span class="s2">&quot;An empty room.&quot;</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># ---------------------------------------- map1</span>
<span class="c1"># The large tree</span>
<span class="c1">#</span>
<span class="c1"># this exemplifies the various map symbols</span>
<span class="c1"># but is not heavily prototyped</span>
<span class="n">MAP1</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2"> 1</span>
<span class="s2"> + 0 1 2 3 4 5 6 7 8 9 0</span>
<span class="s2"> 8 #-------#-#-------I</span>
<span class="s2"> \ /</span>
<span class="s2"> 7 #-#---# t-#</span>
<span class="s2"> |\ |</span>
<span class="s2"> 6 #i#-#b--#-t</span>
<span class="s2"> | |</span>
<span class="s2"> 5 o-#---#</span>
<span class="s2"> \ /</span>
<span class="s2"> 4 o---#-#</span>
<span class="s2"> / d</span>
<span class="s2"> 3 #-----+-------#</span>
<span class="s2"> | d</span>
<span class="s2"> 2 | |</span>
<span class="s2"> v u</span>
<span class="s2"> 1 #---#&gt;#-#</span>
<span class="s2"> /</span>
<span class="s2"> 0 #-T</span>
<span class="s2"> + 0 1 2 3 4 5 6 7 8 9 0</span>
<span class="s2"> 1</span>
<span class="s2">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="TransitionToCave"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.example.html#evennia.contrib.xyzgrid.example.TransitionToCave">[docs]</a><span class="k">class</span> <span class="nc">TransitionToCave</span><span class="p">(</span><span class="n">xymap_legend</span><span class="o">.</span><span class="n">TransitionMapNode</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A transition from &#39;the large tree&#39; to &#39;the small cave&#39; map. This node is never spawned</span>
<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="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="c1"># link coordinates to rooms</span>
<span class="n">PROTOTYPES_MAP1</span> <span class="o">=</span> <span class="p">{</span>
<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="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="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="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="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="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="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="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="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="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="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;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 dark passage into the underworld.&quot;</span>
<span class="p">},</span>
<span class="p">}</span>
<span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">PROTOTYPES_MAP1</span><span class="o">.</span><span class="n">values</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">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="p">}</span>
<span class="c1"># -------------------------------------- map2</span>
<span class="c1"># The small cave</span>
<span class="c1"># this gives prototypes for every room</span>
<span class="n">MAP2</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">&quot;&quot;&quot;</span>
<span class="s2">+ 0 1 2 3</span>
<span class="s2">3 #-#-#</span>
<span class="s2"> |x|</span>
<span class="s2">2 #-#-#</span>
<span class="s2"> | \</span>
<span class="s2">1 #---#</span>
<span class="s2"> | /</span>
<span class="s2">0 T-#-#</span>
<span class="s2">+ 0 1 2 3</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="c1"># custom map node</span>
<div class="viewcode-block" id="TransitionToLargeTree"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.example.html#evennia.contrib.xyzgrid.example.TransitionToLargeTree">[docs]</a><span class="k">class</span> <span class="nc">TransitionToLargeTree</span><span class="p">(</span><span class="n">xymap_legend</span><span class="o">.</span><span class="n">TransitionMapNode</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A transition from &#39;the small cave&#39; to &#39;the large tree&#39; map. This node is never spawned</span>
<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="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="c1"># prototypes for specific locations</span>
<span class="n">PROTOTYPES_MAP2</span> <span class="o">=</span> <span class="p">{</span>
<span class="c1"># node/rooms prototype overrides</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="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="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="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="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="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="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="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="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="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="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="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="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="c1"># this is required by the prototypes, but we add it all at once so we don&#39;t</span>
<span class="c1"># need to add it to every line above</span>
<span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">PROTOTYPES_MAP2</span><span class="o">.</span><span class="n">values</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">PARENT</span>
<span class="n">XYMAP_DATA_MAP2</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;map&quot;</span><span class="p">:</span> <span class="n">MAP2</span><span class="p">,</span>
<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="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>
</pre></div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="example.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.example</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -0,0 +1,517 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.xyzgrid.launchcmd &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.launchcmd</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.contrib.xyzgrid.launchcmd</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Custom Evennia launcher command option for maintaining the grid in a separate process than the main</span>
<span class="sd">server (since this can be slow).</span>
<span class="sd">To use, add to the settings:</span>
<span class="sd">::</span>
<span class="sd"> EXTRA_LAUNCHER_COMMANDS.update({&#39;xyzgrid&#39;: &#39;evennia.contrib.xyzgrid.launchcmd.xyzcommand&#39;})</span>
<span class="sd">You should now be able to do</span>
<span class="sd">::</span>
<span class="sd"> evennia xyzgrid &lt;options&gt;</span>
<span class="sd">Use `evennia xyzgrid help` for usage help.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">os.path</span> <span class="kn">import</span> <span class="n">join</span> <span class="k">as</span> <span class="n">pathjoin</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</span> <span class="kn">import</span> <span class="n">ansi</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.xyzgrid.xyzgrid</span> <span class="kn">import</span> <span class="n">get_xyzgrid</span>
<span class="n">_HELP_SHORT</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">evennia xyzgrid help | list | init | add | spawn | initpath | delete [&lt;options&gt;]</span>
<span class="s2"> Manages the XYZ grid. Use &#39;xyzgrid help &lt;option&gt;&#39; for documentation.</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_HELP_HELP</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">evennia xyzgrid &lt;command&gt; [&lt;options&gt;]</span>
<span class="s2">Manages the XYZ grid.</span>
<span class="s2">help &lt;command&gt; - get help about each command:</span>
<span class="s2"> list - show list</span>
<span class="s2"> init - initialize grid (only one time)</span>
<span class="s2"> add - add new maps to grid</span>
<span class="s2"> spawn - spawn added maps into actual db-rooms/exits</span>
<span class="s2"> initpath - (re)creates pathfinder matrices</span>
<span class="s2"> delete - delete part or all of grid</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_HELP_LIST</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">list</span>
<span class="s2"> Lists the map grid structure and any loaded maps.</span>
<span class="s2">list &lt;Z|mapname&gt;</span>
<span class="s2"> Display the given XYmap in more detail. Also &#39;show&#39; works. Use quotes around</span>
<span class="s2"> map-names with spaces.</span>
<span class="s2">Examples:</span>
<span class="s2"> evennia xyzgrid list</span>
<span class="s2"> evennia xyzgrid list mymap</span>
<span class="s2"> evennia xyzgrid list &quot;the small cave&quot;</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_HELP_INIT</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">init</span>
<span class="s2"> First start of the grid. This will create the XYZGrid global script. No maps are loaded yet!</span>
<span class="s2"> It&#39;s safe to run this command multiple times; the grid will only be initialized once.</span>
<span class="s2">Example:</span>
<span class="s2"> evennia xyzgrid init</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_HELP_ADD</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">add &lt;path.to.xymap.module&gt; [&lt;path&gt; &lt;path&gt;,...]</span>
<span class="s2"> Add path(s) to one or more modules containing XYMap definitions. The module will be parsed</span>
<span class="s2"> for</span>
<span class="s2"> - a XYMAP_DATA - a dict on this form:</span>
<span class="s2"> {&quot;map&quot;: mapstring, &quot;zcoord&quot;: mapname/zcoord, &quot;legend&quot;: dict, &quot;prototypes&quot;: dict}</span>
<span class="s2"> describing one single XYmap, or</span>
<span class="s2"> - a XYMAP_DATA_LIST - a list of multiple dicts on the XYMAP_DATA form. This allows for</span>
<span class="s2"> embedding multiple maps in the same module. See evennia/contrib/xyzgrid/example.py</span>
<span class="s2"> for an example of how this looks.</span>
<span class="s2"> Note that adding a map does *not* spawn it. If maps are linked to one another, you should</span>
<span class="s2"> add all linked maps before running &#39;spawn&#39;, or you&#39;ll get errors when creating transitional</span>
<span class="s2"> exits between maps.</span>
<span class="s2">Examples:</span>
<span class="s2"> evennia xyzgrid add evennia.contrib.xyzgrid.example</span>
<span class="s2"> evennia xyzgrid add world.mymap1 world.mymap2 world.mymap3</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_HELP_SPAWN</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">spawn</span>
<span class="s2"> spawns/updates the entire database grid based on the added maps. For a new grid, this will</span>
<span class="s2"> spawn all new rooms/exits (and may take a good while!). For updating, rooms may be</span>
<span class="s2"> removed/spawned if a map changed since the last spawn.</span>
<span class="s2">spawn &quot;(X,Y,Z|mapname)&quot;</span>
<span class="s2"> spawns/updates only a part of the grid. Remember the quotes around the coordinate (this</span>
<span class="s2"> is mostly because shells don&#39;t like them)! Use &#39;*&#39; as a wild card for XY coordinates.</span>
<span class="s2"> This should usually only be used if the full grid has already been built once - otherwise</span>
<span class="s2"> inter-map transitions may fail! Z is the name/z-coordinate of the map to spawn.</span>
<span class="s2">Examples:</span>
<span class="s2"> evennia xyzgrid spawn - spawn all</span>
<span class="s2"> evennia xyzgrid &quot;(*, *, mymap1)&quot; - spawn everything of map/zcoord mymap1</span>
<span class="s2"> evennia xyzgrid &quot;(12, 5, mymap1)&quot; - spawn only coordinate (12, 5) on map/zcoord mymap1</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_HELP_INITPATH</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">initpath</span>
<span class="s2"> Recreates the pathfinder matrices for the entire grid. These are used for all shortest-path</span>
<span class="s2"> calculations. The result will be cached to disk (in mygame/server/.cache/). If not run, each</span>
<span class="s2"> map will run this automatically first time it&#39;s used. Running this will always force to</span>
<span class="s2"> respawn the cache.</span>
<span class="s2">initpath Z|mapname</span>
<span class="s2"> recreate the pathfinder matrix for a specific map only. Z is the name/z-coordinate of the</span>
<span class="s2"> map. If the map name has spaces in it, use quotes.</span>
<span class="s2">Examples:</span>
<span class="s2"> evennia xyzgrid initpath</span>
<span class="s2"> evennia xyzgrid initpath mymap1</span>
<span class="s2"> evennia xyzgrid initpath &quot;the small cave&quot;</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_HELP_DELETE</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span>
<span class="s2">delete</span>
<span class="s2"> WARNING: This will delete the entire xyz-grid (all maps), and *all* rooms/exits built to</span>
<span class="s2"> match it (they serve no purpose without the grid). You will be asked to confirm before</span>
<span class="s2"> continuing with this operation.</span>
<span class="s2">delete Z|mapname</span>
<span class="s2"> Remove a previously added XYmap with the name/z-coordinate Z. If the map was built, this</span>
<span class="s2"> will also wipe all its spawned rooms/exits. You will be asked to confirm before continuing</span>
<span class="s2"> with this operation. Use quotes if the Z/mapname contains spaces.</span>
<span class="s2">Examples:</span>
<span class="s2"> evennia xyzgrid delete</span>
<span class="s2"> evennia xyzgrid delete mymap1</span>
<span class="s2"> evennia xyzgrid delete &quot;the small cave&quot;</span>
<span class="s2">&quot;&quot;&quot;</span>
<span class="n">_TOPICS_MAP</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;list&quot;</span><span class="p">:</span> <span class="n">_HELP_LIST</span><span class="p">,</span>
<span class="s2">&quot;init&quot;</span><span class="p">:</span> <span class="n">_HELP_INIT</span><span class="p">,</span>
<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="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>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">suboptions</span><span class="p">:</span>
<span class="n">topic</span> <span class="o">=</span> <span class="n">_HELP_HELP</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">topic</span> <span class="o">=</span> <span class="n">_TOPICS_MAP</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">suboptions</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">_HELP_HELP</span><span class="p">)</span>
<span class="nb">print</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="k">def</span> <span class="nf">_option_list</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"> List/view grid.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">xyzgrid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<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>
<span class="k">if</span> <span class="ow">not</span> <span class="n">xymap_data</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;The XYZgrid is currently empty. Use &#39;add&#39; to add paths to your map data.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">suboptions</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;XYMaps stored in grid:&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">zcoord</span><span class="p">,</span> <span class="n">xymap</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">xymap_data</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="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="nb">print</span><span class="p">(</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="k">return</span>
<span class="n">zcoord</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="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">zcoord</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="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">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>
<span class="k">if</span> <span class="ow">not</span> <span class="n">nrooms</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.&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="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="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;</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="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>
<span class="n">legend</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">key</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="vm">__doc__</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;Legend (all elements may not be present on map):</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">legend</span><span class="p">))</span>
<span class="k">def</span> <span class="nf">_option_init</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"> Initialize a new grid. Will fail if a Grid already exists.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">grid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;The grid is initalized as the Script &#39;</span><span class="si">{</span><span class="n">grid</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39;(</span><span class="si">{</span><span class="n">grid</span><span class="o">.</span><span class="n">dbref</span><span class="si">}</span><span class="s2">)&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_option_add</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"> Add one or more map to the grid. Supports `add path,path,path,...`</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">grid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<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>
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">suboptions</span><span class="p">:</span>
<span class="n">maps</span> <span class="o">=</span> <span class="n">grid</span><span class="o">.</span><span class="n">maps_from_module</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">maps</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;No maps found with the path </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">.</span><span class="se">\n</span><span class="s2">Separate multiple paths with spaces. &quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="n">mapnames</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="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">m</span><span class="p">[</span><span class="s1">&#39;zcoord&#39;</span><span class="p">]</span><span class="si">}</span><span class="s2">&#39;&quot;</span> <span class="k">for</span> <span class="n">m</span> <span class="ow">in</span> <span class="n">maps</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot; XYMaps from </span><span class="si">{</span><span class="n">path</span><span class="si">}</span><span class="s2">:</span><span class="se">\n</span><span class="s2"> </span><span class="si">{</span><span class="n">mapnames</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span>
<span class="n">xymap_data_list</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">maps</span><span class="p">)</span>
<span class="n">grid</span><span class="o">.</span><span class="n">add_maps</span><span class="p">(</span><span class="o">*</span><span class="n">xymap_data_list</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;Added (or readded) </span><span class="si">{</span><span class="nb">len</span><span class="p">(</span><span class="n">xymap_data_list</span><span class="p">)</span><span class="si">}</span><span class="s2"> XYMaps to grid.&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_option_spawn</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"> spawn the grid or part of it.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">grid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<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="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="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="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">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="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;Starting 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="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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> (Re)Initialize the pathfinding matrices for grid or part of it.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">grid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<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>
<span class="n">nmaps</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">xymaps</span><span class="p">)</span>
<span class="k">for</span> <span class="n">inum</span><span class="p">,</span> <span class="n">xymap</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">xymaps</span><span class="p">):</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;(Re)building pathfinding matrix for xymap Z=</span><span class="si">{</span><span class="n">xymap</span><span class="o">.</span><span class="n">Z</span><span class="si">}</span><span class="s2"> (</span><span class="si">{</span><span class="n">inum</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">nmaps</span><span class="si">}</span><span class="s2">) ...&quot;</span><span class="p">)</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">calculate_path_matrix</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">cachepath</span> <span class="o">=</span> <span class="n">pathjoin</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;server&quot;</span><span class="p">,</span> <span class="s2">&quot;.cache&quot;</span><span class="p">)</span>
<span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;... done. Data cached to </span><span class="si">{</span><span class="n">cachepath</span><span class="si">}</span><span class="s2">.&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">_option_delete</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"> Delete the grid or parts of it. Allows mapname,mapname, ...</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">grid</span> <span class="o">=</span> <span class="n">get_xyzgrid</span><span class="p">()</span>
<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="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="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>
<span class="n">err</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">for</span> <span class="n">zcoord</span> <span class="ow">in</span> <span class="n">zcoords</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">grid</span><span class="o">.</span><span class="n">get_map</span><span class="p">(</span><span class="n">zcoord</span><span class="p">):</span>
<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="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="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>
<div class="viewcode-block" id="xyzcommand"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.launchcmd.html#evennia.contrib.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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Evennia launcher command. This is made available as `evennia xyzgrid` on the command line,</span>
<span class="sd"> once added to `settings.EXTRA_LAUNCHER_COMMANDS`.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
<span class="nb">print</span><span class="p">(</span><span class="n">_HELP_SHORT</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
<span class="k">return</span>
<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="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="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="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="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="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="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="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>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="launchcmd.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.launchcmd</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,160 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.xyzgrid.utils &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.utils</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.contrib.xyzgrid.utils</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Helpers and resources for the map system.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="n">BIGVAL</span> <span class="o">=</span> <span class="mi">999999999999</span>
<span class="n">REVERSE_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;ne&quot;</span><span class="p">:</span> <span class="s2">&quot;sw&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;se&quot;</span><span class="p">:</span> <span class="s2">&quot;nw&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>
<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;w&quot;</span><span class="p">:</span> <span class="s2">&quot;e&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="p">}</span>
<span class="n">MAPSCAN</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;n&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">1</span><span class="p">),</span>
<span class="s2">&quot;ne&quot;</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="s2">&quot;e&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;se&quot;</span><span class="p">:</span> <span class="p">(</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="s2">&quot;s&quot;</span><span class="p">:</span> <span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="o">-</span><span class="mi">1</span><span class="p">),</span>
<span class="s2">&quot;sw&quot;</span><span class="p">:</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="s2">&quot;w&quot;</span><span class="p">:</span> <span class="p">(</span><span class="o">-</span><span class="mi">1</span><span class="p">,</span> <span class="mi">0</span><span class="p">),</span>
<span class="s2">&quot;nw&quot;</span><span class="p">:</span> <span class="p">(</span><span class="o">-</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="c1"># errors for Map system</span>
<div class="viewcode-block" id="MapError"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.utils.html#evennia.contrib.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.xyzgrid.utils.html#evennia.contrib.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="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>
<div class="viewcode-block" id="MapParserError"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.utils.html#evennia.contrib.xyzgrid.utils.MapParserError">[docs]</a><span class="k">class</span> <span class="nc">MapParserError</span><span class="p">(</span><span class="n">MapError</span><span class="p">):</span>
<span class="k">pass</span></div>
<div class="viewcode-block" id="MapTransition"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.utils.html#evennia.contrib.xyzgrid.utils.MapTransition">[docs]</a><span class="k">class</span> <span class="nc">MapTransition</span><span class="p">(</span><span class="ne">RuntimeWarning</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Used when signaling to the parser that a link</span>
<span class="sd"> leads to another map.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">pass</span></div>
</pre></div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="utils.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.utils</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,399 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.xyzgrid.xyzgrid &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.xyzgrid</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.contrib.xyzgrid.xyzgrid</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">The grid</span>
<span class="sd">This represents the full XYZ grid, which consists of</span>
<span class="sd">- 2D `Map`-objects parsed from Map strings and Map-legend components. Each represents one</span>
<span class="sd"> Z-coordinate or location.</span>
<span class="sd">- `Prototypes` for how to build each XYZ component into &#39;real&#39; rooms and exits.</span>
<span class="sd">- Actual in-game rooms and exits, mapped to the game based on Map data.</span>
<span class="sd">The grid has three main functions:</span>
<span class="sd">- Building new rooms/exits from scratch based on one or more Maps.</span>
<span class="sd">- Updating the rooms/exits tied to an existing Map when the Map string</span>
<span class="sd"> of that map changes.</span>
<span class="sd">- Fascilitate communication between the in-game entities and their Map.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">evennia.scripts.scripts</span> <span class="kn">import</span> <span class="n">DefaultScript</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">variable_from_module</span><span class="p">,</span> <span class="n">make_iter</span>
<span class="kn">from</span> <span class="nn">.xymap</span> <span class="kn">import</span> <span class="n">XYMap</span>
<span class="kn">from</span> <span class="nn">.xyzroom</span> <span class="kn">import</span> <span class="n">XYZRoom</span><span class="p">,</span> <span class="n">XYZExit</span>
<div class="viewcode-block" id="XYZGrid"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid">[docs]</a><span class="k">class</span> <span class="nc">XYZGrid</span><span class="p">(</span><span class="n">DefaultScript</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<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.xyzgrid.xyzgrid.html#evennia.contrib.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>
<span class="sd"> &quot;&quot;&quot;</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="o">=</span> <span class="p">{}</span>
<span class="bp">self</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="s2">&quot;Manages maps for XYZ-grid&quot;</span></div>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">grid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">grid</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">reload</span><span class="p">()</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">grid</span>
<div class="viewcode-block" id="XYZGrid.get_map"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid.get_map">[docs]</a> <span class="k">def</span> <span class="nf">get_map</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">zcoord</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get a specific xymap.</span>
<span class="sd"> Args:</span>
<span class="sd"> zcoord (str): The name/zcoord of the xymap.</span>
<span class="sd"> Returns:</span>
<span class="sd"> XYMap: Or None if no map was found.</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">grid</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">zcoord</span><span class="p">)</span></div>
<div class="viewcode-block" id="XYZGrid.all_maps"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid.all_maps">[docs]</a> <span class="k">def</span> <span class="nf">all_maps</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get all xymaps stored in the grid.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: All initialized xymaps stored with this grid.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="o">.</span><span class="n">values</span><span class="p">())</span></div>
<div class="viewcode-block" id="XYZGrid.log"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid.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="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;|grid| </span><span class="si">{</span><span class="n">msg</span><span class="si">}</span><span class="s2">&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="XYZGrid.get_room"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid.get_room">[docs]</a> <span class="k">def</span> <span class="nf">get_room</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="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 room objects from XYZ coordinate.</span>
<span class="sd"> Args:</span>
<span class="sd"> xyz (tuple): X,Y,Z coordinate of room to fetch. &#39;*&#39; acts</span>
<span class="sd"> as wild cards.</span>
<span class="sd"> Returns:</span>
<span class="sd"> Queryset: A queryset of XYZRoom(s) found.</span>
<span class="sd"> Raises:</span>
<span class="sd"> XYZRoom.DoesNotExist: If room is not found.</span>
<span class="sd"> Notes:</span>
<span class="sd"> This assumes the room was previously built.</span>
<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.xyzgrid.xyzgrid.html#evennia.contrib.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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Get one or more exit object at coordinate.</span>
<span class="sd"> Args:</span>
<span class="sd"> xyz (tuple): X,Y,Z coordinate of the room the</span>
<span class="sd"> exit leads out of. &#39;*&#39; acts as a wildcard.</span>
<span class="sd"> name (str): The full name of the exit, e.g. &#39;north&#39; or &#39;northwest&#39;.</span>
<span class="sd"> The &#39;*&#39; acts as a wild card.</span>
<span class="sd"> Returns:</span>
<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="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.xyzgrid.xyzgrid.html#evennia.contrib.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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Load map data from module. The loader will look for a dict XYMAP_DATA or a list of</span>
<span class="sd"> XYMAP_DATA_LIST (a list of XYMAP_DATA dicts). Each XYMAP_DATA dict should contain</span>
<span class="sd"> `{&quot;xymap&quot;: mapstring, &quot;zcoord&quot;: mapname/zcoord, &quot;legend&quot;: dict, &quot;prototypes&quot;: dict}`.</span>
<span class="sd"> Args:</span>
<span class="sd"> module_path (module_path): A python-path to a module containing</span>
<span class="sd"> map data as either `XYMAP_DATA` or `XYMAP_DATA_LIST` variables.</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: List of zero, one or more xy-map data dicts loaded from the module.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">map_data_list</span> <span class="o">=</span> <span class="n">variable_from_module</span><span class="p">(</span><span class="n">module_path</span><span class="p">,</span> <span class="s2">&quot;XYMAP_DATA_LIST&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">map_data_list</span><span class="p">:</span>
<span class="n">map_data_list</span> <span class="o">=</span> <span class="n">variable_from_module</span><span class="p">(</span><span class="n">module_path</span><span class="p">,</span> <span class="s2">&quot;XYMAP_DATA&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">map_data_list</span><span class="p">:</span>
<span class="n">map_data_list</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">map_data_list</span><span class="p">)</span>
<span class="c1"># inject the python path in the map data</span>
<span class="k">for</span> <span class="n">mapdata</span> <span class="ow">in</span> <span class="n">map_data_list</span><span class="p">:</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="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.xyzgrid.xyzgrid.html#evennia.contrib.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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Reload and rebuild the grid. This is done on a server reload.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="s2">&quot;(Re)loading grid ...&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">grid</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">nmaps</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">loaded_mapdata</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">changed</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># generate all Maps - this will also initialize their components</span>
<span class="c1"># and bake any pathfinding paths (or load from disk-cache)</span>
<span class="k">for</span> <span class="n">zcoord</span><span class="p">,</span> <span class="n">old_mapdata</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="o">.</span><span class="n">items</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;Loading map &#39;</span><span class="si">{</span><span class="n">zcoord</span><span class="si">}</span><span class="s2">&#39;...&quot;</span><span class="p">)</span>
<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">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>
<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="n">new_mapdata</span> <span class="o">!=</span> <span class="n">old_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; XYMap data for Z=&#39;</span><span class="si">{</span><span class="n">zcoord</span><span class="si">}</span><span class="s2">&#39; has changed.&quot;</span><span class="p">)</span>
<span class="n">changed</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">zcoord</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="nb">dict</span><span class="p">(</span><span class="n">new_mapdata</span><span class="p">),</span> <span class="n">Z</span><span class="o">=</span><span class="n">zcoord</span><span class="p">,</span> <span class="n">xyzgrid</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">calculate_path_matrix</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">grid</span><span class="p">[</span><span class="n">zcoord</span><span class="p">]</span> <span class="o">=</span> <span class="n">xymap</span>
<span class="n">nmaps</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="c1"># re-store changed data</span>
<span class="k">for</span> <span class="n">zcoord</span> <span class="ow">in</span> <span class="n">changed</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">map_data</span><span class="p">[</span><span class="n">zcoord</span><span class="p">]</span> <span class="o">=</span> <span class="n">loaded_mapdata</span><span class="p">[</span><span class="s1">&#39;zcoord&#39;</span><span class="p">]</span>
<span class="c1"># store</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;Loaded and linked </span><span class="si">{</span><span class="n">nmaps</span><span class="si">}</span><span class="s2"> map(s).&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">loaded</span> <span class="o">=</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="XYZGrid.add_maps"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid.add_maps">[docs]</a> <span class="k">def</span> <span class="nf">add_maps</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">mapdatas</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Add map or maps to the grid.</span>
<span class="sd"> Args:</span>
<span class="sd"> *mapdatas (dict): Each argument is a dict structure</span>
<span class="sd"> `{&quot;map&quot;: &lt;mapstr&gt;, &quot;legend&quot;: &lt;legenddict&gt;, &quot;name&quot;: &lt;name&gt;,</span>
<span class="sd"> &quot;prototypes&quot;: &lt;dict-of-dicts&gt;, &quot;module_path&quot;: &lt;str&gt;}`. The `prototypes are</span>
<span class="sd"> coordinate-specific overrides for nodes/links on the map, keyed with their</span>
<span class="sd"> (X,Y) coordinate within that map. The `module_path` is injected automatically</span>
<span class="sd"> by self.maps_from_module.</span>
<span class="sd"> Raises:</span>
<span class="sd"> RuntimeError: If mapdata is malformed.</span>
<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="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>
<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">zcoord</span><span class="p">]</span> <span class="o">=</span> <span class="n">mapdata</span></div>
<div class="viewcode-block" id="XYZGrid.remove_map"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid.remove_map">[docs]</a> <span class="k">def</span> <span class="nf">remove_map</span><span class="p">(</span><span class="bp">self</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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Remove an XYmap from the grid.</span>
<span class="sd"> Args:</span>
<span class="sd"> *zoords (str): The zcoords/XYmaps to remove.</span>
<span class="sd"> remove_objects (bool, optional): If the synced database objects (rooms/exits) should</span>
<span class="sd"> be removed alongside this map.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># from evennia import set_trace;set_trace()</span>
<span class="k">for</span> <span class="n">zcoord</span> <span class="ow">in</span> <span class="n">zcoords</span><span class="p">:</span>
<span class="k">if</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="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">map_data</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">zcoord</span><span class="p">)</span>
<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="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>
<div class="viewcode-block" id="XYZGrid.delete"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.XYZGrid.delete">[docs]</a> <span class="k">def</span> <span class="nf">delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Clear the entire grid, including database entities, then the grid too.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<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.xyzgrid.xyzgrid.html#evennia.contrib.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>
<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>
<span class="sd"> Args:</span>
<span class="sd"> xyz (tuple, optional): An (X,Y,Z) coordinate, where Z is the name of the map. `&#39;*&#39;`</span>
<span class="sd"> acts as a wildcard.</span>
<span class="sd"> directions (list, optional): A list of cardinal directions (&#39;n&#39;, &#39;ne&#39; etc).</span>
<span class="sd"> Spawn exits only the given direction. If unset, all needed directions are spawned.</span>
<span class="sd"> Examples:</span>
<span class="sd"> - `xyz=(&#39;*&#39;, &#39;*&#39;, &#39;*&#39;)` (default) - spawn/update all maps.</span>
<span class="sd"> - `xyz=(1, 3, &#39;foo&#39;)` - sync a specific element of map &#39;foo&#39; only.</span>
<span class="sd"> - `xyz=(&#39;*&#39;, &#39;*&#39;, &#39;foo&#39;) - sync all elements of map &#39;foo&#39;</span>
<span class="sd"> - `xyz=(1, 3, &#39;*&#39;) - sync all (1,3) coordinates on all maps (rarely useful)</span>
<span class="sd"> - `xyz=(1, 3, &#39;foo&#39;)`, `direction=&#39;ne&#39;` - sync only the north-eastern exit</span>
<span class="sd"> out of the specific node on map &#39;foo&#39;.</span>
<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="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>
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">grid</span> <span class="ow">and</span> <span class="n">z</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">grid</span><span class="p">:</span>
<span class="n">xymaps</span> <span class="o">=</span> <span class="p">{</span><span class="n">z</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid</span><span class="p">[</span><span class="n">z</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="sa">f</span><span class="s2">&quot;The &#39;z&#39; coordinate/name &#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.&quot;</span><span class="p">)</span>
<span class="c1"># first build all nodes/rooms</span>
<span class="k">for</span> <span class="n">zcoord</span><span class="p">,</span> <span class="n">xymap</span> <span class="ow">in</span> <span class="n">xymaps</span><span class="o">.</span><span class="n">items</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 nodes for Z=&#39;</span><span class="si">{</span><span class="n">zcoord</span><span class="si">}</span><span class="s2">&#39; ...&quot;</span><span class="p">)</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">spawn_nodes</span><span class="p">(</span><span class="n">xy</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="c1"># next build all links between nodes (including between maps)</span>
<span class="k">for</span> <span class="n">zcoord</span><span class="p">,</span> <span class="n">xymap</span> <span class="ow">in</span> <span class="n">xymaps</span><span class="o">.</span><span class="n">items</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 links for Z=&#39;</span><span class="si">{</span><span class="n">zcoord</span><span class="si">}</span><span class="s2">&#39; ...&quot;</span><span class="p">)</span>
<span class="n">xymap</span><span class="o">.</span><span class="n">spawn_links</span><span class="p">(</span><span class="n">xy</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">directions</span><span class="o">=</span><span class="n">directions</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="get_xyzgrid"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzgrid.html#evennia.contrib.xyzgrid.xyzgrid.get_xyzgrid">[docs]</a><span class="k">def</span> <span class="nf">get_xyzgrid</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Helper for getting the grid. This will create the XYZGrid global script if it didn&#39;t</span>
<span class="sd"> previously exist.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">xyzgrid</span> <span class="o">=</span> <span class="n">XYZGrid</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="ow">not</span> <span class="n">xyzgrid</span><span class="p">:</span>
<span class="c1"># create a new one</span>
<span class="n">xyzgrid</span><span class="p">,</span> <span class="n">err</span> <span class="o">=</span> <span class="n">XYZGrid</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="s2">&quot;XYZGrid&quot;</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="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="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>
<span class="n">xyzgrid</span><span class="o">.</span><span class="n">reload</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">xyzgrid</span><span class="o">.</span><span class="n">log</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">))</span>
<span class="k">return</span> <span class="n">xyzgrid</span></div>
</pre></div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="xyzgrid.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.xyzgrid</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -0,0 +1,694 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.xyzgrid.xyzroom &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../../../../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../../../../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../../../../" src="../../../../_static/documentation_options.js"></script>
<script src="../../../../_static/jquery.js"></script>
<script src="../../../../_static/underscore.js"></script>
<script src="../../../../_static/doctools.js"></script>
<script src="../../../../_static/language_data.js"></script>
<link rel="shortcut icon" href="../../../../_static/favicon.ico"/>
<link rel="index" title="Index" href="../../../../genindex.html" />
<link rel="search" title="Search" href="../../../../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.xyzroom</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<h1>Source code for evennia.contrib.xyzgrid.xyzroom</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">XYZ-aware rooms and exits.</span>
<span class="sd">These are intended to be used with the XYZgrid - which interprets the `Z` &#39;coordinate&#39; as</span>
<span class="sd">different (named) 2D XY maps. But if not wanting to use the XYZgrid gridding, these can also be</span>
<span class="sd">used as stand-alone XYZ-coordinate-aware rooms.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
<span class="kn">from</span> <span class="nn">evennia.objects.objects</span> <span class="kn">import</span> <span class="n">DefaultRoom</span><span class="p">,</span> <span class="n">DefaultExit</span>
<span class="kn">from</span> <span class="nn">evennia.objects.manager</span> <span class="kn">import</span> <span class="n">ObjectManager</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">make_iter</span>
<span class="c1"># name of all tag categories. Note that the Z-coordinate is</span>
<span class="c1"># the `map_name` of the XYZgrid</span>
<span class="n">MAP_X_TAG_CATEGORY</span> <span class="o">=</span> <span class="s2">&quot;room_x_coordinate&quot;</span>
<span class="n">MAP_Y_TAG_CATEGORY</span> <span class="o">=</span> <span class="s2">&quot;room_y_coordinate&quot;</span>
<span class="n">MAP_Z_TAG_CATEGORY</span> <span class="o">=</span> <span class="s2">&quot;room_z_coordinate&quot;</span>
<span class="n">MAP_XDEST_TAG_CATEGORY</span> <span class="o">=</span> <span class="s2">&quot;exit_dest_x_coordinate&quot;</span>
<span class="n">MAP_YDEST_TAG_CATEGORY</span> <span class="o">=</span> <span class="s2">&quot;exit_dest_y_coordinate&quot;</span>
<span class="n">MAP_ZDEST_TAG_CATEGORY</span> <span class="o">=</span> <span class="s2">&quot;exit_dest_z_coordinate&quot;</span>
<span class="n">GET_XYZGRID</span> <span class="o">=</span> <span class="kc">None</span>
<div class="viewcode-block" id="XYZManager"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.xyzgrid.xyzroom.XYZManager">[docs]</a><span class="k">class</span> <span class="nc">XYZManager</span><span class="p">(</span><span class="n">ObjectManager</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This is accessed as `.objects` on the coordinate-aware typeclasses (`XYZRoom`, `XYZExit`). It</span>
<span class="sd"> has all the normal Object/Room manager methods (filter/get etc) but also special helpers for</span>
<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.xyzgrid.xyzroom.html#evennia.contrib.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>
<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>
<span class="sd"> *all* XYZ rooms). This will also find children of XYZRooms on the given coordinates.</span>
<span class="sd"> Kwargs:</span>
<span class="sd"> xyz (tuple, optional): A coordinate tuple (X, Y, Z) where each element is either</span>
<span class="sd"> an `int` or `str`. The character `&#39;*&#39;` acts as a wild card. Note that</span>
<span class="sd"> the `Z`-coordinate is the name of the map (case-sensitive) in the XYZgrid contrib.</span>
<span class="sd"> **kwargs: All other kwargs are passed on to the query.</span>
<span class="sd"> Returns:</span>
<span class="sd"> django.db.queryset.Queryset: A queryset that can be combined</span>
<span class="sd"> with further filtering.</span>
<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="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="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="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="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="p">)</span></div>
<div class="viewcode-block" id="XYZManager.get_xyz"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.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>
<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>
<span class="sd"> Kwargs:</span>
<span class="sd"> xyz (tuple): A coordinate tuple of `int` or `str` (not `&#39;*&#39;`, no wildcards are</span>
<span class="sd"> allowed in get). The `Z`-coordinate acts as the name (case-sensitive) of the map in</span>
<span class="sd"> the XYZgrid contrib.</span>
<span class="sd"> **kwargs: All other kwargs are passed on to the query.</span>
<span class="sd"> Returns:</span>
<span class="sd"> XYRoom: A single room instance found at the combination of x, y and z given.</span>
<span class="sd"> Raises:</span>
<span class="sd"> XYZRoom.DoesNotExist: If no matching query was found.</span>
<span class="sd"> XYZRoom.MultipleObjectsReturned: If more than one match was found (which should not</span>
<span class="sd"> possible with a unique combination of x,y,z).</span>
<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="c1"># mimic get_family</span>
<span class="n">paths</span> <span class="o">=</span> <span class="p">[</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="p">[</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="bp">cls</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span> <span class="k">for</span> <span class="bp">cls</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_subclasses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="p">]</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;db_typeclass_path__in&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">paths</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">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">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">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">), &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>
<div class="viewcode-block" id="XYZExitManager"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.xyzgrid.xyzroom.XYZExitManager">[docs]</a><span class="k">class</span> <span class="nc">XYZExitManager</span><span class="p">(</span><span class="n">XYZManager</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Used by Exits.</span>
<span class="sd"> Manager that also allows searching for destinations based on XY coordinates.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<div class="viewcode-block" id="XYZExitManager.filter_xyz_exit"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.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>
<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>
<span class="sd"> children of XYZExit on the given coords..</span>
<span class="sd"> Kwargs:</span>
<span class="sd"> xyz (tuple, optional): A coordinate (X, Y, Z) for the source location. Each</span>
<span class="sd"> element is either an `int` or `str`. The character `&#39;*&#39;` is used as a wildcard -</span>
<span class="sd"> so setting all coordinates to the wildcard will return *all* XYZExits.</span>
<span class="sd"> the `Z`-coordinate is the name of the map (case-sensitive) in the XYZgrid contrib.</span>
<span class="sd"> xyz_destination (tuple, optional): Same as `xyz` but for the destination of the</span>
<span class="sd"> exit.</span>
<span class="sd"> **kwargs: All other kwargs are passed on to the query.</span>
<span class="sd"> Returns:</span>
<span class="sd"> django.db.queryset.Queryset: A queryset that can be combined</span>
<span class="sd"> with further filtering.</span>
<span class="sd"> Notes:</span>
<span class="sd"> Depending on what coordinates are set to `*`, this can be used to</span>
<span class="sd"> e.g. find all exits in a room, or leading to a room or even to rooms</span>
<span class="sd"> in a particular X/Y row/column.</span>
<span class="sd"> In the XYZgrid, `z_source != z_destination` means a _transit_ between different maps.</span>
<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="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="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="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="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="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="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="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="p">)</span></div>
<div class="viewcode-block" id="XYZExitManager.get_xyz_exit"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.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>
<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>
<span class="sd"> This will also find children of XYZExits on the given coords.</span>
<span class="sd"> Kwargs:</span>
<span class="sd"> xyz (tuple, optional): A coordinate (X, Y, Z) for the source location. Each</span>
<span class="sd"> element is either an `int` or `str` (not `*`, no wildcards are allowed for get).</span>
<span class="sd"> the `Z`-coordinate is the name of the map (case-sensitive) in the XYZgrid contrib.</span>
<span class="sd"> xyz_destination_coord (tuple, optional): Same as the `xyz` but for the destination of</span>
<span class="sd"> the exit.</span>
<span class="sd"> **kwargs: All other kwargs are passed on to the query.</span>
<span class="sd"> Returns:</span>
<span class="sd"> XYZExit: A single exit instance found at the combination of x, y and xgiven.</span>
<span class="sd"> Raises:</span>
<span class="sd"> XYZExit.DoesNotExist: If no matching query was found.</span>
<span class="sd"> XYZExit.MultipleObjectsReturned: If more than one match was found (which should not</span>
<span class="sd"> be possible with a unique combination of x,y,x).</span>
<span class="sd"> Notes:</span>
<span class="sd"> All coordinates are required.</span>
<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="c1"># mimic get_family</span>
<span class="n">paths</span> <span class="o">=</span> <span class="p">[</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="p">[</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="bp">cls</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span> <span class="k">for</span> <span class="bp">cls</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_subclasses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="p">]</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;db_typeclass_path__in&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">paths</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">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>
<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">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="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">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="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>
<div class="viewcode-block" id="XYZRoom"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.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>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> A game location aware of its XYZ-position.</span>
<span class="sd"> Special properties:</span>
<span class="sd"> map_display (bool): If the return_appearance of the room should</span>
<span class="sd"> show the map or not.</span>
<span class="sd"> map_mode (str): One of &#39;nodes&#39; or &#39;scan&#39;. See `return_apperance`</span>
<span class="sd"> for examples of how they differ.</span>
<span class="sd"> map_visual_range (int): How far on the map one can see. This is a</span>
<span class="sd"> fixed value here, but could also be dynamic based on skills,</span>
<span class="sd"> light etc.</span>
<span class="sd"> map_character_symbol (str): The character symbol to use to show</span>
<span class="sd"> the character position. Can contain color info. Default is</span>
<span class="sd"> the @-character.</span>
<span class="sd"> map_area_client (bool): If True, map area will always fill the entire</span>
<span class="sd"> client width. If False, the map area&#39;s width will vary with the</span>
<span class="sd"> width of the currently displayed location description.</span>
<span class="sd"> map_fill_all (bool): I the map area should fill the client width or not.</span>
<span class="sd"> map_separator_char (str): The char to use to separate the map area from</span>
<span class="sd"> the room description.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># makes the `room.objects.filter_xymap` available</span>
<span class="n">objects</span> <span class="o">=</span> <span class="n">XYZManager</span><span class="p">()</span>
<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_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_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>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<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="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="bp">self</span><span class="o">.</span><span class="n">xyz</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;XYZRoom &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">db_key</span><span class="si">}</span><span class="s2">&#39;, 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">)&gt;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</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;_xyz&quot;</span><span class="p">):</span>
<span class="n">x</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_X_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="n">y</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_Y_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="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="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>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_xyz</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">xyzgrid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">global</span> <span class="n">GET_XYZGRID</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">GET_XYZGRID</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.xyzgrid.xyzgrid</span> <span class="kn">import</span> <span class="n">get_xyzgrid</span> <span class="k">as</span> <span class="n">GET_XYZGRID</span>
<span class="k">return</span> <span class="n">GET_XYZGRID</span><span class="p">()</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">xymap</span><span class="p">(</span><span class="bp">self</span><span class="p">):</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;_xymap&quot;</span><span class="p">):</span>
<span class="n">xyzgrid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xyzgrid</span>
<span class="n">_</span><span class="p">,</span> <span class="n">_</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">xyz</span>
<span class="bp">self</span><span class="o">.</span><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">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.xyzgrid.xyzroom.html#evennia.contrib.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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creation method aware of XYZ coordinates.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): New name of object to create.</span>
<span class="sd"> account (Account, optional): Any Account to tie to this entity (usually not used for</span>
<span class="sd"> rooms).</span>
<span class="sd"> xyz (tuple, optional): A 3D coordinate (X, Y, Z) for this room&#39;s location on a</span>
<span class="sd"> map grid. Each element can theoretically be either `int` or `str`, but for the</span>
<span class="sd"> XYZgrid, the X, Y are always integers while the `Z` coordinate is used for the</span>
<span class="sd"> map&#39;s name.</span>
<span class="sd"> **kwargs: Will be passed into the normal `DefaultRoom.create` method.</span>
<span class="sd"> Returns:</span>
<span class="sd"> room (Object): A newly created Room of the given typeclass.</span>
<span class="sd"> errors (list): A list of errors in string form, if any.</span>
<span class="sd"> Notes:</span>
<span class="sd"> The (X, Y, Z) coordinate must be unique across the game. If trying to create</span>
<span class="sd"> a room at a coordinate that already exists, an error will be returned.</span>
<span class="sd"> &quot;&quot;&quot;</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="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="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="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>
<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="k">return</span> <span class="n">DefaultRoom</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">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 class="viewcode-block" id="XYZRoom.get_display_name"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.xyzgrid.xyzroom.XYZRoom.get_display_name">[docs]</a> <span class="k">def</span> <span class="nf">get_display_name</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>
<span class="sd"> Shows both the #dbref and the xyz coord to staff.</span>
<span class="sd"> Args:</span>
<span class="sd"> looker (TypedObject): The object or account that is looking</span>
<span class="sd"> at/getting inforamtion for this object.</span>
<span class="sd"> Returns:</span>
<span class="sd"> name (str): A string containing the name of the object,</span>
<span class="sd"> including the DBREF and XYZ coord if this user is</span>
<span class="sd"> privileged to control the room.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">check_lockstring</span><span class="p">(</span><span class="n">looker</span><span class="p">,</span> <span class="s2">&quot;perm(Builder)&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="n">z</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xyz</span>
<span class="k">return</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">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">id</span><span class="si">}</span><span class="s2">(</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="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">name</span></div>
<div class="viewcode-block" id="XYZRoom.return_appearance"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.xyzgrid.xyzroom.XYZRoom.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>
<span class="sd"> Displays the map in addition to the room description</span>
<span class="sd"> Args:</span>
<span class="sd"> looker (Object): The one looking.</span>
<span class="sd"> Keyword Args:</span>
<span class="sd"> map_display (bool): Turn on/off map display.</span>
<span class="sd"> map_visual_range (int): How &#39;far&#39; one can see on the map. For</span>
<span class="sd"> &#39;nodes&#39; mode, this is how many connected nodes away, for</span>
<span class="sd"> &#39;scan&#39; mode, this is number of characters away on the map.</span>
<span class="sd"> Default is a visual range of 2 (nodes).</span>
<span class="sd"> map_mode (str): One of &#39;node&#39; (default) or &#39;scan&#39;.</span>
<span class="sd"> map_character_symbol (str): The character symbol to use. Defaults to &#39;@&#39;.</span>
<span class="sd"> This can also be colored with standard color tags. Set to `None`</span>
<span class="sd"> to just show the current node.</span>
<span class="sd"> Examples:</span>
<span class="sd"> Assume this is the full map (where &#39;@&#39; is the character location):</span>
<span class="sd"> ::</span>
<span class="sd"> #----------------#</span>
<span class="sd"> | |</span>
<span class="sd"> | |</span>
<span class="sd"> # @------------#-#</span>
<span class="sd"> | |</span>
<span class="sd"> #----------------#</span>
<span class="sd"> This is how it will look in &#39;nodes&#39; mode with `visual_range=2`:</span>
<span class="sd"> ::</span>
<span class="sd"> @------------#-#</span>
<span class="sd"> And in &#39;scan&#39; mode with `visual_range=2`:</span>
<span class="sd"> ::</span>
<span class="sd"> |</span>
<span class="sd"> |</span>
<span class="sd"> # @--</span>
<span class="sd"> |</span>
<span class="sd"> #----</span>
<span class="sd"> Notes:</span>
<span class="sd"> The map kwargs default to values with the same names set on the</span>
<span class="sd"> XYZRoom class; these can be changed by overriding the room.</span>
<span class="sd"> We return the map display as a separate msg() call here, in order</span>
<span class="sd"> to make it easier to break this out into a client pane etc. The</span>
<span class="sd"> map is tagged with type=&#39;xymap&#39;.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># normal get_appearance of a room</span>
<span class="n">room_desc</span> <span class="o">=</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">return_appearance</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="c1"># get current xymap</span>
<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="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="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="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">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="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">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>
<span class="n">map_width</span> <span class="o">=</span> <span class="n">xymap</span><span class="o">.</span><span class="n">max_x</span>
<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="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="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="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>
<span class="n">path_data</span> <span class="o">=</span> <span class="n">looker</span><span class="o">.</span><span class="n">ndb</span><span class="o">.</span><span class="n">xy_path_data</span>
<span class="n">target_xy</span> <span class="o">=</span> <span class="n">path_data</span><span class="o">.</span><span class="n">target</span><span class="o">.</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">path_data</span> <span class="k">else</span> <span class="kc">None</span>
<span class="c1"># get visual range display from map</span>
<span class="n">map_display</span> <span class="o">=</span> <span class="n">xymap</span><span class="o">.</span><span class="n">get_visual_range</span><span class="p">(</span>
<span class="p">(</span><span class="n">xyz</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">xyz</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span>
<span class="n">dist</span><span class="o">=</span><span class="n">map_visual_range</span><span class="p">,</span>
<span class="n">mode</span><span class="o">=</span><span class="n">map_mode</span><span class="p">,</span>
<span class="n">target</span><span class="o">=</span><span class="n">target_xy</span><span class="p">,</span>
<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="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>
<span class="c1"># echo directly to make easier to separate in client</span>
<span class="n">looker</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">map_display</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="s2">&quot;xymap&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">return</span> <span class="n">room_desc</span></div></div>
<div class="viewcode-block" id="XYZExit"><a class="viewcode-back" href="../../../../api/evennia.contrib.xyzgrid.xyzroom.html#evennia.contrib.xyzgrid.xyzroom.XYZExit">[docs]</a><span class="k">class</span> <span class="nc">XYZExit</span><span class="p">(</span><span class="n">DefaultExit</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> An exit that is aware of the XYZ coordinate system.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">objects</span> <span class="o">=</span> <span class="n">XYZExitManager</span><span class="p">()</span>
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="nb">repr</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span>
<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="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="bp">self</span><span class="o">.</span><span class="n">xyz</span>
<span class="n">xd</span><span class="p">,</span> <span class="n">yd</span><span class="p">,</span> <span class="n">zd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">xyz_destination</span>
<span class="k">return</span> <span class="sa">f</span><span class="s2">&quot;&lt;XYZExit &#39;</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">db_key</span><span class="si">}</span><span class="s2">&#39;, 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">)-&gt;(</span><span class="si">{</span><span class="n">xd</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">yd</span><span class="si">}</span><span class="s2">,</span><span class="si">{</span><span class="n">zd</span><span class="si">}</span><span class="s2">)&gt;&quot;</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">xyzgrid</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">global</span> <span class="n">GET_XYZGRID</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">GET_XYZGRID</span><span class="p">:</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.xyzgrid.xyzgrid</span> <span class="kn">import</span> <span class="n">get_xyzgrid</span> <span class="k">as</span> <span class="n">GET_XYZGRID</span>
<span class="k">return</span> <span class="n">GET_XYZGRID</span><span class="p">()</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">xyz</span><span class="p">(</span><span class="bp">self</span><span class="p">):</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;_xyz&quot;</span><span class="p">):</span>
<span class="n">x</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_X_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="n">y</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_Y_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="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 yet unfinished coordinate</span>
<span class="k">return</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="c1"># cache result</span>
<span class="bp">self</span><span class="o">.</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">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_xyz</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">xyz_destination</span><span class="p">(</span><span class="bp">self</span><span class="p">):</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;_xyz_destination&quot;</span><span class="p">):</span>
<span class="n">xd</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_XDEST_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="n">yd</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_YDEST_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="n">zd</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_ZDEST_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">xd</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">yd</span> <span class="ow">is</span> <span class="kc">None</span> <span class="ow">or</span> <span class="n">zd</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># don&#39;t cache unfinished coordinate</span>
<span class="k">return</span> <span class="p">(</span><span class="n">xd</span><span class="p">,</span> <span class="n">yd</span><span class="p">,</span> <span class="n">zd</span><span class="p">)</span>
<span class="c1"># cache result</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_xyz_destination</span> <span class="o">=</span> <span class="p">(</span><span class="n">xd</span><span class="p">,</span> <span class="n">yd</span><span class="p">,</span> <span class="n">zd</span><span class="p">)</span>
<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.xyzgrid.xyzroom.html#evennia.contrib.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="sd">&quot;&quot;&quot;</span>
<span class="sd"> Creation method aware of coordinates.</span>
<span class="sd"> Args:</span>
<span class="sd"> key (str): New name of object to create.</span>
<span class="sd"> account (Account, optional): Any Account to tie to this entity (unused for exits).</span>
<span class="sd"> xyz (tuple or None, optional): A 3D coordinate (X, Y, Z) for this room&#39;s location</span>
<span class="sd"> on a map grid. Each element can theoretically be either `int` or `str`, but for the</span>
<span class="sd"> XYZgrid contrib, the X, Y are always integers while the `Z` coordinate is used for</span>
<span class="sd"> the map&#39;s name. Set to `None` if instead using a direct room reference with</span>
<span class="sd"> `location`.</span>
<span class="sd"> xyz_destination (tuple, optional): The XYZ coordinate of the place the exit</span>
<span class="sd"> leads to. Will be ignored if `destination` is given directly.</span>
<span class="sd"> location (Object, optional): If given, overrides `xyz` coordinate. This can be used</span>
<span class="sd"> to place this exit in any room, including non-XYRoom type rooms.</span>
<span class="sd"> destination (Object, optional): If given, overrides `xyz_destination`. This can</span>
<span class="sd"> be any room (including non-XYRooms) and is not checked for XYZ coordinates.</span>
<span class="sd"> **kwargs: Will be passed into the normal `DefaultRoom.create` method.</span>
<span class="sd"> Returns:</span>
<span class="sd"> tuple: A tuple `(exit, errors)`, where the errors is a list containing all found</span>
<span class="sd"> errors (in which case the returned exit will be `None`).</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">tags</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">source</span> <span class="o">=</span> <span class="n">location</span>
<span class="k">else</span><span class="p">:</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="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="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="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">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="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>
</pre></div>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../../../../index.html">
<img class="logo" src="../../../../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../../../../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="xyzroom.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../../../../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../../../../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.xyzroom</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -161,7 +161,12 @@
<span class="sd"> obj (Object): object to remove</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">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">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="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>
@ -382,9 +387,11 @@
<span class="k">except</span> <span class="ne">RuntimeError</span><span class="p">:</span>
<span class="n">errmsg</span> <span class="o">=</span> <span class="s2">&quot;Error: </span><span class="si">%s</span><span class="s2">.location = </span><span class="si">%s</span><span class="s2"> creates a location loop.&quot;</span> <span class="o">%</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">location</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">errmsg</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="n">errmsg</span> <span class="o">=</span> <span class="s2">&quot;Error (</span><span class="si">%s</span><span class="s2">): </span><span class="si">%s</span><span class="s2"> is not a valid location.&quot;</span> <span class="o">%</span> <span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">),</span> <span class="n">location</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">RuntimeError</span><span class="p">(</span><span class="n">errmsg</span><span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="c1"># raising here gives more info for now</span>
<span class="k">raise</span>
<span class="c1"># errmsg = &quot;Error (%s): %s is not a valid location.&quot; % (str(e), location)</span>
<span class="c1"># raise RuntimeError(errmsg)</span>
<span class="k">return</span>
<span class="k">def</span> <span class="nf">__location_del</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>

View file

@ -903,7 +903,6 @@
<span class="sd"> 7. `self.at_after_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>
@ -925,7 +924,6 @@
<span class="k">if</span> <span class="n">destination</span><span class="o">.</span><span class="n">destination</span> <span class="ow">and</span> <span class="n">use_destination</span><span class="p">:</span>
<span class="c1"># traverse exits</span>
<span class="n">destination</span> <span class="o">=</span> <span class="n">destination</span><span class="o">.</span><span class="n">destination</span>
<span class="c1"># Before the move, call eventual pre-commands.</span>
<span class="k">if</span> <span class="n">move_hooks</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
@ -2313,7 +2311,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;view&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="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></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="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></div>
<div class="viewcode-block" id="DefaultCharacter.at_pre_puppet"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultCharacter.at_pre_puppet">[docs]</a> <span class="k">def</span> <span class="nf">at_pre_puppet</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">account</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="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -2488,7 +2486,7 @@
<span class="k">if</span> <span class="ow">not</span> <span class="n">locks</span> <span class="ow">and</span> <span class="n">account</span><span class="p">:</span>
<span class="n">locks</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">lockstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;id&quot;</span><span class="p">:</span> <span class="n">account</span><span class="o">.</span><span class="n">id</span><span class="p">})</span>
<span class="k">elif</span> <span class="ow">not</span> <span class="n">locks</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">account</span><span class="p">:</span>
<span class="n">locks</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">lockstring</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;id&quot;</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">locks</span> <span class="o">=</span> <span class="bp">cls</span><span class="o">.</span><span class="n">lockstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;id&quot;</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">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">locks</span><span class="p">)</span>

View file

@ -134,8 +134,8 @@
<span class="sd"> homogenizations like adding missing prototype_keys and setting a default typeclass.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span> <span class="ow">or</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="nb">dict</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{}</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span> <span class="ow">or</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="k">return</span> <span class="n">prototype</span>
<span class="n">reserved</span> <span class="o">=</span> <span class="n">_PROTOTYPE_RESERVED_KEYS</span> <span class="o">+</span> <span class="p">(</span><span class="n">custom_keys</span> <span class="ow">or</span> <span class="p">())</span>
@ -186,19 +186,45 @@
<span class="k">return</span> <span class="n">homogenized</span></div>
<span class="c1"># module-based prototypes</span>
<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>
<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"> This is called by `evennia.__init__` as Evennia initializes. It&#39;s important</span>
<span class="sd"> to do this late so as to not interfere with evennia initialization.</span>
<span class="sd"> Load module prototypes. Also prototype-dicts passed directly to this function are considered</span>
<span class="sd"> &#39;module&#39; prototypes (they are impossible to change) but will have a module of None.</span>
<span class="sd"> Args:</span>
<span class="sd"> *mod_or_prototypes (module or dict): Each arg should be a separate module or</span>
<span class="sd"> prototype-dict to load. If none are given, `settings.PROTOTYPE_MODULES` will be used.</span>
<span class="sd"> override (bool, optional): If prototypes should override existing ones already loaded.</span>
<span class="sd"> Disabling this can allow for injecting prototypes into the system dynamically while</span>
<span class="sd"> still allowing same prototype-keys to be overridden from settings (even though settings</span>
<span class="sd"> is usually loaded before dynamic loading).</span>
<span class="sd"> Note:</span>
<span class="sd"> This is called (without arguments) by `evennia.__init__` as Evennia initializes. It&#39;s</span>
<span class="sd"> important to do this late so as to not interfere with evennia initialization. But it can</span>
<span class="sd"> also be used later to add more prototypes to the library on the fly. This is requried</span>
<span class="sd"> before a module-based prototype can be accessed by prototype-key.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span><span class="p">:</span>
<span class="c1"># to remove a default prototype, override it with an empty dict.</span>
<span class="c1"># internally we store as (key, desc, locks, tags, prototype_dict)</span>
<span class="n">prots</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">global</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="p">,</span> <span class="n">_MODULE_PROTOTYPES</span>
<span class="k">def</span> <span class="nf">_prototypes_from_module</span><span class="p">(</span><span class="n">mod</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Load prototypes from a module, first by looking for a global list PROTOTYPE_LIST (a list of</span>
<span class="sd"> dict-prototypes), and if not found, assuming all global-level dicts in the module are</span>
<span class="sd"> prototypes.</span>
<span class="sd"> Args:</span>
<span class="sd"> mod (module): The module to load from.evennia</span>
<span class="sd"> Returns:</span>
<span class="sd"> list: A list of tuples `(prototype_key, prototype-dict)` where the prototype</span>
<span class="sd"> has been homogenized.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">prots</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">prototype_list</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;PROTOTYPE_LIST&quot;</span><span class="p">)</span>
<span class="k">if</span> <span class="n">prototype_list</span><span class="p">:</span>
<span class="c1"># found mod.PROTOTYPE_LIST - this should be a list of valid</span>
@ -221,27 +247,74 @@
<span class="k">if</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">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">variable_name</span><span class="o">.</span><span class="n">lower</span><span class="p">()</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">return</span> <span class="n">prots</span>
<span class="c1"># assign module path to each prototype_key for easy reference</span>
<span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="n">prototype_key</span><span class="o">.</span><span class="n">lower</span><span class="p">():</span> <span class="n">mod</span> <span class="k">for</span> <span class="n">prototype_key</span><span class="p">,</span> <span class="n">_</span> <span class="ow">in</span> <span class="n">prots</span><span class="p">})</span>
<span class="c1"># make sure the prototype contains all meta info</span>
<span class="k">def</span> <span class="nf">_cleanup_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">prototype</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> We need to handle externally determined prototype-keys and to make sure</span>
<span class="sd"> the prototype contains all needed meta information.</span>
<span class="sd"> Args:</span>
<span class="sd"> prototype_key (str): The determined name of the prototype.</span>
<span class="sd"> prototype (dict): The prototype itself.</span>
<span class="sd"> mod (module, optional): The module the prototype was loaded from, if any.</span>
<span class="sd"> Returns:</span>
<span class="sd"> dict: The cleaned up prototype.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">actual_prot_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="n">prototype_key</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="n">prototype</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<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="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>
<span class="k">else</span> <span class="s2">&quot;use:all();edit:false()&quot;</span>
<span class="p">),</span>
<span class="s2">&quot;prototype_tags&quot;</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_tags&quot;</span><span class="p">,</span> <span class="p">[])))</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;module&quot;</span><span class="p">])</span>
<span class="p">),</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">prototype</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">mod_or_prototypes</span><span class="p">:</span>
<span class="c1"># in principle this means PROTOTYPE_MODULES could also contain prototypes, but that is</span>
<span class="c1"># rarely useful ...</span>
<span class="n">mod_or_prototypes</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">PROTOTYPE_MODULES</span>
<span class="k">for</span> <span class="n">mod_or_dict</span> <span class="ow">in</span> <span class="n">mod_or_prototypes</span><span class="p">:</span>
<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="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="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>
<span class="c1"># a module (or path to module). This can contain many prototypes; they can be keyed by</span>
<span class="c1"># variable-name too</span>
<span class="n">prots</span> <span class="o">=</span> <span class="n">_prototypes_from_module</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="nb">repr</span><span class="p">(</span><span class="n">mod_or_dict</span><span class="p">)</span>
<span class="c1"># store all found prototypes</span>
<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">actual_prot_key</span> <span class="o">=</span> <span class="n">prot</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="n">prototype_key</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="o">.</span><span class="n">update</span><span class="p">(</span>
<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="n">prot</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">prot</span> <span class="k">else</span> <span class="n">mod</span><span class="p">,</span>
<span class="s2">&quot;prototype_locks&quot;</span><span class="p">:</span> <span class="p">(</span>
<span class="n">prot</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">prot</span>
<span class="k">else</span> <span class="s2">&quot;use:all();edit:false()&quot;</span>
<span class="p">),</span>
<span class="s2">&quot;prototype_tags&quot;</span><span class="p">:</span> <span class="nb">list</span><span class="p">(</span>
<span class="nb">set</span><span class="p">(</span><span class="nb">list</span><span class="p">(</span><span class="n">make_iter</span><span class="p">(</span><span class="n">prot</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;prototype_tags&quot;</span><span class="p">,</span> <span class="p">[])))</span> <span class="o">+</span> <span class="p">[</span><span class="s2">&quot;module&quot;</span><span class="p">])</span>
<span class="p">),</span>
<span class="p">}</span>
<span class="p">)</span>
<span class="n">_MODULE_PROTOTYPES</span><span class="p">[</span><span class="n">actual_prot_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">prot</span></div>
<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="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>
<span class="k">continue</span>
<span class="c1"># make sure the prototype contains all meta info</span>
<span class="n">_MODULE_PROTOTYPES</span><span class="p">[</span><span class="n">actual_prototype_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">prototype</span>
<span class="c1"># track module path for display purposes</span>
<span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="p">[</span><span class="n">actual_prototype_key</span><span class="o">.</span><span class="n">lower</span><span class="p">()]</span> <span class="o">=</span> <span class="n">mod</span></div>
<span class="c1"># Db-based prototypes</span>
@ -308,11 +381,12 @@
<span class="c1"># we can&#39;t edit a prototype defined in a module</span>
<span class="k">if</span> <span class="n">prototype_key</span> <span class="ow">in</span> <span class="n">_MODULE_PROTOTYPES</span><span class="p">:</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="s2">&quot;N/A&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">{protkey}</span><span class="s2"> is a read-only prototype &quot;</span> <span class="s2">&quot;(defined as code in </span><span class="si">{module}</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">mod</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (defined as code in </span><span class="si">{module}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (passed directly as a dict).&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">PermissionError</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">))</span>
<span class="c1"># make sure meta properties are included with defaults</span>
<span class="n">in_prototype</span><span class="p">[</span><span class="s2">&quot;prototype_desc&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">in_prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
@ -376,11 +450,12 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">prototype_key</span> <span class="ow">in</span> <span class="n">_MODULE_PROTOTYPES</span><span class="p">:</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="o">.</span><span class="n">lower</span><span class="p">(),</span> <span class="s2">&quot;N/A&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">{protkey}</span><span class="s2"> is a read-only prototype &quot;</span> <span class="s2">&quot;(defined as code in </span><span class="si">{module}</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">mod</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (defined as code in </span><span class="si">{module}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (passed directly as a dict).&quot;</span><span class="p">)</span>
<span class="k">raise</span> <span class="ne">PermissionError</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">protkey</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">))</span>
<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>
@ -451,7 +526,7 @@
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="p">:</span>
<span class="c1"># exact match</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod_matches</span><span class="p">[</span><span class="n">key</span><span class="p">]]</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod_matches</span><span class="p">[</span><span class="n">key</span><span class="p">]</span><span class="o">.</span><span class="n">copy</span><span class="p">()]</span>
<span class="n">allow_fuzzy</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># fuzzy matching</span>
@ -461,7 +536,9 @@
<span class="k">if</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">prototype_key</span>
<span class="p">]</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">match</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
<span class="c1"># note - we return a copy of the prototype dict, otherwise using this with e.g.</span>
<span class="c1"># prototype_from_object will modify the base prototype for every object</span>
<span class="n">module_prototypes</span> <span class="o">=</span> <span class="p">[</span><span class="n">match</span><span class="o">.</span><span class="n">copy</span><span class="p">()</span> <span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="n">mod_matches</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
<span class="c1"># search db-stored prototypes</span>
@ -494,7 +571,7 @@
<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">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 </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="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>
@ -948,10 +1025,12 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">action</span> <span class="o">==</span> <span class="s2">&quot;edit&quot;</span><span class="p">:</span>
<span class="k">if</span> <span class="n">prototype_key</span> <span class="ow">in</span> <span class="n">_MODULE_PROTOTYPES</span><span class="p">:</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">,</span> <span class="s2">&quot;N/A&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;</span><span class="si">{}</span><span class="s2"> is a read-only prototype &quot;</span> <span class="s2">&quot;(defined as code in </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">prototype_key</span><span class="p">,</span> <span class="n">mod</span><span class="p">)</span>
<span class="p">)</span>
<span class="n">mod</span> <span class="o">=</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
<span class="k">if</span> <span class="n">mod</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (defined as code in </span><span class="si">{module}</span><span class="s2">).&quot;</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">err</span> <span class="o">=</span> <span class="n">_</span><span class="p">(</span><span class="s2">&quot;</span><span class="si">{protkey}</span><span class="s2"> is a read-only prototype (passed directly as a dict).&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="n">err</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">prototype_key</span><span class="p">,</span> <span class="n">module</span><span class="o">=</span><span class="n">mod</span><span class="p">))</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="n">prototype</span> <span class="o">=</span> <span class="n">search_prototype</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">prototype_key</span><span class="p">)</span>
@ -1018,7 +1097,8 @@
<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">iter</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">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,7 +196,8 @@
<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="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_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>

View file

@ -1955,6 +1955,51 @@
<span class="nb">print</span><span class="p">(</span><span class="n">table</span><span class="p">)</span></div>
<div class="viewcode-block" id="run_custom_commands"><a class="viewcode-back" href="../../../api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.run_custom_commands">[docs]</a><span class="k">def</span> <span class="nf">run_custom_commands</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Inject a custom option into the evennia launcher command chain.</span>
<span class="sd"> Args:</span>
<span class="sd"> option (str): Incoming option - the first argument after `evennia` on</span>
<span class="sd"> the command line.</span>
<span class="sd"> *args: All args will passed to a found callable.__dict__</span>
<span class="sd"> Returns:</span>
<span class="sd"> bool: If a custom command was found and handled the option.</span>
<span class="sd"> Notes:</span>
<span class="sd"> Provide new commands in settings with</span>
<span class="sd"> CUSTOM_EVENNIA_LAUNCHER_COMMANDS = {&quot;mycmd&quot;: &quot;path.to.callable&quot;, ...}</span>
<span class="sd"> The callable will be passed any `*args` given on the command line and is expected to</span>
<span class="sd"> handle/validate the input correctly. Use like any other evennia command option on</span>
<span class="sd"> in the terminal/console, for example:</span>
<span class="sd"> evennia mycmd foo bar</span>
<span class="sd"> &quot;&quot;&quot;</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">import</span> <span class="nn">importlib</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># a dict of {option: callable(*args), ...}</span>
<span class="n">custom_commands</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">EXTRA_LAUNCHER_COMMANDS</span>
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
<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="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>
<span class="n">command</span> <span class="o">=</span> <span class="n">mod</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">cmdname</span><span class="p">)</span>
<span class="k">if</span> <span class="n">command</span><span class="p">:</span>
<span class="n">command</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
<span class="k">return</span> <span class="kc">False</span></div>
<div class="viewcode-block" id="run_menu"><a class="viewcode-back" href="../../../api/evennia.server.evennia_launcher.html#evennia.server.evennia_launcher.run_menu">[docs]</a><span class="k">def</span> <span class="nf">run_menu</span><span class="p">():</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This launches an interactive menu.</span>
@ -2328,6 +2373,10 @@
<span class="n">django</span><span class="o">.</span><span class="n">core</span><span class="o">.</span><span class="n">management</span><span class="o">.</span><span class="n">call_command</span><span class="p">(</span><span class="o">*</span><span class="p">([</span><span class="n">option</span><span class="p">]</span> <span class="o">+</span> <span class="n">unknown_args</span><span class="p">))</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">if</span> <span class="n">run_custom_commands</span><span class="p">(</span><span class="n">option</span><span class="p">,</span> <span class="o">*</span><span class="n">unknown_args</span><span class="p">):</span>
<span class="c1"># run any custom commands</span>
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
<span class="c1"># pass on to the core django manager - re-parse the entire input line</span>
<span class="c1"># but keep &#39;evennia&#39; as the name instead of django-admin. This is</span>
<span class="c1"># an exit condition.</span>

View file

@ -248,6 +248,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">flags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">protocol_flags</span>
<span class="nb">print</span><span class="p">(</span><span class="s2">&quot;session flags:&quot;</span><span class="p">,</span> <span class="n">flags</span><span class="p">)</span>
<span class="n">width</span> <span class="o">=</span> <span class="n">flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;SCREENWIDTH&quot;</span><span class="p">,</span> <span class="p">{})</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="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span><span class="p">)</span>
<span class="n">height</span> <span class="o">=</span> <span class="n">flags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;SCREENHEIGHT&quot;</span><span class="p">,</span> <span class="p">{})</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="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_HEIGHT</span><span class="p">)</span>
<span class="k">return</span> <span class="n">width</span><span class="p">,</span> <span class="n">height</span></div>

View file

@ -1302,7 +1302,7 @@
<span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">attrname</span><span class="p">)</span>
<div class="viewcode-block" id="DbHolder.get_all"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.DbHolder.get_all">[docs]</a> <span class="k">def</span> <span class="nf">get_all</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="k">return</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">get_all_attributes</span><span class="p">()</span></div>
<span class="k">return</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">_GA</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;name&quot;</span><span class="p">))</span><span class="o">.</span><span class="n">backend</span><span class="o">.</span><span class="n">get_all_attributes</span><span class="p">()</span></div>
<span class="nb">all</span> <span class="o">=</span> <span class="nb">property</span><span class="p">(</span><span class="n">get_all</span><span class="p">)</span></div>

View file

@ -839,7 +839,7 @@
<span class="n">all_subclasses</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">_get_subclasses</span><span class="p">(</span><span class="n">subclass</span><span class="p">))</span>
<span class="k">return</span> <span class="n">all_subclasses</span>
<span class="k">def</span> <span class="nf">get_family</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>
<span class="k">def</span> <span class="nf">get_family</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>
<span class="sd"> Variation of get that not only returns the current typeclass</span>
<span class="sd"> but also all subclasses of that typeclass.</span>
@ -859,7 +859,7 @@
<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="bp">cls</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span> <span class="bp">cls</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span> <span class="k">for</span> <span class="bp">cls</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_subclasses</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="p">)</span>
<span class="p">]</span>
<span class="n">kwargs</span><span class="o">.</span><span class="n">update</span><span class="p">({</span><span class="s2">&quot;db_typeclass_path__in&quot;</span><span class="p">:</span> <span class="n">paths</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">get</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="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">get</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">filter_family</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>

View file

@ -286,7 +286,7 @@
<span class="sd"> &gt;: start</span>
<span class="sd"> # node abort</span>
<span class="sd"> ## node abort</span>
<span class="sd"> This exits the menu since there is no `## options` section.</span>

View file

@ -133,6 +133,15 @@
<li><a href="evennia/contrib/tutorial_world/rooms.html">evennia.contrib.tutorial_world.rooms</a></li>
<li><a href="evennia/contrib/unixcommand.html">evennia.contrib.unixcommand</a></li>
<li><a href="evennia/contrib/wilderness.html">evennia.contrib.wilderness</a></li>
<li><a href="evennia/contrib/xyzgrid/commands.html">evennia.contrib.xyzgrid.commands</a></li>
<li><a href="evennia/contrib/xyzgrid/example.html">evennia.contrib.xyzgrid.example</a></li>
<li><a href="evennia/contrib/xyzgrid/launchcmd.html">evennia.contrib.xyzgrid.launchcmd</a></li>
<li><a href="evennia/contrib/xyzgrid/tests.html">evennia.contrib.xyzgrid.tests</a></li>
<li><a href="evennia/contrib/xyzgrid/utils.html">evennia.contrib.xyzgrid.utils</a></li>
<li><a href="evennia/contrib/xyzgrid/xymap.html">evennia.contrib.xyzgrid.xymap</a></li>
<li><a href="evennia/contrib/xyzgrid/xymap_legend.html">evennia.contrib.xyzgrid.xymap_legend</a></li>
<li><a href="evennia/contrib/xyzgrid/xyzgrid.html">evennia.contrib.xyzgrid.xyzgrid</a></li>
<li><a href="evennia/contrib/xyzgrid/xyzroom.html">evennia.contrib.xyzgrid.xyzroom</a></li>
<li><a href="evennia/help/filehelp.html">evennia.help.filehelp</a></li>
<li><a href="evennia/help/manager.html">evennia.help.manager</a></li>
<li><a href="evennia/help/models.html">evennia.help.models</a></li>

View file

@ -1,33 +1,33 @@
# Contrib modules
Contribs are found in [evennia/contrib/](api:evennia.contrib) and are optional game-specific code-snippets
or even full systems you can use for your game. They are contributed by the Evennia community and
released under the same license as Evennia itself. Each contrib has its own installation instructions.
Contribs are found in [evennia/contrib/](api:evennia.contrib) and are optional game-specific code-snippets
or even full systems you can use for your game. They are contributed by the Evennia community and
released under the same license as Evennia itself. Each contrib has its own installation instructions.
Bugs are reported to the Evennia [issue tracker](github:issue) as usual.
## Character-related
## Character-related
Contribs related to characters and character displays.
### CharGen
### CharGen
*Griatch 2011*
A simple Character creator for OOC mode. Meant as a starting point for a more fleshed-out system.
### Clothing
### Clothing
*FlutterSprite 2017*
A layered clothing system with slots for different types of garments auto-showing in description.
### Health Bar
### Health Bar
*Tim Ashley Jenkins 2017*
Tool to create colorful bars/meters.
### Multidescer
### Multidescer
*Griatch 2016*
@ -39,13 +39,22 @@ Advanced descriptions combined from many separate description components, inspir
Contribs modifying locations, movement or helping to creating rooms.
### Extended Room
### XYZGrid
*Griatch 2021*
Adds an XYZgrid to Evennia, with map-display and pathfinding. Created via map
strings and maintained outside of the game via Evennia launch commands.
- [XYZGrid documentation](./XYZGrid)
### Extended Room
*Griatch 2012*
An expanded Room typeclass with multiple descriptions for time and season as well as details.
### Map Builder
### Map Builder
*CloudKeeper 2016*
@ -53,19 +62,19 @@ Build a game area based on a 2D "graphical" unicode map. Supports asymmetric exi
- [Static in-game map](./Static-In-Game-Map)
### Simple Door
### Simple Door
*Griatch 2014*
Example of an exit that can be opened and closed from both sides.
### Slow exit
### Slow exit
*Griatch 2014*
Custom Exit class that takes different time to pass depending on if you are walking/running etc.
### Wilderness
### Wilderness
*titeuf87 2017*
@ -79,7 +88,7 @@ Make infinitely large wilderness areas with dynamically created locations.
Contribs supporting roleplay and in-game roleplaying actions.
### Barter system
### Barter system
*Griatch 2012*
@ -95,25 +104,25 @@ A full, extendable crafting system.
- [Crafting API documentation](api:evennia.contrib.crafting.crafting)
- [Example of a sword crafting tree](api:evennia.contrib.crafting.example_recipes)
### Dice
### Dice
*Griatch 2012*
A fully featured dice rolling system.
### Mail
### Mail
*grungies1138 2016*
An in-game mail system for communication.
### Puzzles
### Puzzles
*Hendher 2019*
Combine objects to create new items, adventure-game style
### RP System
### RP System
*Griatch 2015*
@ -125,7 +134,7 @@ Full director-style emoting system replacing names with sdescs/recogs. Supports
Dynamic obfuscation of emotes when speaking unfamiliar languages. Also obfuscates whispers.
### Turnbattle
### Turnbattle
*FlutterSprite 2017*
@ -142,7 +151,7 @@ and includes optional expansions for equipment and combat movement, magic and ra
An `@edit` command for modifying objects using a generated menu. Customizable for different games.
### Field Fill
### Field Fill
*FlutterSprite 2018*
@ -159,18 +168,18 @@ Allow Builders to add Python-scripted events to their objects (OBS-not for untru
### Menu-builder
A tool for building using an in-game menu instead of the normal build commands. Meant to
A tool for building using an in-game menu instead of the normal build commands. Meant to
be expanded for the needs of your game.
- [Building Menus](./Building-menus)
### Security/Auditing
### Security/Auditing
*Johhny 2018*
Log server input/output for debug/security.
### Tree Select
### Tree Select
*FlutterSprite 2017*
@ -183,13 +192,13 @@ multi-line string.
Contribs meant to be used as part of other code, or as replacements for default settings.
### Color-markups
### Color-markups
*Griatch, 2017*
Alternative in-game color markups.
### Custom gametime
### Custom gametime
*Griatch, vlgeoff 2017*
@ -203,19 +212,19 @@ Implements Evennia's gametime module but for custom game world-specific calendar
A variant of the standard login system that requires an email to login rather then just name+password.
#### Menu login
#### Menu login
*Griatch 2011, 2019, Vincent-lg 2016*
A login system using menus asking for name/password rather than giving them as one command.
### Random String Generator
### Random String Generator
*Vincent Le Goff 2017*
Simple pseudo-random generator of strings with rules, avoiding repetitions.
### UnixCommand
### UnixCommand
*Vincent Le Geoff 2017*
@ -227,19 +236,19 @@ Add commands with UNIX-style syntax.
Contribs not meant to be used as-is, but just as examples to learn from.
### GenderSub
### GenderSub
*Griatch 2015*
Simple example (only) of storing gender on a character and access it in an emote with a custom marker.
### Talking NPC
### Talking NPC
*Griatch 2011*
A talking NPC object that offers a menu-driven conversation tree.
### Tutorial examples
### Tutorial examples
*Griatch 2011, 2015*
@ -259,12 +268,12 @@ The Evennia single-player sole quest. Made to be analyzed to learn.
Full game-dir replacement systems.
### Ainneve
### Ainneve
*Evennia community 2015-?*
This is a community attempt to make an Evennia 'example game' using good practices. It is also a good
place to jump in if you want to help in another project rather than run it alone. Development of this
This is a community attempt to make an Evennia 'example game' using good practices. It is also a good
place to jump in if you want to help in another project rather than run it alone. Development of this
has stalled a bit so we are looking for enthusiastic people to lead the charge.
- [evennia/ainneve repository](https://github.com/evennia/ainneve)
@ -274,26 +283,26 @@ has stalled a bit so we are looking for enthusiastic people to lead the charge.
*Tehom 2019*
Open source code release of the popular Evennia-based [Arx, after the reckoning](https://play.arxgame.org/).
This is a fantasy game with a focus on roleplay and code-supported political intrigue. This code-release
Open source code release of the popular Evennia-based [Arx, after the reckoning](https://play.arxgame.org/).
This is a fantasy game with a focus on roleplay and code-supported political intrigue. This code-release
is maintained by Tehom in its own repository so bug reports should be directed there.
- [Arxcode repository on github](https://github.com/Arx-Game/arxcode)
- [Arxcode issue tracker](https://github.com/Arx-Game/arxcode/issues)
- [Arxcode installation help](./Arxcode-installing-help) - this may not always be fully up-to-date with
- [Arxcode installation help](./Arxcode-installing-help) - this may not always be fully up-to-date with
latest Evennia. Report your findings!
### Evscaperoom
### Evscaperoom
*Griatch 2019*
A full engine for making multiplayer 'escape-rooms' completely in code.
This is based on the 2019 MUD Game jam winner *Evscaperoom*.
A full engine for making multiplayer 'escape-rooms' completely in code.
This is based on the 2019 MUD Game jam winner *Evscaperoom*.
- [contrib/evscaperoom](api:evennia.contrib.evscaperoom) - game engine to make your own escape rooms.
- [https://demo.evennia.com](https://demo.evennia.com) - a full installation of the original game can
- [https://demo.evennia.com](https://demo.evennia.com) - a full installation of the original game can
be played by entering the *evscaperoom* exit in the first Limbo room.
- https://github.com/Griatch/evscaperoom - the original game's source code (warning for spoilers if you
- https://github.com/Griatch/evscaperoom - the original game's source code (warning for spoilers if you
want to solve the puzzles and mystery yourself).
@ -303,7 +312,7 @@ This is based on the 2019 MUD Game jam winner *Evscaperoom*.
:hidden:
./Crafting
../api/evennia.contrib.crafting.crafting
../api/evennia.contrib.crafting.crafting
../api/evennia.contrib.crafting.example_recipes
./A-voice-operated-elevator-using-events
./Dialogues-in-events

File diff suppressed because it is too large Load diff

View file

@ -52,3 +52,4 @@ evennia.contrib
evennia.contrib.turnbattle
evennia.contrib.tutorial_examples
evennia.contrib.tutorial_world
evennia.contrib.xyzgrid

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.commands
=======================================
.. automodule:: evennia.contrib.xyzgrid.commands
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.example
======================================
.. automodule:: evennia.contrib.xyzgrid.example
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.launchcmd
========================================
.. automodule:: evennia.contrib.xyzgrid.launchcmd
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.prototypes
=========================================
.. automodule:: evennia.contrib.xyzgrid.prototypes
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,23 @@
evennia.contrib.xyzgrid
===============================
.. automodule:: evennia.contrib.xyzgrid
:members:
:undoc-members:
:show-inheritance:
.. toctree::
:maxdepth: 6
evennia.contrib.xyzgrid.commands
evennia.contrib.xyzgrid.example
evennia.contrib.xyzgrid.launchcmd
evennia.contrib.xyzgrid.prototypes
evennia.contrib.xyzgrid.tests
evennia.contrib.xyzgrid.utils
evennia.contrib.xyzgrid.xymap
evennia.contrib.xyzgrid.xymap_legend
evennia.contrib.xyzgrid.xyzgrid
evennia.contrib.xyzgrid.xyzroom

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.tests
====================================
.. automodule:: evennia.contrib.xyzgrid.tests
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.utils
====================================
.. automodule:: evennia.contrib.xyzgrid.utils
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.xymap
====================================
.. automodule:: evennia.contrib.xyzgrid.xymap
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.xymap\_legend
============================================
.. automodule:: evennia.contrib.xyzgrid.xymap_legend
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.xyzgrid
======================================
.. automodule:: evennia.contrib.xyzgrid.xyzgrid
:members:
:undoc-members:
:show-inheritance:

View file

@ -0,0 +1,7 @@
evennia.contrib.xyzgrid.xyzroom
======================================
.. automodule:: evennia.contrib.xyzgrid.xyzroom
:members:
:undoc-members:
:show-inheritance:

View file

@ -82,6 +82,7 @@
- [Contribs/Dialogues in events](Contribs/Dialogues-in-events)
- [Contribs/Dynamic In Game Map](Contribs/Dynamic-In-Game-Map)
- [Contribs/Static In Game Map](Contribs/Static-In-Game-Map)
- [Contribs/XYZGrid](Contribs/XYZGrid)
- [./Contributing](./Contributing)
- [./Contributing Docs](./Contributing-Docs)
- [./Evennia API](./Evennia-API)

View file

@ -206,6 +206,25 @@
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.tutorial_world.rooms.html">evennia.contrib.tutorial_world.rooms</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="evennia.contrib.xyzgrid.html">evennia.contrib.xyzgrid</a><ul>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.commands.html">evennia.contrib.xyzgrid.commands</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.example.html">evennia.contrib.xyzgrid.example</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.launchcmd.html">evennia.contrib.xyzgrid.launchcmd</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.prototypes.html">evennia.contrib.xyzgrid.prototypes</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.tests.html">evennia.contrib.xyzgrid.tests</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.utils.html">evennia.contrib.xyzgrid.utils</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap.html">evennia.contrib.xyzgrid.xymap</a><ul>
<li class="toctree-l5"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap.html#xymap">XYMap</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap_legend.html">evennia.contrib.xyzgrid.xymap_legend</a><ul>
<li class="toctree-l5"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap_legend.html#map-legend-components">Map legend components</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.xyzgrid.html">evennia.contrib.xyzgrid.xyzgrid</a></li>
<li class="toctree-l4"><a class="reference internal" href="evennia.contrib.xyzgrid.xyzroom.html">evennia.contrib.xyzgrid.xyzroom</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="evennia.help.html">evennia.help</a><ul>

View file

@ -71,7 +71,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -102,7 +102,7 @@ method. Otherwise all text will be returned to all connected sessions.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.account.CmdOOCLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}</em><a class="headerlink" href="#evennia.commands.default.account.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -255,7 +255,7 @@ to accounts respectively.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.admin.CmdEmit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['remit', 'pemit']</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['pemit', 'remit']</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -286,7 +286,7 @@ to accounts respectively.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.admin.CmdEmit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n remit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n pemit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n remit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n pemit [&lt;obj&gt;, &lt;obj&gt;, ... =] &lt;message&gt;\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}</em><a class="headerlink" href="#evennia.commands.default.admin.CmdEmit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -1032,6 +1032,13 @@ unique.</p>
At this point we know destination is a valid location</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdOpen.parse">
<code class="sig-name descname">parse</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdOpen.parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdOpen.parse" title="Permalink to this definition"></a></dt>
<dd><p>We need to expand the default parsing to get all
the cases, see the module doc.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdOpen.func">
<code class="sig-name descname">func</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdOpen.func"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdOpen.func" title="Permalink to this definition"></a></dt>
@ -1269,7 +1276,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['update', 'parent', 'type', 'swap']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['parent', 'swap', 'type', 'update']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1300,7 +1307,7 @@ server settings.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdTypeclass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'update parent type swap', 'category': 'building', 'key': 'typeclass', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object.\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'parent swap type update', 'category': 'building', 'key': 'typeclass', 'tags': '', 'text': &quot;\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] &lt;object&gt; [= typeclass.path]\n typeclass/prototype &lt;object&gt; = prototype_key\n\n typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object.\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1584,7 +1591,7 @@ one is given.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdFind.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['search', 'locate']</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['locate', 'search']</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1615,7 +1622,7 @@ one is given.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.building.CmdFind.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'search locate', 'category': 'building', 'key': 'find', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] &lt;name or dbref or *account&gt; [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'locate search', 'category': 'building', 'key': 'find', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] &lt;name or dbref or *account&gt; [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdFind.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -1680,6 +1687,12 @@ teleported to the target location.</p>
<code class="sig-name descname">help_category</code><em class="property"> = 'building'</em><a class="headerlink" href="#evennia.commands.default.building.CmdTeleport.help_category" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdTeleport.parse">
<code class="sig-name descname">parse</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdTeleport.parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdTeleport.parse" title="Permalink to this definition"></a></dt>
<dd><p>Breaking out searching here to make this easier to override.</p>
</dd></dl>
<dl class="py method">
<dt id="evennia.commands.default.building.CmdTeleport.func">
<code class="sig-name descname">func</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/building.html#CmdTeleport.func"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.building.CmdTeleport.func" title="Permalink to this definition"></a></dt>

View file

@ -113,7 +113,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -144,7 +144,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look &lt;obj&gt;\n look *&lt;account&gt;\n\n Observes your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -206,7 +206,7 @@ for everyone to use, you need build privileges and the alias command.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdNick.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['nicks', 'nickname']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['nickname', 'nicks']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -238,7 +238,7 @@ for everyone to use, you need build privileges and the alias command.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdNick.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] &lt;string&gt; [= [replacement_string]]\n nick[/switches] &lt;template&gt; = &lt;replacement_template&gt;\n nick/delete &lt;string&gt; or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also &quot;nicks&quot; works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side &lt;string&gt;:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your &lt;string&gt;\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] &lt;string&gt; [= [replacement_string]]\n nick[/switches] &lt;template&gt; = &lt;replacement_template&gt;\n nick/delete &lt;string&gt; or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also &quot;nicks&quot; works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side &lt;string&gt;:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your &lt;string&gt;\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -642,7 +642,7 @@ automatically begin with your name.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['emote', ':']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = [':', 'emote']</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -678,7 +678,7 @@ space.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.general.CmdPose.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'tags': '', 'text': &quot;\n strike a pose\n\n Usage:\n pose &lt;pose text&gt;\n pose's &lt;pose text&gt;\n\n Example:\n pose is standing by the wall, smiling.\n -&gt; others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.general.CmdPose.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -386,7 +386,7 @@ given, &lt;nr&gt; defaults to 10.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdObjects.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['listobjects', 'db', 'stats', 'listobjs']</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['stats', 'listobjs', 'listobjects', 'db']</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -412,7 +412,7 @@ given, &lt;nr&gt; defaults to 10.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdObjects.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'listobjects db stats listobjs', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [&lt;nr&gt;]\n\n Gives statictics on objects in database as well as\n a list of &lt;nr&gt; latest objects in database. If not\n given, &lt;nr&gt; defaults to 10.\n '}</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'stats listobjs listobjects db', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [&lt;nr&gt;]\n\n Gives statictics on objects in database as well as\n a list of &lt;nr&gt; latest objects in database. If not\n given, &lt;nr&gt; defaults to 10.\n '}</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -613,7 +613,7 @@ the released memory will instead be re-used by the program.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdServerLoad.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['serverprocess', 'serverload']</em><a class="headerlink" href="#evennia.commands.default.system.CmdServerLoad.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['serverload', 'serverprocess']</em><a class="headerlink" href="#evennia.commands.default.system.CmdServerLoad.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -644,7 +644,7 @@ the released memory will instead be re-used by the program.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdServerLoad.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'serverprocess serverload', 'category': 'system', 'key': 'server', 'tags': '', 'text': &quot;\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdServerLoad.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'serverload serverprocess', 'category': 'system', 'key': 'server', 'tags': '', 'text': &quot;\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdServerLoad.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -687,7 +687,7 @@ See <a href="#id11"><span class="problematic" id="id12">|</span></a>luhttps://ww
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['task', 'delays']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['delays', 'task']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -733,7 +733,7 @@ to all the variables defined therein.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.system.CmdTasks.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'task delays', 'category': 'system', 'key': 'tasks', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'delays task', 'category': 'system', 'key': 'tasks', 'tags': '', 'text': &quot;\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n &quot;}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -60,7 +60,7 @@ connect “account name” “pass word”</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'co', 'conn']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['conn', 'co', 'con']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -95,7 +95,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect &quot;account name&quot; &quot;pass word&quot;\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -174,7 +174,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -200,7 +200,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -273,7 +273,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['?', 'h']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['h', '?']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -299,7 +299,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '? h', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -78,7 +78,7 @@ at them with this command.</p>
<dl class="py attribute">
<dt id="evennia.contrib.chargen.CmdOOCLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.chargen.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.chargen.CmdOOCLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -110,7 +110,7 @@ that is checked by the &#64;ic command directly.</p>
<dl class="py attribute">
<dt id="evennia.contrib.chargen.CmdOOCLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n ooc look\n\n Usage:\n look\n look &lt;character&gt;\n\n This is an OOC version of the look command. Since an Account doesn\'t\n have an in-game existence, there is no concept of location or\n &quot;self&quot;.\n\n If any characters are available for you to control, you may look\n at them with this command.\n '}</em><a class="headerlink" href="#evennia.contrib.chargen.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n ooc look\n\n Usage:\n look\n look &lt;character&gt;\n\n This is an OOC version of the look command. Since an Account doesn\'t\n have an in-game existence, there is no concept of location or\n &quot;self&quot;.\n\n If any characters are available for you to control, you may look\n at them with this command.\n '}</em><a class="headerlink" href="#evennia.contrib.chargen.CmdOOCLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -75,7 +75,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedConnect.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'co', 'conn']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['conn', 'co', 'con']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -105,7 +105,7 @@ there is no object yet before the account has logged in)</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedConnect.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'conn co con', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect &lt;email&gt; &lt;password&gt;\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -182,7 +182,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedQuit.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -208,7 +208,7 @@ version is a bit more complicated.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedQuit.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedQuit.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -271,7 +271,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedHelp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['?', 'h']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['h', '?']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedHelp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -297,7 +297,7 @@ for simplicity. It shows a pane of info.</p>
<dl class="py attribute">
<dt id="evennia.contrib.email_login.CmdUnconnectedHelp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '? h', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -148,7 +148,7 @@ the operation will be general or on the room.</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdGiveUp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['abort', 'q', 'quit', 'chicken out']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['abort', 'chicken out', 'q', 'quit']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -172,7 +172,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdGiveUp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'abort q quit chicken out', 'category': 'evscaperoom', 'key': 'give up', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'abort chicken out q quit', 'category': 'evscaperoom', 'key': 'give up', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -193,7 +193,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -227,7 +227,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -308,7 +308,7 @@ shout</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdSpeak.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['shout', ';', 'whisper']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['whisper', ';', 'shout']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -337,7 +337,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdSpeak.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'shout ; whisper', 'category': 'general', 'key': 'say', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say &lt;text&gt;\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'whisper ; shout', 'category': 'general', 'key': 'say', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say &lt;text&gt;\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -427,7 +427,7 @@ looks and what actions is available.</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdFocus.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['unfocus', 'e', 'ex', 'examine']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['examine', 'e', 'unfocus', 'ex']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -456,7 +456,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdFocus.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'unfocus e ex examine', 'category': 'evscaperoom', 'key': 'focus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus &lt;obj&gt;\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'examine e unfocus ex', 'category': 'evscaperoom', 'key': 'focus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus &lt;obj&gt;\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -518,7 +518,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdGet.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'inventory', 'i', 'give']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGet.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'give', 'i', 'inventory']</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGet.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
@ -542,7 +542,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.evscaperoom.commands.CmdGet.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv inventory i give', 'category': 'evscaperoom', 'key': 'get', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGet.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv give i inventory', 'category': 'evscaperoom', 'key': 'get', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}</em><a class="headerlink" href="#evennia.contrib.evscaperoom.commands.CmdGet.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -277,7 +277,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.extended_room.CmdExtendedRoomLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -297,7 +297,7 @@ look <a href="#id1"><span class="problematic" id="id2">*</span></a>&lt;account&g
<dl class="py attribute">
<dt id="evennia.contrib.extended_room.CmdExtendedRoomLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects in your vicinity.\n '}</em><a class="headerlink" href="#evennia.contrib.extended_room.CmdExtendedRoomLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -170,6 +170,25 @@ useful but are deemed too game-specific to go into the core library.</p>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.tutorial_world.rooms.html">evennia.contrib.tutorial_world.rooms</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="evennia.contrib.xyzgrid.html">evennia.contrib.xyzgrid</a><ul>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.commands.html">evennia.contrib.xyzgrid.commands</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.example.html">evennia.contrib.xyzgrid.example</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.launchcmd.html">evennia.contrib.xyzgrid.launchcmd</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.prototypes.html">evennia.contrib.xyzgrid.prototypes</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.tests.html">evennia.contrib.xyzgrid.tests</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.utils.html">evennia.contrib.xyzgrid.utils</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap.html">evennia.contrib.xyzgrid.xymap</a><ul>
<li class="toctree-l3"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap.html#xymap">XYMap</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap_legend.html">evennia.contrib.xyzgrid.xymap_legend</a><ul>
<li class="toctree-l3"><a class="reference internal" href="evennia.contrib.xyzgrid.xymap_legend.html#map-legend-components">Map legend components</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.xyzgrid.html">evennia.contrib.xyzgrid.xyzgrid</a></li>
<li class="toctree-l2"><a class="reference internal" href="evennia.contrib.xyzgrid.xyzroom.html">evennia.contrib.xyzgrid.xyzroom</a></li>
</ul>
</li>
</ul>
</div>
</section>

View file

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

View file

@ -571,7 +571,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_basic.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -592,7 +592,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_basic.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_basic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -688,7 +688,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_equip.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -709,7 +709,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_equip.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_equip.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -722,7 +722,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_items.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -743,7 +743,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_items.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_items.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -594,7 +594,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_magic.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -615,7 +615,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_magic.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_magic.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -1021,7 +1021,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_range.CmdPass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['wait', 'hold']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hold', 'wait']</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -1042,7 +1042,7 @@ if there are still any actions you can take.</p>
<dl class="py attribute">
<dt id="evennia.contrib.turnbattle.tb_range.CmdPass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}</em><a class="headerlink" href="#evennia.contrib.turnbattle.tb_range.CmdPass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -80,7 +80,7 @@ such as when closing the lid and un-blinding a character.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['press button', 'press', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['press', 'press button', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -109,7 +109,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press button press push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -179,7 +179,7 @@ check if the lid is open or closed.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['break lid', 'smash lid', 'smash']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['break lid', 'smash', 'smash lid']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -206,7 +206,7 @@ break.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'break lid smash lid smash', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'break lid smash smash lid', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -306,7 +306,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['press button', 'press', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['press', 'press button', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -335,7 +335,7 @@ set in self.parse())</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press button press push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -433,7 +433,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdBlindLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['listen', 'get', 'feel', 'l', 'ex', 'examine']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ex', 'get', 'listen', 'l', 'feel', 'examine']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -459,7 +459,7 @@ be mutually exclusive.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_examples.red_button.CmdBlindLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'listen get feel l ex examine', 'category': 'general', 'key': 'look', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ex get listen l feel examine', 'category': 'general', 'key': 'look', 'tags': '', 'text': &quot;\n Looking around in darkness\n\n Usage:\n look &lt;obj&gt;\n\n ... not that there's much to see in the dark.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -493,7 +493,7 @@ shift green root up/down</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['pull', 'shiftroot', 'push', 'move']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'pull', 'move', 'shiftroot']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -529,7 +529,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdShiftRoot.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'pull shiftroot push move', 'category': 'tutorialworld', 'key': 'shift', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push pull move shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -546,7 +546,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdPressButton.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['push button', 'press button', 'button']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['button', 'push button', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -572,7 +572,7 @@ yellow/green - horizontal roots</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdPressButton.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'button push button press button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -716,7 +716,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdAttack.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['thrust', 'kill', 'pierce', 'fight', 'bash', 'parry', 'stab', 'hit', 'defend', 'slash', 'chop']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['hit', 'slash', 'pierce', 'defend', 'kill', 'bash', 'fight', 'chop', 'parry', 'thrust', 'stab']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -742,7 +742,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.objects.CmdAttack.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'thrust kill pierce fight bash parry stab hit defend slash chop', 'category': 'tutorialworld', 'key': 'attack', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'hit slash pierce defend kill bash fight chop parry thrust stab', 'category': 'tutorialworld', 'key': 'attack', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab &lt;enemy&gt;\n slash &lt;enemy&gt;\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -185,7 +185,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdTutorialLook.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'ls']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['ls', 'l']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -200,7 +200,7 @@ code except for adding in the details.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdTutorialLook.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look &lt;obj&gt;\n look &lt;room detail&gt;\n look *&lt;account&gt;\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at &quot;details&quot; in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdTutorialLook.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -714,7 +714,7 @@ if they fall off the bridge.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdBridgeHelp.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['?', 'h']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdBridgeHelp.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['h', '?']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdBridgeHelp.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -740,7 +740,7 @@ if they fall off the bridge.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdBridgeHelp.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdBridgeHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdBridgeHelp.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
@ -866,7 +866,7 @@ to find something.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['fiddle', 'feel around', 'feel', 'l', 'search']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">aliases</code><em class="property"> = ['fiddle', 'l', 'feel around', 'feel', 'search']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
@ -894,7 +894,7 @@ random chance of eventually finding a light source.</p>
<dl class="py attribute">
<dt id="evennia.contrib.tutorial_world.rooms.CmdLookDark.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'fiddle feel around feel l search', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'fiddle l feel around feel search', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>

View file

@ -0,0 +1,411 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>evennia.contrib.xyzgrid.commands &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.commands</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.contrib.xyzgrid.commands">
<span id="evennia-contrib-xyzgrid-commands"></span><h1>evennia.contrib.xyzgrid.commands<a class="headerlink" href="#module-evennia.contrib.xyzgrid.commands" title="Permalink to this headline"></a></h1>
<p>XYZ-aware commands</p>
<p>Just add the XYZGridCmdSet to the default character cmdset to override
the commands with XYZ-aware equivalents.</p>
<dl class="py class">
<dt id="evennia.contrib.xyzgrid.commands.PathData">
<em class="property">class </em><code class="sig-prename descclassname">evennia.contrib.xyzgrid.commands.</code><code class="sig-name descname">PathData</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">target</span></em>, <em class="sig-param"><span class="n">xymap</span></em>, <em class="sig-param"><span class="n">directions</span></em>, <em class="sig-param"><span class="n">step_sequence</span></em>, <em class="sig-param"><span class="n">task</span></em><span class="sig-paren">)</span><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.PathData" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">tuple</span></code></p>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.PathData.directions">
<code class="sig-name descname">directions</code><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.PathData.directions" title="Permalink to this definition"></a></dt>
<dd><p>Alias for field number 2</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.PathData.step_sequence">
<code class="sig-name descname">step_sequence</code><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.PathData.step_sequence" title="Permalink to this definition"></a></dt>
<dd><p>Alias for field number 3</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.PathData.target">
<code class="sig-name descname">target</code><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.PathData.target" title="Permalink to this definition"></a></dt>
<dd><p>Alias for field number 0</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.PathData.task">
<code class="sig-name descname">task</code><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.PathData.task" title="Permalink to this definition"></a></dt>
<dd><p>Alias for field number 4</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.PathData.xymap">
<code class="sig-name descname">xymap</code><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.PathData.xymap" title="Permalink to this definition"></a></dt>
<dd><p>Alias for field number 1</p>
</dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZTeleport">
<em class="property">class </em><code class="sig-prename descclassname">evennia.contrib.xyzgrid.commands.</code><code class="sig-name descname">CmdXYZTeleport</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdXYZTeleport"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZTeleport" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport" title="evennia.commands.default.building.CmdTeleport"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.commands.default.building.CmdTeleport</span></code></a></p>
<p>teleport object to another location</p>
<dl class="simple">
<dt>Usage:</dt><dd><p>tel/switch [&lt;object&gt; to||=] &lt;target location&gt;
tel/switch [&lt;object&gt; to||=] (X,Y[,Z])</p>
</dd>
</dl>
<p class="rubric">Examples</p>
<p>tel Limbo
tel/quiet box = Limbo
tel/tonone box
tel (3, 3, the small cave)
tel (4, 1) # on the same map
tel/map Z|mapname</p>
<dl>
<dt>Switches:</dt><dd><dl class="simple">
<dt>quiet - dont echo leave/arrive messages to the source/target</dt><dd><p>locations for the move.</p>
</dd>
<dt>intoexit - if target is an exit, teleport INTO</dt><dd><p>the exit object instead of to its destination</p>
</dd>
<dt>tonone - if set, teleport the object to a None-location. If this</dt><dd><p>switch is set, &lt;target location&gt; is ignored.
Note that the only way to retrieve
an object from a None location is by direct #dbref
reference. A puppeted object cannot be moved to None.</p>
</dd>
</dl>
<p>loc - teleport object to the targets location instead of its contents
map - show coordinate map of given Zcoord/mapname.</p>
</dd>
</dl>
<p>Teleports an object somewhere. If no object is given, you yourself are
teleported to the target location. If (X,Y) or (X,Y,Z) coordinates
are given, the target is a location on the XYZGrid.</p>
<dl class="py method">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZTeleport.parse">
<code class="sig-name descname">parse</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdXYZTeleport.parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZTeleport.parse" title="Permalink to this definition"></a></dt>
<dd><p>Breaking out searching here to make this easier to override.</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZTeleport.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['teleport']</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZTeleport.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZTeleport.help_category">
<code class="sig-name descname">help_category</code><em class="property"> = 'building'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZTeleport.help_category" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZTeleport.key">
<code class="sig-name descname">key</code><em class="property"> = 'tel'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZTeleport.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZTeleport.lock_storage">
<code class="sig-name descname">lock_storage</code><em class="property"> = 'cmd:perm(teleport) or perm(Builder)'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZTeleport.lock_storage" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZTeleport.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'teleport', 'category': 'building', 'key': 'tel', 'tags': '', 'text': &quot;\n teleport object to another location\n\n Usage:\n tel/switch [&lt;object&gt; to||=] &lt;target location&gt;\n tel/switch [&lt;object&gt; to||=] (X,Y[,Z])\n\n Examples:\n tel Limbo\n tel/quiet box = Limbo\n tel/tonone box\n tel (3, 3, the small cave)\n tel (4, 1) # on the same map\n tel/map Z|mapname\n\n Switches:\n quiet - don't echo leave/arrive messages to the source/target\n locations for the move.\n intoexit - if target is an exit, teleport INTO\n the exit object instead of to its destination\n tonone - if set, teleport the object to a None-location. If this\n switch is set, &lt;target location&gt; is ignored.\n Note that the only way to retrieve\n an object from a None location is by direct #dbref\n reference. A puppeted object cannot be moved to None.\n loc - teleport object to the target's location instead of its contents\n map - show coordinate map of given Zcoord/mapname.\n\n Teleports an object somewhere. If no object is given, you yourself are\n teleported to the target location. If (X,Y) or (X,Y,Z) coordinates\n are given, the target is a location on the XYZGrid.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZTeleport.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZOpen">
<em class="property">class </em><code class="sig-prename descclassname">evennia.contrib.xyzgrid.commands.</code><code class="sig-name descname">CmdXYZOpen</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdXYZOpen"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZOpen" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen" title="evennia.commands.default.building.CmdOpen"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.commands.default.building.CmdOpen</span></code></a></p>
<p>open a new exit from the current room</p>
<dl class="simple">
<dt>Usage:</dt><dd><p>open &lt;new exit&gt;[;alias;..][:typeclass] [,&lt;return exit&gt;[;alias;..][:typeclass]]] = &lt;destination&gt;
open &lt;new exit&gt;[;alias;..][:typeclass] [,&lt;return exit&gt;[;alias;..][:typeclass]]] = (X,Y,Z)</p>
</dd>
</dl>
<p>Handles the creation of exits. If a destination is given, the exit
will point there. The destination can also be given as an (X,Y,Z) coordinate on the
XYZGrid - this command is used to link non-grid rooms to the grid and vice-versa.</p>
<p>The &lt;return exit&gt; argument sets up an exit at the destination leading back to the current room.
Apart from (X,Y,Z) coordinate, destination name can be given both as a #dbref and a name, if
that name is globally unique.</p>
<p class="rubric">Examples</p>
<p>open kitchen = Kitchen
open north, south = Town Center
open cave mouth;cave = (3, 4, the small cave)</p>
<dl class="py method">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZOpen.parse">
<code class="sig-name descname">parse</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdXYZOpen.parse"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZOpen.parse" title="Permalink to this definition"></a></dt>
<dd><p>We need to expand the default parsing to get all
the cases, see the module doc.</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZOpen.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = []</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZOpen.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZOpen.help_category">
<code class="sig-name descname">help_category</code><em class="property"> = 'building'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZOpen.help_category" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZOpen.key">
<code class="sig-name descname">key</code><em class="property"> = 'open'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZOpen.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZOpen.lock_storage">
<code class="sig-name descname">lock_storage</code><em class="property"> = 'cmd:perm(open) or perm(Builder)'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZOpen.lock_storage" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdXYZOpen.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '', 'category': 'building', 'key': 'open', 'tags': '', 'text': '\n open a new exit from the current room\n\n Usage:\n open &lt;new exit&gt;[;alias;..][:typeclass] [,&lt;return exit&gt;[;alias;..][:typeclass]]] = &lt;destination&gt;\n open &lt;new exit&gt;[;alias;..][:typeclass] [,&lt;return exit&gt;[;alias;..][:typeclass]]] = (X,Y,Z)\n\n Handles the creation of exits. If a destination is given, the exit\n will point there. The destination can also be given as an (X,Y,Z) coordinate on the\n XYZGrid - this command is used to link non-grid rooms to the grid and vice-versa.\n\n The &lt;return exit&gt; argument sets up an exit at the destination leading back to the current room.\n Apart from (X,Y,Z) coordinate, destination name can be given both as a #dbref and a name, if\n that name is globally unique.\n\n Examples:\n open kitchen = Kitchen\n open north, south = Town Center\n open cave mouth;cave = (3, 4, the small cave)\n\n '}</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdXYZOpen.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto">
<em class="property">class </em><code class="sig-prename descclassname">evennia.contrib.xyzgrid.commands.</code><code class="sig-name descname">CmdGoto</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdGoto"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand" title="evennia.commands.default.muxcommand.MuxCommand"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.commands.default.muxcommand.MuxCommand</span></code></a></p>
<p>Go to a named location in this area via the shortest path.</p>
<dl class="simple">
<dt>Usage:</dt><dd><p>path &lt;location&gt; - find shortest path to target location (dont move)
goto &lt;location&gt; - auto-move to target location, using shortest path
path - show current target location and shortest path
goto - abort current goto, otherwise show current path
path clear - clear current path</p>
</dd>
</dl>
<p>Finds the shortest route to a location in your current area and
can then automatically walk you there.</p>
<p>Builders can optionally specify a specific grid coordinate (X,Y) to go to.</p>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.key">
<code class="sig-name descname">key</code><em class="property"> = 'goto'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = ['path']</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.help_category">
<code class="sig-name descname">help_category</code><em class="property"> = 'general'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.help_category" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.locks">
<code class="sig-name descname">locks</code><em class="property"> = 'cmd:all()'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.locks" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.auto_step_delay">
<code class="sig-name descname">auto_step_delay</code><em class="property"> = 2</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.auto_step_delay" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.default_xyz_path_interrupt_msg">
<code class="sig-name descname">default_xyz_path_interrupt_msg</code><em class="property"> = 'Pathfinding interrupted here.'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.default_xyz_path_interrupt_msg" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.func">
<code class="sig-name descname">func</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdGoto.func"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.func" title="Permalink to this definition"></a></dt>
<dd><p>Implement command</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.lock_storage">
<code class="sig-name descname">lock_storage</code><em class="property"> = 'cmd:all()'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.lock_storage" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdGoto.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'path', 'category': 'general', 'key': 'goto', 'tags': '', 'text': &quot;\n Go to a named location in this area via the shortest path.\n\n Usage:\n path &lt;location&gt; - find shortest path to target location (don't move)\n goto &lt;location&gt; - auto-move to target location, using shortest path\n path - show current target location and shortest path\n goto - abort current goto, otherwise show current path\n path clear - clear current path\n\n Finds the shortest route to a location in your current area and\n can then automatically walk you there.\n\n Builders can optionally specify a specific grid coordinate (X,Y) to go to.\n\n &quot;}</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdGoto.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap">
<em class="property">class </em><code class="sig-prename descclassname">evennia.contrib.xyzgrid.commands.</code><code class="sig-name descname">CmdMap</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdMap"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.commands.default.muxcommand.html#evennia.commands.default.muxcommand.MuxCommand" title="evennia.commands.default.muxcommand.MuxCommand"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.commands.default.muxcommand.MuxCommand</span></code></a></p>
<p>Show a map of an area</p>
<dl class="simple">
<dt>Usage:</dt><dd><p>map [Zcoord]
map list</p>
</dd>
</dl>
<p>This is a builder-command.</p>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap.key">
<code class="sig-name descname">key</code><em class="property"> = 'map'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap.locks">
<code class="sig-name descname">locks</code><em class="property"> = 'cmd:perm(Builders)'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap.locks" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap.func">
<code class="sig-name descname">func</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#CmdMap.func"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap.func" title="Permalink to this definition"></a></dt>
<dd><p>Implement command</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap.aliases">
<code class="sig-name descname">aliases</code><em class="property"> = []</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap.aliases" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap.help_category">
<code class="sig-name descname">help_category</code><em class="property"> = 'general'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap.help_category" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap.lock_storage">
<code class="sig-name descname">lock_storage</code><em class="property"> = 'cmd:perm(Builders)'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap.lock_storage" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.CmdMap.search_index_entry">
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '', 'category': 'general', 'key': 'map', 'tags': '', 'text': '\n Show a map of an area\n\n Usage:\n map [Zcoord]\n map list\n\n This is a builder-command.\n\n '}</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.CmdMap.search_index_entry" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
<dl class="py class">
<dt id="evennia.contrib.xyzgrid.commands.XYZGridCmdSet">
<em class="property">class </em><code class="sig-prename descclassname">evennia.contrib.xyzgrid.commands.</code><code class="sig-name descname">XYZGridCmdSet</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">cmdsetobj</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#XYZGridCmdSet"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.XYZGridCmdSet" title="Permalink to this definition"></a></dt>
<dd><p>Bases: <a class="reference internal" href="evennia.commands.cmdset.html#evennia.commands.cmdset.CmdSet" title="evennia.commands.cmdset.CmdSet"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.commands.cmdset.CmdSet</span></code></a></p>
<p>Cmdset for easily adding the above cmds to the character cmdset.</p>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.XYZGridCmdSet.key">
<code class="sig-name descname">key</code><em class="property"> = 'xyzgrid_cmdset'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.XYZGridCmdSet.key" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
<dl class="py method">
<dt id="evennia.contrib.xyzgrid.commands.XYZGridCmdSet.at_cmdset_creation">
<code class="sig-name descname">at_cmdset_creation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/xyzgrid/commands.html#XYZGridCmdSet.at_cmdset_creation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.XYZGridCmdSet.at_cmdset_creation" title="Permalink to this definition"></a></dt>
<dd><p>Hook method - this should be overloaded in the inheriting
class, and should take care of populating the cmdset by use of
self.add().</p>
</dd></dl>
<dl class="py attribute">
<dt id="evennia.contrib.xyzgrid.commands.XYZGridCmdSet.path">
<code class="sig-name descname">path</code><em class="property"> = 'evennia.contrib.xyzgrid.commands.XYZGridCmdSet'</em><a class="headerlink" href="#evennia.contrib.xyzgrid.commands.XYZGridCmdSet.path" title="Permalink to this definition"></a></dt>
<dd></dd></dl>
</dd></dl>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.contrib.xyzgrid.commands.rst.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li><a href="http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">IRC</a> -
<a href="https://discord.gg/NecFePw">Discord</a> -
<a href="https://groups.google.com/forum/#%21forum/evennia">Forums</a>
</li>
<li><a href="http://evennia.blogspot.com/">Evennia Dev blog</a> </li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="evennia.contrib.xyzgrid.commands.html">1.0-dev (develop branch)</a></li>
<li><a href="../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.xyzgrid.commands</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

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