mirror of
https://github.com/evennia/evennia.git
synced 2026-03-20 23:06:31 +01:00
3913 lines
No EOL
522 KiB
HTML
3913 lines
No EOL
522 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.commands.default.building — 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" />
|
|
</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-dev</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.commands.default.building</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
<div class="documentwrapper">
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.commands.default.building</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">Building and world design commands</span>
|
|
<span class="sd">"""</span>
|
|
<span class="kn">import</span> <span class="nn">re</span>
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="k">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">django.db.models</span> <span class="k">import</span> <span class="n">Q</span><span class="p">,</span> <span class="n">Min</span><span class="p">,</span> <span class="n">Max</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.objects.models</span> <span class="k">import</span> <span class="n">ObjectDB</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.locks.lockhandler</span> <span class="k">import</span> <span class="n">LockException</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.commands.cmdhandler</span> <span class="k">import</span> <span class="n">get_and_merge_cmdsets</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="k">import</span> <span class="n">create</span><span class="p">,</span> <span class="n">utils</span><span class="p">,</span> <span class="n">search</span><span class="p">,</span> <span class="n">logger</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="k">import</span> <span class="p">(</span>
|
|
<span class="n">inherits_from</span><span class="p">,</span>
|
|
<span class="n">class_from_module</span><span class="p">,</span>
|
|
<span class="n">get_all_typeclasses</span><span class="p">,</span>
|
|
<span class="n">variable_from_module</span><span class="p">,</span>
|
|
<span class="n">dbref</span><span class="p">,</span>
|
|
<span class="n">interactive</span><span class="p">,</span>
|
|
<span class="n">list_to_string</span><span class="p">,</span>
|
|
<span class="n">display_len</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.eveditor</span> <span class="k">import</span> <span class="n">EvEditor</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.evmore</span> <span class="k">import</span> <span class="n">EvMore</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.prototypes</span> <span class="k">import</span> <span class="n">spawner</span><span class="p">,</span> <span class="n">prototypes</span> <span class="k">as</span> <span class="n">protlib</span><span class="p">,</span> <span class="n">menus</span> <span class="k">as</span> <span class="n">olc_menus</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.ansi</span> <span class="k">import</span> <span class="n">raw</span> <span class="k">as</span> <span class="n">ansi_raw</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.inlinefuncs</span> <span class="k">import</span> <span class="n">raw</span> <span class="k">as</span> <span class="n">inlinefunc_raw</span>
|
|
|
|
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">class_from_module</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">)</span>
|
|
|
|
<span class="c1"># limit symbol import for API</span>
|
|
<span class="n">__all__</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"ObjManipCommand"</span><span class="p">,</span>
|
|
<span class="s2">"CmdSetObjAlias"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCopy"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCpAttr"</span><span class="p">,</span>
|
|
<span class="s2">"CmdMvAttr"</span><span class="p">,</span>
|
|
<span class="s2">"CmdCreate"</span><span class="p">,</span>
|
|
<span class="s2">"CmdDesc"</span><span class="p">,</span>
|
|
<span class="s2">"CmdDestroy"</span><span class="p">,</span>
|
|
<span class="s2">"CmdDig"</span><span class="p">,</span>
|
|
<span class="s2">"CmdTunnel"</span><span class="p">,</span>
|
|
<span class="s2">"CmdLink"</span><span class="p">,</span>
|
|
<span class="s2">"CmdUnLink"</span><span class="p">,</span>
|
|
<span class="s2">"CmdSetHome"</span><span class="p">,</span>
|
|
<span class="s2">"CmdListCmdSets"</span><span class="p">,</span>
|
|
<span class="s2">"CmdName"</span><span class="p">,</span>
|
|
<span class="s2">"CmdOpen"</span><span class="p">,</span>
|
|
<span class="s2">"CmdSetAttribute"</span><span class="p">,</span>
|
|
<span class="s2">"CmdTypeclass"</span><span class="p">,</span>
|
|
<span class="s2">"CmdWipe"</span><span class="p">,</span>
|
|
<span class="s2">"CmdLock"</span><span class="p">,</span>
|
|
<span class="s2">"CmdExamine"</span><span class="p">,</span>
|
|
<span class="s2">"CmdFind"</span><span class="p">,</span>
|
|
<span class="s2">"CmdTeleport"</span><span class="p">,</span>
|
|
<span class="s2">"CmdScript"</span><span class="p">,</span>
|
|
<span class="s2">"CmdTag"</span><span class="p">,</span>
|
|
<span class="s2">"CmdSpawn"</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># used by set</span>
|
|
<span class="kn">from</span> <span class="nn">ast</span> <span class="k">import</span> <span class="n">literal_eval</span> <span class="k">as</span> <span class="n">_LITERAL_EVAL</span>
|
|
|
|
<span class="n">LIST_APPEND_CHAR</span> <span class="o">=</span> <span class="s2">"+"</span>
|
|
|
|
<span class="c1"># used by find</span>
|
|
<span class="n">CHAR_TYPECLASS</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHARACTER_TYPECLASS</span>
|
|
<span class="n">ROOM_TYPECLASS</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ROOM_TYPECLASS</span>
|
|
<span class="n">EXIT_TYPECLASS</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_EXIT_TYPECLASS</span>
|
|
<span class="n">_DEFAULT_WIDTH</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">CLIENT_DEFAULT_WIDTH</span>
|
|
|
|
<span class="n">_PROTOTYPE_PARENTS</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
|
|
<div class="viewcode-block" id="ObjManipCommand"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.ObjManipCommand">[docs]</a><span class="k">class</span> <span class="nc">ObjManipCommand</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is a parent class for some of the defining objmanip commands</span>
|
|
<span class="sd"> since they tend to have some more variables to define new objects.</span>
|
|
|
|
<span class="sd"> Each object definition can have several components. First is</span>
|
|
<span class="sd"> always a name, followed by an optional alias list and finally an</span>
|
|
<span class="sd"> some optional data, such as a typeclass or a location. A comma ','</span>
|
|
<span class="sd"> separates different objects. Like this:</span>
|
|
|
|
<span class="sd"> name1;alias;alias;alias:option, name2;alias;alias ...</span>
|
|
|
|
<span class="sd"> Spaces between all components are stripped.</span>
|
|
|
|
<span class="sd"> A second situation is attribute manipulation. Such commands</span>
|
|
<span class="sd"> are simpler and offer combinations</span>
|
|
|
|
<span class="sd"> objname/attr/attr/attr, objname/attr, ...</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c1"># OBS - this is just a parent - it's not intended to actually be</span>
|
|
<span class="c1"># included in a commandset on its own!</span>
|
|
|
|
<div class="viewcode-block" id="ObjManipCommand.parse"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.ObjManipCommand.parse">[docs]</a> <span class="k">def</span> <span class="nf">parse</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> We need to expand the default parsing to get all</span>
|
|
<span class="sd"> the cases, see the module doc.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="c1"># get all the normal parsing done (switches etc)</span>
|
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">parse</span><span class="p">()</span>
|
|
|
|
<span class="n">obj_defs</span> <span class="o">=</span> <span class="p">([],</span> <span class="p">[])</span> <span class="c1"># stores left- and right-hand side of '='</span>
|
|
<span class="n">obj_attrs</span> <span class="o">=</span> <span class="p">([],</span> <span class="p">[])</span> <span class="c1"># "</span>
|
|
|
|
<span class="k">for</span> <span class="n">iside</span><span class="p">,</span> <span class="n">arglist</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">((</span><span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhslist</span><span class="p">)):</span>
|
|
<span class="c1"># lhslist/rhslist is already split by ',' at this point</span>
|
|
<span class="k">for</span> <span class="n">objdef</span> <span class="ow">in</span> <span class="n">arglist</span><span class="p">:</span>
|
|
<span class="n">aliases</span><span class="p">,</span> <span class="n">option</span><span class="p">,</span> <span class="n">attrs</span> <span class="o">=</span> <span class="p">[],</span> <span class="kc">None</span><span class="p">,</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="n">objdef</span><span class="p">:</span>
|
|
<span class="n">objdef</span><span class="p">,</span> <span class="n">option</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">objdef</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="k">if</span> <span class="s2">";"</span> <span class="ow">in</span> <span class="n">objdef</span><span class="p">:</span>
|
|
<span class="n">objdef</span><span class="p">,</span> <span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">objdef</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">)</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
|
|
<span class="k">if</span> <span class="s2">"/"</span> <span class="ow">in</span> <span class="n">objdef</span><span class="p">:</span>
|
|
<span class="n">objdef</span><span class="p">,</span> <span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">objdef</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">attrs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">)</span> <span class="k">if</span> <span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
|
|
<span class="c1"># store data</span>
|
|
<span class="n">obj_defs</span><span class="p">[</span><span class="n">iside</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">objdef</span><span class="p">,</span> <span class="s2">"option"</span><span class="p">:</span> <span class="n">option</span><span class="p">,</span> <span class="s2">"aliases"</span><span class="p">:</span> <span class="n">aliases</span><span class="p">})</span>
|
|
<span class="n">obj_attrs</span><span class="p">[</span><span class="n">iside</span><span class="p">]</span><span class="o">.</span><span class="n">append</span><span class="p">({</span><span class="s2">"name"</span><span class="p">:</span> <span class="n">objdef</span><span class="p">,</span> <span class="s2">"attrs"</span><span class="p">:</span> <span class="n">attrs</span><span class="p">})</span>
|
|
|
|
<span class="c1"># store for future access</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span> <span class="o">=</span> <span class="n">obj_defs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span> <span class="o">=</span> <span class="n">obj_defs</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span> <span class="o">=</span> <span class="n">obj_attrs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rhs_objattr</span> <span class="o">=</span> <span class="n">obj_attrs</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSetObjAlias"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetObjAlias">[docs]</a><span class="k">class</span> <span class="nc">CmdSetObjAlias</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> adding permanent aliases for object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> alias <obj> [= [alias[,alias,alias,...]]]</span>
|
|
<span class="sd"> alias <obj> =</span>
|
|
<span class="sd"> alias/category <obj> = [alias[,alias,...]:<category></span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> category - requires ending input with :category, to store the</span>
|
|
<span class="sd"> given aliases with the given category.</span>
|
|
|
|
<span class="sd"> Assigns aliases to an object so it can be referenced by more</span>
|
|
<span class="sd"> than one name. Assign empty to remove all aliases from object. If</span>
|
|
<span class="sd"> assigning a category, all aliases given will be using this category.</span>
|
|
|
|
<span class="sd"> Observe that this is not the same thing as personal aliases</span>
|
|
<span class="sd"> created with the 'nick' command! Aliases set with alias are</span>
|
|
<span class="sd"> changing the object in question, making those aliases usable</span>
|
|
<span class="sd"> by everyone.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"alias"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"setobjalias"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"category"</span><span class="p">,)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(setobjalias) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdSetObjAlias.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetObjAlias.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Set the aliases."""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: alias <obj> [= [alias[,alias ...]]]"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">objname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
|
|
<span class="c1"># Find the object to receive aliases</span>
|
|
<span class="n">obj</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">objname</span><span class="p">)</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># no =, so we just list aliases on object.</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_key_and_category</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">aliases</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">"Aliases for </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">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">),</span>
|
|
<span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</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">alias</span><span class="p">,</span> <span class="s2">""</span> <span class="k">if</span> <span class="n">category</span> <span class="ow">is</span> <span class="kc">None</span> <span class="k">else</span> <span class="s2">"[category:'</span><span class="si">%s</span><span class="s2">']"</span> <span class="o">%</span> <span class="n">category</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="p">(</span><span class="n">alias</span><span class="p">,</span> <span class="n">category</span><span class="p">)</span> <span class="ow">in</span> <span class="n">aliases</span>
|
|
<span class="p">),</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</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">"No aliases exist for '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You don't have permission to do that."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># we have given an empty =, so delete aliases</span>
|
|
<span class="n">old_aliases</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">old_aliases</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">"Cleared aliases from </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">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">),</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">old_aliases</span><span class="p">))</span>
|
|
<span class="p">)</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="k">else</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">"No aliases to clear."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">category</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">"category"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">rhs</span><span class="p">,</span> <span class="n">category</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="n">category</span> <span class="o">=</span> <span class="n">category</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">else</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">"If specifying the /category switch, the category must be given "</span>
|
|
<span class="s2">"as :category at the end."</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">rhs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
|
|
<span class="c1"># merge the old and new aliases (if any)</span>
|
|
<span class="n">old_aliases</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">,</span> <span class="n">return_list</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">new_aliases</span> <span class="o">=</span> <span class="p">[</span><span class="n">alias</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">rhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">","</span><span class="p">)</span> <span class="k">if</span> <span class="n">alias</span><span class="o">.</span><span class="n">strip</span><span class="p">()]</span>
|
|
|
|
<span class="c1"># make the aliases only appear once</span>
|
|
<span class="n">old_aliases</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span><span class="n">new_aliases</span><span class="p">)</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="nb">list</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">old_aliases</span><span class="p">))</span>
|
|
|
|
<span class="c1"># save back to object.</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">aliases</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">)</span>
|
|
|
|
<span class="c1"># we need to trigger this here, since this will force</span>
|
|
<span class="c1"># (default) Exits to rebuild their Exit commands with the new</span>
|
|
<span class="c1"># aliases</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">at_cmdset_get</span><span class="p">(</span><span class="n">force_init</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
|
|
<span class="c1"># report all aliases on the object</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"Alias(es) for '</span><span class="si">%s</span><span class="s2">' set to '</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">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">),</span>
|
|
<span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="p">),</span>
|
|
<span class="s2">" (category: '</span><span class="si">%s</span><span class="s2">')"</span> <span class="o">%</span> <span class="n">category</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCopy"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCopy">[docs]</a><span class="k">class</span> <span class="nc">CmdCopy</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> copy an object and its properties</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> copy <original obj> [= <new_name>][;alias;alias..]</span>
|
|
<span class="sd"> [:<new_location>] [,<new_name2> ...]</span>
|
|
|
|
<span class="sd"> Create one or more copies of an object. If you don't supply any targets,</span>
|
|
<span class="sd"> one exact copy of the original object will be created with the name *_copy.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"copy"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(copy) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdCopy.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCopy.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Uses ObjManipCommand.parse()"""</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">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</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">"Usage: copy <obj> [=<new_name>[;alias;alias..]]"</span>
|
|
<span class="s2">"[:<new_location>] [, <new_name2>...]"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># this has no target =, so an identical new object is created.</span>
|
|
<span class="n">from_obj_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="n">from_obj</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">from_obj_name</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">from_obj</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="n">to_obj_name</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">_copy"</span> <span class="o">%</span> <span class="n">from_obj_name</span>
|
|
<span class="n">to_obj_aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"</span><span class="si">%s</span><span class="s2">_copy"</span> <span class="o">%</span> <span class="n">alias</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">from_obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">()]</span>
|
|
<span class="n">copiedobj</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">copy_object</span><span class="p">(</span>
|
|
<span class="n">from_obj</span><span class="p">,</span> <span class="n">new_key</span><span class="o">=</span><span class="n">to_obj_name</span><span class="p">,</span> <span class="n">new_aliases</span><span class="o">=</span><span class="n">to_obj_aliases</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">copiedobj</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Identical copy of </span><span class="si">%s</span><span class="s2">, named '</span><span class="si">%s</span><span class="s2">' was created."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">from_obj_name</span><span class="p">,</span>
|
|
<span class="n">to_obj_name</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"There was an error copying </span><span class="si">%s</span><span class="s2">."</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># we have specified =. This might mean many object targets</span>
|
|
<span class="n">from_obj_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">from_obj</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">from_obj_name</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">from_obj</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">for</span> <span class="n">objdef</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">:</span>
|
|
<span class="c1"># loop through all possible copy-to targets</span>
|
|
<span class="n">to_obj_name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">to_obj_aliases</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"aliases"</span><span class="p">]</span>
|
|
<span class="n">to_obj_location</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"option"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">to_obj_location</span><span class="p">:</span>
|
|
<span class="n">to_obj_location</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">to_obj_location</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">to_obj_location</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">copiedobj</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">copy_object</span><span class="p">(</span>
|
|
<span class="n">from_obj</span><span class="p">,</span>
|
|
<span class="n">new_key</span><span class="o">=</span><span class="n">to_obj_name</span><span class="p">,</span>
|
|
<span class="n">new_location</span><span class="o">=</span><span class="n">to_obj_location</span><span class="p">,</span>
|
|
<span class="n">new_aliases</span><span class="o">=</span><span class="n">to_obj_aliases</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">copiedobj</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Copied </span><span class="si">%s</span><span class="s2"> to '</span><span class="si">%s</span><span class="s2">' (aliases: </span><span class="si">%s</span><span class="s2">)."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">from_obj_name</span><span class="p">,</span>
|
|
<span class="n">to_obj_name</span><span class="p">,</span>
|
|
<span class="n">to_obj_aliases</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"There was an error copying </span><span class="si">%s</span><span class="s2"> to '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span><span class="n">from_obj_name</span><span class="p">,</span> <span class="n">to_obj_name</span><span class="p">)</span>
|
|
<span class="c1"># we are done, echo to user</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCpAttr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCpAttr">[docs]</a><span class="k">class</span> <span class="nc">CmdCpAttr</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> copy attributes between objects</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> cpattr[/switch] <obj>/<attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="sd"> cpattr[/switch] <obj>/<attr> = <obj1> [,<obj2>,<obj3>,...]</span>
|
|
<span class="sd"> cpattr[/switch] <attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="sd"> cpattr[/switch] <attr> = <obj1>[,<obj2>,<obj3>,...]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> move - delete the attribute from the source object after copying.</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> cpattr coolness = Anna/chillout, Anna/nicety, Tom/nicety</span>
|
|
<span class="sd"> -></span>
|
|
<span class="sd"> copies the coolness attribute (defined on yourself), to attributes</span>
|
|
<span class="sd"> on Anna and Tom.</span>
|
|
|
|
<span class="sd"> Copy the attribute one object to one or more attributes on another object.</span>
|
|
<span class="sd"> If you don't supply a source object, yourself is used.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"cpattr"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"move"</span><span class="p">,)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(cpattr) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdCpAttr.check_from_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCpAttr.check_from_attr">[docs]</a> <span class="k">def</span> <span class="nf">check_from_attr</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">attr</span><span class="p">,</span> <span class="n">clear</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Hook for overriding on subclassed commands. Checks to make sure a</span>
|
|
<span class="sd"> caller can copy the attr from the object in question. If not, return a</span>
|
|
<span class="sd"> false value and the command will abort. An error message should be</span>
|
|
<span class="sd"> provided by this function.</span>
|
|
|
|
<span class="sd"> If clear is True, user is attempting to move the attribute.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">True</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdCpAttr.check_to_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCpAttr.check_to_attr">[docs]</a> <span class="k">def</span> <span class="nf">check_to_attr</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">attr</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Hook for overriding on subclassed commands. Checks to make sure a</span>
|
|
<span class="sd"> caller can write to the specified attribute on the specified object.</span>
|
|
<span class="sd"> If not, return a false value and the attribute will be skipped. An</span>
|
|
<span class="sd"> error message should be provided by this function.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">True</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdCpAttr.check_has_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCpAttr.check_has_attr">[docs]</a> <span class="k">def</span> <span class="nf">check_has_attr</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">attr</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Hook for overriding on subclassed commands. Do any preprocessing</span>
|
|
<span class="sd"> required and verify an object has an attribute.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> doesn't have an attribute </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="kc">False</span>
|
|
<span class="k">return</span> <span class="kc">True</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdCpAttr.get_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCpAttr.get_attr">[docs]</a> <span class="k">def</span> <span class="nf">get_attr</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">attr</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Hook for overriding on subclassed commands. Do any preprocessing</span>
|
|
<span class="sd"> required and get the attribute from the object.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdCpAttr.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCpAttr.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Do the copying.</span>
|
|
<span class="sd"> """</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"""Usage:</span>
|
|
<span class="s2"> cpattr[/switch] <obj>/<attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="s2"> cpattr[/switch] <obj>/<attr> = <obj1> [,<obj2>,<obj3>,...]</span>
|
|
<span class="s2"> cpattr[/switch] <attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="s2"> cpattr[/switch] <attr> = <obj1>[,<obj2>,<obj3>,...]"""</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">lhs_objattr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span>
|
|
<span class="n">to_objs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objattr</span>
|
|
<span class="n">from_obj_name</span> <span class="o">=</span> <span class="n">lhs_objattr</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">from_obj_attrs</span> <span class="o">=</span> <span class="n">lhs_objattr</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"attrs"</span><span class="p">]</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">from_obj_attrs</span><span class="p">:</span>
|
|
<span class="c1"># this means the from_obj_name is actually an attribute</span>
|
|
<span class="c1"># name on self.</span>
|
|
<span class="n">from_obj_attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">from_obj_name</span><span class="p">]</span>
|
|
<span class="n">from_obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">from_obj</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">from_obj_name</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">from_obj</span> <span class="ow">or</span> <span class="ow">not</span> <span class="n">to_objs</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">"You have to supply both source object and target(s)."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># copy to all to_obj:ects</span>
|
|
<span class="k">if</span> <span class="s2">"move"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">clear</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">clear</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_from_attr</span><span class="p">(</span><span class="n">from_obj</span><span class="p">,</span> <span class="n">from_obj_attrs</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">clear</span><span class="o">=</span><span class="n">clear</span><span class="p">):</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">from_obj_attrs</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_has_attr</span><span class="p">(</span><span class="n">from_obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">from_obj_attrs</span><span class="p">)</span> <span class="o">!=</span> <span class="nb">len</span><span class="p">(</span><span class="nb">set</span><span class="p">(</span><span class="n">from_obj_attrs</span><span class="p">)))</span> <span class="ow">and</span> <span class="n">clear</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|RCannot have duplicate source names when moving!"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
|
|
|
<span class="k">for</span> <span class="n">to_obj</span> <span class="ow">in</span> <span class="n">to_objs</span><span class="p">:</span>
|
|
<span class="n">to_obj_name</span> <span class="o">=</span> <span class="n">to_obj</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">to_obj_attrs</span> <span class="o">=</span> <span class="n">to_obj</span><span class="p">[</span><span class="s2">"attrs"</span><span class="p">]</span>
|
|
<span class="n">to_obj</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">to_obj_name</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">to_obj</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Could not find object '</span><span class="si">%s</span><span class="s2">'"</span> <span class="o">%</span> <span class="n">to_obj_name</span><span class="p">)</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">for</span> <span class="n">inum</span><span class="p">,</span> <span class="n">from_attr</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">from_obj_attrs</span><span class="p">):</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">to_attr</span> <span class="o">=</span> <span class="n">to_obj_attrs</span><span class="p">[</span><span class="n">inum</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="ne">IndexError</span><span class="p">:</span>
|
|
<span class="c1"># if there are too few attributes given</span>
|
|
<span class="c1"># on the to_obj, we copy the original name instead.</span>
|
|
<span class="n">to_attr</span> <span class="o">=</span> <span class="n">from_attr</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_to_attr</span><span class="p">(</span><span class="n">to_obj</span><span class="p">,</span> <span class="n">to_attr</span><span class="p">):</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">get_attr</span><span class="p">(</span><span class="n">from_obj</span><span class="p">,</span> <span class="n">from_attr</span><span class="p">)</span>
|
|
<span class="n">to_obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">to_attr</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">clear</span> <span class="ow">and</span> <span class="ow">not</span> <span class="p">(</span><span class="n">from_obj</span> <span class="o">==</span> <span class="n">to_obj</span> <span class="ow">and</span> <span class="n">from_attr</span> <span class="o">==</span> <span class="n">to_attr</span><span class="p">):</span>
|
|
<span class="n">from_obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">from_attr</span><span class="p">)</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">Moved </span><span class="si">%s</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="si">%s</span><span class="s2">. (value: </span><span class="si">%s</span><span class="s2">)"</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">from_obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">from_attr</span><span class="p">,</span> <span class="n">to_obj_name</span><span class="p">,</span> <span class="n">to_attr</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">Copied </span><span class="si">%s</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="si">%s</span><span class="s2">. (value: </span><span class="si">%s</span><span class="s2">)"</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">from_obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">from_attr</span><span class="p">,</span> <span class="n">to_obj_name</span><span class="p">,</span> <span class="n">to_attr</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">value</span><span class="p">))</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">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdMvAttr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdMvAttr">[docs]</a><span class="k">class</span> <span class="nc">CmdMvAttr</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> move attributes between objects</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> mvattr[/switch] <obj>/<attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="sd"> mvattr[/switch] <obj>/<attr> = <obj1> [,<obj2>,<obj3>,...]</span>
|
|
<span class="sd"> mvattr[/switch] <attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="sd"> mvattr[/switch] <attr> = <obj1>[,<obj2>,<obj3>,...]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> copy - Don't delete the original after moving.</span>
|
|
|
|
<span class="sd"> Move an attribute from one object to one or more attributes on another</span>
|
|
<span class="sd"> object. If you don't supply a source object, yourself is used.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"mvattr"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"copy"</span><span class="p">,)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(mvattr) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdMvAttr.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdMvAttr.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Do the moving</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"""Usage:</span>
|
|
<span class="s2"> mvattr[/switch] <obj>/<attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="s2"> mvattr[/switch] <obj>/<attr> = <obj1> [,<obj2>,<obj3>,...]</span>
|
|
<span class="s2"> mvattr[/switch] <attr> = <obj1>/<attr1> [,<obj2>/<attr2>,<obj3>/<attr3>,...]</span>
|
|
<span class="s2"> mvattr[/switch] <attr> = <obj1>[,<obj2>,<obj3>,...]"""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># simply use cpattr for all the functionality</span>
|
|
<span class="k">if</span> <span class="s2">"copy"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">"cpattr </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="s2">"cpattr/move </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdCreate"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCreate">[docs]</a><span class="k">class</span> <span class="nc">CmdCreate</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> create new objects</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> create[/drop] <objname>[;alias;alias...][:typeclass], <objname>...</span>
|
|
|
|
<span class="sd"> switch:</span>
|
|
<span class="sd"> drop - automatically drop the new object into your current</span>
|
|
<span class="sd"> location (this is not echoed). This also sets the new</span>
|
|
<span class="sd"> object's home to the current location rather than to you.</span>
|
|
|
|
<span class="sd"> Creates one or more new objects. If typeclass is given, the object</span>
|
|
<span class="sd"> is created as a child of this typeclass. The typeclass script is</span>
|
|
<span class="sd"> assumed to be located under types/ and any further</span>
|
|
<span class="sd"> directory structure is given in Python notation. So if you have a</span>
|
|
<span class="sd"> correct typeclass 'RedButton' defined in</span>
|
|
<span class="sd"> types/examples/red_button.py, you could create a new</span>
|
|
<span class="sd"> object of this type like this:</span>
|
|
|
|
<span class="sd"> create/drop button;red : examples.red_button.RedButton</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"create"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"drop"</span><span class="p">,)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(create) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<span class="c1"># lockstring of newly created objects, for easy overloading.</span>
|
|
<span class="c1"># Will be formatted with the {id} of the creating object.</span>
|
|
<span class="n">new_obj_lockstring</span> <span class="o">=</span> <span class="s2">"control:id(</span><span class="si">{id}</span><span class="s2">) or perm(Admin);delete:id(</span><span class="si">{id}</span><span class="s2">) or perm(Admin)"</span>
|
|
|
|
<div class="viewcode-block" id="CmdCreate.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdCreate.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Creates the object.</span>
|
|
<span class="sd"> """</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: create[/drop] <newname>[;alias;alias...] [:typeclass.path]"</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># create the objects</span>
|
|
<span class="k">for</span> <span class="n">objdef</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="n">name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"aliases"</span><span class="p">]</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"option"</span><span class="p">]</span>
|
|
|
|
<span class="c1"># create object (if not a valid typeclass, the default</span>
|
|
<span class="c1"># object typeclass will automatically be used)</span>
|
|
<span class="n">lockstring</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">new_obj_lockstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">caller</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span>
|
|
<span class="n">typeclass</span><span class="p">,</span>
|
|
<span class="n">name</span><span class="p">,</span>
|
|
<span class="n">caller</span><span class="p">,</span>
|
|
<span class="n">home</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
|
|
<span class="n">aliases</span><span class="o">=</span><span class="n">aliases</span><span class="p">,</span>
|
|
<span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span>
|
|
<span class="n">report_to</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You create a new </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2"> (aliases: </span><span class="si">%s</span><span class="s2">)."</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">string</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">typename</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"You create a new </span><span class="si">%s</span><span class="s2">: </span><span class="si">%s</span><span class="s2">."</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">string</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">typename</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="c1"># set a default desc</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="s2">"You see nothing special."</span>
|
|
<span class="k">if</span> <span class="s2">"drop"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">home</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">move_to</span><span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">location</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="k">if</span> <span class="n">string</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="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_desc_load</span><span class="p">(</span><span class="n">caller</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">evmenu_target</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="ow">or</span> <span class="s2">""</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_desc_save</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">buf</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Save line buffer to the desc prop. This should</span>
|
|
<span class="sd"> return True if successful and also report its status to the user.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">evmenu_target</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="n">buf</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Saved."</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">True</span>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_desc_quit</span><span class="p">(</span><span class="n">caller</span><span class="p">):</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="s2">"evmenu_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">"Exited editor."</span><span class="p">)</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdDesc"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDesc">[docs]</a><span class="k">class</span> <span class="nc">CmdDesc</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> describe an object or the current room.</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> desc [<obj> =] <description></span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> edit - Open up a line editor for more advanced editing.</span>
|
|
|
|
<span class="sd"> Sets the "desc" attribute on an object. If an object is not given,</span>
|
|
<span class="sd"> describe the current room.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"desc"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"describe"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"edit"</span><span class="p">,)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(desc) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdDesc.edit_handler"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDesc.edit_handler">[docs]</a> <span class="k">def</span> <span class="nf">edit_handler</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|rYou may specify a value, or use the edit switch, "</span> <span class="s2">"but not both.|n"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj</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">location</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|rYou can't describe oblivion.|n"</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</span><span class="p">)):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You don't have permission to edit the description of </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">evmenu_target</span> <span class="o">=</span> <span class="n">obj</span>
|
|
<span class="c1"># launch the editor</span>
|
|
<span class="n">EvEditor</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span>
|
|
<span class="n">loadfunc</span><span class="o">=</span><span class="n">_desc_load</span><span class="p">,</span>
|
|
<span class="n">savefunc</span><span class="o">=</span><span class="n">_desc_save</span><span class="p">,</span>
|
|
<span class="n">quitfunc</span><span class="o">=</span><span class="n">_desc_quit</span><span class="p">,</span>
|
|
<span class="n">key</span><span class="o">=</span><span class="s2">"desc"</span><span class="p">,</span>
|
|
<span class="n">persistent</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdDesc.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDesc.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Define command"""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">and</span> <span class="s2">"edit"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</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">"Usage: desc [<obj> =] <description>"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"edit"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">edit_handler</span><span class="p">()</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"="</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="c1"># We have an =</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">)</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="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">or</span> <span class="s2">""</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span> <span class="ow">or</span> <span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|rYou can't describe oblivion.|n"</span><span class="p">)</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="n">desc</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</span><span class="p">):</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">desc</span> <span class="o">=</span> <span class="n">desc</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"The description was set on </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">))</span>
|
|
<span class="k">else</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">"You don't have permission to edit the description of </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdDestroy"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDestroy">[docs]</a><span class="k">class</span> <span class="nc">CmdDestroy</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> permanently delete objects</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> override - The destroy command will usually avoid accidentally</span>
|
|
<span class="sd"> destroying account objects. This switch overrides this safety.</span>
|
|
<span class="sd"> force - destroy without confirmation.</span>
|
|
<span class="sd"> Examples:</span>
|
|
<span class="sd"> destroy house, roof, door, 44-78</span>
|
|
<span class="sd"> destroy 5-10, flower, 45</span>
|
|
<span class="sd"> destroy/force north</span>
|
|
|
|
<span class="sd"> Destroys one or many objects. If dbrefs are used, a range to delete can be</span>
|
|
<span class="sd"> given, e.g. 4-10. Also the end points will be deleted. This command</span>
|
|
<span class="sd"> displays a confirmation before destroying, to make sure of your choice.</span>
|
|
<span class="sd"> You can specify the /force switch to bypass this confirmation.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"destroy"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"delete"</span><span class="p">,</span> <span class="s2">"del"</span><span class="p">]</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"override"</span><span class="p">,</span> <span class="s2">"force"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(destroy) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<span class="n">confirm</span> <span class="o">=</span> <span class="kc">True</span> <span class="c1"># set to False to always bypass confirmation</span>
|
|
<span class="n">default_confirm</span> <span class="o">=</span> <span class="s2">"yes"</span> <span class="c1"># what to assume if just pressing enter (yes/no)</span>
|
|
|
|
<div class="viewcode-block" id="CmdDestroy.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDestroy.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Implements the command."""</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">delete</span> <span class="o">=</span> <span class="kc">True</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</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">"Usage: destroy[/switches] [obj, obj2, obj3, [dbref-dbref],...]"</span><span class="p">)</span>
|
|
<span class="n">delete</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="k">def</span> <span class="nf">delobj</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
|
<span class="c1"># helper function for deleting a single object</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">pk</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Object </span><span class="si">%s</span><span class="s2"> was already deleted."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_key</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">objname</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"delete"</span><span class="p">)):</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">You don't have permission to delete </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">objname</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span> <span class="ow">and</span> <span class="s2">"override"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">Object </span><span class="si">%s</span><span class="s2"> is controlled by an active account. Use /override to delete anyway."</span>
|
|
<span class="o">%</span> <span class="n">objname</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">dbid</span> <span class="o">==</span> <span class="nb">int</span><span class="p">(</span><span class="n">settings</span><span class="o">.</span><span class="n">DEFAULT_HOME</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"#"</span><span class="p">)):</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">You are trying to delete |c</span><span class="si">%s</span><span class="s2">|n, which is set as DEFAULT_HOME. "</span>
|
|
<span class="s2">"Re-point settings.DEFAULT_HOME to another "</span>
|
|
<span class="s2">"object before continuing."</span> <span class="o">%</span> <span class="n">objname</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="n">had_exits</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"exits"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">exits</span>
|
|
<span class="n">had_objs</span> <span class="o">=</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"contents"</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">any</span><span class="p">(</span>
|
|
<span class="n">obj</span>
|
|
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">contents</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"exits"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">exits</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># do the deletion</span>
|
|
<span class="n">okay</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">delete</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">okay</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">ERROR: </span><span class="si">%s</span><span class="s2"> not deleted, probably because delete() returned False."</span>
|
|
<span class="o">%</span> <span class="n">objname</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</span><span class="s2"> was destroyed."</span> <span class="o">%</span> <span class="n">objname</span>
|
|
<span class="k">if</span> <span class="n">had_exits</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" Exits to and from </span><span class="si">%s</span><span class="s2"> were destroyed as well."</span> <span class="o">%</span> <span class="n">objname</span>
|
|
<span class="k">if</span> <span class="n">had_objs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" Objects inside </span><span class="si">%s</span><span class="s2"> were moved to their homes."</span> <span class="o">%</span> <span class="n">objname</span>
|
|
<span class="k">return</span> <span class="n">string</span>
|
|
|
|
<span class="n">objs</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">objname</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">delete</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"-"</span> <span class="ow">in</span> <span class="n">objname</span><span class="p">:</span>
|
|
<span class="c1"># might be a range of dbrefs</span>
|
|
<span class="n">dmin</span><span class="p">,</span> <span class="n">dmax</span> <span class="o">=</span> <span class="p">[</span><span class="n">utils</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">part</span><span class="p">,</span> <span class="n">reqhash</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">objname</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"-"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="k">if</span> <span class="n">dmin</span> <span class="ow">and</span> <span class="n">dmax</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">dbref</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">int</span><span class="p">(</span><span class="n">dmin</span><span class="p">),</span> <span class="nb">int</span><span class="p">(</span><span class="n">dmax</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)):</span>
|
|
<span class="n">obj</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="s2">"#"</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">dbref</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="n">objs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj</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">objname</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj</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">objname</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">obj</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">" (Objects to destroy must either be local or specified with a unique #dbref.)"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">obj</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">objs</span><span class="p">:</span>
|
|
<span class="n">objs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">obj</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">objs</span> <span class="ow">and</span> <span class="p">(</span><span class="s2">"force"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">and</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span><span class="o">.</span><span class="n">confirm</span><span class="p">):</span>
|
|
<span class="n">confirm</span> <span class="o">=</span> <span class="s2">"Are you sure you want to destroy "</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">objs</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">confirm</span> <span class="o">+=</span> <span class="n">objs</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">objs</span><span class="p">)</span> <span class="o"><</span> <span class="mi">5</span><span class="p">:</span>
|
|
<span class="n">confirm</span> <span class="o">+=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">objs</span><span class="p">])</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">confirm</span> <span class="o">+=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="s2">"#</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> <span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">objs</span><span class="p">])</span>
|
|
<span class="n">confirm</span> <span class="o">+=</span> <span class="s2">" [yes]/no?"</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_confirm</span> <span class="o">==</span> <span class="s2">"yes"</span> <span class="k">else</span> <span class="s2">" yes/[no]"</span>
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="n">confirm</span><span class="p">)</span>
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">default_confirm</span> <span class="k">if</span> <span class="n">answer</span> <span class="o">==</span> <span class="s2">""</span> <span class="k">else</span> <span class="n">answer</span>
|
|
|
|
<span class="k">if</span> <span class="n">answer</span> <span class="ow">and</span> <span class="n">answer</span> <span class="ow">not</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"yes"</span><span class="p">,</span> <span class="s2">"y"</span><span class="p">,</span> <span class="s2">"no"</span><span class="p">,</span> <span class="s2">"n"</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">"Canceled: Either accept the default by pressing return or specify yes/no."</span>
|
|
<span class="p">)</span>
|
|
<span class="n">delete</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">elif</span> <span class="n">answer</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"n"</span><span class="p">,</span> <span class="s2">"no"</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">"Canceled: No object was destroyed."</span><span class="p">)</span>
|
|
<span class="n">delete</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="k">if</span> <span class="n">delete</span><span class="p">:</span>
|
|
<span class="n">results</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">objs</span><span class="p">:</span>
|
|
<span class="n">results</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">delobj</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span>
|
|
|
|
<span class="k">if</span> <span class="n">results</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">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">results</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdDig"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDig">[docs]</a><span class="k">class</span> <span class="nc">CmdDig</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> build new rooms and connect them to the current location</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> dig[/switches] <roomname>[;alias;alias...][:typeclass]</span>
|
|
<span class="sd"> [= <exit_to_there>[;alias][:typeclass]]</span>
|
|
<span class="sd"> [, <exit_to_here>[;alias][:typeclass]]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> tel or teleport - move yourself to the new room</span>
|
|
|
|
<span class="sd"> Examples:</span>
|
|
<span class="sd"> dig kitchen = north;n, south;s</span>
|
|
<span class="sd"> dig house:myrooms.MyHouseTypeclass</span>
|
|
<span class="sd"> dig sheer cliff;cliff;sheer = climb up, climb down</span>
|
|
|
|
<span class="sd"> This command is a convenient way to build rooms quickly; it creates the</span>
|
|
<span class="sd"> new room and you can optionally set up exits back and forth between your</span>
|
|
<span class="sd"> current room and the new one. You can add as many aliases as you</span>
|
|
<span class="sd"> like to the name of the room and the exits in question; an example</span>
|
|
<span class="sd"> would be 'north;no;n'.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"dig"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"teleport"</span><span class="p">,)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(dig) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<span class="c1"># lockstring of newly created rooms, for easy overloading.</span>
|
|
<span class="c1"># Will be formatted with the {id} of the creating object.</span>
|
|
<span class="n">new_room_lockstring</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"control:id(</span><span class="si">{id}</span><span class="s2">) or perm(Admin); "</span>
|
|
<span class="s2">"delete:id(</span><span class="si">{id}</span><span class="s2">) or perm(Admin); "</span>
|
|
<span class="s2">"edit:id(</span><span class="si">{id}</span><span class="s2">) or perm(Admin)"</span>
|
|
<span class="p">)</span>
|
|
|
|
<div class="viewcode-block" id="CmdDig.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdDig.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Do the digging. Inherits variables from ObjManipCommand.parse()"""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: dig[/teleport] <roomname>[;alias;alias...]"</span> <span class="s2">"[:parent] [= <exit_there>"</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"[;alias;alias..][:parent]] "</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"[, <exit_back_here>[;alias;alias..][:parent]]"</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">room</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</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="n">room</span><span class="p">[</span><span class="s2">"name"</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">"You must supply a new room name."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">location</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span>
|
|
|
|
<span class="c1"># Create the new room</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">room</span><span class="p">[</span><span class="s2">"option"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">typeclass</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ROOM_TYPECLASS</span>
|
|
|
|
<span class="c1"># create room</span>
|
|
<span class="n">new_room</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span>
|
|
<span class="n">typeclass</span><span class="p">,</span> <span class="n">room</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span> <span class="n">aliases</span><span class="o">=</span><span class="n">room</span><span class="p">[</span><span class="s2">"aliases"</span><span class="p">],</span> <span class="n">report_to</span><span class="o">=</span><span class="n">caller</span>
|
|
<span class="p">)</span>
|
|
<span class="n">lockstring</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">new_room_lockstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">caller</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
|
|
<span class="n">new_room</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">lockstring</span><span class="p">)</span>
|
|
<span class="n">alias_string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">new_room</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
|
|
<span class="n">alias_string</span> <span class="o">=</span> <span class="s2">" (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">new_room</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="n">room_string</span> <span class="o">=</span> <span class="s2">"Created room </span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">)</span><span class="si">%s</span><span class="s2"> of type </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">new_room</span><span class="p">,</span>
|
|
<span class="n">new_room</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
|
|
<span class="n">alias_string</span><span class="p">,</span>
|
|
<span class="n">typeclass</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># create exit to room</span>
|
|
|
|
<span class="n">exit_to_string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="n">exit_back_string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">:</span>
|
|
<span class="n">to_exit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</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="n">to_exit</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]:</span>
|
|
<span class="n">exit_to_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">No exit created to new room."</span>
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">location</span><span class="p">:</span>
|
|
<span class="n">exit_to_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">You cannot create an exit from a None-location."</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Build the exit to the new room from the current one</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">to_exit</span><span class="p">[</span><span class="s2">"option"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">typeclass</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_EXIT_TYPECLASS</span>
|
|
|
|
<span class="n">new_to_exit</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span>
|
|
<span class="n">typeclass</span><span class="p">,</span>
|
|
<span class="n">to_exit</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span>
|
|
<span class="n">location</span><span class="p">,</span>
|
|
<span class="n">aliases</span><span class="o">=</span><span class="n">to_exit</span><span class="p">[</span><span class="s2">"aliases"</span><span class="p">],</span>
|
|
<span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span>
|
|
<span class="n">destination</span><span class="o">=</span><span class="n">new_room</span><span class="p">,</span>
|
|
<span class="n">report_to</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">alias_string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">new_to_exit</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
|
|
<span class="n">alias_string</span> <span class="o">=</span> <span class="s2">" (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">new_to_exit</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="n">exit_to_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Created Exit from </span><span class="si">%s</span><span class="s2"> to </span><span class="si">%s</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="si">%s</span><span class="s2">."</span>
|
|
<span class="n">exit_to_string</span> <span class="o">=</span> <span class="n">exit_to_string</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">location</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">new_room</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">new_to_exit</span><span class="p">,</span>
|
|
<span class="n">new_to_exit</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
|
|
<span class="n">alias_string</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Create exit back from new room</span>
|
|
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="c1"># Building the exit back to the current room</span>
|
|
<span class="n">back_exit</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">back_exit</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]:</span>
|
|
<span class="n">exit_back_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">No back exit created."</span>
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">location</span><span class="p">:</span>
|
|
<span class="n">exit_back_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">You cannot create an exit back to a None-location."</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">back_exit</span><span class="p">[</span><span class="s2">"option"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">typeclass</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_EXIT_TYPECLASS</span>
|
|
<span class="n">new_back_exit</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</span><span class="p">(</span>
|
|
<span class="n">typeclass</span><span class="p">,</span>
|
|
<span class="n">back_exit</span><span class="p">[</span><span class="s2">"name"</span><span class="p">],</span>
|
|
<span class="n">new_room</span><span class="p">,</span>
|
|
<span class="n">aliases</span><span class="o">=</span><span class="n">back_exit</span><span class="p">[</span><span class="s2">"aliases"</span><span class="p">],</span>
|
|
<span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span>
|
|
<span class="n">destination</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
|
|
<span class="n">report_to</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">alias_string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">new_back_exit</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
|
|
<span class="n">alias_string</span> <span class="o">=</span> <span class="s2">" (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">new_back_exit</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="n">exit_back_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Created Exit back from </span><span class="si">%s</span><span class="s2"> to </span><span class="si">%s</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="si">%s</span><span class="s2">."</span>
|
|
<span class="n">exit_back_string</span> <span class="o">=</span> <span class="n">exit_back_string</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">new_room</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">location</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">new_back_exit</span><span class="p">,</span>
|
|
<span class="n">new_back_exit</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
|
|
<span class="n">alias_string</span><span class="p">,</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">"</span><span class="si">%s%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">room_string</span><span class="p">,</span> <span class="n">exit_to_string</span><span class="p">,</span> <span class="n">exit_back_string</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">new_room</span> <span class="ow">and</span> <span class="s2">"teleport"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">move_to</span><span class="p">(</span><span class="n">new_room</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdTunnel"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTunnel">[docs]</a><span class="k">class</span> <span class="nc">CmdTunnel</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> create new rooms in cardinal directions only</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> tunnel[/switch] <direction>[:typeclass] [= <roomname>[;alias;alias;...][:typeclass]]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> oneway - do not create an exit back to the current location</span>
|
|
<span class="sd"> tel - teleport to the newly created room</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> tunnel n</span>
|
|
<span class="sd"> tunnel n = house;mike's place;green building</span>
|
|
|
|
<span class="sd"> This is a simple way to build using pre-defined directions:</span>
|
|
<span class="sd"> |wn,ne,e,se,s,sw,w,nw|n (north, northeast etc)</span>
|
|
<span class="sd"> |wu,d|n (up and down)</span>
|
|
<span class="sd"> |wi,o|n (in and out)</span>
|
|
<span class="sd"> The full names (north, in, southwest, etc) will always be put as</span>
|
|
<span class="sd"> main name for the exit, using the abbreviation as an alias (so an</span>
|
|
<span class="sd"> exit will always be able to be used with both "north" as well as</span>
|
|
<span class="sd"> "n" for example). Opposite directions will automatically be</span>
|
|
<span class="sd"> created back from the new room unless the /oneway switch is given.</span>
|
|
<span class="sd"> For more flexibility and power in creating rooms, use dig.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"tunnel"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"tun"</span><span class="p">]</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"oneway"</span><span class="p">,</span> <span class="s2">"tel"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: perm(tunnel) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<span class="c1"># store the direction, full name and its opposite</span>
|
|
<span class="n">directions</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"n"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"north"</span><span class="p">,</span> <span class="s2">"s"</span><span class="p">),</span>
|
|
<span class="s2">"ne"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"northeast"</span><span class="p">,</span> <span class="s2">"sw"</span><span class="p">),</span>
|
|
<span class="s2">"e"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"east"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">),</span>
|
|
<span class="s2">"se"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"southeast"</span><span class="p">,</span> <span class="s2">"nw"</span><span class="p">),</span>
|
|
<span class="s2">"s"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"south"</span><span class="p">,</span> <span class="s2">"n"</span><span class="p">),</span>
|
|
<span class="s2">"sw"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"southwest"</span><span class="p">,</span> <span class="s2">"ne"</span><span class="p">),</span>
|
|
<span class="s2">"w"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"west"</span><span class="p">,</span> <span class="s2">"e"</span><span class="p">),</span>
|
|
<span class="s2">"nw"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"northwest"</span><span class="p">,</span> <span class="s2">"se"</span><span class="p">),</span>
|
|
<span class="s2">"u"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"up"</span><span class="p">,</span> <span class="s2">"d"</span><span class="p">),</span>
|
|
<span class="s2">"d"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"down"</span><span class="p">,</span> <span class="s2">"u"</span><span class="p">),</span>
|
|
<span class="s2">"i"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"in"</span><span class="p">,</span> <span class="s2">"o"</span><span class="p">),</span>
|
|
<span class="s2">"o"</span><span class="p">:</span> <span class="p">(</span><span class="s2">"out"</span><span class="p">,</span> <span class="s2">"i"</span><span class="p">),</span>
|
|
<span class="p">}</span>
|
|
|
|
<div class="viewcode-block" id="CmdTunnel.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTunnel.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Implements the tunnel command"""</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"Usage: tunnel[/switch] <direction>[:typeclass] [= <roomname>"</span>
|
|
<span class="s2">"[;alias;alias;...][:typeclass]]"</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># If we get a typeclass, we need to get just the exitname</span>
|
|
<span class="n">exitshort</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">)[</span><span class="mi">0</span><span class="p">]</span>
|
|
|
|
<span class="k">if</span> <span class="n">exitshort</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"tunnel can only understand the following directions: </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="o">.</span><span class="n">keys</span><span class="p">())</span>
|
|
<span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">(use dig for more freedom)"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># retrieve all input and parse it</span>
|
|
<span class="n">exitname</span><span class="p">,</span> <span class="n">backshort</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="p">[</span><span class="n">exitshort</span><span class="p">]</span>
|
|
<span class="n">backname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">directions</span><span class="p">[</span><span class="n">backshort</span><span class="p">][</span><span class="mi">0</span><span class="p">]</span>
|
|
|
|
<span class="c1"># if we recieved a typeclass for the exit, add it to the alias(short name)</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
|
|
<span class="c1"># limit to only the first : character</span>
|
|
<span class="n">exit_typeclass</span> <span class="o">=</span> <span class="s2">":"</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="c1"># exitshort and backshort are the last part of the exit strings,</span>
|
|
<span class="c1"># so we add our typeclass argument after</span>
|
|
<span class="n">exitshort</span> <span class="o">+=</span> <span class="n">exit_typeclass</span>
|
|
<span class="n">backshort</span> <span class="o">+=</span> <span class="n">exit_typeclass</span>
|
|
|
|
<span class="n">roomname</span> <span class="o">=</span> <span class="s2">"Some place"</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">roomname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="c1"># this may include aliases; that's fine.</span>
|
|
|
|
<span class="n">telswitch</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="s2">"tel"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">telswitch</span> <span class="o">=</span> <span class="s2">"/teleport"</span>
|
|
<span class="n">backstring</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="s2">"oneway"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">backstring</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">backname</span><span class="p">,</span> <span class="n">backshort</span><span class="p">)</span>
|
|
|
|
<span class="c1"># build the string we will use to call dig</span>
|
|
<span class="n">digstring</span> <span class="o">=</span> <span class="s2">"dig</span><span class="si">%s</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="si">%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">telswitch</span><span class="p">,</span> <span class="n">roomname</span><span class="p">,</span> <span class="n">exitname</span><span class="p">,</span> <span class="n">exitshort</span><span class="p">,</span> <span class="n">backstring</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">execute_cmd</span><span class="p">(</span><span class="n">digstring</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdLink"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdLink">[docs]</a><span class="k">class</span> <span class="nc">CmdLink</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> link existing rooms together with exits</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> link[/switches] <object> = <target></span>
|
|
<span class="sd"> link[/switches] <object> =</span>
|
|
<span class="sd"> link[/switches] <object></span>
|
|
|
|
<span class="sd"> Switch:</span>
|
|
<span class="sd"> twoway - connect two exits. For this to work, BOTH <object></span>
|
|
<span class="sd"> and <target> must be exit objects.</span>
|
|
|
|
<span class="sd"> If <object> is an exit, set its destination to <target>. Two-way operation</span>
|
|
<span class="sd"> instead sets the destination to the *locations* of the respective given</span>
|
|
<span class="sd"> arguments.</span>
|
|
<span class="sd"> The second form (a lone =) sets the destination to None (same as</span>
|
|
<span class="sd"> the unlink command) and the third form (without =) just shows the</span>
|
|
<span class="sd"> currently set destination.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"link"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(link) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdLink.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdLink.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Perform the link"""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"Usage: link[/twoway] <object> = <target>"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">object_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
|
|
<span class="c1"># try to search locally first</span>
|
|
<span class="n">results</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">object_name</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="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">results</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="c1"># local results was a multimatch. Inform them to be more specific</span>
|
|
<span class="n">_AT_SEARCH_RESULT</span> <span class="o">=</span> <span class="n">variable_from_module</span><span class="p">(</span><span class="o">*</span><span class="n">settings</span><span class="o">.</span><span class="n">SEARCH_AT_RESULT</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">"."</span><span class="p">,</span> <span class="mi">1</span><span class="p">))</span>
|
|
<span class="k">return</span> <span class="n">_AT_SEARCH_RESULT</span><span class="p">(</span><span class="n">results</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="n">object_name</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">len</span><span class="p">(</span><span class="n">results</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> <span class="c1"># A unique local match</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">results</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span> <span class="c1"># No matches. Search globally</span>
|
|
<span class="n">obj</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">object_name</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># this means a target name was given</span>
|
|
<span class="n">target</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="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="n">target</span> <span class="o">==</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Cannot link an object to itself."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="n">note</span> <span class="o">=</span> <span class="s2">"Note: </span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">) did not have a destination set before. Make sure you linked the right thing."</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">note</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="s2">"twoway"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">location</span><span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"To create a two-way link, </span><span class="si">%s</span><span class="s2"> and </span><span class="si">%s</span><span class="s2"> must both have a location"</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">obj</span><span class="p">,</span>
|
|
<span class="n">target</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" (i.e. they cannot be rooms, but should be exits)."</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">target</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="n">note</span> <span class="o">%</span> <span class="p">(</span><span class="n">target</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">target</span><span class="o">.</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="n">target</span><span class="o">.</span><span class="n">location</span>
|
|
<span class="n">target</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">location</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Link created </span><span class="si">%s</span><span class="s2"> (in </span><span class="si">%s</span><span class="s2">) <-> </span><span class="si">%s</span><span class="s2"> (in </span><span class="si">%s</span><span class="s2">) (two-way)."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">location</span><span class="p">,</span>
|
|
<span class="n">target</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">target</span><span class="o">.</span><span class="n">location</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="n">target</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Link created </span><span class="si">%s</span><span class="s2"> -> </span><span class="si">%s</span><span class="s2"> (one way)."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">target</span><span class="p">)</span>
|
|
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># this means that no = was given (otherwise rhs</span>
|
|
<span class="c1"># would have been an empty string). So we inspect</span>
|
|
<span class="c1"># the home/destination on object</span>
|
|
<span class="n">dest</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span>
|
|
<span class="k">if</span> <span class="n">dest</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> is an exit to </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">dest</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> is not an exit. Its home location is </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">home</span><span class="p">)</span>
|
|
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># We gave the command link 'obj = ' which means we want to</span>
|
|
<span class="c1"># clear destination.</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Former exit </span><span class="si">%s</span><span class="s2"> no longer links anywhere."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> had no destination to unlink."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="c1"># give feedback</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdUnLink"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdUnLink">[docs]</a><span class="k">class</span> <span class="nc">CmdUnLink</span><span class="p">(</span><span class="n">CmdLink</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> remove exit-connections between rooms</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> unlink <Object></span>
|
|
|
|
<span class="sd"> Unlinks an object, for example an exit, disconnecting</span>
|
|
<span class="sd"> it from whatever it was connected to.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c1"># this is just a child of CmdLink</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"unlink"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(unlink) or perm(Builder)"</span>
|
|
<span class="n">help_key</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdUnLink.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdUnLink.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> All we need to do here is to set the right command</span>
|
|
<span class="sd"> and call func in CmdLink</span>
|
|
<span class="sd"> """</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"Usage: unlink <object>"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># This mimics 'link <obj> = ' which is the same as unlink</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="o">=</span> <span class="s2">""</span>
|
|
|
|
<span class="c1"># call the link functionality</span>
|
|
<span class="nb">super</span><span class="p">()</span><span class="o">.</span><span class="n">func</span><span class="p">()</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSetHome"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetHome">[docs]</a><span class="k">class</span> <span class="nc">CmdSetHome</span><span class="p">(</span><span class="n">CmdLink</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> set an object's home location</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> sethome <obj> [= <home_location>]</span>
|
|
<span class="sd"> sethom <obj></span>
|
|
|
|
<span class="sd"> The "home" location is a "safety" location for objects; they</span>
|
|
<span class="sd"> will be moved there if their current location ceases to exist. All</span>
|
|
<span class="sd"> objects should always have a home location for this reason.</span>
|
|
<span class="sd"> It is also a convenient target of the "home" command.</span>
|
|
|
|
<span class="sd"> If no location is given, just view the object's home location.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"sethome"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(sethome) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdSetHome.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetHome.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""implement the command"""</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: sethome <obj> [= <home_location>]"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># just view</span>
|
|
<span class="n">home</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">home</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">home</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"This object has no home location set!"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">'s current home is </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">obj</span><span class="p">,</span> <span class="n">home</span><span class="p">,</span> <span class="n">home</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="c1"># set a home location</span>
|
|
<span class="n">new_home</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="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">new_home</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="n">old_home</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">home</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">home</span> <span class="o">=</span> <span class="n">new_home</span>
|
|
<span class="k">if</span> <span class="n">old_home</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Home location of </span><span class="si">%s</span><span class="s2"> was changed from </span><span class="si">%s</span><span class="s2">(</span><span class="si">%s</span><span class="s2">) to </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">obj</span><span class="p">,</span>
|
|
<span class="n">old_home</span><span class="p">,</span>
|
|
<span class="n">old_home</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
|
|
<span class="n">new_home</span><span class="p">,</span>
|
|
<span class="n">new_home</span><span class="o">.</span><span class="n">dbref</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Home location of </span><span class="si">%s</span><span class="s2"> was set to </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">obj</span><span class="p">,</span> <span class="n">new_home</span><span class="p">,</span> <span class="n">new_home</span><span class="o">.</span><span class="n">dbref</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdListCmdSets"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdListCmdSets">[docs]</a><span class="k">class</span> <span class="nc">CmdListCmdSets</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> list command sets defined on an object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> cmdsets <obj></span>
|
|
|
|
<span class="sd"> This displays all cmdsets assigned</span>
|
|
<span class="sd"> to a user. Defaults to yourself.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"cmdsets"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"listcmsets"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(listcmdsets) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdListCmdSets.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdListCmdSets.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""list the cmdsets"""</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">arglist</span><span class="p">:</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">arglist</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="n">obj</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span>
|
|
<span class="n">string</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">obj</span><span class="o">.</span><span class="n">cmdset</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdName"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdName">[docs]</a><span class="k">class</span> <span class="nc">CmdName</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> change the name and/or aliases of an object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> name <obj> = <newname>;alias1;alias2</span>
|
|
|
|
<span class="sd"> Rename an object to something new. Use *obj to</span>
|
|
<span class="sd"> rename an account.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"name"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"rename"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(rename) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdName.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdName.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""change the name"""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"Usage: name <obj> = <newname>[;alias;alias;...]"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">:</span>
|
|
<span class="n">objname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">objname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">):</span>
|
|
<span class="c1"># account mode</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">objname</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"aliases"</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">"Accounts can't have aliases."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">newname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">newname</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">"No name defined!"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You don't have right to edit this account </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">username</span> <span class="o">=</span> <span class="n">newname</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">save</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">"Account's name changed to '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="n">newname</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># object search, also with *</span>
|
|
<span class="n">obj</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">objname</span><span class="p">)</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">:</span>
|
|
<span class="n">newname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"aliases"</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">newname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">newname</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">aliases</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">"No names or aliases defined!"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You don't have the right to edit </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># change the name and set aliases:</span>
|
|
<span class="k">if</span> <span class="n">newname</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">name</span> <span class="o">=</span> <span class="n">newname</span>
|
|
<span class="n">astring</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">aliases</span><span class="p">:</span>
|
|
<span class="p">[</span><span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">aliases</span><span class="p">]</span>
|
|
<span class="n">astring</span> <span class="o">=</span> <span class="s2">" (</span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">aliases</span><span class="p">))</span>
|
|
<span class="c1"># fix for exits - we need their exit-command to change name too</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">flush_from_cache</span><span class="p">(</span><span class="n">force</span><span class="o">=</span><span class="kc">True</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">"Object's name changed to '</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">newname</span><span class="p">,</span> <span class="n">astring</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdOpen"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen">[docs]</a><span class="k">class</span> <span class="nc">CmdOpen</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> open a new exit from the current room</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> open <new exit>[;alias;alias..][:typeclass] [,<return exit>[;alias;..][:typeclass]]] = <destination></span>
|
|
|
|
<span class="sd"> Handles the creation of exits. If a destination is given, the exit</span>
|
|
<span class="sd"> will point there. The <return exit> argument sets up an exit at the</span>
|
|
<span class="sd"> destination leading back to the current room. Destination name</span>
|
|
<span class="sd"> can be given both as a #dbref and a name, if that name is globally</span>
|
|
<span class="sd"> unique.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"open"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(open) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<span class="n">new_obj_lockstring</span> <span class="o">=</span> <span class="s2">"control:id(</span><span class="si">{id}</span><span class="s2">) or perm(Admin);delete:id(</span><span class="si">{id}</span><span class="s2">) or perm(Admin)"</span>
|
|
<span class="c1"># a custom member method to chug out exits and do checks</span>
|
|
<div class="viewcode-block" id="CmdOpen.create_exit"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen.create_exit">[docs]</a> <span class="k">def</span> <span class="nf">create_exit</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">exit_name</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">exit_aliases</span><span class="o">=</span><span class="kc">None</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="sd">"""</span>
|
|
<span class="sd"> Helper function to avoid code duplication.</span>
|
|
<span class="sd"> At this point we know destination is a valid location</span>
|
|
|
|
<span class="sd"> """</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">string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="c1"># check if this exit object already exists at the location.</span>
|
|
<span class="c1"># we need to ignore errors (so no automatic feedback)since we</span>
|
|
<span class="c1"># have to know the result of the search to decide what to do.</span>
|
|
<span class="n">exit_obj</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">exit_name</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="n">location</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">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">exit_obj</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="c1"># give error message and return</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="n">exit_name</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="n">exit_obj</span><span class="p">:</span>
|
|
<span class="n">exit_obj</span> <span class="o">=</span> <span class="n">exit_obj</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="n">exit_obj</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="c1"># we are trying to link a non-exit</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"'</span><span class="si">%s</span><span class="s2">' already exists and is not an exit!</span><span class="se">\n</span><span class="s2">If you want to convert it "</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
|
<span class="s2">"to an exit, you must assign an object to the 'destination' property first."</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="n">string</span> <span class="o">%</span> <span class="n">exit_name</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="kc">None</span>
|
|
<span class="c1"># we are re-linking an old exit.</span>
|
|
<span class="n">old_destination</span> <span class="o">=</span> <span class="n">exit_obj</span><span class="o">.</span><span class="n">destination</span>
|
|
<span class="k">if</span> <span class="n">old_destination</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Exit </span><span class="si">%s</span><span class="s2"> already exists."</span> <span class="o">%</span> <span class="n">exit_name</span>
|
|
<span class="k">if</span> <span class="n">old_destination</span><span class="o">.</span><span class="n">id</span> <span class="o">!=</span> <span class="n">destination</span><span class="o">.</span><span class="n">id</span><span class="p">:</span>
|
|
<span class="c1"># reroute the old exit.</span>
|
|
<span class="n">exit_obj</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="n">destination</span>
|
|
<span class="k">if</span> <span class="n">exit_aliases</span><span class="p">:</span>
|
|
<span class="p">[</span><span class="n">exit_obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">alias</span><span class="p">)</span> <span class="k">for</span> <span class="n">alias</span> <span class="ow">in</span> <span class="n">exit_aliases</span><span class="p">]</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" Rerouted its old destination '</span><span class="si">%s</span><span class="s2">' to '</span><span class="si">%s</span><span class="s2">' and changed aliases."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">old_destination</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">destination</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" It already points to the correct place."</span>
|
|
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># exit does not exist before. Create a new one.</span>
|
|
<span class="n">lockstring</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">new_obj_lockstring</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">id</span><span class="o">=</span><span class="n">caller</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">typeclass</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_EXIT_TYPECLASS</span>
|
|
<span class="n">exit_obj</span> <span class="o">=</span> <span class="n">create</span><span class="o">.</span><span class="n">create_object</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">exit_name</span><span class="p">,</span>
|
|
<span class="n">location</span><span class="o">=</span><span class="n">location</span><span class="p">,</span>
|
|
<span class="n">aliases</span><span class="o">=</span><span class="n">exit_aliases</span><span class="p">,</span>
|
|
<span class="n">locks</span><span class="o">=</span><span class="n">lockstring</span><span class="p">,</span>
|
|
<span class="n">report_to</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">exit_obj</span><span class="p">:</span>
|
|
<span class="c1"># storing a destination is what makes it an exit!</span>
|
|
<span class="n">exit_obj</span><span class="o">.</span><span class="n">destination</span> <span class="o">=</span> <span class="n">destination</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">""</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">exit_aliases</span>
|
|
<span class="k">else</span> <span class="s2">" (aliases: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">)</span> <span class="k">for</span> <span class="n">e</span> <span class="ow">in</span> <span class="n">exit_aliases</span><span class="p">]))</span>
|
|
<span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Created new Exit '</span><span class="si">%s</span><span class="s2">' from </span><span class="si">%s</span><span class="s2"> to </span><span class="si">%s%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">exit_name</span><span class="p">,</span>
|
|
<span class="n">location</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">destination</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">string</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Error: Exit '</span><span class="si">%s</span><span class="s2">' not created."</span> <span class="o">%</span> <span class="n">exit_name</span>
|
|
<span class="c1"># emit results</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">exit_obj</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdOpen.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdOpen.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This is where the processing starts.</span>
|
|
<span class="sd"> Uses the ObjManipCommand.parser() for pre-processing</span>
|
|
<span class="sd"> as well as the self.create_exit() method.</span>
|
|
<span class="sd"> """</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: open <new exit>[;alias...][:typeclass][,<return exit>[;alias..][:typeclass]]] "</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"= <destination>"</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># We must have a location to open an exit</span>
|
|
<span class="n">location</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">location</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">"You cannot create an exit from a None-location."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># obtain needed info from cmdline</span>
|
|
|
|
<span class="n">exit_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">exit_aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"aliases"</span><span class="p">]</span>
|
|
<span class="n">exit_typeclass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"option"</span><span class="p">]</span>
|
|
<span class="n">dest_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
|
|
<span class="c1"># first, check so the destination exists.</span>
|
|
<span class="n">destination</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">dest_name</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">destination</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># Create exit</span>
|
|
<span class="n">ok</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">create_exit</span><span class="p">(</span><span class="n">exit_name</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">exit_aliases</span><span class="p">,</span> <span class="n">exit_typeclass</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span>
|
|
<span class="c1"># an error; the exit was not created, so we quit.</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># Create back exit, if any</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">back_exit_name</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">back_exit_aliases</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"aliases"</span><span class="p">]</span>
|
|
<span class="n">back_exit_typeclass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objs</span><span class="p">[</span><span class="mi">1</span><span class="p">][</span><span class="s2">"option"</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">create_exit</span><span class="p">(</span>
|
|
<span class="n">back_exit_name</span><span class="p">,</span> <span class="n">destination</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">back_exit_aliases</span><span class="p">,</span> <span class="n">back_exit_typeclass</span>
|
|
<span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="k">def</span> <span class="nf">_convert_from_string</span><span class="p">(</span><span class="n">cmd</span><span class="p">,</span> <span class="n">strobj</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Converts a single object in *string form* to its equivalent python</span>
|
|
<span class="sd"> type.</span>
|
|
|
|
<span class="sd"> Python earlier than 2.6:</span>
|
|
<span class="sd"> Handles floats, ints, and limited nested lists and dicts</span>
|
|
<span class="sd"> (can't handle lists in a dict, for example, this is mainly due to</span>
|
|
<span class="sd"> the complexity of parsing this rather than any technical difficulty -</span>
|
|
<span class="sd"> if there is a need for set-ing such complex structures on the</span>
|
|
<span class="sd"> command line we might consider adding it).</span>
|
|
<span class="sd"> Python 2.6 and later:</span>
|
|
<span class="sd"> Supports all Python structures through literal_eval as long as they</span>
|
|
<span class="sd"> are valid Python syntax. If they are not (such as [test, test2], ie</span>
|
|
<span class="sd"> without the quotes around the strings), the entire structure will</span>
|
|
<span class="sd"> be converted to a string and a warning will be given.</span>
|
|
|
|
<span class="sd"> We need to convert like this since all data being sent over the</span>
|
|
<span class="sd"> telnet connection by the Account is text - but we will want to</span>
|
|
<span class="sd"> store it as the "real" python type so we can do convenient</span>
|
|
<span class="sd"> comparisons later (e.g. obj.db.value = 2, if value is stored as a</span>
|
|
<span class="sd"> string this will always fail).</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="c1"># Use literal_eval to parse python structure exactly.</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">_LITERAL_EVAL</span><span class="p">(</span><span class="n">strobj</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">SyntaxError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">):</span>
|
|
<span class="c1"># treat as string</span>
|
|
<span class="n">strobj</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">strobj</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s1">'|RNote: name "|r</span><span class="si">%s</span><span class="s1">|R" was converted to a string. '</span>
|
|
<span class="s2">"Make sure this is acceptable."</span> <span class="o">%</span> <span class="n">strobj</span>
|
|
<span class="p">)</span>
|
|
<span class="n">cmd</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">strobj</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"|RUnknown error in evaluating Attribute: </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">string</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute">[docs]</a><span class="k">class</span> <span class="nc">CmdSetAttribute</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> set attribute on an object or account</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> set <obj>/<attr> = <value></span>
|
|
<span class="sd"> set <obj>/<attr> =</span>
|
|
<span class="sd"> set <obj>/<attr></span>
|
|
<span class="sd"> set *<account>/<attr> = <value></span>
|
|
|
|
<span class="sd"> Switch:</span>
|
|
<span class="sd"> edit: Open the line editor (string values only)</span>
|
|
<span class="sd"> script: If we're trying to set an attribute on a script</span>
|
|
<span class="sd"> channel: If we're trying to set an attribute on a channel</span>
|
|
<span class="sd"> account: If we're trying to set an attribute on an account</span>
|
|
<span class="sd"> room: Setting an attribute on a room (global search)</span>
|
|
<span class="sd"> exit: Setting an attribute on an exit (global search)</span>
|
|
<span class="sd"> char: Setting an attribute on a character (global search)</span>
|
|
<span class="sd"> character: Alias for char, as above.</span>
|
|
|
|
<span class="sd"> Sets attributes on objects. The second example form above clears a</span>
|
|
<span class="sd"> previously set attribute while the third form inspects the current value of</span>
|
|
<span class="sd"> the attribute (if any). The last one (with the star) is a shortcut for</span>
|
|
<span class="sd"> operating on a player Account rather than an Object.</span>
|
|
|
|
<span class="sd"> The most common data to save with this command are strings and</span>
|
|
<span class="sd"> numbers. You can however also set Python primitives such as lists,</span>
|
|
<span class="sd"> dictionaries and tuples on objects (this might be important for</span>
|
|
<span class="sd"> the functionality of certain custom objects). This is indicated</span>
|
|
<span class="sd"> by you starting your value with one of |c'|n, |c"|n, |c(|n, |c[|n</span>
|
|
<span class="sd"> or |c{ |n.</span>
|
|
|
|
<span class="sd"> Once you have stored a Python primitive as noted above, you can include</span>
|
|
<span class="sd"> |c[<key>]|n in <attr> to reference nested values in e.g. a list or dict.</span>
|
|
|
|
<span class="sd"> Remember that if you use Python primitives like this, you must</span>
|
|
<span class="sd"> write proper Python syntax too - notably you must include quotes</span>
|
|
<span class="sd"> around your strings or you will get an error.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"set"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(set) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
<span class="n">nested_re</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">compile</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\[.*?\]"</span><span class="p">)</span>
|
|
<span class="n">not_found</span> <span class="o">=</span> <span class="nb">object</span><span class="p">()</span>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.check_obj"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.check_obj">[docs]</a> <span class="k">def</span> <span class="nf">check_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="sd">"""</span>
|
|
<span class="sd"> This may be overridden by subclasses in case restrictions need to be</span>
|
|
<span class="sd"> placed on whether certain objects can have attributes set by certain</span>
|
|
<span class="sd"> accounts.</span>
|
|
|
|
<span class="sd"> This function is expected to display its own error message.</span>
|
|
|
|
<span class="sd"> Returning False will abort the command.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="kc">True</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.check_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.check_attr">[docs]</a> <span class="k">def</span> <span class="nf">check_attr</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">attr_name</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> This may be overridden by subclasses in case restrictions need to be</span>
|
|
<span class="sd"> placed on what attributes can be set by who beyond the normal lock.</span>
|
|
|
|
<span class="sd"> This functions is expected to display its own error message. It is</span>
|
|
<span class="sd"> run once for every attribute that is checked, blocking only those</span>
|
|
<span class="sd"> attributes which are not permitted and letting the others through.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">attr_name</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.split_nested_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.split_nested_attr">[docs]</a> <span class="k">def</span> <span class="nf">split_nested_attr</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Yields tuples of (possible attr name, nested keys on that attr).</span>
|
|
<span class="sd"> For performance, this is biased to the deepest match, but allows compatability</span>
|
|
<span class="sd"> with older attrs that might have been named with `[]`'s.</span>
|
|
|
|
<span class="sd"> > list(split_nested_attr("nested['asdf'][0]"))</span>
|
|
<span class="sd"> [</span>
|
|
<span class="sd"> ('nested', ['asdf', 0]),</span>
|
|
<span class="sd"> ("nested['asdf']", [0]),</span>
|
|
<span class="sd"> ("nested['asdf'][0]", []),</span>
|
|
<span class="sd"> ]</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">quotes</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\"</span><span class="s2">'"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">clean_key</span><span class="p">(</span><span class="n">val</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="n">val</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"[]"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">val</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="ow">in</span> <span class="n">quotes</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="n">quotes</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">val</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">LIST_APPEND_CHAR</span><span class="p">:</span>
|
|
<span class="c1"># List insert/append syntax</span>
|
|
<span class="k">return</span> <span class="n">val</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="nb">int</span><span class="p">(</span><span class="n">val</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">val</span>
|
|
|
|
<span class="n">parts</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">nested_re</span><span class="o">.</span><span class="n">findall</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
|
|
|
<span class="n">base_attr</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">parts</span><span class="p">:</span>
|
|
<span class="n">base_attr</span> <span class="o">=</span> <span class="n">attr</span><span class="p">[:</span> <span class="n">attr</span><span class="o">.</span><span class="n">find</span><span class="p">(</span><span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">])]</span>
|
|
<span class="k">for</span> <span class="n">index</span><span class="p">,</span> <span class="n">part</span> <span class="ow">in</span> <span class="nb">enumerate</span><span class="p">(</span><span class="n">parts</span><span class="p">):</span>
|
|
<span class="k">yield</span> <span class="p">(</span><span class="n">base_attr</span><span class="p">,</span> <span class="p">[</span><span class="n">clean_key</span><span class="p">(</span><span class="n">p</span><span class="p">)</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="n">parts</span><span class="p">[</span><span class="n">index</span><span class="p">:]])</span>
|
|
<span class="n">base_attr</span> <span class="o">+=</span> <span class="n">part</span>
|
|
<span class="k">yield</span> <span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="p">[])</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.do_nested_lookup"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.do_nested_lookup">[docs]</a> <span class="k">def</span> <span class="nf">do_nested_lookup</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="o">*</span><span class="n">keys</span><span class="p">):</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">value</span>
|
|
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">keys</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">not_found</span>
|
|
<span class="k">return</span> <span class="n">result</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.view_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.view_attr">[docs]</a> <span class="k">def</span> <span class="nf">view_attr</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">attr</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Look up the value of an attribute and return a string displaying it.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">nested</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">nested_keys</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">split_nested_attr</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
|
|
<span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">do_nested_lookup</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="o">*</span><span class="n">nested_keys</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">val</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">not_found</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Attribute </span><span class="si">%s</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">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">val</span><span class="p">)</span>
|
|
<span class="n">error</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</span><span class="s2"> has no attribute '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">nested</span><span class="p">:</span>
|
|
<span class="n">error</span> <span class="o">+=</span> <span class="s2">" (Nested lookups attempted)"</span>
|
|
<span class="k">return</span> <span class="n">error</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.rm_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.rm_attr">[docs]</a> <span class="k">def</span> <span class="nf">rm_attr</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">attr</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Remove an attribute from the object, or a nested data structure, and report back.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">nested</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">nested_keys</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">split_nested_attr</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
|
|
<span class="n">nested</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">key</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">nested_keys</span><span class="p">:</span>
|
|
<span class="n">del_key</span> <span class="o">=</span> <span class="n">nested_keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">val</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="n">deep</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">do_nested_lookup</span><span class="p">(</span><span class="n">val</span><span class="p">,</span> <span class="o">*</span><span class="n">nested_keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="n">deep</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">not_found</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">del</span> <span class="n">deep</span><span class="p">[</span><span class="n">del_key</span><span class="p">]</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">IndexError</span><span class="p">,</span> <span class="ne">KeyError</span><span class="p">,</span> <span class="ne">TypeError</span><span class="p">):</span>
|
|
<span class="k">continue</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Deleted attribute '</span><span class="si">%s</span><span class="s2">' (= nested) from </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">exists</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Deleted attribute '</span><span class="si">%s</span><span class="s2">' (= </span><span class="si">%s</span><span class="s2">) from </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">exists</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">)</span>
|
|
<span class="n">error</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</span><span class="s2"> has no attribute '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">nested</span><span class="p">:</span>
|
|
<span class="n">error</span> <span class="o">+=</span> <span class="s2">" (Nested lookups attempted)"</span>
|
|
<span class="k">return</span> <span class="n">error</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.set_attr"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.set_attr">[docs]</a> <span class="k">def</span> <span class="nf">set_attr</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">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="n">done</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">nested_keys</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">split_nested_attr</span><span class="p">(</span><span class="n">attr</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">key</span><span class="p">)</span> <span class="ow">and</span> <span class="n">nested_keys</span><span class="p">:</span>
|
|
<span class="n">acc_key</span> <span class="o">=</span> <span class="n">nested_keys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">lookup_value</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="n">deep</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">do_nested_lookup</span><span class="p">(</span><span class="n">lookup_value</span><span class="p">,</span> <span class="o">*</span><span class="n">nested_keys</span><span class="p">[:</span><span class="o">-</span><span class="mi">1</span><span class="p">])</span>
|
|
<span class="k">if</span> <span class="n">deep</span> <span class="ow">is</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">not_found</span><span class="p">:</span>
|
|
<span class="c1"># To support appending and inserting to lists</span>
|
|
<span class="c1"># a key that starts with LIST_APPEND_CHAR will insert a new item at that</span>
|
|
<span class="c1"># location, and move the other elements down.</span>
|
|
<span class="c1"># Using LIST_APPEND_CHAR alone will append to the list</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">acc_key</span><span class="p">,</span> <span class="nb">str</span><span class="p">)</span> <span class="ow">and</span> <span class="n">acc_key</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="o">==</span> <span class="n">LIST_APPEND_CHAR</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">acc_key</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">where</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">acc_key</span><span class="p">[</span><span class="mi">1</span><span class="p">:])</span>
|
|
<span class="n">deep</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="n">where</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">deep</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">ValueError</span><span class="p">,</span> <span class="ne">AttributeError</span><span class="p">):</span>
|
|
<span class="k">pass</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">lookup_value</span>
|
|
<span class="n">attr</span> <span class="o">=</span> <span class="n">key</span>
|
|
<span class="n">done</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">break</span>
|
|
|
|
<span class="c1"># List magic failed, just use like a key/index</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">deep</span><span class="p">[</span><span class="n">acc_key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span>
|
|
<span class="k">except</span> <span class="ne">TypeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|
<span class="c1"># Tuples can't be modified</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</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">err</span><span class="p">,</span> <span class="n">deep</span><span class="p">)</span>
|
|
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">lookup_value</span>
|
|
<span class="n">attr</span> <span class="o">=</span> <span class="n">key</span>
|
|
<span class="n">done</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">break</span>
|
|
|
|
<span class="n">verb</span> <span class="o">=</span> <span class="s2">"Modified"</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span> <span class="k">else</span> <span class="s2">"Created"</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">done</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="si">%s</span><span class="s2"> attribute </span><span class="si">%s</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">verb</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="nb">repr</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
|
|
<span class="k">except</span> <span class="ne">SyntaxError</span><span class="p">:</span>
|
|
<span class="c1"># this means literal_eval tried to parse a faulty string</span>
|
|
<span class="k">return</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">|RCritical Python syntax error in your value. Only "</span>
|
|
<span class="s2">"primitive Python structures are allowed.</span><span class="se">\n</span><span class="s2">You also "</span>
|
|
<span class="s2">"need to use correct Python syntax. Remember especially "</span>
|
|
<span class="s2">"to put quotes around all strings inside lists and "</span>
|
|
<span class="s2">"dicts.|n"</span>
|
|
<span class="p">)</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.edit_handler"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.edit_handler">[docs]</a> <span class="k">def</span> <span class="nf">edit_handler</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">attr</span><span class="p">):</span>
|
|
<span class="sd">"""Activate the line editor"""</span>
|
|
|
|
<span class="k">def</span> <span class="nf">load</span><span class="p">(</span><span class="n">caller</span><span class="p">):</span>
|
|
<span class="sd">"""Called for the editor to load the buffer"""</span>
|
|
<span class="n">old_value</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">attr</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">old_value</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">old_value</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="n">typ</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="n">old_value</span><span class="p">)</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"|RWARNING! Saving this buffer will overwrite the "</span>
|
|
<span class="s2">"current attribute (of type </span><span class="si">%s</span><span class="s2">) with a string!|n"</span> <span class="o">%</span> <span class="n">typ</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="nb">str</span><span class="p">(</span><span class="n">old_value</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">old_value</span>
|
|
|
|
<span class="k">def</span> <span class="nf">save</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">buf</span><span class="p">):</span>
|
|
<span class="sd">"""Called when editor saves its buffer."""</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">attr</span><span class="p">,</span> <span class="n">buf</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">"Saved Attribute </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">attr</span><span class="p">)</span>
|
|
|
|
<span class="c1"># start the editor</span>
|
|
<span class="n">EvEditor</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">load</span><span class="p">,</span> <span class="n">save</span><span class="p">,</span> <span class="n">key</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">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.search_for_obj"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.search_for_obj">[docs]</a> <span class="k">def</span> <span class="nf">search_for_obj</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">objname</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Searches for an object matching objname. The object may be of different typeclasses.</span>
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> objname: Name of the object we're looking for</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> A typeclassed object, or None if nothing is found.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.utils</span> <span class="k">import</span> <span class="n">variable_from_module</span>
|
|
|
|
<span class="n">_AT_SEARCH_RESULT</span> <span class="o">=</span> <span class="n">variable_from_module</span><span class="p">(</span><span class="o">*</span><span class="n">settings</span><span class="o">.</span><span class="n">SEARCH_AT_RESULT</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">"."</span><span class="p">,</span> <span class="mi">1</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="k">if</span> <span class="n">objname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span> <span class="ow">or</span> <span class="s2">"account"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">found_obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">objname</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="s2">"script"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">found_obj</span> <span class="o">=</span> <span class="n">_AT_SEARCH_RESULT</span><span class="p">(</span><span class="n">search</span><span class="o">.</span><span class="n">search_script</span><span class="p">(</span><span class="n">objname</span><span class="p">),</span> <span class="n">caller</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="s2">"channel"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">found_obj</span> <span class="o">=</span> <span class="n">_AT_SEARCH_RESULT</span><span class="p">(</span><span class="n">search</span><span class="o">.</span><span class="n">search_channel</span><span class="p">(</span><span class="n">objname</span><span class="p">),</span> <span class="n">caller</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">global_search</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="s2">"char"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="s2">"character"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_CHARACTER_TYPECLASS</span>
|
|
<span class="k">elif</span> <span class="s2">"room"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_ROOM_TYPECLASS</span>
|
|
<span class="k">elif</span> <span class="s2">"exit"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">BASE_EXIT_TYPECLASS</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">global_search</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">typeclass</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">found_obj</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">objname</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="n">global_search</span><span class="p">,</span> <span class="n">typeclass</span><span class="o">=</span><span class="n">typeclass</span><span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">found_obj</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdSetAttribute.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSetAttribute.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Implement the set attribute - a limited form of py."""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"Usage: set obj/attr = value. Use empty value to clear."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># get values prepared by the parser</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">objname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">attrs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"attrs"</span><span class="p">]</span>
|
|
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">search_for_obj</span><span class="p">(</span><span class="n">objname</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_obj</span><span class="p">(</span><span class="n">obj</span><span class="p">):</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="s2">"edit"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># edit in the line editor</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You don't have permission to edit </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">attrs</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</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">"The Line editor can only be applied "</span> <span class="s2">"to one attribute at a time."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">edit_handler</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attrs</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="ow">not</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">rhs</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="c1"># no = means we inspect the attribute(s)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">attrs</span><span class="p">:</span>
|
|
<span class="n">attrs</span> <span class="o">=</span> <span class="p">[</span><span class="n">attr</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">all</span><span class="p">()]</span>
|
|
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">view_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span>
|
|
<span class="c1"># we view it without parsing markup.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(),</span> <span class="n">options</span><span class="o">=</span><span class="p">{</span><span class="s2">"raw"</span><span class="p">:</span> <span class="kc">True</span><span class="p">})</span>
|
|
<span class="k">return</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># deleting the attribute(s)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You don't have permission to edit </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rm_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># setting attribute(s). Make sure to convert to real Python type before saving.</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You don't have permission to edit </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">key</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">check_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">):</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">_convert_from_string</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">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">set_attr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">))</span>
|
|
<span class="c1"># send feedback</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdTypeclass"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTypeclass">[docs]</a><span class="k">class</span> <span class="nc">CmdTypeclass</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> set or change an object's typeclass</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> typeclass[/switch] <object> [= typeclass.path]</span>
|
|
<span class="sd"> typeclass/prototype <object> = prototype_key</span>
|
|
|
|
<span class="sd"> typeclass/list/show [typeclass.path]</span>
|
|
<span class="sd"> swap - this is a shorthand for using /force/reset flags.</span>
|
|
<span class="sd"> update - this is a shorthand for using the /force/reload flag.</span>
|
|
|
|
<span class="sd"> Switch:</span>
|
|
<span class="sd"> show, examine - display the current typeclass of object (default) or, if</span>
|
|
<span class="sd"> given a typeclass path, show the docstring of that typeclass.</span>
|
|
<span class="sd"> update - *only* re-run at_object_creation on this object</span>
|
|
<span class="sd"> meaning locks or other properties set later may remain.</span>
|
|
<span class="sd"> reset - clean out *all* the attributes and properties on the</span>
|
|
<span class="sd"> object - basically making this a new clean object.</span>
|
|
<span class="sd"> force - change to the typeclass also if the object</span>
|
|
<span class="sd"> already has a typeclass of the same name.</span>
|
|
<span class="sd"> list - show available typeclasses. Only typeclasses in modules actually</span>
|
|
<span class="sd"> imported or used from somewhere in the code will show up here</span>
|
|
<span class="sd"> (those typeclasses are still available if you know the path)</span>
|
|
<span class="sd"> prototype - clean and overwrite the object with the specified</span>
|
|
<span class="sd"> prototype key - effectively making a whole new object.</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> type button = examples.red_button.RedButton</span>
|
|
<span class="sd"> type/prototype button=a red button</span>
|
|
|
|
<span class="sd"> If the typeclass_path is not given, the current object's typeclass is</span>
|
|
<span class="sd"> assumed.</span>
|
|
|
|
<span class="sd"> View or set an object's typeclass. If setting, the creation hooks of the</span>
|
|
<span class="sd"> new typeclass will be run on the object. If you have clashing properties on</span>
|
|
<span class="sd"> the old class, use /reset. By default you are protected from changing to a</span>
|
|
<span class="sd"> typeclass of the same name as the one you already have - use /force to</span>
|
|
<span class="sd"> override this protection.</span>
|
|
|
|
<span class="sd"> The given typeclass must be identified by its location using python</span>
|
|
<span class="sd"> dot-notation pointing to the correct module and class. If no typeclass is</span>
|
|
<span class="sd"> given (or a wrong typeclass is given). Errors in the path or new typeclass</span>
|
|
<span class="sd"> will lead to the old typeclass being kept. The location of the typeclass</span>
|
|
<span class="sd"> module is searched from the default typeclass directory, as defined in the</span>
|
|
<span class="sd"> server settings.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"typeclass"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"type"</span><span class="p">,</span> <span class="s2">"parent"</span><span class="p">,</span> <span class="s2">"swap"</span><span class="p">,</span> <span class="s2">"update"</span><span class="p">]</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"show"</span><span class="p">,</span> <span class="s2">"examine"</span><span class="p">,</span> <span class="s2">"update"</span><span class="p">,</span> <span class="s2">"reset"</span><span class="p">,</span> <span class="s2">"force"</span><span class="p">,</span> <span class="s2">"list"</span><span class="p">,</span> <span class="s2">"prototype"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(typeclass) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdTypeclass.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTypeclass.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Implements command"""</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="k">if</span> <span class="s2">"list"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">tclasses</span> <span class="o">=</span> <span class="n">get_all_typeclasses</span><span class="p">()</span>
|
|
<span class="n">contribs</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tclasses</span><span class="p">)</span> <span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"evennia.contrib"</span><span class="p">)]</span> <span class="ow">or</span> <span class="p">[</span>
|
|
<span class="s2">"<None loaded>"</span>
|
|
<span class="p">]</span>
|
|
<span class="n">core</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tclasses</span><span class="p">)</span> <span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"evennia"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">key</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">contribs</span>
|
|
<span class="p">]</span> <span class="ow">or</span> <span class="p">[</span><span class="s2">"<None loaded>"</span><span class="p">]</span>
|
|
<span class="n">game</span> <span class="o">=</span> <span class="p">[</span><span class="n">key</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">tclasses</span><span class="p">)</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">key</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"evennia"</span><span class="p">)]</span> <span class="ow">or</span> <span class="p">[</span>
|
|
<span class="s2">"<None loaded>"</span>
|
|
<span class="p">]</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"|wCore typeclasses|n</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="s2">" </span><span class="si">{core}</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="s2">"|wLoaded Contrib typeclasses|n</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="s2">" </span><span class="si">{contrib}</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="s2">"|wGame-dir typeclasses|n</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="s2">" </span><span class="si">{game}</span><span class="s2">"</span>
|
|
<span class="p">)</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">core</span><span class="o">=</span><span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">core</span><span class="p">),</span> <span class="n">contrib</span><span class="o">=</span><span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">contribs</span><span class="p">),</span> <span class="n">game</span><span class="o">=</span><span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">game</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">EvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">string</span><span class="p">,</span> <span class="n">exit_on_lastpage</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"Usage: </span><span class="si">%s</span><span class="s2"> <object> [= typeclass]"</span> <span class="o">%</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"show"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="s2">"examine"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">oquery</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">obj</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">oquery</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="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="c1"># no object found to examine, see if it's a typeclass-path instead</span>
|
|
<span class="n">tclasses</span> <span class="o">=</span> <span class="n">get_all_typeclasses</span><span class="p">()</span>
|
|
<span class="n">matches</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">tclass</span><span class="p">)</span> <span class="k">for</span> <span class="n">key</span><span class="p">,</span> <span class="n">tclass</span> <span class="ow">in</span> <span class="n">tclasses</span><span class="o">.</span><span class="n">items</span><span class="p">()</span> <span class="k">if</span> <span class="n">key</span><span class="o">.</span><span class="n">endswith</span><span class="p">(</span><span class="n">oquery</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="n">nmatches</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">matches</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">nmatches</span> <span class="o">></span> <span class="mi">1</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">"Multiple typeclasses found matching </span><span class="si">{}</span><span class="s2">:</span><span class="se">\n</span><span class="s2"> </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">oquery</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">matches</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">matches</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">"No object or typeclass path found to match '</span><span class="si">{}</span><span class="s2">'"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">oquery</span><span class="p">))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># one match found</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"Docstring for typeclass '</span><span class="si">{}</span><span class="s2">':</span><span class="se">\n</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">oquery</span><span class="p">,</span> <span class="n">matches</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="mi">1</span><span class="p">]</span><span class="o">.</span><span class="vm">__doc__</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># do the search again to get the error handling in case of multi-match</span>
|
|
<span class="n">obj</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">oquery</span><span class="p">)</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="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="si">{}</span><span class="s2">'s current typeclass is '</span><span class="si">{}</span><span class="s2">.</span><span class="si">{}</span><span class="s2">'"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__module__</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="vm">__class__</span><span class="o">.</span><span class="vm">__name__</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># get object to swap on</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</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="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> is not a typed object."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">new_typeclass</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">path</span>
|
|
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">"prototype"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</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="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">prototype</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</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">"More than one match for </span><span class="si">{}</span><span class="s2">:</span><span class="se">\n</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">key</span><span class="p">,</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">proto</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prototype_key"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> <span class="k">for</span> <span class="n">proto</span> <span class="ow">in</span> <span class="n">prototype</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="n">prototype</span><span class="p">:</span>
|
|
<span class="c1"># one match</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># no match</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"No prototype '</span><span class="si">{}</span><span class="s2">' was found."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">key</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="n">new_typeclass</span> <span class="o">=</span> <span class="n">prototype</span><span class="p">[</span><span class="s2">"typeclass"</span><span class="p">]</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"force"</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"show"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="s2">"examine"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2">'s current typeclass is </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="vm">__class__</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="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span> <span class="o">==</span> <span class="s2">"swap"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"force"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"reset"</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span> <span class="o">==</span> <span class="s2">"update"</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"force"</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"update"</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="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You are not allowed to do that."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"swap_typeclass"</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">"This object cannot have a type at all!"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">is_same</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">is_typeclass</span><span class="p">(</span><span class="n">new_typeclass</span><span class="p">,</span> <span class="n">exact</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">is_same</span> <span class="ow">and</span> <span class="s2">"force"</span> <span class="ow">not</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> already has the typeclass '</span><span class="si">%s</span><span class="s2">'. Use /force to override."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">new_typeclass</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">update</span> <span class="o">=</span> <span class="s2">"update"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="n">reset</span> <span class="o">=</span> <span class="s2">"reset"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="n">hooks</span> <span class="o">=</span> <span class="s2">"at_object_creation"</span> <span class="k">if</span> <span class="n">update</span> <span class="k">else</span> <span class="s2">"all"</span>
|
|
<span class="n">old_typeclass_path</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span>
|
|
|
|
<span class="c1"># special prompt for the user in cases where we want</span>
|
|
<span class="c1"># to confirm changes.</span>
|
|
<span class="k">if</span> <span class="s2">"prototype"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">diff</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">prototype_diff_from_object</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">obj</span><span class="p">)</span>
|
|
<span class="n">txt</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">format_diff</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span>
|
|
<span class="n">prompt</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"Applying prototype '</span><span class="si">%s</span><span class="s2">' over '</span><span class="si">%s</span><span class="s2">' will cause the follow changes:</span><span class="se">\n</span><span class="si">%s</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">prototype</span><span class="p">[</span><span class="s2">"key"</span><span class="p">],</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">txt</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">reset</span><span class="p">:</span>
|
|
<span class="n">prompt</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">|yWARNING:|n Use the /reset switch to apply the prototype over a blank state."</span>
|
|
<span class="n">prompt</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Are you sure you want to apply these changes [yes]/no?"</span>
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="n">prompt</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">answer</span> <span class="ow">and</span> <span class="n">answer</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"no"</span><span class="p">,</span> <span class="s2">"n"</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">"Canceled: No changes were applied."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># we let this raise exception if needed</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">swap_typeclass</span><span class="p">(</span>
|
|
<span class="n">new_typeclass</span><span class="p">,</span> <span class="n">clean_attributes</span><span class="o">=</span><span class="n">reset</span><span class="p">,</span> <span class="n">clean_cmdsets</span><span class="o">=</span><span class="n">reset</span><span class="p">,</span> <span class="n">run_start_hooks</span><span class="o">=</span><span class="n">hooks</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"prototype"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">modified</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="p">[</span><span class="n">obj</span><span class="p">])</span>
|
|
<span class="n">prototype_success</span> <span class="o">=</span> <span class="n">modified</span> <span class="o">></span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_success</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">"Prototype </span><span class="si">%s</span><span class="s2"> failed to apply."</span> <span class="o">%</span> <span class="n">prototype</span><span class="p">[</span><span class="s2">"key"</span><span class="p">])</span>
|
|
|
|
<span class="k">if</span> <span class="n">is_same</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> updated its existing typeclass (</span><span class="si">%s</span><span class="s2">).</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> changed typeclass from </span><span class="si">%s</span><span class="s2"> to </span><span class="si">%s</span><span class="s2">.</span><span class="se">\n</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
|
|
<span class="n">old_typeclass_path</span><span class="p">,</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">typeclass_path</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">update</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"Only the at_object_creation hook was run (update mode)."</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"All object creation hooks were run."</span>
|
|
<span class="k">if</span> <span class="n">reset</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" All old attributes where deleted before the swap."</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" Attributes set before swap were not removed."</span>
|
|
<span class="k">if</span> <span class="s2">"prototype"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">and</span> <span class="n">prototype_success</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="p">(</span>
|
|
<span class="s2">" Prototype '</span><span class="si">%s</span><span class="s2">' was successfully applied over the object type."</span>
|
|
<span class="o">%</span> <span class="n">prototype</span><span class="p">[</span><span class="s2">"key"</span><span class="p">]</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="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdWipe"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdWipe">[docs]</a><span class="k">class</span> <span class="nc">CmdWipe</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> clear all attributes from an object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> wipe <object>[/<attr>[/<attr>...]]</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> wipe box</span>
|
|
<span class="sd"> wipe box/colour</span>
|
|
|
|
<span class="sd"> Wipes all of an object's attributes, or optionally only those</span>
|
|
<span class="sd"> matching the given attribute-wildcard search string.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"wipe"</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(wipe) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdWipe.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdWipe.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> inp is the dict produced in ObjManipCommand.parse()</span>
|
|
<span class="sd"> """</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"Usage: wipe <object>[/<attr>/<attr>...]"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># get the attributes set by our custom parser</span>
|
|
<span class="n">objname</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">attrs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"attrs"</span><span class="p">]</span>
|
|
|
|
<span class="n">obj</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">objname</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You are not allowed to do that."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">attrs</span><span class="p">:</span>
|
|
<span class="c1"># wipe everything</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Wiped all attributes on </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">attrname</span> <span class="ow">in</span> <span class="n">attrs</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">attrname</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Wiped attributes </span><span class="si">%s</span><span class="s2"> on </span><span class="si">%s</span><span class="s2">."</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">string</span> <span class="o">%</span> <span class="p">(</span><span class="s2">","</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">attrs</span><span class="p">),</span> <span class="n">obj</span><span class="o">.</span><span class="n">name</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="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdLock"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdLock">[docs]</a><span class="k">class</span> <span class="nc">CmdLock</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> assign a lock definition to an object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> lock <object or *account>[ = <lockstring>]</span>
|
|
<span class="sd"> or</span>
|
|
<span class="sd"> lock[/switch] <object or *account>/<access_type></span>
|
|
|
|
<span class="sd"> Switch:</span>
|
|
<span class="sd"> del - delete given access type</span>
|
|
<span class="sd"> view - view lock associated with given access type (default)</span>
|
|
|
|
<span class="sd"> If no lockstring is given, shows all locks on</span>
|
|
<span class="sd"> object.</span>
|
|
|
|
<span class="sd"> Lockstring is of the form</span>
|
|
<span class="sd"> access_type:[NOT] func1(args)[ AND|OR][ NOT] func2(args) ...]</span>
|
|
<span class="sd"> Where func1, func2 ... valid lockfuncs with or without arguments.</span>
|
|
<span class="sd"> Separator expressions need not be capitalized.</span>
|
|
|
|
<span class="sd"> For example:</span>
|
|
<span class="sd"> 'get: id(25) or perm(Admin)'</span>
|
|
<span class="sd"> The 'get' lock access_type is checked e.g. by the 'get' command.</span>
|
|
<span class="sd"> An object locked with this example lock will only be possible to pick up</span>
|
|
<span class="sd"> by Admins or by an object with id=25.</span>
|
|
|
|
<span class="sd"> You can add several access_types after one another by separating</span>
|
|
<span class="sd"> them by ';', i.e:</span>
|
|
<span class="sd"> 'get:id(25); delete:perm(Builder)'</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"lock"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"locks"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd: perm(locks) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdLock.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdLock.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Sets up the command"""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"Usage: lock <object>[ = <lockstring>] or lock[/switch] "</span> <span class="s2">"<object>/<access_type>"</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="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"/"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
|
|
<span class="c1"># call of the form lock obj/access_type</span>
|
|
<span class="n">objname</span><span class="p">,</span> <span class="n">access_type</span> <span class="o">=</span> <span class="p">[</span><span class="n">p</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">p</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"/"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="n">objname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">):</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">objname</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="n">obj</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">objname</span><span class="p">)</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="n">has_control_access</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">access_type</span> <span class="o">==</span> <span class="s2">"control"</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">has_control_access</span><span class="p">:</span>
|
|
<span class="c1"># only allow to change 'control' access if you have 'control' access already</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You need 'control' access to change this type of lock."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">has_control_access</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You are not allowed to do that."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">lockdef</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">access_type</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">lockdef</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="s2">"del"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">delete</span><span class="p">(</span><span class="n">access_type</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"deleted lock </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="n">lockdef</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">lockdef</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"</span><span class="si">%s</span><span class="s2"> has no lock of access type '</span><span class="si">%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">access_type</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="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># we have a = separator, so we are assigning a new lock</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">swi</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">switches</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">"Switch(es) |w</span><span class="si">%s</span><span class="s2">|n can not be used with a "</span>
|
|
<span class="s2">"lock assignment. Use e.g. "</span>
|
|
<span class="s2">"|wlock/del objname/locktype|n instead."</span> <span class="o">%</span> <span class="n">swi</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">objname</span><span class="p">,</span> <span class="n">lockdef</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="n">objname</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">):</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">objname</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="n">obj</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">objname</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You are not allowed to do that."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">ok</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">lockdef</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">sub</span><span class="p">(</span><span class="sa">r</span><span class="s2">"\'|</span><span class="se">\"</span><span class="s2">"</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="n">lockdef</span><span class="p">)</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">ok</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">lockdef</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">LockException</span> <span class="k">as</span> <span class="n">e</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="nb">str</span><span class="p">(</span><span class="n">e</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="s2">"cmd"</span> <span class="ow">in</span> <span class="n">lockdef</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">and</span> <span class="n">inherits_from</span><span class="p">(</span>
|
|
<span class="n">obj</span><span class="p">,</span> <span class="s2">"evennia.objects.objects.DefaultExit"</span>
|
|
<span class="p">):</span>
|
|
<span class="c1"># special fix to update Exits since "cmd"-type locks won't</span>
|
|
<span class="c1"># update on them unless their cmdsets are rebuilt.</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">at_init</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">ok</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">"Added lock '</span><span class="si">%s</span><span class="s2">' to </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">lockdef</span><span class="p">,</span> <span class="n">obj</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># if we get here, we are just viewing all locks on obj</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">):</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">)</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="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"control"</span><span class="p">)</span> <span class="ow">or</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"edit"</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">"You are not allowed to do that."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">all</span><span class="p">()))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdExamine"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine">[docs]</a><span class="k">class</span> <span class="nc">CmdExamine</span><span class="p">(</span><span class="n">ObjManipCommand</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> get detailed information about an object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> examine [<object>[/attrname]]</span>
|
|
<span class="sd"> examine [*<account>[/attrname]]</span>
|
|
|
|
<span class="sd"> Switch:</span>
|
|
<span class="sd"> account - examine an Account (same as adding *)</span>
|
|
<span class="sd"> object - examine an Object (useful when OOC)</span>
|
|
|
|
<span class="sd"> The examine command shows detailed game info about an</span>
|
|
<span class="sd"> object and optionally a specific attribute on it.</span>
|
|
<span class="sd"> If object is not specified, the current location is examined.</span>
|
|
|
|
<span class="sd"> Append a * before the search string to examine an account.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"examine"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"ex"</span><span class="p">,</span> <span class="s2">"exam"</span><span class="p">]</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(examine) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"(/\w+?(\s|$))|\s|$"</span>
|
|
|
|
<span class="n">account_mode</span> <span class="o">=</span> <span class="kc">False</span>
|
|
<span class="n">detail_color</span> <span class="o">=</span> <span class="s2">"|c"</span>
|
|
<span class="n">header_color</span> <span class="o">=</span> <span class="s2">"|w"</span>
|
|
<span class="n">quell_color</span> <span class="o">=</span> <span class="s2">"|r"</span>
|
|
<span class="n">separator</span> <span class="o">=</span> <span class="s2">"-"</span>
|
|
|
|
<div class="viewcode-block" id="CmdExamine.list_attribute"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.list_attribute">[docs]</a> <span class="k">def</span> <span class="nf">list_attribute</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">crop</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Formats a single attribute line.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> crop (bool): If output should be cropped if too long.</span>
|
|
<span class="sd"> attr (str): Attribute key.</span>
|
|
<span class="sd"> category (str): Attribute category.</span>
|
|
<span class="sd"> value (any): Attribute value.</span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">attr</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"No such attribute was found."</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">crop</span><span class="p">:</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">crop</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
|
|
<span class="n">value</span> <span class="o">=</span> <span class="n">inlinefunc_raw</span><span class="p">(</span><span class="n">ansi_raw</span><span class="p">(</span><span class="n">value</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="n">category</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">f</span><span class="s2">"</span><span class="si">{attr}</span><span class="s2">[</span><span class="si">{category}</span><span class="s2">] = </span><span class="si">{value}</span><span class="s2">"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">f</span><span class="s2">"</span><span class="si">{attr}</span><span class="s2"> = </span><span class="si">{value}</span><span class="s2">"</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdExamine.format_attributes"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_attributes">[docs]</a> <span class="k">def</span> <span class="nf">format_attributes</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">attrname</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">crop</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Helper function that returns info about attributes and/or</span>
|
|
<span class="sd"> non-persistent data stored on object</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="n">attrname</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="n">attrname</span><span class="p">):</span>
|
|
<span class="n">db_attr</span> <span class="o">=</span> <span class="p">[(</span><span class="n">attrname</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">attrname</span><span class="p">),</span> <span class="kc">None</span><span class="p">)]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">db_attr</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">ndb_attr</span> <span class="o">=</span> <span class="p">[(</span><span class="n">attrname</span><span class="p">,</span> <span class="nb">object</span><span class="o">.</span><span class="fm">__getattribute__</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">ndb</span><span class="p">,</span> <span class="n">attrname</span><span class="p">))]</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="n">ndb_attr</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">db_attr</span> <span class="ow">or</span> <span class="n">ndb_attr</span><span class="p">):</span>
|
|
<span class="k">return</span> <span class="p">{</span><span class="s2">"Attribue(s)"</span><span class="p">:</span> <span class="n">f</span><span class="s2">"</span><span class="se">\n</span><span class="s2"> No Attribute '</span><span class="si">{attrname}</span><span class="s2">' found on </span><span class="si">{obj.name}</span><span class="s2">"</span><span class="p">}</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">db_attr</span> <span class="o">=</span> <span class="p">[(</span><span class="n">attr</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">attr</span><span class="o">.</span><span class="n">value</span><span class="p">,</span> <span class="n">attr</span><span class="o">.</span><span class="n">category</span><span class="p">)</span> <span class="k">for</span> <span class="n">attr</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">db_attributes</span><span class="o">.</span><span class="n">all</span><span class="p">()]</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">ndb_attr</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">nattributes</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_tuples</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="n">ndb_attr</span> <span class="o">=</span> <span class="p">(</span><span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
|
|
<span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="k">if</span> <span class="n">db_attr</span> <span class="ow">and</span> <span class="n">db_attr</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Persistent attribute(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="nb">sorted</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">list_attribute</span><span class="p">(</span><span class="n">crop</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="n">category</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span><span class="p">,</span> <span class="n">category</span> <span class="ow">in</span> <span class="n">db_attr</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">ndb_attr</span> <span class="ow">and</span> <span class="n">ndb_attr</span><span class="p">[</span><span class="mi">0</span><span class="p">]:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Non-Persistent attribute(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">" </span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="s2">" </span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="nb">sorted</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">list_attribute</span><span class="p">(</span><span class="n">crop</span><span class="p">,</span> <span class="n">attr</span><span class="p">,</span> <span class="kc">None</span><span class="p">,</span> <span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">attr</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="n">ndb_attr</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">output</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdExamine.format_output"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.format_output">[docs]</a> <span class="k">def</span> <span class="nf">format_output</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">current_cmdset</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Helper function that creates a nice report about an object.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> obj (any): Object to analyze.</span>
|
|
<span class="sd"> current_cmdset (CmdSet): Current cmdset for object.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> str: The formatted string.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">hclr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">header_color</span>
|
|
<span class="n">dclr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">detail_color</span>
|
|
<span class="n">qclr</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">quell_color</span>
|
|
|
|
<span class="n">output</span> <span class="o">=</span> <span class="p">{}</span>
|
|
<span class="c1"># main key</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Name/key"</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{dclr}{obj.name}</span><span class="s2">|n (</span><span class="si">{obj.dbref}</span><span class="s2">)"</span>
|
|
<span class="c1"># aliases</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"aliases"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Aliases"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">utils</span><span class="o">.</span><span class="n">make_iter</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">aliases</span><span class="p">)))</span>
|
|
<span class="c1"># typeclass</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Typeclass"</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{obj.typename}</span><span class="s2"> (</span><span class="si">{obj.typeclass_path}</span><span class="s2">)"</span>
|
|
<span class="c1"># sessions</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"sessions"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Session id(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">f</span><span class="s2">"#</span><span class="si">{sess.sessid}</span><span class="s2">"</span> <span class="k">for</span> <span class="n">sess</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">())</span>
|
|
<span class="c1"># email, if any</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"email"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">email</span><span class="p">:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Email"</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{dclr}{obj.email}</span><span class="s2">|n"</span>
|
|
<span class="c1"># account, for puppeted objects</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"has_account"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">has_account</span><span class="p">:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Account"</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{dclr}{obj.account.name}</span><span class="s2">|n (</span><span class="si">{obj.account.dbref}</span><span class="s2">)"</span>
|
|
<span class="c1"># account typeclass</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">" Account Typeclass"</span><span class="p">]</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{obj.account.typename}</span><span class="s2"> (</span><span class="si">{obj.account.typeclass_path}</span><span class="s2">)"</span>
|
|
<span class="c1"># account permissions</span>
|
|
<span class="n">perms</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">is_superuser</span><span class="p">:</span>
|
|
<span class="n">perms</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"<Superuser>"</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">perms</span><span class="p">:</span>
|
|
<span class="n">perms</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"<None>"</span><span class="p">]</span>
|
|
<span class="n">perms</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">perms</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">attributes</span><span class="o">.</span><span class="n">has</span><span class="p">(</span><span class="s2">"_quell"</span><span class="p">):</span>
|
|
<span class="n">perms</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">" </span><span class="si">{qclr}</span><span class="s2">(quelled)|n"</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">" Account Permissions"</span><span class="p">]</span> <span class="o">=</span> <span class="n">perms</span>
|
|
<span class="c1"># location</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"location"</span><span class="p">):</span>
|
|
<span class="n">loc</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">location</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
|
<span class="n">loc</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">" (#</span><span class="si">{obj.location.id}</span><span class="s2">)"</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Location"</span><span class="p">]</span> <span class="o">=</span> <span class="n">loc</span>
|
|
<span class="c1"># home</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"home"</span><span class="p">):</span>
|
|
<span class="n">home</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">home</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">home</span><span class="p">:</span>
|
|
<span class="n">home</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">" (#</span><span class="si">{obj.home.id}</span><span class="s2">)"</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Home"</span><span class="p">]</span> <span class="o">=</span> <span class="n">home</span>
|
|
<span class="c1"># destination, for exits</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"destination"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="n">dest</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="n">dest</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">" (#</span><span class="si">{obj.destination.id}</span><span class="s2">)"</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Destination"</span><span class="p">]</span> <span class="o">=</span> <span class="n">dest</span>
|
|
<span class="c1"># main permissions</span>
|
|
<span class="n">perms</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">permissions</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="n">perms_string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">perms</span><span class="p">:</span>
|
|
<span class="n">perms_string</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">perms</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">is_superuser</span><span class="p">:</span>
|
|
<span class="n">perms_string</span> <span class="o">+=</span> <span class="s2">" <Superuser>"</span>
|
|
<span class="k">if</span> <span class="n">perms_string</span><span class="p">:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Permissions"</span><span class="p">]</span> <span class="o">=</span> <span class="n">perms_string</span>
|
|
<span class="c1"># locks</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">locks</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">locks</span><span class="p">:</span>
|
|
<span class="n">locks_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">utils</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span>
|
|
<span class="s2">"; "</span><span class="o">.</span><span class="n">join</span><span class="p">([</span><span class="n">lock</span> <span class="k">for</span> <span class="n">lock</span> <span class="ow">in</span> <span class="n">locks</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">)]),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">locks_string</span> <span class="o">=</span> <span class="s2">" Default"</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Locks"</span><span class="p">]</span> <span class="o">=</span> <span class="n">locks_string</span>
|
|
<span class="c1"># cmdsets</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">())</span> <span class="o">==</span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">current</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s2">"_EMPTY_CMDSET"</span><span class="p">):</span>
|
|
<span class="c1"># all() returns a 'stack', so make a copy to sort.</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_format_options</span><span class="p">(</span><span class="n">cmdset</span><span class="p">):</span>
|
|
<span class="sd">"""helper for cmdset-option display"""</span>
|
|
<span class="k">def</span> <span class="nf">_truefalse</span><span class="p">(</span><span class="n">string</span><span class="p">,</span> <span class="n">value</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">value</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="n">value</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="n">f</span><span class="s2">"</span><span class="si">{string}</span><span class="s2">: T"</span>
|
|
<span class="k">return</span> <span class="n">f</span><span class="s2">"</span><span class="si">{string}</span><span class="s2">: F"</span>
|
|
<span class="n">options</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="n">_truefalse</span><span class="p">(</span><span class="n">opt</span><span class="p">,</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">opt</span><span class="p">))</span>
|
|
<span class="k">for</span> <span class="n">opt</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"no_exits"</span><span class="p">,</span> <span class="s2">"no_objs"</span><span class="p">,</span> <span class="s2">"no_channels"</span><span class="p">,</span> <span class="s2">"duplicates"</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">cmdset</span><span class="p">,</span> <span class="n">opt</span><span class="p">)</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span>
|
|
<span class="p">)</span>
|
|
<span class="n">options</span> <span class="o">=</span> <span class="s2">", "</span> <span class="o">+</span> <span class="n">options</span> <span class="k">if</span> <span class="n">options</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="k">return</span> <span class="n">options</span>
|
|
|
|
<span class="c1"># cmdset stored on us</span>
|
|
<span class="n">stored_cmdsets</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">(),</span> <span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">priority</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">stored</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">stored_cmdsets</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">cmdset</span><span class="o">.</span><span class="n">key</span> <span class="o">==</span> <span class="s2">"_EMPTY_CMDSET"</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
<span class="n">options</span> <span class="o">=</span> <span class="n">_format_options</span><span class="p">(</span><span class="n">cmdset</span><span class="p">)</span>
|
|
<span class="n">stored</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{cmdset.path}</span><span class="s2"> [</span><span class="si">{cmdset.key}</span><span class="s2">] (</span><span class="si">{cmdset.mergetype}</span><span class="s2">, prio </span><span class="si">{cmdset.priority}{options}</span><span class="s2">)"</span><span class="p">)</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Stored Cmdset(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">stored</span><span class="p">)</span>
|
|
|
|
<span class="c1"># this gets all components of the currently merged set</span>
|
|
<span class="n">all_cmdsets</span> <span class="o">=</span> <span class="p">[(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">current_cmdset</span><span class="o">.</span><span class="n">merged_from</span><span class="p">]</span>
|
|
<span class="c1"># we always at least try to add account- and session sets since these are ignored</span>
|
|
<span class="c1"># if we merge on the object level.</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"account"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="p">:</span>
|
|
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">extend</span><span class="p">([(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span> <span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">()])</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
|
|
<span class="c1"># if there are more sessions than one on objects it's because of multisession mode 3.</span>
|
|
<span class="c1"># we only show the first session's cmdset here (it is -in principle- possible that</span>
|
|
<span class="c1"># different sessions have different cmdsets but for admins who want such madness</span>
|
|
<span class="c1"># it is better that they overload with their own CmdExamine to handle it).</span>
|
|
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
|
|
<span class="p">[</span>
|
|
<span class="p">(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">all</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="c1"># we have to protect this since many objects don't have sessions.</span>
|
|
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">extend</span><span class="p">(</span>
|
|
<span class="p">[</span>
|
|
<span class="p">(</span><span class="n">cmdset</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_session</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">())</span><span class="o">.</span><span class="n">cmdset</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="p">]</span>
|
|
<span class="p">)</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">TypeError</span><span class="p">,</span> <span class="ne">AttributeError</span><span class="p">):</span>
|
|
<span class="c1"># an error means we are merging an object without a session</span>
|
|
<span class="k">pass</span>
|
|
<span class="n">all_cmdsets</span> <span class="o">=</span> <span class="p">[</span><span class="n">cmdset</span> <span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="nb">dict</span><span class="p">(</span><span class="n">all_cmdsets</span><span class="p">)</span><span class="o">.</span><span class="n">values</span><span class="p">()]</span>
|
|
<span class="n">all_cmdsets</span><span class="o">.</span><span class="n">sort</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="n">x</span><span class="o">.</span><span class="n">priority</span><span class="p">,</span> <span class="n">reverse</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
|
|
<span class="c1"># the resulting merged cmdset</span>
|
|
<span class="n">options</span> <span class="o">=</span> <span class="n">_format_options</span><span class="p">(</span><span class="n">current_cmdset</span><span class="p">)</span>
|
|
<span class="n">merged</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="n">f</span><span class="s2">"<Current merged cmdset> (</span><span class="si">{current_cmdset.mergetype}</span><span class="s2"> prio </span><span class="si">{current_cmdset.priority}{options}</span><span class="s2">)"</span><span class="p">]</span>
|
|
|
|
<span class="c1"># the merge stack</span>
|
|
<span class="k">for</span> <span class="n">cmdset</span> <span class="ow">in</span> <span class="n">all_cmdsets</span><span class="p">:</span>
|
|
<span class="n">options</span> <span class="o">=</span> <span class="n">_format_options</span><span class="p">(</span><span class="n">cmdset</span><span class="p">)</span>
|
|
<span class="n">merged</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{cmdset.path}</span><span class="s2"> [</span><span class="si">{cmdset.key}</span><span class="s2">] (</span><span class="si">{cmdset.mergetype}</span><span class="s2"> prio </span><span class="si">{cmdset.priority}{options}</span><span class="s2">)"</span><span class="p">)</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Merged Cmdset(s)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">merged</span><span class="p">)</span>
|
|
|
|
<span class="c1"># list the commands available to this object</span>
|
|
<span class="n">current_commands</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">([</span><span class="n">cmd</span><span class="o">.</span><span class="n">key</span> <span class="k">for</span> <span class="n">cmd</span> <span class="ow">in</span> <span class="n">current_cmdset</span> <span class="k">if</span> <span class="n">cmd</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"cmd"</span><span class="p">)])</span>
|
|
<span class="n">cmdsetstr</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">utils</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">current_commands</span><span class="p">),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">)</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="n">f</span><span class="s2">"Commands available to </span><span class="si">{obj.key}</span><span class="s2"> (result of Merged CmdSets)"</span><span class="p">]</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">cmdsetstr</span><span class="p">)</span>
|
|
|
|
<span class="c1"># scripts</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"scripts"</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="p">,</span> <span class="s2">"all"</span><span class="p">)</span> <span class="ow">and</span> <span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">all</span><span class="p">():</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Scripts"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> "</span> <span class="o">+</span> <span class="n">f</span><span class="s2">"</span><span class="si">{obj.scripts}</span><span class="s2">"</span>
|
|
<span class="c1"># add the attributes</span>
|
|
<span class="n">output</span><span class="o">.</span><span class="n">update</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_attributes</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span>
|
|
<span class="c1"># Tags</span>
|
|
<span class="n">tags</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_key_and_category</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">tags_string</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="o">+</span> <span class="n">utils</span><span class="o">.</span><span class="n">fill</span><span class="p">(</span>
|
|
<span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">f</span><span class="s2">"</span><span class="si">{tag}</span><span class="s2">[</span><span class="si">{category}</span><span class="s2">]"</span> <span class="k">for</span> <span class="n">tag</span><span class="p">,</span> <span class="n">category</span> <span class="ow">in</span> <span class="n">tags</span><span class="p">)),</span> <span class="n">indent</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">tags</span><span class="p">:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Tags[category]"</span><span class="p">]</span> <span class="o">=</span> <span class="n">tags_string</span>
|
|
<span class="c1"># Contents of object</span>
|
|
<span class="n">exits</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">pobjs</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="n">things</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="s2">"contents"</span><span class="p">):</span>
|
|
<span class="k">for</span> <span class="n">content</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">contents</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">content</span><span class="o">.</span><span class="n">destination</span><span class="p">:</span>
|
|
<span class="n">exits</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">content</span><span class="o">.</span><span class="n">account</span><span class="p">:</span>
|
|
<span class="n">pobjs</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">things</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="n">content</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">exits</span><span class="p">:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Exits (has .destination)"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{exit.name}</span><span class="s2">(</span><span class="si">{exit.dbref}</span><span class="s2">)"</span> <span class="k">for</span> <span class="n">exit</span> <span class="ow">in</span> <span class="n">exits</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">pobjs</span><span class="p">:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Characters"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{dclr}{pobj.name}</span><span class="s2">|n(</span><span class="si">{pobj.dbref}</span><span class="s2">)"</span> <span class="k">for</span> <span class="n">pobj</span> <span class="ow">in</span> <span class="n">pobjs</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">things</span><span class="p">:</span>
|
|
<span class="n">output</span><span class="p">[</span><span class="s2">"Contents"</span><span class="p">]</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{cont.name}</span><span class="s2">(</span><span class="si">{cont.dbref}</span><span class="s2">)"</span>
|
|
<span class="k">for</span> <span class="n">cont</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">contents</span>
|
|
<span class="k">if</span> <span class="n">cont</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">exits</span> <span class="ow">and</span> <span class="n">cont</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">pobjs</span>
|
|
<span class="p">)</span>
|
|
<span class="c1"># format output</span>
|
|
<span class="n">max_width</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span>
|
|
<span class="k">for</span> <span class="n">block</span> <span class="ow">in</span> <span class="n">output</span><span class="o">.</span><span class="n">values</span><span class="p">():</span>
|
|
<span class="n">max_width</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">max_width</span><span class="p">,</span> <span class="nb">max</span><span class="p">(</span><span class="n">display_len</span><span class="p">(</span><span class="n">line</span><span class="p">)</span> <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">block</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)))</span>
|
|
<span class="n">max_width</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="nb">min</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">client_width</span><span class="p">(),</span> <span class="n">max_width</span><span class="p">))</span>
|
|
|
|
<span class="n">sep</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">separator</span> <span class="o">*</span> <span class="n">max_width</span>
|
|
<span class="n">mainstr</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">f</span><span class="s2">"</span><span class="si">{hclr}{header}</span><span class="s2">|n: </span><span class="si">{block}</span><span class="s2">"</span> <span class="k">for</span> <span class="p">(</span><span class="n">header</span><span class="p">,</span> <span class="n">block</span><span class="p">)</span> <span class="ow">in</span> <span class="n">output</span><span class="o">.</span><span class="n">items</span><span class="p">())</span>
|
|
<span class="k">return</span> <span class="n">f</span><span class="s2">"</span><span class="si">{sep}</span><span class="se">\n</span><span class="si">{mainstr}</span><span class="se">\n</span><span class="si">{sep}</span><span class="s2">"</span></div>
|
|
|
|
<div class="viewcode-block" id="CmdExamine.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdExamine.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Process command"""</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="k">def</span> <span class="nf">get_cmdset_callback</span><span class="p">(</span><span class="n">cmdset</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> We make use of the cmdhandeler.get_and_merge_cmdsets below. This</span>
|
|
<span class="sd"> is an asynchronous function, returning a Twisted deferred.</span>
|
|
<span class="sd"> So in order to properly use this we need use this callback;</span>
|
|
<span class="sd"> it is called with the result of get_and_merge_cmdsets, whenever</span>
|
|
<span class="sd"> that function finishes. Taking the resulting cmdset, we continue</span>
|
|
<span class="sd"> to format and output the result.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">format_output</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">cmdset</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="c1"># If no arguments are provided, examine the invoker's location.</span>
|
|
<span class="k">if</span> <span class="nb">hasattr</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"location"</span><span class="p">):</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"examine"</span><span class="p">):</span>
|
|
<span class="c1"># If we don't have special info access, just look at the object instead.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="n">obj_session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">()</span> <span class="k">else</span> <span class="kc">None</span>
|
|
|
|
<span class="c1"># using callback for printing result whenever function returns.</span>
|
|
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
|
|
<span class="n">obj</span><span class="p">,</span> <span class="n">obj_session</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">account</span><span class="p">,</span> <span class="n">obj</span><span class="p">,</span> <span class="s2">"object"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
|
|
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">get_cmdset_callback</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You need to supply a target to examine."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># we have given a specific target object</span>
|
|
<span class="k">for</span> <span class="n">objdef</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs_objattr</span><span class="p">:</span>
|
|
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">obj_name</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"name"</span><span class="p">]</span>
|
|
<span class="n">obj_attrs</span> <span class="o">=</span> <span class="n">objdef</span><span class="p">[</span><span class="s2">"attrs"</span><span class="p">]</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">utils</span><span class="o">.</span><span class="n">inherits_from</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"evennia.accounts.accounts.DefaultAccount"</span><span class="p">)</span>
|
|
<span class="ow">or</span> <span class="s2">"account"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="ow">or</span> <span class="n">obj_name</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">obj</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">))</span>
|
|
<span class="k">except</span> <span class="ne">AttributeError</span><span class="p">:</span>
|
|
<span class="c1"># this means we are calling examine from an account object</span>
|
|
<span class="n">obj</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">obj_name</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">),</span> <span class="n">search_object</span><span class="o">=</span><span class="s2">"object"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj</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">obj_name</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="p">:</span>
|
|
<span class="k">continue</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj</span><span class="o">.</span><span class="n">access</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">"examine"</span><span class="p">):</span>
|
|
<span class="c1"># If we don't have special info access, just look</span>
|
|
<span class="c1"># at the object instead.</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">caller</span><span class="o">.</span><span class="n">at_look</span><span class="p">(</span><span class="n">obj</span><span class="p">))</span>
|
|
<span class="k">continue</span>
|
|
|
|
<span class="k">if</span> <span class="n">obj_attrs</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">attrname</span> <span class="ow">in</span> <span class="n">obj_attrs</span><span class="p">:</span>
|
|
<span class="c1"># we are only interested in specific attributes</span>
|
|
<span class="n">ret</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{self.header_color}{header}</span><span class="s2">|n:</span><span class="si">{value}</span><span class="s2">"</span>
|
|
<span class="k">for</span> <span class="n">header</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">format_attributes</span><span class="p">(</span>
|
|
<span class="n">obj</span><span class="p">,</span> <span class="n">attrname</span><span class="p">,</span> <span class="n">crop</span><span class="o">=</span><span class="kc">False</span>
|
|
<span class="p">)</span><span class="o">.</span><span class="n">items</span><span class="p">()</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">ret</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">session</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">count</span><span class="p">():</span>
|
|
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"session"</span>
|
|
<span class="n">session</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">sessions</span><span class="o">.</span><span class="n">get</span><span class="p">()[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
|
|
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"account"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">mergemode</span> <span class="o">=</span> <span class="s2">"object"</span>
|
|
|
|
<span class="n">account</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">objct</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">account_mode</span><span class="p">:</span>
|
|
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">account</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">account</span>
|
|
<span class="n">objct</span> <span class="o">=</span> <span class="n">obj</span>
|
|
|
|
<span class="c1"># using callback to print results whenever function returns.</span>
|
|
<span class="n">get_and_merge_cmdsets</span><span class="p">(</span>
|
|
<span class="n">obj</span><span class="p">,</span> <span class="n">session</span><span class="p">,</span> <span class="n">account</span><span class="p">,</span> <span class="n">objct</span><span class="p">,</span> <span class="n">mergemode</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">raw_string</span>
|
|
<span class="p">)</span><span class="o">.</span><span class="n">addCallback</span><span class="p">(</span><span class="n">get_cmdset_callback</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdFind"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdFind">[docs]</a><span class="k">class</span> <span class="nc">CmdFind</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> search the database for objects</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]</span>
|
|
<span class="sd"> locate - this is a shorthand for using the /loc switch.</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> room - only look for rooms (location=None)</span>
|
|
<span class="sd"> exit - only look for exits (destination!=None)</span>
|
|
<span class="sd"> char - only look for characters (BASE_CHARACTER_TYPECLASS)</span>
|
|
<span class="sd"> exact - only exact matches are returned.</span>
|
|
<span class="sd"> loc - display object location if exists and match has one result</span>
|
|
<span class="sd"> startswith - search for names starting with the string, rather than containing</span>
|
|
|
|
<span class="sd"> Searches the database for an object of a particular name or exact #dbref.</span>
|
|
<span class="sd"> Use *accountname to search for an account. The switches allows for</span>
|
|
<span class="sd"> limiting object matches to certain game entities. Dbrefmin and dbrefmax</span>
|
|
<span class="sd"> limits matches to within the given dbrefs range, or above/below if only</span>
|
|
<span class="sd"> one is given.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"find"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"search, locate"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"room"</span><span class="p">,</span> <span class="s2">"exit"</span><span class="p">,</span> <span class="s2">"char"</span><span class="p">,</span> <span class="s2">"exact"</span><span class="p">,</span> <span class="s2">"loc"</span><span class="p">,</span> <span class="s2">"startswith"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(find) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdFind.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdFind.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Search functionality"""</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">switches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span> <span class="ow">or</span> <span class="p">(</span><span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</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">"Usage: find <string> [= low [-high]]"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"locate"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span><span class="p">:</span> <span class="c1"># Use option /loc as a default for locate command alias</span>
|
|
<span class="n">switches</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"loc"</span><span class="p">)</span>
|
|
|
|
<span class="n">searchstring</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="c1"># Try grabbing the actual min/max id values by database aggregation</span>
|
|
<span class="n">qs</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">values</span><span class="p">(</span><span class="s2">"id"</span><span class="p">)</span><span class="o">.</span><span class="n">aggregate</span><span class="p">(</span><span class="n">low</span><span class="o">=</span><span class="n">Min</span><span class="p">(</span><span class="s2">"id"</span><span class="p">),</span> <span class="n">high</span><span class="o">=</span><span class="n">Max</span><span class="p">(</span><span class="s2">"id"</span><span class="p">))</span>
|
|
<span class="n">low</span><span class="p">,</span> <span class="n">high</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">qs</span><span class="o">.</span><span class="n">values</span><span class="p">())</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">low</span> <span class="ow">and</span> <span class="n">high</span><span class="p">):</span>
|
|
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{self.__class__.__name__}</span><span class="s2">: Min and max ID not returned by aggregation; falling back to queryset slicing."</span>
|
|
<span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
<span class="c1"># If that doesn't work for some reason (empty DB?), guess the lower</span>
|
|
<span class="c1"># bound and do a less-efficient query to find the upper.</span>
|
|
<span class="n">low</span><span class="p">,</span> <span class="n">high</span> <span class="o">=</span> <span class="mi">1</span><span class="p">,</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">all</span><span class="p">()</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"-id"</span><span class="p">)</span><span class="o">.</span><span class="n">first</span><span class="p">()</span><span class="o">.</span><span class="n">id</span>
|
|
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="c1"># Check that rhs is either a valid dbref or dbref range</span>
|
|
<span class="n">bounds</span> <span class="o">=</span> <span class="nb">tuple</span><span class="p">(</span>
|
|
<span class="nb">sorted</span><span class="p">(</span><span class="n">dbref</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="kc">False</span><span class="p">)</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="n">re</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">"[-\s]+"</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">strip</span><span class="p">()))</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># dbref() will return either a valid int or None</span>
|
|
<span class="k">assert</span> <span class="n">bounds</span>
|
|
<span class="c1"># None should not exist in the bounds list</span>
|
|
<span class="k">assert</span> <span class="kc">None</span> <span class="ow">not</span> <span class="ow">in</span> <span class="n">bounds</span>
|
|
|
|
<span class="n">low</span> <span class="o">=</span> <span class="n">bounds</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">bounds</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">high</span> <span class="o">=</span> <span class="n">bounds</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span>
|
|
|
|
<span class="k">except</span> <span class="ne">AssertionError</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">"Invalid dbref range provided (not a number)."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">except</span> <span class="ne">IndexError</span> <span class="k">as</span> <span class="n">e</span><span class="p">:</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_err</span><span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{self.__class__.__name__}</span><span class="s2">: Error parsing upper and lower bounds of query."</span>
|
|
<span class="p">)</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</span><span class="p">(</span><span class="n">e</span><span class="p">)</span>
|
|
|
|
<span class="n">low</span> <span class="o">=</span> <span class="nb">min</span><span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">)</span>
|
|
<span class="n">high</span> <span class="o">=</span> <span class="nb">max</span><span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">)</span>
|
|
|
|
<span class="n">is_dbref</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">dbref</span><span class="p">(</span><span class="n">searchstring</span><span class="p">)</span>
|
|
<span class="n">is_account</span> <span class="o">=</span> <span class="n">searchstring</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span>
|
|
|
|
<span class="n">restrictions</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">restrictions</span> <span class="o">=</span> <span class="s2">", </span><span class="si">%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">))</span>
|
|
|
|
<span class="k">if</span> <span class="n">is_dbref</span> <span class="ow">or</span> <span class="n">is_account</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">is_dbref</span><span class="p">:</span>
|
|
<span class="c1"># a dbref search</span>
|
|
<span class="n">result</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">searchstring</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</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">string</span> <span class="o">=</span> <span class="s2">"|wExact dbref match|n(#</span><span class="si">%i</span><span class="s2">-#</span><span class="si">%i%s</span><span class="s2">):"</span> <span class="o">%</span> <span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">,</span> <span class="n">restrictions</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># an account search</span>
|
|
<span class="n">searchstring</span> <span class="o">=</span> <span class="n">searchstring</span><span class="o">.</span><span class="n">lstrip</span><span class="p">(</span><span class="s2">"*"</span><span class="p">)</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">search_account</span><span class="p">(</span><span class="n">searchstring</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">string</span> <span class="o">=</span> <span class="s2">"|wMatch|n(#</span><span class="si">%i</span><span class="s2">-#</span><span class="si">%i%s</span><span class="s2">):"</span> <span class="o">%</span> <span class="p">(</span><span class="n">low</span><span class="p">,</span> <span class="n">high</span><span class="p">,</span> <span class="n">restrictions</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"room"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="k">if</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">ROOM_TYPECLASS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">"exit"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="k">if</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">EXIT_TYPECLASS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">"char"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span> <span class="k">if</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">result</span><span class="p">,</span> <span class="n">CHAR_TYPECLASS</span><span class="p">)</span> <span class="k">else</span> <span class="kc">None</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> |RNo match found.|n"</span>
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="n">low</span> <span class="o"><=</span> <span class="nb">int</span><span class="p">(</span><span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span><span class="o">.</span><span class="n">id</span><span class="p">)</span> <span class="o"><=</span> <span class="n">high</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2"> |RNo match found for '</span><span class="si">%s</span><span class="s2">' in #dbref interval.|n"</span> <span class="o">%</span> <span class="n">searchstring</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="n">result</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">|g </span><span class="si">%s</span><span class="s2"> - </span><span class="si">%s</span><span class="s2">|n"</span> <span class="o">%</span> <span class="p">(</span><span class="n">result</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">),</span> <span class="n">result</span><span class="o">.</span><span class="n">path</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="s2">"loc"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">is_account</span> <span class="ow">and</span> <span class="n">result</span><span class="o">.</span><span class="n">location</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="s2">" (|wlocation|n: |g</span><span class="si">{}</span><span class="s2">|n)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># Not an account/dbref search but a wider search; build a queryset.</span>
|
|
<span class="c1"># Searches for key and aliases</span>
|
|
<span class="k">if</span> <span class="s2">"exact"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">keyquery</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">searchstring</span><span class="p">,</span> <span class="n">id__gte</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">id__lte</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
|
|
<span class="n">aliasquery</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span>
|
|
<span class="n">db_tags__db_key__iexact</span><span class="o">=</span><span class="n">searchstring</span><span class="p">,</span>
|
|
<span class="n">db_tags__db_tagtype__iexact</span><span class="o">=</span><span class="s2">"alias"</span><span class="p">,</span>
|
|
<span class="n">id__gte</span><span class="o">=</span><span class="n">low</span><span class="p">,</span>
|
|
<span class="n">id__lte</span><span class="o">=</span><span class="n">high</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">elif</span> <span class="s2">"startswith"</span> <span class="ow">in</span> <span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">keyquery</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_key__istartswith</span><span class="o">=</span><span class="n">searchstring</span><span class="p">,</span> <span class="n">id__gte</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">id__lte</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
|
|
<span class="n">aliasquery</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span>
|
|
<span class="n">db_tags__db_key__istartswith</span><span class="o">=</span><span class="n">searchstring</span><span class="p">,</span>
|
|
<span class="n">db_tags__db_tagtype__iexact</span><span class="o">=</span><span class="s2">"alias"</span><span class="p">,</span>
|
|
<span class="n">id__gte</span><span class="o">=</span><span class="n">low</span><span class="p">,</span>
|
|
<span class="n">id__lte</span><span class="o">=</span><span class="n">high</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">keyquery</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span><span class="n">db_key__icontains</span><span class="o">=</span><span class="n">searchstring</span><span class="p">,</span> <span class="n">id__gte</span><span class="o">=</span><span class="n">low</span><span class="p">,</span> <span class="n">id__lte</span><span class="o">=</span><span class="n">high</span><span class="p">)</span>
|
|
<span class="n">aliasquery</span> <span class="o">=</span> <span class="n">Q</span><span class="p">(</span>
|
|
<span class="n">db_tags__db_key__icontains</span><span class="o">=</span><span class="n">searchstring</span><span class="p">,</span>
|
|
<span class="n">db_tags__db_tagtype__iexact</span><span class="o">=</span><span class="s2">"alias"</span><span class="p">,</span>
|
|
<span class="n">id__gte</span><span class="o">=</span><span class="n">low</span><span class="p">,</span>
|
|
<span class="n">id__lte</span><span class="o">=</span><span class="n">high</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="c1"># Keep the initial queryset handy for later reuse</span>
|
|
<span class="n">result_qs</span> <span class="o">=</span> <span class="n">ObjectDB</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">keyquery</span> <span class="o">|</span> <span class="n">aliasquery</span><span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
|
|
<span class="n">nresults</span> <span class="o">=</span> <span class="n">result_qs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
|
|
|
|
<span class="c1"># Use iterator to minimize memory ballooning on large result sets</span>
|
|
<span class="n">results</span> <span class="o">=</span> <span class="n">result_qs</span><span class="o">.</span><span class="n">iterator</span><span class="p">()</span>
|
|
|
|
<span class="c1"># Check and see if type filtering was requested; skip it if not</span>
|
|
<span class="k">if</span> <span class="nb">any</span><span class="p">(</span><span class="n">x</span> <span class="ow">in</span> <span class="n">switches</span> <span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="p">(</span><span class="s2">"room"</span><span class="p">,</span> <span class="s2">"exit"</span><span class="p">,</span> <span class="s2">"char"</span><span class="p">)):</span>
|
|
<span class="n">obj_ids</span> <span class="o">=</span> <span class="nb">set</span><span class="p">()</span>
|
|
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="p">(</span>
|
|
<span class="p">(</span><span class="s2">"room"</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">and</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">ROOM_TYPECLASS</span><span class="p">))</span>
|
|
<span class="ow">or</span> <span class="p">(</span><span class="s2">"exit"</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">and</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">EXIT_TYPECLASS</span><span class="p">))</span>
|
|
<span class="ow">or</span> <span class="p">(</span><span class="s2">"char"</span> <span class="ow">in</span> <span class="n">switches</span> <span class="ow">and</span> <span class="n">inherits_from</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="n">CHAR_TYPECLASS</span><span class="p">))</span>
|
|
<span class="p">):</span>
|
|
<span class="n">obj_ids</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">obj</span><span class="o">.</span><span class="n">id</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Filter previous queryset instead of requesting another</span>
|
|
<span class="n">filtered_qs</span> <span class="o">=</span> <span class="n">result_qs</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">id__in</span><span class="o">=</span><span class="n">obj_ids</span><span class="p">)</span><span class="o">.</span><span class="n">distinct</span><span class="p">()</span>
|
|
<span class="n">nresults</span> <span class="o">=</span> <span class="n">filtered_qs</span><span class="o">.</span><span class="n">count</span><span class="p">()</span>
|
|
|
|
<span class="c1"># Use iterator again to minimize memory ballooning</span>
|
|
<span class="n">results</span> <span class="o">=</span> <span class="n">filtered_qs</span><span class="o">.</span><span class="n">iterator</span><span class="p">()</span>
|
|
|
|
<span class="c1"># still results after type filtering?</span>
|
|
<span class="k">if</span> <span class="n">nresults</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="n">nresults</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"</span><span class="si">{nresults}</span><span class="s2"> Matches"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">header</span> <span class="o">=</span> <span class="s2">"One Match"</span>
|
|
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|w</span><span class="si">{header}</span><span class="s2">|n(#</span><span class="si">{low}</span><span class="s2">-#</span><span class="si">{high}{restrictions}</span><span class="s2">):"</span>
|
|
<span class="n">res</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">for</span> <span class="n">res</span> <span class="ow">in</span> <span class="n">results</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">"</span><span class="se">\n</span><span class="s2"> |g{res.get_display_name(caller)} - </span><span class="si">{res.path}</span><span class="s2">|n"</span>
|
|
<span class="k">if</span> <span class="p">(</span>
|
|
<span class="s2">"loc"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="ow">and</span> <span class="n">nresults</span> <span class="o">==</span> <span class="mi">1</span>
|
|
<span class="ow">and</span> <span class="n">res</span>
|
|
<span class="ow">and</span> <span class="nb">getattr</span><span class="p">(</span><span class="n">res</span><span class="p">,</span> <span class="s2">"location"</span><span class="p">,</span> <span class="kc">None</span><span class="p">)</span>
|
|
<span class="p">):</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">" (|wlocation|n: |g{res.location.get_display_name(caller)}|n)"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|wNo Matches|n(#</span><span class="si">{low}</span><span class="s2">-#</span><span class="si">{high}{restrictions}</span><span class="s2">):"</span>
|
|
<span class="n">string</span> <span class="o">+=</span> <span class="n">f</span><span class="s2">"</span><span class="se">\n</span><span class="s2"> |RNo matches found for '</span><span class="si">{searchstring}</span><span class="s2">'|n"</span>
|
|
|
|
<span class="c1"># send result</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdTeleport"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport">[docs]</a><span class="k">class</span> <span class="nc">CmdTeleport</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> teleport object to another location</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> tel/switch [<object> to||=] <target location></span>
|
|
|
|
<span class="sd"> Examples:</span>
|
|
<span class="sd"> tel Limbo</span>
|
|
<span class="sd"> tel/quiet box = Limbo</span>
|
|
<span class="sd"> tel/tonone box</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> quiet - don't echo leave/arrive messages to the source/target</span>
|
|
<span class="sd"> locations for the move.</span>
|
|
<span class="sd"> intoexit - if target is an exit, teleport INTO</span>
|
|
<span class="sd"> the exit object instead of to its destination</span>
|
|
<span class="sd"> tonone - if set, teleport the object to a None-location. If this</span>
|
|
<span class="sd"> switch is set, <target location> is ignored.</span>
|
|
<span class="sd"> Note that the only way to retrieve</span>
|
|
<span class="sd"> an object from a None location is by direct #dbref</span>
|
|
<span class="sd"> reference. A puppeted object cannot be moved to None.</span>
|
|
<span class="sd"> loc - teleport object to the target's location instead of its contents</span>
|
|
|
|
<span class="sd"> Teleports an object somewhere. If no object is given, you yourself are</span>
|
|
<span class="sd"> teleported to the target location.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"tel"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"teleport"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"quiet"</span><span class="p">,</span> <span class="s2">"intoexit"</span><span class="p">,</span> <span class="s2">"tonone"</span><span class="p">,</span> <span class="s2">"loc"</span><span class="p">)</span>
|
|
<span class="n">rhs_split</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"="</span><span class="p">,</span> <span class="s2">" to "</span><span class="p">)</span> <span class="c1"># Prefer = delimiter, but allow " to " usage.</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(teleport) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdTeleport.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTeleport.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Performs the teleport"""</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">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="n">lhs</span><span class="p">,</span> <span class="n">rhs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">switches</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
|
|
<span class="c1"># setting switches</span>
|
|
<span class="n">tel_quietly</span> <span class="o">=</span> <span class="s2">"quiet"</span> <span class="ow">in</span> <span class="n">switches</span>
|
|
<span class="n">to_none</span> <span class="o">=</span> <span class="s2">"tonone"</span> <span class="ow">in</span> <span class="n">switches</span>
|
|
<span class="n">to_loc</span> <span class="o">=</span> <span class="s2">"loc"</span> <span class="ow">in</span> <span class="n">switches</span>
|
|
|
|
<span class="k">if</span> <span class="n">to_none</span><span class="p">:</span>
|
|
<span class="c1"># teleporting to None</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span><span class="p">:</span>
|
|
<span class="n">obj_to_teleport</span> <span class="o">=</span> <span class="n">caller</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj_to_teleport</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">"Did not find object to teleport."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">has_account</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">"Cannot teleport a puppeted object "</span>
|
|
<span class="s2">"(</span><span class="si">%s</span><span class="s2">, puppeted by </span><span class="si">%s</span><span class="s2">) to a None-location."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">key</span><span class="p">,</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">account</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Teleported </span><span class="si">%s</span><span class="s2"> -> None-location."</span> <span class="o">%</span> <span class="n">obj_to_teleport</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">tel_quietly</span><span class="p">:</span>
|
|
<span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span><span class="o">.</span><span class="n">msg_contents</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="si">%s</span><span class="s2"> teleported </span><span class="si">%s</span><span class="s2"> into nothingness."</span> <span class="o">%</span> <span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">obj_to_teleport</span><span class="p">),</span> <span class="n">exclude</span><span class="o">=</span><span class="n">caller</span>
|
|
<span class="p">)</span>
|
|
<span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># not teleporting to None location</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">args</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">to_none</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">"Usage: teleport[/switches] [<obj> =] <target_loc>||home"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="n">rhs</span><span class="p">:</span>
|
|
<span class="n">obj_to_teleport</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">destination</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">rhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">obj_to_teleport</span> <span class="o">=</span> <span class="n">caller</span>
|
|
<span class="n">destination</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">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">obj_to_teleport</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">"Did not find object to teleport."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">destination</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">"Destination not found."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">to_loc</span><span class="p">:</span>
|
|
<span class="n">destination</span> <span class="o">=</span> <span class="n">destination</span><span class="o">.</span><span class="n">location</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">destination</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">"Destination has no location."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">destination</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">"You can't teleport an object inside of itself!"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">destination</span><span class="o">.</span><span class="n">location</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">"You can't teleport an object inside something it holds!"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="ow">and</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">location</span> <span class="o">==</span> <span class="n">destination</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">"</span><span class="si">%s</span><span class="s2"> is already at </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">obj_to_teleport</span><span class="p">,</span> <span class="n">destination</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="n">use_destination</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="k">if</span> <span class="s2">"intoexit"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">use_destination</span> <span class="o">=</span> <span class="kc">False</span>
|
|
|
|
<span class="c1"># try the teleport</span>
|
|
<span class="k">if</span> <span class="n">obj_to_teleport</span><span class="o">.</span><span class="n">move_to</span><span class="p">(</span>
|
|
<span class="n">destination</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="n">tel_quietly</span><span class="p">,</span> <span class="n">emit_to_obj</span><span class="o">=</span><span class="n">caller</span><span class="p">,</span> <span class="n">use_destination</span><span class="o">=</span><span class="n">use_destination</span>
|
|
<span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">obj_to_teleport</span> <span class="o">==</span> <span class="n">caller</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">"Teleported to </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">destination</span><span class="p">)</span>
|
|
<span class="k">else</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">"Teleported </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">obj_to_teleport</span><span class="p">,</span> <span class="n">destination</span><span class="p">))</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdScript"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdScript">[docs]</a><span class="k">class</span> <span class="nc">CmdScript</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> attach a script to an object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> script[/switch] <obj> [= script_path or <scriptkey>]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> start - start all non-running scripts on object, or a given script only</span>
|
|
<span class="sd"> stop - stop all scripts on objects, or a given script only</span>
|
|
|
|
<span class="sd"> If no script path/key is given, lists all scripts active on the given</span>
|
|
<span class="sd"> object.</span>
|
|
<span class="sd"> Script path can be given from the base location for scripts as given in</span>
|
|
<span class="sd"> settings. If adding a new script, it will be started automatically</span>
|
|
<span class="sd"> (no /start switch is needed). Using the /start or /stop switches on an</span>
|
|
<span class="sd"> object without specifying a script key/path will start/stop ALL scripts on</span>
|
|
<span class="sd"> the object.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"script"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="s2">"addscript"</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"start"</span><span class="p">,</span> <span class="s2">"stop"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(script) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<div class="viewcode-block" id="CmdScript.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdScript.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Do stuff"""</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="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Usage: script[/switch] <obj> [= script_path or <script key>]"</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</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">"To create a global script you need |wscripts/add <typeclass>|n."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">)</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="n">result</span> <span class="o">=</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># no rhs means we want to operate on all scripts</span>
|
|
<span class="n">scripts</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">all</span><span class="p">()</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">scripts</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"No scripts defined on </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">))</span>
|
|
<span class="k">elif</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># view all scripts</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.commands.default.system</span> <span class="k">import</span> <span class="n">ScriptEvMore</span>
|
|
|
|
<span class="n">ScriptEvMore</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">scripts</span><span class="o">.</span><span class="n">order_by</span><span class="p">(</span><span class="s2">"id"</span><span class="p">),</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">elif</span> <span class="s2">"start"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="n">num</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">([</span><span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">script</span><span class="o">.</span><span class="n">key</span><span class="p">)</span> <span class="k">for</span> <span class="n">script</span> <span class="ow">in</span> <span class="n">scripts</span><span class="p">])</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="si">%s</span><span class="s2"> scripts started on </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span><span class="n">num</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">)))</span>
|
|
<span class="k">elif</span> <span class="s2">"stop"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">script</span> <span class="ow">in</span> <span class="n">scripts</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="s2">"Stopping script </span><span class="si">%s</span><span class="s2"> on </span><span class="si">%s</span><span class="s2">."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="n">script</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">),</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">))</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">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">validate</span><span class="p">()</span>
|
|
<span class="k">else</span><span class="p">:</span> <span class="c1"># rhs exists</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># adding a new script, and starting it</span>
|
|
<span class="n">ok</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</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">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">Script </span><span class="si">%s</span><span class="s2"> could not be added and/or started on </span><span class="si">%s</span><span class="s2"> "</span>
|
|
<span class="s2">"(or it started and immediately shut down)."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">))</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span>
|
|
<span class="s2">"Script |w</span><span class="si">%s</span><span class="s2">|n successfully added and started on </span><span class="si">%s</span><span class="s2">."</span>
|
|
<span class="o">%</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">,</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="n">caller</span><span class="p">))</span>
|
|
<span class="p">)</span>
|
|
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">paths</span> <span class="o">=</span> <span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">]</span> <span class="o">+</span> <span class="p">[</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">prefix</span><span class="p">,</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">)</span> <span class="k">for</span> <span class="n">prefix</span> <span class="ow">in</span> <span class="n">settings</span><span class="o">.</span><span class="n">TYPECLASS_PATHS</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="s2">"stop"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># we are stopping an already existing script</span>
|
|
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">:</span>
|
|
<span class="n">ok</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">stop</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Script </span><span class="si">%s</span><span class="s2"> could not be stopped. Does it exist?"</span> <span class="o">%</span> <span class="n">path</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Script stopped and removed from object."</span><span class="p">]</span>
|
|
<span class="k">break</span>
|
|
<span class="k">if</span> <span class="s2">"start"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># we are starting an already existing script</span>
|
|
<span class="k">for</span> <span class="n">path</span> <span class="ow">in</span> <span class="n">paths</span><span class="p">:</span>
|
|
<span class="n">ok</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">scripts</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">path</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">ok</span><span class="p">:</span>
|
|
<span class="n">result</span><span class="o">.</span><span class="n">append</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">Script </span><span class="si">%s</span><span class="s2"> could not be (re)started."</span> <span class="o">%</span> <span class="n">path</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">result</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Script started successfully."</span><span class="p">]</span>
|
|
<span class="k">break</span>
|
|
|
|
<span class="n">EvMore</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="s2">""</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">result</span><span class="p">)</span><span class="o">.</span><span class="n">strip</span><span class="p">())</span></div></div>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdTag"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTag">[docs]</a><span class="k">class</span> <span class="nc">CmdTag</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> handles the tags of an object</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> tag[/del] <obj> [= <tag>[:<category>]]</span>
|
|
<span class="sd"> tag/search <tag>[:<category]</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> search - return all objects with a given Tag</span>
|
|
<span class="sd"> del - remove the given tag. If no tag is specified,</span>
|
|
<span class="sd"> clear all tags on object.</span>
|
|
|
|
<span class="sd"> Manipulates and lists tags on objects. Tags allow for quick</span>
|
|
<span class="sd"> grouping of and searching for objects. If only <obj> is given,</span>
|
|
<span class="sd"> list all tags on the object. If /search is used, list objects</span>
|
|
<span class="sd"> with the given tag.</span>
|
|
<span class="sd"> The category can be used for grouping tags themselves, but it</span>
|
|
<span class="sd"> should be used with restrain - tags on their own are usually</span>
|
|
<span class="sd"> enough to for most grouping schemes.</span>
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"tag"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"tags"</span><span class="p">]</span>
|
|
<span class="n">options</span> <span class="o">=</span> <span class="p">(</span><span class="s2">"search"</span><span class="p">,</span> <span class="s2">"del"</span><span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(tag) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
<span class="n">arg_regex</span> <span class="o">=</span> <span class="sa">r</span><span class="s2">"(/\w+?(\s|$))|\s|$"</span>
|
|
|
|
<div class="viewcode-block" id="CmdTag.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdTag.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Implement the tag functionality"""</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Usage: tag[/switches] <obj> [= <tag>[:<category>]]"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="s2">"search"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># search by tag</span>
|
|
<span class="n">tag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span>
|
|
<span class="n">category</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="n">tag</span><span class="p">:</span>
|
|
<span class="n">tag</span><span class="p">,</span> <span class="n">category</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">tag</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="n">objs</span> <span class="o">=</span> <span class="n">search</span><span class="o">.</span><span class="n">search_tag</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">)</span>
|
|
<span class="n">nobjs</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">objs</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">nobjs</span> <span class="o">></span> <span class="mi">0</span><span class="p">:</span>
|
|
<span class="n">catstr</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">" (category: '|w</span><span class="si">%s</span><span class="s2">|n')"</span> <span class="o">%</span> <span class="n">category</span>
|
|
<span class="k">if</span> <span class="n">category</span>
|
|
<span class="k">else</span> <span class="p">(</span><span class="s2">""</span> <span class="k">if</span> <span class="n">nobjs</span> <span class="o">==</span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">" (may have different tag categories)"</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="n">matchstr</span> <span class="o">=</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">o</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">)</span> <span class="k">for</span> <span class="n">o</span> <span class="ow">in</span> <span class="n">objs</span><span class="p">)</span>
|
|
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Found |w</span><span class="si">%i</span><span class="s2">|n object</span><span class="si">%s</span><span class="s2"> with tag '|w</span><span class="si">%s</span><span class="s2">|n'</span><span class="si">%s</span><span class="s2">:</span><span class="se">\n</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">nobjs</span><span class="p">,</span>
|
|
<span class="s2">"s"</span> <span class="k">if</span> <span class="n">nobjs</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">tag</span><span class="p">,</span>
|
|
<span class="n">catstr</span><span class="p">,</span>
|
|
<span class="n">matchstr</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"No objects found with tag '</span><span class="si">%s%s</span><span class="s2">'."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">tag</span><span class="p">,</span>
|
|
<span class="s2">" (category: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">category</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="s2">"del"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># remove one or all tags</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># remove individual tag</span>
|
|
<span class="n">tag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">category</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="n">tag</span><span class="p">:</span>
|
|
<span class="n">tag</span><span class="p">,</span> <span class="n">category</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">tag</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="k">if</span> <span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">):</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Removed tag '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2"> from </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">tag</span><span class="p">,</span>
|
|
<span class="s2">" (category: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">category</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">obj</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"No tag '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2"> to delete on </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">tag</span><span class="p">,</span>
|
|
<span class="s2">" (category: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">category</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">obj</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># no tag specified, clear all tags</span>
|
|
<span class="n">old_tags</span> <span class="o">=</span> <span class="p">[</span>
|
|
<span class="s2">"</span><span class="si">%s%s</span><span class="s2">"</span> <span class="o">%</span> <span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="s2">" (category: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">category</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="s2">""</span><span class="p">)</span>
|
|
<span class="k">for</span> <span class="n">tag</span><span class="p">,</span> <span class="n">category</span> <span class="ow">in</span> <span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_key_and_category</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">old_tags</span><span class="p">:</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">clear</span><span class="p">()</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Cleared all tags from </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">obj</span><span class="p">,</span> <span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</span><span class="n">old_tags</span><span class="p">)))</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"No Tags to clear on </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="c1"># no search/deletion</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># = is found; command args are of the form obj = tag</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="n">tag</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span>
|
|
<span class="n">category</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="s2">":"</span> <span class="ow">in</span> <span class="n">tag</span><span class="p">:</span>
|
|
<span class="n">tag</span><span class="p">,</span> <span class="n">category</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">tag</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">":"</span><span class="p">,</span> <span class="mi">1</span><span class="p">)]</span>
|
|
<span class="c1"># create the tag</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">add</span><span class="p">(</span><span class="n">tag</span><span class="p">,</span> <span class="n">category</span><span class="o">=</span><span class="n">category</span><span class="p">)</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Added tag '</span><span class="si">%s</span><span class="s2">'</span><span class="si">%s</span><span class="s2"> to </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="p">(</span>
|
|
<span class="n">tag</span><span class="p">,</span>
|
|
<span class="s2">" (category: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">category</span> <span class="k">if</span> <span class="n">category</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">obj</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># no = found - list tags on object</span>
|
|
<span class="n">obj</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="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">global_search</span><span class="o">=</span><span class="kc">True</span><span class="p">)</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="n">tagtuples</span> <span class="o">=</span> <span class="n">obj</span><span class="o">.</span><span class="n">tags</span><span class="o">.</span><span class="n">all</span><span class="p">(</span><span class="n">return_key_and_category</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">ntags</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">tagtuples</span><span class="p">)</span>
|
|
<span class="n">tags</span> <span class="o">=</span> <span class="p">[</span><span class="n">tup</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">tagtuples</span><span class="p">]</span>
|
|
<span class="n">categories</span> <span class="o">=</span> <span class="p">[</span><span class="s2">" (category: </span><span class="si">%s</span><span class="s2">)"</span> <span class="o">%</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">if</span> <span class="n">tup</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span> <span class="k">else</span> <span class="s2">""</span> <span class="k">for</span> <span class="n">tup</span> <span class="ow">in</span> <span class="n">tagtuples</span><span class="p">]</span>
|
|
<span class="k">if</span> <span class="n">ntags</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Tag</span><span class="si">%s</span><span class="s2"> on </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="s2">"s"</span> <span class="k">if</span> <span class="n">ntags</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="s2">""</span><span class="p">,</span>
|
|
<span class="n">obj</span><span class="p">,</span>
|
|
<span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="nb">sorted</span><span class="p">(</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">tags</span><span class="p">[</span><span class="n">i</span><span class="p">],</span> <span class="n">categories</span><span class="p">[</span><span class="n">i</span><span class="p">])</span> <span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">ntags</span><span class="p">))),</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"No tags attached to </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="c1"># helper functions for spawn</span>
|
|
|
|
|
|
<div class="viewcode-block" id="CmdSpawn"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSpawn">[docs]</a><span class="k">class</span> <span class="nc">CmdSpawn</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> spawn objects from prototype</span>
|
|
|
|
<span class="sd"> Usage:</span>
|
|
<span class="sd"> spawn[/noloc] <prototype_key></span>
|
|
<span class="sd"> spawn[/noloc] <prototype_dict></span>
|
|
|
|
<span class="sd"> spawn/search [prototype_keykey][;tag[,tag]]</span>
|
|
<span class="sd"> spawn/list [tag, tag, ...]</span>
|
|
<span class="sd"> spawn/list modules - list only module-based prototypes</span>
|
|
<span class="sd"> spawn/show [<prototype_key>]</span>
|
|
<span class="sd"> spawn/update <prototype_key></span>
|
|
|
|
<span class="sd"> spawn/save <prototype_dict></span>
|
|
<span class="sd"> spawn/edit [<prototype_key>]</span>
|
|
<span class="sd"> olc - equivalent to spawn/edit</span>
|
|
|
|
<span class="sd"> Switches:</span>
|
|
<span class="sd"> noloc - allow location to be None if not specified explicitly. Otherwise,</span>
|
|
<span class="sd"> location will default to caller's current location.</span>
|
|
<span class="sd"> search - search prototype by name or tags.</span>
|
|
<span class="sd"> list - list available prototypes, optionally limit by tags.</span>
|
|
<span class="sd"> show, examine - inspect prototype by key. If not given, acts like list.</span>
|
|
<span class="sd"> raw - show the raw dict of the prototype as a one-line string for manual editing.</span>
|
|
<span class="sd"> save - save a prototype to the database. It will be listable by /list.</span>
|
|
<span class="sd"> delete - remove a prototype from database, if allowed to.</span>
|
|
<span class="sd"> update - find existing objects with the same prototype_key and update</span>
|
|
<span class="sd"> them with latest version of given prototype. If given with /save,</span>
|
|
<span class="sd"> will auto-update all objects with the old version of the prototype</span>
|
|
<span class="sd"> without asking first.</span>
|
|
<span class="sd"> edit, menu, olc - create/manipulate prototype in a menu interface.</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> spawn GOBLIN</span>
|
|
<span class="sd"> spawn {"key":"goblin", "typeclass":"monster.Monster", "location":"#2"}</span>
|
|
<span class="sd"> spawn/save {"key": "grunt", prototype: "goblin"};;mobs;edit:all()</span>
|
|
<span class="sd"> \f</span>
|
|
<span class="sd"> Dictionary keys:</span>
|
|
<span class="sd"> |wprototype_parent |n - name of parent prototype to use. Required if typeclass is</span>
|
|
<span class="sd"> not set. Can be a path or a list for multiple inheritance (inherits</span>
|
|
<span class="sd"> left to right). If set one of the parents must have a typeclass.</span>
|
|
<span class="sd"> |wtypeclass |n - string. Required if prototype_parent is not set.</span>
|
|
<span class="sd"> |wkey |n - string, the main object identifier</span>
|
|
<span class="sd"> |wlocation |n - this should be a valid object or #dbref</span>
|
|
<span class="sd"> |whome |n - valid object or #dbref</span>
|
|
<span class="sd"> |wdestination|n - only valid for exits (object or dbref)</span>
|
|
<span class="sd"> |wpermissions|n - string or list of permission strings</span>
|
|
<span class="sd"> |wlocks |n - a lock-string</span>
|
|
<span class="sd"> |waliases |n - string or list of strings.</span>
|
|
<span class="sd"> |wndb_|n<name> - value of a nattribute (ndb_ is stripped)</span>
|
|
|
|
<span class="sd"> |wprototype_key|n - name of this prototype. Unique. Used to store/retrieve from db</span>
|
|
<span class="sd"> and update existing prototyped objects if desired.</span>
|
|
<span class="sd"> |wprototype_desc|n - desc of this prototype. Used in listings</span>
|
|
<span class="sd"> |wprototype_locks|n - locks of this prototype. Limits who may use prototype</span>
|
|
<span class="sd"> |wprototype_tags|n - tags of this prototype. Used to find prototype</span>
|
|
|
|
<span class="sd"> any other keywords are interpreted as Attributes and their values.</span>
|
|
|
|
<span class="sd"> The available prototypes are defined globally in modules set in</span>
|
|
<span class="sd"> settings.PROTOTYPE_MODULES. If spawn is used without arguments it</span>
|
|
<span class="sd"> displays a list of available prototypes.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"spawn"</span>
|
|
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"olc"</span><span class="p">]</span>
|
|
<span class="n">switch_options</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"noloc"</span><span class="p">,</span>
|
|
<span class="s2">"search"</span><span class="p">,</span>
|
|
<span class="s2">"list"</span><span class="p">,</span>
|
|
<span class="s2">"show"</span><span class="p">,</span>
|
|
<span class="s2">"raw"</span><span class="p">,</span>
|
|
<span class="s2">"examine"</span><span class="p">,</span>
|
|
<span class="s2">"save"</span><span class="p">,</span>
|
|
<span class="s2">"delete"</span><span class="p">,</span>
|
|
<span class="s2">"menu"</span><span class="p">,</span>
|
|
<span class="s2">"olc"</span><span class="p">,</span>
|
|
<span class="s2">"update"</span><span class="p">,</span>
|
|
<span class="s2">"edit"</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">locks</span> <span class="o">=</span> <span class="s2">"cmd:perm(spawn) or perm(Builder)"</span>
|
|
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">"Building"</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_search_prototype</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">prototype_key</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Search for prototype and handle no/multi-match and access.</span>
|
|
|
|
<span class="sd"> Returns a single found prototype or None - in the</span>
|
|
<span class="sd"> case, the caller has already been informed of the</span>
|
|
<span class="sd"> search error we need not do any further action.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">prototypes</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
|
|
<span class="n">nprots</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">prototypes</span><span class="p">)</span>
|
|
|
|
<span class="c1"># handle the search result</span>
|
|
<span class="n">err</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototypes</span><span class="p">:</span>
|
|
<span class="n">err</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"No prototype named '</span><span class="si">{prototype_key}</span><span class="s2">' was found."</span>
|
|
<span class="k">elif</span> <span class="n">nprots</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span>
|
|
<span class="n">err</span> <span class="o">=</span> <span class="s2">"Found </span><span class="si">{}</span><span class="s2"> prototypes matching '</span><span class="si">{}</span><span class="s2">':</span><span class="se">\n</span><span class="s2"> </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">nprots</span><span class="p">,</span>
|
|
<span class="n">prototype_key</span><span class="p">,</span>
|
|
<span class="s2">", "</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">proto</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prototype_key"</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span> <span class="k">for</span> <span class="n">proto</span> <span class="ow">in</span> <span class="n">prototypes</span><span class="p">),</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="c1"># we have a single prototype, check access</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="n">prototypes</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="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">locks</span><span class="o">.</span><span class="n">check_lockstring</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prototype_locks"</span><span class="p">,</span> <span class="s2">""</span><span class="p">),</span> <span class="n">access_type</span><span class="o">=</span><span class="s2">"spawn"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">True</span>
|
|
<span class="p">):</span>
|
|
<span class="n">err</span> <span class="o">=</span> <span class="s2">"You don't have access to use this prototype."</span>
|
|
|
|
<span class="k">if</span> <span class="n">err</span><span class="p">:</span>
|
|
<span class="c1"># return None on any error</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">quiet</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">err</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">return</span> <span class="n">prototype</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_parse_prototype</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">inp</span><span class="p">,</span> <span class="n">expect</span><span class="o">=</span><span class="nb">dict</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Parse a prototype dict or key from the input and convert it safely</span>
|
|
<span class="sd"> into a dict if appropriate.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> inp (str): The input from user.</span>
|
|
<span class="sd"> expect (type, optional):</span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> prototype (dict, str or None): The parsed prototype. If None, the error</span>
|
|
<span class="sd"> was already reported.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">eval_err</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="n">_LITERAL_EVAL</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="p">(</span><span class="ne">SyntaxError</span><span class="p">,</span> <span class="ne">ValueError</span><span class="p">)</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|
<span class="c1"># treat as string</span>
|
|
<span class="n">eval_err</span> <span class="o">=</span> <span class="n">err</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">to_str</span><span class="p">(</span><span class="n">inp</span><span class="p">)</span>
|
|
<span class="k">finally</span><span class="p">:</span>
|
|
<span class="c1"># it's possible that the input was a prototype-key, in which case</span>
|
|
<span class="c1"># it's okay for the LITERAL_EVAL to fail. Only if the result does not</span>
|
|
<span class="c1"># match the expected type do we have a problem.</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="n">expect</span><span class="p">):</span>
|
|
<span class="k">if</span> <span class="n">eval_err</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="si">{inp}</span><span class="se">\n</span><span class="si">{eval_err}</span><span class="se">\n</span><span class="s2">|RCritical Python syntax error in argument. Only primitive "</span>
|
|
<span class="s2">"Python structures are allowed. </span><span class="se">\n</span><span class="s2">Make sure to use correct "</span>
|
|
<span class="s2">"Python syntax. Remember especially to put quotes around all "</span>
|
|
<span class="s2">"strings inside lists and dicts.|n For more advanced uses, embed "</span>
|
|
<span class="s2">"inlinefuncs in the strings."</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">"Expected </span><span class="si">{}</span><span class="s2">, got </span><span class="si">{}</span><span class="s2">."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">expect</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">prototype</span><span class="p">))</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="n">expect</span> <span class="o">==</span> <span class="nb">dict</span><span class="p">:</span>
|
|
<span class="c1"># an actual prototype. We need to make sure it's safe,</span>
|
|
<span class="c1"># so don't allow exec.</span>
|
|
<span class="c1"># TODO: Exec support is deprecated. Remove completely for 1.0.</span>
|
|
<span class="k">if</span> <span class="s2">"exec"</span> <span class="ow">in</span> <span class="n">prototype</span> <span class="ow">and</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">check_permstring</span><span class="p">(</span><span class="s2">"Developer"</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span>
|
|
<span class="s2">"Spawn aborted: You are not allowed to "</span> <span class="s2">"use the 'exec' prototype key."</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="c1"># we homogenize the protoype first, to be more lenient with free-form</span>
|
|
<span class="n">protlib</span><span class="o">.</span><span class="n">validate_prototype</span><span class="p">(</span><span class="n">protlib</span><span class="o">.</span><span class="n">homogenize_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">))</span>
|
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">err</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="k">return</span> <span class="n">prototype</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_get_prototype_detail</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">query</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">prototypes</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Display the detailed specs of one or more prototypes.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> query (str, optional): If this is given and `prototypes` is not, search for</span>
|
|
<span class="sd"> the prototype(s) by this query. This may be a partial query which</span>
|
|
<span class="sd"> may lead to multiple matches, all being displayed.</span>
|
|
<span class="sd"> prototypes (list, optional): If given, ignore `query` and only show these</span>
|
|
<span class="sd"> prototype-details.</span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> display (str, None): A formatted string of one or more prototype details.</span>
|
|
<span class="sd"> If None, the caller was already informed of the error.</span>
|
|
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototypes</span><span class="p">:</span>
|
|
<span class="c1"># we need to query. Note that if query is None, all prototypes will</span>
|
|
<span class="c1"># be returned.</span>
|
|
<span class="n">prototypes</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="n">query</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">prototypes</span><span class="p">:</span>
|
|
<span class="k">return</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">protlib</span><span class="o">.</span><span class="n">prototype_to_str</span><span class="p">(</span><span class="n">prot</span><span class="p">)</span> <span class="k">for</span> <span class="n">prot</span> <span class="ow">in</span> <span class="n">prototypes</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">query</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">f</span><span class="s2">"No prototype named '</span><span class="si">{query}</span><span class="s2">' was found."</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"No prototypes found."</span><span class="p">)</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_list_prototypes</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="n">tags</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""Display prototypes as a list, optionally limited by key/tags. """</span>
|
|
<span class="n">protlib</span><span class="o">.</span><span class="n">list_prototypes</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</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">tags</span><span class="o">=</span><span class="n">tags</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">)</span>
|
|
|
|
<span class="nd">@interactive</span>
|
|
<span class="k">def</span> <span class="nf">_update_existing_objects</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">caller</span><span class="p">,</span> <span class="n">prototype_key</span><span class="p">,</span> <span class="n">quiet</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Update existing objects (if any) with this prototype-key to the latest</span>
|
|
<span class="sd"> prototype version.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> caller (Object): This is necessary for @interactive to work.</span>
|
|
<span class="sd"> prototype_key (str): The prototype to update.</span>
|
|
<span class="sd"> quiet (bool, optional): If set, don't report to user if no</span>
|
|
<span class="sd"> old objects were found to update.</span>
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> n_updated (int): Number of updated objects.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">existing_objects</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">search_objects_with_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">existing_objects</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">quiet</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">"No existing objects found with an older version of this prototype."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="n">existing_objects</span><span class="p">:</span>
|
|
<span class="n">n_existing</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">existing_objects</span><span class="p">)</span>
|
|
<span class="n">slow</span> <span class="o">=</span> <span class="s2">" (note that this may be slow)"</span> <span class="k">if</span> <span class="n">n_existing</span> <span class="o">></span> <span class="mi">10</span> <span class="k">else</span> <span class="s2">""</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">f</span><span class="s2">"There are </span><span class="si">{n_existing}</span><span class="s2"> existing object(s) with an older version "</span>
|
|
<span class="n">f</span><span class="s2">"of prototype '</span><span class="si">{prototype_key}</span><span class="s2">'. Should it be re-applied to them</span><span class="si">{slow}</span><span class="s2">? [Y]/N"</span>
|
|
<span class="p">)</span>
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="n">string</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"n"</span><span class="p">,</span> <span class="s2">"no"</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">"|rNo update was done of existing objects. "</span>
|
|
<span class="s2">"Use spawn/update <key> to apply later as needed.|n"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">n_updated</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">batch_update_objects_with_prototype</span><span class="p">(</span>
|
|
<span class="n">prototype</span><span class="p">,</span> <span class="n">objects</span><span class="o">=</span><span class="n">existing_objects</span>
|
|
<span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
|
|
<span class="n">logger</span><span class="o">.</span><span class="n">log_trace</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="n">f</span><span class="s2">"</span><span class="si">{n_updated}</span><span class="s2"> objects were updated."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">def</span> <span class="nf">_parse_key_desc_tags</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">argstring</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Parse ;-separated input list.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="n">key</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">tags</span> <span class="o">=</span> <span class="s2">""</span><span class="p">,</span> <span class="s2">""</span><span class="p">,</span> <span class="p">[]</span>
|
|
<span class="k">if</span> <span class="s2">";"</span> <span class="ow">in</span> <span class="n">argstring</span><span class="p">:</span>
|
|
<span class="n">parts</span> <span class="o">=</span> <span class="p">[</span><span class="n">part</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="k">for</span> <span class="n">part</span> <span class="ow">in</span> <span class="n">argstring</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">";"</span><span class="p">)]</span>
|
|
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">parts</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span> <span class="ow">and</span> <span class="n">desc</span><span class="p">:</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">desc</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
|
|
<span class="n">tags</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">2</span><span class="p">:]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
|
|
<span class="n">tags</span> <span class="o">=</span> <span class="n">parts</span><span class="p">[</span><span class="mi">1</span><span class="p">:]</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">key</span> <span class="o">=</span> <span class="n">argstring</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">key</span><span class="p">,</span> <span class="n">desc</span><span class="p">,</span> <span class="n">tags</span>
|
|
|
|
<div class="viewcode-block" id="CmdSpawn.func"><a class="viewcode-back" href="../../../../api/evennia.commands.default.building.html#evennia.commands.default.building.CmdSpawn.func">[docs]</a> <span class="k">def</span> <span class="nf">func</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Implements the spawner"""</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">noloc</span> <span class="o">=</span> <span class="s2">"noloc"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
|
|
<span class="c1"># run the menu/olc</span>
|
|
<span class="k">if</span> <span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">cmdstring</span> <span class="o">==</span> <span class="s2">"olc"</span>
|
|
<span class="ow">or</span> <span class="s2">"menu"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="ow">or</span> <span class="s2">"olc"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="ow">or</span> <span class="s2">"edit"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span>
|
|
<span class="p">):</span>
|
|
<span class="c1"># OLC menu mode</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">:</span>
|
|
<span class="n">prototype_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="n">olc_menus</span><span class="o">.</span><span class="n">start_olc</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">session</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">session</span><span class="p">,</span> <span class="n">prototype</span><span class="o">=</span><span class="n">prototype</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"search"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># query for a key match. The arg is a search query or nothing.</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="c1"># an empty search returns the full list</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_list_prototypes</span><span class="p">()</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># search for key;tag combinations</span>
|
|
<span class="n">key</span><span class="p">,</span> <span class="n">_</span><span class="p">,</span> <span class="n">tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_desc_tags</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">desc</span><span class="o">=</span><span class="kc">False</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_list_prototypes</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">tags</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"raw"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># query for key match and return the prototype as a safe one-liner string.</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"You need to specify a prototype-key to get the raw data for."</span><span class="p">)</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_prototype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="nb">str</span><span class="p">(</span><span class="n">prototype</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"show"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span> <span class="ow">or</span> <span class="s2">"examine"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># show a specific prot detail. The argument is a search query or empty.</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="c1"># we don't show the list of all details, that's too spammy.</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"You need to specify a prototype-key to show."</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">detail_string</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_prototype_detail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">detail_string</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">detail_string</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"list"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># for list, all optional arguments are tags.</span>
|
|
<span class="n">tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhslist</span>
|
|
<span class="n">err</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_list_prototypes</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="k">if</span> <span class="n">err</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">"No prototypes found with prototype-tag(s): </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span>
|
|
<span class="n">list_to_string</span><span class="p">(</span><span class="n">tags</span><span class="p">,</span> <span class="s2">"or"</span><span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"save"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># store a prototype to the database store</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</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">"Usage: spawn/save [<key>[;desc[;tag,tag[,...][;lockstring]]]] = <prototype_dict>"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
<span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="p">:</span>
|
|
<span class="c1"># input on the form key = prototype</span>
|
|
<span class="n">prototype_key</span><span class="p">,</span> <span class="n">prototype_desc</span><span class="p">,</span> <span class="n">prototype_tags</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_key_desc_tags</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="p">)</span>
|
|
<span class="n">prototype_key</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_key</span> <span class="k">else</span> <span class="n">prototype_key</span>
|
|
<span class="n">prototype_desc</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_desc</span> <span class="k">else</span> <span class="n">prototype_desc</span>
|
|
<span class="n">prototype_tags</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_tags</span> <span class="k">else</span> <span class="n">prototype_tags</span>
|
|
<span class="n">prototype_input</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">rhs</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">prototype_key</span> <span class="o">=</span> <span class="n">prototype_desc</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">prototype_tags</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">prototype_input</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">lhs</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span>
|
|
|
|
<span class="c1"># handle parsing</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_prototype</span><span class="p">(</span><span class="n">prototype_input</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">prot_prototype_key</span> <span class="o">=</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prototype_key"</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="p">(</span><span class="n">prototype_key</span> <span class="ow">or</span> <span class="n">prot_prototype_key</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">"A prototype_key must be given, either as `prototype_key = <prototype>` "</span>
|
|
<span class="s2">"or as a key 'prototype_key' inside the prototype structure."</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="n">prototype_key</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">prototype_key</span> <span class="o">=</span> <span class="n">prot_prototype_key</span>
|
|
|
|
<span class="k">if</span> <span class="n">prot_prototype_key</span> <span class="o">!=</span> <span class="n">prototype_key</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">"(Replacing `prototype_key` in prototype with given key.)"</span><span class="p">)</span>
|
|
<span class="n">prototype</span><span class="p">[</span><span class="s2">"prototype_key"</span><span class="p">]</span> <span class="o">=</span> <span class="n">prototype_key</span>
|
|
|
|
<span class="k">if</span> <span class="n">prototype_desc</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">prot_prototype_key</span> <span class="o">!=</span> <span class="n">prototype_desc</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">"(Replacing `prototype_desc` in prototype with given desc.)"</span><span class="p">)</span>
|
|
<span class="n">prototype</span><span class="p">[</span><span class="s2">"prototype_desc"</span><span class="p">]</span> <span class="o">=</span> <span class="n">prototype_desc</span>
|
|
<span class="k">if</span> <span class="n">prototype_tags</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="ow">and</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"prototype_tags"</span><span class="p">)</span> <span class="o">!=</span> <span class="n">prototype_tags</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">"(Replacing `prototype_tags` in prototype with given tag(s))"</span><span class="p">)</span>
|
|
<span class="n">prototype</span><span class="p">[</span><span class="s2">"prototype_tags"</span><span class="p">]</span> <span class="o">=</span> <span class="n">prototype_tags</span>
|
|
|
|
<span class="n">string</span> <span class="o">=</span> <span class="s2">""</span>
|
|
<span class="c1"># check for existing prototype (exact match)</span>
|
|
<span class="n">old_prototype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_prototype</span><span class="p">(</span><span class="n">prototype_key</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">diff</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">prototype_diff</span><span class="p">(</span><span class="n">old_prototype</span><span class="p">,</span> <span class="n">prototype</span><span class="p">,</span> <span class="n">homogenize</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span>
|
|
<span class="n">diffstr</span> <span class="o">=</span> <span class="n">spawner</span><span class="o">.</span><span class="n">format_diff</span><span class="p">(</span><span class="n">diff</span><span class="p">)</span>
|
|
<span class="n">new_prototype_detail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_prototype_detail</span><span class="p">(</span><span class="n">prototypes</span><span class="o">=</span><span class="p">[</span><span class="n">prototype</span><span class="p">])</span>
|
|
|
|
<span class="k">if</span> <span class="n">old_prototype</span><span class="p">:</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">diffstr</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|yAlready existing Prototype:|n</span><span class="se">\n</span><span class="si">{new_prototype_detail}</span><span class="se">\n</span><span class="s2">"</span>
|
|
<span class="n">question</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">There seems to be no changes. Do you still want to (re)save? [Y]/N"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">f</span><span class="s1">'|yExisting prototype "</span><span class="si">{prototype_key}</span><span class="s1">" found. Change:|n</span><span class="se">\n</span><span class="si">{diffstr}</span><span class="se">\n</span><span class="s1">'</span>
|
|
<span class="n">f</span><span class="s2">"|yNew changed prototype:|n</span><span class="se">\n</span><span class="si">{new_prototype_detail}</span><span class="s2">"</span>
|
|
<span class="p">)</span>
|
|
<span class="n">question</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"</span><span class="se">\n</span><span class="s2">|yDo you want to apply the change to the existing prototype?|n [Y]/N"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|yCreating new prototype:|n</span><span class="se">\n</span><span class="si">{new_prototype_detail}</span><span class="s2">"</span>
|
|
<span class="n">question</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Do you want to continue saving? [Y]/N"</span>
|
|
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="n">string</span> <span class="o">+</span> <span class="n">question</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"n"</span><span class="p">,</span> <span class="s2">"no"</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">"|rSave cancelled.|n"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># all seems ok. Try to save.</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">prot</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">save_prototype</span><span class="p">(</span><span class="n">prototype</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prot</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">"|rError saving:|R </span><span class="si">{}</span><span class="s2">.|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="k">except</span> <span class="n">protlib</span><span class="o">.</span><span class="n">PermissionError</span> <span class="k">as</span> <span class="n">err</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">"|rError saving:|R </span><span class="si">{}</span><span class="s2">|n"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">err</span><span class="p">))</span>
|
|
<span class="k">return</span>
|
|
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"|gSaved prototype:|n </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">))</span>
|
|
|
|
<span class="c1"># check if we want to update existing objects</span>
|
|
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_update_existing_objects</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">prototype_key</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="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">:</span>
|
|
<span class="c1"># all switches beyond this point gets a common non-arg return</span>
|
|
<span class="n">ncount</span> <span class="o">=</span> <span class="nb">len</span><span class="p">(</span><span class="n">protlib</span><span class="o">.</span><span class="n">search_prototype</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">"Usage: spawn <prototype-key> or {{key: value, ...}}"</span>
|
|
<span class="n">f</span><span class="s2">"</span><span class="se">\n</span><span class="s2"> (</span><span class="si">{ncount}</span><span class="s2"> existing prototypes. Use /list to inspect)"</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"delete"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># remove db-based prototype</span>
|
|
<span class="n">prototype_detail</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_get_prototype_detail</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype_detail</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">string</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|rDeleting prototype:|n</span><span class="se">\n</span><span class="si">{prototype_detail}</span><span class="s2">"</span>
|
|
<span class="n">question</span> <span class="o">=</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">Do you want to continue deleting? [Y]/N"</span>
|
|
<span class="n">answer</span> <span class="o">=</span> <span class="k">yield</span> <span class="p">(</span><span class="n">string</span> <span class="o">+</span> <span class="n">question</span><span class="p">)</span>
|
|
<span class="k">if</span> <span class="n">answer</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span> <span class="ow">in</span> <span class="p">[</span><span class="s2">"n"</span><span class="p">,</span> <span class="s2">"no"</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">"|rDeletion cancelled.|n"</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">success</span> <span class="o">=</span> <span class="n">protlib</span><span class="o">.</span><span class="n">delete_prototype</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">protlib</span><span class="o">.</span><span class="n">PermissionError</span> <span class="k">as</span> <span class="n">err</span><span class="p">:</span>
|
|
<span class="n">retmsg</span> <span class="o">=</span> <span class="n">f</span><span class="s2">"|rError deleting:|R </span><span class="si">{err}</span><span class="s2">|n"</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">retmsg</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="s2">"Deletion successful"</span>
|
|
<span class="k">if</span> <span class="n">success</span>
|
|
<span class="k">else</span> <span class="s2">"Deletion failed (does the prototype exist?)"</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="n">retmsg</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="k">if</span> <span class="s2">"update"</span> <span class="ow">in</span> <span class="bp">self</span><span class="o">.</span><span class="n">switches</span><span class="p">:</span>
|
|
<span class="c1"># update existing prototypes</span>
|
|
<span class="n">prototype_key</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">_update_existing_objects</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">,</span> <span class="n">prototype_key</span><span class="p">)</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># If we get to this point, we use not switches but are trying a</span>
|
|
<span class="c1"># direct creation of an object from a given prototype or -key</span>
|
|
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_parse_prototype</span><span class="p">(</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="p">,</span> <span class="n">expect</span><span class="o">=</span><span class="nb">dict</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">args</span><span class="o">.</span><span class="n">strip</span><span class="p">()</span><span class="o">.</span><span class="n">startswith</span><span class="p">(</span><span class="s2">"{"</span><span class="p">)</span> <span class="k">else</span> <span class="nb">str</span>
|
|
<span class="p">)</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="p">:</span>
|
|
<span class="c1"># this will only let through dicts or strings</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="n">key</span> <span class="o">=</span> <span class="s2">"<unnamed>"</span>
|
|
<span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">prototype</span><span class="p">,</span> <span class="nb">str</span><span class="p">):</span>
|
|
<span class="c1"># A prototype key we are looking to apply</span>
|
|
<span class="n">prototype_key</span> <span class="o">=</span> <span class="n">prototype</span>
|
|
<span class="n">prototype</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_search_prototype</span><span class="p">(</span><span class="n">prototype_key</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="p">:</span>
|
|
<span class="k">return</span>
|
|
|
|
<span class="c1"># proceed to spawning</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="k">for</span> <span class="n">obj</span> <span class="ow">in</span> <span class="n">spawner</span><span class="o">.</span><span class="n">spawn</span><span class="p">(</span><span class="n">prototype</span><span class="p">):</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">"Spawned </span><span class="si">%s</span><span class="s2">."</span> <span class="o">%</span> <span class="n">obj</span><span class="o">.</span><span class="n">get_display_name</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">caller</span><span class="p">))</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">prototype</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"location"</span><span class="p">)</span> <span class="ow">and</span> <span class="ow">not</span> <span class="n">noloc</span><span class="p">:</span>
|
|
<span class="c1"># we don't hardcode the location in the prototype (unless the user</span>
|
|
<span class="c1"># did so manually) - that would lead to it having to be 'removed' every</span>
|
|
<span class="c1"># time we try to update objects with this prototype in the future.</span>
|
|
<span class="n">obj</span><span class="o">.</span><span class="n">location</span> <span class="o">=</span> <span class="n">caller</span><span class="o">.</span><span class="n">location</span>
|
|
<span class="k">except</span> <span class="ne">RuntimeError</span> <span class="k">as</span> <span class="n">err</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="n">err</span><span class="p">)</span></div></div>
|
|
</pre></div>
|
|
|
|
<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>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="building.html">1.0-dev (develop branch)</a></li>
|
|
<li><a href="../../../../../0.9.5/index.html">0.9.5 (master 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="nav-item nav-item-0"><a href="../../../../index.html">Evennia 1.0-dev</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.commands.default.building</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2020, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |