Updated HTML docs

This commit is contained in:
Evennia docbuilder action 2022-08-05 18:45:45 +00:00
parent e41f2ff6b2
commit 3e1506b2c2
104 changed files with 6668 additions and 348 deletions

View file

@ -340,7 +340,7 @@
<span class="k">return</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;puppet&quot;</span><span class="p">):</span>
<span class="c1"># no access</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You don&#39;t have permission to puppet &#39;</span><span class="si">{obj.key}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">&quot;You don&#39;t have permission to puppet &#39;</span><span class="si">{</span><span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39;.&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="p">:</span>
<span class="c1"># object already puppeted</span>

View file

@ -103,38 +103,14 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">matches</span> <span class="o">=</span> <span class="p">[]</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">if</span> <span class="n">include_prefixes</span><span class="p">:</span>
<span class="c1"># use the cmdname as-is</span>
<span class="n">l_raw_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmdset</span><span class="p">:</span>
<span class="n">matches</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
<span class="p">[</span>
<span class="n">create_match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="n">cmdname</span><span class="p">)</span>
<span class="k">for</span> <span class="n">cmdname</span> <span class="ow">in</span> <span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="p">]</span> <span class="o">+</span> <span class="n">cmd</span><span class="o">.</span><span class="n">aliases</span>
<span class="k">if</span> <span class="n">cmdname</span>
<span class="ow">and</span> <span class="n">l_raw_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">cmdname</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">l_raw_string</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmdname</span><span class="p">)</span> <span class="p">:]))</span>
<span class="p">]</span>
<span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># strip prefixes set in settings</span>
<span class="n">raw_string</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">raw_string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">)</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_string</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">raw_string</span>
<span class="p">)</span>
<span class="n">l_raw_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmdset</span><span class="p">:</span>
<span class="k">for</span> <span class="n">raw_cmdname</span> <span class="ow">in</span> <span class="p">[</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="p">]</span> <span class="o">+</span> <span class="n">cmd</span><span class="o">.</span><span class="n">aliases</span><span class="p">:</span>
<span class="n">cmdname</span> <span class="o">=</span> <span class="p">(</span>
<span class="n">raw_cmdname</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_cmdname</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span>
<span class="k">else</span> <span class="n">raw_cmdname</span>
<span class="p">)</span>
<span class="k">if</span> <span class="p">(</span>
<span class="n">cmdname</span>
<span class="ow">and</span> <span class="n">l_raw_string</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">cmdname</span><span class="o">.</span><span class="n">lower</span><span class="p">())</span>
<span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="n">cmd</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">l_raw_string</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmdname</span><span class="p">)</span> <span class="p">:]))</span>
<span class="p">):</span>
<span class="n">matches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">create_match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="n">raw_cmdname</span><span class="p">))</span>
<span class="n">orig_string</span> <span class="o">=</span> <span class="n">raw_string</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">include_prefixes</span> <span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">raw_string</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">raw_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">_CMD_IGNORE_PREFIXES</span><span class="p">)</span>
<span class="n">search_string</span> <span class="o">=</span> <span class="n">raw_string</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">cmdset</span><span class="p">:</span>
<span class="n">cmdname</span><span class="p">,</span> <span class="n">raw_cmdname</span> <span class="o">=</span> <span class="n">cmd</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">search_string</span><span class="p">,</span> <span class="n">include_prefixes</span><span class="o">=</span><span class="n">include_prefixes</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="p">:</span>
<span class="n">matches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">create_match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">,</span> <span class="n">raw_string</span><span class="p">,</span> <span class="n">cmd</span><span class="p">,</span> <span class="n">raw_cmdname</span><span class="p">))</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="n">log_trace</span><span class="p">(</span><span class="s2">&quot;cmdhandler error. raw_input:</span><span class="si">%s</span><span class="s2">&quot;</span> <span class="o">%</span> <span class="n">raw_string</span><span class="p">)</span>
<span class="k">return</span> <span class="n">matches</span></div>

View file

@ -69,6 +69,7 @@
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">weakref</span> <span class="kn">import</span> <span class="n">WeakKeyDictionary</span>
<span class="kn">from</span> <span class="nn">django.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">inherits_from</span><span class="p">,</span> <span class="n">is_iter</span>
@ -588,10 +589,7 @@
<span class="n">commands</span><span class="p">[</span><span class="n">ic</span><span class="p">]</span> <span class="o">=</span> <span class="n">cmd</span> <span class="c1"># replace</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="n">commands</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">commands</span> <span class="o">=</span> <span class="n">commands</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">allow_duplicates</span><span class="p">:</span>
<span class="c1"># extra run to make sure to avoid doublets</span>
<span class="bp">self</span><span class="o">.</span><span class="n">commands</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="p">))</span>
<span class="c1"># add system_command to separate list as well,</span>
<span class="c1"># for quick look-up</span>
<span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;__&quot;</span><span class="p">):</span>
@ -599,7 +597,12 @@
<span class="n">ic</span> <span class="o">=</span> <span class="n">system_commands</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
<span class="n">system_commands</span><span class="p">[</span><span class="n">ic</span><span class="p">]</span> <span class="o">=</span> <span class="n">cmd</span> <span class="c1"># replace</span>
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
<span class="n">system_commands</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span></div>
<span class="n">system_commands</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">commands</span> <span class="o">=</span> <span class="n">commands</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">allow_duplicates</span><span class="p">:</span>
<span class="c1"># extra run to make sure to avoid doublets</span>
<span class="bp">self</span><span class="o">.</span><span class="n">commands</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="p">))</span></div>
<div class="viewcode-block" id="CmdSet.remove"><a class="viewcode-back" href="../../../api/evennia.commands.cmdset.html#evennia.commands.cmdset.CmdSet.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmd</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -610,6 +613,15 @@
<span class="sd"> or the key of such a command.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">_cmd</span> <span class="o">=</span> <span class="nb">next</span><span class="p">((</span><span class="n">_cmd</span> <span class="k">for</span> <span class="n">_cmd</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">commands</span> <span class="k">if</span> <span class="n">_cmd</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="n">cmd</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_cmd</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;__&quot;</span><span class="p">):</span>
<span class="c1"># if a syscommand, keep the original string and instantiate on it</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="n">_cmd</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instantiate</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
<span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;__&quot;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
@ -633,6 +645,15 @@
<span class="sd"> cmd (Command): The first matching Command in the set.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
<span class="n">_cmd</span> <span class="o">=</span> <span class="nb">next</span><span class="p">((</span><span class="n">_cmd</span> <span class="k">for</span> <span class="n">_cmd</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">commands</span> <span class="k">if</span> <span class="n">_cmd</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="n">cmd</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span>
<span class="k">if</span> <span class="n">_cmd</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">cmd</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;__&quot;</span><span class="p">):</span>
<span class="c1"># if a syscommand, keep the original string and instantiate on it</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="k">else</span><span class="p">:</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="n">_cmd</span>
<span class="n">cmd</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_instantiate</span><span class="p">(</span><span class="n">cmd</span><span class="p">)</span>
<span class="k">for</span> <span class="n">thiscmd</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">commands</span><span class="p">:</span>
<span class="k">if</span> <span class="n">thiscmd</span> <span class="o">==</span> <span class="n">cmd</span><span class="p">:</span>

View file

@ -262,7 +262,8 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">kwargs</span><span class="p">:</span>
<span class="n">_init_command</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></div>
<span class="n">_init_command</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="bp">self</span><span class="o">.</span><span class="n">_optimize</span><span class="p">()</span></div>
<div class="viewcode-block" id="Command.lockhandler"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.Command.lockhandler">[docs]</a> <span class="nd">@lazy_property</span>
<span class="k">def</span> <span class="nf">lockhandler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
@ -339,10 +340,15 @@
<span class="sd"> Optimize the key and aliases for lookups.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># optimization - a set is much faster to match against than a list</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_matchset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">([</span><span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">]</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">aliases</span><span class="p">)</span>
<span class="n">matches</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="o">.</span><span class="n">lower</span><span class="p">()]</span>
<span class="n">matches</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">x</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">aliases</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_matchset</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">matches</span><span class="p">)</span>
<span class="c1"># optimization for looping over keys+aliases</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_keyaliases</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_matchset</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_noprefix_aliases</span> <span class="o">=</span> <span class="p">{</span><span class="n">x</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="n">CMD_IGNORE_PREFIXES</span><span class="p">):</span> <span class="n">x</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">matches</span><span class="p">}</span>
<div class="viewcode-block" id="Command.set_key"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.Command.set_key">[docs]</a> <span class="k">def</span> <span class="nf">set_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">new_key</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Update key.</span>
@ -378,7 +384,7 @@
<span class="bp">self</span><span class="o">.</span><span class="n">aliases</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">alias</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span> <span class="k">if</span> <span class="n">alias</span> <span class="o">!=</span> <span class="bp">self</span><span class="o">.</span><span class="n">key</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_optimize</span><span class="p">()</span></div>
<div class="viewcode-block" id="Command.match"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.Command.match">[docs]</a> <span class="k">def</span> <span class="nf">match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmdname</span><span class="p">):</span>
<div class="viewcode-block" id="Command.match"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.Command.match">[docs]</a> <span class="k">def</span> <span class="nf">match</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cmdname</span><span class="p">,</span> <span class="n">include_prefixes</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 the system when searching the available commands,</span>
<span class="sd"> in order to determine if this is the one we wanted. cmdname was</span>
@ -387,11 +393,23 @@
<span class="sd"> Args:</span>
<span class="sd"> cmdname (str): Always lowercase when reaching this point.</span>
<span class="sd"> Kwargs:</span>
<span class="sd"> include_prefixes (bool): If false, will compare against the _noprefix</span>
<span class="sd"> variants of commandnames.</span>
<span class="sd"> Returns:</span>
<span class="sd"> result (bool): Match result.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">cmdname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_matchset</span></div>
<span class="k">if</span> <span class="n">include_prefixes</span><span class="p">:</span>
<span class="k">for</span> <span class="n">cmd_key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_keyaliases</span><span class="p">:</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">cmd_key</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">cmd_key</span><span class="p">)</span> <span class="p">:])):</span>
<span class="k">return</span> <span class="n">cmd_key</span><span class="p">,</span> <span class="n">cmd_key</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">for</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_noprefix_aliases</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="k">if</span> <span class="n">cmdname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="ow">and</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">arg_regex</span><span class="o">.</span><span class="n">match</span><span class="p">(</span><span class="n">cmdname</span><span class="p">[</span><span class="nb">len</span><span class="p">(</span><span class="n">k</span><span class="p">)</span> <span class="p">:])):</span>
<span class="k">return</span> <span class="n">k</span><span class="p">,</span> <span class="n">v</span>
<span class="k">return</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span></div>
<div class="viewcode-block" id="Command.access"><a class="viewcode-back" href="../../../api/evennia.commands.command.html#evennia.commands.cmdhandler.Command.access">[docs]</a> <span class="k">def</span> <span class="nf">access</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">srcobj</span><span class="p">,</span> <span class="n">access_type</span><span class="o">=</span><span class="s2">&quot;cmd&quot;</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>

View file

@ -77,6 +77,8 @@
<span class="n">_FUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_ATTRFUNCPARSER</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">_KEY_REGEX</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;(?P&lt;attr&gt;.*?)(?P&lt;key&gt;(\[.*\]\ *)+)?$&quot;</span><span class="p">)</span>
<span class="c1"># limit symbol import for API</span>
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
<span class="s2">&quot;ObjManipCommand&quot;</span><span class="p">,</span>
@ -168,7 +170,28 @@
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;;&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
<span class="k">if</span> <span class="s2">&quot;/&quot;</span> <span class="ow">in</span> <span class="n">objdef</span><span class="p">:</span>
<span class="n">objdef</span><span class="p">,</span> <span class="n">attrs</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">objdef</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">)</span> <span class="k">if</span> <span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
<span class="n">_attrs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="c1"># Should an attribute key is specified, ie. we&#39;re working</span>
<span class="c1"># on a dict, what we want is to lowercase attribute name</span>
<span class="c1"># as usual but to preserve dict key case as one would</span>
<span class="c1"># expect:</span>
<span class="c1">#</span>
<span class="c1"># set box/MyAttr = {&#39;FooBar&#39;: 1}</span>
<span class="c1"># Created attribute box/myattr [category:None] = {&#39;FooBar&#39;: 1}</span>
<span class="c1"># set box/MyAttr[&#39;FooBar&#39;] = 2</span>
<span class="c1"># Modified attribute box/myattr [category:None] = {&#39;FooBar&#39;: 2}</span>
<span class="k">for</span> <span class="n">match</span> <span class="ow">in</span> <span class="p">(</span>
<span class="k">match</span>
<span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="nb">map</span><span class="p">(</span><span class="nb">str</span><span class="o">.</span><span class="n">strip</span><span class="p">,</span> <span class="n">attrs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;/&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">part</span> <span class="ow">and</span> <span class="p">(</span><span class="n">match</span> <span class="o">:=</span> <span class="n">_KEY_REGEX</span><span class="o">.</span><span class="n">match</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="p">):</span>
<span class="n">attr</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;attr&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
<span class="c1"># reappend untouched key, if present</span>
<span class="k">if</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">):</span>
<span class="n">attr</span> <span class="o">+=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="s2">&quot;key&quot;</span><span class="p">)</span>
<span class="n">_attrs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="n">_attrs</span>
<span class="c1"># store data</span>
<span class="n">obj_defs</span><span class="p">[</span><span class="n">iside</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="n">objdef</span><span class="p">,</span> <span class="s2">&quot;option&quot;</span><span class="p">:</span> <span class="n">option</span><span class="p">,</span> <span class="s2">&quot;aliases&quot;</span><span class="p">:</span> <span class="n">aliases</span><span class="p">})</span>
<span class="n">obj_attrs</span><span class="p">[</span><span class="n">iside</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">&quot;name&quot;</span><span class="p">:</span> <span class="n">objdef</span><span class="p">,</span> <span class="s2">&quot;attrs&quot;</span><span class="p">:</span> <span class="n">attrs</span><span class="p">})</span>
@ -1969,7 +1992,7 @@
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
<span class="c1"># no = means we inspect the attribute(s)</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">attrs</span><span class="p">:</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_obj</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)]</span>
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
<span class="k">continue</span>

View file

@ -916,14 +916,14 @@
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="n">HelpCategory</span><span class="p">):</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the name of &quot;</span>
<span class="s2">&quot;help-category &#39;</span><span class="si">{match.key}</span><span class="s2">&#39;. If you continue, your help entry will &quot;</span>
<span class="sa">f</span><span class="s2">&quot;help-category &#39;</span><span class="si">{</span><span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39;. If you continue, your help entry will &quot;</span>
<span class="s2">&quot;take precedence and the category (or part of its name) *may* not &quot;</span>
<span class="s2">&quot;be usable for grouping help entries anymore.&quot;</span>
<span class="p">)</span>
<span class="k">elif</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">match</span><span class="p">,</span> <span class="s2">&quot;evennia.commands.command.Command&quot;</span><span class="p">):</span>
<span class="n">warning</span> <span class="o">=</span> <span class="p">(</span>
<span class="sa">f</span><span class="s2">&quot;&#39;</span><span class="si">{</span><span class="n">querystr</span><span class="si">}</span><span class="s2">&#39; matches (or partially matches) the key/alias of &quot;</span>
<span class="s2">&quot;Command &#39;</span><span class="si">{match.key}</span><span class="s2">&#39;. Command-help take precedence over other &quot;</span>
<span class="sa">f</span><span class="s2">&quot;Command &#39;</span><span class="si">{</span><span class="n">match</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2">&#39;. Command-help take precedence over other &quot;</span>
<span class="s2">&quot;help entries so your help *may* be impossible to reach for those &quot;</span>
<span class="s2">&quot;with access to that command.&quot;</span>
<span class="p">)</span>

View file

@ -999,6 +999,39 @@
<span class="s2">&quot;{&#39;one&#39;: 99, &#39;three&#39;: 3, &#39;+&#39;: 42, &#39;+1&#39;: 33}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># dict - case sensitive keys</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test_case = {&#39;FooBar&#39;: 1}&quot;</span><span class="p">,</span>
<span class="s2">&quot;Created attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: 1}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test_case[&#39;FooBar&#39;] = 2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: 2}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test_case&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: 2}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test_case[&#39;FooBar&#39;] = {&#39;BarBaz&#39;: 1}&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: {&#39;BarBaz&#39;: 1}}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test_case[&#39;FooBar&#39;][&#39;BarBaz&#39;] = 2&quot;</span><span class="p">,</span>
<span class="s2">&quot;Modified attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: {&#39;BarBaz&#39;: 2}}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>
<span class="s2">&quot;Obj/test_case&quot;</span><span class="p">,</span>
<span class="s2">&quot;Attribute Obj/test_case [category:None] = {&#39;FooBar&#39;: {&#39;BarBaz&#39;: 2}}&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="c1"># tuple</span>
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
<span class="n">building</span><span class="o">.</span><span class="n">CmdSetAttribute</span><span class="p">(),</span>

View file

@ -667,7 +667,7 @@
<span class="n">mapping</span><span class="p">[</span><span class="s2">&quot;outputs&quot;</span><span class="p">]</span> <span class="o">=</span> <span class="n">iter_to_str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">output_names</span><span class="p">)</span>
<span class="c1"># populate template and return</span>
<span class="k">return</span> <span class="n">message</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">mapping</span><span class="p">)</span>
<span class="k">return</span> <span class="n">message</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span>
<div class="viewcode-block" id="CraftingRecipe.seed"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.crafting.html#evennia.contrib.game_systems.crafting.crafting.CraftingRecipe.seed">[docs]</a> <span class="nd">@classmethod</span>
<span class="k">def</span> <span class="nf">seed</span><span class="p">(</span><span class="bp">cls</span><span class="p">,</span> <span class="n">tool_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">consumable_kwargs</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>

View file

@ -232,7 +232,7 @@
<span class="p">}</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">recipe</span><span class="o">.</span><span class="n">_format_message</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">expected</span><span class="p">))</span></div>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">msg</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">expected</span><span class="p">))</span></div>
<div class="viewcode-block" id="TestCraftingRecipe.test_craft__success"><a class="viewcode-back" href="../../../../../api/evennia.contrib.game_systems.crafting.tests.html#evennia.contrib.game_systems.crafting.tests.TestCraftingRecipe.test_craft__success">[docs]</a> <span class="k">def</span> <span class="nf">test_craft__success</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Test to create a result from the recipe&quot;&quot;&quot;</span>

View file

@ -50,14 +50,14 @@
<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</span> <span class="kn">import</span> <span class="n">CmdSet</span><span class="p">,</span> <span class="n">InterruptCommand</span><span class="p">,</span> <span class="n">default_cmds</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.grid.xyzgrid.xyzroom</span> <span class="kn">import</span> <span class="n">XYZRoom</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.grid.xyzgrid.xyzgrid</span> <span class="kn">import</span> <span class="n">get_xyzgrid</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.grid.xyzgrid.xyzroom</span> <span class="kn">import</span> <span class="n">XYZRoom</span>
<span class="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="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">delay</span><span class="p">,</span> <span class="n">list_to_string</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>
@ -191,7 +191,8 @@
<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="n">inp</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">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="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>
@ -201,7 +202,7 @@
<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="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>
<span class="k">else</span><span class="p">:</span>
<span class="c1"># regular search query</span>

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,246 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.rpg.buffs.samplebuffs &#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.rpg.buffs.samplebuffs</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.rpg.buffs.samplebuffs</h1><div class="highlight"><pre>
<span></span><span class="kn">import</span> <span class="nn">random</span>
<span class="kn">from</span> <span class="nn">.buff</span> <span class="kn">import</span> <span class="n">BaseBuff</span><span class="p">,</span> <span class="n">Mod</span>
<div class="viewcode-block" id="Exploit"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Exploit">[docs]</a><span class="k">class</span> <span class="nc">Exploit</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;exploit&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Exploit&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;You are learning your opponent&#39;s weaknesses.&quot;</span>
<span class="n">duration</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
<span class="n">maxstacks</span> <span class="o">=</span> <span class="mi">20</span>
<span class="n">triggers</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;hit&quot;</span><span class="p">]</span>
<span class="n">stack_msg</span> <span class="o">=</span> <span class="p">{</span>
<span class="mi">1</span><span class="p">:</span> <span class="s2">&quot;You begin to notice flaws in your opponent&#39;s defense.&quot;</span><span class="p">,</span>
<span class="mi">10</span><span class="p">:</span> <span class="s2">&quot;You&#39;ve begun to match the battle&#39;s rhythm.&quot;</span><span class="p">,</span>
<span class="mi">20</span><span class="p">:</span> <span class="s2">&quot;You&#39;ve found a gap in the guard!&quot;</span><span class="p">,</span>
<span class="p">}</span>
<div class="viewcode-block" id="Exploit.conditional"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Exploit.conditional">[docs]</a> <span class="k">def</span> <span class="nf">conditional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">handler</span><span class="o">.</span><span class="n">get_by_type</span><span class="p">(</span><span class="n">Exploited</span><span class="p">):</span>
<span class="k">return</span> <span class="kc">False</span>
<span class="k">return</span> <span class="kc">True</span></div>
<div class="viewcode-block" id="Exploit.at_trigger"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Exploit.at_trigger">[docs]</a> <span class="k">def</span> <span class="nf">at_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trigger</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">chance</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">stacks</span> <span class="o">/</span> <span class="mi">20</span>
<span class="n">roll</span> <span class="o">=</span> <span class="n">random</span><span class="o">.</span><span class="n">random</span><span class="p">()</span>
<span class="k">if</span> <span class="n">chance</span> <span class="o">&gt;</span> <span class="n">roll</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">Exploited</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;An opportunity presents itself!&quot;</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">chance</span> <span class="o">&lt;</span> <span class="n">roll</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">Exploit</span><span class="p">)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">stacks</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">stack_msg</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">owner</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">stack_msg</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">stacks</span><span class="p">])</span></div></div>
<div class="viewcode-block" id="Exploited"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Exploited">[docs]</a><span class="k">class</span> <span class="nc">Exploited</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;exploited&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Exploited&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;You have sensed your target&#39;s vulnerability, and are poised to strike.&quot;</span>
<span class="n">duration</span> <span class="o">=</span> <span class="mi">30</span>
<span class="n">mods</span> <span class="o">=</span> <span class="p">[</span><span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;damage&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">100</span><span class="p">)]</span>
<div class="viewcode-block" id="Exploited.at_post_check"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Exploited.at_post_check">[docs]</a> <span class="k">def</span> <span class="nf">at_post_check</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="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You ruthlessly exploit your target&#39;s weakness!&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">quiet</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div>
<div class="viewcode-block" id="Exploited.at_remove"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Exploited.at_remove">[docs]</a> <span class="k">def</span> <span class="nf">at_remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You have waited too long; the opportunity passes.&quot;</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="Leeching"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Leeching">[docs]</a><span class="k">class</span> <span class="nc">Leeching</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;leeching&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Leeching&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;Attacking this target fills you with vigor.&quot;</span>
<span class="n">duration</span> <span class="o">=</span> <span class="mi">30</span>
<span class="n">triggers</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;taken_damage&quot;</span><span class="p">]</span>
<div class="viewcode-block" id="Leeching.at_trigger"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Leeching.at_trigger">[docs]</a> <span class="k">def</span> <span class="nf">at_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trigger</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">attacker</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">damage</span><span class="o">=</span><span class="kc">None</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">if</span> <span class="ow">not</span> <span class="n">attacker</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">damage</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">attacker</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You have been healed for </span><span class="si">{heal}</span><span class="s2"> life!&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">heal</span><span class="o">=</span><span class="n">damage</span> <span class="o">*</span> <span class="mf">0.1</span><span class="p">))</span></div></div>
<div class="viewcode-block" id="Poison"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Poison">[docs]</a><span class="k">class</span> <span class="nc">Poison</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;poison&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Poison&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;A poison wracks this body with painful spasms.&quot;</span>
<span class="n">duration</span> <span class="o">=</span> <span class="mi">120</span>
<span class="n">maxstacks</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">tickrate</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">dmg</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">playtime</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="Poison.at_pause"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Poison.at_pause">[docs]</a> <span class="k">def</span> <span class="nf">at_pause</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="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">prelogout_location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span>
<span class="s2">&quot;</span><span class="si">{actor}</span><span class="s2"> stops twitching, their flesh a deathly pallor.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">actor</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">named</span><span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="Poison.at_unpause"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Poison.at_unpause">[docs]</a> <span class="k">def</span> <span class="nf">at_unpause</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="bp">self</span><span class="o">.</span><span class="n">owner</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">{actor}</span><span class="s2"> begins to twitch again, their cheeks flushing red with blood.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">actor</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">named</span>
<span class="p">)</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="Poison.at_tick"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Poison.at_tick">[docs]</a> <span class="k">def</span> <span class="nf">at_tick</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">_dmg</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dmg</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">stacks</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">initial</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">owner</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;Poison courses through </span><span class="si">{actor}</span><span class="s2">&#39;s body, dealing </span><span class="si">{damage}</span><span class="s2"> damage.&quot;</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="n">actor</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">named</span><span class="p">,</span> <span class="n">damage</span><span class="o">=</span><span class="n">_dmg</span>
<span class="p">)</span>
<span class="p">)</span></div></div>
<div class="viewcode-block" id="Sated"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.Sated">[docs]</a><span class="k">class</span> <span class="nc">Sated</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;sated&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;Sated&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;You have eaten a great meal!&quot;</span>
<span class="n">duration</span> <span class="o">=</span> <span class="mi">180</span>
<span class="n">maxstacks</span> <span class="o">=</span> <span class="mi">3</span>
<span class="n">mods</span> <span class="o">=</span> <span class="p">[</span><span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;mood&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">15</span><span class="p">)]</span></div>
<div class="viewcode-block" id="StatBuff"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.StatBuff">[docs]</a><span class="k">class</span> <span class="nc">StatBuff</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Customize the stat this buff affects by feeding a list in the order [stat, mod, base, perstack] to the cache argument when added&quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;statbuff&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;statbuff&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;This buff affects the following stats: </span><span class="si">{stats}</span><span class="s2">&quot;</span>
<span class="n">maxstacks</span> <span class="o">=</span> <span class="mi">0</span>
<span class="n">refresh</span> <span class="o">=</span> <span class="kc">True</span>
<span class="n">unique</span> <span class="o">=</span> <span class="kc">False</span>
<span class="n">cache</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;modgen&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;foo&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">0</span><span class="p">]}</span>
<div class="viewcode-block" id="StatBuff.__init__"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.samplebuffs.html#evennia.contrib.rpg.buffs.samplebuffs.StatBuff.__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">handler</span><span class="p">,</span> <span class="n">buffkey</span><span class="p">,</span> <span class="n">cache</span><span class="o">=</span><span class="p">{})</span> <span class="o">-&gt;</span> <span class="kc">None</span><span class="p">:</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="n">handler</span><span class="p">,</span> <span class="n">buffkey</span><span class="p">,</span> <span class="n">cache</span><span class="p">)</span>
<span class="c1"># Finds our &quot;modgen&quot; cache value, which we pass on application</span>
<span class="n">modgen</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">cache</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;modgen&quot;</span><span class="p">))</span>
<span class="k">if</span> <span class="n">modgen</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">mods</span> <span class="o">=</span> <span class="p">[</span><span class="n">Mod</span><span class="p">(</span><span class="o">*</span><span class="n">modgen</span><span class="p">)]</span>
<span class="n">msg</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span>
<span class="n">_msg</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod</span><span class="o">.</span><span class="n">stat</span> <span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">mods</span><span class="p">]</span>
<span class="k">for</span> <span class="n">stat</span> <span class="ow">in</span> <span class="n">_msg</span><span class="p">:</span>
<span class="n">msg</span> <span class="o">+=</span> <span class="n">stat</span>
<span class="bp">self</span><span class="o">.</span><span class="n">flavor</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">flavor</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">stats</span><span class="o">=</span><span class="n">msg</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="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="samplebuffs.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.rpg.buffs.samplebuffs</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,498 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.rpg.buffs.tests &#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.rpg.buffs.tests</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.rpg.buffs.tests</h1><div class="highlight"><pre>
<span></span><span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Tests for the buff system contrib</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">unittest.mock</span> <span class="kn">import</span> <span class="n">Mock</span><span class="p">,</span> <span class="n">call</span><span class="p">,</span> <span class="n">patch</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span><span class="p">,</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span>
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">lazy_property</span>
<span class="kn">from</span> <span class="nn">.samplebuffs</span> <span class="kn">import</span> <span class="n">StatBuff</span>
<span class="kn">from</span> <span class="nn">.buff</span> <span class="kn">import</span> <span class="n">BaseBuff</span><span class="p">,</span> <span class="n">Mod</span><span class="p">,</span> <span class="n">BuffHandler</span><span class="p">,</span> <span class="n">BuffableProperty</span>
<span class="kn">from</span> <span class="nn">evennia.utils.test_resources</span> <span class="kn">import</span> <span class="n">EvenniaTest</span>
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg.buffs</span> <span class="kn">import</span> <span class="n">buff</span>
<span class="k">class</span> <span class="nc">_EmptyBuff</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="k">pass</span>
<span class="k">class</span> <span class="nc">_TestModBuff</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;tmb&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;tmb&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;modderbuff&quot;</span>
<span class="n">maxstacks</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">mods</span> <span class="o">=</span> <span class="p">[</span><span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;stat1&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">5</span><span class="p">),</span> <span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;stat2&quot;</span><span class="p">,</span> <span class="s2">&quot;mult&quot;</span><span class="p">,</span> <span class="mf">0.5</span><span class="p">)]</span>
<span class="k">class</span> <span class="nc">_TestModBuff2</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;tmb2&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;tmb2&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;modderbuff2&quot;</span>
<span class="n">maxstacks</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">mods</span> <span class="o">=</span> <span class="p">[</span><span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;stat1&quot;</span><span class="p">,</span> <span class="s2">&quot;mult&quot;</span><span class="p">,</span> <span class="mf">1.0</span><span class="p">),</span> <span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;stat1&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">10</span><span class="p">)]</span>
<span class="k">class</span> <span class="nc">_TestTrigBuff</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;ttb&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;ttb&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;triggerbuff&quot;</span>
<span class="n">triggers</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;test1&quot;</span><span class="p">,</span> <span class="s2">&quot;test2&quot;</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">at_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trigger</span><span class="p">:</span> <span class="nb">str</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">if</span> <span class="n">trigger</span> <span class="o">==</span> <span class="s2">&quot;test1&quot;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest1</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="n">trigger</span> <span class="o">==</span> <span class="s2">&quot;test2&quot;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest2</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">class</span> <span class="nc">_TestConBuff</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;tcb&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;tcb&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;condbuff&quot;</span>
<span class="n">triggers</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;condtest&quot;</span><span class="p">]</span>
<span class="k">def</span> <span class="nf">conditional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">cond1</span>
<span class="k">def</span> <span class="nf">at_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trigger</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">attacker</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">defender</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">damage</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">att</span><span class="p">,</span> <span class="n">defender</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">dmg</span> <span class="o">=</span> <span class="n">attacker</span><span class="p">,</span> <span class="n">damage</span>
<span class="k">class</span> <span class="nc">_TestComplexBuff</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;tcomb&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;complex&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;combuff&quot;</span>
<span class="n">triggers</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;comtest&quot;</span><span class="p">,</span> <span class="s2">&quot;complextest&quot;</span><span class="p">]</span>
<span class="n">mods</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;com1&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span><span class="p">),</span>
<span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;com1&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">15</span><span class="p">),</span>
<span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;com1&quot;</span><span class="p">,</span> <span class="s2">&quot;mult&quot;</span><span class="p">,</span> <span class="mf">2.0</span><span class="p">),</span>
<span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;com2&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">100</span><span class="p">),</span>
<span class="p">]</span>
<span class="k">def</span> <span class="nf">conditional</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">cond</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="k">return</span> <span class="ow">not</span> <span class="n">cond</span>
<span class="k">def</span> <span class="nf">at_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">trigger</span><span class="p">:</span> <span class="nb">str</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">if</span> <span class="n">trigger</span> <span class="o">==</span> <span class="s2">&quot;comtest&quot;</span><span class="p">:</span>
<span class="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;cond&quot;</span><span class="p">:</span> <span class="kc">True</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">owner</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span> <span class="o">=</span> <span class="p">{}</span>
<span class="k">class</span> <span class="nc">_TestTimeBuff</span><span class="p">(</span><span class="n">BaseBuff</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;ttib&quot;</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;ttib&quot;</span>
<span class="n">flavor</span> <span class="o">=</span> <span class="s2">&quot;timerbuff&quot;</span>
<span class="n">maxstacks</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">tickrate</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">duration</span> <span class="o">=</span> <span class="mi">5</span>
<span class="n">mods</span> <span class="o">=</span> <span class="p">[</span><span class="n">Mod</span><span class="p">(</span><span class="s2">&quot;timetest&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">665</span><span class="p">)]</span>
<span class="k">def</span> <span class="nf">at_tick</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">initial</span><span class="o">=</span><span class="kc">True</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="bp">self</span><span class="o">.</span><span class="n">owner</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">ticktest</span> <span class="o">=</span> <span class="kc">True</span>
<div class="viewcode-block" id="BuffableObject"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.BuffableObject">[docs]</a><span class="k">class</span> <span class="nc">BuffableObject</span><span class="p">(</span><span class="n">DefaultObject</span><span class="p">):</span>
<span class="n">stat1</span> <span class="o">=</span> <span class="n">BuffableProperty</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
<div class="viewcode-block" id="BuffableObject.buffs"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.BuffableObject.buffs">[docs]</a> <span class="nd">@lazy_property</span>
<span class="k">def</span> <span class="nf">buffs</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-&gt;</span> <span class="n">BuffHandler</span><span class="p">:</span>
<span class="k">return</span> <span class="n">BuffHandler</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span></div>
<div class="viewcode-block" id="BuffableObject.at_init"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.BuffableObject.at_init">[docs]</a> <span class="k">def</span> <span class="nf">at_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">stat1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">buffs</span>
<span class="k">return</span> <span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">at_init</span><span class="p">()</span></div></div>
<div class="viewcode-block" id="TestBuffsAndHandler"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler">[docs]</a><span class="k">class</span> <span class="nc">TestBuffsAndHandler</span><span class="p">(</span><span class="n">EvenniaTest</span><span class="p">):</span>
<span class="s2">&quot;This tests a number of things about buffs.&quot;</span>
<div class="viewcode-block" id="TestBuffsAndHandler.setUp"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.setUp">[docs]</a> <span class="k">def</span> <span class="nf">setUp</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">setUp</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">BuffableObject</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;testobj&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.tearDown"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.tearDown">[docs]</a> <span class="k">def</span> <span class="nf">tearDown</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;done after every test_* method below&quot;&quot;&quot;</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
<span class="k">del</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">tearDown</span><span class="p">()</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_addremove"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_addremove">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_addremove</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests adding and removing buffs&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="c1"># add</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">,</span> <span class="n">to_cache</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;cachetest&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestTrigBuff</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="p">[</span><span class="s2">&quot;tmb&quot;</span><span class="p">][</span><span class="s2">&quot;ref&quot;</span><span class="p">],</span> <span class="n">_TestModBuff</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="p">[</span><span class="s2">&quot;tmb&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cachetest&quot;</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="p">[</span><span class="s2">&quot;ttb&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;cachetest&quot;</span><span class="p">))</span>
<span class="c1"># has</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</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="n">handler</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">_EmptyBuff</span><span class="p">))</span>
<span class="c1"># remove</span>
<span class="n">handler</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">))</span>
<span class="c1"># remove stacks</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">,</span> <span class="n">stacks</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">,</span> <span class="n">stacks</span><span class="o">=</span><span class="mi">3</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">))</span>
<span class="c1"># remove by type</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">remove_by_type</span><span class="p">(</span><span class="n">_TestModBuff</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">))</span>
<span class="c1"># remove by buff instance</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">all</span><span class="p">[</span><span class="s2">&quot;tmb&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">remove</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">))</span>
<span class="c1"># remove by source</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">remove_by_source</span><span class="p">(</span><span class="kc">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">))</span>
<span class="c1"># remove by cachevalue</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">remove_by_cachevalue</span><span class="p">(</span><span class="s2">&quot;failure&quot;</span><span class="p">,</span> <span class="kc">True</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">))</span>
<span class="c1"># remove all</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">clear</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">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">all</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_getters"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_getters">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_getters</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests all built-in getters&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">,</span> <span class="n">source</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestTrigBuff</span><span class="p">,</span> <span class="n">to_cache</span><span class="o">=</span><span class="p">{</span><span class="s2">&quot;ttbcache&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
<span class="c1"># normal getter</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">),</span> <span class="n">_TestModBuff</span><span class="p">))</span>
<span class="c1"># stat getters</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">get_by_stat</span><span class="p">(</span><span class="s2">&quot;stat1&quot;</span><span class="p">)[</span><span class="s2">&quot;tmb&quot;</span><span class="p">],</span> <span class="n">_TestModBuff</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="n">handler</span><span class="o">.</span><span class="n">get_by_stat</span><span class="p">(</span><span class="s2">&quot;nullstat&quot;</span><span class="p">))</span>
<span class="c1"># trigger getters</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="s2">&quot;ttb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_trigger</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">keys</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="s2">&quot;ttb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_trigger</span><span class="p">(</span><span class="s2">&quot;nulltrig&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
<span class="c1"># type getters</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_type</span><span class="p">(</span><span class="n">_TestModBuff</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="s2">&quot;tmb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_type</span><span class="p">(</span><span class="n">_EmptyBuff</span><span class="p">))</span>
<span class="c1"># source getter</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_source</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">obj2</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="s2">&quot;ttb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_source</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="p">))</span>
<span class="c1"># cachevalue getter</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertFalse</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_cachevalue</span><span class="p">(</span><span class="s2">&quot;ttbcache&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="s2">&quot;ttb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_cachevalue</span><span class="p">(</span><span class="s2">&quot;ttbcache&quot;</span><span class="p">))</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="s2">&quot;ttb&quot;</span> <span class="ow">in</span> <span class="n">handler</span><span class="o">.</span><span class="n">get_by_cachevalue</span><span class="p">(</span><span class="s2">&quot;ttbcache&quot;</span><span class="p">,</span> <span class="kc">True</span><span class="p">))</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_details"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_details">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_details</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests that buff details like name and flavor are correct&quot;&quot;&quot;</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestTrigBuff</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">flavor</span><span class="p">,</span> <span class="s2">&quot;modderbuff&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ttb&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">&quot;ttb&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_modify"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_modify">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_modify</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests to ensure that values are modified correctly, and stack across mods&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="n">_stat1</span><span class="p">,</span> <span class="n">_stat2</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span> <span class="mi">10</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="c1"># stat1 and 2 basic mods</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">15</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat2</span><span class="p">,</span> <span class="s2">&quot;stat2&quot;</span><span class="p">),</span> <span class="mi">15</span><span class="p">)</span>
<span class="c1"># checks can take any base value</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat2&quot;</span><span class="p">),</span> <span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat2</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">25</span><span class="p">)</span>
<span class="c1"># change to base stat reflected in check</span>
<span class="n">_stat1</span> <span class="o">+=</span> <span class="mi">5</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">20</span><span class="p">)</span>
<span class="n">_stat2</span> <span class="o">+=</span> <span class="mi">10</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat2</span><span class="p">,</span> <span class="s2">&quot;stat2&quot;</span><span class="p">),</span> <span class="mi">30</span><span class="p">)</span>
<span class="c1"># test stacking; single stack, multiple stack, max stacks</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">25</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">,</span> <span class="n">stacks</span><span class="o">=</span><span class="mi">3</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">40</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">,</span> <span class="n">stacks</span><span class="o">=</span><span class="mi">5</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">40</span><span class="p">)</span>
<span class="c1"># stat2 mod doesn&#39;t stack</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat2</span><span class="p">,</span> <span class="s2">&quot;stat2&quot;</span><span class="p">),</span> <span class="mi">30</span><span class="p">)</span>
<span class="c1"># layers with second mod</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">100</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat2</span><span class="p">,</span> <span class="s2">&quot;stat2&quot;</span><span class="p">),</span> <span class="mi">30</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">remove_by_type</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat1</span><span class="p">,</span> <span class="s2">&quot;stat1&quot;</span><span class="p">),</span> <span class="mi">30</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="n">_stat2</span><span class="p">,</span> <span class="s2">&quot;stat2&quot;</span><span class="p">),</span> <span class="mi">20</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_trigger"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_trigger">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_trigger</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests to ensure triggers correctly fire&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestTrigBuff</span><span class="p">)</span>
<span class="c1"># trigger buffs</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;nulltest&quot;</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest1</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest2</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest1</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest2</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;test2&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest1</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">triggertest2</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_context_conditional"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_context_conditional">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_context_conditional</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests to ensure context is passed to buffs, and also tests conditionals&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestConBuff</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">cond1</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">att</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">dmg</span> <span class="o">=</span> <span class="kc">False</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="mi">0</span>
<span class="c1"># context to pass, containing basic event data and a little extra to be ignored</span>
<span class="n">_testcontext</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">&quot;attacker&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="p">,</span>
<span class="s2">&quot;defender&quot;</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="p">,</span>
<span class="s2">&quot;damage&quot;</span><span class="p">:</span> <span class="mi">5</span><span class="p">,</span>
<span class="s2">&quot;overflow&quot;</span><span class="p">:</span> <span class="mi">10</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># test negative conditional</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">get_by_type</span><span class="p">(</span><span class="n">_TestConBuff</span><span class="p">)[</span><span class="s2">&quot;tcb&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">conditional</span><span class="p">(</span><span class="o">**</span><span class="n">_testcontext</span><span class="p">),</span> <span class="kc">False</span>
<span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;condtest&quot;</span><span class="p">,</span> <span class="n">_testcontext</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">att</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">dmg</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="c1"># test positive conditional + context passing</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">cond1</span> <span class="o">=</span> <span class="kc">True</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">get_by_type</span><span class="p">(</span><span class="n">_TestConBuff</span><span class="p">)[</span><span class="s2">&quot;tcb&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">conditional</span><span class="p">(</span><span class="o">**</span><span class="n">_testcontext</span><span class="p">),</span> <span class="kc">True</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;condtest&quot;</span><span class="p">,</span> <span class="n">_testcontext</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">att</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj2</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">dmg</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_complex"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_complex">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_complex</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests a complex mod (conditionals, multiple triggers/mods)&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comone</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtwo</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span> <span class="o">=</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">0</span><span class="p">,</span> <span class="p">{}</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestComplexBuff</span><span class="p">)</span>
<span class="c1"># stat checks work correctly and separately</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">,</span> <span class="p">{})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comone</span><span class="p">,</span> <span class="s2">&quot;com1&quot;</span><span class="p">),</span> <span class="mi">105</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtwo</span><span class="p">,</span> <span class="s2">&quot;com2&quot;</span><span class="p">),</span> <span class="mi">100</span><span class="p">)</span>
<span class="c1"># stat checks don&#39;t happen if the conditional is true</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;comtest&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;cond&quot;</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">get_by_type</span><span class="p">(</span><span class="n">_TestComplexBuff</span><span class="p">)[</span><span class="s2">&quot;tcomb&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">conditional</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">),</span>
<span class="kc">False</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comone</span><span class="p">,</span> <span class="s2">&quot;com1&quot;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">),</span> <span class="mi">10</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtwo</span><span class="p">,</span> <span class="s2">&quot;com2&quot;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">),</span> <span class="mi">0</span>
<span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;complextest&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comone</span><span class="p">,</span> <span class="s2">&quot;com1&quot;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">),</span> <span class="mi">10</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtwo</span><span class="p">,</span> <span class="s2">&quot;com2&quot;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">),</span> <span class="mi">0</span>
<span class="p">)</span>
<span class="c1"># separate trigger follows different codepath</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;cond&quot;</span><span class="p">:</span> <span class="kc">False</span><span class="p">}</span>
<span class="n">handler</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;complextest&quot;</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">,</span> <span class="p">{})</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comone</span><span class="p">,</span> <span class="s2">&quot;com1&quot;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">),</span> <span class="mi">105</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtwo</span><span class="p">,</span> <span class="s2">&quot;com2&quot;</span><span class="p">,</span> <span class="n">context</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">comtext</span><span class="p">),</span> <span class="mi">100</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_timing"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_timing">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">test_timing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mock_delay</span><span class="p">:</span> <span class="n">Mock</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests timing-related features, such as ticking and duration&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="n">mock_delay</span><span class="o">.</span><span class="n">side_effect</span> <span class="o">=</span> <span class="p">[</span><span class="kc">None</span><span class="p">,</span> <span class="n">handler</span><span class="o">.</span><span class="n">cleanup</span><span class="p">]</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestTimeBuff</span><span class="p">)</span>
<span class="n">calls</span> <span class="o">=</span> <span class="p">[</span>
<span class="n">call</span><span class="p">(</span>
<span class="mi">1</span><span class="p">,</span>
<span class="n">buff</span><span class="o">.</span><span class="n">tick_buff</span><span class="p">,</span>
<span class="n">handler</span><span class="o">=</span><span class="n">handler</span><span class="p">,</span>
<span class="n">buffkey</span><span class="o">=</span><span class="s2">&quot;ttib&quot;</span><span class="p">,</span>
<span class="n">context</span><span class="o">=</span><span class="p">{},</span>
<span class="n">initial</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="p">),</span>
<span class="n">call</span><span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="n">handler</span><span class="o">.</span><span class="n">cleanup</span><span class="p">,</span> <span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span>
<span class="p">]</span>
<span class="n">mock_delay</span><span class="o">.</span><span class="n">assert_has_calls</span><span class="p">(</span><span class="n">calls</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">timetest</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">ticktest</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="kc">False</span>
<span class="c1"># test duration and ticking</span>
<span class="n">_instance</span> <span class="o">=</span> <span class="n">handler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ttib&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertTrue</span><span class="p">(</span><span class="n">_instance</span><span class="o">.</span><span class="n">ticking</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">_instance</span><span class="o">.</span><span class="n">duration</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">_instance</span><span class="o">.</span><span class="n">at_tick</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">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">ticktest</span><span class="p">)</span>
<span class="c1"># test duration modification and cleanup</span>
<span class="n">handler</span><span class="o">.</span><span class="n">set_duration</span><span class="p">(</span><span class="s2">&quot;ttib&quot;</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ttib&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">duration</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">handler</span><span class="o">.</span><span class="n">cleanup</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="n">handler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;ttib&quot;</span><span class="p">),</span> <span class="kc">None</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_buffableproperty"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_buffableproperty">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_buffableproperty</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests buffable properties&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">stat1</span><span class="p">,</span> <span class="mi">25</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">&quot;tmb&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">stat1</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_stresstest"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_stresstest">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_stresstest</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;tests large amounts of buffs, and related removal methods&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">20</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;test&quot;</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="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">_TestTrigBuff</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;trig&quot;</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="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">stat1</span><span class="p">,</span> <span class="mi">295</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">trigger</span><span class="p">(</span><span class="s2">&quot;test1&quot;</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">remove_by_type</span><span class="p">(</span><span class="n">_TestModBuff</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">stat1</span><span class="p">,</span> <span class="mi">10</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">clear</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">testobj</span><span class="o">.</span><span class="n">buffs</span><span class="o">.</span><span class="n">all</span><span class="p">)</span></div>
<div class="viewcode-block" id="TestBuffsAndHandler.test_modgen"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.buffs.tests.html#evennia.contrib.rpg.buffs.tests.TestBuffsAndHandler.test_modgen">[docs]</a> <span class="nd">@patch</span><span class="p">(</span><span class="s2">&quot;evennia.contrib.rpg.buffs.buff.utils.delay&quot;</span><span class="p">,</span> <span class="n">new</span><span class="o">=</span><span class="n">Mock</span><span class="p">())</span>
<span class="k">def</span> <span class="nf">test_modgen</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;test generating mods on the fly&quot;&quot;&quot;</span>
<span class="c1"># setup</span>
<span class="n">handler</span><span class="p">:</span> <span class="n">BuffHandler</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">buffs</span>
<span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gentest</span> <span class="o">=</span> <span class="mi">5</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gentest</span><span class="p">,</span> <span class="mi">5</span><span class="p">)</span>
<span class="n">tc</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;modgen&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;gentest&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">5</span><span class="p">,</span> <span class="mi">0</span><span class="p">]}</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">StatBuff</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;gentest&quot;</span><span class="p">,</span> <span class="n">to_cache</span><span class="o">=</span><span class="n">tc</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gentest</span><span class="p">,</span> <span class="s2">&quot;gentest&quot;</span><span class="p">),</span> <span class="mi">10</span><span class="p">)</span>
<span class="n">tc</span> <span class="o">=</span> <span class="p">{</span><span class="s2">&quot;modgen&quot;</span><span class="p">:</span> <span class="p">[</span><span class="s2">&quot;gentest&quot;</span><span class="p">,</span> <span class="s2">&quot;add&quot;</span><span class="p">,</span> <span class="mi">10</span><span class="p">,</span> <span class="mi">0</span><span class="p">]}</span>
<span class="n">handler</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">StatBuff</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;gentest&quot;</span><span class="p">,</span> <span class="n">to_cache</span><span class="o">=</span><span class="n">tc</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">handler</span><span class="o">.</span><span class="n">check</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">testobj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gentest</span><span class="p">,</span> <span class="s2">&quot;gentest&quot;</span><span class="p">),</span> <span class="mi">15</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="n">handler</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;gentest&quot;</span><span class="p">)</span><span class="o">.</span><span class="n">flavor</span><span class="p">,</span> <span class="s2">&quot;This buff affects the following stats: gentest&quot;</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="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="tests.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.rpg.buffs.tests</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

@ -255,6 +255,7 @@
<span class="c1"># this regex returns in groups (langname, say), where langname can be empty.</span>
<span class="n">_RE_LANGUAGE</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">&quot;(?:\((\w+)\))*(</span><span class="se">\&quot;</span><span class="s2">.+?</span><span class="se">\&quot;</span><span class="s2">)&quot;</span><span class="p">)</span>
<span class="c1"># the emote parser works in two steps:</span>
<span class="c1"># 1) convert the incoming emote into an intermediary</span>
<span class="c1"># form with all object references mapped to ids.</span>
@ -446,7 +447,7 @@
<span class="n">match_index</span> <span class="o">=</span> <span class="n">marker_match</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
<span class="c1"># split the emote string at the reference marker, to process everything after it</span>
<span class="n">head</span> <span class="o">=</span> <span class="n">string</span><span class="p">[:</span><span class="n">match_index</span><span class="p">]</span>
<span class="n">tail</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">match_index</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
<span class="n">tail</span> <span class="o">=</span> <span class="n">string</span><span class="p">[</span><span class="n">match_index</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:]</span>
<span class="k">if</span> <span class="n">search_mode</span><span class="p">:</span>
<span class="c1"># match the candidates against the whole search string after the marker</span>
@ -492,7 +493,7 @@
<span class="c1"># save search string</span>
<span class="n">matched_text</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">tail</span><span class="p">[</span><span class="mi">1</span><span class="p">:</span><span class="n">iend</span><span class="p">])</span>
<span class="c1"># recombine remainder of emote back into a string</span>
<span class="n">tail</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">tail</span><span class="p">[</span><span class="n">iend</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:])</span>
<span class="n">tail</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">tail</span><span class="p">[</span><span class="n">iend</span> <span class="o">+</span> <span class="mi">1</span><span class="p">:])</span>
<span class="n">nmatches</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">bestmatches</span><span class="p">)</span>
@ -569,7 +570,7 @@
<span class="k">return</span> <span class="n">string</span><span class="p">,</span> <span class="n">mapping</span></div>
<div class="viewcode-block" id="send_emote"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.send_emote">[docs]</a><span class="k">def</span> <span class="nf">send_emote</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span> <span class="n">anonymous_add</span><span class="o">=</span><span class="s2">&quot;first&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<div class="viewcode-block" id="send_emote"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.send_emote">[docs]</a><span class="k">def</span> <span class="nf">send_emote</span><span class="p">(</span><span class="n">sender</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span> <span class="n">msg_type</span><span class="o">=</span><span class="s2">&quot;pose&quot;</span><span class="p">,</span> <span class="n">anonymous_add</span><span class="o">=</span><span class="s2">&quot;first&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Main access function for distribute an emote.</span>
@ -579,6 +580,9 @@
<span class="sd"> will also form the basis for which sdescs are</span>
<span class="sd"> &#39;valid&#39; to use in the emote.</span>
<span class="sd"> emote (str): The raw emote string as input by emoter.</span>
<span class="sd"> msg_type (str): The type of emote this is. &quot;say&quot; or &quot;pose&quot;</span>
<span class="sd"> for example. This is arbitrary and used for generating</span>
<span class="sd"> extra data for .msg(text) tuple.</span>
<span class="sd"> anonymous_add (str or None, optional): If `sender` is not</span>
<span class="sd"> self-referencing in the emote, this will auto-add</span>
<span class="sd"> `sender`&#39;s data to the emote. Possible values are</span>
@ -643,7 +647,7 @@
<span class="p">}</span>
<span class="c1"># map the language {##num} markers. This will convert the escaped sdesc markers on</span>
<span class="c1"># the form {{#num}} to {#num} markers ready to sdesc-map in the next step.</span>
<span class="n">sendemote</span> <span class="o">=</span> <span class="n">emote</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">receiver_lang_mapping</span><span class="p">)</span>
<span class="n">sendemote</span> <span class="o">=</span> <span class="n">emote</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">receiver_lang_mapping</span><span class="p">)</span>
<span class="c1"># map the ref keys to sdescs</span>
<span class="n">receiver_sdesc_mapping</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
@ -655,7 +659,11 @@
<span class="p">)</span>
<span class="c1"># do the template replacement of the sdesc/recog {#num} markers</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">sendemote</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">receiver_sdesc_mapping</span><span class="p">),</span> <span class="n">from_obj</span><span class="o">=</span><span class="n">sender</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">sendemote</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">receiver_sdesc_mapping</span><span class="p">),</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">msg_type</span><span class="p">}),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="n">sender</span><span class="p">,</span>
<span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
<span class="p">)</span></div>
<span class="c1"># ------------------------------------------------------------</span>
@ -966,7 +974,7 @@
<span class="c1"># calling the speech modifying hook</span>
<span class="n">speech</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">at_pre_say</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">targets</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="o">.</span><span class="n">contents</span>
<span class="n">send_emote</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">targets</span><span class="p">,</span> <span class="n">speech</span><span class="p">,</span> <span class="n">anonymous_add</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div></div>
<span class="n">send_emote</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">targets</span><span class="p">,</span> <span class="n">speech</span><span class="p">,</span> <span class="n">msg_type</span><span class="o">=</span><span class="s2">&quot;say&quot;</span><span class="p">,</span> <span class="n">anonymous_add</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span></div></div>
<div class="viewcode-block" id="CmdSdesc"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.CmdSdesc">[docs]</a><span class="k">class</span> <span class="nc">CmdSdesc</span><span class="p">(</span><span class="n">RPCommand</span><span class="p">):</span> <span class="c1"># set/look at own sdesc</span>
@ -1093,7 +1101,7 @@
<span class="p">(</span><span class="n">ref</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">get</span><span class="p">()</span> <span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;sdesc&quot;</span><span class="p">)</span> <span class="k">else</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
<span class="k">for</span> <span class="n">ref</span><span class="p">,</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">mapping</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="n">pose</span> <span class="o">=</span> <span class="n">parsed</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">mapping</span><span class="p">)</span>
<span class="n">pose</span> <span class="o">=</span> <span class="n">parsed</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">mapping</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">target_name</span><span class="p">)</span> <span class="o">+</span> <span class="nb">len</span><span class="p">(</span><span class="n">pose</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">60</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;&#39;</span><span class="si">{</span><span class="n">pose</span><span class="si">}</span><span class="s2">&#39; is too long.&quot;</span><span class="p">)</span>
@ -1309,19 +1317,19 @@
<span class="bp">self</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">&quot;Something&quot;</span><span class="p">)</span></div>
<div class="viewcode-block" id="ContribRPObject.search"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.rpsystem.html#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.search">[docs]</a> <span class="k">def</span> <span class="nf">search</span><span class="p">(</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">searchdata</span><span class="p">,</span>
<span class="n">global_search</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">use_nicks</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</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">attribute_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">quiet</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">candidates</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nofound_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">multimatch_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">use_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="bp">self</span><span class="p">,</span>
<span class="n">searchdata</span><span class="p">,</span>
<span class="n">global_search</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">use_nicks</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</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">attribute_name</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">quiet</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">exact</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
<span class="n">candidates</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">nofound_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">multimatch_string</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="n">use_dbref</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
<span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Returns an Object matching a search string/condition, taking</span>
@ -1405,10 +1413,10 @@
<span class="p">)</span>
<span class="k">if</span> <span class="n">global_search</span> <span class="ow">or</span> <span class="p">(</span>
<span class="n">is_string</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
<span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">searchdata</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span>
<span class="n">is_string</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">&quot;#&quot;</span><span class="p">)</span>
<span class="ow">and</span> <span class="nb">len</span><span class="p">(</span><span class="n">searchdata</span><span class="p">)</span> <span class="o">&gt;</span> <span class="mi">1</span>
<span class="ow">and</span> <span class="n">searchdata</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">isdigit</span><span class="p">()</span>
<span class="p">):</span>
<span class="c1"># only allow exact matching if searching the entire database</span>
<span class="c1"># or unique #dbrefs</span>

View file

@ -264,17 +264,17 @@
<span class="n">receiver2</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">text</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;out2&quot;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">rpsystem</span><span class="o">.</span><span class="n">send_emote</span><span class="p">(</span><span class="n">speaker</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">emote</span><span class="p">,</span> <span class="n">case_sensitive</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out0</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out0</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="s2">&quot;With a flair, |mSender|n looks at |bThe first receiver of emotes.|n &quot;</span>
<span class="s1">&#39;and |bAnother nice colliding sdesc-guy for tests|n. She says |w&quot;This is a test.&quot;|n&#39;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out1</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out1</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="s2">&quot;With a flair, |bA nice sender of emotes|n looks at |mReceiver1|n and &quot;</span>
<span class="s1">&#39;|bAnother nice colliding sdesc-guy for tests|n. She says |w&quot;This is a test.&quot;|n&#39;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out2</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out2</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="s2">&quot;With a flair, |bA nice sender of emotes|n looks at |bThe first &quot;</span>
<span class="s1">&#39;receiver of emotes.|n and |mReceiver2|n. She says |w&quot;This is a test.&quot;|n&#39;</span><span class="p">,</span>
<span class="p">)</span></div>
@ -293,19 +293,19 @@
<span class="n">receiver2</span><span class="o">.</span><span class="n">msg</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">text</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">:</span> <span class="nb">setattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">&quot;out2&quot;</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
<span class="n">rpsystem</span><span class="o">.</span><span class="n">send_emote</span><span class="p">(</span><span class="n">speaker</span><span class="p">,</span> <span class="n">receivers</span><span class="p">,</span> <span class="n">case_emote</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out0</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out0</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="s2">&quot;|mSender|n looks at |bthe first receiver of emotes.|n. Then, |mSender|n &quot;</span>
<span class="s2">&quot;looks at |bTHE FIRST RECEIVER OF EMOTES.|n, |bThe first receiver of emotes.|n &quot;</span>
<span class="s2">&quot;and |bAnother nice colliding sdesc-guy for tests|n twice.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out1</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out1</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="s2">&quot;|bA nice sender of emotes|n looks at |mReceiver1|n. Then, &quot;</span>
<span class="s2">&quot;|ba nice sender of emotes|n looks at |mReceiver1|n, |mReceiver1|n &quot;</span>
<span class="s2">&quot;and |bAnother nice colliding sdesc-guy for tests|n twice.&quot;</span><span class="p">,</span>
<span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out2</span><span class="p">,</span>
<span class="bp">self</span><span class="o">.</span><span class="n">out2</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span>
<span class="s2">&quot;|bA nice sender of emotes|n looks at |bthe first receiver of emotes.|n. &quot;</span>
<span class="s2">&quot;Then, |ba nice sender of emotes|n looks at |bTHE FIRST RECEIVER OF EMOTES.|n, &quot;</span>
<span class="s2">&quot;|bThe first receiver of emotes.|n and |mReceiver2|n twice.&quot;</span><span class="p">,</span>

View file

@ -366,7 +366,7 @@
<span class="n">search_candidates</span> <span class="o">=</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">type_restriction</span>
<span class="o">&amp;</span> <span class="p">(</span><span class="n">Q</span><span class="p">(</span><span class="n">db_key__istartswith</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span> <span class="o">|</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key__istartswith</span><span class="o">=</span><span class="n">ostring</span><span class="p">))</span>
<span class="o">&amp;</span> <span class="p">(</span><span class="n">Q</span><span class="p">(</span><span class="n">db_key__icontains</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span> <span class="o">|</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_tags__db_key__icontains</span><span class="o">=</span><span class="n">ostring</span><span class="p">))</span>
<span class="p">)</span>
<span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
<span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">&quot;id&quot;</span><span class="p">)</span>

View file

@ -55,7 +55,6 @@
<span class="kn">import</span> <span class="nn">inflect</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.utils.translation</span> <span class="kn">import</span> <span class="n">gettext</span> <span class="k">as</span> <span class="n">_</span>
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdset</span>
<span class="kn">from</span> <span class="nn">evennia.commands.cmdsethandler</span> <span class="kn">import</span> <span class="n">CmdSetHandler</span>
<span class="kn">from</span> <span class="nn">evennia.objects.manager</span> <span class="kn">import</span> <span class="n">ObjectManager</span>
@ -859,8 +858,8 @@
<span class="p">)</span>
<span class="c1"># director-stance replacements</span>
<span class="n">outmessage</span> <span class="o">=</span> <span class="n">inmessage</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
<span class="o">**</span><span class="p">{</span>
<span class="n">outmessage</span> <span class="o">=</span> <span class="n">inmessage</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span>
<span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">looker</span><span class="o">=</span><span class="n">receiver</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">&quot;get_display_name&quot;</span><span class="p">)</span>
<span class="k">else</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
@ -908,6 +907,7 @@
<span class="sd"> Keyword Args:</span>
<span class="sd"> Passed on to announce_move_to and announce_move_from hooks.</span>
<span class="sd"> Exits will set the &quot;exit_obj&quot; kwarg to themselves.</span>
<span class="sd"> Returns:</span>
<span class="sd"> result (bool): True/False depending on if there were problems with the move.</span>
@ -1597,7 +1597,9 @@
<span class="p">}</span>
<span class="p">)</span>
<span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">((</span><span class="n">string</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">move_type</span><span class="p">}),</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span></div>
<span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span>
<span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">move_type</span><span class="p">}),</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultObject.announce_move_to"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.announce_move_to">[docs]</a> <span class="k">def</span> <span class="nf">announce_move_to</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_location</span><span class="p">,</span> <span class="n">msg</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">move_type</span><span class="o">=</span><span class="s2">&quot;move&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -1665,7 +1667,9 @@
<span class="p">}</span>
<span class="p">)</span>
<span class="n">destination</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">((</span><span class="n">string</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">move_type</span><span class="p">}),</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span><span class="p">)</span></div>
<span class="n">destination</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span>
<span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">move_type</span><span class="p">}),</span> <span class="n">exclude</span><span class="o">=</span><span class="p">(</span><span class="bp">self</span><span class="p">,),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span> <span class="n">mapping</span><span class="o">=</span><span class="n">mapping</span>
<span class="p">)</span></div>
<div class="viewcode-block" id="DefaultObject.at_post_move"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultObject.at_post_move">[docs]</a> <span class="k">def</span> <span class="nf">at_post_move</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">source_location</span><span class="p">,</span> <span class="n">move_type</span><span class="o">=</span><span class="s2">&quot;move&quot;</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -2241,7 +2245,7 @@
<span class="s2">&quot;speech&quot;</span><span class="p">:</span> <span class="n">message</span><span class="p">,</span>
<span class="p">}</span>
<span class="n">self_mapping</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">custom_mapping</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">msg_self</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">self_mapping</span><span class="p">),</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">msg_type</span><span class="p">}),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">msg_self</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">self_mapping</span><span class="p">),</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">msg_type</span><span class="p">}),</span> <span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">)</span>
<span class="k">if</span> <span class="n">receivers</span> <span class="ow">and</span> <span class="n">msg_receivers</span><span class="p">:</span>
<span class="n">receiver_mapping</span> <span class="o">=</span> <span class="p">{</span>
@ -2264,7 +2268,7 @@
<span class="n">receiver_mapping</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">individual_mapping</span><span class="p">)</span>
<span class="n">receiver_mapping</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="n">custom_mapping</span><span class="p">)</span>
<span class="n">receiver</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
<span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">msg_receivers</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">receiver_mapping</span><span class="p">),</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">msg_type</span><span class="p">}),</span>
<span class="n">text</span><span class="o">=</span><span class="p">(</span><span class="n">msg_receivers</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">receiver_mapping</span><span class="p">),</span> <span class="p">{</span><span class="s2">&quot;type&quot;</span><span class="p">:</span> <span class="n">msg_type</span><span class="p">}),</span>
<span class="n">from_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">,</span>
<span class="p">)</span>
@ -2387,9 +2391,9 @@
<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="c1"># Allow only the character itself and the creator account to puppet this character</span>
<span class="c1"># (and Developers).</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;character_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="s2">&quot;account_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="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="n">character_id</span><span class="o">=</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">account_id</span><span class="o">=</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="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="p">{</span><span class="s2">&quot;character_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="s2">&quot;account_id&quot;</span><span class="p">:</span> <span class="o">-</span><span class="mi">1</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="n">character_id</span><span class="o">=</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">,</span> <span class="n">account_id</span><span class="o">=-</span><span class="mi">1</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>
@ -2638,9 +2642,9 @@
<span class="c1"># Add locks</span>
<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="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="nb">id</span><span class="o">=</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="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">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="nb">id</span><span class="o">=</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>
@ -2846,9 +2850,9 @@
<span class="c1"># Set appropriate locks</span>
<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="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="nb">id</span><span class="o">=</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="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">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="nb">id</span><span class="o">=</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>
<span class="c1"># Record creator id and creation IP</span>
@ -2888,8 +2892,8 @@
<span class="p">)</span>
<span class="p">)</span>
<span class="c1"># an exit should have a destination (this is replaced at creation time)</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
<span class="c1"># an exit should have a destination - try to make sure it does</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</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="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">location</span></div>
<div class="viewcode-block" id="DefaultExit.at_cmdset_get"><a class="viewcode-back" href="../../../api/evennia.objects.objects.html#evennia.objects.objects.DefaultExit.at_cmdset_get">[docs]</a> <span class="k">def</span> <span class="nf">at_cmdset_get</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>
@ -2931,7 +2935,7 @@
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">source_location</span> <span class="o">=</span> <span class="n">traversing_object</span><span class="o">.</span><span class="n">location</span>
<span class="k">if</span> <span class="n">traversing_object</span><span class="o">.</span><span class="n">move_to</span><span class="p">(</span><span class="n">target_location</span><span class="p">,</span> <span class="n">move_type</span><span class="o">=</span><span class="s2">&quot;traverse&quot;</span><span class="p">):</span>
<span class="k">if</span> <span class="n">traversing_object</span><span class="o">.</span><span class="n">move_to</span><span class="p">(</span><span class="n">target_location</span><span class="p">,</span> <span class="n">move_type</span><span class="o">=</span><span class="s2">&quot;traverse&quot;</span><span class="p">,</span> <span class="n">exit_obj</span><span class="o">=</span><span class="bp">self</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_post_traverse</span><span class="p">(</span><span class="n">traversing_object</span><span class="p">,</span> <span class="n">source_location</span><span class="p">)</span>
<span class="k">else</span><span class="p">:</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">err_traverse</span><span class="p">:</span>

View file

@ -540,11 +540,11 @@
<span class="n">pstr</span><span class="p">,</span> <span class="n">sstr</span> <span class="o">=</span> <span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span>
<span class="k">if</span> <span class="n">portal_info_dict</span><span class="p">:</span>
<span class="n">pdict</span> <span class="o">=</span> <span class="n">_prepare_dict</span><span class="p">(</span><span class="n">portal_info_dict</span><span class="p">)</span>
<span class="n">pstr</span> <span class="o">=</span> <span class="n">_strip_empty_lines</span><span class="p">(</span><span class="n">PORTAL_INFO</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">pdict</span><span class="p">))</span>
<span class="n">pstr</span> <span class="o">=</span> <span class="n">_strip_empty_lines</span><span class="p">(</span><span class="n">PORTAL_INFO</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">pdict</span><span class="p">))</span>
<span class="k">if</span> <span class="n">server_info_dict</span><span class="p">:</span>
<span class="n">sdict</span> <span class="o">=</span> <span class="n">_prepare_dict</span><span class="p">(</span><span class="n">server_info_dict</span><span class="p">)</span>
<span class="n">sstr</span> <span class="o">=</span> <span class="n">_strip_empty_lines</span><span class="p">(</span><span class="n">SERVER_INFO</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">sdict</span><span class="p">))</span>
<span class="n">sstr</span> <span class="o">=</span> <span class="n">_strip_empty_lines</span><span class="p">(</span><span class="n">SERVER_INFO</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">sdict</span><span class="p">))</span>
<span class="n">info</span> <span class="o">=</span> <span class="n">pstr</span> <span class="o">+</span> <span class="p">(</span><span class="s2">&quot;</span><span class="se">\n\n</span><span class="s2">&quot;</span> <span class="o">+</span> <span class="n">sstr</span> <span class="k">if</span> <span class="n">sstr</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span><span class="p">)</span>
<span class="n">maxwidth</span> <span class="o">=</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">info</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>
@ -1425,7 +1425,7 @@
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">settings_path</span><span class="p">,</span> <span class="s2">&quot;r&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">settings_string</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span>
<span class="n">settings_string</span> <span class="o">=</span> <span class="n">settings_string</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">setting_dict</span><span class="p">)</span>
<span class="n">settings_string</span> <span class="o">=</span> <span class="n">settings_string</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">setting_dict</span><span class="p">)</span>
<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">settings_path</span><span class="p">,</span> <span class="s2">&quot;w&quot;</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span>
<span class="n">f</span><span class="o">.</span><span class="n">write</span><span class="p">(</span><span class="n">settings_string</span><span class="p">)</span></div>

View file

@ -88,8 +88,9 @@
<span class="c1"># a file with a flag telling the server to restart after shutdown or not.</span>
<span class="n">SERVER_RESTART</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">GAME_DIR</span><span class="p">,</span> <span class="s2">&quot;server&quot;</span><span class="p">,</span> <span class="s2">&quot;server.restart&quot;</span><span class="p">)</span>
<span class="c1"># module containing hook methods called during start_stop</span>
<span class="n">SERVER_STARTSTOP_MODULE</span> <span class="o">=</span> <span class="n">mod_import</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">AT_SERVER_STARTSTOP_MODULE</span><span class="p">)</span>
<span class="c1"># modules containing hook methods called during start_stop</span>
<span class="n">SERVER_STARTSTOP_MODULES</span> <span class="o">=</span> <span class="p">[</span><span class="n">mod_import</span><span class="p">(</span><span class="n">mod</span><span class="p">)</span> <span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">AT_SERVER_STARTSTOP_MODULE</span><span class="p">)</span>
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="nb">str</span><span class="p">)]</span>
<span class="c1"># modules containing plugin services</span>
<span class="n">SERVER_SERVICES_PLUGIN_MODULES</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">SERVER_SERVICES_PLUGIN_MODULES</span><span class="p">)</span>
@ -455,6 +456,8 @@
<span class="k">for</span> <span class="n">typeclass_db</span> <span class="ow">in</span> <span class="n">TypedObject</span><span class="o">.</span><span class="n">__subclasses__</span><span class="p">()</span>
<span class="p">]</span>
<span class="bp">self</span><span class="o">.</span><span class="n">at_server_init</span><span class="p">()</span>
<span class="c1"># call correct server hook based on start file value</span>
<span class="k">if</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">&quot;reload&quot;</span><span class="p">:</span>
<span class="n">logger</span><span class="o">.</span><span class="n">log_msg</span><span class="p">(</span><span class="s2">&quot;Server successfully reloaded.&quot;</span><span class="p">)</span>
@ -567,14 +570,23 @@
<span class="c1"># server start/stop hooks</span>
<div class="viewcode-block" id="Evennia.at_server_init"><a class="viewcode-back" href="../../../api/evennia.server.server.html#evennia.server.server.Evennia.at_server_init">[docs]</a> <span class="k">def</span> <span class="nf">at_server_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> This is called first when the server is starting, before any other hooks, regardless of how it&#39;s starting.</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">SERVER_STARTSTOP_MODULES</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;at_server_init&quot;</span><span class="p">):</span>
<span class="n">mod</span><span class="o">.</span><span class="n">at_server_init</span><span class="p">()</span></div>
<div class="viewcode-block" id="Evennia.at_server_start"><a class="viewcode-back" href="../../../api/evennia.server.server.html#evennia.server.server.Evennia.at_server_start">[docs]</a> <span class="k">def</span> <span class="nf">at_server_start</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 called every time the server starts up, regardless of</span>
<span class="sd"> how it was shut down.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">SERVER_STARTSTOP_MODULE</span><span class="p">:</span>
<span class="n">SERVER_STARTSTOP_MODULE</span><span class="o">.</span><span class="n">at_server_start</span><span class="p">()</span></div>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">SERVER_STARTSTOP_MODULES</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;at_server_start&quot;</span><span class="p">):</span>
<span class="n">mod</span><span class="o">.</span><span class="n">at_server_start</span><span class="p">()</span></div>
<div class="viewcode-block" id="Evennia.at_server_stop"><a class="viewcode-back" href="../../../api/evennia.server.server.html#evennia.server.server.Evennia.at_server_stop">[docs]</a> <span class="k">def</span> <span class="nf">at_server_stop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -582,16 +594,18 @@
<span class="sd"> of it is fore a reload, reset or shutdown.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">SERVER_STARTSTOP_MODULE</span><span class="p">:</span>
<span class="n">SERVER_STARTSTOP_MODULE</span><span class="o">.</span><span class="n">at_server_stop</span><span class="p">()</span></div>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">SERVER_STARTSTOP_MODULES</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;at_server_stop&quot;</span><span class="p">):</span>
<span class="n">mod</span><span class="o">.</span><span class="n">at_server_stop</span><span class="p">()</span></div>
<div class="viewcode-block" id="Evennia.at_server_reload_start"><a class="viewcode-back" href="../../../api/evennia.server.server.html#evennia.server.server.Evennia.at_server_reload_start">[docs]</a> <span class="k">def</span> <span class="nf">at_server_reload_start</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 called only when server starts back up after a reload.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">SERVER_STARTSTOP_MODULE</span><span class="p">:</span>
<span class="n">SERVER_STARTSTOP_MODULE</span><span class="o">.</span><span class="n">at_server_reload_start</span><span class="p">()</span></div>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">SERVER_STARTSTOP_MODULES</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;at_server_reload_start&quot;</span><span class="p">):</span>
<span class="n">mod</span><span class="o">.</span><span class="n">at_server_reload_start</span><span class="p">()</span></div>
<div class="viewcode-block" id="Evennia.at_post_portal_sync"><a class="viewcode-back" href="../../../api/evennia.server.server.html#evennia.server.server.Evennia.at_post_portal_sync">[docs]</a> <span class="k">def</span> <span class="nf">at_post_portal_sync</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">mode</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -631,8 +645,9 @@
<span class="sd"> This is called only time the server stops before a reload.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">SERVER_STARTSTOP_MODULE</span><span class="p">:</span>
<span class="n">SERVER_STARTSTOP_MODULE</span><span class="o">.</span><span class="n">at_server_reload_stop</span><span class="p">()</span></div>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">SERVER_STARTSTOP_MODULES</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;at_server_reload_stop&quot;</span><span class="p">):</span>
<span class="n">mod</span><span class="o">.</span><span class="n">at_server_reload_stop</span><span class="p">()</span></div>
<div class="viewcode-block" id="Evennia.at_server_cold_start"><a class="viewcode-back" href="../../../api/evennia.server.server.html#evennia.server.server.Evennia.at_server_cold_start">[docs]</a> <span class="k">def</span> <span class="nf">at_server_cold_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
@ -660,16 +675,18 @@
<span class="k">if</span> <span class="n">character</span><span class="p">:</span>
<span class="n">character</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="n">guest</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
<span class="k">if</span> <span class="n">SERVER_STARTSTOP_MODULE</span><span class="p">:</span>
<span class="n">SERVER_STARTSTOP_MODULE</span><span class="o">.</span><span class="n">at_server_cold_start</span><span class="p">()</span></div>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">SERVER_STARTSTOP_MODULES</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;at_server_cold_start&quot;</span><span class="p">):</span>
<span class="n">mod</span><span class="o">.</span><span class="n">at_server_cold_start</span><span class="p">()</span></div>
<div class="viewcode-block" id="Evennia.at_server_cold_stop"><a class="viewcode-back" href="../../../api/evennia.server.server.html#evennia.server.server.Evennia.at_server_cold_stop">[docs]</a> <span class="k">def</span> <span class="nf">at_server_cold_stop</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 called only when the server goes down due to a shutdown or reset.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">if</span> <span class="n">SERVER_STARTSTOP_MODULE</span><span class="p">:</span>
<span class="n">SERVER_STARTSTOP_MODULE</span><span class="o">.</span><span class="n">at_server_cold_stop</span><span class="p">()</span></div></div>
<span class="k">for</span> <span class="n">mod</span> <span class="ow">in</span> <span class="n">SERVER_STARTSTOP_MODULES</span><span class="p">:</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">mod</span><span class="p">,</span> <span class="s2">&quot;at_server_cold_stop&quot;</span><span class="p">):</span>
<span class="n">mod</span><span class="o">.</span><span class="n">at_server_cold_stop</span><span class="p">()</span></div></div>
<span class="c1"># ------------------------------------------------------------</span>

View file

@ -1594,7 +1594,7 @@
<span class="n">matchdict</span> <span class="o">=</span> <span class="p">{</span>
<span class="n">key</span><span class="p">:</span> <span class="n">value</span> <span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">&quot;&quot;</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">match</span><span class="o">.</span><span class="n">groupdict</span><span class="p">()</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">}</span>
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="n">outtemplate</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="o">**</span><span class="n">matchdict</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span><span class="p">,</span> <span class="n">outtemplate</span><span class="o">.</span><span class="n">format_map</span><span class="p">(</span><span class="n">matchdict</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">False</span><span class="p">,</span> <span class="n">string</span></div>

View file

@ -285,6 +285,9 @@
<span class="k">def</span> <span class="fm">__or__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">|</span> <span class="n">other</span>
<span class="k">def</span> <span class="fm">__ror__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span>
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">|</span> <span class="n">other</span>
<span class="nd">@_save</span>
<span class="k">def</span> <span class="fm">__setitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="fm">__setitem__</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_convert_mutables</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
@ -305,7 +308,7 @@
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="nb">list</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;_class&quot;</span><span class="p">,</span> <span class="nb">list</span><span class="p">)()</span>
<span class="nd">@_save</span>
<span class="k">def</span> <span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">otherlist</span><span class="p">):</span>
@ -349,7 +352,7 @@
<span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="fm">__init__</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">()</span>
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="s2">&quot;_class&quot;</span><span class="p">,</span> <span class="nb">dict</span><span class="p">)()</span>
<span class="k">def</span> <span class="nf">has_key</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="p">):</span>
<span class="k">return</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span>
@ -687,11 +690,20 @@
<span class="k">pass</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</span><span class="p">):</span>
<span class="c1"># we try to conserve the iterable class, if not convert to list</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">([</span><span class="n">process_item</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">item</span><span class="p">])</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">process_item</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">item</span><span class="p">]</span>
<span class="c1"># we try to conserve the iterable class, if not convert to dict</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span>
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="c1"># we try to conserve the iterable class, if not convert to list</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">([</span><span class="n">process_item</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">item</span><span class="p">])</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">process_item</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">item</span><span class="p">]</span>
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;sessid&quot;</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;conn_time&quot;</span><span class="p">):</span>
<span class="k">return</span> <span class="n">pack_session</span><span class="p">(</span><span class="n">item</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
@ -756,11 +768,20 @@
<span class="k">return</span> <span class="n">deque</span><span class="p">(</span><span class="n">process_item</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">item</span><span class="p">)</span>
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># we try to conserve the iterable class if</span>
<span class="c1"># it accepts an iterator</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="n">process_item</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">item</span><span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">process_item</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">item</span><span class="p">]</span>
<span class="c1"># we try to conserve the iterable class, if not convert to dict</span>
<span class="k">try</span><span class="p">:</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span>
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="k">return</span> <span class="p">{</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">process_item</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># we try to conserve the iterable class if</span>
<span class="c1"># it accepts an iterator</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="n">process_item</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">item</span><span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="k">return</span> <span class="p">[</span><span class="n">process_item</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">item</span><span class="p">]</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__deserialize_dbobjs__&quot;</span><span class="p">):</span>
<span class="c1"># this allows the object to custom-deserialize any embedded dbobjs</span>
@ -822,13 +843,30 @@
<span class="k">return</span> <span class="n">dat</span>
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># we try to conserve the iterable class if it</span>
<span class="c1"># accepts an iterator</span>
<span class="k">return</span> <span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">parent</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverList</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="c1"># we try to conserve the iterable class, if not convert to dict</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDict</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">,</span> <span class="n">_class</span><span class="o">=</span><span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDict</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">item</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># we try to conserve the iterable class if it</span>
<span class="c1"># accepts an iterator</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverList</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">,</span> <span class="n">_class</span><span class="o">=</span><span class="n">item</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverList</span><span class="p">(</span><span class="n">_parent</span><span class="o">=</span><span class="n">parent</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">item</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="s2">&quot;__deserialize_dbobjs__&quot;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
@ -842,7 +880,9 @@
<span class="c1"># convert lists, dicts and sets to their Saved* counterparts. It</span>
<span class="c1"># is only relevant if the &quot;root&quot; is an iterable of the right type.</span>
<span class="n">dtype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">if</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">list</span><span class="p">:</span>
<span class="k">if</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">str</span><span class="p">,</span> <span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="nb">bool</span><span class="p">,</span> <span class="nb">bytes</span><span class="p">,</span> <span class="n">SafeString</span><span class="p">,</span> <span class="nb">tuple</span><span class="p">):</span>
<span class="k">return</span> <span class="n">process_item</span><span class="p">(</span><span class="n">data</span><span class="p">)</span>
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">list</span><span class="p">:</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverList</span><span class="p">(</span><span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
@ -872,6 +912,34 @@
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDeque</span><span class="p">(</span><span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">process_item</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">data</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">elif</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">data</span><span class="p">,</span> <span class="s2">&quot;__iter__&quot;</span><span class="p">):</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># we try to conserve the iterable class, if not convert to dict</span>
<span class="k">try</span><span class="p">:</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDict</span><span class="p">(</span><span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">,</span> <span class="n">_class</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">data</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverDict</span><span class="p">(</span><span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">update</span><span class="p">(</span>
<span class="p">(</span><span class="n">process_item</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</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">data</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
<span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># we try to conserve the iterable class if it</span>
<span class="c1"># accepts an iterator</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverList</span><span class="p">(</span><span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">,</span> <span class="n">_class</span><span class="o">=</span><span class="n">data</span><span class="o">.</span><span class="vm">__class__</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">except</span> <span class="p">(</span><span class="ne">AttributeError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
<span class="n">dat</span> <span class="o">=</span> <span class="n">_SaverList</span><span class="p">(</span><span class="n">_db_obj</span><span class="o">=</span><span class="n">db_obj</span><span class="p">)</span>
<span class="n">dat</span><span class="o">.</span><span class="n">_data</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">process_tree</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="n">dat</span><span class="p">)</span> <span class="k">for</span> <span class="n">val</span> <span class="ow">in</span> <span class="n">data</span><span class="p">)</span>
<span class="k">return</span> <span class="n">dat</span>
<span class="k">return</span> <span class="n">process_item</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div>

View file

@ -145,6 +145,9 @@
<li><a href="evennia/contrib/grid/xyzgrid/xymap_legend.html">evennia.contrib.grid.xyzgrid.xymap_legend</a></li>
<li><a href="evennia/contrib/grid/xyzgrid/xyzgrid.html">evennia.contrib.grid.xyzgrid.xyzgrid</a></li>
<li><a href="evennia/contrib/grid/xyzgrid/xyzroom.html">evennia.contrib.grid.xyzgrid.xyzroom</a></li>
<li><a href="evennia/contrib/rpg/buffs/buff.html">evennia.contrib.rpg.buffs.buff</a></li>
<li><a href="evennia/contrib/rpg/buffs/samplebuffs.html">evennia.contrib.rpg.buffs.samplebuffs</a></li>
<li><a href="evennia/contrib/rpg/buffs/tests.html">evennia.contrib.rpg.buffs.tests</a></li>
<li><a href="evennia/contrib/rpg/dice/dice.html">evennia.contrib.rpg.dice.dice</a></li>
<li><a href="evennia/contrib/rpg/dice/tests.html">evennia.contrib.rpg.dice.tests</a></li>
<li><a href="evennia/contrib/rpg/health_bar/health_bar.html">evennia.contrib.rpg.health_bar.health_bar</a></li>