evennia/docs/api/evennia.prototypes.protfuncs.html
Evennia docbuilder action 971eab282b Updated HTML docs.
2025-08-15 16:53:30 +00:00

214 lines
No EOL
11 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>evennia.prototypes.protfuncs &#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="evennia.prototypes.prototypes" href="evennia.prototypes.prototypes.html" />
<link rel="prev" title="evennia.prototypes.menus" href="evennia.prototypes.menus.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="evennia.prototypes.prototypes.html" title="evennia.prototypes.prototypes"
accesskey="N">next</a> |</li>
<li class="right" >
<a href="evennia.prototypes.menus.html" title="evennia.prototypes.menus"
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="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.prototypes.html" accesskey="U">evennia.prototypes</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.prototypes.protfuncs</a></li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="module-evennia.prototypes.protfuncs">
<span id="evennia-prototypes-protfuncs"></span><h1>evennia.prototypes.protfuncs<a class="headerlink" href="#module-evennia.prototypes.protfuncs" title="Link to this heading"></a></h1>
<p>Protfuncs are FuncParser-callables that can be embedded in a prototype to provide custom logic
without having access to Python. The protfunc is parsed at the time of spawning, using the creating
objects session as input. If the protfunc returns a non-string, this is what will be added to the
prototype.</p>
<p>In the prototype dict, the protfunc is specified as a string inside the prototype, e.g.:</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="p">{</span> <span class="o">...</span>
<span class="s2">&quot;key&quot;</span><span class="p">:</span> <span class="s2">&quot;$funcname(args, kwargs)&quot;</span>
<span class="o">...</span> <span class="p">}</span>
</pre></div>
</div>
<p>Available protfuncs are either all callables in one of the modules of <strong>settings.PROT_FUNC_MODULES</strong>
or all callables added to a dict FUNCPARSER_CALLABLES in such a module. By default, base inlinefuncs
for text manipulation and searching are included, as well as the special <strong>$protkey</strong> function.
See the Prototypes and Spawner documentation for more info.</p>
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="k">def</span><span class="w"> </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="k">return</span> <span class="s2">&quot;replacement text&quot;</span>
</pre></div>
</div>
<p>At spawn-time the spawner passes the following extra kwargs into each callable (in addition to
what is added in the call itself):</p>
<ul class="simple">
<li><p><strong>session</strong> (Session): The Session of the entity spawning using this prototype.</p></li>
<li><p><strong>prototype</strong> (dict): The dict this protfunc is a part of.</p></li>
<li><p><strong>current_key</strong> (str): The active key this value belongs to in the prototype.</p></li>
</ul>
<p>Any traceback raised by this function will be handled at the time of spawning and abort the spawn
before any object is created/updated. It must otherwise return the value to store for the specified
prototype key (this value must be possible to serialize in an Attribute).</p>
<dl class="py function">
<dt class="sig sig-object py" id="evennia.prototypes.protfuncs.protfunc_callable_protkey">
<span class="sig-prename descclassname"><span class="pre">evennia.prototypes.protfuncs.</span></span><span class="sig-name descname"><span class="pre">protfunc_callable_protkey</span></span><span class="sig-paren">(</span><em class="sig-param"><span class="o"><span class="pre">*</span></span><span class="n"><span class="pre">args</span></span></em>, <em class="sig-param"><span class="o"><span class="pre">**</span></span><span class="n"><span class="pre">kwargs</span></span></em><span class="sig-paren">)</span><a class="reference internal" href="../_modules/evennia/prototypes/protfuncs.html#protfunc_callable_protkey"><span class="viewcode-link"><span class="pre">[source]</span></span></a><a class="headerlink" href="#evennia.prototypes.protfuncs.protfunc_callable_protkey" title="Link to this definition"></a></dt>
<dd><p>Usage: $protkey(keyname)</p>
<p>Returns the value of another key in this prototoype. Will raise an error if
the key is not found in this prototype.</p>
</dd></dl>
</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="#">evennia.prototypes.protfuncs</a><ul>
<li><a class="reference internal" href="#evennia.prototypes.protfuncs.protfunc_callable_protkey"><code class="docutils literal notranslate"><span class="pre">protfunc_callable_protkey()</span></code></a></li>
</ul>
</li>
</ul>
<div>
<h4>Previous topic</h4>
<p class="topless"><a href="evennia.prototypes.menus.html"
title="previous chapter">evennia.prototypes.menus</a></p>
</div>
<div>
<h4>Next topic</h4>
<p class="topless"><a href="evennia.prototypes.prototypes.html"
title="next chapter">evennia.prototypes.prototypes</a></p>
</div>
<div role="note" aria-label="source link">
<!--h3>This Page</h3-->
<ul class="this-page-menu">
<li><a href="../_sources/api/evennia.prototypes.protfuncs.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/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="evennia.prototypes.prototypes.html" title="evennia.prototypes.prototypes"
>next</a> |</li>
<li class="right" >
<a href="evennia.prototypes.menus.html" title="evennia.prototypes.menus"
>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="../Evennia-API.html" >API Summary</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="evennia-api.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-3"><a href="evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-4"><a href="evennia.prototypes.html" >evennia.prototypes</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.prototypes.protfuncs</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>