evennia/docs/2.x/Contribs/Contrib-Containers.html
Evennia docbuilder action e535f5782a Updated HTML docs.
2023-10-19 20:22:27 +00:00

212 lines
No EOL
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!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>Containers &#8212; Evennia 2.x 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="Cooldowns" href="Contrib-Cooldowns.html" />
<link rel="prev" title="Clothing" href="Contrib-Clothing.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-Cooldowns.html" title="Cooldowns"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="Contrib-Clothing.html" title="Clothing"
accesskey="P">previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 2.x</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="">Containers</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo"/>
</a></p>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" />
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>$('#searchbox').show(0);</script>
<h3><a href="../index.html">Table of Contents</a></h3>
<ul>
<li><a class="reference internal" href="#">Containers</a><ul>
<li><a class="reference internal" href="#installation">Installation</a></li>
<li><a class="reference internal" href="#usage">Usage</a></li>
<li><a class="reference internal" href="#extending">Extending</a><ul>
<li><a class="reference internal" href="#capacity-property"><code class="docutils literal notranslate"><span class="pre">capacity</span></code> property</a></li>
<li><a class="reference internal" href="#at-pre-get-from-and-at-pre-put-in-methods"><code class="docutils literal notranslate"><span class="pre">at_pre_get_from</span></code> and <code class="docutils literal notranslate"><span class="pre">at_pre_put_in</span></code> methods</a></li>
</ul>
</li>
</ul>
</li>
</ul>
<h4>Previous topic</h4>
<p class="topless"><a href="Contrib-Clothing.html"
title="previous chapter">Clothing</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="Contrib-Cooldowns.html"
title="next chapter">Cooldowns</a></p>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/Contribs/Contrib-Containers.md.txt"
rel="nofollow">Show Page Source</a></li>
</ul>
</div><h3>Links</h3>
<ul>
<li><a href="https://www.evennia.com/docs/latest/index.html">Documentation Top</a> </li>
<li><a href="https://www.evennia.com">Evennia Home</a> </li>
<li><a href="https://github.com/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>Doc Versions</h3>
<ul>
<li><a href="Contrib-Containers.html">2.x (main branch)</a></li>
<ul>
<li><a href="../1.3.0/index.html">1.3.0 (v1.3.0 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="bodywrapper">
<div class="body" role="main">
<section class="tex2jax_ignore mathjax_ignore" id="containers">
<h1>Containers<a class="headerlink" href="#containers" title="Permalink to this headline"></a></h1>
<p>Contribution by InspectorCaracal (2023)</p>
<p>Adds the ability to put objects into other container objects by providing a container typeclass and extending certain base commands.</p>
<section id="installation">
<h2>Installation<a class="headerlink" href="#installation" title="Permalink to this headline"></a></h2>
<p>To install, import and add the <code class="docutils literal notranslate"><span class="pre">ContainerCmdSet</span></code> to <code class="docutils literal notranslate"><span class="pre">CharacterCmdSet</span></code> in your <code class="docutils literal notranslate"><span class="pre">default_cmdsets.py</span></code> file:</p>
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">from</span> <span class="nn">evennia.contrib.game_systems.containers</span> <span class="kn">import</span> <span class="n">ContainerCmdSet</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>
<span class="k">def</span> <span class="nf">at_cmdset_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
<span class="c1"># ...</span>
<span class="bp">self</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">ContainerCmdSet</span><span class="p">)</span>
</pre></div>
</div>
<p>This will replace the default <code class="docutils literal notranslate"><span class="pre">look</span></code> and <code class="docutils literal notranslate"><span class="pre">get</span></code> commands with the container-friendly versions provided by the contrib as well as add a new <code class="docutils literal notranslate"><span class="pre">put</span></code> command.</p>
</section>
<section id="usage">
<h2>Usage<a class="headerlink" href="#usage" title="Permalink to this headline"></a></h2>
<p>The contrib includes a <code class="docutils literal notranslate"><span class="pre">ContribContainer</span></code> typeclass which has all of the set-up necessary to be used as a container. To use, all you need to do is create an object in-game with that typeclass - it will automatically inherit anything you implemented in your base Object typeclass as well.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>create bag:game_systems.containers.ContribContainer
</pre></div>
</div>
<p>The contribs <code class="docutils literal notranslate"><span class="pre">ContribContainer</span></code> comes with a capacity limit of a maximum number of items it can hold. This can be changed per individual object.</p>
<p>In code:</p>
<div class="highlight-py notranslate"><div class="highlight"><pre><span></span><span class="n">obj</span><span class="o">.</span><span class="n">capacity</span> <span class="o">=</span> <span class="mi">5</span>
</pre></div>
</div>
<p>In game:</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>set box/capacity = 5
</pre></div>
</div>
<p>You can also make any other objects usable as containers by setting the <code class="docutils literal notranslate"><span class="pre">get_from</span></code> lock type on it.</p>
<div class="highlight-none notranslate"><div class="highlight"><pre><span></span>lock mysterious box = get_from:true()
</pre></div>
</div>
</section>
<section id="extending">
<h2>Extending<a class="headerlink" href="#extending" title="Permalink to this headline"></a></h2>
<p>The <code class="docutils literal notranslate"><span class="pre">ContribContainer</span></code> class is intended to be usable as-is, but you can also inherit from it for your own container classes to extend its functionality. Aside from having the container lock pre-set on object creation, it comes with three main additions:</p>
<section id="capacity-property">
<h3><code class="docutils literal notranslate"><span class="pre">capacity</span></code> property<a class="headerlink" href="#capacity-property" title="Permalink to this headline"></a></h3>
<p><code class="docutils literal notranslate"><span class="pre">ContribContainer.capacity</span></code> is an <code class="docutils literal notranslate"><span class="pre">AttributeProperty</span></code> - meaning you can access it in code with <code class="docutils literal notranslate"><span class="pre">obj.capacity</span></code> and also set it in game with <code class="docutils literal notranslate"><span class="pre">set</span> <span class="pre">obj/capacity</span> <span class="pre">=</span> <span class="pre">5</span></code> - which represents the capacity of the container as an integer. You can override this with a more complex representation of capacity on your own container classes.</p>
</section>
<section id="at-pre-get-from-and-at-pre-put-in-methods">
<h3><code class="docutils literal notranslate"><span class="pre">at_pre_get_from</span></code> and <code class="docutils literal notranslate"><span class="pre">at_pre_put_in</span></code> methods<a class="headerlink" href="#at-pre-get-from-and-at-pre-put-in-methods" title="Permalink to this headline"></a></h3>
<p>These two methods on <code class="docutils literal notranslate"><span class="pre">ContribContainer</span></code> are called as extra checks when attempting to either get an object from, or put an object in, a container. The contribs <code class="docutils literal notranslate"><span class="pre">ContribContainer.at_pre_get_from</span></code> doesnt do any additional validation by default, while <code class="docutils literal notranslate"><span class="pre">ContribContainer.at_pre_put_in</span></code> does a simple capacity check.</p>
<p>You can override these methods on your own child class to do any additional capacity or access checks.</p>
<hr class="docutils" />
<p><small>This document page is generated from <code class="docutils literal notranslate"><span class="pre">evennia/contrib/game_systems/containers/README.md</span></code>. Changes to this
file will be overwritten, so edit that file rather than this one.</small></p>
</section>
</section>
</section>
</div>
</div>
</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-Cooldowns.html" title="Cooldowns"
>next</a> |</li>
<li class="right" >
<a href="Contrib-Clothing.html" title="Clothing"
>previous</a> |</li>
<li class="nav-item nav-item-0"><a href="../index.html">Evennia 2.x</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="">Containers</a></li>
</ul>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2023, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>