Updated HTML docs

This commit is contained in:
Evennia docbuilder action 2022-03-07 18:56:34 +00:00
parent 311dbb3761
commit bd82579bfa
54 changed files with 697 additions and 171 deletions

View file

@ -17,7 +17,7 @@
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Custom gameime" href="Contrib-Custom-Gametime.html" />
<link rel="next" title="Components" href="Contrib-Components.html" />
<link rel="prev" title="Building menu" href="Contrib-Building-Menu.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
@ -30,7 +30,7 @@
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Contrib-Custom-Gametime.html" title="Custom gameime"
<a href="Contrib-Components.html" title="Components"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Contrib-Building-Menu.html" title="Building menu"
@ -138,8 +138,8 @@ file will be overwritten, so edit that file rather than this one.</small></p>
<p class="topless"><a href="Contrib-Building-Menu.html"
title="previous chapter">Building menu</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Contrib-Custom-Gametime.html"
title="next chapter">Custom gameime</a></p>
<p class="topless"><a href="Contrib-Components.html"
title="next chapter">Components</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
@ -177,7 +177,7 @@ file will be overwritten, so edit that file rather than this one.</small></p>
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Contrib-Custom-Gametime.html" title="Custom gameime"
<a href="Contrib-Components.html" title="Components"
>next</a> |</li>
<li class="right" >
<a href="Contrib-Building-Menu.html" title="Building menu"

View file

@ -0,0 +1,311 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="generator" content="Docutils 0.17.1: http://docutils.sourceforge.net/" />
<title>Components &#8212; Evennia 1.0-dev documentation</title>
<link rel="stylesheet" href="../_static/nature.css" type="text/css" />
<link rel="stylesheet" href="../_static/pygments.css" type="text/css" />
<script id="documentation_options" data-url_root="../" src="../_static/documentation_options.js"></script>
<script src="../_static/jquery.js"></script>
<script src="../_static/underscore.js"></script>
<script src="../_static/doctools.js"></script>
<script src="../_static/language_data.js"></script>
<link rel="shortcut icon" href="../_static/favicon.ico"/>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Custom gameime" href="Contrib-Custom-Gametime.html" />
<link rel="prev" title="Additional Color markups" href="Contrib-Color-Markups.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Contrib-Custom-Gametime.html" title="Custom gameime"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Contrib-Color-Markups.html" title="Additional Color markups"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Contribs-Overview.html" accesskey="U">Contribs</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">Components</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section class="tex2jax_ignore mathjax_ignore" id="components">
<h1>Components<a class="headerlink" href="#components" title="Permalink to this headline"></a></h1>
<p><em>Contrib by ChrisLR 2021</em></p>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="the-components-contrib">
<h1>The Components Contrib<a class="headerlink" href="#the-components-contrib" title="Permalink to this headline"></a></h1>
<p>This contrib introduces Components and Composition to Evennia.
Each Component class represents a feature that will be enabled on a typeclass instance.
You can register these components on an entire typeclass or a single object at runtime.
It supports both persisted attributes and in-memory attributes by using Evennias AttributeHandler.</p>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="pros">
<h1>Pros<a class="headerlink" href="#pros" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><p>You can reuse a feature across multiple typeclasses without inheritance</p></li>
<li><p>You can cleanly organize each feature into a self-contained class.</p></li>
<li><p>You can check if your object supports a feature without checking its instance.</p></li>
</ul>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="cons">
<h1>Cons<a class="headerlink" href="#cons" title="Permalink to this headline"></a></h1>
<ul class="simple">
<li><p>It introduces additional complexity.</p></li>
<li><p>A host typeclass instance is required.</p></li>
</ul>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="how-to-install">
<h1>How to install<a class="headerlink" href="#how-to-install" title="Permalink to this headline"></a></h1>
<p>To enable component support for a typeclass,
import and inherit the ComponentHolderMixin, similar to this</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">ComponentHolderMixin</span>
<span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">ComponentHolderMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="c1"># ...</span>
</pre></div>
</div>
<p>Components need to inherit the Component class directly and require a name.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.contrib.components</span> <span class="kn">import</span> <span class="n">Component</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">name</span> <span class="o">=</span> <span class="s2">&quot;health&quot;</span>
</pre></div>
</div>
<p>Components may define DBFields or NDBFields at the class level.
DBField will store its values in the hosts DB with a prefixed key.
NDBField will store its values in the hosts NDB and will not persist.
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>
<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">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>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.
You can also pass kwargs to override the default values
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">ComponentHolderMixin</span>
<span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">ComponentHolderMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="n">health</span> <span class="o">=</span> <span class="n">ComponentProperty</span><span class="p">(</span><span class="s2">&quot;health&quot;</span><span class="p">,</span> <span class="n">hp</span><span class="o">=</span><span class="mi">10</span><span class="p">,</span> <span class="n">max_hp</span><span class="o">=</span><span class="mi">50</span><span class="p">)</span>
</pre></div>
</div>
<p>You can then use character.components.health to access it.
The shorter form character.cmp.health also exists.
character.health would also be accessible but only for typeclasses that have
this component defined on the class.</p>
<p>Alternatively you can add those components at runtime.
You will have to access those via the component handler.
Example</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="n">character</span> <span class="o">=</span> <span class="bp">self</span>
<span class="n">vampirism</span> <span class="o">=</span> <span class="n">components</span><span class="o">.</span><span class="n">Vampirism</span><span class="o">.</span><span class="n">create</span><span class="p">(</span><span class="n">character</span><span class="p">)</span>
<span class="n">character</span><span class="o">.</span><span class="n">components</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">vampirism</span><span class="p">)</span>
<span class="o">...</span>
<span class="n">vampirism_from_elsewhere</span> <span class="o">=</span> <span class="n">character</span><span class="o">.</span><span class="n">components</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">&quot;vampirism&quot;</span><span class="p">)</span>
</pre></div>
</div>
<p>Keep in mind that all components must be imported to be visible in the listing.
As such, I recommend regrouping them in a package.
You can then import all your components in that packages <strong>init</strong></p>
<p>Because of how Evennia import typeclasses and the behavior of python imports
I recommend placing the components package inside the typeclass package.
In other words, create a folder named components inside your typeclass folder.
Then, inside the typeclasses/<strong>init</strong>.py file add the import to the folder, like</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">typeclasses</span> <span class="kn">import</span> <span class="n">components</span>
</pre></div>
</div>
<p>This ensures that the components package will be imported when the typeclasses are imported.
You will also need to import each components inside the packages own typeclasses/components/<strong>init</strong>.py file.
You only need to import each module/file from there but importing the right class is a good practice.</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">typeclasses.components.health</span> <span class="kn">import</span> <span class="n">Health</span>
</pre></div>
</div>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">typeclasses.components</span> <span class="kn">import</span> <span class="n">health</span>
</pre></div>
</div>
<p>Both of the above examples will work.</p>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="full-example">
<h1>Full Example<a class="headerlink" href="#full-example" title="Permalink to this headline"></a></h1>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.contrib.base_systems</span> <span class="kn">import</span> <span class="n">components</span>
<span class="c1"># This is the Component class</span>
<span class="k">class</span> <span class="nc">Health</span><span class="p">(</span><span class="n">components</span><span class="o">.</span><span class="n">Component</span><span class="p">):</span>
<span class="n">name</span> <span class="o">=</span> <span class="s2">&quot;health&quot;</span>
<span class="c1"># Stores the current and max values as Attributes on the host, defaulting to 100</span>
<span class="n">current</span> <span class="o">=</span> <span class="n">components</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">100</span><span class="p">)</span>
<span class="nb">max</span> <span class="o">=</span> <span class="n">components</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">100</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">damage</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current</span> <span class="o">&lt;=</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current</span> <span class="o">-=</span> <span class="n">value</span>
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">current</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current</span> <span class="o">=</span> <span class="mi">0</span>
<span class="bp">self</span><span class="o">.</span><span class="n">on_death</span><span class="p">()</span>
<span class="k">def</span> <span class="nf">heal</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="n">hp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">current</span>
<span class="n">hp</span> <span class="o">+=</span> <span class="n">value</span>
<span class="k">if</span> <span class="n">hp</span> <span class="o">&gt;=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_hp</span><span class="p">:</span>
<span class="n">hp</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">max_hp</span>
<span class="bp">self</span><span class="o">.</span><span class="n">current</span> <span class="o">=</span> <span class="n">hp</span>
<span class="nd">@property</span>
<span class="k">def</span> <span class="nf">is_dead</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">current</span> <span class="o">&lt;=</span> <span class="mi">0</span>
<span class="k">def</span> <span class="nf">on_death</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># Behavior is defined on the typeclass</span>
<span class="bp">self</span><span class="o">.</span><span class="n">host</span><span class="o">.</span><span class="n">on_death</span><span class="p">()</span>
<span class="c1"># This is how the Character inherits the mixin and registers the component &#39;health&#39;</span>
<span class="k">class</span> <span class="nc">Character</span><span class="p">(</span><span class="n">ComponentHolderMixin</span><span class="p">,</span> <span class="n">DefaultCharacter</span><span class="p">):</span>
<span class="n">health</span> <span class="o">=</span> <span class="n">ComponentProperty</span><span class="p">(</span><span class="s2">&quot;health&quot;</span><span class="p">)</span>
<span class="c1"># This is an example of a command that checks for the component</span>
<span class="k">class</span> <span class="nc">Attack</span><span class="p">(</span><span class="n">Command</span><span class="p">):</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;attack&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">(</span><span class="s1">&#39;melee&#39;</span><span class="p">,</span> <span class="s1">&#39;hit&#39;</span><span class="p">)</span>
<span class="k">def</span> <span class="nf">at_pre_cmd</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="n">caller</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
<span class="n">targets</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">args</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
<span class="n">valid_target</span> <span class="o">=</span> <span class="kc">None</span>
<span class="k">for</span> <span class="n">target</span> <span class="ow">in</span> <span class="n">targets</span><span class="p">:</span>
<span class="c1"># Attempt to retrieve the component, None is obtained if it does not exist.</span>
<span class="k">if</span> <span class="n">target</span><span class="o">.</span><span class="n">components</span><span class="o">.</span><span class="n">health</span><span class="p">:</span>
<span class="n">valid_target</span> <span class="o">=</span> <span class="n">target</span>
<span class="k">if</span> <span class="ow">not</span> <span class="n">valid_target</span><span class="p">:</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;You can&#39;t attack that!&quot;</span><span class="p">)</span>
<span class="k">return</span> <span class="kc">True</span>
</pre></div>
</div>
<hr class="docutils" />
<p><small>This document page is generated from <code class="docutils literal notranslate"><span class="pre">evennia/contrib/base_systems/components/README.md</span></code>. Changes to this
file will be overwritten, so edit that file rather than this one.</small></p>
</section>
<div class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<p><h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Components</a></li>
<li><a class="reference internal" href="#the-components-contrib">The Components Contrib</a></li>
<li><a class="reference internal" href="#pros">Pros</a></li>
<li><a class="reference internal" href="#cons">Cons</a></li>
<li><a class="reference internal" href="#how-to-install">How to install</a></li>
<li><a class="reference internal" href="#full-example">Full Example</a></li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="Contrib-Color-Markups.html"
title="previous chapter">Additional Color markups</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Contrib-Custom-Gametime.html"
title="next chapter">Custom gameime</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/Contribs/Contrib-Components.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com">Home page</a> </li>
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
<li><a href="http://games.evennia.com">Game Index</a> </li>
<li>
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
<a href="https://evennia.blogspot.com/">Blog</a>
</li>
</ul>
<h3>Versions</h3>
<ul>
<li><a href="Contrib-Components.html">1.0-dev (develop branch)</a></li>
<li><a href="../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="../genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="../py-modindex.html" title="Python Module Index"
>modules</a> |</li>
<li class="right" >
<a href="Contrib-Custom-Gametime.html" title="Custom gameime"
>next</a> |</li>
<li class="right" >
<a href="Contrib-Color-Markups.html" title="Additional Color markups"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Contribs-Overview.html" >Contribs</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">Components</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>

View file

@ -18,7 +18,7 @@
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="next" title="Email-based login system" href="Contrib-Email-Login.html" />
<link rel="prev" title="Additional Color markups" href="Contrib-Color-Markups.html" />
<link rel="prev" title="Components" href="Contrib-Components.html" />
</head><body>
<div class="related" role="navigation" aria-label="related navigation">
<h3>Navigation</h3>
@ -33,7 +33,7 @@
<a href="Contrib-Email-Login.html" title="Email-based login system"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Contrib-Color-Markups.html" title="Additional Color markups"
<a href="Contrib-Components.html" title="Components"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Contribs-Overview.html" accesskey="U">Contribs</a> &#187;</li>
@ -126,8 +126,8 @@ file will be overwritten, so edit that file rather than this one.</small></p>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="Contrib-Color-Markups.html"
title="previous chapter">Additional Color markups</a></p>
<p class="topless"><a href="Contrib-Components.html"
title="previous chapter">Components</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Contrib-Email-Login.html"
title="next chapter">Email-based login system</a></p>
@ -171,7 +171,7 @@ file will be overwritten, so edit that file rather than this one.</small></p>
<a href="Contrib-Email-Login.html" title="Email-based login system"
>next</a> |</li>
<li class="right" >
<a href="Contrib-Color-Markups.html" title="Additional Color markups"
<a href="Contrib-Components.html" title="Components"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 1.0-dev</a> &#187;</li>
<li class="nav-item nav-item-1"><a href="Contribs-Overview.html" >Contribs</a> &#187;</li>

View file

@ -74,6 +74,12 @@ login systems, new command syntaxes, and build helpers.</em></p>
<li class="toctree-l1"><a class="reference internal" href="Contrib-AWSStorage.html">AWSstorage system</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Building-Menu.html">Building menu</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Color-Markups.html">Additional Color markups</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Components.html">Components</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Components.html#the-components-contrib">The Components Contrib</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Components.html#pros">Pros</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Components.html#cons">Cons</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Components.html#how-to-install">How to install</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Components.html#full-example">Full Example</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Custom-Gametime.html">Custom gameime</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Email-Login.html">Email-based login system</a></li>
<li class="toctree-l1"><a class="reference internal" href="Contrib-Ingame-Python.html">Evennia in-game Python system</a></li>
@ -109,8 +115,17 @@ that will edit any default object, offering to change its key and description.</
(<code class="docutils literal notranslate"><span class="pre">{r</span></code>, <code class="docutils literal notranslate"><span class="pre">{123</span></code>).</p>
<p><a class="reference internal" href="Contrib-Color-Markups.html"><span class="doc std std-doc">Read the documentation</span></a> - <a class="reference internal" href="../api/evennia.contrib.base_systems.color_markups.html#evennia-contrib-base-systems-color-markups"><span class="std std-ref">Browse the Code</span></a></p>
</section>
<section id="contrib-components">
<h3>Contrib: <code class="docutils literal notranslate"><span class="pre">components</span></code><a class="headerlink" href="#contrib-components" title="Permalink to this headline"></a></h3>
<p><strong>Contrib by ChrisLR 2021</strong></p>
</section>
</section>
</section>
<section class="tex2jax_ignore mathjax_ignore" id="the-components-contrib">
<h1>The Components Contrib<a class="headerlink" href="#the-components-contrib" title="Permalink to this headline"></a></h1>
<p><a class="reference internal" href="Contrib-Components.html"><span class="doc std std-doc">Read the documentation</span></a> - <span class="xref myst">Browse the Code</span></p>
<section id="contrib-custom-gametime">
<h3>Contrib: <code class="docutils literal notranslate"><span class="pre">custom_gametime</span></code><a class="headerlink" href="#contrib-custom-gametime" title="Permalink to this headline"></a></h3>
<h2>Contrib: <code class="docutils literal notranslate"><span class="pre">custom_gametime</span></code><a class="headerlink" href="#contrib-custom-gametime" title="Permalink to this headline"></a></h2>
<p><em>Contrib by vlgeoff, 2017 - based on Griatchs core original</em></p>
<p>This reimplements the <code class="docutils literal notranslate"><span class="pre">evennia.utils.gametime</span></code> module but with a <em>custom</em>
calendar (unusual number of days per week/month/year etc) for your game world.
@ -119,7 +134,7 @@ in-game times, but now taking this custom calendar into account.</p>
<p><a class="reference internal" href="Contrib-Custom-Gametime.html"><span class="doc std std-doc">Read the documentation</span></a> - <a class="reference internal" href="../api/evennia.contrib.base_systems.custom_gametime.html#evennia-contrib-base-systems-custom-gametime"><span class="std std-ref">Browse the Code</span></a></p>
</section>
<section id="contrib-email-login">
<h3>Contrib: <code class="docutils literal notranslate"><span class="pre">email_login</span></code><a class="headerlink" href="#contrib-email-login" title="Permalink to this headline"></a></h3>
<h2>Contrib: <code class="docutils literal notranslate"><span class="pre">email_login</span></code><a class="headerlink" href="#contrib-email-login" title="Permalink to this headline"></a></h2>
<p><em>Contrib by Griatch, 2012</em></p>
<p>This is a variant of the login system that asks for an email-address
instead of a username to login. Note that it does not verify the email,
@ -127,7 +142,7 @@ it just uses it as the identifier rather than a username.</p>
<p><a class="reference internal" href="Contrib-Email-Login.html"><span class="doc std std-doc">Read the documentation</span></a> - <a class="reference internal" href="../api/evennia.contrib.base_systems.email_login.html#evennia-contrib-base-systems-email-login"><span class="std std-ref">Browse the Code</span></a></p>
</section>
<section id="contrib-ingame-python">
<h3>Contrib: <code class="docutils literal notranslate"><span class="pre">ingame_python</span></code><a class="headerlink" href="#contrib-ingame-python" title="Permalink to this headline"></a></h3>
<h2>Contrib: <code class="docutils literal notranslate"><span class="pre">ingame_python</span></code><a class="headerlink" href="#contrib-ingame-python" title="Permalink to this headline"></a></h2>
<p><em>Contrib by Vincent Le Goff 2017</em></p>
<p>This contrib adds the ability to script with Python in-game. It allows trusted
staff/builders to dynamically add features and triggers to individual objects
@ -140,7 +155,7 @@ this module carefully before continuing.</p>
<p><a class="reference internal" href="Contrib-Ingame-Python.html"><span class="doc std std-doc">Read the documentation</span></a> - <a class="reference internal" href="../api/evennia.contrib.base_systems.ingame_python.html#evennia-contrib-base-systems-ingame-python"><span class="std std-ref">Browse the Code</span></a></p>
</section>
<section id="contrib-menu-login">
<h3>Contrib: <code class="docutils literal notranslate"><span class="pre">menu_login</span></code><a class="headerlink" href="#contrib-menu-login" title="Permalink to this headline"></a></h3>
<h2>Contrib: <code class="docutils literal notranslate"><span class="pre">menu_login</span></code><a class="headerlink" href="#contrib-menu-login" title="Permalink to this headline"></a></h2>
<p><em>Contribution by Vincent-lg 2016. Reworked for modern EvMenu by Griatch, 2019.</em></p>
<p>This changes the Evennia login to ask for the account name and password as a series
of questions instead of requiring you to enter both at once. It uses Evennias
@ -148,7 +163,7 @@ menu system <code class="docutils literal notranslate"><span class="pre">EvMenu<
<p><a class="reference internal" href="Contrib-Menu-Login.html"><span class="doc std std-doc">Read the documentation</span></a> - <a class="reference internal" href="../api/evennia.contrib.base_systems.menu_login.html#evennia-contrib-base-systems-menu-login"><span class="std std-ref">Browse the Code</span></a></p>
</section>
<section id="contrib-mux-comms-cmds">
<h3>Contrib: <code class="docutils literal notranslate"><span class="pre">mux_comms_cmds</span></code><a class="headerlink" href="#contrib-mux-comms-cmds" title="Permalink to this headline"></a></h3>
<h2>Contrib: <code class="docutils literal notranslate"><span class="pre">mux_comms_cmds</span></code><a class="headerlink" href="#contrib-mux-comms-cmds" title="Permalink to this headline"></a></h2>
<p><em>Contribution by Griatch 2021</em></p>
<p>In Evennia 1.0+, the old Channel commands (originally inspired by MUX) were
replaced by the single <code class="docutils literal notranslate"><span class="pre">channel</span></code> command that performs all these functions.
@ -158,7 +173,7 @@ main <code class="docutils literal notranslate"><span class="pre">channel</span>
<p><a class="reference internal" href="Contrib-Mux-Comms-Cmds.html"><span class="doc std std-doc">Read the documentation</span></a> - <a class="reference internal" href="../api/evennia.contrib.base_systems.mux_comms_cmds.html#evennia-contrib-base-systems-mux-comms-cmds"><span class="std std-ref">Browse the Code</span></a></p>
</section>
<section id="contrib-unixcommand">
<h3>Contrib: <code class="docutils literal notranslate"><span class="pre">unixcommand</span></code><a class="headerlink" href="#contrib-unixcommand" title="Permalink to this headline"></a></h3>
<h2>Contrib: <code class="docutils literal notranslate"><span class="pre">unixcommand</span></code><a class="headerlink" href="#contrib-unixcommand" title="Permalink to this headline"></a></h2>
<p><em>Contribution by Vincent Le Geoff (vlgeoff), 2017</em></p>
<p>This module contains a command class with an alternate syntax parser implementing
Unix-style command syntax in-game. This means <code class="docutils literal notranslate"><span class="pre">--options</span></code>, positional arguments
@ -168,7 +183,6 @@ many things with many options. It uses the <code class="docutils literal notrans
library under the hood.</p>
<p><a class="reference internal" href="Contrib-Unixcommand.html"><span class="doc std std-doc">Read the documentation</span></a> - <a class="reference internal" href="../api/evennia.contrib.base_systems.unixcommand.html#evennia-contrib-base-systems-unixcommand"><span class="std std-ref">Browse the Code</span></a></p>
</section>
</section>
<section id="full-systems">
<h2>full_systems<a class="headerlink" href="#full-systems" title="Permalink to this headline"></a></h2>
<p><em>This category contains complete game engines that can be used directly
@ -563,14 +577,18 @@ will be overwritten.</small></p>
<li><a class="reference internal" href="#contrib-awsstorage">Contrib: <code class="docutils literal notranslate"><span class="pre">awsstorage</span></code></a></li>
<li><a class="reference internal" href="#contrib-building-menu">Contrib: <code class="docutils literal notranslate"><span class="pre">building_menu</span></code></a></li>
<li><a class="reference internal" href="#contrib-color-markups">Contrib: <code class="docutils literal notranslate"><span class="pre">color_markups</span></code></a></li>
<li><a class="reference internal" href="#contrib-components">Contrib: <code class="docutils literal notranslate"><span class="pre">components</span></code></a></li>
</ul>
</li>
</ul>
</li>
<li><a class="reference internal" href="#the-components-contrib">The Components Contrib</a><ul>
<li><a class="reference internal" href="#contrib-custom-gametime">Contrib: <code class="docutils literal notranslate"><span class="pre">custom_gametime</span></code></a></li>
<li><a class="reference internal" href="#contrib-email-login">Contrib: <code class="docutils literal notranslate"><span class="pre">email_login</span></code></a></li>
<li><a class="reference internal" href="#contrib-ingame-python">Contrib: <code class="docutils literal notranslate"><span class="pre">ingame_python</span></code></a></li>
<li><a class="reference internal" href="#contrib-menu-login">Contrib: <code class="docutils literal notranslate"><span class="pre">menu_login</span></code></a></li>
<li><a class="reference internal" href="#contrib-mux-comms-cmds">Contrib: <code class="docutils literal notranslate"><span class="pre">mux_comms_cmds</span></code></a></li>
<li><a class="reference internal" href="#contrib-unixcommand">Contrib: <code class="docutils literal notranslate"><span class="pre">unixcommand</span></code></a></li>
</ul>
</li>
<li><a class="reference internal" href="#full-systems">full_systems</a><ul>
<li><a class="reference internal" href="#contrib-evscaperoom">Contrib: <code class="docutils literal notranslate"><span class="pre">evscaperoom</span></code></a></li>
</ul>