mirror of
https://github.com/evennia/evennia.git
synced 2026-03-20 14:56:30 +01:00
Updated HTML docs
This commit is contained in:
parent
bd82579bfa
commit
70b4caedb6
105 changed files with 2389 additions and 2138 deletions
|
|
@ -1,4 +1,4 @@
|
|||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: c4d7359e51b30a515e5488151d7bb5e5
|
||||
config: dc112786974ccaf0f5cb1514f4a4191e
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
|
|
|||
|
|
@ -473,14 +473,14 @@ class CmdEcho(Command):
|
|||
</div>
|
||||
<div class="literal-block-wrapper docutils container" id="a-full-code-block-example">
|
||||
<div class="code-block-caption"><span class="caption-text">An example code block</span><a class="headerlink" href="#a-full-code-block-example" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span>
|
||||
<span class="normal">6</span>
|
||||
<span class="normal">7</span>
|
||||
<span class="normal">8</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="hll"><span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">Command</span>
|
||||
<span class="normal">8</span></pre></div></td><td class="code"><div><pre><span></span><span class="hll"><span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">Command</span>
|
||||
</span><span class="hll"><span class="k">class</span> <span class="nc">CmdEcho</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
||||
</span> <span class="sd">"""</span>
|
||||
<span class="sd"> Usage: echo <arg></span>
|
||||
|
|
@ -488,8 +488,8 @@ class CmdEcho(Command):
|
|||
<span class="n">key</span> <span class="o">=</span> <span class="s2">"echo"</span>
|
||||
<span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="hll"> <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="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
</span></pre></div>
|
||||
</td></tr></table></div>
|
||||
</span></pre></div></td></tr></table></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Here, <code class="docutils literal notranslate"><span class="pre">:linenos:</span></code> turns on line-numbers and <code class="docutils literal notranslate"><span class="pre">:emphasize-lines:</span></code> allows for emphasizing certain lines
|
||||
in a different color. The <code class="docutils literal notranslate"><span class="pre">:caption:</span></code> shows an instructive text and <code class="docutils literal notranslate"><span class="pre">:name:</span></code> is used to reference
|
||||
|
|
|
|||
|
|
@ -53,21 +53,21 @@ with <a class="reference internal" href="EvEditor.html"><span class="doc std std
|
|||
<a class="reference internal" href="Batch-Processors.html"><span class="doc std std-doc">Batch-Processor</span></a>’s interactive mode.</p>
|
||||
</div>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedLook" title="evennia.commands.default.unloggedin.CmdUnconnectedLook"><span class="xref myst py py-class"><strong>__unloggedin_look_command</strong> [l, look]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedLook" title="evennia.commands.default.unloggedin.CmdUnconnectedLook"><span class="xref myst py py-class"><strong>__unloggedin_look_command</strong> [look, l]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdAbout" title="evennia.commands.default.system.CmdAbout"><span class="xref myst py py-class"><strong>about</strong> [version]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdAccess" title="evennia.commands.default.general.CmdAccess"><span class="xref myst py py-class"><strong>access</strong> [hierarchy, groups]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdAccounts" title="evennia.commands.default.system.CmdAccounts"><span class="xref myst py py-class"><strong>accounts</strong> [account, listaccounts]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdAddCom" title="evennia.commands.default.comms.CmdAddCom"><span class="xref myst py py-class"><strong>addcom</strong> [aliaschan, chanalias]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdAddCom" title="evennia.commands.default.comms.CmdAddCom"><span class="xref myst py py-class"><strong>addcom</strong> [chanalias, aliaschan]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetObjAlias" title="evennia.commands.default.building.CmdSetObjAlias"><span class="xref myst py py-class"><strong>alias</strong> [setobjalias]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdAllCom" title="evennia.commands.default.comms.CmdAllCom"><span class="xref myst py py-class"><strong>allcom</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.batchprocess.html#evennia.commands.default.batchprocess.CmdBatchCode" title="evennia.commands.default.batchprocess.CmdBatchCode"><span class="xref myst py py-class"><strong>batchcode</strong> [batchcodes]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.batchprocess.html#evennia.commands.default.batchprocess.CmdBatchCommands" title="evennia.commands.default.batchprocess.CmdBatchCommands"><span class="xref myst py py-class"><strong>batchcommands</strong> [batchcommand, batchcmd]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.batchprocess.html#evennia.commands.default.batchprocess.CmdBatchCommands" title="evennia.commands.default.batchprocess.CmdBatchCommands"><span class="xref myst py py-class"><strong>batchcommands</strong> [batchcmd, batchcommand]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCBoot" title="evennia.commands.default.comms.CmdCBoot"><span class="xref myst py py-class"><strong>cboot</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannelCreate" title="evennia.commands.default.comms.CmdChannelCreate"><span class="xref myst py py-class"><strong>ccreate</strong> [channelcreate]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCdesc" title="evennia.commands.default.comms.CmdCdesc"><span class="xref myst py py-class"><strong>cdesc</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCdestroy" title="evennia.commands.default.comms.CmdCdestroy"><span class="xref myst py py-class"><strong>cdestroy</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCemit" title="evennia.commands.default.comms.CmdCemit"><span class="xref myst py py-class"><strong>cemit</strong> [cmsg]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannels" title="evennia.commands.default.comms.CmdChannels"><span class="xref myst py py-class"><strong>channels</strong> [channellist, chanlist, all channels, comlist, clist]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdChannels" title="evennia.commands.default.comms.CmdChannels"><span class="xref myst py py-class"><strong>channels</strong> [channellist, all channels, clist, comlist, chanlist]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdCharCreate" title="evennia.commands.default.account.CmdCharCreate"><span class="xref myst py py-class"><strong>charcreate</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdCharDelete" title="evennia.commands.default.account.CmdCharDelete"><span class="xref myst py py-class"><strong>chardelete</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdClock" title="evennia.commands.default.comms.CmdClock"><span class="xref myst py py-class"><strong>clock</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
|
|
@ -79,9 +79,9 @@ with <a class="reference internal" href="EvEditor.html"><span class="doc std std
|
|||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCreate" title="evennia.commands.default.building.CmdCreate"><span class="xref myst py py-class"><strong>create</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedCreate" title="evennia.commands.default.unloggedin.CmdUnconnectedCreate"><span class="xref myst py py-class"><strong>create</strong> [cre, cr]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdCWho" title="evennia.commands.default.comms.CmdCWho"><span class="xref myst py py-class"><strong>cwho</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDelCom" title="evennia.commands.default.comms.CmdDelCom"><span class="xref myst py py-class"><strong>delcom</strong> [delchanalias, delaliaschan]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdDelCom" title="evennia.commands.default.comms.CmdDelCom"><span class="xref myst py py-class"><strong>delcom</strong> [delaliaschan, delchanalias]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDesc" title="evennia.commands.default.building.CmdDesc"><span class="xref myst py py-class"><strong>desc</strong> [describe]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDestroy" title="evennia.commands.default.building.CmdDestroy"><span class="xref myst py py-class"><strong>destroy</strong> [delete, del]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDestroy" title="evennia.commands.default.building.CmdDestroy"><span class="xref myst py py-class"><strong>destroy</strong> [del, delete]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDig" title="evennia.commands.default.building.CmdDig"><span class="xref myst py py-class"><strong>dig</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdDrop" title="evennia.commands.default.general.CmdDrop"><span class="xref myst py py-class"><strong>drop</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedEncoding" title="evennia.commands.default.unloggedin.CmdUnconnectedEncoding"><span class="xref myst py py-class"><strong>encoding</strong> [encode]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
|
|
@ -104,8 +104,8 @@ with <a class="reference internal" href="EvEditor.html"><span class="doc std std
|
|||
<li><p><a class="reference internal" href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdLook" title="evennia.commands.default.general.CmdLook"><span class="xref myst py py-class"><strong>look</strong> [l, ls]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdMvAttr" title="evennia.commands.default.building.CmdMvAttr"><span class="xref myst py py-class"><strong>mvattr</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdName" title="evennia.commands.default.building.CmdName"><span class="xref myst py py-class"><strong>name</strong> [rename]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdNick" title="evennia.commands.default.general.CmdNick"><span class="xref myst py py-class"><strong>nick</strong> [nicks, nickname]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdObjects" title="evennia.commands.default.system.CmdObjects"><span class="xref myst py py-class"><strong>objects</strong> [listobjs, stats, db, listobjects]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdNick" title="evennia.commands.default.general.CmdNick"><span class="xref myst py py-class"><strong>nick</strong> [nickname, nicks]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdObjects" title="evennia.commands.default.system.CmdObjects"><span class="xref myst py py-class"><strong>objects</strong> [stats, listobjects, listobjs, db]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOOC" title="evennia.commands.default.account.CmdOOC"><span class="xref myst py py-class"><strong>ooc</strong> [unpuppet]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen" title="evennia.commands.default.building.CmdOpen"><span class="xref myst py py-class"><strong>open</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdOption" title="evennia.commands.default.account.CmdOption"><span class="xref myst py py-class"><strong>option</strong> [options]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
|
|
@ -115,7 +115,7 @@ with <a class="reference internal" href="EvEditor.html"><span class="doc std std
|
|||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdPy" title="evennia.commands.default.system.CmdPy"><span class="xref myst py py-class"><strong>py</strong> [!]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdQuell" title="evennia.commands.default.account.CmdQuell"><span class="xref myst py py-class"><strong>quell</strong> [unquell]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdQuit" title="evennia.commands.default.account.CmdQuit"><span class="xref myst py py-class"><strong>quit</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedQuit" title="evennia.commands.default.unloggedin.CmdUnconnectedQuit"><span class="xref myst py py-class"><strong>quit</strong> [q, qu]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.unloggedin.html#evennia.commands.default.unloggedin.CmdUnconnectedQuit" title="evennia.commands.default.unloggedin.CmdUnconnectedQuit"><span class="xref myst py py-class"><strong>quit</strong> [qu, q]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_unloggedin.html#evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet" title="evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet"><span class="xref myst py py-class">UnloggedinCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdReload" title="evennia.commands.default.system.CmdReload"><span class="xref myst py py-class"><strong>reload</strong> [restart]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdReset" title="evennia.commands.default.system.CmdReset"><span class="xref myst py py-class"><strong>reset</strong> [reboot]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.comms.html#evennia.commands.default.comms.CmdRSS2Chan" title="evennia.commands.default.comms.CmdRSS2Chan"><span class="xref myst py py-class"><strong>rss2chan</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>Comms</em>)</p></li>
|
||||
|
|
@ -138,7 +138,7 @@ with <a class="reference internal" href="EvEditor.html"><span class="doc std std
|
|||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdTickers" title="evennia.commands.default.system.CmdTickers"><span class="xref myst py py-class"><strong>tickers</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.system.html#evennia.commands.default.system.CmdTime" title="evennia.commands.default.system.CmdTime"><span class="xref myst py py-class"><strong>time</strong> [uptime]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>System</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTunnel" title="evennia.commands.default.building.CmdTunnel"><span class="xref myst py py-class"><strong>tunnel</strong> [tun]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTypeclass" title="evennia.commands.default.building.CmdTypeclass"><span class="xref myst py py-class"><strong>typeclass</strong> [parent, type, swap, update]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTypeclass" title="evennia.commands.default.building.CmdTypeclass"><span class="xref myst py py-class"><strong>typeclass</strong> [parent, swap, type, update]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.building.html#evennia.commands.default.building.CmdUnLink" title="evennia.commands.default.building.CmdUnLink"><span class="xref myst py py-class"><strong>unlink</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>Building</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.general.html#evennia.commands.default.general.CmdWhisper" title="evennia.commands.default.general.CmdWhisper"><span class="xref myst py py-class"><strong>whisper</strong></span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_character.html#evennia.commands.default.cmdset_character.CharacterCmdSet" title="evennia.commands.default.cmdset_character.CharacterCmdSet"><span class="xref myst py py-class">CharacterCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
<li><p><a class="reference internal" href="api/evennia.commands.default.account.html#evennia.commands.default.account.CmdWho" title="evennia.commands.default.account.CmdWho"><span class="xref myst py py-class"><strong>who</strong> [doing]</span></a> (cmdset: <a class="reference internal" href="api/evennia.commands.default.cmdset_account.html#evennia.commands.default.cmdset_account.AccountCmdSet" title="evennia.commands.default.cmdset_account.AccountCmdSet"><span class="xref myst py py-class">AccountCmdSet</span></a>, help-category: <em>General</em>)</p></li>
|
||||
|
|
|
|||
|
|
@ -241,59 +241,59 @@ may trigger changes in the GUI or play a sound etc.</p>
|
|||
<a class="reference external" href="https://evennia.readthedocs.io/en/latest/Web-Client-Webclient.html">https://evennia.readthedocs.io/en/latest/Web-Client-Webclient.html</a> for getting set up with custom
|
||||
webclient code. Once you have a custom plugin defined and loaded, create a new function in the
|
||||
plugin, onCustomFunc() for example:</p>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span> <span class="kd">var</span> <span class="nx">onCustomFunc</span> <span class="o">=</span> <span class="kd">function</span><span class="p">(</span><span class="nx">args</span><span class="p">,</span> <span class="nx">kwargs</span><span class="p">)</span> <span class="p">{</span>
|
||||
<span class="kd">var</span> <span class="o">=</span> <span class="nx">args</span><span class="p">.</span><span class="kd">var</span>
|
||||
<span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="kd">var</span><span class="p">)</span>
|
||||
<span class="p">}</span>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">onCustomFunc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="p">(</span><span class="nx">args</span><span class="p">,</span><span class="w"> </span><span class="nx">kwargs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">args</span><span class="p">.</span><span class="kd">var</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="kd">var</span><span class="p">)</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You’ll also need to add the function to what the main plugin function returns:</p>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span> <span class="k">return</span> <span class="p">{</span>
|
||||
<span class="nx">init</span><span class="o">:</span> <span class="nx">init</span><span class="p">,</span>
|
||||
<span class="nx">onCustomFunc</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">init</span><span class="o">:</span><span class="w"> </span><span class="nx">init</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onCustomFunc</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This defines the function and looks for “var” as a variable that is passed to it. Once you have this
|
||||
in place in your custom plugin, you also need to update the static/webclient/js/webclient_gui.js
|
||||
file to recognize the new function when it’s called. First you should add a new function inside the
|
||||
plugin_handler function to recognize the new function:</p>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span> <span class="kd">var</span> <span class="nx">onCustomFunc</span> <span class="o">=</span> <span class="kd">function</span> <span class="p">(</span><span class="nx">cmdname</span><span class="p">,</span> <span class="nx">args</span><span class="p">,</span> <span class="nx">kwargs</span><span class="p">)</span> <span class="p">{</span>
|
||||
<span class="k">for</span><span class="p">(</span> <span class="kd">let</span> <span class="nx">n</span><span class="o">=</span><span class="mf">0</span><span class="p">;</span> <span class="nx">n</span> <span class="o"><</span> <span class="nx">ordered_plugins</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span> <span class="nx">n</span><span class="o">++</span> <span class="p">)</span> <span class="p">{</span>
|
||||
<span class="kd">let</span> <span class="nx">plugin</span> <span class="o">=</span> <span class="nx">ordered_plugins</span><span class="p">[</span><span class="nx">n</span><span class="p">];</span>
|
||||
<span class="k">if</span><span class="p">(</span> <span class="s1">'onCustomFunc'</span> <span class="ow">in</span> <span class="nx">plugin</span> <span class="p">)</span> <span class="p">{</span>
|
||||
<span class="k">if</span><span class="p">(</span> <span class="nx">plugin</span><span class="p">.</span><span class="nx">onCustomFunc</span><span class="p">(</span><span class="nx">args</span><span class="p">,</span> <span class="nx">kwargs</span><span class="p">)</span> <span class="p">)</span> <span class="p">{</span>
|
||||
<span class="c1">// True -- means this plugin claims this command exclusively.</span>
|
||||
<span class="k">return</span><span class="p">;</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<span class="p">}</span>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span><span class="w"> </span><span class="kd">var</span><span class="w"> </span><span class="nx">onCustomFunc</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="kd">function</span><span class="w"> </span><span class="p">(</span><span class="nx">cmdname</span><span class="p">,</span><span class="w"> </span><span class="nx">args</span><span class="p">,</span><span class="w"> </span><span class="nx">kwargs</span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="k">for</span><span class="p">(</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">n</span><span class="o">=</span><span class="mf">0</span><span class="p">;</span><span class="w"> </span><span class="nx">n</span><span class="w"> </span><span class="o"><</span><span class="w"> </span><span class="nx">ordered_plugins</span><span class="p">.</span><span class="nx">length</span><span class="p">;</span><span class="w"> </span><span class="nx">n</span><span class="o">++</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nx">plugin</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nx">ordered_plugins</span><span class="p">[</span><span class="nx">n</span><span class="p">];</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="s1">'onCustomFunc'</span><span class="w"> </span><span class="ow">in</span><span class="w"> </span><span class="nx">plugin</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="k">if</span><span class="p">(</span><span class="w"> </span><span class="nx">plugin</span><span class="p">.</span><span class="nx">onCustomFunc</span><span class="p">(</span><span class="nx">args</span><span class="p">,</span><span class="w"> </span><span class="nx">kwargs</span><span class="p">)</span><span class="w"> </span><span class="p">)</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="c1">// True -- means this plugin claims this command exclusively.</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="k">return</span><span class="p">;</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This looks through all the plugins for a function that corresponds to the custom function being
|
||||
called. Next, add the custom function to the return statement of the plugin handler:</p>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span> <span class="k">return</span> <span class="p">{</span>
|
||||
<span class="nx">add</span><span class="o">:</span> <span class="nx">add</span><span class="p">,</span>
|
||||
<span class="nx">onKeydown</span><span class="o">:</span> <span class="nx">onKeydown</span><span class="p">,</span>
|
||||
<span class="nx">onBeforeUnload</span><span class="o">:</span> <span class="nx">onBeforeUnload</span><span class="p">,</span>
|
||||
<span class="nx">onLoggedIn</span><span class="o">:</span> <span class="nx">onLoggedIn</span><span class="p">,</span>
|
||||
<span class="nx">onText</span><span class="o">:</span> <span class="nx">onText</span><span class="p">,</span>
|
||||
<span class="nx">onGotOptions</span><span class="o">:</span> <span class="nx">onGotOptions</span><span class="p">,</span>
|
||||
<span class="nx">onPrompt</span><span class="o">:</span> <span class="nx">onPrompt</span><span class="p">,</span>
|
||||
<span class="nx">onDefault</span><span class="o">:</span> <span class="nx">onDefault</span><span class="p">,</span>
|
||||
<span class="nx">onSilence</span><span class="o">:</span> <span class="nx">onSilence</span><span class="p">,</span>
|
||||
<span class="nx">onConnectionClose</span><span class="o">:</span> <span class="nx">onConnectionClose</span><span class="p">,</span>
|
||||
<span class="nx">onSend</span><span class="o">:</span> <span class="nx">onSend</span><span class="p">,</span>
|
||||
<span class="nx">init</span><span class="o">:</span> <span class="nx">init</span><span class="p">,</span>
|
||||
<span class="nx">postInit</span><span class="o">:</span> <span class="nx">postInit</span><span class="p">,</span>
|
||||
<span class="nx">onCustomFunc</span><span class="o">:</span> <span class="nx">onCustomFunc</span><span class="p">,</span>
|
||||
<span class="p">}</span>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span><span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">add</span><span class="o">:</span><span class="w"> </span><span class="nx">add</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onKeydown</span><span class="o">:</span><span class="w"> </span><span class="nx">onKeydown</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onBeforeUnload</span><span class="o">:</span><span class="w"> </span><span class="nx">onBeforeUnload</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onLoggedIn</span><span class="o">:</span><span class="w"> </span><span class="nx">onLoggedIn</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onText</span><span class="o">:</span><span class="w"> </span><span class="nx">onText</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onGotOptions</span><span class="o">:</span><span class="w"> </span><span class="nx">onGotOptions</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onPrompt</span><span class="o">:</span><span class="w"> </span><span class="nx">onPrompt</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onDefault</span><span class="o">:</span><span class="w"> </span><span class="nx">onDefault</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onSilence</span><span class="o">:</span><span class="w"> </span><span class="nx">onSilence</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onConnectionClose</span><span class="o">:</span><span class="w"> </span><span class="nx">onConnectionClose</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onSend</span><span class="o">:</span><span class="w"> </span><span class="nx">onSend</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">init</span><span class="o">:</span><span class="w"> </span><span class="nx">init</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">postInit</span><span class="o">:</span><span class="w"> </span><span class="nx">postInit</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="nx">onCustomFunc</span><span class="o">:</span><span class="w"> </span><span class="nx">onCustomFunc</span><span class="p">,</span><span class="w"></span>
|
||||
<span class="w"> </span><span class="p">}</span><span class="w"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Lastly, you will also need to need to add an entry to the Evennia emitter to tie the python function
|
||||
call to this new javascript function (this is in the $(document).ready function):</p>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span> <span class="nx">Evennia</span><span class="p">.</span><span class="nx">emitter</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s2">"customFunc"</span><span class="p">,</span> <span class="nx">plugin_handler</span><span class="p">.</span><span class="nx">onCustomFunc</span><span class="p">);</span>
|
||||
<div class="highlight-javascript notranslate"><div class="highlight"><pre><span></span><span class="w"> </span><span class="nx">Evennia</span><span class="p">.</span><span class="nx">emitter</span><span class="p">.</span><span class="nx">on</span><span class="p">(</span><span class="s2">"customFunc"</span><span class="p">,</span><span class="w"> </span><span class="nx">plugin_handler</span><span class="p">.</span><span class="nx">onCustomFunc</span><span class="p">);</span><span class="w"></span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Now you can make a call from your python code to the new custom function to pass information from
|
||||
|
|
|
|||
|
|
@ -14,21 +14,21 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
[Batch-Processor](./Batch-Processors.md)'s interactive mode.
|
||||
```
|
||||
|
||||
- [**__unloggedin_look_command** [l, look]](evennia.commands.default.unloggedin.CmdUnconnectedLook) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**__unloggedin_look_command** [look, l]](evennia.commands.default.unloggedin.CmdUnconnectedLook) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**about** [version]](evennia.commands.default.system.CmdAbout) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**access** [hierarchy, groups]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**accounts** [account, listaccounts]](evennia.commands.default.system.CmdAccounts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**addcom** [aliaschan, chanalias]](evennia.commands.default.comms.CmdAddCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**addcom** [chanalias, aliaschan]](evennia.commands.default.comms.CmdAddCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**alias** [setobjalias]](evennia.commands.default.building.CmdSetObjAlias) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**allcom**](evennia.commands.default.comms.CmdAllCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**batchcode** [batchcodes]](evennia.commands.default.batchprocess.CmdBatchCode) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**batchcommands** [batchcommand, batchcmd]](evennia.commands.default.batchprocess.CmdBatchCommands) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**batchcommands** [batchcmd, batchcommand]](evennia.commands.default.batchprocess.CmdBatchCommands) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**cboot**](evennia.commands.default.comms.CmdCBoot) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**ccreate** [channelcreate]](evennia.commands.default.comms.CmdChannelCreate) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**cdesc**](evennia.commands.default.comms.CmdCdesc) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**cdestroy**](evennia.commands.default.comms.CmdCdestroy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**cemit** [cmsg]](evennia.commands.default.comms.CmdCemit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**channels** [channellist, chanlist, all channels, comlist, clist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**channels** [channellist, all channels, clist, comlist, chanlist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**charcreate**](evennia.commands.default.account.CmdCharCreate) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**chardelete**](evennia.commands.default.account.CmdCharDelete) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**clock**](evennia.commands.default.comms.CmdClock) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
|
|
@ -40,9 +40,9 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**create**](evennia.commands.default.building.CmdCreate) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**create** [cre, cr]](evennia.commands.default.unloggedin.CmdUnconnectedCreate) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**cwho**](evennia.commands.default.comms.CmdCWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**delcom** [delchanalias, delaliaschan]](evennia.commands.default.comms.CmdDelCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**delcom** [delaliaschan, delchanalias]](evennia.commands.default.comms.CmdDelCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
- [**desc** [describe]](evennia.commands.default.building.CmdDesc) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**destroy** [delete, del]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**destroy** [del, delete]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**dig**](evennia.commands.default.building.CmdDig) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**drop**](evennia.commands.default.general.CmdDrop) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**encoding** [encode]](evennia.commands.default.unloggedin.CmdUnconnectedEncoding) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
|
|
@ -65,8 +65,8 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**look** [l, ls]](evennia.commands.default.general.CmdLook) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**mvattr**](evennia.commands.default.building.CmdMvAttr) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**name** [rename]](evennia.commands.default.building.CmdName) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**nick** [nicks, nickname]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**objects** [listobjs, stats, db, listobjects]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**nick** [nickname, nicks]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**objects** [stats, listobjects, listobjs, db]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**ooc** [unpuppet]](evennia.commands.default.account.CmdOOC) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**open**](evennia.commands.default.building.CmdOpen) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**option** [options]](evennia.commands.default.account.CmdOption) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
|
|
@ -76,7 +76,7 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**py** [!]](evennia.commands.default.system.CmdPy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_)
|
||||
- [**quell** [unquell]](evennia.commands.default.account.CmdQuell) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**quit**](evennia.commands.default.account.CmdQuit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
- [**quit** [q, qu]](evennia.commands.default.unloggedin.CmdUnconnectedQuit) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**quit** [qu, q]](evennia.commands.default.unloggedin.CmdUnconnectedQuit) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_)
|
||||
- [**reload** [restart]](evennia.commands.default.system.CmdReload) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_)
|
||||
- [**reset** [reboot]](evennia.commands.default.system.CmdReset) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_)
|
||||
- [**rss2chan**](evennia.commands.default.comms.CmdRSS2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_)
|
||||
|
|
@ -99,7 +99,7 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using
|
|||
- [**tickers**](evennia.commands.default.system.CmdTickers) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**time** [uptime]](evennia.commands.default.system.CmdTime) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_)
|
||||
- [**tunnel** [tun]](evennia.commands.default.building.CmdTunnel) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**typeclass** [parent, type, swap, update]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**typeclass** [parent, swap, type, update]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**unlink**](evennia.commands.default.building.CmdUnLink) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_)
|
||||
- [**whisper**](evennia.commands.default.general.CmdWhisper) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_)
|
||||
- [**who** [doing]](evennia.commands.default.account.CmdWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_)
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ skipping, reloading etc.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.batchprocess.CmdBatchCommands.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcommand', 'batchcmd']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['batchcmd', 'batchcommand']</em><a class="headerlink" href="#evennia.commands.default.batchprocess.CmdBatchCommands.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -496,7 +496,7 @@ You can specify the /force switch to bypass this confirmation.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.building.CmdDestroy.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['delete', 'del']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['del', 'delete']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -1186,7 +1186,7 @@ server settings.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.building.CmdTypeclass.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['parent', 'type', 'swap', 'update']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['parent', 'swap', 'type', 'update']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ aliases to an already joined channel.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.comms.CmdAddCom.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['aliaschan', 'chanalias']</em><a class="headerlink" href="#evennia.commands.default.comms.CmdAddCom.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['chanalias', 'aliaschan']</em><a class="headerlink" href="#evennia.commands.default.comms.CmdAddCom.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -118,7 +118,7 @@ for that channel.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.comms.CmdDelCom.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['delchanalias', 'delaliaschan']</em><a class="headerlink" href="#evennia.commands.default.comms.CmdDelCom.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['delaliaschan', 'delchanalias']</em><a class="headerlink" href="#evennia.commands.default.comms.CmdDelCom.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -221,7 +221,7 @@ Use addcom/delcom to join and leave channels</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.comms.CmdChannels.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['channellist', 'chanlist', 'all channels', 'comlist', 'clist']</em><a class="headerlink" href="#evennia.commands.default.comms.CmdChannels.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['channellist', 'all channels', 'clist', 'comlist', 'chanlist']</em><a class="headerlink" href="#evennia.commands.default.comms.CmdChannels.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -197,7 +197,7 @@ for everyone to use, you need build privileges and the alias command.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.general.CmdNick.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['nicks', 'nickname']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['nickname', 'nicks']</em><a class="headerlink" href="#evennia.commands.default.general.CmdNick.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -351,7 +351,7 @@ given, <nr> defaults to 10.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.system.CmdObjects.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['listobjs', 'stats', 'db', 'listobjects']</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['stats', 'listobjects', 'listobjs', 'db']</em><a class="headerlink" href="#evennia.commands.default.system.CmdObjects.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -165,7 +165,7 @@ version is a bit more complicated.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedQuit.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -210,7 +210,7 @@ All it does is display the connect screen.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -653,7 +653,7 @@ try to influence the other part in the deal.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.barter.CmdStatus.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['deal', 'offers']</em><a class="headerlink" href="#evennia.contrib.barter.CmdStatus.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['offers', 'deal']</em><a class="headerlink" href="#evennia.contrib.barter.CmdStatus.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -151,7 +151,7 @@ everyone but the person rolling.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.dice.CmdDice.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@dice', 'roll']</em><a class="headerlink" href="#evennia.contrib.dice.CmdDice.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['roll', '@dice']</em><a class="headerlink" href="#evennia.contrib.dice.CmdDice.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -173,7 +173,7 @@ version is a bit more complicated.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.email_login.CmdUnconnectedQuit.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'qu']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['qu', 'q']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedQuit.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -213,7 +213,7 @@ All it does is display the connect screen.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.email_login.CmdUnconnectedLook.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'look']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['look', 'l']</em><a class="headerlink" href="#evennia.contrib.email_login.CmdUnconnectedLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.ingame_python.commands.CmdCallback.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@calls', '@callbacks', '@callback']</em><a class="headerlink" href="#evennia.contrib.ingame_python.commands.CmdCallback.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@callbacks', '@callback', '@calls']</em><a class="headerlink" href="#evennia.contrib.ingame_python.commands.CmdCallback.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -775,7 +775,7 @@ Using the command without arguments will list all current recogs.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.rpsystem.CmdRecog.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['forget', 'recognize']</em><a class="headerlink" href="#evennia.contrib.rpsystem.CmdRecog.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['recognize', 'forget']</em><a class="headerlink" href="#evennia.contrib.rpsystem.CmdRecog.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
|
|
|
|||
|
|
@ -107,7 +107,7 @@ push the lid of the button away.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_examples.cmdset_red_button.CmdPush.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['press button', 'press', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.cmdset_red_button.CmdPush.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.cmdset_red_button.CmdPush.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -155,7 +155,7 @@ lid-state respectively.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_examples.cmdset_red_button.CmdSmashGlass.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['smash lid', 'break lid', 'smash']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.cmdset_red_button.CmdSmashGlass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['smash', 'smash lid', 'break lid']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.cmdset_red_button.CmdSmashGlass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -284,7 +284,7 @@ of causing the lamp to break.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_examples.cmdset_red_button.CmdBlindLook.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['examine', 'ex', 'l', 'listen', 'feel', 'get']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.cmdset_red_button.CmdBlindLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'get', 'listen', 'ex', 'examine', 'feel']</em><a class="headerlink" href="#evennia.contrib.tutorial_examples.cmdset_red_button.CmdBlindLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -353,7 +353,7 @@ of the object. We overload it with our own version.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_world.objects.CmdLight.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['burn', 'light']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdLight.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['light', 'burn']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdLight.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -479,7 +479,7 @@ shift green root up/down</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['pull', 'shiftroot', 'move', 'push']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['shiftroot', 'push', 'pull', 'move']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -527,7 +527,7 @@ yellow/green - horizontal roots</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_world.objects.CmdPressButton.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['press button', 'button', 'push button']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['button', 'push button', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdPressButton.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -692,7 +692,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_world.objects.CmdAttack.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['kill', 'pierce', 'hit', 'bash', 'slash', 'parry', 'stab', 'defend', 'chop', 'fight', 'thrust']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['slash', 'defend', 'chop', 'thrust', 'parry', 'fight', 'stab', 'hit', 'bash', 'kill', 'pierce']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -822,7 +822,7 @@ to find something.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['feel around', 'search', 'l', 'feel', 'fiddle']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['feel around', 'l', 'fiddle', 'search', 'feel']</em><a class="headerlink" href="#evennia.contrib.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -267,7 +267,7 @@ indentation.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.eveditor.CmdEditorGroup.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = [':fi', ':y', ':::', ':I', ':p', ':r', ':fd', ':w', ':dw', ':UU', ':DD', ':j', ':f', ':dd', ':!', ':i', ':h', ':=', ':S', ':echo', ':s', ':uu', ':q', ':<', ':u', ':>', ':', ':A', ':q!', ':x', ':wq', '::']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = [':echo', '::', ':s', ':=', ':q', ':j', ':dd', ':wq', ':w', ':', ':DD', ':r', ':UU', ':h', ':fd', ':S', ':q!', ':>', ':I', ':u', ':!', ':x', ':y', ':i', ':f', ':uu', ':dw', ':p', ':fi', ':::', ':A', ':<']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -77,7 +77,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.evmore.CmdMore.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['n', 'end', 'quit', 'e', 'abort', 'b', 'a', 'q', 't', 'back', 'next', 'top']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['next', 'b', 'top', 'abort', 'n', 'quit', 'e', 'back', 'end', 'a', 't', 'q']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Sphinx build info version 1
|
||||
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
|
||||
config: 0633c4e6f99716d16088a05549b3bd0c
|
||||
config: 400506d500dae7a94d889bdeb2b27f17
|
||||
tags: 645f666f9bcd5a90fca523b33c5a78b7
|
||||
|
|
|
|||
|
|
@ -210,6 +210,14 @@ warning when using reset mode.</p></li>
|
|||
<li><p>Attribute storage support defaultdics (Hendher)</p></li>
|
||||
<li><p>Add ObjectParent mixin to default game folder template as an easy, ready-made
|
||||
way to override features on all ObjectDB-inheriting objects easily.</p></li>
|
||||
<li><p>Add <code class="docutils literal notranslate"><span class="pre">TagProperty</span></code>, <code class="docutils literal notranslate"><span class="pre">AliasProperty</span></code> and <code class="docutils literal notranslate"><span class="pre">PermissionProperty</span></code> to assign these
|
||||
data in a similar way to django fields.</p></li>
|
||||
<li><p>The db pickle-serializer now checks for methods <code class="docutils literal notranslate"><span class="pre">__serialize_dbobjs__</span></code> and <code class="docutils literal notranslate"><span class="pre">__deserialize_dbobjs__</span></code>
|
||||
to allow custom packing/unpacking of nested dbobjs, to allow storing in Attribute.</p></li>
|
||||
<li><p>Optimizations to rpsystem contrib performance. Breaking change: <code class="docutils literal notranslate"><span class="pre">.get_sdesc()</span></code> will
|
||||
now return <code class="docutils literal notranslate"><span class="pre">None</span></code> instead of <code class="docutils literal notranslate"><span class="pre">.db.desc</span></code> if no sdesc is set; fallback in hook (inspectorCaracal)</p></li>
|
||||
<li><p>Reworked text2html parser to avoid problems with stateful color tags (inspectorCaracal)</p></li>
|
||||
<li><p>Simplified <code class="docutils literal notranslate"><span class="pre">EvMenu.options_formatter</span></code> hook to use <code class="docutils literal notranslate"><span class="pre">EvColumn</span></code> and f-strings (inspectorcaracal)</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="evennia-0-9-5">
|
||||
|
|
|
|||
|
|
@ -56,22 +56,35 @@
|
|||
</div>
|
||||
</div>
|
||||
<div class="literal-block-wrapper docutils container" id="id2">
|
||||
<div class="code-block-caption"><span class="caption-text">In-code</span><a class="headerlink" href="#id2" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">foo</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span> <span class="s2">"bar"</span><span class="p">]</span>
|
||||
<div class="code-block-caption"><span class="caption-text">In-code, using the .db wrapper</span><a class="headerlink" href="#id2" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">foo</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"bar"</span><span class="p">]</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">foo</span>
|
||||
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"myattr"</span><span class="p">,</span> <span class="mi">1234</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"bar"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literal-block-wrapper docutils container" id="id3">
|
||||
<div class="code-block-caption"><span class="caption-text">In-code, using the .attributes handler</span><a class="headerlink" href="#id3" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"myattr"</span><span class="p">,</span> <span class="mi">1234</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"bar"</span><span class="p">)</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"myattr"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"bar"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p><em>Attributes</em> allow you to to store arbitrary data on objects and make sure the data survives a
|
||||
server reboot. An Attribute can store pretty much any
|
||||
<div class="literal-block-wrapper docutils container" id="id4">
|
||||
<div class="code-block-caption"><span class="caption-text">In-code, using <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> at class level</span><a class="headerlink" href="#id4" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">AttributeProperty</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">MyObject</span><span class="p">(</span><span class="n">DefaultObject</span><span class="p">):</span>
|
||||
<span class="n">foo</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"bar"</span><span class="p">])</span>
|
||||
<span class="n">myattr</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">100</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'bar'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p><em>Attributes</em> allow you to to store arbitrary data on objects and make sure the data survives a server reboot. An Attribute can store pretty much any
|
||||
Python data structure and data type, like numbers, strings, lists, dicts etc. You can also
|
||||
store (references to) database objects like characters and rooms.</p>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference internal" href="#what-types-of-data-can-i-save-in-an-attribute"><span class="std std-doc">What can be stored in an Attribute</span></a> is a must-read
|
||||
also for experienced developers, to avoid getting surprised. Attributes can store <em>almost</em> everything
|
||||
<li><p><a class="reference internal" href="#what-types-of-data-can-i-save-in-an-attribute"><span class="std std-doc">What can be stored in an Attribute</span></a> is a must-read to avoid being surprised, also for experienced developers. Attributes can store <em>almost</em> everything
|
||||
but you need to know the quirks.</p></li>
|
||||
<li><p><a class="reference internal" href="#in-memory-attributes-nattributes"><span class="std std-doc">NAttributes</span></a> are the in-memory, non-persistent
|
||||
siblings of Attributes.</p></li>
|
||||
|
|
@ -81,7 +94,7 @@ siblings of Attributes.</p></li>
|
|||
<h2>Managing Attributes in Code<a class="headerlink" href="#managing-attributes-in-code" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Attributes are usually handled in code. All <a class="reference internal" href="Typeclasses.html"><span class="doc std std-doc">Typeclassed</span></a> entities
|
||||
(<a class="reference internal" href="Accounts.html"><span class="doc std std-doc">Accounts</span></a>, <a class="reference internal" href="Objects.html"><span class="doc std std-doc">Objects</span></a>, <a class="reference internal" href="Scripts.html"><span class="doc std std-doc">Scripts</span></a> and
|
||||
<a class="reference internal" href="Channels.html"><span class="doc std std-doc">Channels</span></a>) all can (and usually do) have Attributes associated with them. There
|
||||
<a class="reference internal" href="Channels.html"><span class="doc std std-doc">Channels</span></a>) can (and usually do) have Attributes associated with them. There
|
||||
are three ways to manage Attributes, all of which can be mixed.</p>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference internal" href="#using-db"><span class="std std-doc">Using the <code class="docutils literal notranslate"><span class="pre">.db</span></code> property shortcut</span></a></p></li>
|
||||
|
|
@ -90,8 +103,8 @@ are three ways to manage Attributes, all of which can be mixed.</p>
|
|||
</ul>
|
||||
<section id="using-db">
|
||||
<h3>Using .db<a class="headerlink" href="#using-db" title="Permalink to this headline">¶</a></h3>
|
||||
<p>The simplest way to get/set Attributes is to use the <code class="docutils literal notranslate"><span class="pre">.db</span></code> shortcut:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">evennia</span>
|
||||
<p>The simplest way to get/set Attributes is to use the <code class="docutils literal notranslate"><span class="pre">.db</span></code> shortcut. This allows for setting and getting Attributes that lack a <em>category</em> (having category <code class="docutils literal notranslate"><span class="pre">None</span></code>)</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">evennia</span>
|
||||
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">evennia</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"Foo"</span><span class="p">)</span>
|
||||
|
||||
|
|
@ -104,10 +117,10 @@ are three ways to manage Attributes, all of which can be mixed.</p>
|
|||
<span class="n">rose</span> <span class="o">=</span> <span class="n">evennia</span><span class="o">.</span><span class="n">search_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"rose"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># returns a list, grab 0th element</span>
|
||||
<span class="n">rose</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">has_thorns</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="c1"># retrieving </span>
|
||||
<span class="c1"># retrieving</span>
|
||||
<span class="n">val1</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">foo1</span>
|
||||
<span class="n">val2</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">foo2</span>
|
||||
<span class="n">weap</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">weapon</span>
|
||||
<span class="n">weap</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">weapon</span>
|
||||
<span class="n">myself</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">self_reference</span> <span class="c1"># retrieve reference from db, get object back</span>
|
||||
|
||||
<span class="n">is_ouch</span> <span class="o">=</span> <span class="n">rose</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">has_thorns</span>
|
||||
|
|
@ -115,8 +128,8 @@ are three ways to manage Attributes, all of which can be mixed.</p>
|
|||
<span class="c1"># this will return None, not AttributeError!</span>
|
||||
<span class="n">not_found</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">jiwjpowiwwerw</span>
|
||||
|
||||
<span class="c1"># returns all Attributes on the object </span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">all</span>
|
||||
<span class="c1"># returns all Attributes on the object</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">all</span>
|
||||
|
||||
<span class="c1"># delete an Attribute</span>
|
||||
<span class="k">del</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">foo2</span>
|
||||
|
|
@ -129,11 +142,10 @@ default <code class="docutils literal notranslate"><span class="pre">all</span><
|
|||
</section>
|
||||
<section id="using-attributes">
|
||||
<h3>Using .attributes<a class="headerlink" href="#using-attributes" title="Permalink to this headline">¶</a></h3>
|
||||
<p>If you don’t know the name of the Attribute beforehand you can also use
|
||||
the <code class="docutils literal notranslate"><span class="pre">AttributeHandler</span></code>, available as <code class="docutils literal notranslate"><span class="pre">.attributes</span></code>. With no extra keywords this is identical
|
||||
to using the <code class="docutils literal notranslate"><span class="pre">.db</span></code> shortcut (<code class="docutils literal notranslate"><span class="pre">.db</span></code> is actually using the <code class="docutils literal notranslate"><span class="pre">AttributeHandler</span></code> internally):</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">is_ouch</span> <span class="o">=</span> <span class="n">rose</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"has_thorns"</span><span class="p">)</span>
|
||||
|
||||
<p>If you want to group your Attribute in a category, or don’t know the name of the Attribute beforehand, you can make use of
|
||||
the <a class="reference internal" href="../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeHandler" title="evennia.typeclasses.attributes.AttributeHandler"><span class="xref myst py py-class">AttributeHandler</span></a>, available as <code class="docutils literal notranslate"><span class="pre">.attributes</span></code> on all typeclassed entities. With no extra keywords, this is identical to using the <code class="docutils literal notranslate"><span class="pre">.db</span></code> shortcut (<code class="docutils literal notranslate"><span class="pre">.db</span></code> is actually using the <code class="docutils literal notranslate"><span class="pre">AttributeHandler</span></code> internally):</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">is_ouch</span> <span class="o">=</span> <span class="n">rose</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"has_thorns"</span><span class="p">)</span>
|
||||
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"helmet"</span><span class="p">,</span> <span class="s2">"Knight's helmet"</span><span class="p">)</span>
|
||||
<span class="n">helmet</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"helmet"</span><span class="p">)</span>
|
||||
|
||||
|
|
@ -141,8 +153,7 @@ to using the <code class="docutils literal notranslate"><span class="pre">.db</s
|
|||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"my game log"</span><span class="p">,</span> <span class="s2">"long text about ..."</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>With the <code class="docutils literal notranslate"><span class="pre">AttributeHandler</span></code> you can also give Attributes a <code class="docutils literal notranslate"><span class="pre">category</span></code>. By using a category you can
|
||||
separate same-named Attributes on the same object which can help organization:</p>
|
||||
<p>By using a category you can separate same-named Attributes on the same object to help organization.</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># store (let's say we have gold_necklace and ringmail_armor from before)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"neck"</span><span class="p">,</span> <span class="n">gold_necklace</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"clothing"</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"neck"</span><span class="p">,</span> <span class="n">ringmail_armor</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"armor"</span><span class="p">)</span>
|
||||
|
|
@ -152,12 +163,7 @@ separate same-named Attributes on the same object which can help organization:</
|
|||
<span class="n">neck_armor</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"neck"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"armor"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If you don’t specify a category, the Attribute’s <code class="docutils literal notranslate"><span class="pre">category</span></code> will be <code class="docutils literal notranslate"><span class="pre">None</span></code>. Note that
|
||||
<code class="docutils literal notranslate"><span class="pre">None</span></code> is also considered a category of its own, so you won’t find <code class="docutils literal notranslate"><span class="pre">None</span></code>-category Attributes mixed
|
||||
with Attributes having categories.</p>
|
||||
<blockquote>
|
||||
<div><p>When using <code class="docutils literal notranslate"><span class="pre">.db</span></code>, you will always use the <code class="docutils literal notranslate"><span class="pre">None</span></code> category.</p>
|
||||
</div></blockquote>
|
||||
<p>If you don’t specify a category, the Attribute’s <code class="docutils literal notranslate"><span class="pre">category</span></code> will be <code class="docutils literal notranslate"><span class="pre">None</span></code> and can thus also be found via <code class="docutils literal notranslate"><span class="pre">.db</span></code>. <code class="docutils literal notranslate"><span class="pre">None</span></code> is considered a category of its own, so you won’t find <code class="docutils literal notranslate"><span class="pre">None</span></code>-category Attributes mixed with Attributes having categories.</p>
|
||||
<p>Here are the methods of the <code class="docutils literal notranslate"><span class="pre">AttributeHandler</span></code>. See
|
||||
the <a class="reference internal" href="../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeHandler" title="evennia.typeclasses.attributes.AttributeHandler"><span class="xref myst py py-class">AttributeHandler API</span></a> for more details.</p>
|
||||
<ul class="simple">
|
||||
|
|
@ -178,28 +184,27 @@ before performing the deletion. - <code class="docutils literal notranslate"><s
|
|||
</ul>
|
||||
<p>Examples:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">try</span><span class="p">:</span>
|
||||
<span class="c1"># raise error if Attribute foo does not exist </span>
|
||||
<span class="c1"># raise error if Attribute foo does not exist</span>
|
||||
<span class="n">val</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="c1"># ...</span>
|
||||
|
||||
|
||||
<span class="c1"># return default value if foo2 doesn't exist</span>
|
||||
<span class="n">val2</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"foo2"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"bar"</span><span class="p">])</span>
|
||||
<span class="n">val2</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"foo2"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="s2">"bar"</span><span class="p">])</span>
|
||||
|
||||
<span class="c1"># delete foo if it exists (will silently fail if unset, unless</span>
|
||||
<span class="c1"># raise_exception is set)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">"foo"</span><span class="p">)</span>
|
||||
|
||||
|
||||
<span class="c1"># view all clothes on obj</span>
|
||||
<span class="n">all_clothes</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">"clothes"</span><span class="p">)</span>
|
||||
<span class="n">all_clothes</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">"clothes"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</section>
|
||||
<section id="using-attributeproperty">
|
||||
<h3>Using AttributeProperty<a class="headerlink" href="#using-attributeproperty" title="Permalink to this headline">¶</a></h3>
|
||||
<p>There is a third way to set up an Attribute, and that is by setting up an <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code>. This
|
||||
is done on the <em>class level</em> of your typeclass and allows you to treat Attributes a bit like Django
|
||||
database Fields.</p>
|
||||
<p>The third way to set up an Attribute is to use an <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code>. This
|
||||
is done on the <em>class level</em> of your typeclass and allows you to treat Attributes a bit like Django database Fields. Unlike using <code class="docutils literal notranslate"><span class="pre">.db</span></code> and <code class="docutils literal notranslate"><span class="pre">.attributes</span></code>, an <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> can’t be created on the fly, you must assign it in the class code.</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># mygame/typeclasses/characters.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultCharacter</span>
|
||||
|
|
@ -207,126 +212,55 @@ database Fields.</p>
|
|||
|
||||
<span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
|
||||
|
||||
<span class="n">strength</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">constitution</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">agility</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">magic</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">sleepy</span> <span class="o">=</span> <span class="n">AttributeProperty</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="n">poisoned</span> <span class="o">=</span> <span class="n">AttributeProperty</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="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># ... </span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>These “Attribute-properties” will be made available to all instances of the class.</p>
|
||||
<div class="admonition important">
|
||||
<p class="admonition-title">Important</p>
|
||||
<p>If you change the <code class="docutils literal notranslate"><span class="pre">default</span></code> of an <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> (and reload), it will
|
||||
change the default for <em>all</em> instances of that class (it will not override
|
||||
explicitly changed values).</p>
|
||||
</div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">char</span> <span class="o">=</span> <span class="n">evennia</span><span class="o">.</span><span class="n">search_object</span><span class="p">(</span><span class="n">Character</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"Bob"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># returns list, get 0th element</span>
|
||||
|
||||
<span class="c1"># get defaults </span>
|
||||
<span class="n">strength</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">strength</span> <span class="c1"># will get the default value 10</span>
|
||||
|
||||
<span class="c1"># assign new values (this will create/update new Attributes)</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">strength</span> <span class="o">=</span> <span class="mi">12</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">constitution</span> <span class="o">=</span> <span class="mi">16</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">agility</span> <span class="o">=</span> <span class="mi">8</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">magic</span> <span class="o">=</span> <span class="mi">2</span>
|
||||
|
||||
<span class="c1"># you can also do arithmetic etc </span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">magic</span> <span class="o">+=</span> <span class="mi">2</span> <span class="c1"># char.magic is now 4</span>
|
||||
|
||||
<span class="c1"># check Attributes </span>
|
||||
<span class="n">strength</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">strength</span> <span class="c1"># this is now 12</span>
|
||||
<span class="n">is_sleepy</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">sleepy</span>
|
||||
<span class="n">is_poisoned</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">poisoned</span>
|
||||
|
||||
<span class="k">del</span> <span class="n">char</span><span class="o">.</span><span class="n">strength</span> <span class="c1"># wipes the Attribute</span>
|
||||
<span class="n">strength</span> <span class="o">=</span> <span class="n">char</span><span class="o">.</span><span class="n">strengh</span> <span class="c1"># back to the default (10) again</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>See the <a class="reference internal" href="../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty" title="evennia.typeclasses.attributes.AttributeProperty"><span class="xref myst py py-class">AttributeProperty</span></a> docs for more
|
||||
details on arguments.</p>
|
||||
<p>An <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> will <em>not</em> create an <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> by default. A new <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> will be created
|
||||
(or an existing one retrieved/updated) will happen differently depending on how the <code class="docutils literal notranslate"><span class="pre">autocreate</span></code>
|
||||
keyword:</p>
|
||||
<ul class="simple">
|
||||
<li><p>If <code class="docutils literal notranslate"><span class="pre">autocreate=False</span></code> (default), an <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> will be created only if the field is explicitly
|
||||
assigned a value (even if the value is the same as the default, such as <code class="docutils literal notranslate"><span class="pre">char.strength</span> <span class="pre">=</span> <span class="pre">10</span></code>).</p></li>
|
||||
<li><p>If <code class="docutils literal notranslate"><span class="pre">autocreate=True</span></code>, an <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> will be created as soon as the field is <em>accessed</em> in
|
||||
any way (So both <code class="docutils literal notranslate"><span class="pre">strength</span> <span class="pre">=</span> <span class="pre">char.strength</span></code> and <code class="docutils literal notranslate"><span class="pre">char.strength</span> <span class="pre">=</span> <span class="pre">10</span></code> will both make sure that
|
||||
an <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> exists.</p></li>
|
||||
</ul>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/typeclasses/objects.py </span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">create_object</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="n">AttributeProperty</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Object</span><span class="p">(</span><span class="n">DefaultObject</span><span class="p">):</span>
|
||||
|
||||
<span class="n">value_a</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"foo"</span><span class="p">)</span>
|
||||
<span class="n">value_b</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"bar"</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="n">obj</span> <span class="o">=</span> <span class="n">evennia</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">"Dummy"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># these will find NO Attributes! </span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">value_a</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="s2">"value_a"</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">value_b</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="s2">"value_b"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># get data from attribute-properties</span>
|
||||
<span class="n">vala</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">value_a</span> <span class="c1"># returns "foo"</span>
|
||||
<span class="n">valb</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">value_b</span> <span class="c1"># return "bar" AND creates the Attribute (autocreate)</span>
|
||||
|
||||
<span class="c1"># the autocreate property will now be found </span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">value_a</span> <span class="c1"># still not found </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="s2">"value_a"</span><span class="p">)</span> <span class="c1"># ''</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">value_b</span> <span class="c1"># now returns "bar" </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="s2">"value_b"</span><span class="p">)</span> <span class="c1"># ''</span>
|
||||
|
||||
<span class="c1"># assign new values </span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">value_a</span> <span class="o">=</span> <span class="mi">10</span> <span class="c1"># will now create a new Attribute </span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">value_b</span> <span class="o">=</span> <span class="mi">12</span> <span class="c1"># will update the existing Attribute </span>
|
||||
|
||||
<span class="c1"># both are now found as Attributes </span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">value_a</span> <span class="c1"># now returns 10</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="s2">"value_a"</span><span class="p">)</span> <span class="c1"># ''</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">value_b</span> <span class="c1"># now returns 12</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="s2">"value_b"</span><span class="p">)</span> <span class="c1"># ''</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If you always access your Attributes via the <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> this does not matter that much
|
||||
(it’s also a bit of an optimization to not create an actual database <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> unless the value changed).
|
||||
But until an <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> has been created, <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> fields will <em>not</em> show up with the
|
||||
<code class="docutils literal notranslate"><span class="pre">examine</span></code> command or by using the <code class="docutils literal notranslate"><span class="pre">.db</span></code> or <code class="docutils literal notranslate"><span class="pre">.attributes</span></code> handlers - so this is a bit inconsistent.
|
||||
If this is important, you need to ‘initialize’ them by accessing them at least once … something
|
||||
like this:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># ... </span>
|
||||
<span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
|
||||
|
||||
<span class="n">strength</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">agility</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="n">strength</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">10</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">)</span>
|
||||
<span class="n">constitution</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">11</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">)</span>
|
||||
<span class="n">agility</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">12</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">)</span>
|
||||
<span class="n">magic</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="mi">13</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s1">'stat'</span><span class="p">)</span>
|
||||
|
||||
<span class="n">sleepy</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
<span class="n">poisoned</span> <span class="o">=</span> <span class="n">AttributeProperty</span><span class="p">(</span><span class="kc">False</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">at_object_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="c1"># initializing </span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">strength</span> <span class="c1"># by accessing it, the Attribute is auto-created</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">agility</span> <span class="c1"># ''</span>
|
||||
<span class="c1"># ...</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition important">
|
||||
<p class="admonition-title">Important</p>
|
||||
<p>If you created your <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> with a <code class="docutils literal notranslate"><span class="pre">category</span></code>, you <em>must</em> specify the
|
||||
category in <code class="docutils literal notranslate"><span class="pre">.attributes.get()</span></code> if you want to find it this way. Remember that
|
||||
<code class="docutils literal notranslate"><span class="pre">.db</span></code> always uses a <code class="docutils literal notranslate"><span class="pre">category</span></code> of <code class="docutils literal notranslate"><span class="pre">None</span></code>.</p>
|
||||
<p>When a new instance of the class is created, new <code class="docutils literal notranslate"><span class="pre">Attributes</span></code> will be created with the value and category given.</p>
|
||||
<p>With <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code>’s set up like this, one can access the underlying <code class="docutils literal notranslate"><span class="pre">Attribute</span></code> like a regular property on the created object:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">char</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">Character</span><span class="p">)</span>
|
||||
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">strength</span> <span class="c1"># returns 10</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">agility</span> <span class="o">=</span> <span class="mi">15</span> <span class="c1"># assign a new value (category remains 'stat')</span>
|
||||
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">magic</span> <span class="c1"># returns None (wrong category)</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"agility"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"stat"</span><span class="p">)</span> <span class="c1"># returns 15</span>
|
||||
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">sleepy</span> <span class="c1"># returns None because autocreate=False (see below)</span>
|
||||
|
||||
</pre></div>
|
||||
</div>
|
||||
<div class="admonition warning">
|
||||
<p class="admonition-title">Warning</p>
|
||||
<p>Be careful to not assign AttributeProperty’s to names of properties and methods already existing on the class, like ‘key’ or ‘at_object_creation’. That could lead to very confusing errors.</p>
|
||||
</div>
|
||||
<p>The <code class="docutils literal notranslate"><span class="pre">autocreate=False</span></code> (default is <code class="docutils literal notranslate"><span class="pre">True</span></code>) used for <code class="docutils literal notranslate"><span class="pre">sleepy</span></code> and <code class="docutils literal notranslate"><span class="pre">poisoned</span></code> is worth a closer explanation. When <code class="docutils literal notranslate"><span class="pre">False</span></code>, <em>no</em> Attribute will be auto-created for these AttributProperties unless they are <em>explicitly</em> set.
|
||||
The advantage of not creating an Attribute is that the default value given to <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> is returned with no database access unless you change it. This also means that if you want to change the default later, all entities previously create will inherit the new default.
|
||||
The drawback is that without a database precense you can’t find the Attribute via <code class="docutils literal notranslate"><span class="pre">.db</span></code> and <code class="docutils literal notranslate"><span class="pre">.attributes.get</span></code> (or by querying for it in other ways in the database):</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">char</span><span class="o">.</span><span class="n">sleepy</span> <span class="c1"># returns False, no db access</span>
|
||||
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">sleepy</span> <span class="c1"># returns None - no Attribute exists</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sleepy"</span><span class="p">)</span> <span class="c1"># returns None too</span>
|
||||
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">sleepy</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># now an Attribute is created</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">sleepy</span> <span class="c1"># now returns True!</span>
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"sleepy"</span><span class="p">)</span> <span class="c1"># now returns True</span>
|
||||
|
||||
<span class="n">char</span><span class="o">.</span><span class="n">sleepy</span> <span class="c1"># now returns True, involves db access</span>
|
||||
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You can e.g. <code class="docutils literal notranslate"><span class="pre">del</span> <span class="pre">char.strength</span></code> to set the value back to the default (the value defined
|
||||
in the <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code>).</p>
|
||||
<p>See the <a class="reference internal" href="../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty" title="evennia.typeclasses.attributes.AttributeProperty"><span class="xref myst py py-class">AttributeProperty API</span></a> for more details on how to create it with special options, like giving access-restrictions.</p>
|
||||
</section>
|
||||
</section>
|
||||
<section id="managing-attributes-in-game">
|
||||
|
|
@ -342,7 +276,7 @@ problem.</p>
|
|||
</pre></div>
|
||||
</div>
|
||||
<p>To view, do</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>set myobj/foo
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>set myobj/foo
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>or see them together with all object-info with</p>
|
||||
|
|
@ -424,16 +358,16 @@ values into a string representation before storing it to the database. This is d
|
|||
<p>With a single object, we mean anything that is <em>not iterable</em>, like numbers, strings or custom class
|
||||
instances without the <code class="docutils literal notranslate"><span class="pre">__iter__</span></code> method.</p>
|
||||
<ul class="simple">
|
||||
<li><p>You can generally store any non-iterable Python entity that can be pickled.</p></li>
|
||||
<li><p>You can generally store any non-iterable Python entity that can be <em>pickled</em>.</p></li>
|
||||
<li><p>Single database objects/typeclasses can be stored, despite them normally not being possible
|
||||
to pickle. Evennia wil convert them to an internal representation using their classname,
|
||||
to pickle. Evennia will convert them to an internal representation using theihr classname,
|
||||
database-id and creation-date with a microsecond precision. When retrieving, the object
|
||||
instance will be re-fetched from the database using this information.</p></li>
|
||||
<li><p>To convert the database object, Evennia must know it’s there. If you <em>hide</em> a database object
|
||||
inside a non-iterable class, you will run into errors - this is not supported!</p></li>
|
||||
<li><p>If you ‘hide’ a db-obj as a property on a custom class, Evennia will not be
|
||||
able to find it to serialize it. For that you need to help it out (see below).</p></li>
|
||||
</ul>
|
||||
<div class="literal-block-wrapper docutils container" id="id3">
|
||||
<div class="code-block-caption"><span class="caption-text">Valid assignments</span><a class="headerlink" href="#id3" title="Permalink to this code">¶</a></div>
|
||||
<div class="literal-block-wrapper docutils container" id="id5">
|
||||
<div class="code-block-caption"><span class="caption-text">Valid assignments</span><a class="headerlink" href="#id5" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># Examples of valid single-value attribute data:</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">test1</span> <span class="o">=</span> <span class="mi">23</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">test1</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
|
|
@ -442,15 +376,51 @@ inside a non-iterable class, you will run into errors - this is not supported!</
|
|||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literal-block-wrapper docutils container" id="id4">
|
||||
<div class="code-block-caption"><span class="caption-text">Invalid, ‘hidden’ dbobject</span><a class="headerlink" href="#id4" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># example of an invalid, "hidden" dbobject</span>
|
||||
<p>As mentioned, Evennia will not be able to automatically serialize db-objects
|
||||
‘hidden’ in arbitrary properties on an object. This will lead to an error
|
||||
when saving the Attribute.</p>
|
||||
<div class="literal-block-wrapper docutils container" id="id6">
|
||||
<div class="code-block-caption"><span class="caption-text">Invalid, ‘hidden’ dbobject</span><a class="headerlink" href="#id6" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="c1"># example of storing an invalid, "hidden" dbobject in Attribute</span>
|
||||
<span class="k">class</span> <span class="nc">Container</span><span class="p">:</span>
|
||||
<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">mydbobj</span><span class="p">):</span>
|
||||
<span class="c1"># no way for Evennia to know this is a database object!</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mydbobj</span> <span class="o">=</span> <span class="n">mydbobj</span>
|
||||
|
||||
<span class="c1"># let's assume myobj is a db-object</span>
|
||||
<span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">myobj</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">invalid</span> <span class="o">=</span> <span class="n">container</span> <span class="c1"># will cause error!</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mydata</span> <span class="o">=</span> <span class="n">container</span> <span class="c1"># will raise error!</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>By adding two methods <code class="docutils literal notranslate"><span class="pre">__serialize_dbobjs__</span></code> and <code class="docutils literal notranslate"><span class="pre">__deserialize_dbobjs__</span></code> to the
|
||||
object you want to save, you can pre-serialize and post-deserialize all ‘hidden’
|
||||
objects before Evennia’s main serializer gets to work. Inside these methods, use Evennia’s
|
||||
<a class="reference internal" href="../api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.dbserialize" title="evennia.utils.dbserialize.dbserialize"><span class="xref myst py py-func">evennia.utils.dbserialize.dbserialize</span></a> and
|
||||
<a class="reference internal" href="../api/evennia.utils.dbserialize.html#evennia.utils.dbserialize.dbunserialize" title="evennia.utils.dbserialize.dbunserialize"><span class="xref myst py py-func">dbunserialize</span></a> functions to safely
|
||||
serialize the db-objects you want to store.</p>
|
||||
<div class="literal-block-wrapper docutils container" id="id7">
|
||||
<div class="code-block-caption"><span class="caption-text">Fixing an invalid ‘hidden’ dbobj for storing in Attribute</span><a class="headerlink" href="#id7" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">dbserialize</span> <span class="c1"># important</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Container</span><span class="p">:</span>
|
||||
<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">mydbobj</span><span class="p">):</span>
|
||||
<span class="c1"># A 'hidden' db-object</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mydbobj</span> <span class="o">=</span> <span class="n">mydbobj</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__serialize_dbobjs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""This is called before serialization and allows</span>
|
||||
<span class="sd"> us to custom-handle those 'hidden' dbobjs"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mydbobj</span> <span class="o">=</span> <span class="n">dbserialize</span><span class="o">.</span><span class="n">dbserialize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mydbobj</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__deserialize_dbobjs__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""This is called after deserialization and allows you to</span>
|
||||
<span class="sd"> restore the 'hidden' dbobjs you serialized before"""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">mydbobj</span> <span class="o">=</span> <span class="n">dbserialize</span><span class="o">.</span><span class="n">dbunserialize</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">mydbobj</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># let's assume myobj is a db-object</span>
|
||||
<span class="n">container</span> <span class="o">=</span> <span class="n">Container</span><span class="p">(</span><span class="n">myobj</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mydata</span> <span class="o">=</span> <span class="n">container</span> <span class="c1"># will now work fine!</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
|
|
@ -499,6 +469,10 @@ process but for efficiency you may want to avoid too deeply nested structures if
|
|||
<span class="c1"># test8 is now [4,2,{"test":5}]</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Note that if make some advanced iterable object, and store an db-object on it in
|
||||
a way such that it is <em>not</em> returned by iterating over it, you have created a
|
||||
‘hidden’ db-object. See <a class="reference internal" href="#storing-single-objects"><span class="std std-doc">the previous section</span></a> for how
|
||||
to tell Evennia how to serialize such hidden objects safely.</p>
|
||||
</section>
|
||||
<section id="retrieving-mutable-objects">
|
||||
<h3>Retrieving Mutable objects<a class="headerlink" href="#retrieving-mutable-objects" title="Permalink to this headline">¶</a></h3>
|
||||
|
|
@ -525,14 +499,14 @@ variable, e.g. <code class="docutils literal notranslate"><span class="pre">myli
|
|||
of the variable. If you update the snapshot, it will save to the database, but this change <em>will not propagate to
|
||||
any other snapshots you may have done previously</em>.</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">]</span>
|
||||
<span class="n">mylist1</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span>
|
||||
<span class="n">mylist2</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span>
|
||||
<span class="n">mylist1</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mi">5</span>
|
||||
<span class="n">mylist1</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span>
|
||||
<span class="n">mylist2</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span>
|
||||
<span class="n">mylist1</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">=</span> <span class="mi">5</span>
|
||||
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">mylist1</span><span class="p">)</span> <span class="c1"># this is now [1, 2, 3, 5]</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span><span class="p">)</span> <span class="c1"># also updated to [1, 2, 3, 5] </span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span><span class="p">)</span> <span class="c1"># also updated to [1, 2, 3, 5]</span>
|
||||
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">mylist2</span><span class="p">)</span> <span class="c1"># still [1, 2, 3, 4] ! </span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="n">mylist2</span><span class="p">)</span> <span class="c1"># still [1, 2, 3, 4] !</span>
|
||||
|
||||
</pre></div>
|
||||
</div>
|
||||
|
|
@ -546,7 +520,7 @@ back the results as needed.</p>
|
|||
<p>You can also choose to “disconnect” the Attribute entirely from the
|
||||
database with the help of the <code class="docutils literal notranslate"><span class="pre">.deserialize()</span></code> method:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span> <span class="o">=</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">,</span> <span class="mi">4</span><span class="p">,</span> <span class="p">{</span><span class="mi">1</span><span class="p">:</span> <span class="mi">2</span><span class="p">}]</span>
|
||||
<span class="n">mylist</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span><span class="o">.</span><span class="n">deserialize</span><span class="p">()</span>
|
||||
<span class="n">mylist</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">mylist</span><span class="o">.</span><span class="n">deserialize</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The result of this operation will be a structure only consisting of normal Python mutables (<code class="docutils literal notranslate"><span class="pre">list</span></code>
|
||||
|
|
|
|||
|
|
@ -57,15 +57,16 @@ the return from the function.</p>
|
|||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span> <span class="kn">import</span> <span class="n">FuncParser</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_power_callable</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""This will be callable as $square(number, power=<num>) in string"""</span>
|
||||
<span class="sd">"""This will be callable as $pow(number, power=<num>) in string"""</span>
|
||||
<span class="nb">pow</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">kwargs</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s1">'power'</span><span class="p">,</span> <span class="mi">2</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="nb">float</span><span class="p">(</span><span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span> <span class="o">**</span> <span class="nb">pow</span>
|
||||
|
||||
<span class="c1"># create a parser and tell it that '$pow' means using _power_callable</span>
|
||||
<span class="n">parser</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">({</span><span class="s2">"pow"</span><span class="p">:</span> <span class="n">_power_callable</span><span class="p">})</span>
|
||||
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Next, just pass a string into the parser, optionally containing <code class="docutils literal notranslate"><span class="pre">$func(...)</span></code> markers:</p>
|
||||
<p>Next, just pass a string into the parser, containing <code class="docutils literal notranslate"><span class="pre">$func(...)</span></code> markers:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"We have that 4 x 4 x 4 is $pow(4, power=3)."</span><span class="p">)</span>
|
||||
<span class="s2">"We have that 4 x 4 x 4 is 64."</span>
|
||||
</pre></div>
|
||||
|
|
@ -111,7 +112,7 @@ Evennia expects you to do in a proper text editor, outside of the game, not from
|
|||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">funcparser</span>
|
||||
|
||||
<span class="n">parser</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span><span class="n">callables</span><span class="p">,</span> <span class="o">**</span><span class="n">default_kwargs</span><span class="p">)</span>
|
||||
<span class="n">parsed_string</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parser</span><span class="p">(</span><span class="n">input_string</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">parsed_string</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="n">input_string</span><span class="p">,</span> <span class="n">raise_errors</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">escape</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">strip</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">return_str</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">reserved_kwargs</span><span class="p">)</span>
|
||||
|
||||
|
|
@ -131,8 +132,12 @@ If no such variable is defined, <em>every</em> top-level function in the module
|
|||
an underscore <code class="docutils literal notranslate"><span class="pre">_</span></code>) will be considered a suitable callable. The name of the function will be the <code class="docutils literal notranslate"><span class="pre">$funcname</span></code>
|
||||
by which it can be called.</p></li>
|
||||
<li><p>A <code class="docutils literal notranslate"><span class="pre">list</span></code> of modules/paths. This allows you to pull in modules from many sources for your parsing.</p></li>
|
||||
<li><p>The <code class="docutils literal notranslate"><span class="pre">**default</span></code> kwargs are optional kwargs that will be passed to <em>all</em>
|
||||
callables every time this parser is used - unless the user overrides it explicitly in
|
||||
their call. This is great for providing sensible standards that the user can
|
||||
tweak as needed.</p></li>
|
||||
</ul>
|
||||
<p>The other arguments to the parser:</p>
|
||||
<p><code class="docutils literal notranslate"><span class="pre">FuncParser.parse</span></code> takes further arguments, and can vary for every string parsed.</p>
|
||||
<ul class="simple">
|
||||
<li><p><code class="docutils literal notranslate"><span class="pre">raise_errors</span></code> - By default, any errors from a callable will be quietly ignored and the result
|
||||
will be that the failing function call will show verbatim. If <code class="docutils literal notranslate"><span class="pre">raise_errors</span></code> is set,
|
||||
|
|
@ -143,12 +148,14 @@ this properly.</p></li>
|
|||
<li><p><code class="docutils literal notranslate"><span class="pre">return_str</span></code> - When <code class="docutils literal notranslate"><span class="pre">True</span></code> (default), <code class="docutils literal notranslate"><span class="pre">parser</span></code> always returns a string. If <code class="docutils literal notranslate"><span class="pre">False</span></code>, it may return
|
||||
the return value of a single function call in the string. This is the same as using the <code class="docutils literal notranslate"><span class="pre">.parse_to_any</span></code>
|
||||
method.</p></li>
|
||||
<li><p>The <code class="docutils literal notranslate"><span class="pre">**default/reserved_keywords</span></code> are optional and allow you to pass custom data into <em>every</em> function
|
||||
call. This is great for including things like the current session or config options. Defaults can be
|
||||
replaced if the user gives the same-named kwarg in the string’s function call. Reserved kwargs are always passed,
|
||||
ignoring defaults or what the user passed. In addition, the <code class="docutils literal notranslate"><span class="pre">funcparser</span></code> and <code class="docutils literal notranslate"><span class="pre">raise_errors</span></code>
|
||||
reserved kwargs are always passed - the first is a back-reference to the <code class="docutils literal notranslate"><span class="pre">FuncParser</span></code> instance and the second
|
||||
is the <code class="docutils literal notranslate"><span class="pre">raise_errors</span></code> boolean passed into <code class="docutils literal notranslate"><span class="pre">FuncParser.parse</span></code>.</p></li>
|
||||
<li><p>The <code class="docutils literal notranslate"><span class="pre">**reserved_keywords</span></code> are <em>always</em> passed to every callable in the string.
|
||||
They override any <code class="docutils literal notranslate"><span class="pre">**defaults</span></code> given when instantiating the parser and cannot
|
||||
be overridden by the user - if they enter the same kwarg it will be ignored.
|
||||
This is great for providing the current session, settings etc.</p></li>
|
||||
<li><p>The <code class="docutils literal notranslate"><span class="pre">funcparser</span></code> and <code class="docutils literal notranslate"><span class="pre">raise_errors</span></code>
|
||||
are always added as reserved keywords - the first is a
|
||||
back-reference to the <code class="docutils literal notranslate"><span class="pre">FuncParser</span></code> instance and the second
|
||||
is the <code class="docutils literal notranslate"><span class="pre">raise_errors</span></code> boolean given to <code class="docutils literal notranslate"><span class="pre">FuncParser.parse</span></code>.</p></li>
|
||||
</ul>
|
||||
<p>Here’s an example of using the default/reserved keywords:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="k">def</span> <span class="nf">_test</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>
|
||||
|
|
@ -193,7 +200,8 @@ of the string and may or may not raise the exception depending on what you set <
|
|||
created the parser.</p>
|
||||
<p>However, if you <em>nest</em> functions, the return of the innermost function may be something other than
|
||||
a string. Let’s introduce the <code class="docutils literal notranslate"><span class="pre">$eval</span></code> function, which evaluates simple expressions using
|
||||
Python’s <code class="docutils literal notranslate"><span class="pre">literal_eval</span></code> and/or <code class="docutils literal notranslate"><span class="pre">simple_eval</span></code>.</p>
|
||||
Python’s <code class="docutils literal notranslate"><span class="pre">literal_eval</span></code> and/or <code class="docutils literal notranslate"><span class="pre">simple_eval</span></code>. It returns whatever data type it
|
||||
evaluates to.</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>"There's a $toint($eval(10 * 2.2))% chance of survival."
|
||||
</pre></div>
|
||||
</div>
|
||||
|
|
@ -210,21 +218,67 @@ will be a string:</p>
|
|||
<span class="s2">"There's a 22</span><span class="si">% c</span><span class="s2">hance of survival."</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>However, if you use the <code class="docutils literal notranslate"><span class="pre">parse_to_any</span></code> (or <code class="docutils literal notranslate"><span class="pre">parse(...,</span> <span class="pre">return_str=True)</span></code>) and <em>don’t add any extra string around the outermost function call</em>,
|
||||
<p>However, if you use the <code class="docutils literal notranslate"><span class="pre">parse_to_any</span></code> (or <code class="docutils literal notranslate"><span class="pre">parse(...,</span> <span class="pre">return_str=False)</span></code>) and
|
||||
<em>don’t add any extra string around the outermost function call</em>,
|
||||
you’ll get the return type of the outermost callable back:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">parser</span><span class="o">.</span><span class="n">parse_to_any</span><span class="p">(</span><span class="s2">"$toint($eval(10 * 2.2)%"</span><span class="p">)</span>
|
||||
<span class="s2">"22%"</span>
|
||||
<span class="n">parser</span><span class="o">.</span><span class="n">parse_to_any</span><span class="p">(</span><span class="s2">"$toint($eval(10 * 2.2)"</span><span class="p">)</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">parser</span><span class="o">.</span><span class="n">parse_to_any</span><span class="p">(</span><span class="s2">"$toint($eval(10 * 2.2)"</span><span class="p">)</span>
|
||||
<span class="mi">22</span>
|
||||
<span class="n">parser</span><span class="o">.</span><span class="n">parse_to_any</span><span class="p">(</span><span class="s2">"the number $toint($eval(10 * 2.2)."</span><span class="p">)</span>
|
||||
<span class="s2">"the number 22"</span>
|
||||
<span class="n">parser</span><span class="o">.</span><span class="n">parse_to_any</span><span class="p">(</span><span class="s2">"$toint($eval(10 * 2.2)%"</span><span class="p">)</span>
|
||||
<span class="s2">"22%"</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<section id="escaping-special-character">
|
||||
<h3>Escaping special character<a class="headerlink" href="#escaping-special-character" title="Permalink to this headline">¶</a></h3>
|
||||
<p>When entering funcparser callables in strings, it looks like a regular
|
||||
function call inside a string:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="s2">"This is a $myfunc(arg1, arg2, kwarg=foo)."</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Commas (<code class="docutils literal notranslate"><span class="pre">,</span></code>) and equal-signs (<code class="docutils literal notranslate"><span class="pre">=</span></code>) are considered to separate the arguments and
|
||||
kwargs. In the same way, the right parenthesis (<code class="docutils literal notranslate"><span class="pre">)</span></code>) closes the argument list.
|
||||
Sometimes you want to include commas in the argument without it breaking the
|
||||
argument list.</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="s2">"There is a $format(beautiful meadow, with dandelions) to the west."</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You can escape in various ways.</p>
|
||||
<ul>
|
||||
<li><p>Prepending with the escape character <code class="docutils literal notranslate"><span class="pre">\</span></code></p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> ```python
|
||||
"There is a $format(beautiful meadow\, with dandelions) to the west."
|
||||
```
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>Wrapping your strings in quotes. This works like Python, and you can nest
|
||||
double and single quotes inside each other if so needed. The result will
|
||||
be a verbatim string that contains everything but the outermost quotes.</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> ```python
|
||||
"There is a $format('beautiful meadow, with dandelions') to the west."
|
||||
```
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
<li><p>If you want verbatim quotes in your string, you can escape them too.</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> ```python
|
||||
"There is a $format('beautiful meadow, with \'dandelions\'') to the west."
|
||||
```
|
||||
</pre></div>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="safe-convertion-of-inputs">
|
||||
<h3>Safe convertion of inputs<a class="headerlink" href="#safe-convertion-of-inputs" title="Permalink to this headline">¶</a></h3>
|
||||
<p>Since you don’t know in which order users may use your callables, they should always check the types
|
||||
of its inputs and convert to the type the callable needs. Note also that when converting from strings,
|
||||
there are limits what inputs you can support. This is because FunctionParser strings are often used by
|
||||
non-developer players/builders and some things (such as complex classes/callables etc) are just not
|
||||
safe/possible to convert from string representation.</p>
|
||||
<p>Since you don’t know in which order users may use your callables, they should
|
||||
always check the types of its inputs and convert to the type the callable needs.
|
||||
Note also that when converting from strings, there are limits what inputs you
|
||||
can support. This is because FunctionParser strings can be used by
|
||||
non-developer players/builders and some things (such as complex
|
||||
classes/callables etc) are just not safe/possible to convert from string
|
||||
representation.</p>
|
||||
<p>In <code class="docutils literal notranslate"><span class="pre">evennia.utils.utils</span></code> is a helper called
|
||||
<a class="reference internal" href="../api/evennia.utils.utils.html#evennia.utils.utils.safe_convert_to_types" title="evennia.utils.utils.safe_convert_to_types"><span class="xref myst py py-func">safe_convert_to_types</span></a>. This function
|
||||
automates the conversion of simple data types in a safe way:</p>
|
||||
|
|
@ -232,26 +286,28 @@ automates the conversion of simple data types in a safe way:</p>
|
|||
|
||||
<span class="k">def</span> <span class="nf">_process_callable</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A callable with a lot of custom options</span>
|
||||
|
||||
<span class="sd"> $process(expression, local, extra=34, extra2=foo)</span>
|
||||
<span class="sd"> $process(expression, local, extra1=34, extra2=foo)</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">safe_convert_to_type</span><span class="p">(</span>
|
||||
<span class="p">((</span><span class="s1">'py'</span><span class="p">,</span> <span class="s1">'py'</span><span class="p">),</span> <span class="p">{</span><span class="s1">'extra1'</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="s1">'extra2'</span><span class="p">:</span> <span class="nb">str</span><span class="p">}),</span>
|
||||
<span class="p">((</span><span class="s1">'py'</span><span class="p">,</span> <span class="nb">str</span><span class="p">),</span> <span class="p">{</span><span class="s1">'extra1'</span><span class="p">:</span> <span class="nb">int</span><span class="p">,</span> <span class="s1">'extra2'</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="c1"># args/kwargs should be correct types now</span>
|
||||
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>In other words, in the callable <code class="docutils literal notranslate"><span class="pre">$process(expression,</span> <span class="pre">local,</span> <span class="pre">extra1=..,</span> <span class="pre">extra2=...)</span></code>, the first argument will be handled by the ‘py’ converter
|
||||
(described below), the second will passed through regular Python <code class="docutils literal notranslate"><span class="pre">str</span></code>,
|
||||
kwargs will be handled by <code class="docutils literal notranslate"><span class="pre">int</span></code> and <code class="docutils literal notranslate"><span class="pre">str</span></code> respectively. You can supply
|
||||
your own converter function as long as it takes one argument and returns
|
||||
the converted result.</p>
|
||||
<p>In other words,</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span> <span class="o">=</span> <span class="n">safe_convert_to_type</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">tuple_of_arg_converters</span><span class="p">,</span> <span class="n">dict_of_kwarg_converters</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>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Each converter should be a callable taking one argument - this will be the arg/kwarg-value to convert. The
|
||||
special converter <code class="docutils literal notranslate"><span class="pre">"py"</span></code> will try to convert a string argument to a Python structure with the help of the
|
||||
<p>The special converter <code class="docutils literal notranslate"><span class="pre">"py"</span></code> will try to convert a string argument to a Python structure with the help of the
|
||||
following tools (which you may also find useful to experiment with on your own):</p>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://docs.python.org/3.8/library/ast.html#ast.literal_eval">ast.literal_eval</a> is an in-built Python
|
||||
|
|
@ -439,6 +495,7 @@ all the defaults (like <code class="docutils literal notranslate"><span class="p
|
|||
<li><a class="reference internal" href="#uses-in-default-evennia">Uses in default Evennia</a></li>
|
||||
<li><a class="reference internal" href="#using-the-funcparser">Using the FuncParser</a></li>
|
||||
<li><a class="reference internal" href="#defining-custom-callables">Defining custom callables</a><ul>
|
||||
<li><a class="reference internal" href="#escaping-special-character">Escaping special character</a></li>
|
||||
<li><a class="reference internal" href="#safe-convertion-of-inputs">Safe convertion of inputs</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
|
|
|
|||
|
|
@ -62,11 +62,10 @@ hierarchies. It is set by the <code class="docutils literal notranslate"><span c
|
|||
<code class="docutils literal notranslate"><span class="pre">settings.PERMISSION_ACCOUNT_DEFAULT</span></code>.</p>
|
||||
<section id="managing-permissions">
|
||||
<h2>Managing Permissions<a class="headerlink" href="#managing-permissions" title="Permalink to this headline">¶</a></h2>
|
||||
<p>In-game, you use the <code class="docutils literal notranslate"><span class="pre">perm</span></code> command to add and remove permissions</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span> perm/account Tommy = Builders
|
||||
perm/account/del Tommy = Builders
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>In-game, you use the <code class="docutils literal notranslate"><span class="pre">perm</span></code> command to add and remove permissions
|
||||
j
|
||||
perm/account Tommy = Builders
|
||||
perm/account/del Tommy = Builders</p>
|
||||
<p>Note the use of the <code class="docutils literal notranslate"><span class="pre">/account</span></code> switch. It means you assign the permission to the
|
||||
<a class="reference internal" href="Accounts.html"><span class="doc std std-doc">Accounts</span></a> Tommy instead of any <a class="reference internal" href="Objects.html"><span class="doc std std-doc">Character</span></a> that also
|
||||
happens to be named “Tommy”.</p>
|
||||
|
|
|
|||
|
|
@ -49,18 +49,33 @@
|
|||
|
||||
<section class="tex2jax_ignore mathjax_ignore" id="tags">
|
||||
<h1>Tags<a class="headerlink" href="#tags" title="Permalink to this headline">¶</a></h1>
|
||||
<p>A common task of a game designer is to organize and find groups of objects and do operations on
|
||||
them. A classic example is to have a weather script affect all “outside” rooms. Another would be for
|
||||
a player casting a magic spell that affects every location “in the dungeon”, but not those
|
||||
“outside”. Another would be to quickly find everyone joined with a particular guild or everyone
|
||||
currently dead.</p>
|
||||
<p><em>Tags</em> are short text labels that you attach to objects so as to easily be able to retrieve and
|
||||
group them. An Evennia entity can be tagged with any number of Tags. On the database side, Tag
|
||||
entities are <em>shared</em> between all objects with that tag. This makes them very efficient but also
|
||||
fundamentally different from <a class="reference internal" href="Attributes.html"><span class="doc std std-doc">Attributes</span></a>, each of which always belongs to one <em>single</em>
|
||||
object.</p>
|
||||
<p>In Evennia, Tags are technically also used to implement <code class="docutils literal notranslate"><span class="pre">Aliases</span></code> (alternative names for objects)
|
||||
and <code class="docutils literal notranslate"><span class="pre">Permissions</span></code> (simple strings for <a class="reference internal" href="Locks.html"><span class="doc std std-doc">Locks</span></a> to check for).</p>
|
||||
<div class="literal-block-wrapper docutils container" id="id1">
|
||||
<div class="code-block-caption"><span class="caption-text">In game</span><a class="headerlink" href="#id1" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="o">></span> <span class="n">tag</span> <span class="n">obj</span> <span class="o">=</span> <span class="n">tagname</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literal-block-wrapper docutils container" id="id2">
|
||||
<div class="code-block-caption"><span class="caption-text">In code, using .tags (TagHandler)</span><a class="headerlink" href="#id2" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"mytag"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"foo"</span><span class="p">)</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"mytag"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"foo"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="literal-block-wrapper docutils container" id="id3">
|
||||
<div class="code-block-caption"><span class="caption-text">In code, using TagProperty (auto-assign tag to all instances of the class)</span><a class="headerlink" href="#id3" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultObject</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">TagProperty</span>
|
||||
<span class="k">class</span> <span class="nc">Sword</span><span class="p">(</span><span class="n">DefaultObject</span><span class="p">):</span>
|
||||
<span class="n">can_be_wielded</span> <span class="o">=</span> <span class="n">TagProperty</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s1">'combat'</span><span class="p">)</span>
|
||||
<span class="n">has_sharp_edge</span> <span class="o">=</span> <span class="n">TagProperty</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s1">'combat'</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
</div>
|
||||
<p><em>Tags</em> are short text lables one can ‘hang’ on objects in order to organize, group and quickly find out their properties. An Evennia entity can be tagged by any number of tags. They are more efficient than <a class="reference internal" href="Attributes.html"><span class="doc std std-doc">Attributes</span></a> since on the database-side, Tags are <em>shared</em> between all objects with that particular tag. A tag does not carry a value in itself; it either sits on the entity</p>
|
||||
<p>Above, the tags inform us that the <code class="docutils literal notranslate"><span class="pre">Sword</span></code> is both sharp and can be wielded. If that’s all they do, they could just be a normal Python flag. When tags become important is if there are a lot of objects with different combinations of tags. Maybe you have a magical spell that dulls <em>all</em> sharp-edged objects in the castle - whether sword, dagger, spear or kitchen knife! You can then just grab all objects with the <code class="docutils literal notranslate"><span class="pre">has_sharp_edge</span></code> tag.
|
||||
Another example would be a weather script affecting all rooms tagged as <code class="docutils literal notranslate"><span class="pre">outdoors</span></code> or finding all characters tagged with <code class="docutils literal notranslate"><span class="pre">belongs_to_fighter_guild</span></code>.</p>
|
||||
<p>In Evennia, Tags are technically also used to implement <code class="docutils literal notranslate"><span class="pre">Aliases</span></code> (alternative names for objects) and <code class="docutils literal notranslate"><span class="pre">Permissions</span></code> (simple strings for <a class="reference internal" href="Locks.html"><span class="doc std std-doc">Locks</span></a> to check for).</p>
|
||||
<section id="properties-of-tags-and-aliases-and-permissions">
|
||||
<h2>Properties of Tags (and Aliases and Permissions)<a class="headerlink" href="#properties-of-tags-and-aliases-and-permissions" title="Permalink to this headline">¶</a></h2>
|
||||
<p>Tags are <em>unique</em>. This means that there is only ever one Tag object with a given key and category.</p>
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ updated after May 2021 will be missing some translations.</p>
|
|||
</tr>
|
||||
<tr class="row-odd"><td><p>fr</p></td>
|
||||
<td><p>French</p></td>
|
||||
<td><p>Nov 2018</p></td>
|
||||
<td><p>Mar 2022</p></td>
|
||||
</tr>
|
||||
<tr class="row-even"><td><p>it</p></td>
|
||||
<td><p>Italian</p></td>
|
||||
|
|
|
|||
|
|
@ -92,7 +92,7 @@ import and inherit the ComponentHolderMixin, similar to this</p>
|
|||
<p>Components may define DBFields or NDBFields at the class level.
|
||||
DBField will store its values in the host’s DB with a prefixed key.
|
||||
NDBField will store its values in the host’s NDB and will not persist.
|
||||
The key used will be ‘component_name__field_name’.
|
||||
The key used will be ‘component_name::field_name’.
|
||||
They use AttributeProperty under the hood.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.contrib.base_systems.components</span> <span class="kn">import</span> <span class="n">Component</span><span class="p">,</span> <span class="n">DBField</span>
|
||||
|
|
@ -101,7 +101,24 @@ They use AttributeProperty under the hood.</p>
|
|||
<span class="n">health</span> <span class="o">=</span> <span class="n">DBField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Note that default is optional and will default to None</p>
|
||||
<p>Note that default is optional and will default to None.</p>
|
||||
<p>Adding a component to a host will also a similarly named tag with ‘components’ as category.
|
||||
A Component named health will appear as key=”health, category=“components”.
|
||||
This allows you to retrieve objects with specific components by searching with the tag.</p>
|
||||
<p>It is also possible to add Component Tags the same way, using TagField.
|
||||
TagField accepts a default value and can be used to store a single or multiple tags.
|
||||
Default values are automatically added when the component is added.
|
||||
Component Tags are cleared from the host if the component is removed.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.contrib.base_systems.components</span> <span class="kn">import</span> <span class="n">Component</span><span class="p">,</span> <span class="n">TagField</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Health</span><span class="p">(</span><span class="n">Component</span><span class="p">):</span>
|
||||
<span class="n">resistances</span> <span class="o">=</span> <span class="n">TagField</span><span class="p">()</span>
|
||||
<span class="n">vulnerability</span> <span class="o">=</span> <span class="n">TagField</span><span class="p">(</span><span class="n">default</span><span class="o">=</span><span class="s2">"fire"</span><span class="p">,</span> <span class="n">enforce_single</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The ‘resistances’ field in this example can be set to multiple times and it will keep the added tags.
|
||||
The ‘vulnerability’ field in this example will override the previous tag with the new one.</p>
|
||||
<p>Each typeclass using the ComponentHolderMixin can declare its components
|
||||
in the class via the ComponentProperty.
|
||||
These are components that will always be present in a typeclass.
|
||||
|
|
|
|||
|
|
@ -517,14 +517,14 @@ class CmdEcho(Command):
|
|||
</div>
|
||||
<div class="literal-block-wrapper docutils container" id="a-full-code-block-example">
|
||||
<div class="code-block-caption"><span class="caption-text">An example code block</span><a class="headerlink" href="#a-full-code-block-example" title="Permalink to this code">¶</a></div>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal">1</span>
|
||||
<span class="normal">2</span>
|
||||
<span class="normal">3</span>
|
||||
<span class="normal">4</span>
|
||||
<span class="normal">5</span>
|
||||
<span class="normal">6</span>
|
||||
<span class="normal">7</span>
|
||||
<span class="normal">8</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="hll"><span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">Command</span>
|
||||
<span class="normal">8</span></pre></div></td><td class="code"><div><pre><span></span><span class="hll"><span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">Command</span>
|
||||
</span><span class="hll"><span class="k">class</span> <span class="nc">CmdEcho</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
||||
</span> <span class="sd">"""</span>
|
||||
<span class="sd"> Usage: echo <arg></span>
|
||||
|
|
@ -532,8 +532,8 @@ class CmdEcho(Command):
|
|||
<span class="n">key</span> <span class="o">=</span> <span class="s2">"echo"</span>
|
||||
<span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="hll"> <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="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
</span></pre></div>
|
||||
</td></tr></table></div>
|
||||
</span></pre></div></td></tr></table></div>
|
||||
</div>
|
||||
</div>
|
||||
<p>Here, <code class="docutils literal notranslate"><span class="pre">:linenos:</span></code> turns on line-numbers and <code class="docutils literal notranslate"><span class="pre">:emphasize-lines:</span></code> allows for emphasizing certain lines
|
||||
in a different color. The <code class="docutils literal notranslate"><span class="pre">:caption:</span></code> shows an instructive text and <code class="docutils literal notranslate"><span class="pre">:name:</span></code> is used to reference
|
||||
|
|
|
|||
|
|
@ -299,7 +299,7 @@ You hit <target> with full force!
|
|||
</div>
|
||||
<p>Here, <code class="docutils literal notranslate"><span class="pre"><hitter></span></code> would be the one using the <code class="docutils literal notranslate"><span class="pre">hit</span></code> command and <code class="docutils literal notranslate"><span class="pre"><target></span></code> is the one doing the punching.</p>
|
||||
<p>Still in <code class="docutils literal notranslate"><span class="pre">mygame/commands/mycommands.py</span></code>, add a new class, between <code class="docutils literal notranslate"><span class="pre">CmdEcho</span></code> and <code class="docutils literal notranslate"><span class="pre">MyCmdSet</span></code>.</p>
|
||||
<div class="highlight-python notranslate"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<div class="highlight-python notranslate"><div class="highlight"><table class="highlighttable"><tr><td class="linenos"><div class="linenodiv"><pre><span class="normal"> 1</span>
|
||||
<span class="normal"> 2</span>
|
||||
<span class="normal"> 3</span>
|
||||
<span class="normal"> 4</span>
|
||||
|
|
@ -321,7 +321,7 @@ You hit <target> with full force!
|
|||
<span class="normal">20</span>
|
||||
<span class="normal">21</span>
|
||||
<span class="normal">22</span>
|
||||
<span class="normal">23</span></pre></div></td><td class="code"><div class="highlight"><pre><span></span><span class="c1"># ...</span>
|
||||
<span class="normal">23</span></pre></div></td><td class="code"><div><pre><span></span><span class="c1"># ...</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">CmdHit</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -344,8 +344,8 @@ You hit <target> with full force!
|
|||
<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">"You hit </span><span class="si">{</span><span class="n">target</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> with full force!"</span><span class="p">)</span>
|
||||
<span class="n">target</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="sa">f</span><span class="s2">"You got hit by </span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">key</span><span class="si">}</span><span class="s2"> with full force!"</span><span class="p">)</span>
|
||||
<span class="c1"># ...</span>
|
||||
</pre></div>
|
||||
</td></tr></table></div>
|
||||
</pre></div></td></tr></table></div>
|
||||
</div>
|
||||
<p>A lot of things to dissect here:</p>
|
||||
<ul class="simple">
|
||||
<li><p><strong>Line 3</strong>: The normal <code class="docutils literal notranslate"><span class="pre">class</span></code> header. We inherit from <code class="docutils literal notranslate"><span class="pre">Command</span></code> which we imported at the top of this file.</p></li>
|
||||
|
|
|
|||
|
|
@ -158,7 +158,7 @@ You see nothing special.
|
|||
</pre></div>
|
||||
</div>
|
||||
<p>The description you get is not very exciting. Let’s add some flavor.</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>describe box = This is a large and very heavy box.
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>desc box = This is a large and very heavy box.
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>If you try the <code class="docutils literal notranslate"><span class="pre">get</span></code> command we will pick up the box. So far so good, but if we really want this to
|
||||
|
|
@ -198,9 +198,9 @@ later, in the <a class="reference internal" href="Adding-Commands.html"><span cl
|
|||
<h2><span class="section-number">1.5. </span>Get a Personality<a class="headerlink" href="#get-a-personality" title="Permalink to this headline">¶</a></h2>
|
||||
<p><a class="reference internal" href="../../../Components/Scripts.html"><span class="doc std std-doc">Scripts</span></a> are powerful out-of-character objects useful for many “under the hood” things.
|
||||
One of their optional abilities is to do things on a timer. To try out a first script, let’s put one
|
||||
on ourselves. There is an example script in <code class="docutils literal notranslate"><span class="pre">evennia/contrib/tutorial_examples/bodyfunctions.py</span></code>
|
||||
on ourselves. There is an example script in <code class="docutils literal notranslate"><span class="pre">evennia/contrib/tutorials/bodyfunctions/bodyfunctions.py</span></code>
|
||||
that is called <code class="docutils literal notranslate"><span class="pre">BodyFunctions</span></code>. To add this to us we will use the <code class="docutils literal notranslate"><span class="pre">script</span></code> command:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>script self = tutorial_examples.bodyfunctions.BodyFunctions
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>script self = tutorials.bodyfunctions.BodyFunctions
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>This string will tell Evennia to dig up the Python code at the place we indicate. It already knows
|
||||
|
|
@ -220,7 +220,7 @@ until it “fires” next. Don’t be alarmed if nothing happens when the countd
|
|||
particular script has a randomizer to determine if it will say something or not. So you will not see
|
||||
output every time it fires.</p>
|
||||
<p>When you are tired of your character’s “insights”, kill the script with</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>script/stop self = tutorial_examples.bodyfunctions.BodyFunctions
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>script/stop self = tutorials.bodyfunctions.BodyFunctions
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You create your own scripts in Python, outside the game; the path you give to <code class="docutils literal notranslate"><span class="pre">script</span></code> is literally
|
||||
|
|
@ -238,7 +238,7 @@ named simply <code class="docutils literal notranslate"><span class="pre">Object
|
|||
<code class="docutils literal notranslate"><span class="pre">evennia/contrib/tutorial_examples</span></code> there is a module <code class="docutils literal notranslate"><span class="pre">red_button.py</span></code>. It contains the enigmatic
|
||||
<code class="docutils literal notranslate"><span class="pre">RedButton</span></code> class.</p>
|
||||
<p>Let’s make us one of <em>those</em>!</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>create/drop button:tutorial_examples.red_button.RedButton
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>create/drop button:tutorials.red_button.RedButton
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>The same way we did with the Script Earler, we specify a “Python-path” to the Python code we want Evennia
|
||||
|
|
@ -330,7 +330,7 @@ of #dbrefs, if they are not in the same location) to the command.</p>
|
|||
<p>The Command-help is something you modify in Python code. We’ll get to that when we get to how to
|
||||
add Commands. But you can also add regular help entries, for example to explain something about
|
||||
the history of your game world:</p>
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sethelp/add History = At the dawn of time ...
|
||||
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>sethelp History = At the dawn of time ...
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>You will now find your new <code class="docutils literal notranslate"><span class="pre">History</span></code> entry in the <code class="docutils literal notranslate"><span class="pre">help</span></code> list and read your help-text with <code class="docutils literal notranslate"><span class="pre">help</span> <span class="pre">History</span></code>.</p>
|
||||
|
|
|
|||
|
|
@ -49,149 +49,167 @@
|
|||
<section class="tex2jax_ignore mathjax_ignore" id="links">
|
||||
<h1>Links<a class="headerlink" href="#links" title="Permalink to this headline">¶</a></h1>
|
||||
<p><em>A list of resources that may be useful for Evennia users and developers.</em></p>
|
||||
<section id="official-evennia-links">
|
||||
<h2>Official Evennia links<a class="headerlink" href="#official-evennia-links" title="Permalink to this headline">¶</a></h2>
|
||||
<section id="official-evennia-resources">
|
||||
<h2>Official Evennia resources<a class="headerlink" href="#official-evennia-resources" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://www.evennia.com">evennia.com</a> - Main Evennia portal page. Links to all corners of Evennia.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/evennia/evennia">Evennia github page</a> - Download code and read documentation.</p></li>
|
||||
<li><p><a class="reference external" href="https://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb">Evennia official chat
|
||||
channel</a></p></li>
|
||||
<li><p>Our official IRC chat #evennia at <a class="reference external" href="http://irc.freenode.net:6667">irc.freenode.net:6667</a>.</p></li>
|
||||
<li><p><a class="reference external" href="https://groups.google.com/group/evennia">Evennia forums/mailing list</a> - Web interface to our
|
||||
google group.</p></li>
|
||||
<li><p><a class="reference external" href="https://evennia.blogspot.com/">Evennia development blog</a> - Musings from the lead developer.</p></li>
|
||||
<li><p><a class="reference external" href="https://readthedocs.org/projects/evennia/">Evennia’s manual on ReadTheDocs</a> - Read and download
|
||||
offline in html, PDF or epub formats.</p></li>
|
||||
<li><p><a class="reference external" href="http://games.evennia.com/">Evennia Game Index</a> - An automated listing of Evennia games.</p></li>
|
||||
</ul>
|
||||
<hr class="docutils" />
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://evennia.blogspot.com/">Evennia development blog</a> - Musings from the lead developer.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/evennia/evennia">Evennia on GitHub</a> - Download code and read documentation.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.openhub.net/p/6906">Evennia on Open Hub</a></p></li>
|
||||
<li><p><a class="reference external" href="https://openhatch.org/projects/Evennia">Evennia on OpenHatch</a></p></li>
|
||||
<li><p><a class="reference external" href="https://pypi.python.org/pypi/Evennia-MUD-Server/">Evennia on PyPi</a></p></li>
|
||||
<li><p><a class="reference external" href="https://www.reddit.com/r/Evennia/">Evennia subreddit</a> (not much there yet though)</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="third-party-evennia-utilities-and-resources">
|
||||
<h2>Third-party Evennia utilities and resources<a class="headerlink" href="#third-party-evennia-utilities-and-resources" title="Permalink to this headline">¶</a></h2>
|
||||
<p><em>For publicly available games running on Evennia, add and find those in the <a class="reference external" href="http://games.evennia.com">Evennia game
|
||||
index</a> instead!</em></p>
|
||||
<section id="evennia-community">
|
||||
<h2>Evennia Community<a class="headerlink" href="#evennia-community" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://discord.gg/NecFePw">Discord Evennia channel</a> - This is a fan-driven Discord channel with
|
||||
a bridge to the official Evennia IRC channel.</p></li>
|
||||
<li><p><a class="reference external" href="http://games.evennia.com/">Evennia Game Index</a> - An automated listing of Evennia games.</p></li>
|
||||
<li><p><a class="reference external" href="https://discord.gg/AJJpcRUhtF">Evennia official Discord channel</a></p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/evennia/evennia/discussions">Evennia official forums</a> on Github Discussions.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.reddit.com/r/Evennia/">Evennia subreddit</a></p></li>
|
||||
</ul>
|
||||
<hr class="docutils" />
|
||||
</section>
|
||||
<section id="third-party-evennia-tools">
|
||||
<h2>Third-party Evennia tools<a class="headerlink" href="#third-party-evennia-tools" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://discordapp.com/channels/517176782357528616/517176782781415434">Discord live blog</a> of the
|
||||
<em>Blackbirds</em> Evennia game project.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.unrealengine.com/marketplace/en-US/slug/evennia-plugin">Unreal Engine Evennia plugin</a>
|
||||
an in-progress Unreal plugin for integrating Evennia with Epic Games’ Unreal Engine.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/thedarknet/evennia">The dark net/March Hare MUD</a> from the 2019 <a class="reference external" href="https://www.defcon.org/html/defcon-27/dc-27-index.html">DEF CON
|
||||
27</a> hacker conference in Paris. This is an
|
||||
Evennia game dir with batchcode to build the custom <em>Hackers</em> style cyberspace zone with puzzles and
|
||||
challenges <a class="reference external" href="https://dcdark.net/home">used during the conference</a>.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/Arx-Game/arxcode">Arx sources</a> - Open-source code release of the very popular
|
||||
<a class="reference external" href="https://play.arxmush.org/">Arx</a> Evennia game. [Here are instructions for installing](Arxcode-
|
||||
installing-help)</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/vincent-lg/evennia-wiki">Evennia-wiki</a> - An Evennia-specific Wiki for your
|
||||
website.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/taladan/Pegasus/blob/origin/world/utilities/evcolor">Evcolor</a> - Optional
|
||||
coloration for Evennia unit-test output.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/aurorachain/paxboards">Paxboards</a> - Evennia bulletin board system (both for
|
||||
telnet/web).</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/whitehorse-io/encarnia">Encarnia sources</a> - An open-sourced game dir for
|
||||
Evennia with things like races, combat etc. <a class="reference external" href="https://www.reddit.com/r/MUD/comments/6z6s3j/encarnia_an_evennia_python_mud_code_base_with/">Summary
|
||||
here</a>.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/FlutterSprite/coolbattles">The world of Cool battles sources</a> - Open source
|
||||
turn-based battle system for Evennia. It also has a <a class="reference external" href="http://wcb.battlestudio.com/">live demo</a>.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/cluebyte/nextrpi">nextRPI</a> - A github project for making a toolbox for people
|
||||
to make <a class="reference external" href="https://www.topmudsites.com/forums/showthread.php?t=4804">RPI</a>-style Evennia games.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/muddery/muddery">Muddery</a> - A mud framework under development, based on an
|
||||
older fork of Evennia. It has some specific design goals for building and extending the game based
|
||||
on input files.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/amfl/vim-evennia">vim-evennia</a> - A mode for editing batch-build files (<code class="docutils literal notranslate"><span class="pre">.ev</span></code>)
|
||||
files in the <a class="reference external" href="https://www.vim.org/">vim</a> text editor (Emacs users can use <a class="reference external" href="https://github.com/evennia/evennia/blob/master/evennia/utils/evennia-mode.el">evennia-
|
||||
<li><p><a class="reference external" href="https://github.com/InspectorCaracal/evennia-things/tree/main/discord_relay">Discord relay</a> - Two-way chat relays between Evennia channels and Discord channels.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/gtaylor/evennia-docker">docker-compose for Evennia</a> - A quick-install setup for running Evennia in a <a class="reference external" href="https://www.docker.com/">Docker container</a>. (See <a class="reference external" href="https://www.evennia.com/docs/latest/Running-Evennia-in-Docker.html">the official Evennia docs</a> for more details on running Evennia with Docker.)</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/taladan/Pegasus/blob/origin/world/utilities/evcolor">Evcolor</a> - Optional coloration for Evennia unit-test output.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/vincent-lg/evennia-wiki">Evennia-wiki</a> - An Evennia-specific Wiki for your website.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/cluebyte/nextrpi">nextRPI</a> - A github project for making a toolbox for people to make <a class="reference external" href="https://www.topmudsites.com/forums/showthread.php?t=4804">RPI</a>-style Evennia games.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/aurorachain/paxboards">Paxboards</a> - Evennia bulletin board system (both for telnet/web).</p></li>
|
||||
<li><p><a class="reference external" href="https://www.unrealengine.com/marketplace/en-US/slug/evennia-plugin">Unreal Engine Evennia plugin</a> an in-progress Unreal plugin for integrating Evennia with Epic Games’ Unreal Engine.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/amfl/vim-evennia">vim-evennia</a> - A mode for editing batch-build files (<code class="docutils literal notranslate"><span class="pre">.ev</span></code>) files in the <a class="reference external" href="https://www.vim.org/">vim</a> text editor (Emacs users can use <a class="reference external" href="https://github.com/evennia/evennia/blob/master/evennia/utils/evennia-mode.el">evennia-
|
||||
mode.el</a>).</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/FlutterSprite/coolbattles">The world of Cool battles sources</a> - Open source turn-based battle system for an older version of Evennia.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/search?p=1&q=evennia">Other Evennia-related repos on github</a></p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<hr class="docutils" />
|
||||
<section id="evennia-based-projects">
|
||||
<h2>Evennia-Based Projects<a class="headerlink" href="#evennia-based-projects" title="Permalink to this headline">¶</a></h2>
|
||||
<section id="code-bases">
|
||||
<h3>Code bases<a class="headerlink" href="#code-bases" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://www.youtube.com/playlist?list=PLyYMNttpc-SX1hvaqlUNmcxrhmM64pQXl">EvCast video series</a> -
|
||||
Tutorial videos explaining installing Evennia, basic Python etc.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/gtaylor/evennia-docker">Evennia-docker</a> - Evennia in a <a class="reference external" href="https://www.docker.com/">Docker
|
||||
container</a> for quick install and deployment in just a few commands.</p></li>
|
||||
<li><p><a class="reference external" href="http://www.evenniacn.com/">Evennia’s docs in Chinese</a> - A translated mirror of a slightly older
|
||||
Evennia version. Announcement <a class="reference external" href="https://groups.google.com/forum/#%21topic/evennia/3AXS8ZTzJaA">here</a>.</p></li>
|
||||
<li><p><a class="reference external" href="https://musoapbox.net/topic/1150/evennia-for-mushers">Evennia for MUSHers</a> - An article describing
|
||||
Evennia for those used to the MUSH way of doing things.</p></li>
|
||||
<li><p><em><a class="reference external" href="http://news.mit.edu/2015/learning-language-playing-computer-games-0924#_msocom_1">Language Understanding for Text games using Deep reinforcement
|
||||
learning</a></em>
|
||||
(<a class="reference external" href="https://people.csail.mit.edu/karthikn/pdfs/mud-play15.pdf">PDF</a>) - MIT research paper using Evennia
|
||||
to train AIs.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/Arx-Game/arxcode">Arx sources</a> - Open-source code release of the very popular <a class="reference external" href="https://play.arxmush.org/">Arx</a> Evennia game. <a class="reference external" href="https://www.evennia.com/docs/1.0-dev/Howtos/Arxcode-Installation.html">Here are instructions for installing</a></p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/whitehorse-io/encarnia">Encarnia sources</a> - An open-sourced game dir for an older version of Evennia with things like races, combat etc. <a class="reference external" href="https://www.reddit.com/r/MUD/comments/6z6s3j/encarnia_an_evennia_python_mud_code_base_with/">Summary here</a>.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/thedarknet/evennia">The dark net/March Hare MUD</a> from the 2019 <a class="reference external" href="https://www.defcon.org/html/defcon-27/dc-27-index.html">DEF CON 27</a> hacker conference in Paris. This is an Evennia game dir with batchcode to build the custom <em>Hackers</em> style cyberspace zone with puzzles and challenges <a class="reference external" href="https://dcdark.net/home">used during the conference</a>.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/muddery/muddery">Muddery</a> - A mud framework under development, based on an older fork of Evennia. It has some specific design goals for building and extending the game based on input files.</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="other-useful-mud-development-resources">
|
||||
<h2>Other useful mud development resources<a class="headerlink" href="#other-useful-mud-development-resources" title="Permalink to this headline">¶</a></h2>
|
||||
<section id="other">
|
||||
<h3>Other<a class="headerlink" href="#other" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://github.com/ctoth/area_reader">ROM area reader</a> - Parser for converting ROM area files to
|
||||
Python objects.</p></li>
|
||||
<li><p><a class="reference external" href="https://gossip.haus/">Gossip MUD chat network</a></p></li>
|
||||
<li><p><a class="reference external" href="https://discordapp.com/channels/517176782357528616/517176782781415434">Discord live blog</a> of the <em>Blackbirds</em> Evennia game project.</p></li>
|
||||
<li><p><a class="reference external" href="https://musoapbox.net/topic/1150/evennia-for-mushers">Evennia for MUSHers</a> - An article describing Evennia for those used to the MUSH way of doing things.</p></li>
|
||||
<li><p><em><a class="reference external" href="http://news.mit.edu/2015/learning-language-playing-computer-games-0924#_msocom_1">Language Understanding for Text games using Deep reinforcement learning</a></em>
|
||||
(<a class="reference external" href="https://people.csail.mit.edu/karthikn/pdfs/mud-play15.pdf">PDF</a>) - MIT research paper using Evennia to train AIs.</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="general-mud-forums-and-discussions">
|
||||
<h2>General MUD forums and discussions<a class="headerlink" href="#general-mud-forums-and-discussions" title="Permalink to this headline">¶</a></h2>
|
||||
</section>
|
||||
<hr class="docutils" />
|
||||
<section id="general-mu-resources">
|
||||
<h2>General MU* resources<a class="headerlink" href="#general-mu-resources" title="Permalink to this headline">¶</a></h2>
|
||||
<section id="tools">
|
||||
<h3>Tools<a class="headerlink" href="#tools" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://mudcoders.com/">MUD Coder’s Guild</a> - A blog and <a class="reference external" href="https://slack.mudcoders.com/">associated Slack
|
||||
channel</a> with discussions on MUD development.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.musoapbox.net/">MuSoapbox</a> - Very active Mu* game community mainly focused on MUSH-type gaming.</p></li>
|
||||
<li><p><a class="reference external" href="http://journal.imaginary-realities.com/">Imaginary Realities</a> - An e-magazine on game and MUD
|
||||
design that has several articles about Evennia. There is also an
|
||||
<a class="reference external" href="http://disinterest.org/resource/imaginary-realities/">archive of older issues</a>
|
||||
from 1998-2001 that are still very relevant.</p></li>
|
||||
<li><p><a class="reference external" href="http://optionalrealities.com/">Optional Realities</a> - Mud development discussion forums that has
|
||||
regular articles on MUD development focused on roleplay-intensive games. After a HD crash it’s not
|
||||
as content-rich as it once was.</p></li>
|
||||
<li><p><a class="reference external" href="http://mudlab.org/">MudLab</a> - Mud design discussion forum</p></li>
|
||||
<li><p><a class="reference external" href="http://www.mudconnect.com/">MudConnector</a> - Mud listing and forums</p></li>
|
||||
<li><p><a class="reference external" href="http://www.mudbytes.net/">MudBytes</a> - Mud listing and forums</p></li>
|
||||
<li><p><a class="reference external" href="http://www.topmudsites.com/">Top Mud Sites</a> - Mud listing and forums</p></li>
|
||||
<li><p><a class="reference external" href="http://planet-muddev.disinterest.org/">Planet Mud-Dev</a> - A blog aggregator following blogs of
|
||||
current MUD development (including Evennia) around the ‘net. Worth to put among your RSS
|
||||
subscriptions.</p></li>
|
||||
<li><p>Mud Dev mailing list archive (<a class="reference external" href="http://www.disinterest.org/resource/MUD-Dev/">mirror</a>) -
|
||||
Influential mailing list active 1996-2004. Advanced game design discussions.</p></li>
|
||||
<li><p><a class="reference external" href="https://github.com/ctoth/area_reader">ROM area reader</a> - Parser for converting ROM area files to Python objects.</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="informational">
|
||||
<h3>Informational<a class="headerlink" href="#informational" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="http://tharsis-gate.org/articles/imaginary.html">Imaginary Realities unofficial archive</a> - An e-magazine on game and MUD design that has several articles about Evennia.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.hayseed.net/MOO/">Lost Library of MOO</a> - Archive of scientific articles on mudding (in particular moo).</p></li>
|
||||
<li><p><a class="reference external" href="http://cryosphere.net/mud-protocol.html">Mud Client/Server Interaction</a> - A page on classic MUD telnet protocols.</p></li>
|
||||
<li><p><a class="reference external" href="http://mud-dev.wikidot.com/">Mud-dev wiki</a> - A (very) slowly growing resource on MUD creation.</p></li>
|
||||
<li><p><a class="reference external" href="http://cryosphere.net/mud-protocol.html">Mud Client/Server Interaction</a> - A page on classic MUD
|
||||
telnet protocols.</p></li>
|
||||
<li><p><a class="reference external" href="https://gc-taylor.com/blog/2013/01/08/mud-tech-funcool-dont-forget-ship-damned-thing/">Mud Tech’s fun/cool but …</a> -
|
||||
Greg Taylor gives good advice on mud design.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.hayseed.net/MOO/">Lost Library of MOO</a> - Archive of scientific articles on mudding (in
|
||||
particular moo).</p></li>
|
||||
<li><p><a class="reference external" href="http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=5959">Nick Gammon’s hints thread</a> -
|
||||
Contains a very useful list of things to think about when starting your new MUD.</p></li>
|
||||
<li><p><a class="reference external" href="http://www.lostgarden.com/">Lost Garden</a> - A game development blog with long and interesting
|
||||
articles (not MUD-specific)</p></li>
|
||||
<li><p><a class="reference external" href="https://gc-taylor.com/blog/2013/01/08/mud-tech-funcool-dont-forget-ship-damned-thing/">Mud Tech’s fun/cool but …</a> - Greg Taylor gives good advice on mud design.</p></li>
|
||||
<li><p><a class="reference external" href="http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=5959">Nick Gammon’s hints thread</a> - Contains a very useful list of things to think about when starting your new MUD.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.raphkoster.com/games/laws-of-online-world-design/the-laws-of-online-world-design/">Raph Koster’s laws of game design</a> - thought-provoking guidelines and things to think about when designing a virtual multiplayer world (Raph is known for <em>Ultima Online</em> among other things).</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="community">
|
||||
<h3>Community<a class="headerlink" href="#community" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://grapevine.haus/">Grapevine</a> - MUD listings and inter-game chat network</p></li>
|
||||
<li><p><a class="reference external" href="https://mudcoders.com/">MUD Coder’s Guild</a> - A blog and <a class="reference external" href="https://slack.mudcoders.com/">associated Slack channel</a> with discussions on MUD development.</p></li>
|
||||
<li><p><a class="reference external" href="http://www.mudbytes.net/">MudBytes</a> - MUD listing and forums</p></li>
|
||||
<li><p><a class="reference external" href="http://www.mudconnect.com/">MudConnector</a> - MUD listing and forums</p></li>
|
||||
<li><p><a class="reference external" href="http://mudlab.org/">MudLab</a> - MUD design discussion forum</p></li>
|
||||
<li><p><a class="reference external" href="https://musoapbox.net/">MuSoapbox</a> - MU* forum mainly focused on MUSH-type gaming.</p></li>
|
||||
<li><p><a class="reference external" href="http://www.topmudsites.com/">Top Mud Sites</a> - MUD listing and forums</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
<hr class="docutils" />
|
||||
<section id="general-game-dev-resources">
|
||||
<h2>General Game-Dev Resources<a class="headerlink" href="#general-game-dev-resources" title="Permalink to this headline">¶</a></h2>
|
||||
<section id="id1">
|
||||
<h3>Tools<a class="headerlink" href="#id1" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://git-scm.com/">GIT</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://git-scm.com/documentation">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://try.github.io/levels/1/challenges/1">Learn GIT in 15 minutes</a> (interactive tutorial)</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="frameworks">
|
||||
<h3>Frameworks<a class="headerlink" href="#frameworks" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://www.djangoproject.com/">Django’s homepage</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://docs.djangoproject.com/en">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://code.djangoproject.com/">Code</a></p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p><a class="reference external" href="https://twistedmatrix.com/">Twisted homepage</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://twistedmatrix.com/documents/current/core/howto/index.html">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://twistedmatrix.com/trac/browser">Code</a></p></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="learning-python">
|
||||
<h3>Learning Python<a class="headerlink" href="#learning-python" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://www.python.org/">Python Website</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://www.python.org/doc/">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://docs.python.org/tut/tut.html">Tutorial</a></p></li>
|
||||
<li><p><a class="reference external" href="https://docs.python.org/lib/lib.html">Library Reference</a></p></li>
|
||||
<li><p><a class="reference external" href="https://docs.python.org/ref/ref.html">Language Reference</a></p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p><a class="reference external" href="https://www.siafoo.net/article/52">Python tips and tricks</a></p></li>
|
||||
<li><p><a class="reference external" href="https://hyperskill.org/onboarding?track=python">Jetbrains Python academy</a> - free online programming curriculum for different skill levels</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="blogs">
|
||||
<h3>Blogs<a class="headerlink" href="#blogs" title="Permalink to this headline">¶</a></h3>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://lostgarden.home.blog/">Lost Garden</a> - A game development blog with long and interesting articles (not MUD-specific)</p></li>
|
||||
<li><p><a class="reference external" href="http://whatgamesare.com/">What Games Are</a> - A blog about general game design (not MUD-specific)</p></li>
|
||||
<li><p><a class="reference external" href="https://thealexandrian.net/">The Alexandrian</a> - A blog about tabletop roleplaying and board games,
|
||||
but with lots of general discussion about rule systems and game balance that could be applicable
|
||||
also for MUDs.</p></li>
|
||||
<li><p><a class="reference external" href="https://www.raphkoster.com/games/laws-of-online-world-design/the-laws-of-online-world-design/">Raph Koster’s laws of game design</a> -
|
||||
thought-provoking guidelines and things to think about when designing a virtual multiplayer world
|
||||
(Raph is known for <em>Ultima Online</em> among other things).</p></li>
|
||||
<li><p><a class="reference external" href="https://thealexandrian.net/">The Alexandrian</a> - A blog about tabletop roleplaying and board games, but with lots of general discussion about rule systems and game balance that could be applicable also for MUDs.</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="literature">
|
||||
<h2>Literature<a class="headerlink" href="#literature" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<h3>Literature<a class="headerlink" href="#literature" title="Permalink to this headline">¶</a></h3>
|
||||
<ul>
|
||||
<li><p>Richard Bartle <em>Designing Virtual Worlds</em>
|
||||
(<a class="reference external" href="https://www.amazon.com/Designing-Virtual-Worlds-Richard-Bartle/dp/0131018167">amazon page</a>) -
|
||||
Essential reading for the design of any persistent game
|
||||
world, written by the co-creator of the original game <em>MUD</em>. Published in 2003 but it’s still as
|
||||
relevant now as when it came out. Covers everything you need to know and then some.</p></li>
|
||||
<li><p>Zed A. Shaw <em>Learn Python the Hard way</em> (<a class="reference external" href="https://learnpythonthehardway.org/">homepage</a>) - Despite
|
||||
the imposing name this book is for the absolute Python/programming beginner. One learns the language
|
||||
by gradually creating a small text game! It has been used by multiple users before moving on to
|
||||
Evennia. <em>Update: This used to be free to read online, this is no longer the case.</em></p></li>
|
||||
relevant now as when it came out. Covers everything you need to know and then some.</p>
|
||||
<p>When the rights to Designing Virtual Worlds returned to him, Richard Bartle
|
||||
made the PDF of his Designing Virtual Worlds freely available through his own
|
||||
website (<a class="reference external" href="https://mud.co.uk/dvw/">Designing Virtual Worlds</a>). A direct link to
|
||||
the PDF can be found <a class="reference external" href="https://mud.co.uk/richard/DesigningVirtualWorlds.pdf">here</a>.</p>
|
||||
</li>
|
||||
<li><p>David M. Beazley <em>Python Essential Reference (4th ed)</em>
|
||||
(<a class="reference external" href="https://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/">amazon page</a>) -
|
||||
Our recommended book on Python; it not only efficiently summarizes the language but is also
|
||||
|
|
@ -208,49 +226,6 @@ easy to follow also for a modern reader. Required reading if you think of implem
|
|||
economic system.</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="frameworks">
|
||||
<h2>Frameworks<a class="headerlink" href="#frameworks" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://www.djangoproject.com/">Django’s homepage</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://docs.djangoproject.com/en">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://code.djangoproject.com/">Code</a></p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p><a class="reference external" href="https://twistedmatrix.com/">Twisted homepage</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://twistedmatrix.com/documents/current/core/howto/index.html">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://twistedmatrix.com/trac/browser">Code</a></p></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="tools">
|
||||
<h2>Tools<a class="headerlink" href="#tools" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://git-scm.com/">GIT</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://git-scm.com/documentation">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://try.github.io/levels/1/challenges/1">Learn GIT in 15 minutes</a> (interactive tutorial)</p></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</section>
|
||||
<section id="python-info">
|
||||
<h2>Python Info<a class="headerlink" href="#python-info" title="Permalink to this headline">¶</a></h2>
|
||||
<ul class="simple">
|
||||
<li><p><a class="reference external" href="https://www.python.org/">Python Website</a></p>
|
||||
<ul>
|
||||
<li><p><a class="reference external" href="https://www.python.org/doc/">Documentation</a></p></li>
|
||||
<li><p><a class="reference external" href="https://docs.python.org/tut/tut.html">Tutorial</a></p></li>
|
||||
<li><p><a class="reference external" href="https://docs.python.org/lib/lib.html">Library Reference</a></p></li>
|
||||
<li><p><a class="reference external" href="https://docs.python.org/ref/ref.html">Language Reference</a></p></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><p><a class="reference external" href="https://www.siafoo.net/article/52">Python tips and tricks</a></p></li>
|
||||
<li><p><a class="reference external" href="https://hyperskill.org/onboarding?track=python">Jetbrains Python academy</a> -
|
||||
free online programming curriculum for different skill levels</p></li>
|
||||
</ul>
|
||||
</section>
|
||||
</section>
|
||||
|
||||
|
|
@ -277,14 +252,28 @@ free online programming curriculum for different skill levels</p></li>
|
|||
<p><h3><a href="index.html">Table of Contents</a></h3>
|
||||
<ul>
|
||||
<li><a class="reference internal" href="#">Links</a><ul>
|
||||
<li><a class="reference internal" href="#official-evennia-links">Official Evennia links</a></li>
|
||||
<li><a class="reference internal" href="#third-party-evennia-utilities-and-resources">Third-party Evennia utilities and resources</a></li>
|
||||
<li><a class="reference internal" href="#other-useful-mud-development-resources">Other useful mud development resources</a></li>
|
||||
<li><a class="reference internal" href="#general-mud-forums-and-discussions">General MUD forums and discussions</a></li>
|
||||
<li><a class="reference internal" href="#literature">Literature</a></li>
|
||||
<li><a class="reference internal" href="#frameworks">Frameworks</a></li>
|
||||
<li><a class="reference internal" href="#official-evennia-resources">Official Evennia resources</a></li>
|
||||
<li><a class="reference internal" href="#evennia-community">Evennia Community</a></li>
|
||||
<li><a class="reference internal" href="#third-party-evennia-tools">Third-party Evennia tools</a></li>
|
||||
<li><a class="reference internal" href="#evennia-based-projects">Evennia-Based Projects</a><ul>
|
||||
<li><a class="reference internal" href="#code-bases">Code bases</a></li>
|
||||
<li><a class="reference internal" href="#other">Other</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#general-mu-resources">General MU* resources</a><ul>
|
||||
<li><a class="reference internal" href="#tools">Tools</a></li>
|
||||
<li><a class="reference internal" href="#python-info">Python Info</a></li>
|
||||
<li><a class="reference internal" href="#informational">Informational</a></li>
|
||||
<li><a class="reference internal" href="#community">Community</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<li><a class="reference internal" href="#general-game-dev-resources">General Game-Dev Resources</a><ul>
|
||||
<li><a class="reference internal" href="#id1">Tools</a></li>
|
||||
<li><a class="reference internal" href="#frameworks">Frameworks</a></li>
|
||||
<li><a class="reference internal" href="#learning-python">Learning Python</a></li>
|
||||
<li><a class="reference internal" href="#blogs">Blogs</a></li>
|
||||
<li><a class="reference internal" href="#literature">Literature</a></li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
|
|
|
|||
|
|
@ -1295,6 +1295,8 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">at_account_creation</span><span class="p">()</span>
|
||||
<span class="c1"># initialize Attribute/TagProperties</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
|
||||
|
||||
<span class="n">permissions</span> <span class="o">=</span> <span class="p">[</span><span class="n">settings</span><span class="o">.</span><span class="n">PERMISSION_ACCOUNT_DEFAULT</span><span class="p">]</span>
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_createdict"</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -492,9 +492,7 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">if</span> <span class="s2">"permanent"</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="p">:</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span>
|
||||
<span class="s2">"obj.cmdset.add() kwarg 'permanent' has changed name to 'persistent'."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">logger</span><span class="o">.</span><span class="n">log_dep</span><span class="p">(</span><span class="s2">"obj.cmdset.add() kwarg 'permanent' has changed name to 'persistent'."</span><span class="p">)</span>
|
||||
<span class="n">persistent</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">"permanent"</span><span class="p">]</span> <span class="k">if</span> <span class="n">persistent</span> <span class="ow">is</span> <span class="kc">False</span> <span class="k">else</span> <span class="n">persistent</span>
|
||||
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">isinstance</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">or</span> <span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">CmdSet</span><span class="p">)):</span>
|
||||
|
|
|
|||
|
|
@ -2261,11 +2261,13 @@
|
|||
<span class="n">old_typeclass_path</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">reset</span><span class="p">:</span>
|
||||
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span><span class="p">(</span><span class="s2">"|yNote that this will reset the object back to its typeclass' default state, "</span>
|
||||
<span class="s2">"removing any custom locks/perms/attributes etc that may have been added "</span>
|
||||
<span class="s2">"by an explicit create_object call. Use `update` or type/force instead in order "</span>
|
||||
<span class="s2">"to keep such data. "</span>
|
||||
<span class="s2">"Continue [Y]/N?|n"</span><span class="p">)</span>
|
||||
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span>
|
||||
<span class="s2">"|yNote that this will reset the object back to its typeclass' default state, "</span>
|
||||
<span class="s2">"removing any custom locks/perms/attributes etc that may have been added "</span>
|
||||
<span class="s2">"by an explicit create_object call. Use `update` or type/force instead in order "</span>
|
||||
<span class="s2">"to keep such data. "</span>
|
||||
<span class="s2">"Continue [Y]/N?|n"</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">upper</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"N"</span><span class="p">,</span> <span class="s2">"NO"</span><span class="p">):</span>
|
||||
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Aborted."</span><span class="p">)</span>
|
||||
<span class="k">return</span>
|
||||
|
|
@ -2774,7 +2776,7 @@
|
|||
<span class="k">return</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">ndb_attr</span> <span class="ow">and</span> <span class="n">ndb_attr</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">" </span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_single_attribute</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">ndb_attr</span><span class="p">)</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
|
@ -3515,7 +3517,7 @@
|
|||
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">msgs</span><span class="p">))</span>
|
||||
<span class="k">if</span> <span class="s2">"delete"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">script</span> <span class="ow">and</span> <span class="n">script</span><span class="o">.</span><span class="n">pk</span><span class="p">:</span>
|
||||
<span class="n">ScriptEvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="p">[</span><span class="n">script</span><span class="p">],</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
|
||||
<span class="n">ScriptEvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="p">[</span><span class="n">script</span><span class="p">],</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Script was deleted automatically."</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@
|
|||
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">channels</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
||||
<span class="s2">"Multiple possible channel matches/alias for "</span>
|
||||
<span class="s2">"'</span><span class="si">{channelname}</span><span class="s2">':</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">)</span>
|
||||
<span class="sa">f</span><span class="s2">"'</span><span class="si">{</span><span class="n">channelname</span><span class="si">}</span><span class="s2">':</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">chan</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">chan</span> <span class="ow">in</span> <span class="n">channels</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="n">channels</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
||||
|
|
|
|||
|
|
@ -100,9 +100,24 @@
|
|||
<span class="n">rid</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">room1</span><span class="o">.</span><span class="n">id</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">"here"</span><span class="p">,</span> <span class="s2">"Room(#</span><span class="si">{}</span><span class="s2">)</span><span class="se">\n</span><span class="s2">room_desc"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">rid</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_look_no_location"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look_no_location">[docs]</a> <span class="k">def</span> <span class="nf">test_look_no_location</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">char1</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"You have no location to look at!"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_look_nonexisting"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_look_nonexisting">[docs]</a> <span class="k">def</span> <span class="nf">test_look_nonexisting</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdLook</span><span class="p">(),</span> <span class="s2">"yellow sign"</span><span class="p">,</span> <span class="s2">"Could not find 'yellow sign'."</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_home">[docs]</a> <span class="k">def</span> <span class="nf">test_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdHome</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"You are already home"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_go_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_go_home">[docs]</a> <span class="k">def</span> <span class="nf">test_go_home</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">building</span><span class="o">.</span><span class="n">CmdTeleport</span><span class="p">(),</span> <span class="s2">"/quiet Room2"</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">general</span><span class="o">.</span><span class="n">CmdHome</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"There's no place like home"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_no_home"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_no_home">[docs]</a> <span class="k">def</span> <span class="nf">test_no_home</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">char1</span><span class="o">.</span><span class="n">home</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdHome</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"You have no home"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_inventory"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_inventory">[docs]</a> <span class="k">def</span> <span class="nf">test_inventory</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdInventory</span><span class="p">(),</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">"You are not carrying anything."</span><span class="p">)</span></div>
|
||||
|
||||
|
|
@ -132,6 +147,11 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</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">char1</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"testalias"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"account"</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="s2">"testaliasedstring3"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">char1</span><span class="o">.</span><span class="n">nicks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"testalias"</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"object"</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_nick_list"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_nick_list">[docs]</a> <span class="k">def</span> <span class="nf">test_nick_list</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">"/list"</span><span class="p">,</span> <span class="s2">"No nicks defined."</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">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">"test1 = Hello"</span><span class="p">,</span> <span class="s2">"Inputline-nick 'test1' mapped to 'Hello'."</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">general</span><span class="o">.</span><span class="n">CmdNick</span><span class="p">(),</span> <span class="s2">"/list"</span><span class="p">,</span> <span class="s2">"Defined Nicks:"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestGeneral.test_get_and_drop"><a class="viewcode-back" href="../../../../api/evennia.commands.default.tests.html#evennia.commands.default.tests.TestGeneral.test_get_and_drop">[docs]</a> <span class="k">def</span> <span class="nf">test_get_and_drop</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span><span class="n">general</span><span class="o">.</span><span class="n">CmdGet</span><span class="p">(),</span> <span class="s2">"Obj"</span><span class="p">,</span> <span class="s2">"You pick up Obj."</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">general</span><span class="o">.</span><span class="n">CmdDrop</span><span class="p">(),</span> <span class="s2">"Obj"</span><span class="p">,</span> <span class="s2">"You drop Obj."</span><span class="p">)</span></div>
|
||||
|
|
@ -1316,7 +1336,8 @@
|
|||
<span class="s2">"Obj2 = evennia.objects.objects.DefaultExit"</span><span class="p">,</span>
|
||||
<span class="s2">"Obj2 changed typeclass from evennia.objects.objects.DefaultObject "</span>
|
||||
<span class="s2">"to evennia.objects.objects.DefaultExit."</span><span class="p">,</span>
|
||||
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">"swap"</span><span class="p">,</span> <span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">"yes"</span><span class="p">],</span>
|
||||
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">"swap"</span><span class="p">,</span>
|
||||
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">"yes"</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">CmdTypeclass</span><span class="p">(),</span> <span class="s2">"/list Obj"</span><span class="p">,</span> <span class="s2">"Core typeclasses"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
|
|
@ -1353,7 +1374,7 @@
|
|||
<span class="s2">"/reset/force Obj=evennia.objects.objects.DefaultObject"</span><span class="p">,</span>
|
||||
<span class="s2">"Obj updated its existing typeclass (evennia.objects.objects.DefaultObject).</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"All object creation hooks were run. All old attributes where deleted before the swap."</span><span class="p">,</span>
|
||||
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">"yes"</span><span class="p">]</span>
|
||||
<span class="n">inputs</span><span class="o">=</span><span class="p">[</span><span class="s2">"yes"</span><span class="p">],</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.prototypes.prototypes</span> <span class="kn">import</span> <span class="n">homogenize_prototype</span>
|
||||
|
|
@ -1380,7 +1401,7 @@
|
|||
<span class="s2">"typeclasses.objects.Object.</span><span class="se">\n</span><span class="s2">Only the at_object_creation hook was run "</span>
|
||||
<span class="s2">"(update mode). Attributes set before swap were not removed</span><span class="se">\n</span><span class="s2">"</span>
|
||||
<span class="s2">"(use `swap` or `type/reset` to clear all). Prototype 'replaced_obj' was "</span>
|
||||
<span class="s2">"successfully applied over the object type."</span>
|
||||
<span class="s2">"successfully applied over the object type."</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">assert</span> <span class="bp">self</span><span class="o">.</span><span class="n">obj1</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">==</span> <span class="s2">"protdesc"</span></div>
|
||||
|
||||
|
|
|
|||
|
|
@ -61,15 +61,33 @@
|
|||
<span class="sd"> create different types of communication channels.</span>
|
||||
|
||||
<span class="sd"> Class-level variables:</span>
|
||||
<span class="sd"> - `send_to_online_only` (bool, default True) - if set, will only try to</span>
|
||||
<span class="sd"> send to subscribers that are actually active. This is a useful optimization.</span>
|
||||
<span class="sd"> - `log_file` (str, default `"channel_{channelname}.log"`). This is the</span>
|
||||
<span class="sd"> log file to which the channel history will be saved. The `{channelname}` tag</span>
|
||||
<span class="sd"> will be replaced by the key of the Channel. If an Attribute 'log_file'</span>
|
||||
<span class="sd"> is set, this will be used instead. If this is None and no Attribute is found,</span>
|
||||
<span class="sd"> no history will be saved.</span>
|
||||
<span class="sd"> - `channel_prefix_string` (str, default `"[{channelname} ]"`) - this is used</span>
|
||||
<span class="sd"> as a simple template to get the channel prefix with `.channel_prefix()`.</span>
|
||||
<span class="sd"> - `send_to_online_only` (bool, default True) - if set, will only try to</span>
|
||||
<span class="sd"> send to subscribers that are actually active. This is a useful optimization.</span>
|
||||
<span class="sd"> - `log_file` (str, default `"channel_{channelname}.log"`). This is the</span>
|
||||
<span class="sd"> log file to which the channel history will be saved. The `{channelname}` tag</span>
|
||||
<span class="sd"> will be replaced by the key of the Channel. If an Attribute 'log_file'</span>
|
||||
<span class="sd"> is set, this will be used instead. If this is None and no Attribute is found,</span>
|
||||
<span class="sd"> no history will be saved.</span>
|
||||
<span class="sd"> - `channel_prefix_string` (str, default `"[{channelname} ]"`) - this is used</span>
|
||||
<span class="sd"> as a simple template to get the channel prefix with `.channel_prefix()`. It is used</span>
|
||||
<span class="sd"> in front of every channel message; use `{channelmessage}` token to insert the</span>
|
||||
<span class="sd"> name of the current channel. Set to `None` if you want no prefix (or want to</span>
|
||||
<span class="sd"> handle it in a hook during message generation instead.</span>
|
||||
<span class="sd"> - `channel_msg_nick_pattern`(str, default `"{alias}\\s*?|{alias}\\s+?(?P<arg1>.+?)") -</span>
|
||||
<span class="sd"> this is what used when a channel subscriber gets a channel nick assigned to this</span>
|
||||
<span class="sd"> channel. The nickhandler uses the pattern to pick out this channel's name from user</span>
|
||||
<span class="sd"> input. The `{alias}` token will get both the channel's key and any set/custom aliases</span>
|
||||
<span class="sd"> per subscriber. You need to allow for an `<arg1>` regex group to catch any message</span>
|
||||
<span class="sd"> that should be send to the channel. You usually don't need to change this pattern</span>
|
||||
<span class="sd"> unless you are changing channel command-style entirely.</span>
|
||||
<span class="sd"> - `channel_msg_nick_replacement` (str, default `"channel {channelname} = $1"` - this</span>
|
||||
<span class="sd"> is used by the nickhandler to generate a replacement string once the nickhandler (using</span>
|
||||
<span class="sd"> the `channel_msg_nick_pattern`) identifies that the channel should be addressed</span>
|
||||
<span class="sd"> to send a message to it. The `<arg1>` regex pattern match from `channel_msg_nick_pattern`</span>
|
||||
<span class="sd"> will end up at the `$1` position in the replacement. Together, this allows you do e.g.</span>
|
||||
<span class="sd"> 'public Hello' and have that become a mapping to `channel public = Hello`. By default,</span>
|
||||
<span class="sd"> the account-level `channel` command is used. If you were to rename that command you must</span>
|
||||
<span class="sd"> tweak the output to something like `yourchannelcommandname {channelname} = $1`.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
|
|
@ -100,6 +118,9 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">at_channel_creation</span><span class="p">()</span>
|
||||
<span class="c1"># initialize Attribute/TagProperties</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_createdict"</span><span class="p">):</span>
|
||||
<span class="c1"># this is only set if the channel was created</span>
|
||||
<span class="c1"># with the utils.create.create_channel function.</span>
|
||||
|
|
|
|||
|
|
@ -370,7 +370,7 @@
|
|||
<span class="n">callback</span><span class="p">()</span>
|
||||
|
||||
<span class="n">seconds</span> <span class="o">=</span> <span class="n">real_seconds_until</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gametime</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">restart</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">)</span></div></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span> <span class="n">force_restart</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
|
||||
</pre></div>
|
||||
|
||||
<div class="clearer"></div>
|
||||
|
|
|
|||
File diff suppressed because it is too large
Load diff
|
|
@ -138,7 +138,7 @@
|
|||
<span class="n">recog02</span> <span class="o">=</span> <span class="s2">"Mr Receiver2"</span>
|
||||
<span class="n">recog10</span> <span class="o">=</span> <span class="s2">"Mr Sender"</span>
|
||||
<span class="n">emote</span> <span class="o">=</span> <span class="s1">'With a flair, /me looks at /first and /colliding sdesc-guy. She says "This is a test."'</span>
|
||||
<span class="n">case_emote</span> <span class="o">=</span> <span class="s2">"/me looks at /first, then /FIRST, /First and /Colliding twice."</span>
|
||||
<span class="n">case_emote</span> <span class="o">=</span> <span class="s2">"/Me looks at /first. Then, /me looks at /FIRST, /First and /Colliding twice."</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem">[docs]</a><span class="k">class</span> <span class="nc">TestRPSystem</span><span class="p">(</span><span class="n">BaseEvenniaTest</span><span class="p">):</span>
|
||||
|
|
@ -155,41 +155,11 @@
|
|||
<span class="n">rpsystem</span><span class="o">.</span><span class="n">ContribRPCharacter</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">"Receiver2"</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">room</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_ordered_permutation_regex"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_ordered_permutation_regex">[docs]</a> <span class="k">def</span> <span class="nf">test_ordered_permutation_regex</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
|
||||
<span class="n">rpsystem</span><span class="o">.</span><span class="n">ordered_permutation_regex</span><span class="p">(</span><span class="n">sdesc0</span><span class="p">),</span>
|
||||
<span class="s2">"/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*sender</span><span class="se">\\</span><span class="s2"> of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*nice</span><span class="se">\\</span><span class="s2"> sender</span><span class="se">\\</span><span class="s2"> of(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice</span><span class="se">\\</span><span class="s2"> sender(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*nice</span><span class="se">\\</span><span class="s2"> sender(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*of</span><span class="se">\\</span><span class="s2"> emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*sender</span><span class="se">\\</span><span class="s2"> of(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*A</span><span class="se">\\</span><span class="s2"> nice(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*emotes(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*sender(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*nice(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*of(?=</span><span class="se">\\</span><span class="s2">W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*A(?=</span><span class="se">\\</span><span class="s2">W|$)+"</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_sdesc_handler"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_sdesc_handler">[docs]</a> <span class="k">def</span> <span class="nf">test_sdesc_handler</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">speaker</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="n">sdesc0</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">speaker</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="n">sdesc0</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"This is {#324} ignored"</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">speaker</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="s2">"This is 324 ignored"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"Testing three words"</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">speaker</span><span class="o">.</span><span class="n">sdesc</span><span class="o">.</span><span class="n">get_regex_tuple</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">pattern</span><span class="p">,</span>
|
||||
<span class="s2">"/[0-9]*-*Testing\ three\ words(?=\W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*Testing\ three(?=\W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*three\ words(?=\W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*Testing(?=\W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*three(?=\W|$)+|"</span>
|
||||
<span class="s2">"/[0-9]*-*words(?=\W|$)+"</span><span class="p">,</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="bp">self</span><span class="o">.</span><span class="n">speaker</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="s2">"This is 324 ignored"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_recog_handler"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_recog_handler">[docs]</a> <span class="k">def</span> <span class="nf">test_recog_handler</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">speaker</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="n">sdesc0</span><span class="p">)</span>
|
||||
|
|
@ -198,12 +168,8 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">,</span> <span class="n">recog02</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">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">),</span> <span class="n">recog01</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">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">),</span> <span class="n">recog02</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">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get_regex_tuple</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">pattern</span><span class="p">,</span>
|
||||
<span class="s2">"/[0-9]*-*Mr</span><span class="se">\\</span><span class="s2"> Receiver(?=</span><span class="se">\\</span><span class="s2">W|$)+|/[0-9]*-*Receiver(?=</span><span class="se">\\</span><span class="s2">W|$)+|/[0-9]*-*Mr(?=</span><span class="se">\\</span><span class="s2">W|$)+"</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">recog</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">receiver1</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">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span><span class="p">),</span> <span class="n">sdesc1</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">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">receiver1</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">speaker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="p">{</span><span class="s2">"Mr Receiver2"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">})</span></div>
|
||||
|
||||
|
|
@ -240,6 +206,26 @@
|
|||
<span class="n">result</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_get_sdesc"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_get_sdesc">[docs]</a> <span class="k">def</span> <span class="nf">test_get_sdesc</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">looker</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span> <span class="c1"># Sender</span>
|
||||
<span class="n">target</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span> <span class="c1"># Receiver1</span>
|
||||
<span class="n">looker</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="n">sdesc0</span><span class="p">)</span> <span class="c1"># A nice sender of emotes</span>
|
||||
<span class="n">target</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="n">sdesc1</span><span class="p">)</span> <span class="c1"># The first receiver of emotes.</span>
|
||||
|
||||
<span class="c1"># sdesc with no processing</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">),</span> <span class="s2">"The first receiver of emotes."</span><span class="p">)</span>
|
||||
<span class="c1"># sdesc with processing</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span>
|
||||
<span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">process</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">"|bThe first receiver of emotes.|n"</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">looker</span><span class="o">.</span><span class="n">recog</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">recog01</span><span class="p">)</span> <span class="c1"># Mr Receiver</span>
|
||||
|
||||
<span class="c1"># recog with no processing</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">),</span> <span class="s2">"Mr Receiver"</span><span class="p">)</span>
|
||||
<span class="c1"># recog with processing</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">looker</span><span class="o">.</span><span class="n">get_sdesc</span><span class="p">(</span><span class="n">target</span><span class="p">,</span> <span class="n">process</span><span class="o">=</span><span class="kc">True</span><span class="p">),</span> <span class="s2">"|mMr Receiver|n"</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_send_emote"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_send_emote">[docs]</a> <span class="k">def</span> <span class="nf">test_send_emote</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">speaker</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span>
|
||||
<span class="n">receiver1</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</span>
|
||||
|
|
@ -254,18 +240,18 @@
|
|||
<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="s2">"With a flair, |bSender|n looks at |bThe first receiver of emotes.|n "</span>
|
||||
<span class="s2">"With a flair, |mSender|n looks at |bThe first receiver of emotes.|n "</span>
|
||||
<span class="s1">'and |bAnother nice colliding sdesc-guy for tests|n. She says |w"This is a test."|n'</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="s2">"With a flair, |bA nice sender of emotes|n looks at |bReceiver1|n and "</span>
|
||||
<span class="s2">"With a flair, |bA nice sender of emotes|n looks at |mReceiver1|n and "</span>
|
||||
<span class="s1">'|bAnother nice colliding sdesc-guy for tests|n. She says |w"This is a test."|n'</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="s2">"With a flair, |bA nice sender of emotes|n looks at |bThe first "</span>
|
||||
<span class="s1">'receiver of emotes.|n and |bReceiver2|n. She says |w"This is a test."|n'</span><span class="p">,</span>
|
||||
<span class="s1">'receiver of emotes.|n and |mReceiver2|n. She says |w"This is a test."|n'</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_send_case_sensitive_emote"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_send_case_sensitive_emote">[docs]</a> <span class="k">def</span> <span class="nf">test_send_case_sensitive_emote</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
@ -283,20 +269,21 @@
|
|||
<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="s2">"|bSender|n looks at |bthe first receiver of emotes.|n, then "</span>
|
||||
<span class="s2">"|bTHE FIRST RECEIVER OF EMOTES.|n, |bThe first receiver of emotes.|n and "</span>
|
||||
<span class="s2">"|bAnother nice colliding sdesc-guy for tests|n twice."</span><span class="p">,</span>
|
||||
<span class="s2">"|mSender|n looks at |bthe first receiver of emotes.|n. Then, |mSender|n "</span>
|
||||
<span class="s2">"looks at |bTHE FIRST RECEIVER OF EMOTES.|n, |bThe first receiver of emotes.|n "</span>
|
||||
<span class="s2">"and |bAnother nice colliding sdesc-guy for tests|n twice."</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="s2">"|bA nice sender of emotes|n looks at |bReceiver1|n, then |bReceiver1|n, "</span>
|
||||
<span class="s2">"|bReceiver1|n and |bAnother nice colliding sdesc-guy for tests|n twice."</span><span class="p">,</span>
|
||||
<span class="s2">"|bA nice sender of emotes|n looks at |mReceiver1|n. Then, "</span>
|
||||
<span class="s2">"|ba nice sender of emotes|n looks at |mReceiver1|n, |mReceiver1|n "</span>
|
||||
<span class="s2">"and |bAnother nice colliding sdesc-guy for tests|n twice."</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="s2">"|bA nice sender of emotes|n looks at |bthe first receiver of emotes.|n, "</span>
|
||||
<span class="s2">"then |bTHE FIRST RECEIVER OF EMOTES.|n, |bThe first receiver of "</span>
|
||||
<span class="s2">"emotes.|n and |bReceiver2|n twice."</span><span class="p">,</span>
|
||||
<span class="s2">"|bA nice sender of emotes|n looks at |bthe first receiver of emotes.|n. "</span>
|
||||
<span class="s2">"Then, |ba nice sender of emotes|n looks at |bTHE FIRST RECEIVER OF EMOTES.|n, "</span>
|
||||
<span class="s2">"|bThe first receiver of emotes.|n and |mReceiver2|n twice."</span><span class="p">,</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_rpsearch"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_rpsearch">[docs]</a> <span class="k">def</span> <span class="nf">test_rpsearch</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
@ -305,19 +292,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">receiver2</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="n">sdesc2</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">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">"out0"</span><span class="p">,</span> <span class="n">text</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">speaker</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">"receiver of emotes"</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver1</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">speaker</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">"colliding"</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystem.test_regex_tuple_from_key_alias"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_regex_tuple_from_key_alias">[docs]</a> <span class="k">def</span> <span class="nf">test_regex_tuple_from_key_alias</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">speaker</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"foo bar"</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"this thing is a long thing"</span><span class="p">)</span>
|
||||
<span class="n">t0</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">rpsystem</span><span class="o">.</span><span class="n">regex_tuple_from_key_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">)</span>
|
||||
<span class="n">t1</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">rpsystem</span><span class="o">.</span><span class="n">regex_tuple_from_key_alias</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">)</span>
|
||||
<span class="n">t2</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span>
|
||||
<span class="c1"># print(f"t1: {t1 - t0}, t2: {t2 - t1}")</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertLess</span><span class="p">(</span><span class="n">t2</span> <span class="o">-</span> <span class="n">t1</span><span class="p">,</span> <span class="mi">10</span><span class="o">**-</span><span class="mi">4</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="p">(</span><span class="n">Anything</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">speaker</span><span class="o">.</span><span class="n">key</span><span class="p">))</span></div></div>
|
||||
<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">speaker</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s2">"colliding"</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">receiver2</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestRPSystemCommands"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.rpsystem.tests.html#evennia.contrib.rpg.rpsystem.tests.TestRPSystemCommands">[docs]</a><span class="k">class</span> <span class="nc">TestRPSystemCommands</span><span class="p">(</span><span class="n">BaseEvenniaCommandTest</span><span class="p">):</span>
|
||||
|
|
@ -347,7 +322,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">rpsystem</span><span class="o">.</span><span class="n">CmdRecog</span><span class="p">(),</span>
|
||||
<span class="s2">"barfoo as friend"</span><span class="p">,</span>
|
||||
<span class="s2">"Char will now remember BarFoo Character as friend."</span><span class="p">,</span>
|
||||
<span class="s2">"You will now remember BarFoo Character as friend."</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">rpsystem</span><span class="o">.</span><span class="n">CmdRecog</span><span class="p">(),</span>
|
||||
|
|
@ -358,7 +333,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">call</span><span class="p">(</span>
|
||||
<span class="n">rpsystem</span><span class="o">.</span><span class="n">CmdRecog</span><span class="p">(),</span>
|
||||
<span class="s2">"friend"</span><span class="p">,</span>
|
||||
<span class="s2">"Char will now know them only as 'BarFoo Character'"</span><span class="p">,</span>
|
||||
<span class="s2">"You will now know them only as 'BarFoo Character'"</span><span class="p">,</span>
|
||||
<span class="n">cmdstring</span><span class="o">=</span><span class="s2">"forget"</span><span class="p">,</span>
|
||||
<span class="p">)</span></div></div>
|
||||
</pre></div>
|
||||
|
|
|
|||
|
|
@ -363,7 +363,6 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span> <span class="o">=</span> <span class="mf">0.75</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">assertEqual</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_get_values</span><span class="p">(),</span> <span class="p">(</span><span class="mi">5</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mf">0.75</span><span class="p">,</span> <span class="mf">4.5</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TestTraitStatic.test_delete"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestTraitStatic.test_delete">[docs]</a> <span class="k">def</span> <span class="nf">test_delete</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Deleting resets to default."""</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span> <span class="o">=</span> <span class="mf">2.0</span>
|
||||
|
|
@ -404,7 +403,14 @@
|
|||
|
||||
<span class="k">def</span> <span class="nf">_get_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Get (base, mod, mult, value, min, max)."""</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="TestTraitCounter.test_init"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestTraitCounter.test_init">[docs]</a> <span class="k">def</span> <span class="nf">test_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">assertEqual</span><span class="p">(</span>
|
||||
|
|
@ -676,7 +682,14 @@
|
|||
|
||||
<span class="k">def</span> <span class="nf">_get_values</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""Get (base, mod, mult, value, min, max)."""</span>
|
||||
<span class="k">return</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">base</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">mult</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">value</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">min</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">trait</span><span class="o">.</span><span class="n">max</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="TestTraitGauge.test_init"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.tests.html#evennia.contrib.rpg.traits.tests.TestTraitGauge.test_init">[docs]</a> <span class="k">def</span> <span class="nf">test_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">assertEqual</span><span class="p">(</span>
|
||||
|
|
|
|||
|
|
@ -1190,7 +1190,7 @@
|
|||
|
||||
<div class="viewcode-block" id="StaticTrait"><a class="viewcode-back" href="../../../../../api/evennia.contrib.rpg.traits.traits.html#evennia.contrib.rpg.traits.traits.StaticTrait">[docs]</a><span class="k">class</span> <span class="nc">StaticTrait</span><span class="p">(</span><span class="n">Trait</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Static Trait. This is a single value with a modifier, </span>
|
||||
<span class="sd"> Static Trait. This is a single value with a modifier,</span>
|
||||
<span class="sd"> multiplier, and no concept of a 'current' value or min/max etc.</span>
|
||||
|
||||
<span class="sd"> value = (base + mod) * mult</span>
|
||||
|
|
@ -1203,7 +1203,9 @@
|
|||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">status</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{value:11}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="c1"># Helpers</span>
|
||||
<span class="nd">@property</span>
|
||||
|
|
@ -1231,7 +1233,7 @@
|
|||
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The trait's multiplier."""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"mult"</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="nd">@mult</span><span class="o">.</span><span class="n">setter</span>
|
||||
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
|
||||
|
|
@ -1364,16 +1366,16 @@
|
|||
<span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="p">()</span>
|
||||
<span class="n">tdiff</span> <span class="o">=</span> <span class="n">now</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"last_update"</span><span class="p">]</span>
|
||||
<span class="n">current</span> <span class="o">+=</span> <span class="n">rate</span> <span class="o">*</span> <span class="n">tdiff</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="p">(</span><span class="n">current</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="n">current</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span>
|
||||
|
||||
<span class="c1"># we must make sure so we don't overstep our bounds</span>
|
||||
<span class="c1"># even if .mod is included</span>
|
||||
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_passed_ratetarget</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
||||
<span class="n">current</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"ratetarget"</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span>
|
||||
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"ratetarget"</span><span class="p">]</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_stop_timer</span><span class="p">()</span>
|
||||
<span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">_within_boundaries</span><span class="p">(</span><span class="n">value</span><span class="p">):</span>
|
||||
<span class="n">current</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span>
|
||||
<span class="n">current</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_stop_timer</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">_data</span><span class="p">[</span><span class="s2">"last_update"</span><span class="p">]</span> <span class="o">=</span> <span class="n">now</span>
|
||||
|
|
@ -1420,7 +1422,7 @@
|
|||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</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="p">[</span><span class="s2">"mult"</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="nd">@mult</span><span class="o">.</span><span class="n">setter</span>
|
||||
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
|
||||
|
|
@ -1613,7 +1615,9 @@
|
|||
|
||||
<span class="k">def</span> <span class="fm">__str__</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="n">status</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{value:4}</span><span class="s2"> / </span><span class="si">{base:4}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">value</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">base</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="s2">"</span><span class="si">{name:12}</span><span class="s2"> </span><span class="si">{status}</span><span class="s2"> (</span><span class="si">{mod:+3}</span><span class="s2">) (* </span><span class="si">{mult:.2f}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="n">name</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">status</span><span class="o">=</span><span class="n">status</span><span class="p">,</span> <span class="n">mod</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">,</span> <span class="n">mult</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">base</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
@ -1638,11 +1642,11 @@
|
|||
<span class="k">if</span> <span class="n">value</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o"><</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span><span class="p">:</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">min</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">base</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"mod"</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
||||
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</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="p">[</span><span class="s2">"mult"</span><span class="p">]</span>
|
||||
|
||||
|
||||
<span class="nd">@mult</span><span class="o">.</span><span class="n">setter</span>
|
||||
<span class="k">def</span> <span class="nf">mult</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">amount</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="nb">type</span><span class="p">(</span><span class="n">amount</span><span class="p">)</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">):</span>
|
||||
|
|
@ -1663,7 +1667,7 @@
|
|||
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"min"</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_keys</span><span class="p">[</span><span class="s2">"min"</span><span class="p">]</span>
|
||||
<span class="k">elif</span> <span class="nb">type</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="ow">in</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="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"min"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"min"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">)</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">max</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
@ -1686,7 +1690,7 @@
|
|||
<span class="k">def</span> <span class="nf">current</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""The `current` value of the gauge."""</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">_update_current</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</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">get</span><span class="p">(</span><span class="s2">"current"</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">))</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_enforce_boundaries</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">get</span><span class="p">(</span><span class="s2">"current"</span><span class="p">,</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span><span class="p">))</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="nd">@current</span><span class="o">.</span><span class="n">setter</span>
|
||||
|
|
@ -1697,7 +1701,7 @@
|
|||
<span class="nd">@current</span><span class="o">.</span><span class="n">deleter</span>
|
||||
<span class="k">def</span> <span class="nf">current</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="s2">"Resets current back to 'full'"</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"current"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span><span class="p">[</span><span class="s2">"current"</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">base</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">mod</span><span class="p">)</span> <span class="o">*</span> <span class="bp">self</span><span class="o">.</span><span class="n">mult</span>
|
||||
|
||||
<span class="nd">@property</span>
|
||||
<span class="k">def</span> <span class="nf">value</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -54,9 +54,13 @@
|
|||
<span class="c1"># since we use them (e.g. as command names).</span>
|
||||
<span class="c1"># Lunr's default ignore-word list is found here:</span>
|
||||
<span class="c1"># https://github.com/yeraydiazdiaz/lunr.py/blob/master/lunr/stop_word_filter.py</span>
|
||||
<span class="n">_LUNR_STOP_WORD_FILTER_EXCEPTIONS</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="p">[</span><span class="s2">"about"</span><span class="p">,</span> <span class="s2">"might"</span><span class="p">,</span> <span class="s2">"get"</span><span class="p">,</span> <span class="s2">"who"</span><span class="p">,</span> <span class="s2">"say"</span><span class="p">]</span> <span class="o">+</span> <span class="n">settings</span><span class="o">.</span><span class="n">LUNR_STOP_WORD_FILTER_EXCEPTIONS</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">_LUNR_STOP_WORD_FILTER_EXCEPTIONS</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="s2">"about"</span><span class="p">,</span>
|
||||
<span class="s2">"might"</span><span class="p">,</span>
|
||||
<span class="s2">"get"</span><span class="p">,</span>
|
||||
<span class="s2">"who"</span><span class="p">,</span>
|
||||
<span class="s2">"say"</span><span class="p">,</span>
|
||||
<span class="p">]</span> <span class="o">+</span> <span class="n">settings</span><span class="o">.</span><span class="n">LUNR_STOP_WORD_FILTER_EXCEPTIONS</span>
|
||||
|
||||
|
||||
<span class="n">_LUNR</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
|
|
|
|||
|
|
@ -515,6 +515,7 @@
|
|||
<span class="n">category</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="kc">None</span>
|
||||
<span class="k">return</span> <span class="nb">bool</span><span class="p">(</span><span class="n">accessing_obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tagkey</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">))</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="is_ooc"><a class="viewcode-back" href="../../../api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.is_ooc">[docs]</a><span class="k">def</span> <span class="nf">is_ooc</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">accessed_obj</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage:</span>
|
||||
|
|
@ -531,13 +532,14 @@
|
|||
<span class="n">session</span> <span class="o">=</span> <span class="n">accessed_obj</span><span class="o">.</span><span class="n">session</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="n">session</span> <span class="o">=</span> <span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="c1"># note-this doesn't work well</span>
|
||||
<span class="c1"># for high multisession mode. We may need</span>
|
||||
<span class="c1"># to change to sessiondb to resolve this</span>
|
||||
<span class="c1"># for high multisession mode. We may need</span>
|
||||
<span class="c1"># to change to sessiondb to resolve this</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="ow">not</span> <span class="n">account</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">(</span><span class="n">session</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">TypeError</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="ow">not</span> <span class="n">session</span><span class="o">.</span><span class="n">get_puppet</span><span class="p">()</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="objtag"><a class="viewcode-back" href="../../../api/evennia.locks.lockfuncs.html#evennia.locks.lockfuncs.objtag">[docs]</a><span class="k">def</span> <span class="nf">objtag</span><span class="p">(</span><span class="n">accessing_obj</span><span class="p">,</span> <span class="n">accessed_obj</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage:</span>
|
||||
|
|
|
|||
|
|
@ -1270,6 +1270,8 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">at_object_creation</span><span class="p">()</span>
|
||||
<span class="c1"># initialize Attribute/TagProperties</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_createdict"</span><span class="p">):</span>
|
||||
<span class="c1"># this will only be set if the utils.create function</span>
|
||||
|
|
|
|||
|
|
@ -570,8 +570,10 @@
|
|||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># This will load the prototypes the first time they are searched</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">_MODULE_PROTOTYPE_MODULES</span><span class="p">:</span>
|
||||
<span class="n">loaded</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">load_module_prototypes</span><span class="p">,</span> <span class="s2">"_LOADED"</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">loaded</span><span class="p">:</span>
|
||||
<span class="n">load_module_prototypes</span><span class="p">()</span>
|
||||
<span class="nb">setattr</span><span class="p">(</span><span class="n">load_module_prototypes</span><span class="p">,</span> <span class="s2">"_LOADED"</span><span class="p">,</span> <span class="kc">True</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># prototype keys are always in lowecase</span>
|
||||
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
|
||||
|
|
|
|||
|
|
@ -442,7 +442,10 @@
|
|||
<span class="sd"> overriding the call (unused by default).</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">basetype_setup</span><span class="p">()</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">at_script_creation</span><span class="p">()</span>
|
||||
<span class="c1"># initialize Attribute/TagProperties</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">init_evennia_properties</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="s2">"_createdict"</span><span class="p">):</span>
|
||||
<span class="c1"># this will only be set if the utils.create_script</span>
|
||||
|
|
@ -513,6 +516,14 @@
|
|||
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">basetype_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Changes fundamental aspects of the type. Usually changes are made in at_script creation</span>
|
||||
<span class="sd"> instead.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">at_init</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Called when the Script is cached in the idmapper. This is usually more reliable</span>
|
||||
|
|
|
|||
|
|
@ -627,9 +627,9 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">ticker_pool</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span><span class="n">interval</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">ticker_storage</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
||||
<span class="p">(</span><span class="n">store_key</span><span class="p">,</span> <span class="n">store_key</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">store_key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ticker_storage</span>
|
||||
<span class="k">if</span> <span class="n">store_key</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="o">!=</span> <span class="n">interval</span>
|
||||
<span class="p">(</span><span class="n">store_key</span><span class="p">,</span> <span class="n">store_value</span><span class="p">)</span>
|
||||
<span class="k">for</span> <span class="n">store_key</span><span class="p">,</span> <span class="n">store_value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ticker_storage</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="n">store_key</span><span class="p">[</span><span class="mi">3</span><span class="p">]</span> <span class="o">!=</span> <span class="n">interval</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">ticker_storage</span> <span class="o">=</span> <span class="p">{}</span>
|
||||
|
|
|
|||
|
|
@ -2358,9 +2358,11 @@
|
|||
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"makemessages"</span><span class="p">,</span> <span class="s2">"compilemessages"</span><span class="p">):</span>
|
||||
<span class="c1"># some commands don't require the presence of a game directory to work</span>
|
||||
<span class="n">need_gamedir</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="k">if</span> <span class="n">CURRENT_DIR</span> <span class="o">!=</span> <span class="n">EVENNIA_LIB</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span><span class="s2">"You must stand in the evennia/evennia/ folder (where the 'locale/' "</span>
|
||||
<span class="s2">"folder is located) to run this command."</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">CURRENT_DIR</span> <span class="o">!=</span> <span class="n">EVENNIA_LIB</span><span class="p">:</span>
|
||||
<span class="nb">print</span><span class="p">(</span>
|
||||
<span class="s2">"You must stand in the evennia/evennia/ folder (where the 'locale/' "</span>
|
||||
<span class="s2">"folder is located) to run this command."</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">sys</span><span class="o">.</span><span class="n">exit</span><span class="p">()</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">option</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"shell"</span><span class="p">,</span> <span class="s2">"check"</span><span class="p">,</span> <span class="s2">"makemigrations"</span><span class="p">,</span> <span class="s2">"createsuperuser"</span><span class="p">,</span> <span class="s2">"shell_plus"</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -465,6 +465,7 @@
|
|||
<span class="n">logger</span><span class="o">.</span><span class="n">log_msg</span><span class="p">(</span><span class="s2">"Evennia Server successfully restarted in 'reset' mode."</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">mode</span> <span class="o">==</span> <span class="s2">"shutdown"</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="kn">import</span> <span class="n">ObjectDB</span>
|
||||
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">at_server_cold_start</span><span class="p">()</span>
|
||||
<span class="c1"># clear eventual lingering session storages</span>
|
||||
<span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">clear_all_sessids</span><span class="p">()</span>
|
||||
|
|
|
|||
|
|
@ -218,7 +218,7 @@
|
|||
|
||||
<span class="n">attrhandler_name</span> <span class="o">=</span> <span class="s2">"attributes"</span>
|
||||
|
||||
<div class="viewcode-block" id="AttributeProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">strattr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">lockstring</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="AttributeProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.__init__">[docs]</a> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">strattr</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">lockstring</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="n">autocreate</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Initialize an Attribute as a property descriptor.</span>
|
||||
|
||||
|
|
@ -230,12 +230,12 @@
|
|||
<span class="sd"> lockstring (str): This is not itself useful with the property, but only if</span>
|
||||
<span class="sd"> using the full AttributeHandler.get(accessing_obj=...) to access the</span>
|
||||
<span class="sd"> Attribute.</span>
|
||||
<span class="sd"> autocreate (bool): If an un-found Attr should lead to auto-creating the</span>
|
||||
<span class="sd"> Attribute (with the default value). If `False`, the property will</span>
|
||||
<span class="sd"> return the default value until it has been explicitly set. This means</span>
|
||||
<span class="sd"> less database accesses, but also means the property will have no</span>
|
||||
<span class="sd"> corresponding Attribute if wanting to access it directly via the</span>
|
||||
<span class="sd"> AttributeHandler (it will also not show up in `examine`).</span>
|
||||
<span class="sd"> autocreate (bool): True by default; this means Evennia makes sure to create a new</span>
|
||||
<span class="sd"> copy of the Attribute (with the default value) whenever a new object with this</span>
|
||||
<span class="sd"> property is created. If `False`, no Attribute will be created until the property</span>
|
||||
<span class="sd"> is explicitly assigned a value. This makes it more efficient while it retains</span>
|
||||
<span class="sd"> its default (there's no db access), but without an actual Attribute generated,</span>
|
||||
<span class="sd"> one cannot access it via .db, the AttributeHandler or see it with `examine`.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_default</span> <span class="o">=</span> <span class="n">default</span>
|
||||
|
|
@ -260,12 +260,14 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
|
||||
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
|
||||
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
|
||||
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
|
||||
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">,</span>
|
||||
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">at_get</span><span class="p">(</span>
|
||||
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
|
||||
<span class="n">default</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">,</span>
|
||||
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
|
||||
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
|
||||
<span class="n">raise_exception</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">_autocreate</span><span class="p">:</span>
|
||||
|
|
@ -273,8 +275,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="fm">__set__</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_default</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">raise</span>
|
||||
<span class="k">finally</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">value</span>
|
||||
<span class="k">return</span> <span class="n">value</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__set__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -284,7 +285,7 @@
|
|||
<span class="p">(</span>
|
||||
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span>
|
||||
<span class="n">value</span><span class="p">,</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">at_set</span><span class="p">(</span><span class="n">value</span><span class="p">),</span>
|
||||
<span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span>
|
||||
<span class="n">lockstring</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_lockstring</span><span class="p">,</span>
|
||||
<span class="n">strattr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_strattr</span><span class="p">,</span>
|
||||
|
|
@ -293,10 +294,43 @@
|
|||
|
||||
<span class="k">def</span> <span class="fm">__delete__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Called when running `del` on the field. Will remove/clear the Attribute.</span>
|
||||
<span class="sd"> Called when running `del` on the property. Will remove/clear the Attribute. Note that</span>
|
||||
<span class="sd"> the Attribute will be recreated next retrieval unless the AttributeProperty is also</span>
|
||||
<span class="sd"> removed in code!</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="p">(</span><span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">))</span></div>
|
||||
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">attrhandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="AttributeProperty.at_set"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.at_set">[docs]</a> <span class="k">def</span> <span class="nf">at_set</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The value to set is passed through the method. It can be used to customize/validate</span>
|
||||
<span class="sd"> the input in a custom child class.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> value (any): The value about to the stored in this Attribute.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> any: The value to store.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> AttributeError: If the value is invalid to store.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">value</span></div>
|
||||
|
||||
<div class="viewcode-block" id="AttributeProperty.at_get"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.AttributeProperty.at_get">[docs]</a> <span class="k">def</span> <span class="nf">at_get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> The value returned from the Attribute is passed through this method. It can be used</span>
|
||||
<span class="sd"> to react to the retrieval or modify the result in some way.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> value (any): Value returned from the Attribute.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> any: The value to return to the caller.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">value</span></div></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="NAttributeProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.attributes.html#evennia.typeclasses.attributes.NAttributeProperty">[docs]</a><span class="k">class</span> <span class="nc">NAttributeProperty</span><span class="p">(</span><span class="n">AttributeProperty</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -328,7 +328,7 @@
|
|||
<span class="n">categories</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">category</span><span class="p">)</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
<span class="n">n_keys</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">keys</span><span class="p">)</span>
|
||||
<span class="n">n_categories</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">categories</span><span class="p">)</span>
|
||||
<span class="n">unique_categories</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">categories</span><span class="p">))</span>
|
||||
<span class="n">unique_categories</span> <span class="o">=</span> <span class="nb">set</span><span class="p">(</span><span class="n">categories</span><span class="p">)</span>
|
||||
<span class="n">n_unique_categories</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">unique_categories</span><span class="p">)</span>
|
||||
|
||||
<span class="n">dbmodel</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">model</span><span class="o">.</span><span class="n">__dbclass__</span><span class="o">.</span><span class="vm">__name__</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
||||
|
|
|
|||
|
|
@ -81,11 +81,12 @@
|
|||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="p">(</span>
|
||||
<span class="n">Attribute</span><span class="p">,</span>
|
||||
<span class="n">AttributeHandler</span><span class="p">,</span>
|
||||
<span class="n">AttributeProperty</span><span class="p">,</span>
|
||||
<span class="n">ModelAttributeBackend</span><span class="p">,</span>
|
||||
<span class="n">InMemoryAttributeBackend</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.attributes</span> <span class="kn">import</span> <span class="n">DbHolder</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.tags</span> <span class="kn">import</span> <span class="n">Tag</span><span class="p">,</span> <span class="n">TagHandler</span><span class="p">,</span> <span class="n">AliasHandler</span><span class="p">,</span> <span class="n">PermissionHandler</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.typeclasses.tags</span> <span class="kn">import</span> <span class="n">Tag</span><span class="p">,</span> <span class="n">TagHandler</span><span class="p">,</span> <span class="n">AliasHandler</span><span class="p">,</span> <span class="n">PermissionHandler</span><span class="p">,</span> <span class="n">TagProperty</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.idmapper.models</span> <span class="kn">import</span> <span class="n">SharedMemoryModel</span><span class="p">,</span> <span class="n">SharedMemoryModelBase</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.server.signals</span> <span class="kn">import</span> <span class="n">SIGNAL_TYPED_OBJECT_POST_RENAME</span>
|
||||
|
|
@ -367,6 +368,18 @@
|
|||
<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">set_class_from_typeclass</span><span class="p">(</span><span class="n">typeclass_path</span><span class="o">=</span><span class="n">typeclass_path</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TypedObject.init_evennia_properties"><a class="viewcode-back" href="../../../api/evennia.typeclasses.models.html#evennia.typeclasses.models.TypedObject.init_evennia_properties">[docs]</a> <span class="k">def</span> <span class="nf">init_evennia_properties</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Called by creation methods; makes sure to initialize Attribute/TagProperties</span>
|
||||
<span class="sd"> by fetching them once.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">for</span> <span class="n">propkey</span><span class="p">,</span> <span class="n">prop</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__dict__</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
|
||||
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prop</span><span class="p">,</span> <span class="p">(</span><span class="n">AttributeProperty</span><span class="p">,</span> <span class="n">TagProperty</span><span class="p">)):</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="nb">getattr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">propkey</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></div>
|
||||
|
||||
<span class="c1"># initialize all handlers in a lazy fashion</span>
|
||||
<div class="viewcode-block" id="TypedObject.attributes"><a class="viewcode-back" href="../../../api/evennia.typeclasses.models.html#evennia.typeclasses.models.TypedObject.attributes">[docs]</a> <span class="nd">@lazy_property</span>
|
||||
<span class="k">def</span> <span class="nf">attributes</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -139,6 +139,72 @@
|
|||
<span class="c1">#</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TagProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagProperty">[docs]</a><span class="k">class</span> <span class="nc">TagProperty</span><span class="p">:</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Tag property descriptor. Allows for setting tags on an object as Django-like 'fields'</span>
|
||||
<span class="sd"> on the class level. Since Tags are almost always used for querying, Tags are always</span>
|
||||
<span class="sd"> created/assigned along with the object. Make sure the property/tagname does not collide</span>
|
||||
<span class="sd"> with an existing method/property on the class. If it does, you must use tags.add()</span>
|
||||
<span class="sd"> instead.</span>
|
||||
|
||||
<span class="sd"> Example:</span>
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> class Character(DefaultCharacter):</span>
|
||||
<span class="sd"> mytag = TagProperty() # category=None</span>
|
||||
<span class="sd"> mytag2 = TagProperty(category="tagcategory")</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">taghandler_name</span> <span class="o">=</span> <span class="s2">"tags"</span>
|
||||
|
||||
<div class="viewcode-block" id="TagProperty.__init__"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagProperty.__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">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_category</span> <span class="o">=</span> <span class="n">category</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_data</span> <span class="o">=</span> <span class="n">data</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="s2">""</span></div>
|
||||
|
||||
<span class="k">def</span> <span class="nf">__set_name__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="bp">cls</span><span class="p">,</span> <span class="n">name</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Called when descriptor is first assigned to the class (not the instance!).</span>
|
||||
<span class="sd"> It is called with the name of the field.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_key</span> <span class="o">=</span> <span class="n">name</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__get__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">owner</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Called when accessing the tag as a property on the instance.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">taghandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">get</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">raise_exception</span><span class="o">=</span><span class="kc">True</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="fm">__set__</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__set__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">,</span> <span class="n">category</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Assign a new category to the tag. It's not possible to set 'data' this way.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_category</span> <span class="o">=</span> <span class="n">category</span>
|
||||
<span class="p">(</span>
|
||||
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">taghandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">add</span><span class="p">(</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_data</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="fm">__delete__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">instance</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Called when running `del` on the property. Will disconnect the object from</span>
|
||||
<span class="sd"> the Tag. Note that the tag will be readded on next fetch unless the</span>
|
||||
<span class="sd"> TagProperty is also removed in code!</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="nb">getattr</span><span class="p">(</span><span class="n">instance</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">taghandler_name</span><span class="p">)</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_key</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">_category</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TagHandler"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler">[docs]</a><span class="k">class</span> <span class="nc">TagHandler</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Generic tag-handler. Accessed via TypedObject.tags.</span>
|
||||
|
|
@ -403,7 +469,15 @@
|
|||
|
||||
<span class="k">return</span> <span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">ret</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TagHandler.get"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">return_tagobj</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<div class="viewcode-block" id="TagHandler.get"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler.get">[docs]</a> <span class="k">def</span> <span class="nf">get</span><span class="p">(</span>
|
||||
<span class="bp">self</span><span class="p">,</span>
|
||||
<span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
||||
<span class="n">return_tagobj</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">return_list</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="n">raise_exception</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Get the tag for the given key, category or combination of the two.</span>
|
||||
|
||||
|
|
@ -418,6 +492,8 @@
|
|||
<span class="sd"> instead of a string representation of the Tag.</span>
|
||||
<span class="sd"> return_list (bool, optional): Always return a list, regardless</span>
|
||||
<span class="sd"> of number of matches.</span>
|
||||
<span class="sd"> raise_exception (bool, optional): Raise AttributeError if no matches</span>
|
||||
<span class="sd"> are found.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> tags (list): The matches, either string</span>
|
||||
|
|
@ -425,6 +501,9 @@
|
|||
<span class="sd"> depending on `return_tagobj`. If 'default' is set, this</span>
|
||||
<span class="sd"> will be a list with the default value as its only element.</span>
|
||||
|
||||
<span class="sd"> Raises:</span>
|
||||
<span class="sd"> AttributeError: If finding no matches and `raise_exception` is True.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">ret</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">keystr</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
|
||||
|
|
@ -435,9 +514,14 @@
|
|||
<span class="k">for</span> <span class="n">tag</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_getcache</span><span class="p">(</span><span class="n">keystr</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span>
|
||||
<span class="p">]</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">return_list</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">ret</span> <span class="k">if</span> <span class="n">ret</span> <span class="k">else</span> <span class="p">[</span><span class="n">default</span><span class="p">]</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
<span class="k">return</span> <span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="p">(</span><span class="n">ret</span> <span class="k">if</span> <span class="n">ret</span> <span class="k">else</span> <span class="n">default</span><span class="p">)</span></div>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">ret</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">raise_exception</span><span class="p">:</span>
|
||||
<span class="k">raise</span> <span class="ne">AttributeError</span><span class="p">(</span><span class="sa">f</span><span class="s2">"No tags found matching input </span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">, </span><span class="si">{</span><span class="n">category</span><span class="si">}</span><span class="s2">."</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">return_list</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="p">[</span><span class="n">default</span><span class="p">]</span> <span class="k">if</span> <span class="n">default</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="p">[]</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">default</span>
|
||||
<span class="k">return</span> <span class="n">ret</span> <span class="k">if</span> <span class="n">return_list</span> <span class="k">else</span> <span class="p">(</span><span class="n">ret</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="n">ret</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TagHandler.remove"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.TagHandler.remove">[docs]</a> <span class="k">def</span> <span class="nf">remove</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -563,6 +647,22 @@
|
|||
<span class="k">return</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">all</span><span class="p">())</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AliasProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.AliasProperty">[docs]</a><span class="k">class</span> <span class="nc">AliasProperty</span><span class="p">(</span><span class="n">TagProperty</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Allows for setting aliases like Django fields:</span>
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> class Character(DefaultCharacter):</span>
|
||||
<span class="sd"> # note that every character will get the alias bob. Make sure</span>
|
||||
<span class="sd"> # the alias property does not collide with an existing method</span>
|
||||
<span class="sd"> # or property on the class.</span>
|
||||
<span class="sd"> bob = AliasProperty()</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">taghandler_name</span> <span class="o">=</span> <span class="s2">"aliases"</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="AliasHandler"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.AliasHandler">[docs]</a><span class="k">class</span> <span class="nc">AliasHandler</span><span class="p">(</span><span class="n">TagHandler</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A handler for the Alias Tag type.</span>
|
||||
|
|
@ -572,6 +672,21 @@
|
|||
<span class="n">_tagtype</span> <span class="o">=</span> <span class="s2">"alias"</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PermissionProperty"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.PermissionProperty">[docs]</a><span class="k">class</span> <span class="nc">PermissionProperty</span><span class="p">(</span><span class="n">TagProperty</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Allows for setting permissions like Django fields:</span>
|
||||
<span class="sd"> ::</span>
|
||||
|
||||
<span class="sd"> class Character(DefaultCharacter):</span>
|
||||
<span class="sd"> # note that every character will get this permission! Make</span>
|
||||
<span class="sd"> # sure it doesn't collide with an existing method or property.</span>
|
||||
<span class="sd"> myperm = PermissionProperty()</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">taghandler_name</span> <span class="o">=</span> <span class="s2">"permissions"</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="PermissionHandler"><a class="viewcode-back" href="../../../api/evennia.typeclasses.tags.html#evennia.typeclasses.tags.PermissionHandler">[docs]</a><span class="k">class</span> <span class="nc">PermissionHandler</span><span class="p">(</span><span class="n">TagHandler</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> A handler for the Permission Tag type.</span>
|
||||
|
|
|
|||
|
|
@ -54,6 +54,7 @@
|
|||
|
||||
|
||||
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span>
|
||||
<span class="kn">from</span> <span class="nn">django.db.utils</span> <span class="kn">import</span> <span class="n">OperationalError</span><span class="p">,</span> <span class="n">ProgrammingError</span>
|
||||
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">class_from_module</span><span class="p">,</span> <span class="n">callables_from_module</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
|
||||
|
|
@ -209,7 +210,6 @@
|
|||
|
||||
<span class="c1"># store a hash representation of the setup</span>
|
||||
<span class="n">script</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="s2">"_global_script_settings"</span><span class="p">,</span> <span class="n">compare_hash</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="s2">"settings_hash"</span><span class="p">)</span>
|
||||
<span class="n">script</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">script</span>
|
||||
|
||||
|
|
@ -225,9 +225,16 @@
|
|||
<span class="c1"># populate self.typeclass_storage</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">load_data</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># start registered scripts</span>
|
||||
<span class="c1"># make sure settings-defined scripts are loaded</span>
|
||||
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">loaded_data</span><span class="p">:</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_load_script</span><span class="p">(</span><span class="n">key</span><span class="p">)</span></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">_load_script</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="c1"># start all global scripts</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="k">for</span> <span class="n">script</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_scripts</span><span class="p">():</span>
|
||||
<span class="n">script</span><span class="o">.</span><span class="n">start</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="p">(</span><span class="n">OperationalError</span><span class="p">,</span> <span class="n">ProgrammingError</span><span class="p">):</span>
|
||||
<span class="c1"># this can happen if db is not loaded yet (such as when building docs)</span>
|
||||
<span class="k">pass</span></div>
|
||||
|
||||
<div class="viewcode-block" id="GlobalScriptContainer.load_data"><a class="viewcode-back" href="../../../api/evennia.utils.containers.html#evennia.utils.containers.GlobalScriptContainer.load_data">[docs]</a> <span class="k">def</span> <span class="nf">load_data</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@
|
|||
<span class="kn">from</span> <span class="nn">collections.abc</span> <span class="kn">import</span> <span class="n">MutableSequence</span><span class="p">,</span> <span class="n">MutableSet</span><span class="p">,</span> <span class="n">MutableMapping</span>
|
||||
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span>
|
||||
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span><span class="p">,</span> <span class="n">UnpicklingError</span>
|
||||
<span class="k">except</span> <span class="ne">ImportError</span><span class="p">:</span>
|
||||
<span class="kn">from</span> <span class="nn">pickle</span> <span class="kn">import</span> <span class="n">dumps</span><span class="p">,</span> <span class="n">loads</span>
|
||||
<span class="kn">from</span> <span class="nn">django.core.exceptions</span> <span class="kn">import</span> <span class="n">ObjectDoesNotExist</span>
|
||||
|
|
@ -281,6 +281,9 @@
|
|||
<span class="k">def</span> <span class="fm">__gt__</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">__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="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>
|
||||
|
|
@ -492,7 +495,9 @@
|
|||
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"_SaverOrderedDict"</span><span class="p">,</span> <span class="s2">"OrderedDict"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">OrderedDict</span><span class="p">([(</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">),</span> <span class="n">_iter</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">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()])</span>
|
||||
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"_SaverDefaultDict"</span><span class="p">,</span> <span class="s2">"defaultdict"</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">{</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">_iter</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">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()})</span>
|
||||
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span>
|
||||
<span class="n">obj</span><span class="o">.</span><span class="n">default_factory</span><span class="p">,</span> <span class="p">{</span><span class="n">_iter</span><span class="p">(</span><span class="n">key</span><span class="p">):</span> <span class="n">_iter</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">obj</span><span class="o">.</span><span class="n">items</span><span class="p">()}</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">tname</span> <span class="ow">in</span> <span class="n">_DESERIALIZE_MAPPING</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">_DESERIALIZE_MAPPING</span><span class="p">[</span><span class="n">tname</span><span class="p">](</span><span class="n">_iter</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">obj</span><span class="p">)</span>
|
||||
<span class="k">elif</span> <span class="n">is_iter</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
||||
|
|
@ -644,7 +649,9 @@
|
|||
|
||||
<span class="k">def</span> <span class="nf">process_item</span><span class="p">(</span><span class="n">item</span><span class="p">):</span>
|
||||
<span class="sd">"""Recursive processor and identification of data"""</span>
|
||||
|
||||
<span class="n">dtype</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">item</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="k">return</span> <span class="n">item</span>
|
||||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">tuple</span><span class="p">:</span>
|
||||
|
|
@ -654,7 +661,10 @@
|
|||
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">_SaverDict</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">dict</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">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">defaultdict</span><span class="p">,</span> <span class="n">_SaverDefaultDict</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</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="k">return</span> <span class="n">defaultdict</span><span class="p">(</span>
|
||||
<span class="n">item</span><span class="o">.</span><span class="n">default_factory</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">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="nb">set</span><span class="p">,</span> <span class="n">_SaverSet</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="nb">set</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="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">OrderedDict</span><span class="p">,</span> <span class="n">_SaverOrderedDict</span><span class="p">):</span>
|
||||
|
|
@ -662,7 +672,20 @@
|
|||
<span class="k">elif</span> <span class="n">dtype</span> <span class="ow">in</span> <span class="p">(</span><span class="n">deque</span><span class="p">,</span> <span class="n">_SaverDeque</span><span class="p">):</span>
|
||||
<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">"__iter__"</span><span class="p">):</span>
|
||||
<span class="c1"># not one of the base types</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">"__serialize_dbobjs__"</span><span class="p">):</span>
|
||||
<span class="c1"># Allows custom serialization of any dbobjects embedded in</span>
|
||||
<span class="c1"># the item that Evennia will otherwise not find (these would</span>
|
||||
<span class="c1"># otherwise lead to an error). Use the dbserialize helper from</span>
|
||||
<span class="c1"># this method.</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">item</span><span class="o">.</span><span class="n">__serialize_dbobjs__</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
||||
<span class="c1"># we catch typerrors so we can handle both classes (requiring</span>
|
||||
<span class="c1"># classmethods) and instances</span>
|
||||
<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">"__iter__"</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>
|
||||
|
|
@ -720,7 +743,10 @@
|
|||
<span class="k">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">dict</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">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="n">defaultdict</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="n">defaultdict</span><span class="p">(</span><span class="n">item</span><span class="o">.</span><span class="n">default_factory</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="k">return</span> <span class="n">defaultdict</span><span class="p">(</span>
|
||||
<span class="n">item</span><span class="o">.</span><span class="n">default_factory</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">elif</span> <span class="n">dtype</span> <span class="o">==</span> <span class="nb">set</span><span class="p">:</span>
|
||||
<span class="k">return</span> <span class="nb">set</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="n">dtype</span> <span class="o">==</span> <span class="n">OrderedDict</span><span class="p">:</span>
|
||||
|
|
@ -734,6 +760,22 @@
|
|||
<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">"__deserialize_dbobjs__"</span><span class="p">):</span>
|
||||
<span class="c1"># this allows the object to custom-deserialize any embedded dbobjs</span>
|
||||
<span class="c1"># that we previously serialized with __serialize_dbobjs__.</span>
|
||||
<span class="c1"># use the dbunserialize helper in this module.</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">item</span><span class="o">.</span><span class="n">__deserialize_dbobjs__</span><span class="p">()</span>
|
||||
<span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="n">UnpicklingError</span><span class="p">):</span>
|
||||
<span class="c1"># handle recoveries both of classes (requiring classmethods</span>
|
||||
<span class="c1"># or instances. Unpickling errors can happen when re-loading the</span>
|
||||
<span class="c1"># data from cache (because the hidden entity was already</span>
|
||||
<span class="c1"># deserialized and stored back on the object, unpickling it</span>
|
||||
<span class="c1"># again fails). TODO: Maybe one could avoid this retry in a</span>
|
||||
<span class="c1"># more graceful way?</span>
|
||||
<span class="k">pass</span>
|
||||
|
||||
<span class="k">return</span> <span class="n">item</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">process_tree</span><span class="p">(</span><span class="n">item</span><span class="p">,</span> <span class="n">parent</span><span class="p">):</span>
|
||||
|
|
|
|||
|
|
@ -316,12 +316,13 @@
|
|||
|
||||
<span class="kn">from</span> <span class="nn">ast</span> <span class="kn">import</span> <span class="n">literal_eval</span>
|
||||
<span class="kn">from</span> <span class="nn">fnmatch</span> <span class="kn">import</span> <span class="n">fnmatch</span>
|
||||
<span class="kn">from</span> <span class="nn">math</span> <span class="kn">import</span> <span class="n">ceil</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">inspect</span> <span class="kn">import</span> <span class="n">isfunction</span><span class="p">,</span> <span class="n">getargspec</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">Command</span><span class="p">,</span> <span class="n">CmdSet</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">logger</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.evtable</span> <span class="kn">import</span> <span class="n">EvTable</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.evtable</span> <span class="kn">import</span> <span class="n">EvTable</span><span class="p">,</span> <span class="n">EvColumn</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="kn">import</span> <span class="n">strip_ansi</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="kn">import</span> <span class="n">mod_import</span><span class="p">,</span> <span class="n">make_iter</span><span class="p">,</span> <span class="n">pad</span><span class="p">,</span> <span class="n">to_str</span><span class="p">,</span> <span class="n">m_len</span><span class="p">,</span> <span class="n">is_iter</span><span class="p">,</span> <span class="n">dedent</span><span class="p">,</span> <span class="n">crop</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.commands</span> <span class="kn">import</span> <span class="n">cmdhandler</span>
|
||||
|
|
@ -1252,7 +1253,6 @@
|
|||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> optionlist (list): List of (key, description) tuples for every</span>
|
||||
<span class="sd"> option related to this node.</span>
|
||||
<span class="sd"> caller (Object, Account or None, optional): The caller of the node.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> options (str): The formatted option display.</span>
|
||||
|
|
@ -1271,7 +1271,7 @@
|
|||
<span class="n">table</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">desc</span> <span class="ow">in</span> <span class="n">optionlist</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">key</span> <span class="ow">or</span> <span class="n">desc</span><span class="p">:</span>
|
||||
<span class="n">desc_string</span> <span class="o">=</span> <span class="s2">": </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">desc</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">desc_string</span> <span class="o">=</span> <span class="sa">f</span><span class="s2">": </span><span class="si">{</span><span class="n">desc</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="n">desc</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="n">table_width_max</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span>
|
||||
<span class="n">table_width_max</span><span class="p">,</span>
|
||||
<span class="nb">max</span><span class="p">(</span><span class="n">m_len</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">key</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">))</span>
|
||||
|
|
@ -1281,42 +1281,31 @@
|
|||
<span class="n">raw_key</span> <span class="o">=</span> <span class="n">strip_ansi</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
||||
<span class="k">if</span> <span class="n">raw_key</span> <span class="o">!=</span> <span class="n">key</span><span class="p">:</span>
|
||||
<span class="c1"># already decorations in key definition</span>
|
||||
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">" |lc</span><span class="si">%s</span><span class="s2">|lt</span><span class="si">%s</span><span class="s2">|le</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">raw_key</span><span class="p">,</span> <span class="n">key</span><span class="p">,</span> <span class="n">desc_string</span><span class="p">))</span>
|
||||
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">" |lc</span><span class="si">{</span><span class="n">raw_key</span><span class="si">}</span><span class="s2">|lt</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">|le</span><span class="si">{</span><span class="n">desc_string</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># add a default white color to key</span>
|
||||
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">" |lc</span><span class="si">%s</span><span class="s2">|lt|w</span><span class="si">%s</span><span class="s2">|n|le</span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">raw_key</span><span class="p">,</span> <span class="n">raw_key</span><span class="p">,</span> <span class="n">desc_string</span><span class="p">))</span>
|
||||
<span class="n">ncols</span> <span class="o">=</span> <span class="n">_MAX_TEXT_WIDTH</span> <span class="o">//</span> <span class="n">table_width_max</span> <span class="c1"># number of ncols</span>
|
||||
<span class="n">table</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="sa">f</span><span class="s2">" |lc</span><span class="si">{</span><span class="n">raw_key</span><span class="si">}</span><span class="s2">|lt|w</span><span class="si">{</span><span class="n">key</span><span class="si">}</span><span class="s2">|n|le</span><span class="si">{</span><span class="n">desc_string</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
|
||||
<span class="n">ncols</span> <span class="o">=</span> <span class="n">_MAX_TEXT_WIDTH</span> <span class="o">//</span> <span class="n">table_width_max</span> <span class="c1"># number of columns</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">ncols</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># no visible option at all</span>
|
||||
<span class="c1"># no visible options at all</span>
|
||||
<span class="k">return</span> <span class="s2">""</span>
|
||||
|
||||
<span class="n">ncols</span> <span class="o">=</span> <span class="n">ncols</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">ncols</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">ncols</span>
|
||||
<span class="c1"># get the amount of rows needed (start with 4 rows)</span>
|
||||
<span class="n">nrows</span> <span class="o">=</span> <span class="mi">4</span>
|
||||
<span class="k">while</span> <span class="n">nrows</span> <span class="o">*</span> <span class="n">ncols</span> <span class="o"><</span> <span class="n">nlist</span><span class="p">:</span>
|
||||
<span class="n">nrows</span> <span class="o">+=</span> <span class="mi">1</span>
|
||||
<span class="n">ncols</span> <span class="o">=</span> <span class="n">nlist</span> <span class="o">//</span> <span class="n">nrows</span> <span class="c1"># number of full columns</span>
|
||||
<span class="n">nlastcol</span> <span class="o">=</span> <span class="n">nlist</span> <span class="o">%</span> <span class="n">nrows</span> <span class="c1"># number of elements in last column</span>
|
||||
<span class="n">ncols</span> <span class="o">=</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">ncols</span> <span class="o">==</span> <span class="mi">0</span> <span class="k">else</span> <span class="n">ncols</span>
|
||||
|
||||
<span class="c1"># get the final column count</span>
|
||||
<span class="n">ncols</span> <span class="o">=</span> <span class="n">ncols</span> <span class="o">+</span> <span class="mi">1</span> <span class="k">if</span> <span class="n">nlastcol</span> <span class="o">></span> <span class="mi">0</span> <span class="k">else</span> <span class="n">ncols</span>
|
||||
<span class="k">if</span> <span class="n">ncols</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
||||
<span class="c1"># only extend if longer than one column</span>
|
||||
<span class="n">table</span><span class="o">.</span><span class="n">extend</span><span class="p">([</span><span class="s2">" "</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">nrows</span> <span class="o">-</span> <span class="n">nlastcol</span><span class="p">)])</span>
|
||||
<span class="c1"># minimum number of rows in a column</span>
|
||||
<span class="n">min_rows</span> <span class="o">=</span> <span class="mi">4</span>
|
||||
|
||||
<span class="c1"># build the actual table grid</span>
|
||||
<span class="n">table</span> <span class="o">=</span> <span class="p">[</span><span class="n">table</span><span class="p">[</span><span class="n">icol</span> <span class="o">*</span> <span class="n">nrows</span> <span class="p">:</span> <span class="p">(</span><span class="n">icol</span> <span class="o">*</span> <span class="n">nrows</span><span class="p">)</span> <span class="o">+</span> <span class="n">nrows</span><span class="p">]</span> <span class="k">for</span> <span class="n">icol</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">ncols</span><span class="p">)]</span>
|
||||
<span class="c1"># split the items into columns</span>
|
||||
<span class="n">split</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">min_rows</span><span class="p">,</span> <span class="n">ceil</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">table</span><span class="p">)</span> <span class="o">/</span> <span class="n">ncols</span><span class="p">))</span>
|
||||
<span class="n">max_end</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">table</span><span class="p">)</span>
|
||||
<span class="n">cols_list</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="k">for</span> <span class="n">icol</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ncols</span><span class="p">):</span>
|
||||
<span class="n">start</span> <span class="o">=</span> <span class="n">icol</span> <span class="o">*</span> <span class="n">split</span>
|
||||
<span class="n">end</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">start</span> <span class="o">+</span> <span class="n">split</span><span class="p">,</span> <span class="n">max_end</span><span class="p">)</span>
|
||||
<span class="n">cols_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">EvColumn</span><span class="p">(</span><span class="o">*</span><span class="n">table</span><span class="p">[</span><span class="n">start</span><span class="p">:</span><span class="n">end</span><span class="p">]))</span>
|
||||
|
||||
<span class="c1"># adjust the width of each column</span>
|
||||
<span class="k">for</span> <span class="n">icol</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">table</span><span class="p">)):</span>
|
||||
<span class="n">col_width</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="nb">max</span><span class="p">(</span><span class="nb">max</span><span class="p">(</span><span class="n">m_len</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">part</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">))</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="p">[</span><span class="n">icol</span><span class="p">])</span> <span class="o">+</span> <span class="n">colsep</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">table</span><span class="p">[</span><span class="n">icol</span><span class="p">]</span> <span class="o">=</span> <span class="p">[</span><span class="n">pad</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">width</span><span class="o">=</span><span class="n">col_width</span> <span class="o">+</span> <span class="n">colsep</span><span class="p">,</span> <span class="n">align</span><span class="o">=</span><span class="s2">"l"</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">table</span><span class="p">[</span><span class="n">icol</span><span class="p">]]</span>
|
||||
|
||||
<span class="c1"># format the table into columns</span>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">EvTable</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="n">table</span><span class="p">,</span> <span class="n">border</span><span class="o">=</span><span class="s2">"none"</span><span class="p">))</span></div>
|
||||
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">EvTable</span><span class="p">(</span><span class="n">table</span><span class="o">=</span><span class="n">cols_list</span><span class="p">,</span> <span class="n">border</span><span class="o">=</span><span class="s2">"none"</span><span class="p">))</span></div>
|
||||
|
||||
<div class="viewcode-block" id="EvMenu.node_formatter"><a class="viewcode-back" href="../../../api/evennia.utils.evmenu.html#evennia.utils.evmenu.EvMenu.node_formatter">[docs]</a> <span class="k">def</span> <span class="nf">node_formatter</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">nodetext</span><span class="p">,</span> <span class="n">optionstext</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
|
|||
|
|
@ -64,7 +64,7 @@
|
|||
<span class="sd"> # use underscore to NOT make the function available as a callable</span>
|
||||
|
||||
<span class="sd">def funcname(*args, **kwargs):</span>
|
||||
<span class="sd"> # this can be accecssed as $funcname(*args, **kwargs)</span>
|
||||
<span class="sd"> # this can be accessed as $funcname(*args, **kwargs)</span>
|
||||
<span class="sd"> # it must always accept *args and **kwargs.</span>
|
||||
<span class="sd"> ...</span>
|
||||
<span class="sd"> return something</span>
|
||||
|
|
@ -73,7 +73,7 @@
|
|||
<span class="sd">Usage:</span>
|
||||
|
||||
<span class="sd">```python</span>
|
||||
<span class="sd">from evennia.utils.funcparser</span>
|
||||
<span class="sd">from evennia.utils.funcparser import FuncParser</span>
|
||||
|
||||
<span class="sd">parser = FuncParser("path.to.module_with_callables")</span>
|
||||
<span class="sd">result = parser.parse("String with $funcname() in it")</span>
|
||||
|
|
@ -126,8 +126,8 @@
|
|||
<span class="c1"># state storage</span>
|
||||
<span class="n">fullstr</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">infuncstr</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">single_quoted</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">double_quoted</span><span class="p">:</span> <span class="nb">bool</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">single_quoted</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="n">double_quoted</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="n">current_kwarg</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">open_lparens</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">open_lsquate</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
|
|
@ -360,8 +360,8 @@
|
|||
<span class="c1"># parsing state</span>
|
||||
<span class="n">callstack</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="n">open_lparens</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># open (</span>
|
||||
<span class="n">open_lsquare</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># open [</span>
|
||||
<span class="n">open_lcurly</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># open {</span>
|
||||
|
|
@ -372,6 +372,7 @@
|
|||
<span class="n">curr_func</span> <span class="o">=</span> <span class="kc">None</span>
|
||||
<span class="n">fullstr</span> <span class="o">=</span> <span class="s2">""</span> <span class="c1"># final string</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">""</span> <span class="c1"># string parts inside the current level of $funcdef (including $)</span>
|
||||
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">char</span> <span class="ow">in</span> <span class="n">string</span><span class="p">:</span>
|
||||
|
||||
|
|
@ -415,12 +416,13 @@
|
|||
<span class="n">curr_func</span><span class="o">.</span><span class="n">open_lcurly</span> <span class="o">=</span> <span class="n">open_lcurly</span>
|
||||
<span class="n">current_kwarg</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="n">open_lparens</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">open_lsquare</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">open_lcurly</span> <span class="o">=</span> <span class="mi">0</span>
|
||||
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">callstack</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">curr_func</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># start a new func</span>
|
||||
|
|
@ -443,19 +445,41 @@
|
|||
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="nb">str</span><span class="p">(</span><span class="n">exec_return</span><span class="p">)</span>
|
||||
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">"'"</span><span class="p">:</span> <span class="c1"># note that this is the same as "\'"</span>
|
||||
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">"'"</span> <span class="ow">and</span> <span class="n">double_quoted</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># note that this is the same as "\'"</span>
|
||||
<span class="c1"># a single quote - flip status</span>
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">single_quoted</span>
|
||||
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
|
||||
<span class="k">if</span> <span class="n">single_quoted</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="k">elif</span> <span class="n">single_quoted</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">single_quoted</span><span class="p">]</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">infuncstr</span><span class="p">[</span><span class="n">single_quoted</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="n">single_quoted</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">infuncstr</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
||||
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">'"'</span><span class="p">:</span> <span class="c1"># note that this is the same as '\"'</span>
|
||||
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s1">'"'</span> <span class="ow">and</span> <span class="n">single_quoted</span> <span class="o"><</span> <span class="mi">0</span><span class="p">:</span> <span class="c1"># note that this is the same as '\"'</span>
|
||||
<span class="c1"># a double quote = flip status</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="ow">not</span> <span class="n">double_quoted</span>
|
||||
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
|
||||
<span class="k">if</span> <span class="n">double_quoted</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="k">elif</span> <span class="n">double_quoted</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="p">[</span><span class="mi">0</span><span class="p">:</span><span class="n">double_quoted</span><span class="p">]</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">prefix</span> <span class="o">+</span> <span class="n">infuncstr</span><span class="p">[</span><span class="n">double_quoted</span> <span class="o">+</span> <span class="mi">1</span> <span class="p">:]</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="n">double_quoted</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">infuncstr</span><span class="p">)</span> <span class="o">-</span> <span class="mi">1</span>
|
||||
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">double_quoted</span> <span class="ow">or</span> <span class="n">single_quoted</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="n">double_quoted</span> <span class="o">>=</span> <span class="mi">0</span> <span class="ow">or</span> <span class="n">single_quoted</span> <span class="o">>=</span> <span class="mi">0</span><span class="p">:</span>
|
||||
<span class="c1"># inside a string definition - this escapes everything else</span>
|
||||
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
|
||||
<span class="k">continue</span>
|
||||
|
|
@ -519,12 +543,15 @@
|
|||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">curr_func</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">exec_return</span><span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">literal_infuncstr</span><span class="p">:</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
|
||||
<span class="c1"># store a string instead</span>
|
||||
<span class="k">if</span> <span class="n">current_kwarg</span><span class="p">:</span>
|
||||
<span class="n">curr_func</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="n">current_kwarg</span><span class="p">]</span> <span class="o">=</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
||||
<span class="k">elif</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
|
||||
<span class="n">curr_func</span><span class="o">.</span><span class="n">kwargs</span><span class="p">[</span><span class="n">current_kwarg</span><span class="p">]</span> <span class="o">=</span> <span class="n">infuncstr</span>
|
||||
<span class="k">elif</span> <span class="n">literal_infuncstr</span> <span class="ow">or</span> <span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">():</span>
|
||||
<span class="c1"># don't store the empty string</span>
|
||||
<span class="n">curr_func</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">infuncstr</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
||||
<span class="n">curr_func</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">infuncstr</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># note that at this point either exec_return or infuncstr will</span>
|
||||
<span class="c1"># be empty. We need to store the full string so we can print</span>
|
||||
|
|
@ -535,6 +562,7 @@
|
|||
<span class="n">current_kwarg</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">char</span> <span class="o">==</span> <span class="s2">")"</span><span class="p">:</span>
|
||||
<span class="c1"># closing the function list - this means we have a</span>
|
||||
|
|
@ -578,6 +606,7 @@
|
|||
<span class="k">if</span> <span class="n">return_str</span><span class="p">:</span>
|
||||
<span class="n">exec_return</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">infuncstr</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">literal_infuncstr</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="k">continue</span>
|
||||
|
||||
<span class="n">infuncstr</span> <span class="o">+=</span> <span class="n">char</span>
|
||||
|
|
@ -1139,7 +1168,7 @@
|
|||
|
||||
<span class="sd"> Examples:</span>
|
||||
<span class="sd"> This can be used by the say or emote hooks to pass actor stance</span>
|
||||
<span class="sd"> strings. This should usually be combined with the $inflect() callable.</span>
|
||||
<span class="sd"> strings. This should usually be combined with the $conj() callable.</span>
|
||||
|
||||
<span class="sd"> - `With a grin, $you() $conj(jump) at $you(tommy).`</span>
|
||||
|
||||
|
|
@ -1223,7 +1252,7 @@
|
|||
<div class="viewcode-block" id="funcparser_callable_pronoun"><a class="viewcode-back" href="../../../api/evennia.utils.funcparser.html#evennia.utils.funcparser.funcparser_callable_pronoun">[docs]</a><span class="k">def</span> <span class="nf">funcparser_callable_pronoun</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">receiver</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">capitalize</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
||||
<span class="sd"> Usage: $prop(word, [options])</span>
|
||||
<span class="sd"> Usage: $pron(word, [options])</span>
|
||||
|
||||
<span class="sd"> Adjust pronouns to the expected form. Pronouns are words you use instead of a</span>
|
||||
<span class="sd"> proper name, such as 'him', 'herself', 'theirs' etc. These look different</span>
|
||||
|
|
@ -1259,7 +1288,7 @@
|
|||
<span class="sd"> `male`/`female`/`neutral`/`plural` (plural is considered a gender for this purpose).</span>
|
||||
<span class="sd"> If no `gender` property/callable is found, `neutral` is used as a fallback.</span>
|
||||
|
||||
<span class="sd"> The pronoun-type default (if not spefified in call) is `subject pronoun`.</span>
|
||||
<span class="sd"> The pronoun-type default (if not specified in call) is `subject pronoun`.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> pronoun (str): Input argument to parsed call. This can be any of the pronouns</span>
|
||||
|
|
@ -1329,7 +1358,7 @@
|
|||
<span class="n">default_viewpoint</span> <span class="o">=</span> <span class="s2">"2nd person"</span>
|
||||
|
||||
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"gender"</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">gender</span><span class="p">):</span>
|
||||
<span class="k">if</span> <span class="n">callable</span><span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">gender</span><span class="p">):</span>
|
||||
<span class="n">default_gender</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">gender</span><span class="p">()</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">default_gender</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">gender</span>
|
||||
|
|
@ -1357,7 +1386,7 @@
|
|||
<span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">receiver</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">capitalize</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span>
|
||||
<span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Usage: $Pron(word) - always maps to a capitalized word.</span>
|
||||
<span class="sd"> Usage: $Pron(word, [options]) - always maps to a capitalized word.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">funcparser_callable_pronoun</span><span class="p">(</span>
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@
|
|||
<span class="n">callback</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">seconds</span> <span class="o">=</span> <span class="n">real_seconds_until</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gametime</span><span class="p">)</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">restart</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">)</span></div></div>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span> <span class="n">force_restart</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<span class="c1"># Access functions</span>
|
||||
|
|
|
|||
|
|
@ -92,6 +92,7 @@
|
|||
|
||||
<span class="c1"># log call functions (each has legacy aliases)</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="log_info"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.log_info">[docs]</a><span class="k">def</span> <span class="nf">log_info</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="sd">"""</span>
|
||||
<span class="sd"> Logs any generic debugging/informative info that should appear in the log.</span>
|
||||
|
|
@ -104,6 +105,7 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">info</span> <span class="o">=</span> <span class="n">log_info</span>
|
||||
<span class="n">log_infomsg</span> <span class="o">=</span> <span class="n">log_info</span>
|
||||
<span class="n">log_msg</span> <span class="o">=</span> <span class="n">log_info</span>
|
||||
|
|
@ -121,6 +123,7 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">warn</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">warn</span> <span class="o">=</span> <span class="n">log_warn</span>
|
||||
<span class="n">warning</span> <span class="o">=</span> <span class="n">log_warn</span>
|
||||
<span class="n">log_warnmsg</span> <span class="o">=</span> <span class="n">log_warn</span>
|
||||
|
|
@ -162,6 +165,7 @@
|
|||
<span class="k">if</span> <span class="n">msg</span><span class="p">:</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">error</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"!!"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">log_tracemsg</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
<span class="n">exception</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
<span class="n">critical</span> <span class="o">=</span> <span class="n">log_trace</span>
|
||||
|
|
@ -198,6 +202,7 @@
|
|||
<span class="sd"> """</span>
|
||||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"SS"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
<span class="n">sec</span> <span class="o">=</span> <span class="n">log_sec</span>
|
||||
<span class="n">security</span> <span class="o">=</span> <span class="n">log_sec</span>
|
||||
<span class="n">log_secmsg</span> <span class="o">=</span> <span class="n">log_sec</span>
|
||||
|
|
@ -216,12 +221,12 @@
|
|||
<span class="n">_log</span><span class="p">(</span><span class="n">msg</span><span class="p">,</span> <span class="n">log</span><span class="o">.</span><span class="n">info</span><span class="p">,</span> <span class="n">prefix</span><span class="o">=</span><span class="s2">"Server"</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span></div>
|
||||
|
||||
|
||||
|
||||
<div class="viewcode-block" id="GetLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetLogObserver</span><span class="p">:</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Sets up how the system logs are formatted.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="n">event_levels</span> <span class="o">=</span> <span class="p">{</span>
|
||||
<span class="n">twisted_logger</span><span class="o">.</span><span class="n">LogLevel</span><span class="o">.</span><span class="n">debug</span><span class="p">:</span> <span class="s2">"??"</span><span class="p">,</span>
|
||||
|
|
@ -249,8 +254,7 @@
|
|||
<span class="n">event</span><span class="p">[</span><span class="s2">"log_format"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">event</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"log_format"</span><span class="p">,</span> <span class="s2">""</span><span class="p">))</span>
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">component_prefix</span> <span class="ow">or</span> <span class="s2">""</span>
|
||||
<span class="n">log_msg</span> <span class="o">=</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatEventAsClassicLogText</span><span class="p">(</span>
|
||||
<span class="n">event</span><span class="p">,</span>
|
||||
<span class="n">formatTime</span><span class="o">=</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatTime</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">_TIME_FORMAT</span><span class="p">)</span>
|
||||
<span class="n">event</span><span class="p">,</span> <span class="n">formatTime</span><span class="o">=</span><span class="k">lambda</span> <span class="n">e</span><span class="p">:</span> <span class="n">twisted_logger</span><span class="o">.</span><span class="n">formatTime</span><span class="p">(</span><span class="n">e</span><span class="p">,</span> <span class="n">_TIME_FORMAT</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">component_prefix</span><span class="si">}{</span><span class="n">log_msg</span><span class="si">}</span><span class="s2">"</span></div>
|
||||
|
||||
|
|
@ -260,14 +264,15 @@
|
|||
|
||||
<span class="c1"># Called by server/portal on startup</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="GetPortalLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetPortalLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetPortalLogObserver</span><span class="p">(</span><span class="n">GetLogObserver</span><span class="p">):</span>
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">"|Portal| "</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="GetServerLogObserver"><a class="viewcode-back" href="../../../api/evennia.utils.logger.html#evennia.utils.logger.GetServerLogObserver">[docs]</a><span class="k">class</span> <span class="nc">GetServerLogObserver</span><span class="p">(</span><span class="n">GetLogObserver</span><span class="p">):</span>
|
||||
<span class="n">component_prefix</span> <span class="o">=</span> <span class="s2">""</span></div>
|
||||
|
||||
|
||||
|
||||
<span class="c1"># logging overrides</span>
|
||||
|
||||
|
||||
|
|
@ -394,6 +399,7 @@
|
|||
<span class="bp">self</span><span class="o">.</span><span class="n">lastDate</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lastDate</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">toDate</span><span class="p">())</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">size</span> <span class="o">+=</span> <span class="nb">len</span><span class="p">(</span><span class="n">data</span><span class="p">)</span></div></div>
|
||||
|
||||
|
||||
<span class="c1"># Arbitrary file logger</span>
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,6 @@
|
|||
<span class="s2">"evennia.game_template.server.conf.prototypefuncs"</span><span class="p">,</span>
|
||||
<span class="p">],</span>
|
||||
<span class="n">BASE_GUEST_TYPECLASS</span><span class="o">=</span><span class="s2">"evennia.accounts.accounts.DefaultGuest"</span><span class="p">,</span>
|
||||
|
||||
<span class="c1"># a special setting boolean _TEST_ENVIRONMENT is set by the test runner</span>
|
||||
<span class="c1"># while the test suite is running.</span>
|
||||
<span class="p">)</span>
|
||||
|
|
|
|||
|
|
@ -54,11 +54,10 @@
|
|||
<span class="kn">from</span> <span class="nn">html</span> <span class="kn">import</span> <span class="n">escape</span> <span class="k">as</span> <span class="n">html_escape</span>
|
||||
<span class="kn">from</span> <span class="nn">.ansi</span> <span class="kn">import</span> <span class="o">*</span>
|
||||
|
||||
|
||||
<span class="c1"># All xterm256 RGB equivalents</span>
|
||||
|
||||
<span class="n">XTERM256_FG</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\033</span><span class="s2">[38;5;</span><span class="si">%s</span><span class="s2">m"</span>
|
||||
<span class="n">XTERM256_BG</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\033</span><span class="s2">[48;5;</span><span class="si">%s</span><span class="s2">m"</span>
|
||||
<span class="n">XTERM256_FG</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\033</span><span class="s2">[38;5;</span><span class="si">{}</span><span class="s2">m"</span>
|
||||
<span class="n">XTERM256_BG</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\033</span><span class="s2">[48;5;</span><span class="si">{}</span><span class="s2">m"</span>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser">[docs]</a><span class="k">class</span> <span class="nc">TextToHTMLparser</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span>
|
||||
|
|
@ -67,188 +66,75 @@
|
|||
<span class="sd"> """</span>
|
||||
|
||||
<span class="n">tabstop</span> <span class="o">=</span> <span class="mi">4</span>
|
||||
<span class="c1"># mapping html color name <-> ansi code.</span>
|
||||
<span class="n">hilite</span> <span class="o">=</span> <span class="n">ANSI_HILITE</span>
|
||||
<span class="n">unhilite</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span> <span class="c1"># this will be stripped - there is no css equivalent.</span>
|
||||
<span class="n">normal</span> <span class="o">=</span> <span class="n">ANSI_NORMAL</span> <span class="c1"># "</span>
|
||||
<span class="n">underline</span> <span class="o">=</span> <span class="n">ANSI_UNDERLINE</span>
|
||||
<span class="n">blink</span> <span class="o">=</span> <span class="n">ANSI_BLINK</span>
|
||||
<span class="n">inverse</span> <span class="o">=</span> <span class="n">ANSI_INVERSE</span> <span class="c1"># this will produce an outline; no obvious css equivalent?</span>
|
||||
<span class="n">colorcodes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"color-000"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_BLACK</span><span class="p">),</span> <span class="c1"># pure black</span>
|
||||
<span class="p">(</span><span class="s2">"color-001"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_RED</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-002"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_GREEN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-003"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_YELLOW</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-004"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_BLUE</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-005"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_MAGENTA</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-006"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_CYAN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-007"</span><span class="p">,</span> <span class="n">unhilite</span> <span class="o">+</span> <span class="n">ANSI_WHITE</span><span class="p">),</span> <span class="c1"># light grey</span>
|
||||
<span class="p">(</span><span class="s2">"color-008"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BLACK</span><span class="p">),</span> <span class="c1"># dark grey</span>
|
||||
<span class="p">(</span><span class="s2">"color-009"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_RED</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-010"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_GREEN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-011"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_YELLOW</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-012"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BLUE</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-013"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_MAGENTA</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-014"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_CYAN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"color-015"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_WHITE</span><span class="p">),</span> <span class="c1"># pure white</span>
|
||||
<span class="p">]</span> <span class="o">+</span> <span class="p">[(</span><span class="s2">"color-</span><span class="si">%03i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">),</span> <span class="n">XTERM256_FG</span> <span class="o">%</span> <span class="p">(</span><span class="s2">"</span><span class="si">%i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">)))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">240</span><span class="p">)]</span>
|
||||
|
||||
<span class="n">colorback</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-000"</span><span class="p">,</span> <span class="n">ANSI_BACK_BLACK</span><span class="p">),</span> <span class="c1"># pure black</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-001"</span><span class="p">,</span> <span class="n">ANSI_BACK_RED</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-002"</span><span class="p">,</span> <span class="n">ANSI_BACK_GREEN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-003"</span><span class="p">,</span> <span class="n">ANSI_BACK_YELLOW</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-004"</span><span class="p">,</span> <span class="n">ANSI_BACK_BLUE</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-005"</span><span class="p">,</span> <span class="n">ANSI_BACK_MAGENTA</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-006"</span><span class="p">,</span> <span class="n">ANSI_BACK_CYAN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-007"</span><span class="p">,</span> <span class="n">ANSI_BACK_WHITE</span><span class="p">),</span> <span class="c1"># light grey</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-008"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_BLACK</span><span class="p">),</span> <span class="c1"># dark grey</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-009"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_RED</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-010"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_GREEN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-011"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_YELLOW</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-012"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_BLUE</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-013"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_MAGENTA</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-014"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_CYAN</span><span class="p">),</span>
|
||||
<span class="p">(</span><span class="s2">"bgcolor-015"</span><span class="p">,</span> <span class="n">hilite</span> <span class="o">+</span> <span class="n">ANSI_BACK_WHITE</span><span class="p">),</span> <span class="c1"># pure white</span>
|
||||
<span class="p">]</span> <span class="o">+</span> <span class="p">[(</span><span class="s2">"bgcolor-</span><span class="si">%03i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">),</span> <span class="n">XTERM256_BG</span> <span class="o">%</span> <span class="p">(</span><span class="s2">"</span><span class="si">%i</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">)))</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">240</span><span class="p">)]</span>
|
||||
<span class="n">style_codes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="c1"># non-color style markers</span>
|
||||
<span class="n">ANSI_NORMAL</span><span class="p">,</span>
|
||||
<span class="n">ANSI_UNDERLINE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_HILITE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_UNHILITE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_INVERSE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BLINK</span><span class="p">,</span>
|
||||
<span class="n">ANSI_INV_HILITE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BLINK_HILITE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_INV_BLINK</span><span class="p">,</span>
|
||||
<span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="c1"># make sure to escape [</span>
|
||||
<span class="c1"># colorcodes = [(c, code.replace("[", r"\[")) for c, code in colorcodes]</span>
|
||||
<span class="c1"># colorback = [(c, code.replace("[", r"\[")) for c, code in colorback]</span>
|
||||
<span class="n">fg_colormap</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">((</span><span class="n">code</span><span class="p">,</span> <span class="n">clr</span><span class="p">)</span> <span class="k">for</span> <span class="n">clr</span><span class="p">,</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">colorcodes</span><span class="p">)</span>
|
||||
<span class="n">bg_colormap</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">((</span><span class="n">code</span><span class="p">,</span> <span class="n">clr</span><span class="p">)</span> <span class="k">for</span> <span class="n">clr</span><span class="p">,</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">colorback</span><span class="p">)</span>
|
||||
<span class="n">ansi_color_codes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="c1"># Foreground colors</span>
|
||||
<span class="n">ANSI_BLACK</span><span class="p">,</span>
|
||||
<span class="n">ANSI_RED</span><span class="p">,</span>
|
||||
<span class="n">ANSI_GREEN</span><span class="p">,</span>
|
||||
<span class="n">ANSI_YELLOW</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BLUE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_MAGENTA</span><span class="p">,</span>
|
||||
<span class="n">ANSI_CYAN</span><span class="p">,</span>
|
||||
<span class="n">ANSI_WHITE</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="c1"># create stop markers</span>
|
||||
<span class="n">fgstop</span> <span class="o">=</span> <span class="s2">"(?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[3[0-8].*?m|</span><span class="se">\033</span><span class="s2">\[0m|$"</span>
|
||||
<span class="n">bgstop</span> <span class="o">=</span> <span class="s2">"(?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[4[0-8].*?m|</span><span class="se">\033</span><span class="s2">\[0m|$"</span>
|
||||
<span class="n">bgfgstop</span> <span class="o">=</span> <span class="n">bgstop</span><span class="p">[:</span><span class="o">-</span><span class="mi">2</span><span class="p">]</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">"(\s*)"</span> <span class="o">+</span> <span class="n">fgstop</span>
|
||||
<span class="n">xterm_fg_codes</span> <span class="o">=</span> <span class="p">[</span><span class="n">XTERM256_FG</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">240</span><span class="p">)]</span>
|
||||
|
||||
<span class="n">fgstart</span> <span class="o">=</span> <span class="s2">"((?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[3[0-8].*?m)"</span>
|
||||
<span class="n">bgstart</span> <span class="o">=</span> <span class="s2">"((?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[4[0-8].*?m)"</span>
|
||||
<span class="n">bgfgstart</span> <span class="o">=</span> <span class="n">bgstart</span> <span class="o">+</span> <span class="sa">r</span><span class="s2">"(\s*)"</span> <span class="o">+</span> <span class="s2">"((?:</span><span class="se">\033</span><span class="s2">\[1m|</span><span class="se">\033</span><span class="s2">\[22m){0,1}</span><span class="se">\033</span><span class="s2">\[[3-4][0-8].*?m){0,1}"</span>
|
||||
<span class="n">ansi_bg_codes</span> <span class="o">=</span> <span class="p">[</span>
|
||||
<span class="c1"># Background colors</span>
|
||||
<span class="n">ANSI_BACK_BLACK</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BACK_RED</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BACK_GREEN</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BACK_YELLOW</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BACK_BLUE</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BACK_MAGENTA</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BACK_CYAN</span><span class="p">,</span>
|
||||
<span class="n">ANSI_BACK_WHITE</span><span class="p">,</span>
|
||||
<span class="p">]</span>
|
||||
|
||||
<span class="c1"># extract color markers, tagging the start marker and the text marked</span>
|
||||
<span class="n">re_fgs</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="n">fgstart</span> <span class="o">+</span> <span class="s2">"(.*?)(?="</span> <span class="o">+</span> <span class="n">fgstop</span> <span class="o">+</span> <span class="s2">")"</span><span class="p">)</span>
|
||||
<span class="n">re_bgs</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="n">bgstart</span> <span class="o">+</span> <span class="s2">"(.*?)(?="</span> <span class="o">+</span> <span class="n">bgstop</span> <span class="o">+</span> <span class="s2">")"</span><span class="p">)</span>
|
||||
<span class="n">re_bgfg</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="n">bgfgstart</span> <span class="o">+</span> <span class="s2">"(.*?)(?="</span> <span class="o">+</span> <span class="n">bgfgstop</span> <span class="o">+</span> <span class="s2">")"</span><span class="p">)</span>
|
||||
<span class="n">xterm_bg_codes</span> <span class="o">=</span> <span class="p">[</span><span class="n">XTERM256_BG</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span> <span class="o">+</span> <span class="mi">16</span><span class="p">)</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">240</span><span class="p">)]</span>
|
||||
|
||||
<span class="n">re_style</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">"(</span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
||||
<span class="s2">"|"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
||||
<span class="n">style_codes</span> <span class="o">+</span> <span class="n">ansi_color_codes</span> <span class="o">+</span> <span class="n">xterm_fg_codes</span> <span class="o">+</span> <span class="n">ansi_bg_codes</span> <span class="o">+</span> <span class="n">xterm_bg_codes</span>
|
||||
<span class="p">)</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"["</span><span class="p">,</span> <span class="sa">r</span><span class="s2">"\["</span><span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">colorlist</span> <span class="o">=</span> <span class="p">(</span>
|
||||
<span class="p">[</span><span class="n">ANSI_UNHILITE</span> <span class="o">+</span> <span class="n">code</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">ansi_color_codes</span><span class="p">]</span>
|
||||
<span class="o">+</span> <span class="p">[</span><span class="n">ANSI_HILITE</span> <span class="o">+</span> <span class="n">code</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">ansi_color_codes</span><span class="p">]</span>
|
||||
<span class="o">+</span> <span class="n">xterm_fg_codes</span>
|
||||
<span class="p">)</span>
|
||||
|
||||
<span class="n">bglist</span> <span class="o">=</span> <span class="n">ansi_bg_codes</span> <span class="o">+</span> <span class="p">[</span><span class="n">ANSI_HILITE</span> <span class="o">+</span> <span class="n">code</span> <span class="k">for</span> <span class="n">code</span> <span class="ow">in</span> <span class="n">ansi_bg_codes</span><span class="p">]</span> <span class="o">+</span> <span class="n">xterm_bg_codes</span>
|
||||
|
||||
<span class="n">re_normal</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="n">normal</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"["</span><span class="p">,</span> <span class="sa">r</span><span class="s2">"\["</span><span class="p">))</span>
|
||||
<span class="n">re_hilite</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="s2">"(?:</span><span class="si">%s</span><span class="s2">)(.*)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">hilite</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"["</span><span class="p">,</span> <span class="sa">r</span><span class="s2">"\["</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
|
||||
<span class="n">re_unhilite</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="s2">"(?:</span><span class="si">%s</span><span class="s2">)(.*)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">unhilite</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"["</span><span class="p">,</span> <span class="sa">r</span><span class="s2">"\["</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
|
||||
<span class="n">re_uline</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="s2">"(?:</span><span class="si">%s</span><span class="s2">)(.*?)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">underline</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"["</span><span class="p">,</span> <span class="sa">r</span><span class="s2">"\["</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
|
||||
<span class="n">re_blink</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="s2">"(?:</span><span class="si">%s</span><span class="s2">)(.*?)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">blink</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"["</span><span class="p">,</span> <span class="sa">r</span><span class="s2">"\["</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
|
||||
<span class="n">re_inverse</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="s2">"(?:</span><span class="si">%s</span><span class="s2">)(.*?)(?=</span><span class="si">%s</span><span class="s2">|</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="n">inverse</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"["</span><span class="p">,</span> <span class="sa">r</span><span class="s2">"\["</span><span class="p">),</span> <span class="n">fgstop</span><span class="p">,</span> <span class="n">bgstop</span><span class="p">))</span>
|
||||
<span class="n">re_string</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">"(?P<htmlchars>[<&>])|(?P<tab>[\t]+)|(?P<space> +)|"</span>
|
||||
<span class="sa">r</span><span class="s2">"(?P<spacestart>^ )|(?P<lineend>\r\n|\r|\n)"</span><span class="p">,</span>
|
||||
<span class="sa">r</span><span class="s2">"(?P<htmlchars>[<&>])|(?P<tab>[\t]+)|(?P<lineend>\r\n|\r|\n)"</span><span class="p">,</span>
|
||||
<span class="n">re</span><span class="o">.</span><span class="n">S</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span> <span class="o">|</span> <span class="n">re</span><span class="o">.</span><span class="n">I</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">re_dblspace</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">" {2,}"</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">M</span><span class="p">)</span>
|
||||
<span class="n">re_invisiblespace</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">"( <.*?>)( )"</span><span class="p">)</span>
|
||||
<span class="n">re_url</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="s1">'(?<!=")((?:ftp|www|https?)\W+(?:(?!\.(?:\s|$)|&\w+;)[^"</span><span class="se">\'</span><span class="s1">,;$*^</span><span class="se">\\</span><span class="s1">()</span><span class="si">{}</span><span class="s1"><>\[\]\s])+)(\.(?:\s|$)|&\w+;|)'</span>
|
||||
<span class="p">)</span>
|
||||
<span class="n">re_mxplink</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">"\|lc(.*?)\|lt(.*?)\|le"</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
|
||||
<span class="n">re_mxpurl</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">"\|lu(.*?)\|lt(.*?)\|le"</span><span class="p">,</span> <span class="n">re</span><span class="o">.</span><span class="n">DOTALL</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_sub_bgfg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colormatch</span><span class="p">):</span>
|
||||
<span class="c1"># print("colormatch.groups()", colormatch.groups())</span>
|
||||
<span class="n">bgcode</span><span class="p">,</span> <span class="n">prespace</span><span class="p">,</span> <span class="n">fgcode</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">postspace</span> <span class="o">=</span> <span class="n">colormatch</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">fgcode</span><span class="p">:</span>
|
||||
<span class="n">ret</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"""<span class="</span><span class="si">%s</span><span class="s2">"></span><span class="si">%s%s%s</span><span class="s2"></span>"""</span> <span class="o">%</span> <span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="s2">"err"</span><span class="p">)),</span>
|
||||
<span class="n">prespace</span> <span class="ow">and</span> <span class="s2">"&nbsp;"</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">prespace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="n">postspace</span> <span class="ow">and</span> <span class="s2">"&nbsp;"</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">postspace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="n">text</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="n">ret</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"""<span class="</span><span class="si">%s</span><span class="s2">"><span class="</span><span class="si">%s</span><span class="s2">"></span><span class="si">%s%s%s</span><span class="s2"></span></span>"""</span> <span class="o">%</span> <span class="p">(</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">bgcode</span><span class="p">,</span> <span class="s2">"err"</span><span class="p">)),</span>
|
||||
<span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fgcode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">fgcode</span><span class="p">,</span> <span class="s2">"err"</span><span class="p">)),</span>
|
||||
<span class="n">prespace</span> <span class="ow">and</span> <span class="s2">"&nbsp;"</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">prespace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="n">postspace</span> <span class="ow">and</span> <span class="s2">"&nbsp;"</span> <span class="o">*</span> <span class="nb">len</span><span class="p">(</span><span class="n">postspace</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">""</span><span class="p">,</span>
|
||||
<span class="n">text</span><span class="p">,</span>
|
||||
<span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">ret</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_sub_fg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colormatch</span><span class="p">):</span>
|
||||
<span class="n">code</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="n">colormatch</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="sa">r</span><span class="s2">"""<span class="</span><span class="si">%s</span><span class="s2">"></span><span class="si">%s</span><span class="s2"></span>"""</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">fg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="s2">"err"</span><span class="p">),</span> <span class="n">text</span><span class="p">)</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">_sub_bg</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">colormatch</span><span class="p">):</span>
|
||||
<span class="n">code</span><span class="p">,</span> <span class="n">text</span> <span class="o">=</span> <span class="n">colormatch</span><span class="o">.</span><span class="n">groups</span><span class="p">()</span>
|
||||
<span class="k">return</span> <span class="sa">r</span><span class="s2">"""<span class="</span><span class="si">%s</span><span class="s2">"></span><span class="si">%s</span><span class="s2"></span>"""</span> <span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bg_colormap</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">code</span><span class="p">,</span> <span class="s2">"err"</span><span class="p">),</span> <span class="n">text</span><span class="p">)</span>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_color"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_color">[docs]</a> <span class="k">def</span> <span class="nf">re_color</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Replace ansi colors with html color class names. Let the</span>
|
||||
<span class="sd"> client choose how it will display colors, if it wishes to.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str): the string with color to replace.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> text (str): Re-colored text.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_bgfg</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sub_bgfg</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_fgs</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sub_fg</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_bgs</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">_sub_bg</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_normal</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="s2">""</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="n">text</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_bold"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_bold">[docs]</a> <span class="k">def</span> <span class="nf">re_bold</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Clean out superfluous hilights rather than set <strong>to make</span>
|
||||
<span class="sd"> it match the look of telnet.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str): Text to process.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> text (str): Processed text.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_hilite</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">"<strong>\1</strong>"</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_unhilite</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\1"</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span> <span class="c1"># strip unhilite - there is no equivalent in css.</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_underline"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_underline">[docs]</a> <span class="k">def</span> <span class="nf">re_underline</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Replace ansi underline with html underline class name.</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str): Text to process.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> text (str): Processed text.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_uline</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">'<span class="underline">\1</span>'</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_blinking"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_blinking">[docs]</a> <span class="k">def</span> <span class="nf">re_blinking</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Replace ansi blink with custom blink css class</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str): Text to process.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> text (str): Processed text.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_blink</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">'<span class="blink">\1</span>'</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_inversing"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_inversing">[docs]</a> <span class="k">def</span> <span class="nf">re_inversing</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Replace ansi inverse with custom inverse css class</span>
|
||||
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str): Text to process.</span>
|
||||
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> text (str): Processed text.</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_inverse</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">'<span class="inverse">\1</span>'</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.remove_bells"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.remove_bells">[docs]</a> <span class="k">def</span> <span class="nf">remove_bells</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Remove ansi specials</span>
|
||||
|
|
@ -260,7 +146,7 @@
|
|||
<span class="sd"> text (str): Processed text.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\07</span><span class="s2">"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span></div>
|
||||
<span class="k">return</span> <span class="n">text</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">ANSI_BEEP</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.remove_backspaces"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.remove_backspaces">[docs]</a> <span class="k">def</span> <span class="nf">remove_backspaces</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -307,20 +193,6 @@
|
|||
<span class="c1"># change pages (and losing our webclient session).</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_url</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s1">'<a href="\1" target="_blank">\1</a>\2'</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_double_space"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_double_space">[docs]</a> <span class="k">def</span> <span class="nf">re_double_space</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> HTML will swallow any normal space after the first, so if any slipped</span>
|
||||
<span class="sd"> through we must make sure to replace them with " &nbsp;"</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_dblspace</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sub_dblspace</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.re_invisible_space"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.re_invisible_space">[docs]</a> <span class="k">def</span> <span class="nf">re_invisible_space</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> If two spaces are separated by an invisble html element, they act as a</span>
|
||||
<span class="sd"> hidden double-space and the last of them should be replaced by &nbsp;</span>
|
||||
<span class="sd"> """</span>
|
||||
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_invisiblespace</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">sub_invisiblespace</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.sub_mxp_links"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.sub_mxp_links">[docs]</a> <span class="k">def</span> <span class="nf">sub_mxp_links</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Helper method to be passed to re.sub,</span>
|
||||
|
|
@ -374,27 +246,131 @@
|
|||
<span class="k">elif</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">"lineend"</span><span class="p">]:</span>
|
||||
<span class="k">return</span> <span class="s2">"<br>"</span>
|
||||
<span class="k">elif</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">"tab"</span><span class="p">]:</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">"tab"</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\t</span><span class="s2">"</span><span class="p">,</span> <span class="s2">" "</span> <span class="o">+</span> <span class="s2">"&nbsp;"</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tabstop</span> <span class="o">-</span> <span class="mi">1</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">text</span>
|
||||
<span class="k">elif</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">"space"</span><span class="p">]</span> <span class="ow">or</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">"spacestart"</span><span class="p">]:</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">"space"</span><span class="p">]</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="s2">" "</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">" "</span> <span class="o">+</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">" "</span><span class="p">,</span> <span class="s2">"&nbsp;"</span><span class="p">)</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">cdict</span><span class="p">[</span><span class="s2">"tab"</span><span class="p">]</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"</span><span class="se">\t</span><span class="s2">"</span><span class="p">,</span> <span class="s2">" "</span> <span class="o">*</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">tabstop</span><span class="p">))</span>
|
||||
<span class="k">return</span> <span class="n">text</span>
|
||||
<span class="k">return</span> <span class="kc">None</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.sub_dblspace"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.sub_dblspace">[docs]</a> <span class="k">def</span> <span class="nf">sub_dblspace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
|
||||
<span class="s2">"clean up double-spaces"</span>
|
||||
<span class="k">return</span> <span class="s2">" "</span> <span class="o">+</span> <span class="s2">"&nbsp;"</span> <span class="o">*</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">())</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span></div>
|
||||
<div class="viewcode-block" id="TextToHTMLparser.format_styles"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.format_styles">[docs]</a> <span class="k">def</span> <span class="nf">format_styles</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Takes a string with parsed ANSI codes and replaces them with</span>
|
||||
<span class="sd"> HTML spans and CSS classes.</span>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.sub_invisiblespace"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.sub_invisiblespace">[docs]</a> <span class="k">def</span> <span class="nf">sub_invisiblespace</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">match</span><span class="p">):</span>
|
||||
<span class="s2">"clean up invisible spaces"</span>
|
||||
<span class="k">return</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"&nbsp;"</span></div>
|
||||
<span class="sd"> Args:</span>
|
||||
<span class="sd"> text (str): The string to process.</span>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.handle_single_first_space"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.handle_single_first_space">[docs]</a> <span class="k">def</span> <span class="nf">handle_single_first_space</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">):</span>
|
||||
<span class="s2">"Don't swallow an initial lone space"</span>
|
||||
<span class="k">if</span> <span class="n">text</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">" "</span><span class="p">):</span>
|
||||
<span class="k">return</span> <span class="s2">"&nbsp;"</span> <span class="o">+</span> <span class="n">text</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
||||
<span class="k">return</span> <span class="n">text</span></div>
|
||||
<span class="sd"> Returns:</span>
|
||||
<span class="sd"> text (str): Processed text.</span>
|
||||
<span class="sd"> """</span>
|
||||
|
||||
<span class="c1"># split out the ANSI codes and clean out any empty items</span>
|
||||
<span class="n">str_list</span> <span class="o">=</span> <span class="p">[</span><span class="n">substr</span> <span class="k">for</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_style</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="n">text</span><span class="p">)</span> <span class="k">if</span> <span class="n">substr</span><span class="p">]</span>
|
||||
<span class="c1"># initialize all the flags and classes</span>
|
||||
<span class="n">classes</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">clean</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">inverse</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="c1"># default color is light grey - unhilite + white</span>
|
||||
<span class="n">hilight</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span>
|
||||
<span class="n">fg</span> <span class="o">=</span> <span class="n">ANSI_WHITE</span>
|
||||
<span class="c1"># default bg is black</span>
|
||||
<span class="n">bg</span> <span class="o">=</span> <span class="n">ANSI_BACK_BLACK</span>
|
||||
|
||||
<span class="k">for</span> <span class="n">i</span><span class="p">,</span> <span class="n">substr</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">str_list</span><span class="p">):</span>
|
||||
<span class="c1"># reset all current styling</span>
|
||||
<span class="k">if</span> <span class="n">substr</span> <span class="o">==</span> <span class="n">ANSI_NORMAL</span><span class="p">:</span>
|
||||
<span class="c1"># close any existing span if necessary</span>
|
||||
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span>"</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">clean</span> <span class="k">else</span> <span class="s2">""</span>
|
||||
<span class="c1"># reset to defaults</span>
|
||||
<span class="n">classes</span> <span class="o">=</span> <span class="p">[]</span>
|
||||
<span class="n">clean</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
<span class="n">inverse</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
<span class="n">hilight</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span>
|
||||
<span class="n">fg</span> <span class="o">=</span> <span class="n">ANSI_WHITE</span>
|
||||
<span class="n">bg</span> <span class="o">=</span> <span class="n">ANSI_BACK_BLACK</span>
|
||||
|
||||
<span class="c1"># change color</span>
|
||||
<span class="k">elif</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ansi_color_codes</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">xterm_fg_codes</span><span class="p">:</span>
|
||||
<span class="c1"># erase ANSI code from output</span>
|
||||
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="c1"># set new color</span>
|
||||
<span class="n">fg</span> <span class="o">=</span> <span class="n">substr</span>
|
||||
|
||||
<span class="c1"># change bg color</span>
|
||||
<span class="k">elif</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">ansi_bg_codes</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">xterm_bg_codes</span><span class="p">:</span>
|
||||
<span class="c1"># erase ANSI code from output</span>
|
||||
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
<span class="c1"># set new bg</span>
|
||||
<span class="n">bg</span> <span class="o">=</span> <span class="n">substr</span>
|
||||
|
||||
<span class="c1"># non-color codes</span>
|
||||
<span class="k">elif</span> <span class="n">substr</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">style_codes</span><span class="p">:</span>
|
||||
<span class="c1"># erase ANSI code from output</span>
|
||||
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="s2">""</span>
|
||||
|
||||
<span class="c1"># hilight codes</span>
|
||||
<span class="k">if</span> <span class="n">substr</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ANSI_HILITE</span><span class="p">,</span> <span class="n">ANSI_UNHILITE</span><span class="p">,</span> <span class="n">ANSI_INV_HILITE</span><span class="p">,</span> <span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">):</span>
|
||||
<span class="c1"># set new hilight status</span>
|
||||
<span class="n">hilight</span> <span class="o">=</span> <span class="n">ANSI_UNHILITE</span> <span class="k">if</span> <span class="n">substr</span> <span class="o">==</span> <span class="n">ANSI_UNHILITE</span> <span class="k">else</span> <span class="n">ANSI_HILITE</span>
|
||||
|
||||
<span class="c1"># inversion codes</span>
|
||||
<span class="k">if</span> <span class="n">substr</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ANSI_INVERSE</span><span class="p">,</span> <span class="n">ANSI_INV_HILITE</span><span class="p">,</span> <span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">):</span>
|
||||
<span class="n">inverse</span> <span class="o">=</span> <span class="kc">True</span>
|
||||
|
||||
<span class="c1"># blink codes</span>
|
||||
<span class="k">if</span> <span class="p">(</span>
|
||||
<span class="n">substr</span> <span class="ow">in</span> <span class="p">(</span><span class="n">ANSI_BLINK</span><span class="p">,</span> <span class="n">ANSI_BLINK_HILITE</span><span class="p">,</span> <span class="n">ANSI_INV_BLINK_HILITE</span><span class="p">)</span>
|
||||
<span class="ow">and</span> <span class="s2">"blink"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">classes</span>
|
||||
<span class="p">):</span>
|
||||
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"blink"</span><span class="p">)</span>
|
||||
|
||||
<span class="c1"># underline</span>
|
||||
<span class="k">if</span> <span class="n">substr</span> <span class="o">==</span> <span class="n">ANSI_UNDERLINE</span> <span class="ow">and</span> <span class="s2">"underline"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">classes</span><span class="p">:</span>
|
||||
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"underline"</span><span class="p">)</span>
|
||||
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># normal text, add text back to list</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">str_list</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]:</span>
|
||||
<span class="c1"># prior entry was cleared, which means style change</span>
|
||||
<span class="c1"># get indices for the fg and bg codes</span>
|
||||
<span class="n">bg_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">bglist</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">bg</span><span class="p">)</span>
|
||||
<span class="k">try</span><span class="p">:</span>
|
||||
<span class="n">color_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colorlist</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">hilight</span> <span class="o">+</span> <span class="n">fg</span><span class="p">)</span>
|
||||
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
||||
<span class="c1"># xterm256 colors don't have the hilight codes</span>
|
||||
<span class="n">color_index</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">colorlist</span><span class="o">.</span><span class="n">index</span><span class="p">(</span><span class="n">fg</span><span class="p">)</span>
|
||||
|
||||
<span class="k">if</span> <span class="n">inverse</span><span class="p">:</span>
|
||||
<span class="c1"># inverse means swap fg and bg indices</span>
|
||||
<span class="n">bg_class</span> <span class="o">=</span> <span class="s2">"bgcolor-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">color_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">"0"</span><span class="p">))</span>
|
||||
<span class="n">color_class</span> <span class="o">=</span> <span class="s2">"color-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bg_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">"0"</span><span class="p">))</span>
|
||||
<span class="k">else</span><span class="p">:</span>
|
||||
<span class="c1"># use fg and bg indices for classes</span>
|
||||
<span class="n">bg_class</span> <span class="o">=</span> <span class="s2">"bgcolor-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">bg_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">"0"</span><span class="p">))</span>
|
||||
<span class="n">color_class</span> <span class="o">=</span> <span class="s2">"color-</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">color_index</span><span class="p">)</span><span class="o">.</span><span class="n">rjust</span><span class="p">(</span><span class="mi">3</span><span class="p">,</span> <span class="s2">"0"</span><span class="p">))</span>
|
||||
|
||||
<span class="c1"># black bg is the default, don't explicitly style</span>
|
||||
<span class="k">if</span> <span class="n">bg_class</span> <span class="o">!=</span> <span class="s2">"bgcolor-000"</span><span class="p">:</span>
|
||||
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">bg_class</span><span class="p">)</span>
|
||||
<span class="c1"># light grey text is the default, don't explicitly style</span>
|
||||
<span class="k">if</span> <span class="n">color_class</span> <span class="o">!=</span> <span class="s2">"color-007"</span><span class="p">:</span>
|
||||
<span class="n">classes</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">color_class</span><span class="p">)</span>
|
||||
<span class="c1"># define the new style span</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="s1">'<span class="</span><span class="si">{}</span><span class="s1">">'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="s2">" "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">classes</span><span class="p">))</span>
|
||||
<span class="c1"># close any prior span</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">clean</span><span class="p">:</span>
|
||||
<span class="n">prefix</span> <span class="o">=</span> <span class="s2">"</span>"</span> <span class="o">+</span> <span class="n">prefix</span>
|
||||
<span class="c1"># add span to output</span>
|
||||
<span class="n">str_list</span><span class="p">[</span><span class="n">i</span> <span class="o">-</span> <span class="mi">1</span><span class="p">]</span> <span class="o">=</span> <span class="n">prefix</span>
|
||||
|
||||
<span class="c1"># clean out color classes to easily update next time</span>
|
||||
<span class="n">classes</span> <span class="o">=</span> <span class="p">[</span><span class="bp">cls</span> <span class="k">for</span> <span class="bp">cls</span> <span class="ow">in</span> <span class="n">classes</span> <span class="k">if</span> <span class="s2">"color"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">cls</span><span class="p">]</span>
|
||||
<span class="c1"># flag as currently being styled</span>
|
||||
<span class="n">clean</span> <span class="o">=</span> <span class="kc">False</span>
|
||||
|
||||
<span class="c1"># close span if necessary</span>
|
||||
<span class="k">if</span> <span class="ow">not</span> <span class="n">clean</span><span class="p">:</span>
|
||||
<span class="n">str_list</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span>"</span><span class="p">)</span>
|
||||
<span class="c1"># recombine back into string</span>
|
||||
<span class="k">return</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">str_list</span><span class="p">)</span></div>
|
||||
|
||||
<div class="viewcode-block" id="TextToHTMLparser.parse"><a class="viewcode-back" href="../../../api/evennia.utils.text2html.html#evennia.utils.text2html.TextToHTMLparser.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">text</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
|
|
@ -409,25 +385,17 @@
|
|||
<span class="sd"> text (str): Parsed text.</span>
|
||||
|
||||
<span class="sd"> """</span>
|
||||
<span class="c1"># print(f"incoming text:\n{text}")</span>
|
||||
<span class="c1"># parse everything to ansi first</span>
|
||||
<span class="n">text</span> <span class="o">=</span> <span class="n">parse_ansi</span><span class="p">(</span><span class="n">text</span><span class="p">,</span> <span class="n">strip_ansi</span><span class="o">=</span><span class="n">strip_ansi</span><span class="p">,</span> <span class="n">xterm256</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">mxp</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
||||
<span class="c1"># convert all ansi to html</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">re_string</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sub_text</span><span class="p">,</span> <span class="n">text</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">re_mxplink</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sub_mxp_links</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">re_mxpurl</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">sub_mxp_urls</span><span class="p">,</span> <span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_color</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_bold</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_underline</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_blinking</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_inversing</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_bells</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_styles</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_linebreaks</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">remove_backspaces</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">convert_urls</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_double_space</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">re_invisible_space</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">handle_single_first_space</span><span class="p">(</span><span class="n">result</span><span class="p">)</span>
|
||||
<span class="c1"># clean out eventual ansi that was missed</span>
|
||||
<span class="c1">## result = parse_ansi(result, strip_ansi=True)</span>
|
||||
|
||||
|
|
|
|||
|
|
@ -2737,6 +2737,7 @@
|
|||
<span class="o">+</span> <span class="n">excess</span>
|
||||
<span class="p">)</span></div>
|
||||
|
||||
|
||||
<div class="viewcode-block" id="run_in_main_thread"><a class="viewcode-back" href="../../../api/evennia.utils.utils.html#evennia.commands.default.building.run_in_main_thread">[docs]</a><span class="k">def</span> <span class="nf">run_in_main_thread</span><span class="p">(</span><span class="n">function_or_method</span><span class="p">,</span> <span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="sd">"""</span>
|
||||
<span class="sd"> Force a callable to execute in the main Evennia thread. This is only relevant when</span>
|
||||
|
|
|
|||
|
|
@ -160,6 +160,14 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10
|
|||
- Attribute storage support defaultdics (Hendher)
|
||||
- Add ObjectParent mixin to default game folder template as an easy, ready-made
|
||||
way to override features on all ObjectDB-inheriting objects easily.
|
||||
- Add `TagProperty`, `AliasProperty` and `PermissionProperty` to assign these
|
||||
data in a similar way to django fields.
|
||||
- The db pickle-serializer now checks for methods `__serialize_dbobjs__` and `__deserialize_dbobjs__`
|
||||
to allow custom packing/unpacking of nested dbobjs, to allow storing in Attribute.
|
||||
- Optimizations to rpsystem contrib performance. Breaking change: `.get_sdesc()` will
|
||||
now return `None` instead of `.db.desc` if no sdesc is set; fallback in hook (inspectorCaracal)
|
||||
- Reworked text2html parser to avoid problems with stateful color tags (inspectorCaracal)
|
||||
- Simplified `EvMenu.options_formatter` hook to use `EvColumn` and f-strings (inspectorcaracal)
|
||||
|
||||
|
||||
## Evennia 0.9.5
|
||||
|
|
|
|||
|
|
@ -3,33 +3,43 @@
|
|||
```{code-block}
|
||||
:caption: In-game
|
||||
> set obj/myattr = "test"
|
||||
```
|
||||
```
|
||||
```{code-block} python
|
||||
:caption: In-code
|
||||
obj.db.foo = [1,2,3, "bar"]
|
||||
:caption: In-code, using the .db wrapper
|
||||
obj.db.foo = [1, 2, 3, "bar"]
|
||||
value = obj.db.foo
|
||||
|
||||
```
|
||||
```{code-block} python
|
||||
:caption: In-code, using the .attributes handler
|
||||
obj.attributes.add("myattr", 1234, category="bar")
|
||||
value = attributes.get("myattr", category="bar")
|
||||
```
|
||||
```{code-block} python
|
||||
:caption: In-code, using `AttributeProperty` at class level
|
||||
from evennia import DefaultObject
|
||||
from evennia import AttributeProperty
|
||||
|
||||
_Attributes_ allow you to to store arbitrary data on objects and make sure the data survives a
|
||||
server reboot. An Attribute can store pretty much any
|
||||
Python data structure and data type, like numbers, strings, lists, dicts etc. You can also
|
||||
class MyObject(DefaultObject):
|
||||
foo = AttributeProperty(default=[1, 2, 3, "bar"])
|
||||
myattr = AttributeProperty(100, category='bar')
|
||||
|
||||
```
|
||||
|
||||
_Attributes_ allow you to to store arbitrary data on objects and make sure the data survives a server reboot. An Attribute can store pretty much any
|
||||
Python data structure and data type, like numbers, strings, lists, dicts etc. You can also
|
||||
store (references to) database objects like characters and rooms.
|
||||
|
||||
- [What can be stored in an Attribute](#what-types-of-data-can-i-save-in-an-attribute) is a must-read
|
||||
also for experienced developers, to avoid getting surprised. Attributes can store _almost_ everything
|
||||
- [What can be stored in an Attribute](#what-types-of-data-can-i-save-in-an-attribute) is a must-read to avoid being surprised, also for experienced developers. Attributes can store _almost_ everything
|
||||
but you need to know the quirks.
|
||||
- [NAttributes](#in-memory-attributes-nattributes) are the in-memory, non-persistent
|
||||
- [NAttributes](#in-memory-attributes-nattributes) are the in-memory, non-persistent
|
||||
siblings of Attributes.
|
||||
- [Managing Attributes In-game](#managing-attributes-in-game) for in-game builder commands.
|
||||
|
||||
## Managing Attributes in Code
|
||||
## Managing Attributes in Code
|
||||
|
||||
Attributes are usually handled in code. All [Typeclassed](./Typeclasses.md) entities
|
||||
([Accounts](./Accounts.md), [Objects](./Objects.md), [Scripts](./Scripts.md) and
|
||||
[Channels](./Channels.md)) all can (and usually do) have Attributes associated with them. There
|
||||
Attributes are usually handled in code. All [Typeclassed](./Typeclasses.md) entities
|
||||
([Accounts](./Accounts.md), [Objects](./Objects.md), [Scripts](./Scripts.md) and
|
||||
[Channels](./Channels.md)) can (and usually do) have Attributes associated with them. There
|
||||
are three ways to manage Attributes, all of which can be mixed.
|
||||
|
||||
- [Using the `.db` property shortcut](#using-db)
|
||||
|
|
@ -38,10 +48,10 @@ are three ways to manage Attributes, all of which can be mixed.
|
|||
|
||||
### Using .db
|
||||
|
||||
The simplest way to get/set Attributes is to use the `.db` shortcut:
|
||||
The simplest way to get/set Attributes is to use the `.db` shortcut. This allows for setting and getting Attributes that lack a _category_ (having category `None`)
|
||||
|
||||
```python
|
||||
import evennia
|
||||
```python
|
||||
import evennia
|
||||
|
||||
obj = evennia.create_object(key="Foo")
|
||||
|
||||
|
|
@ -54,10 +64,10 @@ obj.db.self_reference = obj # stores a reference to the obj
|
|||
rose = evennia.search_object(key="rose")[0] # returns a list, grab 0th element
|
||||
rose.db.has_thorns = True
|
||||
|
||||
# retrieving
|
||||
# retrieving
|
||||
val1 = obj.db.foo1
|
||||
val2 = obj.db.foo2
|
||||
weap = obj.db.weapon
|
||||
weap = obj.db.weapon
|
||||
myself = obj.db.self_reference # retrieve reference from db, get object back
|
||||
|
||||
is_ouch = rose.db.has_thorns
|
||||
|
|
@ -65,26 +75,25 @@ is_ouch = rose.db.has_thorns
|
|||
# this will return None, not AttributeError!
|
||||
not_found = obj.db.jiwjpowiwwerw
|
||||
|
||||
# returns all Attributes on the object
|
||||
obj.db.all
|
||||
# returns all Attributes on the object
|
||||
obj.db.all
|
||||
|
||||
# delete an Attribute
|
||||
del obj.db.foo2
|
||||
```
|
||||
Trying to access a non-existing Attribute will never lead to an `AttributeError`. Instead
|
||||
you will get `None` back. The special `.db.all` will return a list of all Attributes on
|
||||
the object. You can replace this with your own Attribute `all` if you want, it will replace the
|
||||
Trying to access a non-existing Attribute will never lead to an `AttributeError`. Instead
|
||||
you will get `None` back. The special `.db.all` will return a list of all Attributes on
|
||||
the object. You can replace this with your own Attribute `all` if you want, it will replace the
|
||||
default `all` functionality until you delete it again.
|
||||
|
||||
### Using .attributes
|
||||
|
||||
If you don't know the name of the Attribute beforehand you can also use
|
||||
the `AttributeHandler`, available as `.attributes`. With no extra keywords this is identical
|
||||
to using the `.db` shortcut (`.db` is actually using the `AttributeHandler` internally):
|
||||
If you want to group your Attribute in a category, or don't know the name of the Attribute beforehand, you can make use of
|
||||
the [AttributeHandler](evennia.typeclasses.attributes.AttributeHandler), available as `.attributes` on all typeclassed entities. With no extra keywords, this is identical to using the `.db` shortcut (`.db` is actually using the `AttributeHandler` internally):
|
||||
|
||||
```python
|
||||
is_ouch = rose.attributes.get("has_thorns")
|
||||
|
||||
```python
|
||||
is_ouch = rose.attributes.get("has_thorns")
|
||||
|
||||
obj.attributes.add("helmet", "Knight's helmet")
|
||||
helmet = obj.attributes.get("helmet")
|
||||
|
||||
|
|
@ -92,10 +101,9 @@ helmet = obj.attributes.get("helmet")
|
|||
obj.attributes.add("my game log", "long text about ...")
|
||||
```
|
||||
|
||||
With the `AttributeHandler` you can also give Attributes a `category`. By using a category you can
|
||||
separate same-named Attributes on the same object which can help organization:
|
||||
By using a category you can separate same-named Attributes on the same object to help organization.
|
||||
|
||||
```python
|
||||
```python
|
||||
# store (let's say we have gold_necklace and ringmail_armor from before)
|
||||
obj.attributes.add("neck", gold_necklace, category="clothing")
|
||||
obj.attributes.add("neck", ringmail_armor, category="armor")
|
||||
|
|
@ -105,23 +113,19 @@ neck_clothing = obj.attributes.get("neck", category="clothing")
|
|||
neck_armor = obj.attributes.get("neck", category="armor")
|
||||
```
|
||||
|
||||
If you don't specify a category, the Attribute's `category` will be `None`. Note that
|
||||
`None` is also considered a category of its own, so you won't find `None`-category Attributes mixed
|
||||
with Attributes having categories.
|
||||
If you don't specify a category, the Attribute's `category` will be `None` and can thus also be found via `.db`. `None` is considered a category of its own, so you won't find `None`-category Attributes mixed with Attributes having categories.
|
||||
|
||||
> When using `.db`, you will always use the `None` category.
|
||||
|
||||
Here are the methods of the `AttributeHandler`. See
|
||||
Here are the methods of the `AttributeHandler`. See
|
||||
the [AttributeHandler API](evennia.typeclasses.attributes.AttributeHandler) for more details.
|
||||
|
||||
- `has(...)` - this checks if the object has an Attribute with this key. This is equivalent
|
||||
to doing `obj.db.attrname` except you can also check for a specific `category.
|
||||
- `get(...)` - this retrieves the given Attribute. You can also provide a `default` value to return
|
||||
- `get(...)` - this retrieves the given Attribute. You can also provide a `default` value to return
|
||||
if the Attribute is not defined (instead of None). By supplying an
|
||||
`accessing_object` to the call one can also make sure to check permissions before modifying
|
||||
anything. The `raise_exception` kwarg allows you to raise an `AttributeError` instead of returning
|
||||
`None` when you access a non-existing `Attribute`. The `strattr` kwarg tells the system to store
|
||||
the Attribute as a raw string rather than to pickle it. While an optimization this should usually
|
||||
anything. The `raise_exception` kwarg allows you to raise an `AttributeError` instead of returning
|
||||
`None` when you access a non-existing `Attribute`. The `strattr` kwarg tells the system to store
|
||||
the Attribute as a raw string rather than to pickle it. While an optimization this should usually
|
||||
not be used unless the Attribute is used for some particular, limited purpose.
|
||||
- `add(...)` - this adds a new Attribute to the object. An optional [lockstring](./Locks.md) can be
|
||||
supplied here to restrict future access and also the call itself may be checked against locks.
|
||||
|
|
@ -131,31 +135,30 @@ the [AttributeHandler API](evennia.typeclasses.attributes.AttributeHandler) for
|
|||
|
||||
Examples:
|
||||
|
||||
```python
|
||||
```python
|
||||
try:
|
||||
# raise error if Attribute foo does not exist
|
||||
# raise error if Attribute foo does not exist
|
||||
val = obj.attributes.get("foo", raise_exception=True):
|
||||
except AttributeError:
|
||||
# ...
|
||||
|
||||
|
||||
# return default value if foo2 doesn't exist
|
||||
val2 = obj.attributes.get("foo2", default=[1, 2, 3, "bar"])
|
||||
val2 = obj.attributes.get("foo2", default=[1, 2, 3, "bar"])
|
||||
|
||||
# delete foo if it exists (will silently fail if unset, unless
|
||||
# raise_exception is set)
|
||||
obj.attributes.remove("foo")
|
||||
|
||||
|
||||
# view all clothes on obj
|
||||
all_clothes = obj.attributes.all(category="clothes")
|
||||
all_clothes = obj.attributes.all(category="clothes")
|
||||
```
|
||||
|
||||
### Using AttributeProperty
|
||||
### Using AttributeProperty
|
||||
|
||||
There is a third way to set up an Attribute, and that is by setting up an `AttributeProperty`. This
|
||||
is done on the _class level_ of your typeclass and allows you to treat Attributes a bit like Django
|
||||
database Fields.
|
||||
The third way to set up an Attribute is to use an `AttributeProperty`. This
|
||||
is done on the _class level_ of your typeclass and allows you to treat Attributes a bit like Django database Fields. Unlike using `.db` and `.attributes`, an `AttributeProperty` can't be created on the fly, you must assign it in the class code.
|
||||
|
||||
```python
|
||||
```python
|
||||
# mygame/typeclasses/characters.py
|
||||
|
||||
from evennia import DefaultCharacter
|
||||
|
|
@ -163,161 +166,90 @@ from evennia.typeclasses.attributes import AttributeProperty
|
|||
|
||||
class Character(DefaultCharacter):
|
||||
|
||||
strength = AttributeProperty(default=10, category='stat', autocreate=True)
|
||||
constitution = AttributeProperty(default=10, category='stat', autocreate=True)
|
||||
agility = AttributeProperty(default=10, category='stat', autocreate=True)
|
||||
magic = AttributeProperty(default=10, category='stat', autocreate=True)
|
||||
|
||||
sleepy = AttributeProperty(default=False)
|
||||
poisoned = AttributeProperty(default=False)
|
||||
|
||||
def at_object_creation(self):
|
||||
# ...
|
||||
```
|
||||
|
||||
These "Attribute-properties" will be made available to all instances of the class.
|
||||
|
||||
```{important}
|
||||
If you change the `default` of an `AttributeProperty` (and reload), it will
|
||||
change the default for _all_ instances of that class (it will not override
|
||||
explicitly changed values).
|
||||
```
|
||||
|
||||
```python
|
||||
char = evennia.search_object(Character, key="Bob")[0] # returns list, get 0th element
|
||||
|
||||
# get defaults
|
||||
strength = char.strength # will get the default value 10
|
||||
|
||||
# assign new values (this will create/update new Attributes)
|
||||
char.strength = 12
|
||||
char.constitution = 16
|
||||
char.agility = 8
|
||||
char.magic = 2
|
||||
|
||||
# you can also do arithmetic etc
|
||||
char.magic += 2 # char.magic is now 4
|
||||
|
||||
# check Attributes
|
||||
strength = char.strength # this is now 12
|
||||
is_sleepy = char.sleepy
|
||||
is_poisoned = char.poisoned
|
||||
|
||||
del char.strength # wipes the Attribute
|
||||
strength = char.strengh # back to the default (10) again
|
||||
```
|
||||
|
||||
See the [AttributeProperty](evennia.typeclasses.attributes.AttributeProperty) docs for more
|
||||
details on arguments.
|
||||
|
||||
An `AttributeProperty` will _not_ create an `Attribute` by default. A new `Attribute` will be created
|
||||
(or an existing one retrieved/updated) will happen differently depending on how the `autocreate`
|
||||
keyword:
|
||||
|
||||
- If `autocreate=False` (default), an `Attribute` will be created only if the field is explicitly
|
||||
assigned a value (even if the value is the same as the default, such as `char.strength = 10`).
|
||||
- If `autocreate=True`, an `Attribute` will be created as soon as the field is _accessed_ in
|
||||
any way (So both `strength = char.strength` and `char.strength = 10` will both make sure that
|
||||
an `Attribute` exists.
|
||||
|
||||
Example:
|
||||
|
||||
```python
|
||||
# in mygame/typeclasses/objects.py
|
||||
|
||||
from evennia import create_object
|
||||
from evennia import DefaultObject
|
||||
from evennia.typeclasses.attributes import AttributeProperty
|
||||
|
||||
class Object(DefaultObject):
|
||||
|
||||
value_a = AttributeProperty(default="foo")
|
||||
value_b = AttributeProperty(default="bar", autocreate=True)
|
||||
|
||||
obj = evennia.create_object(key="Dummy")
|
||||
|
||||
# these will find NO Attributes!
|
||||
obj.db.value_a
|
||||
obj.attributes.get("value_a")
|
||||
obj.db.value_b
|
||||
obj.attributes.get("value_b")
|
||||
|
||||
# get data from attribute-properties
|
||||
vala = obj.value_a # returns "foo"
|
||||
valb = obj.value_b # return "bar" AND creates the Attribute (autocreate)
|
||||
|
||||
# the autocreate property will now be found
|
||||
obj.db.value_a # still not found
|
||||
obj.attributes.get("value_a") # ''
|
||||
obj.db.value_b # now returns "bar"
|
||||
obj.attributes.get("value_b") # ''
|
||||
|
||||
# assign new values
|
||||
obj.value_a = 10 # will now create a new Attribute
|
||||
obj.value_b = 12 # will update the existing Attribute
|
||||
|
||||
# both are now found as Attributes
|
||||
obj.db.value_a # now returns 10
|
||||
obj.attributes.get("value_a") # ''
|
||||
obj.db.value_b # now returns 12
|
||||
obj.attributes.get("value_b") # ''
|
||||
```
|
||||
|
||||
If you always access your Attributes via the `AttributeProperty` this does not matter that much
|
||||
(it's also a bit of an optimization to not create an actual database `Attribute` unless the value changed).
|
||||
But until an `Attribute` has been created, `AttributeProperty` fields will _not_ show up with the
|
||||
`examine` command or by using the `.db` or `.attributes` handlers - so this is a bit inconsistent.
|
||||
If this is important, you need to 'initialize' them by accessing them at least once ... something
|
||||
like this:
|
||||
|
||||
|
||||
```python
|
||||
# ...
|
||||
class Character(DefaultCharacter):
|
||||
|
||||
strength = AttributeProperty(12, autocreate=True)
|
||||
agility = AttributeProperty(12, autocreate=True)
|
||||
strength = AttributeProperty(10, category='stat')
|
||||
constitution = AttributeProperty(11, category='stat')
|
||||
agility = AttributeProperty(12, category='stat')
|
||||
magic = AttributeProperty(13, category='stat')
|
||||
|
||||
sleepy = AttributeProperty(False, autocreate=False)
|
||||
poisoned = AttributeProperty(False, autocreate=False)
|
||||
|
||||
def at_object_creation(self):
|
||||
# initializing
|
||||
self.strength # by accessing it, the Attribute is auto-created
|
||||
self.agility # ''
|
||||
# ...
|
||||
```
|
||||
|
||||
```{important}
|
||||
If you created your `AttributeProperty` with a `category`, you *must* specify the
|
||||
category in `.attributes.get()` if you want to find it this way. Remember that
|
||||
`.db` always uses a `category` of `None`.
|
||||
When a new instance of the class is created, new `Attributes` will be created with the value and category given.
|
||||
|
||||
With `AttributeProperty`'s set up like this, one can access the underlying `Attribute` like a regular property on the created object:
|
||||
|
||||
```python
|
||||
char = create_object(Character)
|
||||
|
||||
char.strength # returns 10
|
||||
char.agility = 15 # assign a new value (category remains 'stat')
|
||||
|
||||
char.db.magic # returns None (wrong category)
|
||||
char.attributes.get("agility", category="stat") # returns 15
|
||||
|
||||
char.db.sleepy # returns None because autocreate=False (see below)
|
||||
|
||||
```
|
||||
|
||||
```{warning}
|
||||
Be careful to not assign AttributeProperty's to names of properties and methods already existing on the class, like 'key' or 'at_object_creation'. That could lead to very confusing errors.
|
||||
```
|
||||
|
||||
The `autocreate=False` (default is `True`) used for `sleepy` and `poisoned` is worth a closer explanation. When `False`, _no_ Attribute will be auto-created for these AttributProperties unless they are _explicitly_ set.
|
||||
The advantage of not creating an Attribute is that the default value given to `AttributeProperty` is returned with no database access unless you change it. This also means that if you want to change the default later, all entities previously create will inherit the new default.
|
||||
The drawback is that without a database precense you can't find the Attribute via `.db` and `.attributes.get` (or by querying for it in other ways in the database):
|
||||
|
||||
```python
|
||||
char.sleepy # returns False, no db access
|
||||
|
||||
char.db.sleepy # returns None - no Attribute exists
|
||||
char.attributes.get("sleepy") # returns None too
|
||||
|
||||
char.sleepy = True # now an Attribute is created
|
||||
char.db.sleepy # now returns True!
|
||||
char.attributes.get("sleepy") # now returns True
|
||||
|
||||
char.sleepy # now returns True, involves db access
|
||||
|
||||
```
|
||||
|
||||
You can e.g. `del char.strength` to set the value back to the default (the value defined
|
||||
in the `AttributeProperty`).
|
||||
|
||||
See the [AttributeProperty API](evennia.typeclasses.attributes.AttributeProperty) for more details on how to create it with special options, like giving access-restrictions.
|
||||
|
||||
|
||||
## Managing Attributes in-game
|
||||
|
||||
Attributes are mainly used by code. But one can also allow the builder to use Attributes to
|
||||
'turn knobs' in-game. For example a builder could want to manually tweak the "level" Attribute of an
|
||||
Attributes are mainly used by code. But one can also allow the builder to use Attributes to
|
||||
'turn knobs' in-game. For example a builder could want to manually tweak the "level" Attribute of an
|
||||
enemy NPC to lower its difficuly.
|
||||
|
||||
When setting Attributes this way, you are severely limited in what can be stored - this is because
|
||||
When setting Attributes this way, you are severely limited in what can be stored - this is because
|
||||
giving players (even builders) the ability to store arbitrary Python would be a severe security
|
||||
problem.
|
||||
problem.
|
||||
|
||||
In game you can set an Attribute like this:
|
||||
In game you can set an Attribute like this:
|
||||
|
||||
set myobj/foo = "bar"
|
||||
|
||||
To view, do
|
||||
To view, do
|
||||
|
||||
set myobj/foo
|
||||
set myobj/foo
|
||||
|
||||
or see them together with all object-info with
|
||||
or see them together with all object-info with
|
||||
|
||||
examine myobj
|
||||
|
||||
The first `set`-example will store a new Attribute `foo` on the object `myobj` and give it the
|
||||
The first `set`-example will store a new Attribute `foo` on the object `myobj` and give it the
|
||||
value "bar".
|
||||
You can store numbers, booleans, strings, tuples, lists and dicts this way. But if
|
||||
You can store numbers, booleans, strings, tuples, lists and dicts this way. But if
|
||||
you store a list/tuple/dict they must be proper Python structures and may _only_ contain strings
|
||||
or numbers. If you try to insert an unsupported structure, the input will be converted to a
|
||||
or numbers. If you try to insert an unsupported structure, the input will be converted to a
|
||||
string.
|
||||
|
||||
set myobj/mybool = True
|
||||
|
|
@ -331,8 +263,8 @@ For the last line you'll get a warning and the value instead will be saved as a
|
|||
|
||||
## Locking and checking Attributes
|
||||
|
||||
While the `set` command is limited to builders, individual Attributes are usually not
|
||||
locked down. You may want to lock certain sensitive Attributes, in particular for games
|
||||
While the `set` command is limited to builders, individual Attributes are usually not
|
||||
locked down. You may want to lock certain sensitive Attributes, in particular for games
|
||||
where you allow player building. You can add such limitations by adding a [lock string](./Locks.md)
|
||||
to your Attribute. A NAttribute have no locks.
|
||||
|
||||
|
|
@ -341,7 +273,7 @@ The relevant lock types are
|
|||
- `attrread` - limits who may read the value of the Attribute
|
||||
- `attredit` - limits who may set/change this Attribute
|
||||
|
||||
You must use the `AttributeHandler` to assign the lockstring to the Attribute:
|
||||
You must use the `AttributeHandler` to assign the lockstring to the Attribute:
|
||||
|
||||
```python
|
||||
lockstring = "attread:all();attredit:perm(Admins)"
|
||||
|
|
@ -349,7 +281,7 @@ obj.attributes.add("myattr", "bar", lockstring=lockstring)"
|
|||
```
|
||||
|
||||
If you already have an Attribute and want to add a lock in-place you can do so
|
||||
by having the `AttributeHandler` return the `Attribute` object itself (rather than
|
||||
by having the `AttributeHandler` return the `Attribute` object itself (rather than
|
||||
its value) and then assign the lock to it directly:
|
||||
|
||||
```python
|
||||
|
|
@ -361,8 +293,8 @@ Note the `return_obj` keyword which makes sure to return the `Attribute` object
|
|||
could be accessed.
|
||||
|
||||
A lock is no good if nothing checks it -- and by default Evennia does not check locks on Attributes.
|
||||
To check the `lockstring` you provided, make sure you include `accessing_obj` and set
|
||||
`default_access=False` as you make a `get` call.
|
||||
To check the `lockstring` you provided, make sure you include `accessing_obj` and set
|
||||
`default_access=False` as you make a `get` call.
|
||||
|
||||
```python
|
||||
# in some command code where we want to limit
|
||||
|
|
@ -396,13 +328,13 @@ values into a string representation before storing it to the database. This is d
|
|||
With a single object, we mean anything that is *not iterable*, like numbers, strings or custom class
|
||||
instances without the `__iter__` method.
|
||||
|
||||
* You can generally store any non-iterable Python entity that can be pickled.
|
||||
* Single database objects/typeclasses can be stored, despite them normally not being possible
|
||||
to pickle. Evennia wil convert them to an internal representation using their classname,
|
||||
database-id and creation-date with a microsecond precision. When retrieving, the object
|
||||
* You can generally store any non-iterable Python entity that can be _pickled_.
|
||||
* Single database objects/typeclasses can be stored, despite them normally not being possible
|
||||
to pickle. Evennia will convert them to an internal representation using theihr classname,
|
||||
database-id and creation-date with a microsecond precision. When retrieving, the object
|
||||
instance will be re-fetched from the database using this information.
|
||||
* To convert the database object, Evennia must know it's there. If you *hide* a database object
|
||||
inside a non-iterable class, you will run into errors - this is not supported!
|
||||
* If you 'hide' a db-obj as a property on a custom class, Evennia will not be
|
||||
able to find it to serialize it. For that you need to help it out (see below).
|
||||
|
||||
```{code-block} python
|
||||
:caption: Valid assignments
|
||||
|
|
@ -413,16 +345,55 @@ obj.db.test1 = False
|
|||
# a database object (will be stored as an internal representation)
|
||||
obj.db.test2 = myobj
|
||||
```
|
||||
|
||||
As mentioned, Evennia will not be able to automatically serialize db-objects
|
||||
'hidden' in arbitrary properties on an object. This will lead to an error
|
||||
when saving the Attribute.
|
||||
|
||||
```{code-block} python
|
||||
:caption: Invalid, 'hidden' dbobject
|
||||
|
||||
# example of an invalid, "hidden" dbobject
|
||||
# example of storing an invalid, "hidden" dbobject in Attribute
|
||||
class Container:
|
||||
def __init__(self, mydbobj):
|
||||
# no way for Evennia to know this is a database object!
|
||||
self.mydbobj = mydbobj
|
||||
|
||||
# let's assume myobj is a db-object
|
||||
container = Container(myobj)
|
||||
obj.db.invalid = container # will cause error!
|
||||
obj.db.mydata = container # will raise error!
|
||||
|
||||
```
|
||||
|
||||
By adding two methods `__serialize_dbobjs__` and `__deserialize_dbobjs__` to the
|
||||
object you want to save, you can pre-serialize and post-deserialize all 'hidden'
|
||||
objects before Evennia's main serializer gets to work. Inside these methods, use Evennia's
|
||||
[evennia.utils.dbserialize.dbserialize](evennia.utils.dbserialize.dbserialize) and
|
||||
[dbunserialize](evennia.utils.dbserialize.dbunserialize) functions to safely
|
||||
serialize the db-objects you want to store.
|
||||
|
||||
```{code-block} python
|
||||
:caption: Fixing an invalid 'hidden' dbobj for storing in Attribute
|
||||
|
||||
from evennia.utils import dbserialize # important
|
||||
|
||||
class Container:
|
||||
def __init__(self, mydbobj):
|
||||
# A 'hidden' db-object
|
||||
self.mydbobj = mydbobj
|
||||
|
||||
def __serialize_dbobjs__(self):
|
||||
"""This is called before serialization and allows
|
||||
us to custom-handle those 'hidden' dbobjs"""
|
||||
self.mydbobj = dbserialize.dbserialize(self.mydbobj
|
||||
|
||||
def __deserialize_dbobjs__(self):
|
||||
"""This is called after deserialization and allows you to
|
||||
restore the 'hidden' dbobjs you serialized before"""
|
||||
self.mydbobj = dbserialize.dbunserialize(self.mydbobj)
|
||||
|
||||
# let's assume myobj is a db-object
|
||||
container = Container(myobj)
|
||||
obj.db.mydata = container # will now work fine!
|
||||
```
|
||||
|
||||
### Storing multiple objects
|
||||
|
|
@ -472,6 +443,12 @@ obj.db.test8[2]["test"] = 5
|
|||
# test8 is now [4,2,{"test":5}]
|
||||
```
|
||||
|
||||
Note that if make some advanced iterable object, and store an db-object on it in
|
||||
a way such that it is _not_ returned by iterating over it, you have created a
|
||||
'hidden' db-object. See [the previous section](#storing-single-objects) for how
|
||||
to tell Evennia how to serialize such hidden objects safely.
|
||||
|
||||
|
||||
### Retrieving Mutable objects
|
||||
|
||||
A side effect of the way Evennia stores Attributes is that *mutable* iterables (iterables that can
|
||||
|
|
@ -497,41 +474,41 @@ print(obj.db.mylist) # now also [1, 2, 3, 5]
|
|||
```
|
||||
|
||||
When you extract your mutable Attribute data into a variable like `mylist`, think of it as getting a _snapshot_
|
||||
of the variable. If you update the snapshot, it will save to the database, but this change _will not propagate to
|
||||
of the variable. If you update the snapshot, it will save to the database, but this change _will not propagate to
|
||||
any other snapshots you may have done previously_.
|
||||
|
||||
```python
|
||||
```python
|
||||
obj.db.mylist = [1, 2, 3, 4]
|
||||
mylist1 = obj.db.mylist
|
||||
mylist2 = obj.db.mylist
|
||||
mylist1[3] = 5
|
||||
mylist1 = obj.db.mylist
|
||||
mylist2 = obj.db.mylist
|
||||
mylist1[3] = 5
|
||||
|
||||
print(mylist1) # this is now [1, 2, 3, 5]
|
||||
print(obj.db.mylist) # also updated to [1, 2, 3, 5]
|
||||
print(obj.db.mylist) # also updated to [1, 2, 3, 5]
|
||||
|
||||
print(mylist2) # still [1, 2, 3, 4] !
|
||||
print(mylist2) # still [1, 2, 3, 4] !
|
||||
|
||||
```
|
||||
|
||||
```{sidebar}
|
||||
Remember, the complexities of this section only relate to *mutable* iterables - things you can update
|
||||
in-place, like lists and dicts. [Immutable](https://en.wikipedia.org/wiki/Immutable) objects (strings,
|
||||
in-place, like lists and dicts. [Immutable](https://en.wikipedia.org/wiki/Immutable) objects (strings,
|
||||
numbers, tuples etc) are already disconnected from the database from the onset.
|
||||
```
|
||||
|
||||
To avoid confusion with mutable Attributes, only work with one variable (snapshot) at a time and save
|
||||
back the results as needed.
|
||||
To avoid confusion with mutable Attributes, only work with one variable (snapshot) at a time and save
|
||||
back the results as needed.
|
||||
|
||||
You can also choose to "disconnect" the Attribute entirely from the
|
||||
database with the help of the `.deserialize()` method:
|
||||
|
||||
```python
|
||||
obj.db.mylist = [1, 2, 3, 4, {1: 2}]
|
||||
mylist = obj.db.mylist.deserialize()
|
||||
mylist = obj.db.mylist.deserialize()
|
||||
```
|
||||
|
||||
The result of this operation will be a structure only consisting of normal Python mutables (`list`
|
||||
instead of `_SaverList`, `dict` instead of `_SaverDict` and so on). If you update it, you need to
|
||||
instead of `_SaverList`, `dict` instead of `_SaverDict` and so on). If you update it, you need to
|
||||
explicitly save it back to the Attribute for it to save.
|
||||
|
||||
## Properties of Attributes
|
||||
|
|
@ -586,7 +563,7 @@ are **non-persistent** - they will _not_ survive a server reload.
|
|||
Differences between `Attributes` and `NAttributes`:
|
||||
|
||||
- `NAttribute`s are always wiped on a server reload.
|
||||
- They only exist in memory and never involve the database at all, making them faster to
|
||||
- They only exist in memory and never involve the database at all, making them faster to
|
||||
access and edit than `Attribute`s.
|
||||
- `NAttribute`s can store _any_ Python structure (and database object) without limit.
|
||||
- They can _not_ be set with the standard `set` command (but they are visible with `examine`)
|
||||
|
|
@ -594,10 +571,10 @@ Differences between `Attributes` and `NAttributes`:
|
|||
There are some important reasons we recommend using `ndb` to store temporary data rather than
|
||||
the simple alternative of just storing a variable directly on an object:
|
||||
|
||||
- NAttributes are tracked by Evennia and will not be purged in various cache-cleanup operations
|
||||
the server may do. So using them guarantees that they'll remain available at least as long as
|
||||
- NAttributes are tracked by Evennia and will not be purged in various cache-cleanup operations
|
||||
the server may do. So using them guarantees that they'll remain available at least as long as
|
||||
the server lives.
|
||||
- It's a consistent style - `.db/.attributes` and `.ndb/.nattributes` makes for clean-looking code
|
||||
- It's a consistent style - `.db/.attributes` and `.ndb/.nattributes` makes for clean-looking code
|
||||
where it's clear how long-lived (or not) your data is to be.
|
||||
|
||||
### Persistent vs non-persistent
|
||||
|
|
@ -625,4 +602,4 @@ useful in a few situations though.
|
|||
- `NAttribute`s have no restrictions at all on what they can store, since they
|
||||
don't need to worry about being saved to the database - they work very well for temporary storage.
|
||||
- You want to implement a fully or partly *non-persistent world*. Who are we to argue with your
|
||||
grand vision!
|
||||
grand vision!
|
||||
|
|
|
|||
|
|
@ -10,14 +10,15 @@ the return from the function.
|
|||
from evennia.utils.funcparser import FuncParser
|
||||
|
||||
def _power_callable(*args, **kwargs):
|
||||
"""This will be callable as $square(number, power=<num>) in string"""
|
||||
"""This will be callable as $pow(number, power=<num>) in string"""
|
||||
pow = int(kwargs.get('power', 2))
|
||||
return float(args[0]) ** pow
|
||||
|
||||
# create a parser and tell it that '$pow' means using _power_callable
|
||||
parser = FuncParser({"pow": _power_callable})
|
||||
|
||||
```
|
||||
Next, just pass a string into the parser, optionally containing `$func(...)` markers:
|
||||
Next, just pass a string into the parser, containing `$func(...)` markers:
|
||||
|
||||
```python
|
||||
parser.parse("We have that 4 x 4 x 4 is $pow(4, power=3).")
|
||||
|
|
@ -71,7 +72,7 @@ You can apply inline function parsing to any string. The
|
|||
from evennia.utils import funcparser
|
||||
|
||||
parser = FuncParser(callables, **default_kwargs)
|
||||
parsed_string = parser.parser(input_string, raise_errors=False,
|
||||
parsed_string = parser.parse(input_string, raise_errors=False,
|
||||
escape=False, strip=False,
|
||||
return_str=True, **reserved_kwargs)
|
||||
|
||||
|
|
@ -90,8 +91,12 @@ available to the parser as you parse strings with it. It can either be
|
|||
an underscore `_`) will be considered a suitable callable. The name of the function will be the `$funcname`
|
||||
by which it can be called.
|
||||
- A `list` of modules/paths. This allows you to pull in modules from many sources for your parsing.
|
||||
- The `**default` kwargs are optional kwargs that will be passed to _all_
|
||||
callables every time this parser is used - unless the user overrides it explicitly in
|
||||
their call. This is great for providing sensible standards that the user can
|
||||
tweak as needed.
|
||||
|
||||
The other arguments to the parser:
|
||||
`FuncParser.parse` takes further arguments, and can vary for every string parsed.
|
||||
|
||||
- `raise_errors` - By default, any errors from a callable will be quietly ignored and the result
|
||||
will be that the failing function call will show verbatim. If `raise_errors` is set,
|
||||
|
|
@ -102,12 +107,14 @@ The other arguments to the parser:
|
|||
- `return_str` - When `True` (default), `parser` always returns a string. If `False`, it may return
|
||||
the return value of a single function call in the string. This is the same as using the `.parse_to_any`
|
||||
method.
|
||||
- The `**default/reserved_keywords` are optional and allow you to pass custom data into _every_ function
|
||||
call. This is great for including things like the current session or config options. Defaults can be
|
||||
replaced if the user gives the same-named kwarg in the string's function call. Reserved kwargs are always passed,
|
||||
ignoring defaults or what the user passed. In addition, the `funcparser` and `raise_errors`
|
||||
reserved kwargs are always passed - the first is a back-reference to the `FuncParser` instance and the second
|
||||
is the `raise_errors` boolean passed into `FuncParser.parse`.
|
||||
- The `**reserved_keywords` are _always_ passed to every callable in the string.
|
||||
They override any `**defaults` given when instantiating the parser and cannot
|
||||
be overridden by the user - if they enter the same kwarg it will be ignored.
|
||||
This is great for providing the current session, settings etc.
|
||||
- The `funcparser` and `raise_errors`
|
||||
are always added as reserved keywords - the first is a
|
||||
back-reference to the `FuncParser` instance and the second
|
||||
is the `raise_errors` boolean given to `FuncParser.parse`.
|
||||
|
||||
Here's an example of using the default/reserved keywords:
|
||||
|
||||
|
|
@ -158,7 +165,8 @@ created the parser.
|
|||
|
||||
However, if you _nest_ functions, the return of the innermost function may be something other than
|
||||
a string. Let's introduce the `$eval` function, which evaluates simple expressions using
|
||||
Python's `literal_eval` and/or `simple_eval`.
|
||||
Python's `literal_eval` and/or `simple_eval`. It returns whatever data type it
|
||||
evaluates to.
|
||||
|
||||
"There's a $toint($eval(10 * 2.2))% chance of survival."
|
||||
|
||||
|
|
@ -177,23 +185,66 @@ will be a string:
|
|||
"There's a 22% chance of survival."
|
||||
```
|
||||
|
||||
However, if you use the `parse_to_any` (or `parse(..., return_str=True)`) and _don't add any extra string around the outermost function call_,
|
||||
However, if you use the `parse_to_any` (or `parse(..., return_str=False)`) and
|
||||
_don't add any extra string around the outermost function call_,
|
||||
you'll get the return type of the outermost callable back:
|
||||
|
||||
```python
|
||||
parser.parse_to_any("$toint($eval(10 * 2.2)%")
|
||||
"22%"
|
||||
parser.parse_to_any("$toint($eval(10 * 2.2)")
|
||||
22
|
||||
parser.parse_to_any("the number $toint($eval(10 * 2.2).")
|
||||
"the number 22"
|
||||
parser.parse_to_any("$toint($eval(10 * 2.2)%")
|
||||
"22%"
|
||||
```
|
||||
|
||||
### Escaping special character
|
||||
|
||||
When entering funcparser callables in strings, it looks like a regular
|
||||
function call inside a string:
|
||||
|
||||
```python
|
||||
"This is a $myfunc(arg1, arg2, kwarg=foo)."
|
||||
```
|
||||
|
||||
Commas (`,`) and equal-signs (`=`) are considered to separate the arguments and
|
||||
kwargs. In the same way, the right parenthesis (`)`) closes the argument list.
|
||||
Sometimes you want to include commas in the argument without it breaking the
|
||||
argument list.
|
||||
|
||||
```python
|
||||
"There is a $format(beautiful meadow, with dandelions) to the west."
|
||||
```
|
||||
|
||||
You can escape in various ways.
|
||||
|
||||
- Prepending with the escape character `\`
|
||||
|
||||
```python
|
||||
"There is a $format(beautiful meadow\, with dandelions) to the west."
|
||||
```
|
||||
- Wrapping your strings in quotes. This works like Python, and you can nest
|
||||
double and single quotes inside each other if so needed. The result will
|
||||
be a verbatim string that contains everything but the outermost quotes.
|
||||
|
||||
```python
|
||||
"There is a $format('beautiful meadow, with dandelions') to the west."
|
||||
```
|
||||
- If you want verbatim quotes in your string, you can escape them too.
|
||||
|
||||
```python
|
||||
"There is a $format('beautiful meadow, with \'dandelions\'') to the west."
|
||||
```
|
||||
|
||||
### Safe convertion of inputs
|
||||
|
||||
Since you don't know in which order users may use your callables, they should always check the types
|
||||
of its inputs and convert to the type the callable needs. Note also that when converting from strings,
|
||||
there are limits what inputs you can support. This is because FunctionParser strings are often used by
|
||||
non-developer players/builders and some things (such as complex classes/callables etc) are just not
|
||||
safe/possible to convert from string representation.
|
||||
Since you don't know in which order users may use your callables, they should
|
||||
always check the types of its inputs and convert to the type the callable needs.
|
||||
Note also that when converting from strings, there are limits what inputs you
|
||||
can support. This is because FunctionParser strings can be used by
|
||||
non-developer players/builders and some things (such as complex
|
||||
classes/callables etc) are just not safe/possible to convert from string
|
||||
representation.
|
||||
|
||||
In `evennia.utils.utils` is a helper called
|
||||
[safe_convert_to_types](evennia.utils.utils.safe_convert_to_types). This function
|
||||
|
|
@ -204,19 +255,24 @@ from evennia.utils.utils import safe_convert_to_types
|
|||
|
||||
def _process_callable(*args, **kwargs):
|
||||
"""
|
||||
A callable with a lot of custom options
|
||||
|
||||
$process(expression, local, extra=34, extra2=foo)
|
||||
$process(expression, local, extra1=34, extra2=foo)
|
||||
|
||||
"""
|
||||
args, kwargs = safe_convert_to_type(
|
||||
(('py', 'py'), {'extra1': int, 'extra2': str}),
|
||||
(('py', str), {'extra1': int, 'extra2': str}),
|
||||
*args, **kwargs)
|
||||
|
||||
# args/kwargs should be correct types now
|
||||
|
||||
```
|
||||
|
||||
In other words, in the callable `$process(expression, local, extra1=..,
|
||||
extra2=...)`, the first argument will be handled by the 'py' converter
|
||||
(described below), the second will passed through regular Python `str`,
|
||||
kwargs will be handled by `int` and `str` respectively. You can supply
|
||||
your own converter function as long as it takes one argument and returns
|
||||
the converted result.
|
||||
|
||||
In other words,
|
||||
|
||||
```python
|
||||
|
|
@ -224,8 +280,7 @@ args, kwargs = safe_convert_to_type(
|
|||
(tuple_of_arg_converters, dict_of_kwarg_converters), *args, **kwargs)
|
||||
```
|
||||
|
||||
Each converter should be a callable taking one argument - this will be the arg/kwarg-value to convert. The
|
||||
special converter `"py"` will try to convert a string argument to a Python structure with the help of the
|
||||
The special converter `"py"` will try to convert a string argument to a Python structure with the help of the
|
||||
following tools (which you may also find useful to experiment with on your own):
|
||||
|
||||
- [ast.literal_eval](https://docs.python.org/3.8/library/ast.html#ast.literal_eval) is an in-built Python
|
||||
|
|
@ -339,12 +394,12 @@ references to other objects accessible via these callables.
|
|||
result of `you_obj.get_display_name(looker=receiver)`. This allows for a single string to echo differently
|
||||
depending on who sees it, and also to reference other people in the same way.
|
||||
- `$You([key])` - same as `$you` but always capitalized.
|
||||
- `$conj(verb)` ([code](evennia.utils.funcparser.funcparser_callable_conjugate)) - conjugates a verb
|
||||
- `$conj(verb)` ([code](evennia.utils.funcparser.funcparser_callable_conjugate)) - conjugates a verb
|
||||
between 2nd person presens to 3rd person presence depending on who
|
||||
sees the string. For example `"$You() $conj(smiles)".` will show as "You smile." and "Tom smiles." depending
|
||||
on who sees it. This makes use of the tools in [evennia.utils.verb_conjugation](evennia.utils.verb_conjugation)
|
||||
to do this, and only works for English verbs.
|
||||
- `$pron(pronoun [,options])` ([code](evennia.utils.funcparser.funcparser_callable_pronoun)) - Dynamically
|
||||
- `$pron(pronoun [,options])` ([code](evennia.utils.funcparser.funcparser_callable_pronoun)) - Dynamically
|
||||
map pronouns (like his, herself, you, its etc) between 1st/2nd person to 3rd person.
|
||||
|
||||
### Example
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ All new accounts are given a default set of permissions defined by
|
|||
## Managing Permissions
|
||||
|
||||
In-game, you use the `perm` command to add and remove permissions
|
||||
|
||||
j
|
||||
perm/account Tommy = Builders
|
||||
perm/account/del Tommy = Builders
|
||||
|
||||
|
|
|
|||
|
|
@ -1,20 +1,33 @@
|
|||
# Tags
|
||||
|
||||
```{code-block}
|
||||
:caption: In game
|
||||
> tag obj = tagname
|
||||
```
|
||||
```{code-block} python
|
||||
:caption: In code, using .tags (TagHandler)
|
||||
|
||||
A common task of a game designer is to organize and find groups of objects and do operations on
|
||||
them. A classic example is to have a weather script affect all "outside" rooms. Another would be for
|
||||
a player casting a magic spell that affects every location "in the dungeon", but not those
|
||||
"outside". Another would be to quickly find everyone joined with a particular guild or everyone
|
||||
currently dead.
|
||||
obj.tags.add("mytag", category="foo")
|
||||
obj.tags.get("mytag", category="foo")
|
||||
```
|
||||
|
||||
*Tags* are short text labels that you attach to objects so as to easily be able to retrieve and
|
||||
group them. An Evennia entity can be tagged with any number of Tags. On the database side, Tag
|
||||
entities are *shared* between all objects with that tag. This makes them very efficient but also
|
||||
fundamentally different from [Attributes](./Attributes.md), each of which always belongs to one *single*
|
||||
object.
|
||||
```{code-block} python
|
||||
:caption: In code, using TagProperty (auto-assign tag to all instances of the class)
|
||||
|
||||
In Evennia, Tags are technically also used to implement `Aliases` (alternative names for objects)
|
||||
and `Permissions` (simple strings for [Locks](./Locks.md) to check for).
|
||||
from evennia import DefaultObject
|
||||
from evennia import TagProperty
|
||||
class Sword(DefaultObject):
|
||||
can_be_wielded = TagProperty(category='combat')
|
||||
has_sharp_edge = TagProperty(category='combat')
|
||||
|
||||
```
|
||||
|
||||
_Tags_ are short text lables one can 'hang' on objects in order to organize, group and quickly find out their properties. An Evennia entity can be tagged by any number of tags. They are more efficient than [Attributes](./Attributes.md) since on the database-side, Tags are _shared_ between all objects with that particular tag. A tag does not carry a value in itself; it either sits on the entity
|
||||
|
||||
Above, the tags inform us that the `Sword` is both sharp and can be wielded. If that's all they do, they could just be a normal Python flag. When tags become important is if there are a lot of objects with different combinations of tags. Maybe you have a magical spell that dulls _all_ sharp-edged objects in the castle - whether sword, dagger, spear or kitchen knife! You can then just grab all objects with the `has_sharp_edge` tag.
|
||||
Another example would be a weather script affecting all rooms tagged as `outdoors` or finding all characters tagged with `belongs_to_fighter_guild`.
|
||||
|
||||
In Evennia, Tags are technically also used to implement `Aliases` (alternative names for objects) and `Permissions` (simple strings for [Locks](./Locks.md) to check for).
|
||||
|
||||
|
||||
## Properties of Tags (and Aliases and Permissions)
|
||||
|
|
|
|||
|
|
@ -17,7 +17,7 @@ updated after May 2021 will be missing some translations.
|
|||
+===============+======================+==============+
|
||||
| es | Spanish | Aug 2019 |
|
||||
+---------------+----------------------+--------------+
|
||||
| fr | French | Nov 2018 |
|
||||
| fr | French | Mar 2022 |
|
||||
+---------------+----------------------+--------------+
|
||||
| it | Italian | Feb 2015 |
|
||||
+---------------+----------------------+--------------+
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ class Health(Component):
|
|||
Components may define DBFields or NDBFields at the class level.
|
||||
DBField will store its values in the host's DB with a prefixed key.
|
||||
NDBField will store its values in the host's NDB and will not persist.
|
||||
The key used will be 'component_name__field_name'.
|
||||
The key used will be 'component_name::field_name'.
|
||||
They use AttributeProperty under the hood.
|
||||
|
||||
Example:
|
||||
|
|
@ -50,7 +50,29 @@ class Health(Component):
|
|||
health = DBField(default=1)
|
||||
```
|
||||
|
||||
Note that default is optional and will default to None
|
||||
Note that default is optional and will default to None.
|
||||
|
||||
Adding a component to a host will also a similarly named tag with 'components' as category.
|
||||
A Component named health will appear as key="health, category="components".
|
||||
This allows you to retrieve objects with specific components by searching with the tag.
|
||||
|
||||
It is also possible to add Component Tags the same way, using TagField.
|
||||
TagField accepts a default value and can be used to store a single or multiple tags.
|
||||
Default values are automatically added when the component is added.
|
||||
Component Tags are cleared from the host if the component is removed.
|
||||
|
||||
Example:
|
||||
```python
|
||||
from evennia.contrib.base_systems.components import Component, TagField
|
||||
|
||||
class Health(Component):
|
||||
resistances = TagField()
|
||||
vulnerability = TagField(default="fire", enforce_single=True)
|
||||
```
|
||||
|
||||
The 'resistances' field in this example can be set to multiple times and it will keep the added tags.
|
||||
The 'vulnerability' field in this example will override the previous tag with the new one.
|
||||
|
||||
|
||||
|
||||
Each typeclass using the ComponentHolderMixin can declare its components
|
||||
|
|
|
|||
|
|
@ -115,7 +115,7 @@ Try to `look` at the box to see the (default) description.
|
|||
|
||||
The description you get is not very exciting. Let's add some flavor.
|
||||
|
||||
describe box = This is a large and very heavy box.
|
||||
desc box = This is a large and very heavy box.
|
||||
|
||||
If you try the `get` command we will pick up the box. So far so good, but if we really want this to
|
||||
be a large and heavy box, people should _not_ be able to run off with it that easily. To prevent
|
||||
|
|
@ -155,10 +155,10 @@ later, in the [Commands tutorial](./Adding-Commands.md).
|
|||
|
||||
[Scripts](../../../Components/Scripts.md) are powerful out-of-character objects useful for many "under the hood" things.
|
||||
One of their optional abilities is to do things on a timer. To try out a first script, let's put one
|
||||
on ourselves. There is an example script in `evennia/contrib/tutorial_examples/bodyfunctions.py`
|
||||
on ourselves. There is an example script in `evennia/contrib/tutorials/bodyfunctions/bodyfunctions.py`
|
||||
that is called `BodyFunctions`. To add this to us we will use the `script` command:
|
||||
|
||||
script self = tutorial_examples.bodyfunctions.BodyFunctions
|
||||
script self = tutorials.bodyfunctions.BodyFunctions
|
||||
|
||||
This string will tell Evennia to dig up the Python code at the place we indicate. It already knows
|
||||
to look in the `contrib/` folder, so we don't have to give the full path.
|
||||
|
|
@ -179,7 +179,7 @@ output every time it fires.
|
|||
|
||||
When you are tired of your character's "insights", kill the script with
|
||||
|
||||
script/stop self = tutorial_examples.bodyfunctions.BodyFunctions
|
||||
script/stop self = tutorials.bodyfunctions.BodyFunctions
|
||||
|
||||
You create your own scripts in Python, outside the game; the path you give to `script` is literally
|
||||
the Python path to your script file. The [Scripts](../../../Components/Scripts.md) page explains more details.
|
||||
|
|
@ -199,7 +199,7 @@ named simply `Object`. Let's create an object that is a little more interesting.
|
|||
|
||||
Let's make us one of _those_!
|
||||
|
||||
create/drop button:tutorial_examples.red_button.RedButton
|
||||
create/drop button:tutorials.red_button.RedButton
|
||||
|
||||
The same way we did with the Script Earler, we specify a "Python-path" to the Python code we want Evennia
|
||||
to use for creating the object. There you go - one red button.
|
||||
|
|
@ -301,7 +301,7 @@ The Command-help is something you modify in Python code. We'll get to that when
|
|||
add Commands. But you can also add regular help entries, for example to explain something about
|
||||
the history of your game world:
|
||||
|
||||
sethelp/add History = At the dawn of time ...
|
||||
sethelp History = At the dawn of time ...
|
||||
|
||||
You will now find your new `History` entry in the `help` list and read your help-text with `help History`.
|
||||
|
||||
|
|
|
|||
|
|
@ -2,137 +2,130 @@
|
|||
|
||||
*A list of resources that may be useful for Evennia users and developers.*
|
||||
|
||||
## Official Evennia links
|
||||
## Official Evennia resources
|
||||
|
||||
- [evennia.com](https://www.evennia.com) - Main Evennia portal page. Links to all corners of Evennia.
|
||||
- [Evennia github page](https://github.com/evennia/evennia) - Download code and read documentation.
|
||||
- [Evennia official chat
|
||||
channel](https://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb)
|
||||
- Our official IRC chat #evennia at irc.freenode.net:6667.
|
||||
- [Evennia forums/mailing list](https://groups.google.com/group/evennia) - Web interface to our
|
||||
google group.
|
||||
- [Evennia development blog](https://evennia.blogspot.com/) - Musings from the lead developer.
|
||||
- [Evennia's manual on ReadTheDocs](https://readthedocs.org/projects/evennia/) - Read and download
|
||||
offline in html, PDF or epub formats.
|
||||
- [Evennia Game Index](http://games.evennia.com/) - An automated listing of Evennia games.
|
||||
----
|
||||
- [Evennia development blog](https://evennia.blogspot.com/) - Musings from the lead developer.
|
||||
- [Evennia on GitHub](https://github.com/evennia/evennia) - Download code and read documentation.
|
||||
- [Evennia on Open Hub](https://www.openhub.net/p/6906)
|
||||
- [Evennia on OpenHatch](https://openhatch.org/projects/Evennia)
|
||||
- [Evennia on PyPi](https://pypi.python.org/pypi/Evennia-MUD-Server/)
|
||||
- [Evennia subreddit](https://www.reddit.com/r/Evennia/) (not much there yet though)
|
||||
|
||||
## Third-party Evennia utilities and resources
|
||||
## Evennia Community
|
||||
|
||||
*For publicly available games running on Evennia, add and find those in the [Evennia game
|
||||
index](http://games.evennia.com) instead!*
|
||||
- [Evennia Game Index](http://games.evennia.com/) - An automated listing of Evennia games.
|
||||
- [Evennia official Discord channel](https://discord.gg/AJJpcRUhtF)
|
||||
- [Evennia official forums](https://github.com/evennia/evennia/discussions) on Github Discussions.
|
||||
- [Evennia subreddit](https://www.reddit.com/r/Evennia/)
|
||||
|
||||
- [Discord Evennia channel](https://discord.gg/NecFePw) - This is a fan-driven Discord channel with
|
||||
a bridge to the official Evennia IRC channel.
|
||||
## Third-party Evennia tools
|
||||
|
||||
---
|
||||
|
||||
- [Discord live blog](https://discordapp.com/channels/517176782357528616/517176782781415434) of the
|
||||
_Blackbirds_ Evennia game project.
|
||||
- [Unreal Engine Evennia plugin](https://www.unrealengine.com/marketplace/en-US/slug/evennia-plugin)
|
||||
an in-progress Unreal plugin for integrating Evennia with Epic Games' Unreal Engine.
|
||||
- [The dark net/March Hare MUD](https://github.com/thedarknet/evennia) from the 2019 [DEF CON
|
||||
27](https://www.defcon.org/html/defcon-27/dc-27-index.html) hacker conference in Paris. This is an
|
||||
Evennia game dir with batchcode to build the custom _Hackers_ style cyberspace zone with puzzles and
|
||||
challenges [used during the conference](https://dcdark.net/home#).
|
||||
- [Arx sources](https://github.com/Arx-Game/arxcode) - Open-source code release of the very popular
|
||||
[Arx](https://play.arxmush.org/) Evennia game. [Here are instructions for installing](Arxcode-
|
||||
installing-help)
|
||||
- [Evennia-wiki](https://github.com/vincent-lg/evennia-wiki) - An Evennia-specific Wiki for your
|
||||
website.
|
||||
- [Evcolor](https://github.com/taladan/Pegasus/blob/origin/world/utilities/evcolor) - Optional
|
||||
coloration for Evennia unit-test output.
|
||||
- [Paxboards](https://github.com/aurorachain/paxboards) - Evennia bulletin board system (both for
|
||||
telnet/web).
|
||||
- [Encarnia sources](https://github.com/whitehorse-io/encarnia) - An open-sourced game dir for
|
||||
Evennia with things like races, combat etc. [Summary
|
||||
here](https://www.reddit.com/r/MUD/comments/6z6s3j/encarnia_an_evennia_python_mud_code_base_with/).
|
||||
- [The world of Cool battles sources](https://github.com/FlutterSprite/coolbattles) - Open source
|
||||
turn-based battle system for Evennia. It also has a [live demo](http://wcb.battlestudio.com/).
|
||||
- [nextRPI](https://github.com/cluebyte/nextrpi) - A github project for making a toolbox for people
|
||||
to make [RPI](https://www.topmudsites.com/forums/showthread.php?t=4804)-style Evennia games.
|
||||
- [Muddery](https://github.com/muddery/muddery) - A mud framework under development, based on an
|
||||
older fork of Evennia. It has some specific design goals for building and extending the game based
|
||||
on input files.
|
||||
- [vim-evennia](https://github.com/amfl/vim-evennia) - A mode for editing batch-build files (`.ev`)
|
||||
files in the [vim](https://www.vim.org/) text editor (Emacs users can use [evennia-
|
||||
- [Discord relay](https://github.com/InspectorCaracal/evennia-things/tree/main/discord_relay) - Two-way chat relays between Evennia channels and Discord channels.
|
||||
- [docker-compose for Evennia](https://github.com/gtaylor/evennia-docker) - A quick-install setup for running Evennia in a [Docker container](https://www.docker.com/). (See [the official Evennia docs](https://www.evennia.com/docs/latest/Running-Evennia-in-Docker.html) for more details on running Evennia with Docker.)
|
||||
- [Evcolor](https://github.com/taladan/Pegasus/blob/origin/world/utilities/evcolor) - Optional coloration for Evennia unit-test output.
|
||||
- [Evennia-wiki](https://github.com/vincent-lg/evennia-wiki) - An Evennia-specific Wiki for your website.
|
||||
- [nextRPI](https://github.com/cluebyte/nextrpi) - A github project for making a toolbox for people to make [RPI](https://www.topmudsites.com/forums/showthread.php?t=4804)-style Evennia games.
|
||||
- [Paxboards](https://github.com/aurorachain/paxboards) - Evennia bulletin board system (both for telnet/web).
|
||||
- [Unreal Engine Evennia plugin](https://www.unrealengine.com/marketplace/en-US/slug/evennia-plugin) an in-progress Unreal plugin for integrating Evennia with Epic Games' Unreal Engine.
|
||||
- [vim-evennia](https://github.com/amfl/vim-evennia) - A mode for editing batch-build files (`.ev`) files in the [vim](https://www.vim.org/) text editor (Emacs users can use [evennia-
|
||||
mode.el](https://github.com/evennia/evennia/blob/master/evennia/utils/evennia-mode.el)).
|
||||
- [The world of Cool battles sources](https://github.com/FlutterSprite/coolbattles) - Open source turn-based battle system for an older version of Evennia.
|
||||
- [Other Evennia-related repos on github](https://github.com/search?p=1&q=evennia)
|
||||
|
||||
----
|
||||
- [EvCast video series](https://www.youtube.com/playlist?list=PLyYMNttpc-SX1hvaqlUNmcxrhmM64pQXl) -
|
||||
Tutorial videos explaining installing Evennia, basic Python etc.
|
||||
- [Evennia-docker](https://github.com/gtaylor/evennia-docker) - Evennia in a [Docker
|
||||
container](https://www.docker.com/) for quick install and deployment in just a few commands.
|
||||
- [Evennia's docs in Chinese](http://www.evenniacn.com/) - A translated mirror of a slightly older
|
||||
Evennia version. Announcement [here](https://groups.google.com/forum/#!topic/evennia/3AXS8ZTzJaA).
|
||||
- [Evennia for MUSHers](https://musoapbox.net/topic/1150/evennia-for-mushers) - An article describing
|
||||
Evennia for those used to the MUSH way of doing things.
|
||||
- *[Language Understanding for Text games using Deep reinforcement
|
||||
learning](http://news.mit.edu/2015/learning-language-playing-computer-games-0924#_msocom_1)*
|
||||
([PDF](https://people.csail.mit.edu/karthikn/pdfs/mud-play15.pdf)) - MIT research paper using Evennia
|
||||
to train AIs.
|
||||
|
||||
## Other useful mud development resources
|
||||
## Evennia-Based Projects
|
||||
|
||||
- [ROM area reader](https://github.com/ctoth/area_reader) - Parser for converting ROM area files to
|
||||
Python objects.
|
||||
- [Gossip MUD chat network](https://gossip.haus/)
|
||||
### Code bases
|
||||
- [Arx sources](https://github.com/Arx-Game/arxcode) - Open-source code release of the very popular [Arx](https://play.arxmush.org/) Evennia game. [Here are instructions for installing](https://www.evennia.com/docs/1.0-dev/Howtos/Arxcode-Installation.html)
|
||||
- [Encarnia sources](https://github.com/whitehorse-io/encarnia) - An open-sourced game dir for an older version of Evennia with things like races, combat etc. [Summary here](https://www.reddit.com/r/MUD/comments/6z6s3j/encarnia_an_evennia_python_mud_code_base_with/).
|
||||
- [The dark net/March Hare MUD](https://github.com/thedarknet/evennia) from the 2019 [DEF CON 27](https://www.defcon.org/html/defcon-27/dc-27-index.html) hacker conference in Paris. This is an Evennia game dir with batchcode to build the custom _Hackers_ style cyberspace zone with puzzles and challenges [used during the conference](https://dcdark.net/home#).
|
||||
- [Muddery](https://github.com/muddery/muddery) - A mud framework under development, based on an older fork of Evennia. It has some specific design goals for building and extending the game based on input files.
|
||||
|
||||
## General MUD forums and discussions
|
||||
### Other
|
||||
|
||||
- [MUD Coder's Guild](https://mudcoders.com/) - A blog and [associated Slack
|
||||
channel](https://slack.mudcoders.com/) with discussions on MUD development.
|
||||
- [MuSoapbox](https://www.musoapbox.net/) - Very active Mu* game community mainly focused on MUSH-type gaming.
|
||||
- [Imaginary Realities](http://journal.imaginary-realities.com/) - An e-magazine on game and MUD
|
||||
design that has several articles about Evennia. There is also an
|
||||
[archive of older issues](http://disinterest.org/resource/imaginary-realities/)
|
||||
from 1998-2001 that are still very relevant.
|
||||
- [Optional Realities](http://optionalrealities.com/) - Mud development discussion forums that has
|
||||
regular articles on MUD development focused on roleplay-intensive games. After a HD crash it's not
|
||||
as content-rich as it once was.
|
||||
- [MudLab](http://mudlab.org/) - Mud design discussion forum
|
||||
- [MudConnector](http://www.mudconnect.com/) - Mud listing and forums
|
||||
- [MudBytes](http://www.mudbytes.net/) - Mud listing and forums
|
||||
- [Top Mud Sites](http://www.topmudsites.com/) - Mud listing and forums
|
||||
- [Planet Mud-Dev](http://planet-muddev.disinterest.org/) - A blog aggregator following blogs of
|
||||
current MUD development (including Evennia) around the 'net. Worth to put among your RSS
|
||||
subscriptions.
|
||||
- Mud Dev mailing list archive ([mirror](http://www.disinterest.org/resource/MUD-Dev/)) -
|
||||
Influential mailing list active 1996-2004. Advanced game design discussions.
|
||||
- [Discord live blog](https://discordapp.com/channels/517176782357528616/517176782781415434) of the _Blackbirds_ Evennia game project.
|
||||
- [Evennia for MUSHers](https://musoapbox.net/topic/1150/evennia-for-mushers) - An article describing Evennia for those used to the MUSH way of doing things.
|
||||
- *[Language Understanding for Text games using Deep reinforcement learning](http://news.mit.edu/2015/learning-language-playing-computer-games-0924#_msocom_1)*
|
||||
([PDF](https://people.csail.mit.edu/karthikn/pdfs/mud-play15.pdf)) - MIT research paper using Evennia to train AIs.
|
||||
|
||||
----
|
||||
|
||||
## General MU* resources
|
||||
|
||||
### Tools
|
||||
|
||||
- [ROM area reader](https://github.com/ctoth/area_reader) - Parser for converting ROM area files to Python objects.
|
||||
|
||||
### Informational
|
||||
|
||||
- [Imaginary Realities unofficial archive](http://tharsis-gate.org/articles/imaginary.html) - An e-magazine on game and MUD design that has several articles about Evennia.
|
||||
- [Lost Library of MOO](https://www.hayseed.net/MOO/) - Archive of scientific articles on mudding (in particular moo).
|
||||
- [Mud Client/Server Interaction](http://cryosphere.net/mud-protocol.html) - A page on classic MUD telnet protocols.
|
||||
- [Mud-dev wiki](http://mud-dev.wikidot.com/) - A (very) slowly growing resource on MUD creation.
|
||||
- [Mud Client/Server Interaction](http://cryosphere.net/mud-protocol.html) - A page on classic MUD
|
||||
telnet protocols.
|
||||
- [Mud Tech's fun/cool but ...](https://gc-taylor.com/blog/2013/01/08/mud-tech-funcool-dont-forget-ship-damned-thing/) -
|
||||
Greg Taylor gives good advice on mud design.
|
||||
- [Lost Library of MOO](https://www.hayseed.net/MOO/) - Archive of scientific articles on mudding (in
|
||||
particular moo).
|
||||
- [Nick Gammon's hints thread](http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=5959) -
|
||||
Contains a very useful list of things to think about when starting your new MUD.
|
||||
- [Lost Garden](http://www.lostgarden.com/) - A game development blog with long and interesting
|
||||
articles (not MUD-specific)
|
||||
- [What Games Are](http://whatgamesare.com/) - A blog about general game design (not MUD-specific)
|
||||
- [The Alexandrian](https://thealexandrian.net/) - A blog about tabletop roleplaying and board games,
|
||||
but with lots of general discussion about rule systems and game balance that could be applicable
|
||||
also for MUDs.
|
||||
- [Raph Koster's laws of game design](https://www.raphkoster.com/games/laws-of-online-world-design/the-laws-of-online-world-design/) -
|
||||
thought-provoking guidelines and things to think about when designing a virtual multiplayer world
|
||||
(Raph is known for *Ultima Online* among other things).
|
||||
- [Mud Tech's fun/cool but ...](https://gc-taylor.com/blog/2013/01/08/mud-tech-funcool-dont-forget-ship-damned-thing/) - Greg Taylor gives good advice on mud design.
|
||||
- [Nick Gammon's hints thread](http://www.gammon.com.au/forum/bbshowpost.php?bbsubject_id=5959) - Contains a very useful list of things to think about when starting your new MUD.
|
||||
- [Raph Koster's laws of game design](https://www.raphkoster.com/games/laws-of-online-world-design/the-laws-of-online-world-design/) - thought-provoking guidelines and things to think about when designing a virtual multiplayer world (Raph is known for *Ultima Online* among other things).
|
||||
|
||||
## Literature
|
||||
### Community
|
||||
|
||||
- [Grapevine](https://grapevine.haus/) - MUD listings and inter-game chat network
|
||||
- [MUD Coder's Guild](https://mudcoders.com/) - A blog and [associated Slack channel](https://slack.mudcoders.com/) with discussions on MUD development.
|
||||
- [MudBytes](http://www.mudbytes.net/) - MUD listing and forums
|
||||
- [MudConnector](http://www.mudconnect.com/) - MUD listing and forums
|
||||
- [MudLab](http://mudlab.org/) - MUD design discussion forum
|
||||
- [MuSoapbox](https://musoapbox.net/) - MU* forum mainly focused on MUSH-type gaming.
|
||||
- [Top Mud Sites](http://www.topmudsites.com/) - MUD listing and forums
|
||||
|
||||
----
|
||||
|
||||
## General Game-Dev Resources
|
||||
|
||||
### Tools
|
||||
|
||||
- [GIT](https://git-scm.com/)
|
||||
- [Documentation](https://git-scm.com/documentation)
|
||||
- [Learn GIT in 15 minutes](https://try.github.io/levels/1/challenges/1) (interactive tutorial)
|
||||
|
||||
### Frameworks
|
||||
|
||||
- [Django's homepage](https://www.djangoproject.com/)
|
||||
- [Documentation](https://docs.djangoproject.com/en)
|
||||
- [Code](https://code.djangoproject.com/)
|
||||
- [Twisted homepage](https://twistedmatrix.com/)
|
||||
- [Documentation](https://twistedmatrix.com/documents/current/core/howto/index.html)
|
||||
- [Code](https://twistedmatrix.com/trac/browser)
|
||||
|
||||
### Learning Python
|
||||
|
||||
- [Python Website](https://www.python.org/)
|
||||
- [Documentation](https://www.python.org/doc/)
|
||||
- [Tutorial](https://docs.python.org/tut/tut.html)
|
||||
- [Library Reference](https://docs.python.org/lib/lib.html)
|
||||
- [Language Reference](https://docs.python.org/ref/ref.html)
|
||||
- [Python tips and tricks](https://www.siafoo.net/article/52)
|
||||
- [Jetbrains Python academy](https://hyperskill.org/onboarding?track=python) - free online programming curriculum for different skill levels
|
||||
|
||||
### Blogs
|
||||
|
||||
- [Lost Garden](https://lostgarden.home.blog/) - A game development blog with long and interesting articles (not MUD-specific)
|
||||
- [What Games Are](http://whatgamesare.com/) - A blog about general game design (not MUD-specific)
|
||||
- [The Alexandrian](https://thealexandrian.net/) - A blog about tabletop roleplaying and board games, but with lots of general discussion about rule systems and game balance that could be applicable also for MUDs.
|
||||
|
||||
### Literature
|
||||
|
||||
- Richard Bartle *Designing Virtual Worlds*
|
||||
([amazon page](https://www.amazon.com/Designing-Virtual-Worlds-Richard-Bartle/dp/0131018167)) -
|
||||
Essential reading for the design of any persistent game
|
||||
world, written by the co-creator of the original game *MUD*. Published in 2003 but it's still as
|
||||
relevant now as when it came out. Covers everything you need to know and then some.
|
||||
- Zed A. Shaw *Learn Python the Hard way* ([homepage](https://learnpythonthehardway.org/)) - Despite
|
||||
the imposing name this book is for the absolute Python/programming beginner. One learns the language
|
||||
by gradually creating a small text game! It has been used by multiple users before moving on to
|
||||
Evennia. *Update: This used to be free to read online, this is no longer the case.*
|
||||
|
||||
When the rights to Designing Virtual Worlds returned to him, Richard Bartle
|
||||
made the PDF of his Designing Virtual Worlds freely available through his own
|
||||
website ([Designing Virtual Worlds](https://mud.co.uk/dvw/)). A direct link to
|
||||
the PDF can be found [here](https://mud.co.uk/richard/DesigningVirtualWorlds.pdf).
|
||||
- David M. Beazley *Python Essential Reference (4th ed)*
|
||||
([amazon page](https://www.amazon.com/Python-Essential-Reference-David-Beazley/dp/0672329786/)) -
|
||||
Our recommended book on Python; it not only efficiently summarizes the language but is also
|
||||
|
|
@ -147,29 +140,3 @@ Contains a very useful list of things to think about when starting your new MUD.
|
|||
economic theory. Written in 1730 but the translation is annotated and the essay is actually very
|
||||
easy to follow also for a modern reader. Required reading if you think of implementing a sane game
|
||||
economic system.
|
||||
|
||||
## Frameworks
|
||||
|
||||
- [Django's homepage](https://www.djangoproject.com/)
|
||||
- [Documentation](https://docs.djangoproject.com/en)
|
||||
- [Code](https://code.djangoproject.com/)
|
||||
- [Twisted homepage](https://twistedmatrix.com/)
|
||||
- [Documentation](https://twistedmatrix.com/documents/current/core/howto/index.html)
|
||||
- [Code](https://twistedmatrix.com/trac/browser)
|
||||
|
||||
## Tools
|
||||
|
||||
- [GIT](https://git-scm.com/)
|
||||
- [Documentation](https://git-scm.com/documentation)
|
||||
- [Learn GIT in 15 minutes](https://try.github.io/levels/1/challenges/1) (interactive tutorial)
|
||||
|
||||
## Python Info
|
||||
|
||||
- [Python Website](https://www.python.org/)
|
||||
- [Documentation](https://www.python.org/doc/)
|
||||
- [Tutorial](https://docs.python.org/tut/tut.html)
|
||||
- [Library Reference](https://docs.python.org/lib/lib.html)
|
||||
- [Language Reference](https://docs.python.org/ref/ref.html)
|
||||
- [Python tips and tricks](https://www.siafoo.net/article/52)
|
||||
- [Jetbrains Python academy](https://hyperskill.org/onboarding?track=python) -
|
||||
free online programming curriculum for different skill levels
|
||||
|
|
|
|||
|
|
@ -14,6 +14,7 @@ evennia.contrib.base\_systems
|
|||
evennia.contrib.base_systems.awsstorage
|
||||
evennia.contrib.base_systems.building_menu
|
||||
evennia.contrib.base_systems.color_markups
|
||||
evennia.contrib.base_systems.components
|
||||
evennia.contrib.base_systems.custom_gametime
|
||||
evennia.contrib.base_systems.email_login
|
||||
evennia.contrib.base_systems.ingame_python
|
||||
|
|
|
|||
|
|
@ -543,7 +543,7 @@ You can specify the /force switch to bypass this confirmation.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.building.CmdDestroy.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@del', '@delete']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@delete', '@del']</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -584,7 +584,7 @@ You can specify the /force switch to bypass this confirmation.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.building.CmdDestroy.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@del @delete', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@delete @del', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}</em><a class="headerlink" href="#evennia.commands.default.building.CmdDestroy.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -1296,7 +1296,7 @@ server settings.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.building.CmdTypeclass.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@swap', '@update', '@parent', '@typeclasses', '@type']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@swap', '@typeclasses', '@parent', '@update', '@type']</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -1327,7 +1327,7 @@ server settings.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.building.CmdTypeclass.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@swap @update @parent @typeclasses @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap update parent typeclasses type', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@swap @typeclasses @parent @update @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap typeclasses parent update type', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}</em><a class="headerlink" href="#evennia.commands.default.building.CmdTypeclass.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -274,7 +274,7 @@ inv</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.general.CmdInventory.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -305,7 +305,7 @@ inv</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.general.CmdInventory.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.commands.default.general.CmdInventory.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -634,7 +634,7 @@ See <a href="#id11"><span class="problematic" id="id12">|</span></a>luhttps://ww
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.system.CmdTasks.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@delays', '@task']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@task', '@delays']</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -680,7 +680,7 @@ to all the variables defined therein.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.system.CmdTasks.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}</em><a class="headerlink" href="#evennia.commands.default.system.CmdTasks.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -70,11 +70,31 @@ main test suite started with</p>
|
|||
<code class="sig-name descname">test_look</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_look"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_look" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_look_no_location">
|
||||
<code class="sig-name descname">test_look_no_location</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_look_no_location"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_look_no_location" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_look_nonexisting">
|
||||
<code class="sig-name descname">test_look_nonexisting</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_look_nonexisting"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_look_nonexisting" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_home">
|
||||
<code class="sig-name descname">test_home</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_home" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_go_home">
|
||||
<code class="sig-name descname">test_go_home</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_go_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_go_home" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_no_home">
|
||||
<code class="sig-name descname">test_no_home</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_no_home"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_no_home" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_inventory">
|
||||
<code class="sig-name descname">test_inventory</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_inventory"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_inventory" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -90,6 +110,11 @@ main test suite started with</p>
|
|||
<code class="sig-name descname">test_nick</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_nick"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_nick" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_nick_list">
|
||||
<code class="sig-name descname">test_nick_list</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_nick_list"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_nick_list" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.commands.default.tests.TestGeneral.test_get_and_drop">
|
||||
<code class="sig-name descname">test_get_and_drop</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/commands/default/tests.html#TestGeneral.test_get_and_drop"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.commands.default.tests.TestGeneral.test_get_and_drop" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -747,7 +772,7 @@ main test suite started with</p>
|
|||
<p>Test the batch processor.</p>
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.tests.TestBatchProcess.red_button">
|
||||
<code class="sig-name descname">red_button</code><em class="property"> = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmp7w77gzzs/473f2e37932759ab07e2e062ba461569106aef87/evennia/contrib/tutorials/red_button/red_button.py'></em><a class="headerlink" href="#evennia.commands.default.tests.TestBatchProcess.red_button" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">red_button</code><em class="property"> = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpgtt_9p0n/450d70118f8e336dd5533aecaf712782212d4305/evennia/contrib/tutorials/red_button/red_button.py'></em><a class="headerlink" href="#evennia.commands.default.tests.TestBatchProcess.red_button" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
|
|
|
|||
|
|
@ -73,7 +73,7 @@ connect “account name” “pass word”</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'conn', 'co']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['co', 'conn', 'con']</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -108,7 +108,7 @@ there is no object yet before the account has logged in)</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}</em><a class="headerlink" href="#evennia.commands.default.unloggedin.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -59,20 +59,38 @@
|
|||
<dd><p>Bases: <a class="reference internal" href="evennia.comms.models.html#evennia.comms.models.ChannelDB" title="evennia.comms.models.ChannelDB"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.comms.models.ChannelDB</span></code></a></p>
|
||||
<p>This is the base class for all Channel Comms. Inherit from this to
|
||||
create different types of communication channels.</p>
|
||||
<dl class="simple">
|
||||
<dt>Class-level variables:</dt><dd><ul class="simple">
|
||||
<li><p><strong>send_to_online_only</strong> (bool, default True) - if set, will only try to
|
||||
send to subscribers that are actually active. This is a useful optimization.</p></li>
|
||||
<p>Class-level variables:
|
||||
- <strong>send_to_online_only</strong> (bool, default True) - if set, will only try to</p>
|
||||
<blockquote>
|
||||
<div><p>send to subscribers that are actually active. This is a useful optimization.</p>
|
||||
</div></blockquote>
|
||||
<ul class="simple">
|
||||
<li><p><strong>log_file</strong> (str, default <strong>“channel_{channelname}.log”</strong>). This is the
|
||||
log file to which the channel history will be saved. The <strong>{channelname}</strong> tag
|
||||
will be replaced by the key of the Channel. If an Attribute ‘log_file’
|
||||
is set, this will be used instead. If this is None and no Attribute is found,
|
||||
no history will be saved.</p></li>
|
||||
<li><p><strong>channel_prefix_string</strong> (str, default <strong>“[{channelname} ]”</strong>) - this is used
|
||||
as a simple template to get the channel prefix with <strong>.channel_prefix()</strong>.</p></li>
|
||||
as a simple template to get the channel prefix with <strong>.channel_prefix()</strong>. It is used
|
||||
in front of every channel message; use <strong>{channelmessage}</strong> token to insert the
|
||||
name of the current channel. Set to <strong>None</strong> if you want no prefix (or want to
|
||||
handle it in a hook during message generation instead.</p></li>
|
||||
<li><p><strong>channel_msg_nick_pattern**(str, default **”{alias}s*?|{alias}s+?(?P<arg1>.+?)”) -
|
||||
this is what used when a channel subscriber gets a channel nick assigned to this
|
||||
channel. The nickhandler uses the pattern to pick out this channel’s name from user
|
||||
input. The **{alias}</strong> token will get both the channel’s key and any set/custom aliases
|
||||
per subscriber. You need to allow for an <strong><arg1></strong> regex group to catch any message
|
||||
that should be send to the channel. You usually don’t need to change this pattern
|
||||
unless you are changing channel command-style entirely.</p></li>
|
||||
<li><p><strong>channel_msg_nick_replacement</strong> (str, default <strong>“channel {channelname} = $1”</strong> - this
|
||||
is used by the nickhandler to generate a replacement string once the nickhandler (using
|
||||
the <strong>channel_msg_nick_pattern</strong>) identifies that the channel should be addressed
|
||||
to send a message to it. The <strong><arg1></strong> regex pattern match from <strong>channel_msg_nick_pattern</strong>
|
||||
will end up at the <strong>$1</strong> position in the replacement. Together, this allows you do e.g.
|
||||
‘public Hello’ and have that become a mapping to <strong>channel public = Hello</strong>. By default,
|
||||
the account-level <strong>channel</strong> command is used. If you were to rename that command you must
|
||||
tweak the output to something like <strong>yourchannelcommandname {channelname} = $1</strong>.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.comms.comms.DefaultChannel.objects">
|
||||
<code class="sig-name descname">objects</code><em class="property"> = <evennia.comms.managers.ChannelManager object></em><a class="headerlink" href="#evennia.comms.comms.DefaultChannel.objects" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
|
|||
|
|
@ -90,7 +90,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['con', 'conn', 'co']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['co', 'conn', 'con']</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -120,7 +120,7 @@ there is no object yet before the account has logged in)</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.email_login.email_login.CmdUnconnectedConnect.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@calls', '@callbacks', '@callback']</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@callbacks', '@calls', '@callback']</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -148,7 +148,7 @@ on user permission.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@calls @callbacks @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call calls callbacks callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@callbacks @calls @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call callbacks calls callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}</em><a class="headerlink" href="#evennia.contrib.base_systems.ingame_python.commands.CmdCallback.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -168,7 +168,7 @@ for that channel.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['delchanalias', 'delaliaschan']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['delaliaschan', 'delchanalias']</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -199,7 +199,7 @@ for that channel.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}</em><a class="headerlink" href="#evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.CmdDelCom.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -162,7 +162,7 @@ the operation will be general or on the room.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['abort', 'chicken out', 'q', 'quit']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'quit', 'chicken out', 'abort']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
|
|
@ -186,7 +186,7 @@ set in self.parse())</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'abort chicken out q quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' abort chicken out q quit', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q quit chicken out abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q quit chicken out abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdGiveUp.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -322,7 +322,7 @@ shout</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['whisper', ';', 'shout']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = [';', 'whisper', 'shout']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -351,7 +351,7 @@ set in self.parse())</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'whisper ; shout', 'category': 'general', 'key': 'say', 'no_prefix': ' whisper ; shout', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '; whisper shout', 'category': 'general', 'key': 'say', 'no_prefix': ' ; whisper shout', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdSpeak.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -441,7 +441,7 @@ looks and what actions is available.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['e', 'ex', 'examine', 'unfocus']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['ex', 'unfocus', 'e', 'examine']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -470,7 +470,7 @@ set in self.parse())</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'e ex examine unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e ex examine unfocus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ex unfocus e examine', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex unfocus e examine', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdFocus.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -577,7 +577,7 @@ set in self.parse())</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@dig', '@open']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['@open', '@dig']</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
|
|
@ -600,7 +600,7 @@ to all the variables defined therein.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@dig @open', 'category': 'general', 'key': 'open', 'no_prefix': ' dig open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': '@open @dig', 'category': 'general', 'key': 'open', 'no_prefix': ' open dig', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}</em><a class="headerlink" href="#evennia.contrib.full_systems.evscaperoom.commands.CmdRerouter.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -108,11 +108,8 @@ new room (to start from scratch) or join an existing room (with other players).<
|
|||
<dd><p>Formats the option block.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>optionlist</strong> (<em>list</em>) – List of (key, description) tuples for every
|
||||
option related to this node.</p></li>
|
||||
<li><p><strong>caller</strong> (<em>Object</em><em>, </em><em>Account</em><em> or </em><em>None</em><em>, </em><em>optional</em>) – The caller of the node.</p></li>
|
||||
</ul>
|
||||
<dd class="field-odd"><p><strong>optionlist</strong> (<em>list</em>) – List of (key, description) tuples for every
|
||||
option related to this node.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><em>options (str)</em> – The formatted option display.</p>
|
||||
|
|
|
|||
|
|
@ -643,7 +643,7 @@ inv</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['i', 'inv']</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['inv', 'i']</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -674,7 +674,7 @@ inv</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}</em><a class="headerlink" href="#evennia.contrib.game_systems.clothing.clothing.CmdInventory.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -118,7 +118,7 @@ in a room as sdesc + pose.</p>
|
|||
|
||||
<span class="c1"># ...</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg.rpsystem</span> <span class="kn">import</span> <span class="n">RPSystemCmdSet</span> <span class="o"><---</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg.rpsystem.rpsystem</span> <span class="kn">import</span> <span class="n">RPSystemCmdSet</span> <span class="o"><---</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">CharacterCmdSet</span><span class="p">(</span><span class="n">default_cmds</span><span class="o">.</span><span class="n">CharacterCmdset</span><span class="p">):</span>
|
||||
<span class="c1"># ...</span>
|
||||
|
|
@ -131,7 +131,7 @@ in a room as sdesc + pose.</p>
|
|||
the typeclasses in this module:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/typeclasses/characters.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg</span> <span class="kn">import</span> <span class="n">ContribRPCharacter</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg.rpsystem.rpsystem</span> <span class="kn">import</span> <span class="n">ContribRPCharacter</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">ContribRPCharacter</span><span class="p">):</span>
|
||||
<span class="c1"># ...</span>
|
||||
|
|
@ -139,7 +139,7 @@ the typeclasses in this module:</p>
|
|||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/typeclasses/objects.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg</span> <span class="kn">import</span> <span class="n">ContribRPObject</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg.rpsystem.rpsystem</span> <span class="kn">import</span> <span class="n">ContribRPObject</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Object</span><span class="p">(</span><span class="n">ContribRPObject</span><span class="p">):</span>
|
||||
<span class="c1"># ...</span>
|
||||
|
|
@ -147,7 +147,7 @@ the typeclasses in this module:</p>
|
|||
</div>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="c1"># in mygame/typeclasses/rooms.py</span>
|
||||
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg</span> <span class="kn">import</span> <span class="n">ContribRPRoom</span>
|
||||
<span class="kn">from</span> <span class="nn">evennia.contrib.rpg.rpsystem.rpsystem</span> <span class="kn">import</span> <span class="n">ContribRPRoom</span>
|
||||
|
||||
<span class="k">class</span> <span class="nc">Room</span><span class="p">(</span><span class="n">ContribRPRoom</span><span class="p">):</span>
|
||||
<span class="c1"># ...</span>
|
||||
|
|
@ -178,7 +178,7 @@ case_sensitive=False to the <strong>send_emote</strong> function.</p>
|
|||
<li><p>In typeclasses/character.py:
|
||||
Import the <strong>ContribRPCharacter</strong> class:</p>
|
||||
<blockquote>
|
||||
<div><p><strong>from evennia.contrib.rpg.rpsystem import ContribRPCharacter</strong></p>
|
||||
<div><p><strong>from evennia.contrib.rpg.rpsystem.rpsystem import ContribRPCharacter</strong></p>
|
||||
</div></blockquote>
|
||||
<dl class="simple">
|
||||
<dt>Inherit ContribRPCharacter:</dt><dd><p>Change “class Character(DefaultCharacter):” to
|
||||
|
|
@ -190,7 +190,7 @@ Import the <strong>ContribRPCharacter</strong> class:</p>
|
|||
</li>
|
||||
<li><dl class="simple">
|
||||
<dt>In <strong>typeclasses/rooms.py</strong>:</dt><dd><p>Import the <strong>ContribRPRoom</strong> class:
|
||||
<strong>from evennia.contrib.rpg.rpsystem import ContribRPRoom</strong></p>
|
||||
<strong>from evennia.contrib.rpg.rpsystem.rpsystem import ContribRPRoom</strong></p>
|
||||
</dd>
|
||||
<dt>Inherit <strong>ContribRPRoom</strong>:</dt><dd><p>Change <strong>class Room(DefaultRoom):</strong> to
|
||||
<strong>class Room(ContribRPRoom):</strong></p>
|
||||
|
|
@ -199,7 +199,7 @@ Import the <strong>ContribRPCharacter</strong> class:</p>
|
|||
</li>
|
||||
<li><dl class="simple">
|
||||
<dt>In <strong>typeclasses/objects.py</strong></dt><dd><p>Import the <strong>ContribRPObject</strong> class:
|
||||
<strong>from evennia.contrib.rpg.rpsystem import ContribRPObject</strong></p>
|
||||
<strong>from evennia.contrib.rpg.rpsystem.rpsystem import ContribRPObject</strong></p>
|
||||
</dd>
|
||||
<dt>Inherit <strong>ContribRPObject</strong>:</dt><dd><p>Change <strong>class Object(DefaultObject):</strong> to
|
||||
<strong>class Object(ContribRPObject):</strong></p>
|
||||
|
|
@ -237,60 +237,6 @@ Import the <strong>ContribRPCharacter</strong> class:</p>
|
|||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">Exception</span></code></p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py function">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ordered_permutation_regex">
|
||||
<code class="sig-prename descclassname">evennia.contrib.rpg.rpsystem.rpsystem.</code><code class="sig-name descname">ordered_permutation_regex</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sentence</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ordered_permutation_regex"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ordered_permutation_regex" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Builds a regex that matches ‘ordered permutations’ of a sentence’s
|
||||
words.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>sentence</strong> (<em>str</em>) – The sentence to build a match pattern to</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><p><em>regex (re object)</em> –</p>
|
||||
<dl class="simple">
|
||||
<dt>Compiled regex object represented the</dt><dd><p>possible ordered permutations of the sentence, from longest to
|
||||
shortest.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p class="rubric">Example</p>
|
||||
<p>The sdesc_regex for an sdesc of ” very tall man” will
|
||||
result in the following allowed permutations,
|
||||
regex-matched in inverse order of length (case-insensitive):
|
||||
“the very tall man”, “the very tall”, “very tall man”,
|
||||
“very tall”, “the very”, “tall man”, “the”, “very”, “tall”,
|
||||
and “man”.
|
||||
We also add regex to make sure it also accepts num-specifiers,
|
||||
like /2-tall.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py function">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.regex_tuple_from_key_alias">
|
||||
<code class="sig-prename descclassname">evennia.contrib.rpg.rpsystem.rpsystem.</code><code class="sig-name descname">regex_tuple_from_key_alias</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#regex_tuple_from_key_alias"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.regex_tuple_from_key_alias" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>This will build a regex tuple for any object, not just from those
|
||||
with sdesc/recog handlers. It’s used as a legacy mechanism for
|
||||
being able to mix this contrib with objects not using sdescs, but
|
||||
note that creating the ordered permutation regex dynamically for
|
||||
every object will add computational overhead.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>obj</strong> (<em>Object</em>) – This object’s key and eventual aliases will
|
||||
be used to build the tuple.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><p><em>regex_tuple (tuple)</em> –</p>
|
||||
<dl class="simple">
|
||||
<dt>A tuple</dt><dd><p>(ordered_permutation_regex, obj, key/alias)</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py function">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.parse_language">
|
||||
<code class="sig-prename descclassname">evennia.contrib.rpg.rpsystem.rpsystem.</code><code class="sig-name descname">parse_language</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">speaker</span></em>, <em class="sig-param"><span class="n">emote</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#parse_language"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.parse_language" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -479,17 +425,6 @@ of control sequences before setting.</p></li>
|
|||
be empty, but if it is we must fall back to the key.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.SdescHandler.get_regex_tuple">
|
||||
<code class="sig-name descname">get_regex_tuple</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#SdescHandler.get_regex_tuple"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.SdescHandler.get_regex_tuple" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Return data for sdesc/recog handling</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Returns</dt>
|
||||
<dd class="field-odd"><p><em>tup (tuple)</em> – tuple (sdesc_regex, obj, sdesc)</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
|
|
@ -502,8 +437,7 @@ of an Object.</p>
|
|||
the following names:</p>
|
||||
<blockquote>
|
||||
<div><p>_recog_ref2recog
|
||||
_recog_obj2recog
|
||||
_recog_obj2regex</p>
|
||||
_recog_obj2recog</p>
|
||||
</div></blockquote>
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.RecogHandler.__init__">
|
||||
|
|
@ -544,14 +478,18 @@ than <strong>max_length</strong>.</p>
|
|||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.RecogHandler.get">
|
||||
<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#RecogHandler.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.RecogHandler.get" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get recog replacement string, if one exists, otherwise
|
||||
get sdesc and as a last resort, the object’s key.</p>
|
||||
<dd><p>Get recog replacement string, if one exists.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>obj</strong> (<em>Object</em>) – The object, whose sdesc to replace</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><em>recog (str)</em> – The replacement string to use.</p>
|
||||
<dd class="field-even"><p><p><em>recog (str or None)</em> –</p>
|
||||
<dl class="simple">
|
||||
<dt>The replacement string to use, or</dt><dd><p>None if there is no recog for this object.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p class="rubric">Notes</p>
|
||||
|
|
@ -582,16 +520,6 @@ mechanism. This is useful for adding masks/hoods etc.</p>
|
|||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.RecogHandler.get_regex_tuple">
|
||||
<code class="sig-name descname">get_regex_tuple</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#RecogHandler.get_regex_tuple"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.RecogHandler.get_regex_tuple" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><dl class="field-list simple">
|
||||
<dt class="field-odd">Returns</dt>
|
||||
<dd class="field-odd"><p><em>rec (tuple)</em> – Tuple (recog_regex, obj, recog)</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
|
|
@ -882,7 +810,7 @@ Using the command without arguments will list all current recogs.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['forget', 'recognize']</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['recognize', 'forget']</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
|
|
@ -909,7 +837,7 @@ Using the command without arguments will list all current recogs.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'no_prefix': ' forget recognize', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'recognize forget', 'category': 'general', 'key': 'recog', 'no_prefix': ' recognize forget', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\n '}</em><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.CmdRecog.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -989,6 +917,11 @@ self.add().</p>
|
|||
<dd><p>Bases: <a class="reference internal" href="evennia.objects.objects.html#evennia.objects.objects.DefaultObject" title="evennia.objects.objects.DefaultObject"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.objects.objects.DefaultObject</span></code></a></p>
|
||||
<p>This class is meant as a mix-in or parent for objects in an
|
||||
rp-heavy game. It implements the base functionality for poses.</p>
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.sdesc">
|
||||
<code class="sig-name descname">sdesc</code><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPObject.sdesc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.sdesc" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.at_object_creation">
|
||||
<code class="sig-name descname">at_object_creation</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPObject.at_object_creation"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.at_object_creation" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -1077,6 +1010,22 @@ error, return will be <strong>None</strong>). If <strong>quiet=True</strong>, th
|
|||
messaging is assumed to be handled by the caller.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.get_posed_sdesc">
|
||||
<code class="sig-name descname">get_posed_sdesc</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sdesc</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPObject.get_posed_sdesc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.get_posed_sdesc" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Displays the object with its current pose string.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Returns</dt>
|
||||
<dd class="field-odd"><p><p><em>pose (str)</em> –</p>
|
||||
<dl class="simple">
|
||||
<dt>A string containing the object’s sdesc and</dt><dd><p>current or default pose.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.get_display_name">
|
||||
<code class="sig-name descname">get_display_name</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">looker</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPObject.get_display_name"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject.get_display_name" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -1087,20 +1036,29 @@ messaging is assumed to be handled by the caller.</p>
|
|||
at/getting inforamtion for this object.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Keyword Arguments</dt>
|
||||
<dd class="field-even"><p><strong>pose</strong> (<em>bool</em>) – Include the pose (if available) in the return.</p>
|
||||
<dd class="field-even"><ul class="simple">
|
||||
<li><p><strong>pose</strong> (<em>bool</em>) – Include the pose (if available) in the return.</p></li>
|
||||
<li><p><strong>ref</strong> (<em>str</em>) – The reference marker found in string to replace.
|
||||
This is on the form #{num}{case}, like ‘#12^’, where
|
||||
the number is a processing location in the string and the
|
||||
case symbol indicates the case of the original tag input
|
||||
- <strong>t</strong> - input was Titled, like /Tall
|
||||
- <strong>^</strong> - input was all uppercase, like /TALL
|
||||
- <strong>v</strong> - input was all lowercase, like /tall
|
||||
- <strong>~</strong> - input case should be kept, or was mixed-case</p></li>
|
||||
<li><p><strong>noid</strong> (<em>bool</em>) – Don’t show DBREF even if viewer has control access.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-odd">Returns</dt>
|
||||
<dd class="field-odd"><p><p><em>name (str)</em> – A string of the sdesc containing the name of the object,
|
||||
if this is defined.</p>
|
||||
<blockquote>
|
||||
<div><p>including the DBREF if this user is privileged to control
|
||||
said object.</p>
|
||||
</div></blockquote>
|
||||
<dd class="field-odd"><p><p><em>name (str)</em> –</p>
|
||||
<dl class="simple">
|
||||
<dt>A string of the sdesc containing the name of the object,</dt><dd><p>if this is defined. By default, included the DBREF if this user
|
||||
is privileged to control said object.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p class="rubric">Notes</p>
|
||||
<p>The RPObject version doesn’t add color to its display.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
|
|
@ -1112,6 +1070,14 @@ should call.</p>
|
|||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>looker</strong> (<em>Object</em>) – Object doing the looking.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><p><em>string (str)</em> –</p>
|
||||
<dl class="simple">
|
||||
<dt>A string containing the name, appearance and contents</dt><dd><p>of the object.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
|
|
@ -1173,11 +1139,6 @@ should call.</p>
|
|||
<em class="property">class </em><code class="sig-prename descclassname">evennia.contrib.rpg.rpsystem.rpsystem.</code><code class="sig-name descname">ContribRPCharacter</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPCharacter"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="evennia.objects.objects.html#evennia.objects.objects.DefaultCharacter" title="evennia.objects.objects.DefaultCharacter"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.objects.objects.DefaultCharacter</span></code></a>, <a class="reference internal" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject" title="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.contrib.rpg.rpsystem.rpsystem.ContribRPObject</span></code></a></p>
|
||||
<p>This is a character class that has poses, sdesc and recog.</p>
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.sdesc">
|
||||
<code class="sig-name descname">sdesc</code><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPCharacter.sdesc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.sdesc" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.recog">
|
||||
<code class="sig-name descname">recog</code><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPCharacter.recog"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.recog" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -1193,20 +1154,31 @@ should call.</p>
|
|||
at/getting inforamtion for this object.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Keyword Arguments</dt>
|
||||
<dd class="field-even"><p><strong>pose</strong> (<em>bool</em>) – Include the pose (if available) in the return.</p>
|
||||
<dd class="field-even"><ul class="simple">
|
||||
<li><p><strong>pose</strong> (<em>bool</em>) – Include the pose (if available) in the return.</p></li>
|
||||
<li><p><strong>ref</strong> (<em>str</em>) – The reference marker found in string to replace.
|
||||
This is on the form #{num}{case}, like ‘#12^’, where
|
||||
the number is a processing location in the string and the
|
||||
case symbol indicates the case of the original tag input
|
||||
- <strong>t</strong> - input was Titled, like /Tall
|
||||
- <strong>^</strong> - input was all uppercase, like /TALL
|
||||
- <strong>v</strong> - input was all lowercase, like /tall
|
||||
- <strong>~</strong> - input case should be kept, or was mixed-case</p></li>
|
||||
<li><p><strong>noid</strong> (<em>bool</em>) – Don’t show DBREF even if viewer has control access.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-odd">Returns</dt>
|
||||
<dd class="field-odd"><p><p><em>name (str)</em> – A string of the sdesc containing the name of the object,
|
||||
if this is defined.</p>
|
||||
<blockquote>
|
||||
<div><p>including the DBREF if this user is privileged to control
|
||||
said object.</p>
|
||||
</div></blockquote>
|
||||
<dd class="field-odd"><p><p><em>name (str)</em> –</p>
|
||||
<dl class="simple">
|
||||
<dt>A string of the sdesc containing the name of the object,</dt><dd><p>if this is defined. By default, included the DBREF if this user
|
||||
is privileged to control said object.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<p class="rubric">Notes</p>
|
||||
<p>The RPCharacter version of this method colors its display to make
|
||||
<p>The RPCharacter version adds additional processing to sdescs to make
|
||||
characters stand out from other objects.</p>
|
||||
</dd></dl>
|
||||
|
||||
|
|
@ -1230,6 +1202,24 @@ characters stand out from other objects.</p>
|
|||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.get_sdesc">
|
||||
<code class="sig-name descname">get_sdesc</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="n">process</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPCharacter.get_sdesc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.get_sdesc" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Single method to handle getting recogs with sdesc fallback in an
|
||||
aware manner, to allow separate processing of recogs from sdescs.
|
||||
Gets the sdesc or recog for obj from the view of self.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>obj</strong> (<em>Object</em>) – the object whose sdesc or recog is being gotten</p>
|
||||
</dd>
|
||||
<dt class="field-even">Keyword Arguments</dt>
|
||||
<dd class="field-even"><p><strong>process</strong> (<em>bool</em>) – If True, the sdesc/recog is run through the
|
||||
appropriate process method for self - .process_sdesc or
|
||||
.process_recog</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.process_sdesc">
|
||||
<code class="sig-name descname">process_sdesc</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">sdesc</span></em>, <em class="sig-param"><span class="n">obj</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/rpsystem.html#ContribRPCharacter.process_sdesc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter.process_sdesc" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -1284,14 +1274,8 @@ translated from the original sdesc at this point.</p></li>
|
|||
This is not used by default.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="simple">
|
||||
<dt>Kwargs:</dt><dd><p>ref (str): See process_sdesc.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Returns</dt>
|
||||
<dd class="field-odd"><p><em>recog (str)</em> – The modified recog string.</p>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><em>recog (str)</em> – The modified recog string.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -108,11 +108,6 @@
|
|||
<dd><p>Sets up testing environment</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_ordered_permutation_regex">
|
||||
<code class="sig-name descname">test_ordered_permutation_regex</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/tests.html#TestRPSystem.test_ordered_permutation_regex"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_ordered_permutation_regex" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_sdesc_handler">
|
||||
<code class="sig-name descname">test_sdesc_handler</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/tests.html#TestRPSystem.test_sdesc_handler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_sdesc_handler" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -133,6 +128,11 @@
|
|||
<code class="sig-name descname">parse_sdescs_and_recogs</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/tests.html#TestRPSystem.parse_sdescs_and_recogs"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.parse_sdescs_and_recogs" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_get_sdesc">
|
||||
<code class="sig-name descname">test_get_sdesc</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/tests.html#TestRPSystem.test_get_sdesc"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_get_sdesc" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_send_emote">
|
||||
<code class="sig-name descname">test_send_emote</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/tests.html#TestRPSystem.test_send_emote"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_send_emote" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -149,11 +149,6 @@
|
|||
<code class="sig-name descname">test_rpsearch</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/tests.html#TestRPSystem.test_rpsearch"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_rpsearch" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_regex_tuple_from_key_alias">
|
||||
<code class="sig-name descname">test_regex_tuple_from_key_alias</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/contrib/rpg/rpsystem/tests.html#TestRPSystem.test_regex_tuple_from_key_alias"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.contrib.rpg.rpsystem.tests.TestRPSystem.test_regex_tuple_from_key_alias" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ such as when closing the lid and un-blinding a character.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press button', 'press']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -125,7 +125,7 @@ check if the lid is open or closed.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press press button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidClosed.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -195,7 +195,7 @@ check if the lid is open or closed.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['smash lid', 'break lid', 'smash']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['break lid', 'smash', 'smash lid']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -222,7 +222,7 @@ break.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'smash lid break lid smash', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid break lid smash', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'break lid smash smash lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' break lid smash smash lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdSmashGlass.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -322,7 +322,7 @@ be mutually exclusive.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press button', 'press']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'press', 'press button']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -351,7 +351,7 @@ set in self.parse())</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press press button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdPushLidOpen.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -449,7 +449,7 @@ be mutually exclusive.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['ex', 'get', 'examine', 'l', 'feel', 'listen']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'listen', 'ex', 'get', 'feel', 'examine']</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -475,7 +475,7 @@ be mutually exclusive.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'ex get examine l feel listen', 'category': 'general', 'key': 'look', 'no_prefix': ' ex get examine l feel listen', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l listen ex get feel examine', 'category': 'general', 'key': 'look', 'no_prefix': ' l listen ex get feel examine', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}</em><a class="headerlink" href="#evennia.contrib.tutorials.red_button.red_button.CmdBlindLook.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -225,11 +225,8 @@ for testing out some commands.</p>
|
|||
<dd><p>Formats the option block.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>optionlist</strong> (<em>list</em>) – List of (key, description) tuples for every
|
||||
option related to this node.</p></li>
|
||||
<li><p><strong>caller</strong> (<em>Object</em><em>, </em><em>Account</em><em> or </em><em>None</em><em>, </em><em>optional</em>) – The caller of the node.</p></li>
|
||||
</ul>
|
||||
<dd class="field-odd"><p><strong>optionlist</strong> (<em>list</em>) – List of (key, description) tuples for every
|
||||
option related to this node.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><em>options (str)</em> – The formatted option display.</p>
|
||||
|
|
|
|||
|
|
@ -507,7 +507,7 @@ shift green root up/down</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'pull', 'shiftroot', 'move']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['push', 'shiftroot', 'pull', 'move']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -543,7 +543,7 @@ yellow/green - horizontal roots</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push pull shiftroot move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push pull shiftroot move', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'push shiftroot pull move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push shiftroot pull move', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
@ -730,7 +730,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['chop', 'parry', 'fight', 'kill', 'pierce', 'stab', 'defend', 'hit', 'thrust', 'bash', 'slash']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['bash', 'stab', 'thrust', 'fight', 'hit', 'kill', 'defend', 'parry', 'chop', 'pierce', 'slash']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -756,7 +756,7 @@ parry - forgoes your attack but will make you harder to hit on next</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'chop parry fight kill pierce stab defend hit thrust bash slash', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' chop parry fight kill pierce stab defend hit thrust bash slash', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'bash stab thrust fight hit kill defend parry chop pierce slash', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash stab thrust fight hit kill defend parry chop pierce slash', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.objects.CmdAttack.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -919,7 +919,7 @@ to find something.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'search', 'feel', 'feel around', 'fiddle']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['l', 'feel around', 'search', 'fiddle', 'feel']</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -947,7 +947,7 @@ random chance of eventually finding a light source.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l search feel feel around fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l search feel feel around fiddle', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'l feel around search fiddle feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l feel around search fiddle feel', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}</em><a class="headerlink" href="#evennia.contrib.tutorials.tutorial_world.rooms.CmdLookDark.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -192,7 +192,7 @@ of a .pk field as a sign that the Attribute was deleted.</p></li>
|
|||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.attributes.AttributeProperty">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.attributes.</code><code class="sig-name descname">AttributeProperty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">strattr</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">lockstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">autocreate</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#AttributeProperty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.AttributeProperty" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.attributes.</code><code class="sig-name descname">AttributeProperty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">strattr</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">lockstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">autocreate</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#AttributeProperty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.AttributeProperty" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Attribute property descriptor. Allows for specifying Attributes as Django-like ‘fields’
|
||||
on the class level. Note that while one can set a lock on the Attribute,
|
||||
|
|
@ -210,7 +210,7 @@ the full AttributeHandler if you need to do access checks.</p>
|
|||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.typeclasses.attributes.AttributeProperty.__init__">
|
||||
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">strattr</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">lockstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">autocreate</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#AttributeProperty.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.AttributeProperty.__init__" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">strattr</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">lockstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">autocreate</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#AttributeProperty.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.AttributeProperty.__init__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Initialize an Attribute as a property descriptor.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Keyword Arguments</dt>
|
||||
|
|
@ -222,22 +222,55 @@ stored more efficiently.</p></li>
|
|||
<li><p><strong>lockstring</strong> (<em>str</em>) – This is not itself useful with the property, but only if
|
||||
using the full AttributeHandler.get(accessing_obj=…) to access the
|
||||
Attribute.</p></li>
|
||||
<li><p><strong>autocreate</strong> (<em>bool</em>) – If an un-found Attr should lead to auto-creating the
|
||||
Attribute (with the default value). If <strong>False</strong>, the property will
|
||||
return the default value until it has been explicitly set. This means
|
||||
less database accesses, but also means the property will have no
|
||||
corresponding Attribute if wanting to access it directly via the
|
||||
AttributeHandler (it will also not show up in <strong>examine</strong>).</p></li>
|
||||
<li><p><strong>autocreate</strong> (<em>bool</em>) – True by default; this means Evennia makes sure to create a new
|
||||
copy of the Attribute (with the default value) whenever a new object with this
|
||||
property is created. If <strong>False</strong>, no Attribute will be created until the property
|
||||
is explicitly assigned a value. This makes it more efficient while it retains
|
||||
its default (there’s no db access), but without an actual Attribute generated,
|
||||
one cannot access it via .db, the AttributeHandler or see it with <strong>examine</strong>.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.typeclasses.attributes.AttributeProperty.at_set">
|
||||
<code class="sig-name descname">at_set</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#AttributeProperty.at_set"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.AttributeProperty.at_set" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The value to set is passed through the method. It can be used to customize/validate
|
||||
the input in a custom child class.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>value</strong> (<em>any</em>) – The value about to the stored in this Attribute.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><em>any</em> – The value to store.</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Raises</dt>
|
||||
<dd class="field-odd"><p><strong>AttributeError</strong> – If the value is invalid to store.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.typeclasses.attributes.AttributeProperty.at_get">
|
||||
<code class="sig-name descname">at_get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#AttributeProperty.at_get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.AttributeProperty.at_get" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>The value returned from the Attribute is passed through this method. It can be used
|
||||
to react to the retrieval or modify the result in some way.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><p><strong>value</strong> (<em>any</em>) – Value returned from the Attribute.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><em>any</em> – The value to return to the caller.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.attributes.NAttributeProperty">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.attributes.</code><code class="sig-name descname">NAttributeProperty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">strattr</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">lockstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">autocreate</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#NAttributeProperty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.NAttributeProperty" title="Permalink to this definition">¶</a></dt>
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.attributes.</code><code class="sig-name descname">NAttributeProperty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">strattr</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">lockstring</span><span class="o">=</span><span class="default_value">''</span></em>, <em class="sig-param"><span class="n">autocreate</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/attributes.html#NAttributeProperty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.attributes.NAttributeProperty" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#evennia.typeclasses.attributes.AttributeProperty" title="evennia.typeclasses.attributes.AttributeProperty"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.typeclasses.attributes.AttributeProperty</span></code></a></p>
|
||||
<p>NAttribute property descriptor. Allows for specifying NAttributes as Django-like ‘fields’
|
||||
on the class level.</p>
|
||||
|
|
|
|||
|
|
@ -195,6 +195,13 @@ will be logged for every step the loader must take beyond
|
|||
2.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.typeclasses.models.TypedObject.init_evennia_properties">
|
||||
<code class="sig-name descname">init_evennia_properties</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/models.html#TypedObject.init_evennia_properties"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.models.TypedObject.init_evennia_properties" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Called by creation methods; makes sure to initialize Attribute/TagProperties
|
||||
by fetching them once.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.typeclasses.models.TypedObject.attributes">
|
||||
<code class="sig-name descname">attributes</code><a class="reference internal" href="../_modules/evennia/typeclasses/models.html#TypedObject.attributes"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.models.TypedObject.attributes" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
|
|||
|
|
@ -237,6 +237,34 @@ class built by <strong>**create_forward_many_to_many_manager()**</strong> define
|
|||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.tags.TagProperty">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.tags.</code><code class="sig-name descname">TagProperty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">data</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#TagProperty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.TagProperty" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">object</span></code></p>
|
||||
<p>Tag property descriptor. Allows for setting tags on an object as Django-like ‘fields’
|
||||
on the class level. Since Tags are almost always used for querying, Tags are always
|
||||
created/assigned along with the object. Make sure the property/tagname does not collide
|
||||
with an existing method/property on the class. If it does, you must use tags.add()
|
||||
instead.</p>
|
||||
<p>Example:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
|
||||
<span class="n">mytag</span> <span class="o">=</span> <span class="n">TagProperty</span><span class="p">()</span> <span class="c1"># category=None</span>
|
||||
<span class="n">mytag2</span> <span class="o">=</span> <span class="n">TagProperty</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="s2">"tagcategory"</span><span class="p">)</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.typeclasses.tags.TagProperty.taghandler_name">
|
||||
<code class="sig-name descname">taghandler_name</code><em class="property"> = 'tags'</em><a class="headerlink" href="#evennia.typeclasses.tags.TagProperty.taghandler_name" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.typeclasses.tags.TagProperty.__init__">
|
||||
<code class="sig-name descname">__init__</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">data</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#TagProperty.__init__"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.TagProperty.__init__" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Initialize self. See help(type(self)) for accurate signature.</p>
|
||||
</dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.tags.TagHandler">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.tags.</code><code class="sig-name descname">TagHandler</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#TagHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.TagHandler" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -312,7 +340,7 @@ category (note, that <strong>None</strong> is the default category).</p></li>
|
|||
|
||||
<dl class="py method">
|
||||
<dt id="evennia.typeclasses.tags.TagHandler.get">
|
||||
<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">return_tagobj</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">return_list</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#TagHandler.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.TagHandler.get" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">get</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">key</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">return_tagobj</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">return_list</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">raise_exception</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#TagHandler.get"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.TagHandler.get" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Get the tag for the given key, category or combination of the two.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
|
|
@ -327,6 +355,8 @@ returned.</p></li>
|
|||
instead of a string representation of the Tag.</p></li>
|
||||
<li><p><strong>return_list</strong> (<em>bool</em><em>, </em><em>optional</em>) – Always return a list, regardless
|
||||
of number of matches.</p></li>
|
||||
<li><p><strong>raise_exception</strong> (<em>bool</em><em>, </em><em>optional</em>) – Raise AttributeError if no matches
|
||||
are found.</p></li>
|
||||
</ul>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
|
|
@ -339,6 +369,9 @@ will be a list with the default value as its only element.</p>
|
|||
</dl>
|
||||
</p>
|
||||
</dd>
|
||||
<dt class="field-odd">Raises</dt>
|
||||
<dd class="field-odd"><p><strong>AttributeError</strong> – If finding no matches and <strong>raise_exception</strong> is True.</p>
|
||||
</dd>
|
||||
</dl>
|
||||
</dd></dl>
|
||||
|
||||
|
|
@ -418,6 +451,25 @@ of a latter tuple with the same category).</p>
|
|||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.tags.AliasProperty">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.tags.</code><code class="sig-name descname">AliasProperty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">data</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#AliasProperty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.AliasProperty" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#evennia.typeclasses.tags.TagProperty" title="evennia.typeclasses.tags.TagProperty"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.typeclasses.tags.TagProperty</span></code></a></p>
|
||||
<p>Allows for setting aliases like Django fields:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
|
||||
<span class="c1"># note that every character will get the alias bob. Make sure</span>
|
||||
<span class="c1"># the alias property does not collide with an existing method</span>
|
||||
<span class="c1"># or property on the class.</span>
|
||||
<span class="n">bob</span> <span class="o">=</span> <span class="n">AliasProperty</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.typeclasses.tags.AliasProperty.taghandler_name">
|
||||
<code class="sig-name descname">taghandler_name</code><em class="property"> = 'aliases'</em><a class="headerlink" href="#evennia.typeclasses.tags.AliasProperty.taghandler_name" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.tags.AliasHandler">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.tags.</code><code class="sig-name descname">AliasHandler</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#AliasHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.AliasHandler" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
@ -425,6 +477,24 @@ of a latter tuple with the same category).</p>
|
|||
<p>A handler for the Alias Tag type.</p>
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.tags.PermissionProperty">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.tags.</code><code class="sig-name descname">PermissionProperty</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">category</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">data</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#PermissionProperty"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.PermissionProperty" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Bases: <a class="reference internal" href="#evennia.typeclasses.tags.TagProperty" title="evennia.typeclasses.tags.TagProperty"><code class="xref py py-class docutils literal notranslate"><span class="pre">evennia.typeclasses.tags.TagProperty</span></code></a></p>
|
||||
<p>Allows for setting permissions like Django fields:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">DefaultCharacter</span><span class="p">):</span>
|
||||
<span class="c1"># note that every character will get this permission! Make</span>
|
||||
<span class="c1"># sure it doesn't collide with an existing method or property.</span>
|
||||
<span class="n">myperm</span> <span class="o">=</span> <span class="n">PermissionProperty</span><span class="p">()</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.typeclasses.tags.PermissionProperty.taghandler_name">
|
||||
<code class="sig-name descname">taghandler_name</code><em class="property"> = 'permissions'</em><a class="headerlink" href="#evennia.typeclasses.tags.PermissionProperty.taghandler_name" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
||||
<dl class="py class">
|
||||
<dt id="evennia.typeclasses.tags.PermissionHandler">
|
||||
<em class="property">class </em><code class="sig-prename descclassname">evennia.typeclasses.tags.</code><code class="sig-name descname">PermissionHandler</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">obj</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/typeclasses/tags.html#PermissionHandler"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.typeclasses.tags.PermissionHandler" title="Permalink to this definition">¶</a></dt>
|
||||
|
|
|
|||
|
|
@ -287,7 +287,7 @@ indentation.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.eveditor.CmdEditorGroup.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = [':w', ':f', ':dd', ':fd', ':p', ':fi', ':UU', ':S', ':A', ':x', ':I', ':dw', ':q', ':DD', ':::', ':=', ':u', ':i', ':j', ':s', ':!', ':wq', ':q!', ':<', '::', ':', ':echo', ':>', ':h', ':y', ':uu', ':r']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = [':fd', ':h', ':A', ':I', ':w', ':dd', ':q!', ':f', ':::', ':<', ':u', '::', ':j', ':i', ':fi', ':!', ':S', ':uu', ':dw', ':', ':echo', ':DD', ':p', ':=', ':>', ':q', ':s', ':y', ':wq', ':UU', ':r', ':x']</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -315,7 +315,7 @@ efficient presentation.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.eveditor.CmdEditorGroup.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ':w :f :dd :fd :p :fi :UU :S :A :x :I :dw :q :DD ::: := :u :i :j :s :! :wq :q! :< :: : :echo :> :h :y :uu :r', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :w :f :dd :fd :p :fi :UU :S :A :x :I :dw :q :DD ::: := :u :i :j :s :! :wq :q! :< :: : :echo :> :h :y :uu :r', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': ':fd :h :A :I :w :dd :q! :f ::: :< :u :: :j :i :fi :! :S :uu :dw : :echo :DD :p := :> :q :s :y :wq :UU :r :x', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :fd :h :A :I :w :dd :q! :f ::: :< :u :: :j :i :fi :! :S :uu :dw : :echo :DD :p := :> :q :s :y :wq :UU :r :x', 'tags': '', 'text': '\n Commands for the editor\n '}</em><a class="headerlink" href="#evennia.utils.eveditor.CmdEditorGroup.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -717,11 +717,8 @@ should also report errors directly to the user.</p>
|
|||
<dd><p>Formats the option block.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
<li><p><strong>optionlist</strong> (<em>list</em>) – List of (key, description) tuples for every
|
||||
option related to this node.</p></li>
|
||||
<li><p><strong>caller</strong> (<em>Object</em><em>, </em><em>Account</em><em> or </em><em>None</em><em>, </em><em>optional</em>) – The caller of the node.</p></li>
|
||||
</ul>
|
||||
<dd class="field-odd"><p><strong>optionlist</strong> (<em>list</em>) – List of (key, description) tuples for every
|
||||
option related to this node.</p>
|
||||
</dd>
|
||||
<dt class="field-even">Returns</dt>
|
||||
<dd class="field-even"><p><em>options (str)</em> – The formatted option display.</p>
|
||||
|
|
@ -957,7 +954,7 @@ single question.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['abort', 'yes', 'n', 'a', '__nomatch_command', 'y', 'no']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['n', 'a', 'abort', '__nomatch_command', 'yes', 'no', 'y']</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -983,7 +980,7 @@ single question.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'abort yes n a __nomatch_command y no', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' abort yes n a __nomatch_command y no', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'n a abort __nomatch_command yes no y', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a abort __nomatch_command yes no y', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}</em><a class="headerlink" href="#evennia.utils.evmenu.CmdYesNoQuestion.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -88,7 +88,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.evmore.CmdMore.aliases">
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['q', 'abort', 'next', 'p', 't', 'end', 'n', 'previous', 'a', 'e', 'top', 'quit']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">aliases</code><em class="property"> = ['p', 'next', 'end', 'n', 't', 'abort', 'previous', 'e', 'q', 'top', 'quit', 'a']</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.aliases" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
<dl class="py attribute">
|
||||
|
|
@ -114,7 +114,7 @@ the <strong>caller.msg()</strong> construct every time the page is updated.</p>
|
|||
|
||||
<dl class="py attribute">
|
||||
<dt id="evennia.utils.evmore.CmdMore.search_index_entry">
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'q abort next p t end n previous a e top quit', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q abort next p t end n previous a e top quit', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<code class="sig-name descname">search_index_entry</code><em class="property"> = {'aliases': 'p next end n t abort previous e q top quit a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' p next end n t abort previous e q top quit a', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}</em><a class="headerlink" href="#evennia.utils.evmore.CmdMore.search_index_entry" title="Permalink to this definition">¶</a></dt>
|
||||
<dd></dd></dl>
|
||||
|
||||
</dd></dl>
|
||||
|
|
|
|||
|
|
@ -68,14 +68,14 @@ regular Python functions on the form:</p>
|
|||
<span class="c1"># use underscore to NOT make the function available as a callable</span>
|
||||
|
||||
<span class="k">def</span> <span class="nf">funcname</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
|
||||
<span class="c1"># this can be accecssed as $funcname(*args, **kwargs)</span>
|
||||
<span class="c1"># this can be accessed as $funcname(*args, **kwargs)</span>
|
||||
<span class="c1"># it must always accept *args and **kwargs.</span>
|
||||
<span class="o">...</span>
|
||||
<span class="k">return</span> <span class="n">something</span>
|
||||
</pre></div>
|
||||
</div>
|
||||
<p>Usage:</p>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span>
|
||||
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.utils.funcparser</span> <span class="kn">import</span> <span class="n">FuncParser</span>
|
||||
|
||||
<span class="n">parser</span> <span class="o">=</span> <span class="n">FuncParser</span><span class="p">(</span><span class="s2">"path.to.module_with_callables"</span><span class="p">)</span>
|
||||
<span class="n">result</span> <span class="o">=</span> <span class="n">parser</span><span class="o">.</span><span class="n">parse</span><span class="p">(</span><span class="s2">"String with $funcname() in it"</span><span class="p">)</span>
|
||||
|
|
@ -612,7 +612,7 @@ used to find which object <strong>$you(key)</strong> refers to. If not given, th
|
|||
<p>The kwargs should be passed the to parser directly.</p>
|
||||
<p class="rubric">Examples</p>
|
||||
<p>This can be used by the say or emote hooks to pass actor stance
|
||||
strings. This should usually be combined with the $inflect() callable.</p>
|
||||
strings. This should usually be combined with the $conj() callable.</p>
|
||||
<ul class="simple">
|
||||
<li><p><strong>With a grin, $you() $conj(jump) at $you(tommy).</strong></p></li>
|
||||
</ul>
|
||||
|
|
@ -663,7 +663,7 @@ Others will see “With a grin, CharName jumps.”</p>
|
|||
<dl class="py function">
|
||||
<dt id="evennia.utils.funcparser.funcparser_callable_pronoun">
|
||||
<code class="sig-prename descclassname">evennia.utils.funcparser.</code><code class="sig-name descname">funcparser_callable_pronoun</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="n">caller</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">receiver</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">capitalize</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/funcparser.html#funcparser_callable_pronoun"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.funcparser.funcparser_callable_pronoun" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Usage: $prop(word, [options])</p>
|
||||
<dd><p>Usage: $pron(word, [options])</p>
|
||||
<p>Adjust pronouns to the expected form. Pronouns are words you use instead of a
|
||||
proper name, such as ‘him’, ‘herself’, ‘theirs’ etc. These look different
|
||||
depending on who sees the outgoing string.</p>
|
||||
|
|
@ -782,7 +782,7 @@ get a default gender fallback (if not specified in the call). If a callable,
|
|||
<strong>.gender</strong> will be called without arguments and should return a string
|
||||
<strong>male</strong>/<strong>female</strong>/<strong>neutral</strong>/<strong>plural</strong> (plural is considered a gender for this purpose).
|
||||
If no <strong>gender</strong> property/callable is found, <strong>neutral</strong> is used as a fallback.</p>
|
||||
<p>The pronoun-type default (if not spefified in call) is <strong>subject pronoun</strong>.</p>
|
||||
<p>The pronoun-type default (if not specified in call) is <strong>subject pronoun</strong>.</p>
|
||||
<dl class="field-list simple">
|
||||
<dt class="field-odd">Parameters</dt>
|
||||
<dd class="field-odd"><ul class="simple">
|
||||
|
|
@ -871,7 +871,7 @@ and the mapping can always be auto-detected.</p>
|
|||
<dl class="py function">
|
||||
<dt id="evennia.utils.funcparser.funcparser_callable_pronoun_capitalize">
|
||||
<code class="sig-prename descclassname">evennia.utils.funcparser.</code><code class="sig-name descname">funcparser_callable_pronoun_capitalize</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span><span class="n">args</span></em>, <em class="sig-param"><span class="n">caller</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">receiver</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">capitalize</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/utils/funcparser.html#funcparser_callable_pronoun_capitalize"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#evennia.utils.funcparser.funcparser_callable_pronoun_capitalize" title="Permalink to this definition">¶</a></dt>
|
||||
<dd><p>Usage: $Pron(word) - always maps to a capitalized word.</p>
|
||||
<dd><p>Usage: $Pron(word, [options]) - always maps to a capitalized word.</p>
|
||||
</dd></dl>
|
||||
|
||||
</section>
|
||||
|
|
|
|||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue