mirror of
https://github.com/evennia/evennia.git
synced 2026-03-27 18:26:32 +01:00
400 lines
No EOL
34 KiB
HTML
400 lines
No EOL
34 KiB
HTML
|
|
<!DOCTYPE html>
|
|
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>evennia.utils.gametime — 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.utils.gametime</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
|
|
<div class="document">
|
|
|
|
<div class="documentwrapper">
|
|
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
|
|
<div class="sphinxsidebarwrapper">
|
|
<p class="logo"><a href="../../../index.html">
|
|
<img class="logo" src="../../../_static/evennia_logo.png" alt="Logo"/>
|
|
</a></p>
|
|
<div id="searchbox" style="display: none" role="search">
|
|
<h3 id="searchlabel">Quick search</h3>
|
|
<div class="searchformwrapper">
|
|
<form class="search" action="../../../search.html" method="get">
|
|
<input type="text" name="q" aria-labelledby="searchlabel" />
|
|
<input type="submit" value="Go" />
|
|
</form>
|
|
</div>
|
|
</div>
|
|
<script>$('#searchbox').show(0);</script><h3>Links</h3>
|
|
<ul>
|
|
<li><a href="https://www.evennia.com">Home page</a> </li>
|
|
<li><a href="https://github.com/evennia/evennia">Evennia Github</a> </li>
|
|
<li><a href="http://games.evennia.com">Game Index</a> </li>
|
|
<li>
|
|
<a href="https://discord.gg/AJJpcRUhtF">Discord</a> -
|
|
<a href="https://github.com/evennia/evennia/discussions">Discussions</a> -
|
|
<a href="https://evennia.blogspot.com/">Blog</a>
|
|
</li>
|
|
</ul>
|
|
<h3>Versions</h3>
|
|
<ul>
|
|
<li><a href="gametime.html">1.0-dev (develop branch)</a></li>
|
|
<ul>
|
|
<li><a href="../0.9.5/index.html">0.9.5 (v0.9.5 branch)</a></li>
|
|
|
|
</ul>
|
|
|
|
</div>
|
|
</div>
|
|
<div class="bodywrapper">
|
|
<div class="body" role="main">
|
|
|
|
<h1>Source code for evennia.utils.gametime</h1><div class="highlight"><pre>
|
|
<span></span><span class="sd">"""</span>
|
|
<span class="sd">The gametime module handles the global passage of time in the mud.</span>
|
|
|
|
<span class="sd">It also supplies some useful methods to convert between</span>
|
|
<span class="sd">in-mud time and real-world time as well allows to get the</span>
|
|
<span class="sd">total runtime of the server and the current uptime.</span>
|
|
|
|
<span class="sd">"""</span>
|
|
|
|
<span class="kn">import</span> <span class="nn">time</span>
|
|
<span class="kn">from</span> <span class="nn">datetime</span> <span class="kn">import</span> <span class="n">datetime</span><span class="p">,</span> <span class="n">timedelta</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">django.conf</span> <span class="kn">import</span> <span class="n">settings</span>
|
|
<span class="kn">from</span> <span class="nn">django.db.utils</span> <span class="kn">import</span> <span class="n">OperationalError</span>
|
|
|
|
<span class="kn">from</span> <span class="nn">evennia</span> <span class="kn">import</span> <span class="n">DefaultScript</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.server.models</span> <span class="kn">import</span> <span class="n">ServerConfig</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.utils.create</span> <span class="kn">import</span> <span class="n">create_script</span>
|
|
|
|
<span class="c1"># Speed-up factor of the in-game time compared</span>
|
|
<span class="c1"># to real time.</span>
|
|
|
|
<span class="n">TIMEFACTOR</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">TIME_FACTOR</span>
|
|
<span class="n">IGNORE_DOWNTIMES</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">TIME_IGNORE_DOWNTIMES</span>
|
|
|
|
|
|
<span class="c1"># Only set if gametime_reset was called at some point.</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">GAME_TIME_OFFSET</span> <span class="o">=</span> <span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="s2">"gametime_offset"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="mi">0</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="n">OperationalError</span><span class="p">:</span>
|
|
<span class="c1"># the db is not initialized</span>
|
|
<span class="nb">print</span><span class="p">(</span><span class="s2">"Gametime offset could not load - db not set up."</span><span class="p">)</span>
|
|
<span class="n">GAME_TIME_OFFSET</span> <span class="o">=</span> <span class="mi">0</span>
|
|
|
|
<span class="c1"># Common real-life time measure, in seconds.</span>
|
|
<span class="c1"># You should not change this.</span>
|
|
|
|
<span class="c1"># these are kept updated by the server maintenance loop</span>
|
|
<span class="n">SERVER_START_TIME</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="n">SERVER_RUNTIME_LAST_UPDATED</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
<span class="n">SERVER_RUNTIME</span> <span class="o">=</span> <span class="mf">0.0</span>
|
|
|
|
<span class="c1"># note that these should not be accessed directly since they may</span>
|
|
<span class="c1"># need further processing. Access from server_epoch() and game_epoch().</span>
|
|
<span class="n">_SERVER_EPOCH</span> <span class="o">=</span> <span class="kc">None</span>
|
|
<span class="n">_GAME_EPOCH</span> <span class="o">=</span> <span class="kc">None</span>
|
|
|
|
<span class="c1"># Helper Script dealing in gametime (created by `schedule` function</span>
|
|
<span class="c1"># below).</span>
|
|
|
|
|
|
<div class="viewcode-block" id="TimeScript"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.TimeScript">[docs]</a><span class="k">class</span> <span class="nc">TimeScript</span><span class="p">(</span><span class="n">DefaultScript</span><span class="p">):</span>
|
|
<span class="sd">"""Gametime-sensitive script."""</span>
|
|
|
|
<div class="viewcode-block" id="TimeScript.at_script_creation"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.TimeScript.at_script_creation">[docs]</a> <span class="k">def</span> <span class="nf">at_script_creation</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""The script is created."""</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">key</span> <span class="o">=</span> <span class="s2">"unknown scr"</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">interval</span> <span class="o">=</span> <span class="mi">100</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">start_delay</span> <span class="o">=</span> <span class="kc">True</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">persistent</span> <span class="o">=</span> <span class="kc">True</span></div>
|
|
|
|
<div class="viewcode-block" id="TimeScript.at_repeat"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.TimeScript.at_repeat">[docs]</a> <span class="k">def</span> <span class="nf">at_repeat</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
|
|
<span class="sd">"""Call the callback and reset interval."""</span>
|
|
<span class="n">callback</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">callback</span>
|
|
<span class="n">args</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">schedule_args</span> <span class="ow">or</span> <span class="p">[]</span>
|
|
<span class="n">kwargs</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">schedule_kwargs</span> <span class="ow">or</span> <span class="p">{}</span>
|
|
<span class="k">if</span> <span class="n">callback</span><span class="p">:</span>
|
|
<span class="n">callback</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">)</span>
|
|
|
|
<span class="n">seconds</span> <span class="o">=</span> <span class="n">real_seconds_until</span><span class="p">(</span><span class="o">**</span><span class="bp">self</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gametime</span><span class="p">)</span>
|
|
<span class="bp">self</span><span class="o">.</span><span class="n">start</span><span class="p">(</span><span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span> <span class="n">force_restart</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span></div></div>
|
|
|
|
|
|
<span class="c1"># Access functions</span>
|
|
|
|
|
|
<div class="viewcode-block" id="runtime"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.runtime">[docs]</a><span class="k">def</span> <span class="nf">runtime</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get the total runtime of the server since first start (minus</span>
|
|
<span class="sd"> downtimes)</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> format (bool, optional): Format into a time representation.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> time (float or tuple): The runtime or the same time split up</span>
|
|
<span class="sd"> into time units.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">SERVER_RUNTIME</span> <span class="o">+</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">SERVER_RUNTIME_LAST_UPDATED</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="server_epoch"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.server_epoch">[docs]</a><span class="k">def</span> <span class="nf">server_epoch</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get the server epoch. We may need to calculate this on the fly.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">global</span> <span class="n">_SERVER_EPOCH</span>
|
|
<span class="k">if</span> <span class="ow">not</span> <span class="n">_SERVER_EPOCH</span><span class="p">:</span>
|
|
<span class="n">_SERVER_EPOCH</span> <span class="o">=</span> <span class="p">(</span>
|
|
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="s2">"server_epoch"</span><span class="p">,</span> <span class="n">default</span><span class="o">=</span><span class="kc">None</span><span class="p">)</span> <span class="ow">or</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">runtime</span><span class="p">()</span>
|
|
<span class="p">)</span>
|
|
<span class="k">return</span> <span class="n">_SERVER_EPOCH</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="uptime"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.uptime">[docs]</a><span class="k">def</span> <span class="nf">uptime</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get the current uptime of the server since last reload</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> format (bool, optional): Format into time representation.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> time (float or tuple): The uptime or the same time split up</span>
|
|
<span class="sd"> into time units.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">return</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">SERVER_START_TIME</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="portal_uptime"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.portal_uptime">[docs]</a><span class="k">def</span> <span class="nf">portal_uptime</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get the current uptime of the portal.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> time (float): The uptime of the portal.</span>
|
|
<span class="sd"> """</span>
|
|
<span class="kn">from</span> <span class="nn">evennia.server.sessionhandler</span> <span class="kn">import</span> <span class="n">SESSIONS</span>
|
|
|
|
<span class="k">return</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">SESSIONS</span><span class="o">.</span><span class="n">portal_start_time</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="game_epoch"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.game_epoch">[docs]</a><span class="k">def</span> <span class="nf">game_epoch</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get the game epoch.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">game_epoch</span> <span class="o">=</span> <span class="n">settings</span><span class="o">.</span><span class="n">TIME_GAME_EPOCH</span>
|
|
<span class="k">return</span> <span class="n">game_epoch</span> <span class="k">if</span> <span class="n">game_epoch</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">server_epoch</span><span class="p">()</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="gametime"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.gametime">[docs]</a><span class="k">def</span> <span class="nf">gametime</span><span class="p">(</span><span class="n">absolute</span><span class="o">=</span><span class="kc">False</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Get the total gametime of the server since first start (minus downtimes)</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> absolute (bool, optional): Get the absolute game time, including</span>
|
|
<span class="sd"> the epoch. This could be converted to an absolute in-game</span>
|
|
<span class="sd"> date.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> time (float): The gametime as a virtual timestamp.</span>
|
|
|
|
<span class="sd"> Notes:</span>
|
|
<span class="sd"> If one is using a standard calendar, one could convert the unformatted</span>
|
|
<span class="sd"> return to a date using Python's standard `datetime` module like this:</span>
|
|
<span class="sd"> `datetime.datetime.fromtimestamp(gametime(absolute=True))`</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">epoch</span> <span class="o">=</span> <span class="n">game_epoch</span><span class="p">()</span> <span class="k">if</span> <span class="n">absolute</span> <span class="k">else</span> <span class="mi">0</span>
|
|
<span class="k">if</span> <span class="n">IGNORE_DOWNTIMES</span><span class="p">:</span>
|
|
<span class="n">gtime</span> <span class="o">=</span> <span class="n">epoch</span> <span class="o">+</span> <span class="p">(</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="o">-</span> <span class="n">server_epoch</span><span class="p">())</span> <span class="o">*</span> <span class="n">TIMEFACTOR</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">gtime</span> <span class="o">=</span> <span class="n">epoch</span> <span class="o">+</span> <span class="p">(</span><span class="n">runtime</span><span class="p">()</span> <span class="o">-</span> <span class="n">GAME_TIME_OFFSET</span><span class="p">)</span> <span class="o">*</span> <span class="n">TIMEFACTOR</span>
|
|
<span class="k">return</span> <span class="n">gtime</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="real_seconds_until"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.real_seconds_until">[docs]</a><span class="k">def</span> <span class="nf">real_seconds_until</span><span class="p">(</span><span class="n">sec</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">hour</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">day</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">month</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span> <span class="n">year</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Return the real seconds until game time.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> sec (int or None): number of absolute seconds.</span>
|
|
<span class="sd"> min (int or None): number of absolute minutes.</span>
|
|
<span class="sd"> hour (int or None): number of absolute hours.</span>
|
|
<span class="sd"> day (int or None): number of absolute days.</span>
|
|
<span class="sd"> month (int or None): number of absolute months.</span>
|
|
<span class="sd"> year (int or None): number of absolute years.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> The number of real seconds before the given game time is up.</span>
|
|
|
|
<span class="sd"> Example:</span>
|
|
<span class="sd"> real_seconds_until(hour=5, min=10, sec=0)</span>
|
|
|
|
<span class="sd"> If the game time is 5:00, TIME_FACTOR is set to 2 and you ask</span>
|
|
<span class="sd"> the number of seconds until it's 5:10, then this function should</span>
|
|
<span class="sd"> return 300 (5 minutes).</span>
|
|
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">current</span> <span class="o">=</span> <span class="n">datetime</span><span class="o">.</span><span class="n">fromtimestamp</span><span class="p">(</span><span class="n">gametime</span><span class="p">(</span><span class="n">absolute</span><span class="o">=</span><span class="kc">True</span><span class="p">))</span>
|
|
<span class="n">s_sec</span> <span class="o">=</span> <span class="n">sec</span> <span class="k">if</span> <span class="n">sec</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">current</span><span class="o">.</span><span class="n">second</span>
|
|
<span class="n">s_min</span> <span class="o">=</span> <span class="nb">min</span> <span class="k">if</span> <span class="nb">min</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">current</span><span class="o">.</span><span class="n">minute</span>
|
|
<span class="n">s_hour</span> <span class="o">=</span> <span class="n">hour</span> <span class="k">if</span> <span class="n">hour</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">current</span><span class="o">.</span><span class="n">hour</span>
|
|
<span class="n">s_day</span> <span class="o">=</span> <span class="n">day</span> <span class="k">if</span> <span class="n">day</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">current</span><span class="o">.</span><span class="n">day</span>
|
|
<span class="n">s_month</span> <span class="o">=</span> <span class="n">month</span> <span class="k">if</span> <span class="n">month</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">current</span><span class="o">.</span><span class="n">month</span>
|
|
<span class="n">s_year</span> <span class="o">=</span> <span class="n">year</span> <span class="k">if</span> <span class="n">year</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span> <span class="k">else</span> <span class="n">current</span><span class="o">.</span><span class="n">year</span>
|
|
<span class="n">projected</span> <span class="o">=</span> <span class="n">datetime</span><span class="p">(</span><span class="n">s_year</span><span class="p">,</span> <span class="n">s_month</span><span class="p">,</span> <span class="n">s_day</span><span class="p">,</span> <span class="n">s_hour</span><span class="p">,</span> <span class="n">s_min</span><span class="p">,</span> <span class="n">s_sec</span><span class="p">)</span>
|
|
|
|
<span class="k">if</span> <span class="n">projected</span> <span class="o"><=</span> <span class="n">current</span><span class="p">:</span>
|
|
<span class="c1"># We increase one unit of time depending on parameters</span>
|
|
<span class="k">if</span> <span class="n">month</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">projected</span> <span class="o">=</span> <span class="n">projected</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">year</span><span class="o">=</span><span class="n">s_year</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">day</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="k">try</span><span class="p">:</span>
|
|
<span class="n">projected</span> <span class="o">=</span> <span class="n">projected</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">month</span><span class="o">=</span><span class="n">s_month</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span>
|
|
<span class="n">projected</span> <span class="o">=</span> <span class="n">projected</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="n">month</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="n">hour</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">projected</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">days</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span>
|
|
<span class="k">elif</span> <span class="nb">min</span> <span class="ow">is</span> <span class="ow">not</span> <span class="kc">None</span><span class="p">:</span>
|
|
<span class="n">projected</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span><span class="o">=</span><span class="mi">3600</span><span class="p">)</span>
|
|
<span class="k">else</span><span class="p">:</span>
|
|
<span class="n">projected</span> <span class="o">+=</span> <span class="n">timedelta</span><span class="p">(</span><span class="n">seconds</span><span class="o">=</span><span class="mi">60</span><span class="p">)</span>
|
|
|
|
<span class="c1"># Get the number of gametime seconds between these two dates</span>
|
|
<span class="n">seconds</span> <span class="o">=</span> <span class="p">(</span><span class="n">projected</span> <span class="o">-</span> <span class="n">current</span><span class="p">)</span><span class="o">.</span><span class="n">total_seconds</span><span class="p">()</span>
|
|
<span class="k">return</span> <span class="n">seconds</span> <span class="o">/</span> <span class="n">TIMEFACTOR</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="schedule"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.schedule">[docs]</a><span class="k">def</span> <span class="nf">schedule</span><span class="p">(</span>
|
|
<span class="n">callback</span><span class="p">,</span>
|
|
<span class="n">repeat</span><span class="o">=</span><span class="kc">False</span><span class="p">,</span>
|
|
<span class="n">sec</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="nb">min</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">hour</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">day</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">month</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="n">year</span><span class="o">=</span><span class="kc">None</span><span class="p">,</span>
|
|
<span class="o">*</span><span class="n">args</span><span class="p">,</span>
|
|
<span class="o">**</span><span class="n">kwargs</span><span class="p">,</span>
|
|
<span class="p">):</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Call a callback at a given in-game time.</span>
|
|
|
|
<span class="sd"> Args:</span>
|
|
<span class="sd"> callback (function): The callback function that will be called. Note</span>
|
|
<span class="sd"> that the callback must be a module-level function, since the script will</span>
|
|
<span class="sd"> be persistent. The callable should be on the form `callable(*args, **kwargs)`</span>
|
|
<span class="sd"> where args/kwargs are passed into this schedule.</span>
|
|
<span class="sd"> repeat (bool, optional): Defines if the callback should be called regularly</span>
|
|
<span class="sd"> at the specified time.</span>
|
|
<span class="sd"> sec (int or None): Number of absolute game seconds at which to run repeat.</span>
|
|
<span class="sd"> min (int or None): Number of absolute minutes.</span>
|
|
<span class="sd"> hour (int or None): Number of absolute hours.</span>
|
|
<span class="sd"> day (int or None): Number of absolute days.</span>
|
|
<span class="sd"> month (int or None): Number of absolute months.</span>
|
|
<span class="sd"> year (int or None): Number of absolute years.</span>
|
|
<span class="sd"> *args: Passed into the callable. Must be possible to store in Attribute.</span>
|
|
<span class="sd"> **kwargs: Passed into the callable. Must be possible to store in Attribute.</span>
|
|
|
|
<span class="sd"> Returns:</span>
|
|
<span class="sd"> Script: The created Script handling the scheduling.</span>
|
|
|
|
<span class="sd"> Examples:</span>
|
|
<span class="sd"> ::</span>
|
|
<span class="sd"> schedule(func, min=5, sec=0) # Will call 5 minutes past the next (in-game) hour.</span>
|
|
<span class="sd"> schedule(func, hour=2, min=30, sec=0) # Will call the next (in-game) day at 02:30.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="n">seconds</span> <span class="o">=</span> <span class="n">real_seconds_until</span><span class="p">(</span><span class="n">sec</span><span class="o">=</span><span class="n">sec</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="nb">min</span><span class="p">,</span> <span class="n">hour</span><span class="o">=</span><span class="n">hour</span><span class="p">,</span> <span class="n">day</span><span class="o">=</span><span class="n">day</span><span class="p">,</span> <span class="n">month</span><span class="o">=</span><span class="n">month</span><span class="p">,</span> <span class="n">year</span><span class="o">=</span><span class="n">year</span><span class="p">)</span>
|
|
<span class="n">script</span> <span class="o">=</span> <span class="n">create_script</span><span class="p">(</span>
|
|
<span class="s2">"evennia.utils.gametime.TimeScript"</span><span class="p">,</span>
|
|
<span class="n">key</span><span class="o">=</span><span class="s2">"TimeScript"</span><span class="p">,</span>
|
|
<span class="n">desc</span><span class="o">=</span><span class="s2">"A gametime-sensitive script"</span><span class="p">,</span>
|
|
<span class="n">interval</span><span class="o">=</span><span class="n">seconds</span><span class="p">,</span>
|
|
<span class="n">start_delay</span><span class="o">=</span><span class="kc">True</span><span class="p">,</span>
|
|
<span class="n">repeats</span><span class="o">=-</span><span class="mi">1</span> <span class="k">if</span> <span class="n">repeat</span> <span class="k">else</span> <span class="mi">1</span><span class="p">,</span>
|
|
<span class="p">)</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">callback</span> <span class="o">=</span> <span class="n">callback</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">gametime</span> <span class="o">=</span> <span class="p">{</span>
|
|
<span class="s2">"sec"</span><span class="p">:</span> <span class="n">sec</span><span class="p">,</span>
|
|
<span class="s2">"min"</span><span class="p">:</span> <span class="nb">min</span><span class="p">,</span>
|
|
<span class="s2">"hour"</span><span class="p">:</span> <span class="n">hour</span><span class="p">,</span>
|
|
<span class="s2">"day"</span><span class="p">:</span> <span class="n">day</span><span class="p">,</span>
|
|
<span class="s2">"month"</span><span class="p">:</span> <span class="n">month</span><span class="p">,</span>
|
|
<span class="s2">"year"</span><span class="p">:</span> <span class="n">year</span><span class="p">,</span>
|
|
<span class="p">}</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">schedule_args</span> <span class="o">=</span> <span class="n">args</span>
|
|
<span class="n">script</span><span class="o">.</span><span class="n">db</span><span class="o">.</span><span class="n">schedule_kwargs</span> <span class="o">=</span> <span class="n">kwargs</span>
|
|
<span class="k">return</span> <span class="n">script</span></div>
|
|
|
|
|
|
<div class="viewcode-block" id="reset_gametime"><a class="viewcode-back" href="../../../api/evennia.utils.gametime.html#evennia.utils.gametime.reset_gametime">[docs]</a><span class="k">def</span> <span class="nf">reset_gametime</span><span class="p">():</span>
|
|
<span class="sd">"""</span>
|
|
<span class="sd"> Resets the game time to make it start from the current time. Note that</span>
|
|
<span class="sd"> the epoch set by `settings.TIME_GAME_EPOCH` will still apply.</span>
|
|
|
|
<span class="sd"> """</span>
|
|
<span class="k">global</span> <span class="n">GAME_TIME_OFFSET</span>
|
|
<span class="n">GAME_TIME_OFFSET</span> <span class="o">=</span> <span class="n">runtime</span><span class="p">()</span>
|
|
<span class="n">ServerConfig</span><span class="o">.</span><span class="n">objects</span><span class="o">.</span><span class="n">conf</span><span class="p">(</span><span class="s2">"gametime_offset"</span><span class="p">,</span> <span class="n">GAME_TIME_OFFSET</span><span class="p">)</span></div>
|
|
</pre></div>
|
|
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</div>
|
|
<div class="related" role="navigation" aria-label="related navigation">
|
|
<h3>Navigation</h3>
|
|
<ul>
|
|
<li class="right" style="margin-right: 10px">
|
|
<a href="../../../genindex.html" title="General Index"
|
|
>index</a></li>
|
|
<li class="right" >
|
|
<a href="../../../py-modindex.html" title="Python Module Index"
|
|
>modules</a> |</li>
|
|
<li class="nav-item nav-item-0"><a href="../../../index.html">Evennia 1.0-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.utils.gametime</a></li>
|
|
</ul>
|
|
<div class="develop">develop branch</div>
|
|
</div>
|
|
<div class="footer" role="contentinfo">
|
|
© Copyright 2022, The Evennia developer community.
|
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> 3.2.1.
|
|
</div>
|
|
</body>
|
|
</html> |