evennia/docs/6.x/Contribs/Contrib-Containers.html
2026-02-15 19:06:04 +01:00

233 lines
No EOL
13 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 lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Containers &#8212; Evennia latest documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=d75fae25" />
<link rel="stylesheet" type="text/css" href="../_static/nature.css?v=279e0f84" />
<link rel="stylesheet" type="text/css" href="../_static/custom.css?v=e4a91a55" />
<script src="../_static/documentation_options.js?v=c6e86fd7"></script>
<script src="../_static/doctools.js?v=9bcbadda"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="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">
<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</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="bodywrapper">
<div class="body" role="main">
<section class="tex2jax_ignore mathjax_ignore" id="containers">
<h1>Containers<a class="headerlink" href="#containers" title="Link to this heading"></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="Link to this heading"></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="w"> </span><span class="nn">evennia.contrib.game_systems.containers</span><span class="w"> </span><span class="kn">import</span> <span class="n">ContainerCmdSet</span>
<span class="k">class</span><span class="w"> </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="w"> </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="Link to this heading"></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="Link to this heading"></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="Link to this heading"></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="Link to this heading"></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 class="clearer"></div>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="Main">
<div class="sphinxsidebarwrapper">
<p class="logo"><a href="../index.html">
<img class="logo" src="../_static/evennia_logo.png" alt="Logo of Evennia"/>
</a></p>
<search 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" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</search>
<script>document.getElementById('searchbox').style.display = "block"</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>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="Contrib-Clothing.html"
title="previous chapter">Clothing</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="Contrib-Cooldowns.html"
title="next chapter">Cooldowns</a></p>
</div>
<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="https://www.evennia.com/docs/latest/index.html">latest (main branch)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/6.x/index.html">v6.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/5.x/index.html">v5.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/4.x/index.html">v4.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/3.x/index.html">v3.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/2.x/index.html">v2.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/1.x/index.html">v1.0.0 branch (outdated)</a>
</li>
<li>
<a href="https://www.evennia.com/docs/0.x/index.html">v0.9.5 branch (outdated)</a>
</li>
</ul>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related" role="navigation" aria-label="Related">
<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</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 2024, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 8.2.3.
</div>
</body>
</html>