<li><p><em><aclass="reference internal"href="#account"><spanclass="std std-doc">account</span></a></em> - the player’s account on the game</p></li>
<li><p><em><aclass="reference internal"href="#admin-site"><spanclass="std std-doc">admin-site</span></a></em> - the Django web page for manipulating the database</p></li>
<li><p><em><aclass="reference internal"href="#attribute"><spanclass="std std-doc">attribute</span></a></em> - persistent, custom data stored on typeclasses</p></li>
<li><p><em><aclass="reference internal"href="#channel"><spanclass="std std-doc">channel</span></a></em> - game communication channels</p></li>
<li><p><em><aclass="reference internal"href="#character"><spanclass="std std-doc">character</span></a></em> - the player’s avatar in the game, controlled from
<li><p><em><aclass="reference internal"href="#contrib"><spanclass="std std-doc">contrib</span></a></em> - a term used for optional code contributed by the community.</p></li>
<li><p><em><aclass="reference internal"href="#core"><spanclass="std std-doc">core</span></a></em> - a term used for the code distributed with Evennia proper</p></li>
<li><p><em><aclass="reference internal"href="#django"><spanclass="std std-doc">django</span></a></em> - web framework Evennia uses for database access and web integration</p></li>
<li><p><em><aclass="reference internal"href="#field"><spanclass="std std-doc">field</span></a></em> - a <em><aclass="reference internal"href="#typeclass"><spanclass="std std-doc">typeclass</span></a></em> property representing a database
<li><p><em><aclass="reference internal"href="#git"><spanclass="std std-doc">git</span></a></em> - the version-control system we use</p></li>
<li><p><em><aclass="reference internal"href="#github"><spanclass="std std-doc">github</span></a></em> - the online hosting of our source code</p></li>
<li><p><em><aclass="reference internal"href="#migrate"><spanclass="std std-doc">migrate</span></a></em> - updating the database schema</p></li>
<li><p><em><aclass="reference internal"href="#multisession-mode"><spanclass="std std-doc">multisession mode`</span></a></em> - a setting defining how users connect to Evennia</p></li>
<li><p><em><aclass="reference internal"href="#object"><spanclass="std std-doc">object</span></a></em> - Python instance, general term or in-game
<li><p><em><aclass="reference internal"href="#puppet"><spanclass="std std-doc">puppet</span></a></em> - when an <aclass="reference internal"href="#account"><spanclass="std std-doc">account</span></a> controls an in-game
<li><p><em><aclass="reference internal"href="#property"><spanclass="std std-doc">property</span></a></em> - a python property</p></li>
<li><p><em>evenv</em> - see <em><aclass="reference internal"href="#virtualenv"><spanclass="std std-doc">virtualenv</span></a></em></p></li>
<li><p><em><aclass="reference internal"href="#repository"><spanclass="std std-doc">repository</span></a></em> - a store of source code + source history</p></li>
<li><p><em><aclass="reference internal"href="#script"><spanclass="std std-doc">script</span></a></em> - a building block for custom storage, systems and time-keepint</p></li>
<li><p><em><aclass="reference internal"href="#session"><spanclass="std std-doc">session</span></a></em> - represents one client connection</p></li>
<li><p><em><aclass="reference internal"href="#ticker"><spanclass="std std-doc">ticker</span></a></em> - Allows to run events on a steady ‘tick’</p></li>
<li><p><em><aclass="reference internal"href="#twisted"><spanclass="std std-doc">twisted</span></a></em> - networking engine responsible for Evennia’s event loop and
<li><p><em>upstream</em> - see <em><aclass="reference internal"href="#github"><spanclass="std std-doc">github</span></a></em></p></li>
<li><p><em><aclass="reference internal"href="#virtualenv"><spanclass="std std-doc">virtualenv</span></a></em> - a Python program and way to make an isolated Python install</p></li>
<p>The term ‘account’ refers to the <aclass="reference internal"href="#account"><spanclass="std std-doc">player’s</span></a> unique account on the game. It is
represented by the <codeclass="docutils literal notranslate"><spanclass="pre">Account</span></code><aclass="reference internal"href="#typeclass"><spanclass="std std-doc">typeclass</span></a> and holds things like email, password,
<aclass="reference internal"href="#puppet"><spanclass="std std-doc">puppet</span></a> one (or more, depending on game mode) <aclass="reference internal"href="#character"><spanclass="std std-doc">Characters</span></a> in
<p>In the default <aclass="reference internal"href="Components/Sessions.html#multisession-mode"><spanclass="std std-doc">multisession mode</span></a> of Evennia, you immediately start
<p>This usually refers to <aclass="reference internal"href="#django"><spanclass="std std-doc">Django’s</span></a><em>Admin site</em> or database-administration web page
(<aclass="reference external"href="https://docs.djangoproject.com/en/2.1/ref/contrib/admin/">link to Django docs</a>). The admin site is
an automatically generated web interface to the database (it can be customized extensively). It’s
reachable from the <codeclass="docutils literal notranslate"><spanclass="pre">admin</span></code> link on the default Evennia website you get with your server.</p>
<p>The term <em>Attribute</em> should not be confused with (<aclass="reference internal"href="#property"><spanclass="std std-doc">properties</span></a> or
<aclass="reference internal"href="#field"><spanclass="std std-doc">fields</span></a>. The <codeclass="docutils literal notranslate"><spanclass="pre">Attribute</span></code> represents arbitrary pieces of data that can be attached
to any <aclass="reference internal"href="#typeclass"><spanclass="std std-doc">typeclassed</span></a> entity in Evennia. Attributes allows storing new persistent
<aclass="reference internal"href="#account"><spanclass="std std-doc">Accounts</span></a>, for out-of-game communication but could also be <aclass="reference internal"href="#character"><spanclass="std std-doc">Objects (usually
Characters)</span></a> if one wanted to adopt Channels for things like in-game walkie-
talkies or phone systems. It is represented by the <codeclass="docutils literal notranslate"><spanclass="pre">Channel</span></code> typeclass. <aclass="reference internal"href="Components/Channels.html"><spanclass="doc std std-doc">You can read more about the
<p>The <em>Character</em> is the term we use for the default avatar being <aclass="reference internal"href="#puppet"><spanclass="std std-doc">puppeted</span></a> by the
<aclass="reference internal"href="#account"><spanclass="std std-doc">account</span></a> in the game world. It is represented by the <codeclass="docutils literal notranslate"><spanclass="pre">Character</span></code> typeclass (which
is a child of <aclass="reference internal"href="#object"><spanclass="std std-doc">Object</span></a>). Many developers use children of this class to represent
monsters and other NPCs. You can <aclass="reference internal"href="Components/Objects.html#subclasses-of-object"><spanclass="std std-doc">read more about it here</span></a>.</p>
other one is <aclass="reference internal"href="#twisted"><spanclass="std std-doc">Twisted</span></a>). Evennia uses Django for two main things - to map all
<aclass="reference internal"href="#typeclass"><spanclass="std std-doc">typeclasses</span></a>. But should you need the power of Django you can always get it.
offered by Evennia’s <aclass="reference internal"href="Howto/Starting/Part1/Searching-Things.html"><spanclass="doc std std-doc">default search functions</span></a>. One will then need
new-web-page). Django also comes with the <aclass="reference internal"href="#admin-site"><spanclass="std std-doc">admin site</span></a>, which automatically
<aclass="reference internal"href="#contrib"><spanclass="std std-doc">contribs</span></a> directory. It can sometimes come up in code reviews, such as</p>
<h2><em>contrib</em><aclass="headerlink"href="#contrib"title="Permalink to this headline">¶</a></h2>
<p>Game-specific code and examples are distributed in evennia’s <aclass="reference internal"href="Contribs/Contrib-Overview.html"><spanclass="doc std std-doc">contribs/</span></a> folder.
This is game-specific, optional code created by the Evennia community.</p>
<p>A <em>field</em> or <em>database field</em> in Evennia refers to a <aclass="reference internal"href="#property"><spanclass="std std-doc">property</span></a> on a
<aclass="reference internal"href="#typeclass"><spanclass="std std-doc">typeclass</span></a> directly linked to an underlying database column. Only a few fixed
that base typeclass (for example <aclass="reference internal"href="#object"><spanclass="std std-doc">Objects</span></a> store its location as a field). In all
other cases, <aclass="reference internal"href="#attribute"><spanclass="std std-doc">attributes</span></a> are used to add new persistent data to the typeclass.
<aclass="reference internal"href="Components/Typeclasses.html#about-typeclass-properties"><spanclass="std std-doc">Read more about typeclass properties here</span></a>.</p>
<p><aclass="reference external"href="https://git-scm.com/">Git</a> is a <aclass="reference external"href="https://en.wikipedia.org/wiki/Version_control">version control</a>
tool. It allows us to track the development of the Evennia code by dividing it into units called
<em>commits</em>. A ‘commit’ is sort of a save-spot - you save the current state of your code and can then
come back to it later if later changes caused problems. By tracking commits we know what ‘version’
<p>Evennia’s source code + its source history is jointly called a <aclass="reference internal"href="#repository"><spanclass="std std-doc">repository</span></a>.
This is centrally stored at our online home on <aclass="reference internal"href="#github"><spanclass="std std-doc">GitHub</span></a>. Everyone using or
<div><p>Don’t confuse Git and <aclass="reference internal"href="#github"><spanclass="std std-doc">GitHub</span></a>. The former is the version control system. The
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">git</span><spanclass="pre">clone</span><spanclass="pre"><github-url></span></code> - clone an online repository to your computer. This is what you do when
you ‘download’ Evennia. You only need to do this once.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">git</span><spanclass="pre">pull</span></code> (inside local copy of repository) - sync your local repository with what is online.</p></li>
<aclass="reference internal"href="Coding/Version-Control.html"><spanclass="doc std std-doc">Tutorial - version control</span></a> for more info and links to the Git documentation.</p>
this is due to Evennia’s <aclass="reference internal"href="#github"><spanclass="std std-doc">upstream</span></a> schema changing. When that happens you need to
migrate that schema to the new version as well. Once you have used <aclass="reference internal"href="#git"><spanclass="std std-doc">git</span></a> to pull the
<p>That should be it (see <aclass="reference internal"href="#virtualenv"><spanclass="std std-doc">virtualenv</span></a> if you get a warning that the <codeclass="docutils literal notranslate"><spanclass="pre">evennia</span></code>
command is not available). See also <aclass="reference internal"href="Coding/Updating-Your-Game.html"><spanclass="doc std std-doc">Updating your game</span></a> for more details.</p>
<p>This term refers to the <codeclass="docutils literal notranslate"><spanclass="pre">MULTISESSION_MODE</span></code> setting, which has a value of 0 to 3. The mode alters
how players can connect to the game, such as how many Sessions a player can start with one account
and how many Characters they can control at the same time. It is <aclass="reference internal"href="Components/Sessions.html#multisession-mode"><spanclass="std std-doc">described in detail
This online <aclass="reference internal"href="#repository"><spanclass="std std-doc">repository</span></a> of code we also sometimes refer to as <em>upstream</em>.</p>
similarity in name, don’t confuse GitHub the website with <aclass="reference internal"href="#git"><spanclass="std std-doc">Git</span></a>, the versioning
system. Github hosts Git <aclass="reference internal"href="#repository"><spanclass="std std-doc">repositories</span></a> online and helps with collaboration and
<p>In general Python (and other [object-oriented languages](<aclass="reference external"href="https://en.wikipedia.org/wiki/Object-">https://en.wikipedia.org/wiki/Object-</a>
oriented_programming)), an <codeclass="docutils literal notranslate"><spanclass="pre">object</span></code> is what we call the instance of a <em>class</em>. But one of Evennia’s
core <aclass="reference internal"href="#typeclass"><spanclass="std std-doc">typeclasses</span></a> is also called “Object”. To separate these in the docs we
try to use <codeclass="docutils literal notranslate"><spanclass="pre">object</span></code> to refer to the general term and capitalized <codeclass="docutils literal notranslate"><spanclass="pre">Object</span></code> when we refer to the
typeclass.</p>
<p>The <codeclass="docutils literal notranslate"><spanclass="pre">Object</span></code> is a typeclass that represents all <em>in-game</em> entities, including
<aclass="reference internal"href="#character"><spanclass="std std-doc">Characters</span></a>, rooms, trees, weapons etc. <aclass="reference internal"href="Components/Objects.html"><spanclass="doc std std-doc">Read more about Objects here</span></a>.</p>
<p><em><aclass="reference external"href="https://pypi.org/project/pip/">pip</a></em> comes with Python and is the main tool for installing third-
party Python packages from the web. Once a python package is installed you can do <codeclass="docutils literal notranslate"><spanclass="pre">import</span><spanclass="pre"><packagename></span></code> in your Python code.</p>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">pip</span><spanclass="pre">install</span><spanclass="pre"><package-name></span></code> - install the given package along with all its dependencies.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">pip</span><spanclass="pre">search</span><spanclass="pre"><name></span></code> - search Python’s central package repository <aclass="reference external"href="https://pypi.org/">PyPi</a> for a
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">pip</span><spanclass="pre">install</span><spanclass="pre">--upgrade</span><spanclass="pre"><package_name></span></code> - upgrade a package you already have to the latest version.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">pip</span><spanclass="pre">install</span><spanclass="pre"><packagename>==1.5</span></code> - install exactly a specific package version.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">pip</span><spanclass="pre">install</span><spanclass="pre"><folder></span></code> - install a Python package you have downloaded earlier (or cloned using
git).</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">pip</span><spanclass="pre">install</span><spanclass="pre">-e</span><spanclass="pre"><folder></span></code> - install a local package by just making a soft link to the folder. This
means that if the code in <codeclass="docutils literal notranslate"><spanclass="pre"><folder></span></code> changes, the installed Python package is immediately updated.
If not using <codeclass="docutils literal notranslate"><spanclass="pre">-e</span></code>, one would need to run <codeclass="docutils literal notranslate"><spanclass="pre">pip</span><spanclass="pre">install</span><spanclass="pre">--upgrade</span><spanclass="pre"><folder></span></code> every time to make the
changes available when you import this package into your code. Evennia is installed this way.</p></li>
<p>For development, <codeclass="docutils literal notranslate"><spanclass="pre">pip</span></code> is usually used together with a <aclass="reference internal"href="#virtualenv"><spanclass="std std-doc">virtualenv</span></a> to install
<p>An <aclass="reference internal"href="#account"><spanclass="std std-doc">account</span></a> can take control and “play as” any <aclass="reference internal"href="#object"><spanclass="std std-doc">Object</span></a>. When
Normally the entity being puppeted is of the <aclass="reference internal"href="#character"><spanclass="std std-doc">Character</span></a> subclass but it does
<p>A <em>property</em> is a general term used for properties on any Python object. The term also sometimes
refers to the <codeclass="docutils literal notranslate"><spanclass="pre">property</span></code> built-in function of Python ([read more here](https://www.python-
<aclass="reference external"href="http://course.eu/python3_properties.php">course.eu/python3_properties.php</a>)). Note the distinction between properties,
<aclass="reference internal"href="#field"><spanclass="std std-doc">fields</span></a> and <aclass="reference internal"href="#attribute"><spanclass="std std-doc">Attributes</span></a>.</p>
<p>A <em>repository</em> is a version control/<aclass="reference internal"href="#git"><spanclass="std std-doc">git</span></a> term. It represents a folder containing
<div><p>In Git’s case, that history is stored in a hidden folder <codeclass="docutils literal notranslate"><spanclass="pre">.git</span></code>. If you ever feel the need to look
into this folder you probably already know enough Git to know why.</p>
<p>The <codeclass="docutils literal notranslate"><spanclass="pre">evennia</span></code> folder you download from us with <codeclass="docutils literal notranslate"><spanclass="pre">git</span><spanclass="pre">clone</span></code> is a repository. The code on
<aclass="reference internal"href="#github"><spanclass="std std-doc">GitHub</span></a> is often referred to as the ‘online repository’ (or the <em>upstream</em>
<p>When we refer to <em>Scripts</em>, we generally refer to the <codeclass="docutils literal notranslate"><spanclass="pre">Script</span></code><aclass="reference internal"href="Components/Typeclasses.html"><spanclass="doc std std-doc">typeclass</span></a>. Scripts are
the mavericks of Evennia - they are like <aclass="reference internal"href="#object"><spanclass="std std-doc">Objects</span></a> but without any in-game
<p>A <aclass="reference internal"href="Components/Sessions.html"><spanclass="doc std std-doc">Session</span></a> is a Python object representing a single client connection to the server. A
<p>Sessions are <em>not</em><aclass="reference internal"href="#typeclass"><spanclass="std std-doc">typeclassed</span></a> and has no database persistence. But since they
<h2><em>tag</em><aclass="headerlink"href="#tag"title="Permalink to this headline">¶</a></h2>
<p>A <aclass="reference internal"href="Components/Tags.html"><spanclass="doc std std-doc">Tag</span></a> is used to group and categorize other database entitiess together in an efficient way
<p>The <aclass="reference internal"href="Components/TickerHandler.html"><spanclass="doc std std-doc">Ticker handler</span></a> runs Evennia’s optional ‘ticker’ system. In other engines, such
<p>The <aclass="reference internal"href="Components/Typeclasses.html"><spanclass="doc std std-doc">typeclass</span></a> is an Evennia-specific term. A typeclass allows developers to work with
<aclass="reference internal"href="#django"><spanclass="std std-doc">Django</span></a> features to link a Python class to a database table. Sometimes we refer to
<p>Evennia’s main typeclasses are <aclass="reference internal"href="#account"><spanclass="std std-doc">Account</span></a>, <aclass="reference internal"href="#object"><spanclass="std std-doc">Object</span></a>,
<aclass="reference internal"href="#script"><spanclass="std std-doc">Script</span></a> and <aclass="reference internal"href="#channel"><spanclass="std std-doc">Channel</span></a>. Children of the base class (such as
<aclass="reference internal"href="#character"><spanclass="std std-doc">Character</span></a>) will use the same database table as the parent, but can have vastly
different Python capabilities (and persistent features through <aclass="reference internal"href="#attribute"><spanclass="std std-doc">Attributes</span></a> and
<aclass="reference internal"href="#tag"><spanclass="std std-doc">Tags</span></a>. A typeclass can be coded and treated pretty much like any other Python class
<p>The <aclass="reference internal"href="#core"><spanclass="std std-doc">core</span></a> typeclasses in the Evennia library are all named <codeclass="docutils literal notranslate"><spanclass="pre">DefaultAccount</span></code>,
<codeclass="docutils literal notranslate"><spanclass="pre">DefaultObject</span></code> etc. When you initialize your [game dir] you automatically get empty children of
these, called <codeclass="docutils literal notranslate"><spanclass="pre">Account</span></code>, <codeclass="docutils literal notranslate"><spanclass="pre">Object</span></code> etc that you can start working with.</p>
of Evennia’s two major library dependencies (the other one is <aclass="reference internal"href="#django"><spanclass="std std-doc">Django</span></a>). Twisted is
<p>The standard <aclass="reference external"href="https://virtualenv.pypa.io/en/stable/">virtualenv</a> program comes with Python. It is
used to isolate all Python packages needed by a given Python project into one folder (we call that
folder <codeclass="docutils literal notranslate"><spanclass="pre">evenv</span></code> but it could be called anything). A package environment created this way is usually
referred to as “a virtualenv”. If you ever try to run the <codeclass="docutils literal notranslate"><spanclass="pre">evennia</span></code> program and get an error saying
something like “the command ‘evennia’ is not available” - it’s probably because your virtualenv is
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">python3.10</span><spanclass="pre">-m</span><spanclass="pre">venv</span><spanclass="pre">evenv</span></code> - initialize a new virtualenv-folder <codeclass="docutils literal notranslate"><spanclass="pre">evenv</span></code> in the current
location. You can call this whatever you like. The Python-version you use for this call will be the one used
for everything inside the virtualenv.</p></li>
<li><p><codeclass="docutils literal notranslate"><spanclass="pre">source</span><spanclass="pre">evenv/bin/activate</span></code> (linux/mac) or <codeclass="docutils literal notranslate"><spanclass="pre">evenv\Scripts\activate</span></code>(windows) - this activates the
packages now installed with <aclass="reference internal"href="#pip"><spanclass="std std-doc">pip</span></a> will install to <codeclass="docutils literal notranslate"><spanclass="pre">evenv</span></code> rather than to a global
location like <codeclass="docutils literal notranslate"><spanclass="pre">/usr/local/bin</span></code> or <codeclass="docutils literal notranslate"><spanclass="pre">C:\Program</span><spanclass="pre">Files</span></code>.</p>
<p>When you execute Python code within this activated virtualenv, <em>only</em> those packages installed
within will be possible to <codeclass="docutils literal notranslate"><spanclass="pre">import</span></code> into your code. So if you installed a Python package globally on
your computer, you’ll need to install it again in your virtualenv.</p>
<div><p>Virtualenvs <em>only</em> deal with Python programs/packages. Other programs on your computer couldn’t
care less if your virtualenv is active or not. So you could use <codeclass="docutils literal notranslate"><spanclass="pre">git</span></code> without the virtualenv being
<div><p>We sometimes say that we are “in” the virtualenv when it’s active. But just to be clear - you
never have to actually <codeclass="docutils literal notranslate"><spanclass="pre">cd</span></code> into the <codeclass="docutils literal notranslate"><spanclass="pre">evenv</span></code> folder. You can activate it from anywhere and will
still be considered “in” the virtualenv wherever you go until you <codeclass="docutils literal notranslate"><spanclass="pre">deactivate</span></code> or close the
packages/programs you installed in it will be available to you. So at a minimum, <em>it needs to be
activated whenever you want to use the <codeclass="docutils literal notranslate"><spanclass="pre">evennia</span></code> command</em> for any reason.</p>