mirror of
https://github.com/evennia/evennia.git
synced 2026-03-22 15:56:30 +01:00
434 lines
No EOL
42 KiB
HTML
434 lines
No EOL
42 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.scripts.manager — Evennia 1.0 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" />
|
|
</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="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.scripts.manager</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>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>Versions</h3>
|
|
<ul>
|
|
<li><a href="manager.html">1.0 (main branch)</a></li>
|
|
<ul>
|
|
<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">
|
|
|
|
<h1>Source code for evennia.scripts.manager</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">The custom manager for Scripts.</span>
|
|
<span class="sd">"""</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">django.db.models</span> <span class="kn">import</span> <span class="n">Q</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.server</span> <span class="kn">import</span> <span class="n">signals</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.typeclasses.managers</span> <span class="kn">import</span> <span class="n">TypeclassManager</span><span class="p">,</span> <span class="n">TypedObjectManager</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">dbid_to_obj</span><span class="p">,</span> <span class="n">make_iter</span>
|
|
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"ScriptManager"</span><span class="p">,</span> <span class="s2">"ScriptDBManager"</span><span class="p">)</span>
|
|
<span class="n">_GA</span> <span class="o">=</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span>
|
|
|
|
<span class="n">_ObjectDB</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">_AccountDB</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
|
|
<span class="n">VALIDATE_ITERATION</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
|
|
<div class="viewcode-block" id="ScriptDBManager"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager">[docs]</a><span class="k">class</span> <span class="nc">ScriptDBManager</span><span class="p">(</span><span class="n">TypedObjectManager</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> This Scriptmanager implements methods for searching</span>
|
|
<span class="sd"> and manipulating Scripts directly from the database.</span>
|
|
|
|
<span class="sd"> Evennia-specific search methods (will return Typeclasses or</span>
|
|
<span class="sd"> lists of Typeclasses, whereas Django-general methods will return</span>
|
|
<span class="sd"> Querysets or database objects).</span>
|
|
|
|
<span class="sd"> dbref (converter)</span>
|
|
<span class="sd"> dbref_search</span>
|
|
<span class="sd"> get_dbref_range</span>
|
|
<span class="sd"> object_totals</span>
|
|
<span class="sd"> typeclass_search</span>
|
|
<span class="sd"> get_all_scripts_on_obj</span>
|
|
<span class="sd"> get_all_scripts</span>
|
|
<span class="sd"> delete_script</span>
|
|
<span class="sd"> remove_non_persistent</span>
|
|
<span class="sd"> validate</span>
|
|
<span class="sd"> script_search (equivalent to evennia.search_script)</span>
|
|
<span class="sd"> copy_script</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<div class="viewcode-block" id="ScriptDBManager.get_all_scripts_on_obj"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.get_all_scripts_on_obj">[docs]</a> <span class="k">def</span> <span class="nf">get_all_scripts_on_obj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">obj</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="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Find all Scripts related to a particular object.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> obj (Object): Object whose Scripts we are looking for.</span>
|
|
<span class="sd"> key (str, optional): Script identifier - can be given as a</span>
|
|
<span class="sd"> dbref or name string. If given, only scripts matching the</span>
|
|
<span class="sd"> key on the object will be returned.</span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> matches (list): Matching scripts.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="p">[]</span>
|
|
<span class="n">account</span> <span class="o">=</span> <span class="n">_GA</span><span class="p">(</span><span class="n">_GA</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"__dbclass__"</span><span class="p">),</span> <span class="s2">"__name__"</span><span class="p">)</span> <span class="o">==</span> <span class="s2">"AccountDB"</span>
|
|
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
|
|
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">dbref</span> <span class="ow">or</span> <span class="n">dbref</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_account</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_account</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span> <span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span> <span class="n">db_key</span><span class="o">=</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_account</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_obj</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="ScriptDBManager.get_all_scripts"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.get_all_scripts">[docs]</a> <span class="k">def</span> <span class="nf">get_all_scripts</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="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Get all scripts in the database.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> key (str or int, optional): Restrict result to only those</span>
|
|
<span class="sd"> with matching key or dbref.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> scripts (list): All scripts found, or those matching `key`.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
|
|
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">key</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
|
<span class="k">return</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="ScriptDBManager.delete_script"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.delete_script">[docs]</a> <span class="k">def</span> <span class="nf">delete_script</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">dbref</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> This stops and deletes a specific script directly from the</span>
|
|
<span class="sd"> script database.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> dbref (int): Database unique id.</span>
|
|
|
|
<span class="sd"> Notes:</span>
|
|
<span class="sd"> This might be needed for global scripts not tied to a</span>
|
|
<span class="sd"> specific game object</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">scripts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_id</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">script</span> <span class="ow">in</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">scripts</span><span class="p">):</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">stop</span><span class="p">()</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span></div>
|
|
|
|
<div class="viewcode-block" id="ScriptDBManager.update_scripts_after_server_start"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.update_scripts_after_server_start">[docs]</a> <span class="k">def</span> <span class="nf">update_scripts_after_server_start</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Update/sync/restart/delete scripts after server shutdown/restart.</span>
|
|
|
|
<span class="sd"> """</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">filter</span><span class="p">(</span><span class="n">db_is_active</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span> <span class="n">db_persistent</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">_stop_task</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">filter</span><span class="p">(</span><span class="n">db_is_active</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">_unpause_task</span><span class="p">(</span><span class="n">auto_unpause</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">at_server_start</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">filter</span><span class="p">(</span><span class="n">db_is_active</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">at_server_start</span><span class="p">()</span></div>
|
|
|
|
<div class="viewcode-block" id="ScriptDBManager.search_script"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.search_script">[docs]</a> <span class="k">def</span> <span class="nf">search_script</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">ostring</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">only_timed</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Search for a particular script.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> ostring (str): Search criterion - a script dbef or key.</span>
|
|
<span class="sd"> obj (Object, optional): Limit search to scripts defined on</span>
|
|
<span class="sd"> this object</span>
|
|
<span class="sd"> only_timed (bool): Limit search only to scripts that run</span>
|
|
<span class="sd"> on a timer.</span>
|
|
<span class="sd"> typeclass (class or str): Typeclass or path to typeclass.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> Queryset: An iterable with 0, 1 or more results.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">ostring</span> <span class="o">=</span> <span class="n">ostring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
|
|
<span class="n">dbref</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">ostring</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">dbref</span><span class="p">:</span>
|
|
<span class="c1"># this is a dbref, try to find the script directly</span>
|
|
<span class="n">dbref_match</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">dbref_search</span><span class="p">(</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">dbref_match</span><span class="p">:</span>
|
|
<span class="n">dmatch</span> <span class="o">=</span> <span class="n">dbref_match</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span> <span class="ow">and</span> <span class="n">obj</span> <span class="o">!=</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="p">(</span><span class="n">only_timed</span> <span class="ow">and</span> <span class="n">dmatch</span><span class="o">.</span><span class="n">interval</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">dbref_match</span>
|
|
|
|
<span class="k">if</span> <span class="n">typeclass</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">callable</span><span class="p">(</span><span class="n">typeclass</span><span class="p">):</span>
|
|
<span class="n">typeclass</span> <span class="o">=</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">typeclass</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">.</span><span class="vm">__name__</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">typeclass</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">typeclass</span>
|
|
|
|
<span class="c1"># not a dbref; normal search</span>
|
|
<span class="n">obj_restriction</span> <span class="o">=</span> <span class="n">obj</span> <span class="ow">and</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_obj</span><span class="o">=</span><span class="n">obj</span><span class="p">)</span> <span class="ow">or</span> <span class="n">Q</span><span class="p">()</span>
|
|
<span class="n">timed_restriction</span> <span class="o">=</span> <span class="n">only_timed</span> <span class="ow">and</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_interval__gt</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span> <span class="ow">or</span> <span class="n">Q</span><span class="p">()</span>
|
|
<span class="n">typeclass_restriction</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="ow">and</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_typeclass_path</span><span class="o">=</span><span class="n">typeclass</span><span class="p">)</span> <span class="ow">or</span> <span class="n">Q</span><span class="p">()</span>
|
|
<span class="n">scripts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span>
|
|
<span class="n">timed_restriction</span> <span class="o">&</span> <span class="n">obj_restriction</span> <span class="o">&</span> <span class="n">typeclass_restriction</span> <span class="o">&</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_key__iexact</span><span class="o">=</span><span class="n">ostring</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">scripts</span></div>
|
|
|
|
<span class="c1"># back-compatibility alias</span>
|
|
<span class="n">script_search</span> <span class="o">=</span> <span class="n">search_script</span>
|
|
|
|
<div class="viewcode-block" id="ScriptDBManager.copy_script"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.copy_script">[docs]</a> <span class="k">def</span> <span class="nf">copy_script</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">original_script</span><span class="p">,</span> <span class="n">new_key</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">new_obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">new_locks</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Make an identical copy of the original_script.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> original_script (Script): The Script to copy.</span>
|
|
<span class="sd"> new_key (str, optional): Rename the copy.</span>
|
|
<span class="sd"> new_obj (Object, optional): Place copy on different Object.</span>
|
|
<span class="sd"> new_locks (str, optional): Give copy different locks from</span>
|
|
<span class="sd"> the original.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> script_copy (Script): A new Script instance, copied from</span>
|
|
<span class="sd"> the original.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">original_script</span><span class="o">.</span><span class="n">typeclass_path</span>
|
|
<span class="n">new_key</span> <span class="o">=</span> <span class="n">new_key</span> <span class="k">if</span> <span class="n">new_key</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">original_script</span><span class="o">.</span><span class="n">key</span>
|
|
<span class="n">new_obj</span> <span class="o">=</span> <span class="n">new_obj</span> <span class="k">if</span> <span class="n">new_obj</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">original_script</span><span class="o">.</span><span class="n">obj</span>
|
|
<span class="n">new_locks</span> <span class="o">=</span> <span class="n">new_locks</span> <span class="k">if</span> <span class="n">new_locks</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">original_script</span><span class="o">.</span><span class="n">db_lock_storage</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">create</span>
|
|
|
|
<span class="n">new_script</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_script</span><span class="p">(</span>
|
|
<span class="n">typeclass</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="n">new_key</span><span class="p">,</span> <span class="n">obj</span><span class="o">=</span><span class="n">new_obj</span><span class="p">,</span> <span class="n">locks</span><span class="o">=</span><span class="n">new_locks</span><span class="p">,</span> <span class="n">autostart</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">new_script</span></div>
|
|
|
|
<div class="viewcode-block" id="ScriptDBManager.create_script"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptDBManager.create_script">[docs]</a> <span class="k">def</span> <span class="nf">create_script</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="p">,</span>
|
|
<span class="n">typeclass</span><span class="o">=</span><span class="kc">None</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">obj</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">account</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">locks</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">interval</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">start_delay</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">repeats</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">autostart</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">report_to</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">desc</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">attributes</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="p">):</span>
|
|
<span class="w"> </span><span class="sd">"""</span>
|
|
<span class="sd"> Create a new script. All scripts are a combination of a database</span>
|
|
<span class="sd"> object that communicates with the database, and an typeclass that</span>
|
|
<span class="sd"> 'decorates' the database object into being different types of</span>
|
|
<span class="sd"> scripts. It's behaviour is similar to the game objects except</span>
|
|
<span class="sd"> scripts has a time component and are more limited in scope.</span>
|
|
|
|
<span class="sd"> Keyword Args:</span>
|
|
<span class="sd"> typeclass (class or str): Class or python path to a typeclass.</span>
|
|
<span class="sd"> key (str): Name of the new object. If not set, a name of</span>
|
|
<span class="sd"> #dbref will be set.</span>
|
|
<span class="sd"> obj (Object): The entity on which this Script sits. If this</span>
|
|
<span class="sd"> is `None`, we are creating a "global" script.</span>
|
|
<span class="sd"> account (Account): The account on which this Script sits. It is</span>
|
|
<span class="sd"> exclusiv to `obj`.</span>
|
|
<span class="sd"> locks (str): one or more lockstrings, separated by semicolons.</span>
|
|
<span class="sd"> interval (int): The triggering interval for this Script, in</span>
|
|
<span class="sd"> seconds. If unset, the Script will not have a timing</span>
|
|
<span class="sd"> component.</span>
|
|
<span class="sd"> start_delay (bool): If `True`, will wait `interval` seconds</span>
|
|
<span class="sd"> before triggering the first time.</span>
|
|
<span class="sd"> repeats (int): The number of times to trigger before stopping.</span>
|
|
<span class="sd"> If unset, will repeat indefinitely.</span>
|
|
<span class="sd"> persistent (bool): If this Script survives a server shutdown</span>
|
|
<span class="sd"> or not (all Scripts will survive a reload).</span>
|
|
<span class="sd"> autostart (bool): If this Script will start immediately when</span>
|
|
<span class="sd"> created or if the `start` method must be called explicitly.</span>
|
|
<span class="sd"> report_to (Object): The object to return error messages to.</span>
|
|
<span class="sd"> desc (str): Optional description of script</span>
|
|
<span class="sd"> tags (list): List of tags or tuples (tag, category).</span>
|
|
<span class="sd"> attributes (list): List if tuples (key, value) or (key, value, category)</span>
|
|
<span class="sd"> (key, value, lockstring) or (key, value, lockstring, default_access).</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> script (obj): An instance of the script created</span>
|
|
|
|
<span class="sd"> See evennia.scripts.manager for methods to manipulate existing</span>
|
|
<span class="sd"> scripts in the database.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">global</span> <span class="n">_ObjectDB</span><span class="p">,</span> <span class="n">_AccountDB</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">_ObjectDB</span><span class="p">:</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.accounts.models</span> <span class="kn">import</span> <span class="n">AccountDB</span> <span class="k">as</span> <span class="n">_AccountDB</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="k">as</span> <span class="n">_ObjectDB</span>
|
|
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">typeclass</span> <span class="k">if</span> <span class="n">typeclass</span> <span class="k">else</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_SCRIPT_TYPECLASS</span>
|
|
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="c1"># a path is given. Load the actual typeclass</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">typeclass</span><span class="p">,</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span><span class="p">)</span>
|
|
|
|
<span class="c1"># validate input</span>
|
|
<span class="n">kwarg</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">if</span> <span class="n">key</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_key"</span><span class="p">]</span> <span class="o">=</span> <span class="n">key</span>
|
|
<span class="k">if</span> <span class="n">account</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_account"</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">account</span><span class="p">,</span> <span class="n">_AccountDB</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_obj"</span><span class="p">]</span> <span class="o">=</span> <span class="n">dbid_to_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">_ObjectDB</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">interval</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_interval"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">interval</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">start_delay</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_start_delay"</span><span class="p">]</span> <span class="o">=</span> <span class="n">start_delay</span>
|
|
<span class="k">if</span> <span class="n">repeats</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_repeats"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">repeats</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">persistent</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_persistent"</span><span class="p">]</span> <span class="o">=</span> <span class="n">persistent</span>
|
|
<span class="k">if</span> <span class="n">desc</span><span class="p">:</span>
|
|
<span class="n">kwarg</span><span class="p">[</span><span class="s2">"db_desc"</span><span class="p">]</span> <span class="o">=</span> <span class="n">desc</span>
|
|
<span class="n">tags</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">tags</span><span class="p">)</span> <span class="k">if</span> <span class="n">tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
|
<span class="n">attributes</span> <span class="o">=</span> <span class="n">make_iter</span><span class="p">(</span><span class="n">attributes</span><span class="p">)</span> <span class="k">if</span> <span class="n">attributes</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="kc">None</span>
|
|
|
|
<span class="c1"># create new instance</span>
|
|
<span class="n">new_script</span> <span class="o">=</span> <span class="n">typeclass</span><span class="p">(</span><span class="o">**</span><span class="n">kwarg</span><span class="p">)</span>
|
|
|
|
<span class="c1"># store the call signature for the signal</span>
|
|
<span class="n">new_script</span><span class="o">.</span><span class="n">_createdict</span> <span class="o">=</span> <span class="nb">dict</span><span class="p">(</span>
|
|
<span class="n">key</span><span class="o">=</span><span class="n">key</span><span class="p">,</span>
|
|
<span class="n">obj</span><span class="o">=</span><span class="n">obj</span><span class="p">,</span>
|
|
<span class="n">account</span><span class="o">=</span><span class="n">account</span><span class="p">,</span>
|
|
<span class="n">locks</span><span class="o">=</span><span class="n">locks</span><span class="p">,</span>
|
|
<span class="n">interval</span><span class="o">=</span><span class="n">interval</span><span class="p">,</span>
|
|
<span class="n">start_delay</span><span class="o">=</span><span class="n">start_delay</span><span class="p">,</span>
|
|
<span class="n">repeats</span><span class="o">=</span><span class="n">repeats</span><span class="p">,</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="n">persistent</span><span class="p">,</span>
|
|
<span class="n">autostart</span><span class="o">=</span><span class="n">autostart</span><span class="p">,</span>
|
|
<span class="n">report_to</span><span class="o">=</span><span class="n">report_to</span><span class="p">,</span>
|
|
<span class="n">desc</span><span class="o">=</span><span class="n">desc</span><span class="p">,</span>
|
|
<span class="n">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span>
|
|
<span class="n">attributes</span><span class="o">=</span><span class="n">attributes</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># this will trigger the save signal which in turn calls the</span>
|
|
<span class="c1"># at_first_save hook on the typeclass, where the _createdict</span>
|
|
<span class="c1"># can be used.</span>
|
|
<span class="n">new_script</span><span class="o">.</span><span class="n">save</span><span class="p">()</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_script</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
|
|
<span class="c1"># this happens in the case of having a repeating script with `repeats=1` and</span>
|
|
<span class="c1"># `start_delay=False` - the script will run once and immediately stop before</span>
|
|
<span class="c1"># save is over.</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
|
|
<span class="n">signals</span><span class="o">.</span><span class="n">SIGNAL_SCRIPT_POST_CREATE</span><span class="o">.</span><span class="n">send</span><span class="p">(</span><span class="n">sender</span><span class="o">=</span><span class="n">new_script</span><span class="p">)</span>
|
|
|
|
<span class="k">return</span> <span class="n">new_script</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="ScriptManager"><a class="viewcode-back" href="../../../api/evennia.scripts.manager.html#evennia.scripts.manager.ScriptManager">[docs]</a><span class="k">class</span> <span class="nc">ScriptManager</span><span class="p">(</span><span class="n">ScriptDBManager</span><span class="p">,</span> <span class="n">TypeclassManager</span><span class="p">):</span>
|
|
<span class="k">pass</span></div>
|
|
</pre></div>
|
|
|
|
</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="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0</a> »</li>
|
|
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> »</li>
|
|
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> »</li>
|
|
<li class="nav-item nav-item-this"><a href="">evennia.scripts.manager</a></li>
|
|
</ul>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2023, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |