evennia/docs/1.0-dev/_modules/evennia/contrib/mapbuilder.html
2020-12-20 14:36:24 +01:00

597 lines
No EOL
56 KiB
HTML

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>evennia.contrib.mapbuilder &#8212; 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> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" accesskey="U">evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.mapbuilder</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.contrib.mapbuilder</h1><div class="highlight"><pre>
<span></span><span class="c1"># -*- coding: utf-8 -*-</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd">Evennia World Builder</span>
<span class="sd">Contribution - Cloud_Keeper 2016</span>
<span class="sd">Build a map from a 2D ASCII map.</span>
<span class="sd">This is a command which takes two inputs:</span>
<span class="sd">≈≈≈≈≈</span>
<span class="sd">≈♣n♣≈ MAP_LEGEND = {(&quot;&quot;, &quot;&quot;): build_forest,</span>
<span class="sd">≈∩▲∩≈ (&quot;&quot;, &quot;n&quot;): build_mountains,</span>
<span class="sd">≈♠n♠≈ (&quot;&quot;): build_temple}</span>
<span class="sd">≈≈≈≈≈</span>
<span class="sd">A string of ASCII characters representing a map and a dictionary of functions</span>
<span class="sd">containing build instructions. The characters of the map are iterated over and</span>
<span class="sd">compared to a list of trigger characters. When a match is found the</span>
<span class="sd">corresponding function is executed generating the rooms, exits and objects as</span>
<span class="sd">defined by the users build instructions. If a character is not a match to</span>
<span class="sd">a provided trigger character (including spaces) it is simply skipped and the</span>
<span class="sd">process continues.</span>
<span class="sd">For instance, the above map represents a temple (▲) amongst mountains (n,∩)</span>
<span class="sd">in a forest (♣,♠) on an island surrounded by water (≈). Each character on the</span>
<span class="sd">first line is iterated over but as there is no match with our MAP_LEGEND it</span>
<span class="sd">is skipped. On the second line it finds &quot;&quot; which is a match and so the</span>
<span class="sd">`build_forest` function is called. Next the `build_mountains` function is</span>
<span class="sd">called and so on until the map is completed. Building instructions are passed</span>
<span class="sd">the following arguments:</span>
<span class="sd"> x - The rooms position on the maps x axis</span>
<span class="sd"> y - The rooms position on the maps y axis</span>
<span class="sd"> caller - The account calling the command</span>
<span class="sd"> iteration - The current iterations number (0, 1 or 2)</span>
<span class="sd"> room_dict - A dictionary containing room references returned by build</span>
<span class="sd"> functions where tuple coordinates are the keys (x, y).</span>
<span class="sd"> ie room_dict[(2, 2)] will return the temple room above.</span>
<span class="sd">Building functions should return the room they create. By default these rooms</span>
<span class="sd">are used to create exits between valid adjacent rooms to the north, south,</span>
<span class="sd">east and west directions. This behaviour can turned off with the use of switch</span>
<span class="sd">arguments. In addition to turning off automatic exit generation the switches</span>
<span class="sd">allow the map to be iterated over a number of times. This is important for</span>
<span class="sd">something like custom exit building. Exits require a reference to both the</span>
<span class="sd">exits location and the exits destination. During the first iteration it is</span>
<span class="sd">possible that an exit is created pointing towards a destination that</span>
<span class="sd">has not yet been created resulting in error. By iterating over the map twice</span>
<span class="sd">the rooms can be created on the first iteration and room reliant code can be</span>
<span class="sd">be used on the second iteration. The iteration number and a dictionary of</span>
<span class="sd">references to rooms previously created is passed to the build commands.</span>
<span class="sd">Use by importing and including the command in your default_cmdsets module.</span>
<span class="sd">For example:</span>
<span class="sd"> # mygame/commands/default_cmdsets.py</span>
<span class="sd"> from evennia.contrib import mapbuilder</span>
<span class="sd"> ...</span>
<span class="sd"> self.add(mapbuilder.CmdMapBuilder())</span>
<span class="sd">You then call the command in-game using the path to the MAP and MAP_LEGEND vars</span>
<span class="sd">The path you provide is relative to the evennia or mygame folder.</span>
<span class="sd">Usage:</span>
<span class="sd"> @mapbuilder[/switch] &lt;path.to.file.MAPNAME&gt; &lt;path.to.file.MAP_LEGEND&gt;</span>
<span class="sd">Switches:</span>
<span class="sd"> one - execute build instructions once without automatic exit creation.</span>
<span class="sd"> two - execute build instructions twice without automatic exit creation.</span>
<span class="sd">Example:</span>
<span class="sd"> @mapbuilder world.gamemap.MAP world.maplegend.MAP_LEGEND</span>
<span class="sd"> @mapbuilder evennia.contrib.mapbuilder.EXAMPLE1_MAP EXAMPLE1_LEGEND</span>
<span class="sd"> @mapbuilder/two evennia.contrib.mapbuilder.EXAMPLE2_MAP EXAMPLE2_LEGEND</span>
<span class="sd"> (Legend path defaults to map path)</span>
<span class="sd">Below are two examples showcasing the use of automatic exit generation and</span>
<span class="sd">custom exit generation. Whilst located, and can be used, from this module for</span>
<span class="sd">convenience The below example code should be in mymap.py in mygame/world.</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
<span class="kn">from</span> <span class="nn">evennia.utils</span> <span class="kn">import</span> <span class="n">utils</span>
<span class="c1"># ---------- EXAMPLE 1 ---------- #</span>
<span class="c1"># @mapbuilder evennia.contrib.mapbuilder.EXAMPLE1_MAP EXAMPLE1_LEGEND</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="c1"># Add the necessary imports for your instructions here.</span>
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">create_object</span>
<span class="kn">from</span> <span class="nn">typeclasses</span> <span class="kn">import</span> <span class="n">rooms</span><span class="p">,</span> <span class="n">exits</span>
<span class="kn">from</span> <span class="nn">random</span> <span class="kn">import</span> <span class="n">randint</span>
<span class="kn">import</span> <span class="nn">random</span>
<span class="c1"># A map with a temple (▲) amongst mountains (n,∩) in a forest (♣,♠) on an</span>
<span class="c1"># island surrounded by water (≈). By giving no instructions for the water</span>
<span class="c1"># characters we effectively skip it and create no rooms for those squares.</span>
<span class="n">EXAMPLE1_MAP</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
<span class="s2">≈≈≈≈≈</span>
<span class="s2">≈♣n♣≈</span>
<span class="s2">≈∩▲∩≈</span>
<span class="s2">≈♠n♠≈</span>
<span class="s2">≈≈≈≈≈</span>
<span class="s2">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="example1_build_forest"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.example1_build_forest">[docs]</a><span class="k">def</span> <span class="nf">example1_build_forest</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A basic example of build instructions. Make sure to include **kwargs</span>
<span class="sd"> in the arguments and return an instance of the room for exit generation.&quot;&quot;&quot;</span>
<span class="c1"># Create a room and provide a basic description.</span>
<span class="n">room</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">rooms</span><span class="o">.</span><span class="n">Room</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;forest&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">))</span>
<span class="n">room</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">&quot;Basic forest room.&quot;</span>
<span class="c1"># Send a message to the account</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;caller&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">room</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">room</span><span class="o">.</span><span class="n">dbref</span><span class="p">)</span>
<span class="c1"># This is generally mandatory.</span>
<span class="k">return</span> <span class="n">room</span></div>
<div class="viewcode-block" id="example1_build_mountains"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.example1_build_mountains">[docs]</a><span class="k">def</span> <span class="nf">example1_build_mountains</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A room that is a little more advanced&quot;&quot;&quot;</span>
<span class="c1"># Create the room.</span>
<span class="n">room</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">rooms</span><span class="o">.</span><span class="n">Room</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;mountains&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">))</span>
<span class="c1"># Generate a description by randomly selecting an entry from a list.</span>
<span class="n">room_desc</span> <span class="o">=</span> <span class="p">[</span>
<span class="s2">&quot;Mountains as far as the eye can see&quot;</span><span class="p">,</span>
<span class="s2">&quot;Your path is surrounded by sheer cliffs&quot;</span><span class="p">,</span>
<span class="s2">&quot;Haven&#39;t you seen that rock before?&quot;</span><span class="p">,</span>
<span class="p">]</span>
<span class="n">room</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">random</span><span class="o">.</span><span class="n">choice</span><span class="p">(</span><span class="n">room_desc</span><span class="p">)</span>
<span class="c1"># Create a random number of objects to populate the room.</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">randint</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="mi">3</span><span class="p">)):</span>
<span class="n">rock</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">key</span><span class="o">=</span><span class="s2">&quot;Rock&quot;</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="n">room</span><span class="p">)</span>
<span class="n">rock</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">&quot;An ordinary rock.&quot;</span>
<span class="c1"># Send a message to the account</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;caller&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">room</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">room</span><span class="o">.</span><span class="n">dbref</span><span class="p">)</span>
<span class="c1"># This is generally mandatory.</span>
<span class="k">return</span> <span class="n">room</span></div>
<div class="viewcode-block" id="example1_build_temple"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.example1_build_temple">[docs]</a><span class="k">def</span> <span class="nf">example1_build_temple</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A unique room that does not need to be as general&quot;&quot;&quot;</span>
<span class="c1"># Create the room.</span>
<span class="n">room</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">rooms</span><span class="o">.</span><span class="n">Room</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;temple&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">))</span>
<span class="c1"># Set the description.</span>
<span class="n">room</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="p">(</span>
<span class="s2">&quot;In what, from the outside, appeared to be a grand and &quot;</span>
<span class="s2">&quot;ancient temple you&#39;ve somehow found yourself in the the &quot;</span>
<span class="s2">&quot;Evennia Inn! It consists of one large room filled with &quot;</span>
<span class="s2">&quot;tables. The bardisk extends along the east wall, where &quot;</span>
<span class="s2">&quot;multiple barrels and bottles line the shelves. The &quot;</span>
<span class="s2">&quot;barkeep seems busy handing out ale and chatting with &quot;</span>
<span class="s2">&quot;the patrons, which are a rowdy and cheerful lot, &quot;</span>
<span class="s2">&quot;keeping the sound level only just below thunderous. &quot;</span>
<span class="s2">&quot;This is a rare spot of mirth on this dread moor.&quot;</span>
<span class="p">)</span>
<span class="c1"># Send a message to the account</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;caller&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">room</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">room</span><span class="o">.</span><span class="n">dbref</span><span class="p">)</span>
<span class="c1"># This is generally mandatory.</span>
<span class="k">return</span> <span class="n">room</span></div>
<span class="c1"># Include your trigger characters and build functions in a legend dict.</span>
<span class="n">EXAMPLE1_LEGEND</span> <span class="o">=</span> <span class="p">{</span>
<span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">):</span> <span class="n">example1_build_forest</span><span class="p">,</span>
<span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;n&quot;</span><span class="p">):</span> <span class="n">example1_build_mountains</span><span class="p">,</span>
<span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">):</span> <span class="n">example1_build_temple</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># ---------- EXAMPLE 2 ---------- #</span>
<span class="c1"># @mapbuilder/two evennia.contrib.mapbuilder.EXAMPLE2_MAP EXAMPLE2_LEGEND</span>
<span class="c1"># -*- coding: utf-8 -*-</span>
<span class="c1"># Add the necessary imports for your instructions here.</span>
<span class="c1"># from evennia import create_object</span>
<span class="c1"># from typeclasses import rooms, exits</span>
<span class="c1"># from evennia.utils import utils</span>
<span class="c1"># from random import randint</span>
<span class="c1"># import random</span>
<span class="c1"># This is the same layout as Example 1 but included are characters for exits.</span>
<span class="c1"># We can use these characters to determine which rooms should be connected.</span>
<span class="n">EXAMPLE2_MAP</span> <span class="o">=</span> <span class="s2">&quot;&quot;&quot;</span><span class="se">\</span>
<span class="s2">≈ ≈ ≈ ≈ ≈</span>
<span class="s2">≈ ♣-♣-♣ ≈</span>
<span class="s2"> | |</span>
<span class="s2">≈ ♣ ♣ ♣ ≈</span>
<span class="s2"> | | |</span>
<span class="s2">≈ ♣-♣-♣ ≈</span>
<span class="s2">≈ ≈ ≈ ≈ ≈</span>
<span class="s2">&quot;&quot;&quot;</span>
<div class="viewcode-block" id="example2_build_forest"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.example2_build_forest">[docs]</a><span class="k">def</span> <span class="nf">example2_build_forest</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;A basic room&quot;&quot;&quot;</span>
<span class="c1"># If on anything other than the first iteration - Do nothing.</span>
<span class="k">if</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;iteration&quot;</span><span class="p">]</span> <span class="o">&gt;</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span> <span class="kc">None</span>
<span class="n">room</span> <span class="o">=</span> <span class="n">create_object</span><span class="p">(</span><span class="n">rooms</span><span class="o">.</span><span class="n">Room</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;forest&quot;</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="n">y</span><span class="p">))</span>
<span class="n">room</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">&quot;Basic forest room.&quot;</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;caller&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">room</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &quot;</span> <span class="o">+</span> <span class="n">room</span><span class="o">.</span><span class="n">dbref</span><span class="p">)</span>
<span class="k">return</span> <span class="n">room</span></div>
<div class="viewcode-block" id="example2_build_verticle_exit"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.example2_build_verticle_exit">[docs]</a><span class="k">def</span> <span class="nf">example2_build_verticle_exit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Creates two exits to and from the two rooms north and south.&quot;&quot;&quot;</span>
<span class="c1"># If on the first iteration - Do nothing.</span>
<span class="k">if</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;iteration&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">north_room</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;room_dict&quot;</span><span class="p">][(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)]</span>
<span class="n">south_room</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;room_dict&quot;</span><span class="p">][(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]</span>
<span class="c1"># create exits in the rooms</span>
<span class="n">create_object</span><span class="p">(</span>
<span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;south&quot;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;s&quot;</span><span class="p">],</span> <span class="n">location</span><span class="o">=</span><span class="n">north_room</span><span class="p">,</span> <span class="n">destination</span><span class="o">=</span><span class="n">south_room</span>
<span class="p">)</span>
<span class="n">create_object</span><span class="p">(</span>
<span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;north&quot;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;n&quot;</span><span class="p">],</span> <span class="n">location</span><span class="o">=</span><span class="n">south_room</span><span class="p">,</span> <span class="n">destination</span><span class="o">=</span><span class="n">north_room</span>
<span class="p">)</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;caller&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Connected: &quot;</span> <span class="o">+</span> <span class="n">north_room</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &amp; &quot;</span> <span class="o">+</span> <span class="n">south_room</span><span class="o">.</span><span class="n">key</span><span class="p">)</span></div>
<div class="viewcode-block" id="example2_build_horizontal_exit"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.example2_build_horizontal_exit">[docs]</a><span class="k">def</span> <span class="nf">example2_build_horizontal_exit</span><span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;Creates two exits to and from the two rooms east and west.&quot;&quot;&quot;</span>
<span class="c1"># If on the first iteration - Do nothing.</span>
<span class="k">if</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;iteration&quot;</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="k">return</span>
<span class="n">west_room</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;room_dict&quot;</span><span class="p">][(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span>
<span class="n">east_room</span> <span class="o">=</span> <span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;room_dict&quot;</span><span class="p">][(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span>
<span class="n">create_object</span><span class="p">(</span><span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;east&quot;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;e&quot;</span><span class="p">],</span> <span class="n">location</span><span class="o">=</span><span class="n">west_room</span><span class="p">,</span> <span class="n">destination</span><span class="o">=</span><span class="n">east_room</span><span class="p">)</span>
<span class="n">create_object</span><span class="p">(</span><span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span> <span class="n">key</span><span class="o">=</span><span class="s2">&quot;west&quot;</span><span class="p">,</span> <span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;w&quot;</span><span class="p">],</span> <span class="n">location</span><span class="o">=</span><span class="n">east_room</span><span class="p">,</span> <span class="n">destination</span><span class="o">=</span><span class="n">west_room</span><span class="p">)</span>
<span class="n">kwargs</span><span class="p">[</span><span class="s2">&quot;caller&quot;</span><span class="p">]</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Connected: &quot;</span> <span class="o">+</span> <span class="n">west_room</span><span class="o">.</span><span class="n">key</span> <span class="o">+</span> <span class="s2">&quot; &amp; &quot;</span> <span class="o">+</span> <span class="n">east_room</span><span class="o">.</span><span class="n">key</span><span class="p">)</span></div>
<span class="c1"># Include your trigger characters and build functions in a legend dict.</span>
<span class="n">EXAMPLE2_LEGEND</span> <span class="o">=</span> <span class="p">{</span>
<span class="p">(</span><span class="s2">&quot;&quot;</span><span class="p">,</span> <span class="s2">&quot;&quot;</span><span class="p">):</span> <span class="n">example2_build_forest</span><span class="p">,</span>
<span class="p">(</span><span class="s2">&quot;|&quot;</span><span class="p">):</span> <span class="n">example2_build_verticle_exit</span><span class="p">,</span>
<span class="p">(</span><span class="s2">&quot;-&quot;</span><span class="p">):</span> <span class="n">example2_build_horizontal_exit</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># ---------- END OF EXAMPLES ---------- #</span>
<span class="n">COMMAND_DEFAULT_CLASS</span> <span class="o">=</span> <span class="n">utils</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"># Helper function for readability.</span>
<span class="k">def</span> <span class="nf">_map_to_list</span><span class="p">(</span><span class="n">game_map</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Splits multi line map string into list of rows.</span>
<span class="sd"> Args:</span>
<span class="sd"> game_map (str): An ASCII map</span>
<span class="sd"> Returns:</span>
<span class="sd"> list (list): The map split into rows</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="k">return</span> <span class="n">game_map</span><span class="o">.</span><span class="n">split</span><span class="p">(</span><span class="s2">&quot;</span><span class="se">\n</span><span class="s2">&quot;</span><span class="p">)</span>
<div class="viewcode-block" id="build_map"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.build_map">[docs]</a><span class="k">def</span> <span class="nf">build_map</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">game_map</span><span class="p">,</span> <span class="n">legend</span><span class="p">,</span> <span class="n">iterations</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="n">build_exits</span><span class="o">=</span><span class="kc">True</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Receives the fetched map and legend vars provided by the player.</span>
<span class="sd"> Args:</span>
<span class="sd"> caller (Object): The creator of the map.</span>
<span class="sd"> game_map (str): An ASCII map string.</span>
<span class="sd"> legend (dict): Mapping of map symbols to object types.</span>
<span class="sd"> iterations (int): The number of iteration passes.</span>
<span class="sd"> build_exits (bool): Create exits between new rooms.</span>
<span class="sd"> Notes:</span>
<span class="sd"> The map</span>
<span class="sd"> is iterated over character by character, comparing it to the trigger</span>
<span class="sd"> characters in the legend var and executing the build instructions on</span>
<span class="sd"> finding a match. The map is iterated over according to the `iterations`</span>
<span class="sd"> value and exits are optionally generated between adjacent rooms according</span>
<span class="sd"> to the `build_exits` value.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="c1"># Split map string to list of rows and create reference list.</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Creating Map...&quot;</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">game_map</span><span class="p">)</span>
<span class="n">game_map</span> <span class="o">=</span> <span class="n">_map_to_list</span><span class="p">(</span><span class="n">game_map</span><span class="p">)</span>
<span class="c1"># Create a reference dictionary which be passed to build functions and</span>
<span class="c1"># will store obj returned by build functions so objs can be referenced.</span>
<span class="n">room_dict</span> <span class="o">=</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">&quot;Creating Landmass...&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">iteration</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">iterations</span><span class="p">):</span>
<span class="k">for</span> <span class="n">y</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">game_map</span><span class="p">)):</span>
<span class="k">for</span> <span class="n">x</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="nb">len</span><span class="p">(</span><span class="n">game_map</span><span class="p">[</span><span class="n">y</span><span class="p">])):</span>
<span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">legend</span><span class="p">:</span>
<span class="c1"># obs - we must use == for strings</span>
<span class="k">if</span> <span class="n">game_map</span><span class="p">[</span><span class="n">y</span><span class="p">][</span><span class="n">x</span><span class="p">]</span> <span class="o">==</span> <span class="n">key</span><span class="p">:</span>
<span class="n">room</span> <span class="o">=</span> <span class="n">legend</span><span class="p">[</span><span class="n">key</span><span class="p">](</span>
<span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">iteration</span><span class="o">=</span><span class="n">iteration</span><span class="p">,</span> <span class="n">room_dict</span><span class="o">=</span><span class="n">room_dict</span><span class="p">,</span> <span class="n">caller</span><span class="o">=</span><span class="n">caller</span>
<span class="p">)</span>
<span class="k">if</span> <span class="n">iteration</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
<span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">)]</span> <span class="o">=</span> <span class="n">room</span>
<span class="k">if</span> <span class="n">build_exits</span><span class="p">:</span>
<span class="c1"># Creating exits. Assumes single room object in dict entry</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="s2">&quot;Connecting Areas...&quot;</span><span class="p">)</span>
<span class="k">for</span> <span class="n">loc_key</span><span class="p">,</span> <span class="n">location</span> <span class="ow">in</span> <span class="n">room_dict</span><span class="o">.</span><span class="n">items</span><span class="p">():</span>
<span class="n">x</span> <span class="o">=</span> <span class="n">loc_key</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">y</span> <span class="o">=</span> <span class="n">loc_key</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="c1"># north</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="ow">in</span> <span class="n">room_dict</span><span class="p">:</span>
<span class="k">if</span> <span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)]:</span>
<span class="n">create_object</span><span class="p">(</span>
<span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="s2">&quot;north&quot;</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;n&quot;</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">destination</span><span class="o">=</span><span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)],</span>
<span class="p">)</span>
<span class="c1"># east</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">room_dict</span><span class="p">:</span>
<span class="k">if</span> <span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)]:</span>
<span class="n">create_object</span><span class="p">(</span>
<span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="s2">&quot;east&quot;</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;e&quot;</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">destination</span><span class="o">=</span><span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span> <span class="o">+</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)],</span>
<span class="p">)</span>
<span class="c1"># south</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="ow">in</span> <span class="n">room_dict</span><span class="p">:</span>
<span class="k">if</span> <span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)]:</span>
<span class="n">create_object</span><span class="p">(</span>
<span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="s2">&quot;south&quot;</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;s&quot;</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">destination</span><span class="o">=</span><span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)],</span>
<span class="p">)</span>
<span class="c1"># west</span>
<span class="k">if</span> <span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)</span> <span class="ow">in</span> <span class="n">room_dict</span><span class="p">:</span>
<span class="k">if</span> <span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</span><span class="p">)]:</span>
<span class="n">create_object</span><span class="p">(</span>
<span class="n">exits</span><span class="o">.</span><span class="n">Exit</span><span class="p">,</span>
<span class="n">key</span><span class="o">=</span><span class="s2">&quot;west&quot;</span><span class="p">,</span>
<span class="n">aliases</span><span class="o">=</span><span class="p">[</span><span class="s2">&quot;w&quot;</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">destination</span><span class="o">=</span><span class="n">room_dict</span><span class="p">[(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">,</span> <span class="n">y</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">&quot;Map Created.&quot;</span><span class="p">)</span></div>
<span class="c1"># access command</span>
<div class="viewcode-block" id="CmdMapBuilder"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.CmdMapBuilder">[docs]</a><span class="k">class</span> <span class="nc">CmdMapBuilder</span><span class="p">(</span><span class="n">COMMAND_DEFAULT_CLASS</span><span class="p">):</span>
<span class="sd">&quot;&quot;&quot;</span>
<span class="sd"> Build a map from a 2D ASCII map.</span>
<span class="sd"> Usage:</span>
<span class="sd"> @mapbuilder[/switch] &lt;path.to.file.MAPNAME&gt; &lt;path.to.file.MAP_LEGEND&gt;</span>
<span class="sd"> Switches:</span>
<span class="sd"> one - execute build instructions once without automatic exit creation</span>
<span class="sd"> two - execute build instructions twice without automatic exit creation</span>
<span class="sd"> Example:</span>
<span class="sd"> @mapbuilder world.gamemap.MAP world.maplegend.MAP_LEGEND</span>
<span class="sd"> @mapbuilder evennia.contrib.mapbuilder.EXAMPLE1_MAP EXAMPLE1_LEGEND</span>
<span class="sd"> @mapbuilder/two evennia.contrib.mapbuilder.EXAMPLE2_MAP EXAMPLE2_LEGEND</span>
<span class="sd"> (Legend path defaults to map path)</span>
<span class="sd"> This is a command which takes two inputs:</span>
<span class="sd"> A string of ASCII characters representing a map and a dictionary of</span>
<span class="sd"> functions containing build instructions. The characters of the map are</span>
<span class="sd"> iterated over and compared to a list of trigger characters. When a match</span>
<span class="sd"> is found the corresponding function is executed generating the rooms,</span>
<span class="sd"> exits and objects as defined by the users build instructions. If a</span>
<span class="sd"> character is not a match to a provided trigger character (including spaces)</span>
<span class="sd"> it is simply skipped and the process continues. By default exits are</span>
<span class="sd"> automatically generated but is turned off by switches which also determines</span>
<span class="sd"> how many times the map is iterated over.</span>
<span class="sd"> &quot;&quot;&quot;</span>
<span class="n">key</span> <span class="o">=</span> <span class="s2">&quot;@mapbuilder&quot;</span>
<span class="n">aliases</span> <span class="o">=</span> <span class="p">[</span><span class="s2">&quot;@buildmap&quot;</span><span class="p">]</span>
<span class="n">locks</span> <span class="o">=</span> <span class="s2">&quot;cmd:superuser()&quot;</span>
<span class="n">help_category</span> <span class="o">=</span> <span class="s2">&quot;Building&quot;</span>
<div class="viewcode-block" id="CmdMapBuilder.func"><a class="viewcode-back" href="../../../api/evennia.contrib.mapbuilder.html#evennia.contrib.mapbuilder.CmdMapBuilder.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">&quot;&quot;&quot;Starts the processor.&quot;&quot;&quot;</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="o">.</span><span class="n">split</span><span class="p">()</span>
<span class="c1"># Check if arguments passed.</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="nb">len</span><span class="p">(</span><span class="n">args</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">2</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">&quot;Usage: @mapbuilder &lt;path.to.module.VARNAME&gt; &quot;</span> <span class="s2">&quot;&lt;path.to.module.MAP_LEGEND&gt;&quot;</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># Set up base variables.</span>
<span class="n">game_map</span> <span class="o">=</span> <span class="kc">None</span>
<span class="n">legend</span> <span class="o">=</span> <span class="kc">None</span>
<span class="c1"># OBTAIN MAP FROM MODULE</span>
<span class="c1"># Breaks down path_to_map into [PATH, VARIABLE]</span>
<span class="n">path_to_map</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
<span class="n">path_to_map</span> <span class="o">=</span> <span class="n">path_to_map</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># Retrieves map variable from module or raises error.</span>
<span class="n">game_map</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">variable_from_module</span><span class="p">(</span><span class="n">path_to_map</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">path_to_map</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">game_map</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Command Aborted!</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Path to map variable failed.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Usage: @mapbuilder &lt;path.to.module.&quot;</span>
<span class="s2">&quot;VARNAME&gt; &lt;path.to.module.MAP_LEGEND&gt;&quot;</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
<span class="c1"># Or relays error message if fails.</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># OBTAIN MAP_LEGEND FROM MODULE</span>
<span class="c1"># Breaks down path_to_legend into [PATH, VARIABLE]</span>
<span class="n">path_to_legend</span> <span class="o">=</span> <span class="n">args</span><span class="p">[</span><span class="mi">1</span><span class="p">]</span>
<span class="n">path_to_legend</span> <span class="o">=</span> <span class="n">path_to_legend</span><span class="o">.</span><span class="n">rsplit</span><span class="p">(</span><span class="s2">&quot;.&quot;</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
<span class="c1"># If no path given default to path_to_map&#39;s path</span>
<span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">path_to_legend</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span>
<span class="n">path_to_legend</span><span class="o">.</span><span class="n">insert</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span> <span class="n">path_to_map</span><span class="p">[</span><span class="mi">0</span><span class="p">])</span>
<span class="k">try</span><span class="p">:</span>
<span class="c1"># Retrieves legend variable from module or raises error if fails.</span>
<span class="n">legend</span> <span class="o">=</span> <span class="n">utils</span><span class="o">.</span><span class="n">variable_from_module</span><span class="p">(</span><span class="n">path_to_legend</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">path_to_legend</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">legend</span><span class="p">:</span>
<span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span>
<span class="s2">&quot;Command Aborted!</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Path to legend variable failed.</span><span class="se">\n</span><span class="s2">&quot;</span>
<span class="s2">&quot;Usage: @mapbuilder &lt;path.to.module.&quot;</span>
<span class="s2">&quot;VARNAME&gt; &lt;path.to.module.MAP_LEGEND&gt;&quot;</span>
<span class="p">)</span>
<span class="k">except</span> <span class="ne">Exception</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
<span class="c1"># Or relays error message if fails.</span>
<span class="n">caller</span><span class="o">.</span><span class="n">msg</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span>
<span class="k">return</span>
<span class="c1"># Set up build_map arguments from switches</span>
<span class="n">iterations</span> <span class="o">=</span> <span class="mi">1</span>
<span class="n">build_exits</span> <span class="o">=</span> <span class="kc">True</span>
<span class="k">if</span> <span class="s2">&quot;one&quot;</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">build_exits</span> <span class="o">=</span> <span class="kc">False</span>
<span class="k">if</span> <span class="s2">&quot;two&quot;</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">iterations</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">build_exits</span> <span class="o">=</span> <span class="kc">False</span>
<span class="c1"># Pass map and legend to the build function.</span>
<span class="n">build_map</span><span class="p">(</span><span class="n">caller</span><span class="p">,</span> <span class="n">game_map</span><span class="p">,</span> <span class="n">legend</span><span class="p">,</span> <span class="n">iterations</span><span class="p">,</span> <span class="n">build_exits</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="mapbuilder.html">1.0-dev (develop branch)</a></li>
<li><a href="../../../../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
</ul>
</div>
</div>
<div class="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> &#187;</li>
<li class="nav-item nav-item-1"><a href="../../index.html" >Module code</a> &#187;</li>
<li class="nav-item nav-item-2"><a href="../../evennia.html" >evennia</a> &#187;</li>
<li class="nav-item nav-item-this"><a href="">evennia.contrib.mapbuilder</a></li>
</ul>
<div class="develop">develop branch</div>
</div>
<div class="footer" role="contentinfo">
&#169; Copyright 2020, The Evennia developer community.
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
</div>
</body>
</html>