From aa4dc8fdc84564658188ec4a12614076d78a9795 Mon Sep 17 00:00:00 2001
From: Griatch
Date: Sun, 8 Aug 2021 22:26:23 +0200
Subject: [PATCH] Updated HTML docs
---
docs/0.9.5/.buildinfo | 2 +-
.../_modules/evennia/accounts/accounts.html | 4 +-
.../_modules/evennia/commands/cmdhandler.html | 4 +
.../_modules/evennia/commands/cmdset.html | 6 +-
.../evennia/commands/cmdsethandler.html | 20 +-
.../_modules/evennia/commands/command.html | 8 +
.../evennia/commands/default/building.html | 500 +++++++++++++-----
.../commands/default/cmdset_character.html | 5 +-
.../evennia/commands/default/system.html | 282 +---------
.../evennia/commands/default/tests.html | 54 +-
.../evennia/contrib/building_menu.html | 4 +-
.../_modules/evennia/contrib/rpsystem.html | 30 +-
.../_modules/evennia/contrib/talking_npc.html | 2 +-
.../evennia/contrib/tutorial_world/mob.html | 2 +-
.../contrib/tutorial_world/objects.html | 12 +-
.../evennia/contrib/tutorial_world/rooms.html | 8 +-
.../_modules/evennia/locks/lockfuncs.html | 11 +-
.../_modules/evennia/objects/objects.html | 6 +-
.../evennia/prototypes/prototypes.html | 8 +-
.../_modules/evennia/prototypes/spawner.html | 29 +-
.../evennia/server/sessionhandler.html | 1 +
.../evennia/typeclasses/attributes.html | 8 +-
.../_modules/evennia/typeclasses/models.html | 17 +
.../_modules/evennia/utils/containers.html | 61 ++-
.../_modules/evennia/utils/eveditor.html | 2 +-
docs/0.9.5/_modules/evennia/utils/evmenu.html | 7 +-
.../_modules/evennia/utils/gametime.html | 14 +-
docs/0.9.5/api/evennia.accounts.accounts.html | 2 +-
docs/0.9.5/api/evennia.commands.cmdset.html | 6 +-
.../api/evennia.commands.cmdsethandler.html | 4 +-
docs/0.9.5/api/evennia.commands.command.html | 5 +
.../api/evennia.commands.default.admin.html | 4 +-
.../evennia.commands.default.building.html | 146 +++--
.../api/evennia.commands.default.comms.html | 8 +-
.../api/evennia.commands.default.general.html | 16 +-
.../api/evennia.commands.default.system.html | 137 +----
.../evennia.commands.default.unloggedin.html | 20 +-
docs/0.9.5/api/evennia.contrib.barter.html | 4 +-
docs/0.9.5/api/evennia.contrib.clothing.html | 4 +-
.../api/evennia.contrib.email_login.html | 20 +-
...vennia.contrib.ingame_python.commands.html | 4 +-
docs/0.9.5/api/evennia.contrib.rpsystem.html | 4 +-
.../evennia.contrib.turnbattle.tb_basic.html | 4 +-
.../evennia.contrib.turnbattle.tb_equip.html | 4 +-
.../evennia.contrib.turnbattle.tb_items.html | 4 +-
.../evennia.contrib.turnbattle.tb_magic.html | 4 +-
.../evennia.contrib.turnbattle.tb_range.html | 4 +-
....contrib.tutorial_examples.red_button.html | 16 +-
...vennia.contrib.tutorial_world.objects.html | 16 +-
.../evennia.contrib.tutorial_world.rooms.html | 8 +-
docs/0.9.5/api/evennia.locks.lockfuncs.html | 2 +
docs/0.9.5/api/evennia.objects.objects.html | 2 +-
.../api/evennia.prototypes.prototypes.html | 3 +-
.../0.9.5/api/evennia.typeclasses.models.html | 17 +
docs/0.9.5/api/evennia.utils.eveditor.html | 4 +-
docs/0.9.5/api/evennia.utils.evmenu.html | 4 +-
docs/0.9.5/api/evennia.utils.evmore.html | 4 +-
docs/0.9.5/api/evennia.utils.gametime.html | 10 +-
docs/0.9.5/genindex.html | 86 ++-
docs/0.9.5/objects.inv | Bin 71274 -> 71253 bytes
docs/0.9.5/searchindex.js | 2 +-
docs/1.0-dev/.buildinfo | 2 +-
docs/1.0-dev/Components/Command-Sets.html | 24 +-
docs/1.0-dev/Components/Scripts.html | 40 +-
docs/1.0-dev/Contribs/XYZGrid.html | 26 +-
.../Howto/Building-a-mech-tutorial.html | 2 +-
docs/1.0-dev/Howto/Coding-FAQ.html | 2 +-
docs/1.0-dev/Howto/NPC-shop-Tutorial.html | 2 +-
.../Howto/Starting/Part1/Adding-Commands.html | 50 +-
.../Starting/Part1/More-on-Commands.html | 72 +--
.../Tutorial-for-basic-MUSH-like-game.html | 108 ++--
.../_modules/evennia/accounts/accounts.html | 4 +-
.../_modules/evennia/commands/cmdhandler.html | 4 +
.../_modules/evennia/commands/cmdset.html | 6 +-
.../evennia/commands/cmdsethandler.html | 20 +-
.../_modules/evennia/commands/command.html | 8 +
.../evennia/commands/default/building.html | 500 +++++++++++++-----
.../commands/default/cmdset_character.html | 5 +-
.../evennia/commands/default/system.html | 282 +---------
.../evennia/commands/default/tests.html | 54 +-
.../evennia/contrib/building_menu.html | 4 +-
.../evennia/contrib/evscaperoom/room.html | 2 +-
.../_modules/evennia/contrib/rpsystem.html | 30 +-
.../_modules/evennia/contrib/talking_npc.html | 2 +-
.../evennia/contrib/tutorial_world/mob.html | 2 +-
.../contrib/tutorial_world/objects.html | 12 +-
.../evennia/contrib/tutorial_world/rooms.html | 8 +-
.../_modules/evennia/locks/lockfuncs.html | 11 +-
.../_modules/evennia/objects/objects.html | 6 +-
.../evennia/prototypes/prototypes.html | 8 +-
.../_modules/evennia/prototypes/spawner.html | 29 +-
.../evennia/server/sessionhandler.html | 1 +
.../evennia/typeclasses/attributes.html | 8 +-
.../_modules/evennia/typeclasses/models.html | 17 +
.../_modules/evennia/utils/containers.html | 61 ++-
.../_modules/evennia/utils/eveditor.html | 2 +-
.../_modules/evennia/utils/evmenu.html | 7 +-
.../_modules/evennia/utils/gametime.html | 14 +-
.../_sources/Components/Command-Sets.md.txt | 36 +-
.../_sources/Components/Scripts.md.txt | 157 +++---
docs/1.0-dev/_sources/Contribs/XYZGrid.md.txt | 14 +
.../Howto/Building-a-mech-tutorial.md.txt | 4 +-
docs/1.0-dev/_sources/Howto/Coding-FAQ.md.txt | 4 +-
.../_sources/Howto/NPC-shop-Tutorial.md.txt | 4 +-
.../Starting/Part1/Adding-Commands.md.txt | 206 ++++----
.../Starting/Part1/More-on-Commands.md.txt | 262 ++++-----
.../Tutorial-for-basic-MUSH-like-game.md.txt | 136 ++---
.../api/evennia.accounts.accounts.html | 2 +-
docs/1.0-dev/api/evennia.commands.cmdset.html | 6 +-
.../api/evennia.commands.cmdsethandler.html | 4 +-
.../1.0-dev/api/evennia.commands.command.html | 5 +
.../api/evennia.commands.default.admin.html | 4 +-
.../evennia.commands.default.building.html | 146 +++--
.../api/evennia.commands.default.comms.html | 8 +-
.../api/evennia.commands.default.general.html | 8 +-
.../api/evennia.commands.default.system.html | 137 +----
.../evennia.commands.default.unloggedin.html | 4 +-
docs/1.0-dev/api/evennia.contrib.barter.html | 4 +-
.../1.0-dev/api/evennia.contrib.clothing.html | 4 +-
docs/1.0-dev/api/evennia.contrib.dice.html | 4 +-
.../api/evennia.contrib.email_login.html | 4 +-
.../evennia.contrib.evscaperoom.commands.html | 20 +-
.../1.0-dev/api/evennia.contrib.rpsystem.html | 8 +-
.../evennia.contrib.turnbattle.tb_basic.html | 4 +-
.../evennia.contrib.turnbattle.tb_equip.html | 4 +-
.../evennia.contrib.turnbattle.tb_items.html | 4 +-
.../evennia.contrib.turnbattle.tb_magic.html | 4 +-
.../evennia.contrib.turnbattle.tb_range.html | 4 +-
....contrib.tutorial_examples.red_button.html | 16 +-
...vennia.contrib.tutorial_world.objects.html | 12 +-
.../evennia.contrib.tutorial_world.rooms.html | 4 +-
docs/1.0-dev/api/evennia.locks.lockfuncs.html | 2 +
docs/1.0-dev/api/evennia.objects.objects.html | 2 +-
.../api/evennia.prototypes.prototypes.html | 3 +-
.../api/evennia.typeclasses.models.html | 17 +
docs/1.0-dev/api/evennia.utils.eveditor.html | 4 +-
docs/1.0-dev/api/evennia.utils.evmenu.html | 4 +-
docs/1.0-dev/api/evennia.utils.evmore.html | 4 +-
docs/1.0-dev/api/evennia.utils.gametime.html | 10 +-
docs/1.0-dev/genindex.html | 86 ++-
docs/1.0-dev/objects.inv | Bin 91485 -> 91464 bytes
docs/1.0-dev/searchindex.js | 2 +-
142 files changed, 2306 insertions(+), 2191 deletions(-)
diff --git a/docs/0.9.5/.buildinfo b/docs/0.9.5/.buildinfo
index be36992bca..2271f7813c 100644
--- a/docs/0.9.5/.buildinfo
+++ b/docs/0.9.5/.buildinfo
@@ -1,4 +1,4 @@
# Sphinx build info version 1
# This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 21a086e5f445c8a1ded1b617b003187b
+config: 65441ee9e19485ae279c132283bfeb56
tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/0.9.5/_modules/evennia/accounts/accounts.html b/docs/0.9.5/_modules/evennia/accounts/accounts.html
index f1e95fbbbe..aa5236be29 100644
--- a/docs/0.9.5/_modules/evennia/accounts/accounts.html
+++ b/docs/0.9.5/_modules/evennia/accounts/accounts.html
@@ -888,7 +888,7 @@
[docs] def delete(self, *args, **kwargs):
"""
-
Deletes the account permanently.
+
Deletes the account persistently.
Notes:
`*args` and `**kwargs` are passed on to the base delete
@@ -1237,7 +1237,7 @@
self.locks.add(lockstring)
# The ooc account cmdset
-
self.cmdset.add_default(_CMDSET_ACCOUNT, permanent=True)
+ self.cmdset.add_default(_CMDSET_ACCOUNT, persistent=True)
[docs] def at_account_creation(self):
"""
diff --git a/docs/0.9.5/_modules/evennia/commands/cmdhandler.html b/docs/0.9.5/_modules/evennia/commands/cmdhandler.html
index f713c086d4..2cf5c94700 100644
--- a/docs/0.9.5/_modules/evennia/commands/cmdhandler.html
+++ b/docs/0.9.5/_modules/evennia/commands/cmdhandler.html
@@ -779,6 +779,10 @@
sysarg += _(' Type "help" for help.')
raise ExecSystemCommand(syscmd, sysarg)
+
if not cmd.retain_instance:
+
# making a copy allows multiple users to share the command also when yield is used
+
cmd = copy(cmd)
+
# A normal command.
ret = yield _run_command(cmd, cmdname, args, raw_cmdname, cmdset, session, account)
returnValue(ret)
diff --git a/docs/0.9.5/_modules/evennia/commands/cmdset.html b/docs/0.9.5/_modules/evennia/commands/cmdset.html
index 81dfd7ff29..a8eb69443e 100644
--- a/docs/0.9.5/_modules/evennia/commands/cmdset.html
+++ b/docs/0.9.5/_modules/evennia/commands/cmdset.html
@@ -218,7 +218,7 @@
# merge-stack, every cmdset in the stack must have `duplicates` set explicitly.
duplicates = None
-
permanent = False
+
persistent = False
key_mergetypes = {}
errmessage = ""
# pre-store properties to duplicate straight off
@@ -228,7 +228,7 @@
"no_exits",
"no_objs",
"no_channels",
-
"permanent",
+
"persistent",
"mergetype",
"priority",
"duplicates",
@@ -398,7 +398,7 @@
commands (str): Representation of commands in Cmdset.
"""
-
perm = "perm" if self.permanent else "non-perm"
+
perm = "perm" if self.persistent else "non-perm"
options = ", ".join([
"{}:{}".format(opt, "T" if getattr(self, opt) else "F")
for opt in ("no_exits", "no_objs", "no_channels", "duplicates")
diff --git a/docs/0.9.5/_modules/evennia/commands/cmdsethandler.html b/docs/0.9.5/_modules/evennia/commands/cmdsethandler.html
index 8d4fbb5885..cb4394b620 100644
--- a/docs/0.9.5/_modules/evennia/commands/cmdsethandler.html
+++ b/docs/0.9.5/_modules/evennia/commands/cmdsethandler.html
@@ -346,7 +346,7 @@
self.mergetype_stack = ["Union"]
# the subset of the cmdset_paths that are to be stored in the database
-
self.permanent_paths = [""]
+
self.persistent_paths = [""]
if init_true:
self.update(init_mode=True) # is then called from the object __init__.
@@ -404,7 +404,7 @@
Args:
init_mode (bool, optional): Used automatically right after
- this handler was created; it imports all permanent cmdsets
+ this handler was created; it imports all persistent cmdsets
from the database.
Notes:
@@ -419,7 +419,7 @@
"""
if init_mode:
- # reimport all permanent cmdsets
+ # reimport all persistent cmdsets
storage = self.obj.cmdset_storage
if storage:
self.cmdset_stack = []
@@ -449,7 +449,7 @@
if _IN_GAME_ERRORS:
self.obj.msg(err)
continue
- cmdset.permanent = cmdset.key != "_CMDSET_ERROR"
+ cmdset.persistent = cmdset.key != "_CMDSET_ERROR"
self.cmdset_stack.append(cmdset)
# merge the stack into a new merged cmdset
@@ -464,7 +464,7 @@
self.mergetype_stack.append(new_current.actual_mergetype)
self.current = new_current
-[docs] def add(self, cmdset, emit_to_obj=None, persistent=True, default_cmdset=False,
+
[docs] def add(self, cmdset, emit_to_obj=None, persistent=False, default_cmdset=False,
**kwargs):
"""
Add a cmdset to the handler, on top of the old ones, unless it
@@ -506,7 +506,7 @@
# this is (maybe) a python path. Try to import from cache.
cmdset = self._import_cmdset(cmdset)
if cmdset and cmdset.key != "_CMDSET_ERROR":
-
cmdset.permanent = persistent # TODO change on cmdset too
+
cmdset.persistent = persistent
if persistent and cmdset.key != "_CMDSET_ERROR":
# store the path permanently
storage = self.obj.cmdset_storage or [""]
@@ -555,7 +555,7 @@
# remove the default cmdset only
if self.cmdset_stack:
cmdset = self.cmdset_stack[0]
-
if cmdset.permanent:
+
if cmdset.persistent:
storage = self.obj.cmdset_storage or [""]
storage[0] = ""
self.obj.cmdset_storage = storage
@@ -572,7 +572,7 @@
if not cmdset:
# remove the last one in the stack
cmdset = self.cmdset_stack.pop()
-
if cmdset.permanent:
+
if cmdset.persistent:
storage = self.obj.cmdset_storage
storage.pop()
self.obj.cmdset_storage = storage
@@ -589,12 +589,12 @@
]
storage = []
-
if any(cset.permanent for cset in delcmdsets):
+
if any(cset.persistent for cset in delcmdsets):
# only hit database if there's need to
storage = self.obj.cmdset_storage
updated = False
for cset in delcmdsets:
-
if cset.permanent:
+
if cset.persistent:
try:
storage.remove(cset.path)
updated = True
diff --git a/docs/0.9.5/_modules/evennia/commands/command.html b/docs/0.9.5/_modules/evennia/commands/command.html
index 738a5fcc24..2c98405ea7 100644
--- a/docs/0.9.5/_modules/evennia/commands/command.html
+++ b/docs/0.9.5/_modules/evennia/commands/command.html
@@ -125,6 +125,9 @@
cls.is_exit = False
if not hasattr(cls, "help_category"):
cls.help_category = "general"
+
if not hasattr(cls, "retain_instance"):
+
cls.retain_instance = False
+
# make sure to pick up the parent's docstring if the child class is
# missing one (important for auto-help)
if cls.__doc__ is None:
@@ -230,6 +233,11 @@
# whether self.msg sends to all sessions of a related account/object (default
# is to only send to the session sending the command).
msg_all_sessions = settings.COMMAND_DEFAULT_MSG_ALL_SESSIONS
+
# whether the exact command instance should be retained between command calls.
+
# By default it's False; this allows for retaining state and saves some CPU, but
+
# can cause cross-talk between users if multiple users access the same command
+
# (especially if the command is using yield)
+
retain_instance = False
# auto-set (by Evennia on command instantiation) are:
# obj - which object this command is defined on
diff --git a/docs/0.9.5/_modules/evennia/commands/default/building.html b/docs/0.9.5/_modules/evennia/commands/default/building.html
index 35980b1a7b..a9b6101bdb 100644
--- a/docs/0.9.5/_modules/evennia/commands/default/building.html
+++ b/docs/0.9.5/_modules/evennia/commands/default/building.html
@@ -43,9 +43,11 @@
Building and world design commands
"""
import re
+
from django.core.paginator import Paginator
from django.conf import settings
from django.db.models import Q, Min, Max
from evennia import InterruptCommand
+
from evennia.scripts.models import ScriptDB
from evennia.objects.models import ObjectDB
from evennia.locks.lockhandler import LockException
from evennia.commands.cmdhandler import get_and_merge_cmdsets
@@ -55,13 +57,14 @@
class_from_module,
get_all_typeclasses,
variable_from_module,
-
dbref,
+
dbref, crop,
interactive,
list_to_string,
display_len,
)
from evennia.utils.eveditor import EvEditor
from evennia.utils.evmore import EvMore
+
from evennia.utils.evtable import EvTable
from evennia.prototypes import spawner, prototypes as protlib, menus as olc_menus
from evennia.utils.ansi import raw as ansi_raw
@@ -94,7 +97,8 @@
"CmdExamine",
"CmdFind",
"CmdTeleport",
-
"CmdScript",
+
"CmdScripts",
+
"CmdObjects",
"CmdTag",
"CmdSpawn",
)
@@ -1955,7 +1959,7 @@
typeclass[/switch] <object> [= typeclass.path]
typeclass/prototype <object> = prototype_key
-
typeclass/list/show [typeclass.path]
+
typeclasses or typeclass/list/show [typeclass.path]
swap - this is a shorthand for using /force/reset flags.
update - this is a shorthand for using the /force/reload flag.
@@ -1997,17 +2001,63 @@
"""
key = "typeclass"
-
aliases = ["type", "parent", "swap", "update"]
+
aliases = ["type", "parent", "swap", "update", "typeclasses"]
switch_options = ("show", "examine", "update", "reset", "force", "list", "prototype")
locks = "cmd:perm(typeclass) or perm(Builder)"
help_category = "Building"
+
def _generic_search(self, query, typeclass_path):
+
+
caller = self.caller
+
if typeclass_path:
+
# make sure we search the right database table
+
try:
+
new_typeclass = class_from_module(typeclass_path)
+
except ImportError:
+
# this could be a prototype and not a typeclass at all
+
return caller.search(query)
+
+
dbclass = new_typeclass.__dbclass__
+
+
if caller.__dbclass__ == dbclass:
+
# object or account match
+
obj = caller.search(query)
+
if not obj:
+
return
+
elif (self.account and self.account.__dbclass__ == dbclass):
+
# applying account while caller is object
+
caller.msg(f"Trying to search {new_typeclass} with query '{self.lhs}'.")
+
obj = self.account.search(query)
+
if not obj:
+
return
+
elif hasattr(caller, "puppet") and caller.puppet.__dbclass__ == dbclass:
+
# applying object while caller is account
+
caller.msg(f"Trying to search {new_typeclass} with query '{self.lhs}'.")
+
obj = caller.puppet.search(query)
+
if not obj:
+
return
+
else:
+
# other mismatch between caller and specified typeclass
+
caller.msg(f"Trying to search {new_typeclass} with query '{self.lhs}'.")
+
obj = new_typeclass.search(query)
+
if not obj:
+
if isinstance(obj, list):
+
caller.msg(f"Could not find {new_typeclass} with query '{self.lhs}'.")
+
return
+
else:
+
# no rhs, use caller's typeclass
+
obj = caller.search(query)
+
if not obj:
+
return
+
+
return obj
+
[docs] def func(self):
"""Implements command"""
caller = self.caller
-
if "list" in self.switches:
+
if "list" in self.switches or self.cmdname == 'typeclasses':
tclasses = get_all_typeclasses()
contribs = [key for key in sorted(tclasses) if key.startswith("evennia.contrib")] or [
"<None loaded>"
@@ -2070,8 +2120,7 @@
)
return
-
# get object to swap on
-
obj = caller.search(self.lhs)
+
obj = self._generic_search(self.lhs, self.rhs)
if not obj:
return
@@ -2125,10 +2174,8 @@
is_same = obj.is_typeclass(new_typeclass, exact=True)
if is_same and "force" not in self.switches:
-
string = "%s already has the typeclass '%s'. Use /force to override." % (
-
obj.name,
-
new_typeclass,
-
)
+
string = (f"{obj.name} already has the typeclass '{new_typeclass}'. "
+
"Use /force to override.")
else:
update = "update" in self.switches
reset = "reset" in self.switches
@@ -2981,6 +3028,330 @@
caller.msg(string.strip())
+
class ScriptEvMore(EvMore):
+
"""
+
Listing 1000+ Scripts can be very slow and memory-consuming. So
+
we use this custom EvMore child to build en EvTable only for
+
each page of the list.
+
+
"""
+
+
def init_pages(self, scripts):
+
"""Prepare the script list pagination"""
+
script_pages = Paginator(scripts, max(1, int(self.height / 2)))
+
super().init_pages(script_pages)
+
+
def page_formatter(self, scripts):
+
"""Takes a page of scripts and formats the output
+
into an EvTable."""
+
+
if not scripts:
+
return "<No scripts>"
+
+
table = EvTable(
+
"|wdbref|n",
+
"|wobj|n",
+
"|wkey|n",
+
"|wintval|n",
+
"|wnext|n",
+
"|wrept|n",
+
"|wtypeclass|n",
+
"|wdesc|n",
+
align="r",
+
border="tablecols",
+
width=self.width,
+
)
+
+
for script in scripts:
+
+
nextrep = script.time_until_next_repeat()
+
if nextrep is None:
+
nextrep = script.db._paused_time
+
nextrep = f"PAUSED {int(nextrep)}s" if nextrep else "--"
+
else:
+
nextrep = f"{nextrep}s"
+
+
maxrepeat = script.repeats
+
remaining = script.remaining_repeats() or 0
+
if maxrepeat:
+
rept = "%i/%i" % (maxrepeat - remaining, maxrepeat)
+
else:
+
rept = "-/-"
+
+
table.add_row(
+
f"#{script.id}",
+
f"{script.obj.key}({script.obj.dbref})"
+
if (hasattr(script, "obj") and script.obj)
+
else "<Global>",
+
script.key,
+
script.interval if script.interval > 0 else "--",
+
nextrep,
+
rept,
+
script.typeclass_path.rsplit(".", 1)[-1],
+
crop(script.desc, width=20),
+
)
+
+
return str(table)
+
+
+
[docs]class CmdScripts(COMMAND_DEFAULT_CLASS):
+
"""
+
List and manage all running scripts. Allows for creating new global
+
scripts.
+
+
Usage:
+
script[/switches] [script-#dbref, key, script.path or <obj>]
+
script[/start||stop] <obj> = <script.path or script-key>
+
+
Switches:
+
start - start/unpause an existing script's timer.
+
stop - stops an existing script's timer
+
pause - pause a script's timer
+
delete - deletes script. This will also stop the timer as needed
+
+
Examples:
+
script - list scripts
+
script myobj - list all scripts on object
+
script foo.bar.Script - create a new global Script
+
script scriptname - examine named existing global script
+
script myobj = foo.bar.Script - create and assign script to object
+
script/stop myobj = scriptname - stop script on object
+
script/pause foo.Bar.Script - pause global script
+
script/delete myobj - delete ALL scripts on object
+
+
When given with an `<obj>` as left-hand-side, this creates and
+
assigns a new script to that object. Without an `<obj>`, this
+
manages and inspects global scripts
+
+
If no switches are given, this command just views all active
+
scripts. The argument can be either an object, at which point it
+
will be searched for all scripts defined on it, or a script name
+
or #dbref. For using the /stop switch, a unique script #dbref is
+
required since whole classes of scripts often have the same name.
+
+
Use the `script` build-level command for managing scripts attached to
+
objects.
+
+
"""
+
+
key = "scripts"
+
aliases = ["script"]
+
switch_options = ("create", "start", "stop", "pause", "delete")
+
locks = "cmd:perm(scripts) or perm(Builder)"
+
help_category = "System"
+
+
excluded_typeclass_paths = ["evennia.prototypes.prototypes.DbPrototype"]
+
+
switch_mapping = {
+
"create": "|gCreated|n",
+
"start": "|gStarted|n",
+
"stop": "|RStopped|n",
+
"pause": "|Paused|n",
+
"delete": "|rDeleted|n"
+
}
+
+
def _search_script(self, args):
+
# test first if this is a script match
+
scripts = ScriptDB.objects.get_all_scripts(key=args)
+
if scripts:
+
return scripts
+
# try typeclass path
+
scripts = ScriptDB.objects.filter(db_typeclass_path__iendswith=args)
+
if scripts:
+
return scripts
+
+
[docs] def func(self):
+
"""implement method"""
+
+
caller = self.caller
+
+
if not self.args:
+
# show all scripts
+
scripts = ScriptDB.objects.all()
+
if not scripts:
+
caller.msg("No scripts found.")
+
return
+
ScriptEvMore(caller, scripts.order_by("id"), session=self.session)
+
return
+
+
# find script or object to operate on
+
scripts, obj = None, None
+
if self.rhs:
+
obj_query = self.lhs
+
script_query = self.rhs
+
else:
+
obj_query = script_query = self.args
+
+
scripts = self._search_script(script_query)
+
objects = ObjectDB.objects.object_search(obj_query)
+
obj = objects[0] if objects else None
+
+
if not self.switches:
+
# creation / view mode
+
if obj:
+
# we have an object
+
if self.rhs:
+
# creation mode
+
if obj.scripts.add(self.rhs, autostart=True):
+
caller.msg(
+
f"Script |w{self.rhs}|n successfully added and "
+
f"started on {obj.get_display_name(caller)}.")
+
else:
+
caller.msg(f"Script {self.rhs} could not be added and/or started "
+
f"on {obj.get_display_name(caller)} (or it started and "
+
"immediately shut down).")
+
else:
+
# just show all scripts on object
+
scripts = ScriptDB.objects.filter(db_obj=obj)
+
if scripts:
+
ScriptEvMore(caller, scripts.order_by("id"), session=self.session)
+
else:
+
caller.msg(f"No scripts defined on {obj}")
+
+
elif scripts:
+
# show found script(s)
+
ScriptEvMore(caller, scripts.order_by("id"), session=self.session)
+
+
else:
+
# create global script
+
try:
+
new_script = create.create_script(self.args)
+
except ImportError:
+
logger.log_trace()
+
new_script = None
+
+
if new_script:
+
caller.msg(f"Global Script Created - "
+
f"{new_script.key} ({new_script.typeclass_path})")
+
ScriptEvMore(caller, [new_script], session=self.session)
+
else:
+
caller.msg(f"Global Script |rNOT|n Created |r(see log)|n - "
+
f"arguments: {self.args}")
+
+
elif scripts or obj:
+
# modification switches - must operate on existing scripts
+
+
if not scripts:
+
scripts = ScriptDB.objects.filter(db_obj=obj)
+
+
if scripts.count() > 1:
+
ret = yield(f"Multiple scripts found: {scripts}. Are you sure you want to "
+
"operate on all of them? [Y]/N? ")
+
if ret.lower() in ('n', 'no'):
+
caller.msg("Aborted.")
+
return
+
+
for script in scripts:
+
script_key = script.key
+
script_typeclass_path = script.typeclass_path
+
scripttype = f"Script on {obj}" if obj else "Global Script"
+
+
for switch in self.switches:
+
verb = self.switch_mapping[switch]
+
msgs = []
+
try:
+
getattr(script, switch)()
+
except Exception:
+
logger.log_trace()
+
msgs.append(f"{scripttype} |rNOT|n {verb} |r(see log)|n - "
+
f"{script_key} ({script_typeclass_path})|n")
+
else:
+
msgs.append(f"{scripttype} {verb} - "
+
f"{script_key} ({script_typeclass_path})")
+
caller.msg("\n".join(msgs))
+
if "delete" not in self.switches:
+
ScriptEvMore(caller, [script], session=self.session)
+
else:
+
caller.msg("No scripts found.")
+
+
+
[docs]class CmdObjects(COMMAND_DEFAULT_CLASS):
+
"""
+
statistics on objects in the database
+
+
Usage:
+
objects [<nr>]
+
+
Gives statictics on objects in database as well as
+
a list of <nr> latest objects in database. If not
+
given, <nr> defaults to 10.
+
"""
+
+
key = "objects"
+
aliases = ["listobjects", "listobjs", "stats", "db"]
+
locks = "cmd:perm(listobjects) or perm(Builder)"
+
help_category = "System"
+
+
[docs] def func(self):
+
"""Implement the command"""
+
+
caller = self.caller
+
nlim = int(self.args) if self.args and self.args.isdigit() else 10
+
nobjs = ObjectDB.objects.count()
+
Character = class_from_module(settings.BASE_CHARACTER_TYPECLASS)
+
nchars = Character.objects.all_family().count()
+
Room = class_from_module(settings.BASE_ROOM_TYPECLASS)
+
nrooms = Room.objects.all_family().count()
+
Exit = class_from_module(settings.BASE_EXIT_TYPECLASS)
+
nexits = Exit.objects.all_family().count()
+
nother = nobjs - nchars - nrooms - nexits
+
nobjs = nobjs or 1 # fix zero-div error with empty database
+
+
# total object sum table
+
totaltable = self.styled_table(
+
"|wtype|n", "|wcomment|n", "|wcount|n", "|w%|n", border="table", align="l"
+
)
+
totaltable.align = "l"
+
totaltable.add_row(
+
"Characters",
+
"(BASE_CHARACTER_TYPECLASS + children)",
+
nchars,
+
"%.2f" % ((float(nchars) / nobjs) * 100),
+
)
+
totaltable.add_row(
+
"Rooms",
+
"(BASE_ROOM_TYPECLASS + children)",
+
nrooms,
+
"%.2f" % ((float(nrooms) / nobjs) * 100),
+
)
+
totaltable.add_row(
+
"Exits",
+
"(BASE_EXIT_TYPECLASS + children)",
+
nexits,
+
"%.2f" % ((float(nexits) / nobjs) * 100),
+
)
+
totaltable.add_row("Other", "", nother, "%.2f" % ((float(nother) / nobjs) * 100))
+
+
# typeclass table
+
typetable = self.styled_table(
+
"|wtypeclass|n", "|wcount|n", "|w%|n", border="table", align="l"
+
)
+
typetable.align = "l"
+
dbtotals = ObjectDB.objects.get_typeclass_totals()
+
for stat in dbtotals:
+
typetable.add_row(
+
stat.get("typeclass", "<error>"),
+
stat.get("count", -1),
+
"%.2f" % stat.get("percent", -1),
+
)
+
+
# last N table
+
objs = ObjectDB.objects.all().order_by("db_date_created")[max(0, nobjs - nlim) :]
+
latesttable = self.styled_table(
+
"|wcreated|n", "|wdbref|n", "|wname|n", "|wtypeclass|n", align="l", border="table"
+
)
+
latesttable.align = "l"
+
for obj in objs:
+
latesttable.add_row(
+
utils.datetime_format(obj.date_created), obj.dbref, obj.key, obj.path
+
)
+
+
string = "\n|wObject subtype totals (out of %i Objects):|n\n%s" % (nobjs, totaltable)
+
string += "\n|wObject typeclass distribution:|n\n%s" % typetable
+
string += "\n|wLast %s Objects created:|n\n%s" % (min(nobjs, nlim), latesttable)
+
caller.msg(string)
+
+
[docs]class CmdTeleport(COMMAND_DEFAULT_CLASS):
"""
teleport object to another location
@@ -3105,113 +3476,6 @@
caller.msg("Teleportation failed.")
-[docs]class CmdScript(COMMAND_DEFAULT_CLASS):
-
"""
-
attach a script to an object
-
-
Usage:
-
addscript[/switch] <obj> [= script_path or <scriptkey>]
-
-
Switches:
-
start - start all non-running scripts on object, or a given script only
-
stop - stop all scripts on objects, or a given script only
-
-
If no script path/key is given, lists all scripts active on the given
-
object.
-
Script path can be given from the base location for scripts as given in
-
settings. If adding a new script, it will be started automatically
-
(no /start switch is needed). Using the /start or /stop switches on an
-
object without specifying a script key/path will start/stop ALL scripts on
-
the object.
-
"""
-
-
key = "addscript"
-
aliases = ["attachscript"]
-
switch_options = ("start", "stop")
-
locks = "cmd:perm(script) or perm(Builder)"
-
help_category = "Building"
-
-
[docs] def func(self):
-
"""Do stuff"""
-
-
caller = self.caller
-
-
if not self.args:
-
string = "Usage: script[/switch] <obj> [= script_path or <script key>]"
-
caller.msg(string)
-
return
-
-
if not self.lhs:
-
caller.msg("To create a global script you need |wscripts/add <typeclass>|n.")
-
return
-
-
obj = caller.search(self.lhs)
-
if not obj:
-
return
-
-
result = []
-
if not self.rhs:
-
# no rhs means we want to operate on all scripts
-
scripts = obj.scripts.all()
-
if not scripts:
-
result.append("No scripts defined on %s." % obj.get_display_name(caller))
-
elif not self.switches:
-
# view all scripts
-
from evennia.commands.default.system import ScriptEvMore
-
-
ScriptEvMore(self.caller, scripts.order_by("id"), session=self.session)
-
return
-
elif "start" in self.switches:
-
num = sum([obj.scripts.start(script.key) for script in scripts])
-
result.append("%s scripts started on %s." % (num, obj.get_display_name(caller)))
-
elif "stop" in self.switches:
-
for script in scripts:
-
result.append(
-
"Stopping script %s on %s."
-
% (script.get_display_name(caller), obj.get_display_name(caller))
-
)
-
script.stop()
-
else: # rhs exists
-
if not self.switches:
-
# adding a new script, and starting it
-
ok = obj.scripts.add(self.rhs, autostart=True)
-
if not ok:
-
result.append(
-
"\nScript %s could not be added and/or started on %s "
-
"(or it started and immediately shut down)."
-
% (self.rhs, obj.get_display_name(caller))
-
)
-
else:
-
result.append(
-
"Script |w%s|n successfully added and started on %s."
-
% (self.rhs, obj.get_display_name(caller))
-
)
-
-
else:
-
paths = [self.rhs] + [
-
"%s.%s" % (prefix, self.rhs) for prefix in settings.TYPECLASS_PATHS
-
]
-
if "stop" in self.switches:
-
# we are stopping an already existing script
-
for path in paths:
-
ok = obj.scripts.stop(path)
-
if not ok:
-
result.append("\nScript %s could not be stopped. Does it exist?" % path)
-
else:
-
result = ["Script stopped and removed from object."]
-
break
-
if "start" in self.switches:
-
# we are starting an already existing script
-
for path in paths:
-
ok = obj.scripts.start(path)
-
if not ok:
-
result.append("\nScript %s could not be (re)started." % path)
-
else:
-
result = ["Script started successfully."]
-
break
-
-
EvMore(caller, "".join(result).strip())
-
[docs]class CmdTag(COMMAND_DEFAULT_CLASS):
"""
diff --git a/docs/0.9.5/_modules/evennia/commands/default/cmdset_character.html b/docs/0.9.5/_modules/evennia/commands/default/cmdset_character.html
index 52788ad72b..755756fd18 100644
--- a/docs/0.9.5/_modules/evennia/commands/default/cmdset_character.html
+++ b/docs/0.9.5/_modules/evennia/commands/default/cmdset_character.html
@@ -82,8 +82,6 @@
# System commands
self.add(system.CmdPy())
-
self.add(system.CmdScripts())
-
self.add(system.CmdObjects())
self.add(system.CmdAccounts())
self.add(system.CmdService())
self.add(system.CmdAbout())
@@ -124,10 +122,11 @@
self.add(building.CmdExamine())
self.add(building.CmdTypeclass())
self.add(building.CmdLock())
-
self.add(building.CmdScript())
self.add(building.CmdSetHome())
self.add(building.CmdTag())
self.add(building.CmdSpawn())
+
self.add(building.CmdScripts())
+
self.add(building.CmdObjects())
# Batchprocessor commands
self.add(batchprocess.CmdBatchCommands())
diff --git a/docs/0.9.5/_modules/evennia/commands/default/system.html b/docs/0.9.5/_modules/evennia/commands/default/system.html
index cc89f668db..413e295f30 100644
--- a/docs/0.9.5/_modules/evennia/commands/default/system.html
+++ b/docs/0.9.5/_modules/evennia/commands/default/system.html
@@ -56,17 +56,13 @@
import time
from django.conf import settings
-
from django.core.paginator import Paginator
from evennia.server.sessionhandler import SESSIONS
-
from evennia.scripts.models import ScriptDB
-
from evennia.objects.models import ObjectDB
from evennia.accounts.models import AccountDB
-
from evennia.utils import logger, utils, gametime, create, search
+
from evennia.utils import logger, utils, gametime, search
from evennia.utils.eveditor import EvEditor
from evennia.utils.evtable import EvTable
-
from evennia.utils.evmore import EvMore
from evennia.utils.evmenu import ask_yes_no
-
from evennia.utils.utils import crop, class_from_module, iter_to_str
+
from evennia.utils.utils import class_from_module, iter_to_str
from evennia.scripts.taskhandler import TaskHandlerTask
COMMAND_DEFAULT_CLASS = class_from_module(settings.COMMAND_DEFAULT_CLASS)
@@ -82,8 +78,6 @@
"CmdReset",
"CmdShutdown",
"CmdPy",
-
"CmdScripts",
-
"CmdObjects",
"CmdService",
"CmdAbout",
"CmdTime",
@@ -453,278 +447,6 @@
)
-class ScriptEvMore(EvMore):
- """
- Listing 1000+ Scripts can be very slow and memory-consuming. So
- we use this custom EvMore child to build en EvTable only for
- each page of the list.
-
- """
-
- def init_pages(self, scripts):
- """Prepare the script list pagination"""
- script_pages = Paginator(scripts, max(1, int(self.height / 2)))
- super().init_pages(script_pages)
-
- def page_formatter(self, scripts):
- """Takes a page of scripts and formats the output
- into an EvTable."""
-
- if not scripts:
- return "<No scripts>"
-
- table = EvTable(
- "|wdbref|n",
- "|wobj|n",
- "|wkey|n",
- "|wintval|n",
- "|wnext|n",
- "|wrept|n",
- "|wtypeclass|n",
- "|wdesc|n",
- align="r",
- border="tablecols",
- width=self.width,
- )
-
- for script in scripts:
-
- nextrep = script.time_until_next_repeat()
- if nextrep is None:
- nextrep = script.db._paused_time
- nextrep = f"PAUSED {int(nextrep)}s" if nextrep else "--"
- else:
- nextrep = f"{nextrep}s"
-
- maxrepeat = script.repeats
- remaining = script.remaining_repeats() or 0
- if maxrepeat:
- rept = "%i/%i" % (maxrepeat - remaining, maxrepeat)
- else:
- rept = "-/-"
-
- table.add_row(
- f"#{script.id}",
- f"{script.obj.key}({script.obj.dbref})"
- if (hasattr(script, "obj") and script.obj)
- else "<Global>",
- script.key,
- script.interval if script.interval > 0 else "--",
- nextrep,
- rept,
- script.typeclass_path.rsplit(".", 1)[-1],
- crop(script.desc, width=20),
- )
-
- return str(table)
-
-
-[docs]class CmdScripts(COMMAND_DEFAULT_CLASS):
-
"""
-
List and manage all running scripts. Allows for creating new global
-
scripts.
-
-
Usage:
-
script[/switches] [#dbref, key, script.path or <obj>]
-
-
Switches:
-
create - create a new global script of given typeclass path. This will
-
auto-start the script's timer if it has one.
-
start - start/unpause an existing script's timer.
-
stop - stops an existing script's timer
-
pause - pause a script's timer
-
delete - deletes script. This will also stop the timer as needed
-
-
If no switches are given, this command just views all active
-
scripts. The argument can be either an object, at which point it
-
will be searched for all scripts defined on it, or a script name
-
or #dbref. For using the /stop switch, a unique script #dbref is
-
required since whole classes of scripts often have the same name.
-
-
Use the `script` build-level command for managing scripts attached to
-
objects.
-
-
"""
-
-
key = "scripts"
-
aliases = ["scripts"]
-
switch_options = ("create", "start", "stop", "pause", "delete")
-
locks = "cmd:perm(listscripts) or perm(Admin)"
-
help_category = "System"
-
-
excluded_typeclass_paths = ["evennia.prototypes.prototypes.DbPrototype"]
-
-
switch_mapping = {
-
"create": "|gCreated|n",
-
"start": "|gStarted|n",
-
"stop": "|RStopped|n",
-
"pause": "|Paused|n",
-
"delete": "|rDeleted|n"
-
}
-
-
def _search_script(self, args):
-
# test first if this is a script match
-
scripts = ScriptDB.objects.get_all_scripts(key=args)
-
if scripts:
-
return scripts
-
# try typeclass path
-
scripts = ScriptDB.objects.filter(db_typeclass_path__iendswith=args)
-
if scripts:
-
return scripts
-
# try to find an object instead.
-
objects = ObjectDB.objects.object_search(args)
-
if objects:
-
scripts = ScriptDB.objects.filter(db_obj__in=objects)
-
return scripts
-
-
[docs] def func(self):
-
"""implement method"""
-
-
caller = self.caller
-
args = self.args
-
-
if "create" in self.switches:
-
# global script-start mode
-
verb = self.switch_mapping['create']
-
if not args:
-
caller.msg("Usage script/create <key or typeclass>")
-
return
-
new_script = create.create_script(args)
-
if new_script:
-
caller.msg(f"Global Script {verb} - {new_script.key} ({new_script.typeclass_path})")
-
ScriptEvMore(caller, [new_script], session=self.session)
-
else:
-
caller.msg(f"Global Script |rNOT|n {verb} |r(see log)|n - arguments: {args}")
-
return
-
-
# all other switches require existing scripts
-
if args:
-
scripts = self._search_script(args)
-
if not scripts:
-
caller.msg(f"No scripts found matching '{args}'.")
-
return
-
else:
-
scripts = ScriptDB.objects.all()
-
if not scripts:
-
caller.msg("No scripts found.")
-
return
-
-
if args and self.switches:
-
# global script-modifying mode
-
if scripts.count() > 1:
-
caller.msg("Multiple script matches. Please refine your search.")
-
return
-
script = scripts[0]
-
script_key = script.key
-
script_typeclass_path = script.typeclass_path
-
for switch in self.switches:
-
verb = self.switch_mapping[switch]
-
msgs = []
-
try:
-
getattr(script, switch)()
-
except Exception:
-
logger.log_trace()
-
msgs.append(f"Global Script |rNOT|n {verb} |r(see log)|n - "
-
f"{script_key} ({script_typeclass_path})|n")
-
else:
-
msgs.append(f"Global Script {verb} - "
-
f"{script_key} ({script_typeclass_path})")
-
caller.msg("\n".join(msgs))
-
if "delete" not in self.switches:
-
ScriptEvMore(caller, [script], session=self.session)
-
return
-
else:
-
# simply show the found scripts
-
ScriptEvMore(caller, scripts.order_by("id"), session=self.session)
-
-
-[docs]class CmdObjects(COMMAND_DEFAULT_CLASS):
-
"""
-
statistics on objects in the database
-
-
Usage:
-
objects [<nr>]
-
-
Gives statictics on objects in database as well as
-
a list of <nr> latest objects in database. If not
-
given, <nr> defaults to 10.
-
"""
-
-
key = "objects"
-
aliases = ["listobjects", "listobjs", "stats", "db"]
-
locks = "cmd:perm(listobjects) or perm(Builder)"
-
help_category = "System"
-
-
[docs] def func(self):
-
"""Implement the command"""
-
-
caller = self.caller
-
nlim = int(self.args) if self.args and self.args.isdigit() else 10
-
nobjs = ObjectDB.objects.count()
-
Character = class_from_module(settings.BASE_CHARACTER_TYPECLASS)
-
nchars = Character.objects.all_family().count()
-
Room = class_from_module(settings.BASE_ROOM_TYPECLASS)
-
nrooms = Room.objects.all_family().count()
-
Exit = class_from_module(settings.BASE_EXIT_TYPECLASS)
-
nexits = Exit.objects.all_family().count()
-
nother = nobjs - nchars - nrooms - nexits
-
nobjs = nobjs or 1 # fix zero-div error with empty database
-
-
# total object sum table
-
totaltable = self.styled_table(
-
"|wtype|n", "|wcomment|n", "|wcount|n", "|w%|n", border="table", align="l"
-
)
-
totaltable.align = "l"
-
totaltable.add_row(
-
"Characters",
-
"(BASE_CHARACTER_TYPECLASS + children)",
-
nchars,
-
"%.2f" % ((float(nchars) / nobjs) * 100),
-
)
-
totaltable.add_row(
-
"Rooms",
-
"(BASE_ROOM_TYPECLASS + children)",
-
nrooms,
-
"%.2f" % ((float(nrooms) / nobjs) * 100),
-
)
-
totaltable.add_row(
-
"Exits",
-
"(BASE_EXIT_TYPECLASS + children)",
-
nexits,
-
"%.2f" % ((float(nexits) / nobjs) * 100),
-
)
-
totaltable.add_row("Other", "", nother, "%.2f" % ((float(nother) / nobjs) * 100))
-
-
# typeclass table
-
typetable = self.styled_table(
-
"|wtypeclass|n", "|wcount|n", "|w%|n", border="table", align="l"
-
)
-
typetable.align = "l"
-
dbtotals = ObjectDB.objects.get_typeclass_totals()
-
for stat in dbtotals:
-
typetable.add_row(
-
stat.get("typeclass", "<error>"),
-
stat.get("count", -1),
-
"%.2f" % stat.get("percent", -1),
-
)
-
-
# last N table
-
objs = ObjectDB.objects.all().order_by("db_date_created")[max(0, nobjs - nlim) :]
-
latesttable = self.styled_table(
-
"|wcreated|n", "|wdbref|n", "|wname|n", "|wtypeclass|n", align="l", border="table"
-
)
-
latesttable.align = "l"
-
for obj in objs:
-
latesttable.add_row(
-
utils.datetime_format(obj.date_created), obj.dbref, obj.key, obj.path
-
)
-
-
string = "\n|wObject subtype totals (out of %i Objects):|n\n%s" % (nobjs, totaltable)
-
string += "\n|wObject typeclass distribution:|n\n%s" % typetable
-
string += "\n|wLast %s Objects created:|n\n%s" % (min(nobjs, nlim), latesttable)
-
caller.msg(string)
-
-
class CmdAccounts(COMMAND_DEFAULT_CLASS):
"""
Manage registered accounts
diff --git a/docs/0.9.5/_modules/evennia/commands/default/tests.html b/docs/0.9.5/_modules/evennia/commands/default/tests.html
index a446845aaa..44e37d427f 100644
--- a/docs/0.9.5/_modules/evennia/commands/default/tests.html
+++ b/docs/0.9.5/_modules/evennia/commands/default/tests.html
@@ -606,10 +606,10 @@
self.call(system.CmdPy(), "/clientraw 1+2", ">>> 1+2|3")
[docs] def test_scripts(self):
-
self.call(system.CmdScripts(), "", "dbref ")
+ self.call(building.CmdScripts(), "", "dbref ")
[docs] def test_objects(self):
-
self.call(system.CmdObjects(), "", "Object subtype totals")
+ self.call(building.CmdObjects(), "", "Object subtype totals")
[docs] def test_about(self):
self.call(system.CmdAbout(), "", None)
@@ -1614,37 +1614,59 @@
self.call(building.CmdFind(), f"=#{id1}-{id2}", f"{mdiff} Matches(#{id1}-#{id2}):")
[docs] def test_script(self):
-
self.call(building.CmdScript(), "Obj = ", "No scripts defined on Obj")
+
self.call(building.CmdScripts(), "Obj", "No scripts defined on Obj")
self.call(
-
building.CmdScript(), "Obj = scripts.Script", "Script scripts.Script successfully added"
+
building.CmdScripts(),
+
"Obj = scripts.Script",
+
"Script scripts.Script successfully added"
)
-
self.call(building.CmdScript(), "", "Usage: ")
self.call(
-
building.CmdScript(),
-
"= Obj",
-
"To create a global script you need scripts/add <typeclass>.",
+
building.CmdScripts(),
+
"evennia.Dummy",
+
"Global Script NOT Created "
)
-
self.call(building.CmdScript(), "Obj ", "dbref ")
+
self.call(
+
building.CmdScripts(),
+
"evennia.scripts.scripts.DoNothing",
+
"Global Script Created - sys_do_nothing "
+
)
+
self.call(building.CmdScripts(), "Obj ", "dbref ")
self.call(
-
building.CmdScript(), "/start Obj", "1 scripts started on Obj"
+
building.CmdScripts(), "/start Obj", "Script on Obj Started "
) # we allow running start again; this should still happen
-
self.call(building.CmdScript(), "/stop Obj", "Stopping script")
+
self.call(building.CmdScripts(), "/stop Obj", "Script on Obj Stopped - ")
self.call(
-
building.CmdScript(), "Obj = scripts.Script", "Script scripts.Script successfully added"
+
building.CmdScripts(), "Obj = scripts.Script",
+
"Script scripts.Script successfully added",
+
inputs=["Y"]
)
self.call(
-
building.CmdScript(),
+
building.CmdScripts(),
"/start Obj = scripts.Script",
-
"Script scripts.Script could not be (re)started.",
+
"Script on Obj Started ",
+
inputs=["Y"]
)
self.call(
-
building.CmdScript(),
+
building.CmdScripts(),
"/stop Obj = scripts.Script",
-
"Script stopped and removed from object.",
+
"Script on Obj Stopped ",
+
inputs=["Y"]
+
)
+
self.call(
+
building.CmdScripts(),
+
"/delete Obj = scripts.Script",
+
"Script on Obj Deleted ",
+
inputs=["Y"]
+
)
+
self.call(
+
building.CmdScripts(),
+
"/delete evennia.scripts.scripts.DoNothing",
+
"Global Script Deleted -"
)
+
[docs] def test_teleport(self):
oid = self.obj1.id
rid = self.room1.id
diff --git a/docs/0.9.5/_modules/evennia/contrib/building_menu.html b/docs/0.9.5/_modules/evennia/contrib/building_menu.html
index cfd8fe5c92..8754e3b12d 100644
--- a/docs/0.9.5/_modules/evennia/contrib/building_menu.html
+++ b/docs/0.9.5/_modules/evennia/contrib/building_menu.html
@@ -203,7 +203,7 @@
def _menu_quitfunc(caller):
caller.cmdset.add(
BuildingMenuCmdSet,
-
permanent=caller.ndb._building_menu and caller.ndb._building_menu.persistent or False,
+
persistent=caller.ndb._building_menu and caller.ndb._building_menu.persistent or False,
)
if caller.ndb._building_menu:
caller.ndb._building_menu.move(back=True)
@@ -992,7 +992,7 @@
if caller.cmdset.has(BuildingMenuCmdSet):
caller.cmdset.remove(BuildingMenuCmdSet)
-
self.caller.cmdset.add(BuildingMenuCmdSet, permanent=self.persistent)
+
self.caller.cmdset.add(BuildingMenuCmdSet, persistent=self.persistent)
self.display()
+ global _REGEX_TUPLE_CACHE
+ permutation_string = " ".join([obj.key] + obj.aliases.all())
+
+ if permutation_string not in _REGEX_TUPLE_CACHE:
+ _REGEX_TUPLE_CACHE[permutation_string] = (
+ re.compile(ordered_permutation_regex(permutation_string), _RE_FLAGS),
+ obj,
+ obj.key,
+ )
+ return _REGEX_TUPLE_CACHE[permutation_string]
[docs]def parse_language(speaker, emote):
@@ -484,7 +494,7 @@
errors.append(_EMOTE_NOMATCH_ERROR.format(ref=marker_match.group()))
elif nmatches == 1:
key = "#%i" % obj.id
-
string = string[:istart0] + "{%s}" % key + string[istart + maxscore :]
+
string = string[:istart0] + "{%s}" % key + string[istart + maxscore:]
mapping[key] = obj
else:
refname = marker_match.group()
@@ -1591,7 +1601,7 @@
self.db._recog_obj2regex = {}
self.db._recog_obj2recog = {}
-
self.cmdset.add(RPSystemCmdSet, permanent=True)
+
self.cmdset.add(RPSystemCmdSet, persistent=True)
# initializing sdesc
self.sdesc.add("A normal person")
diff --git a/docs/0.9.5/_modules/evennia/contrib/talking_npc.html b/docs/0.9.5/_modules/evennia/contrib/talking_npc.html
index 9ae1dee6c8..9a4026cf2e 100644
--- a/docs/0.9.5/_modules/evennia/contrib/talking_npc.html
+++ b/docs/0.9.5/_modules/evennia/contrib/talking_npc.html
@@ -171,7 +171,7 @@
"This is called when object is first created."
self.db.desc = "This is a talkative NPC."
# assign the talk command to npc
- self.cmdset.add_default(TalkingCmdSet, permanent=True)
+ self.cmdset.add_default(TalkingCmdSet, persistent=True)
diff --git a/docs/0.9.5/_modules/evennia/contrib/tutorial_world/mob.html b/docs/0.9.5/_modules/evennia/contrib/tutorial_world/mob.html
index 0d4e1bce26..1bd64caad1 100644
--- a/docs/0.9.5/_modules/evennia/contrib/tutorial_world/mob.html
+++ b/docs/0.9.5/_modules/evennia/contrib/tutorial_world/mob.html
@@ -153,7 +153,7 @@
Called the first time the object is created.
We set up the base properties and flags here.
"""
- self.cmdset.add(MobCmdSet, permanent=True)
+ self.cmdset.add(MobCmdSet, persistent=True)
# Main AI flags. We start in dead mode so we don't have to
# chase the mob around when building.
self.db.patrolling = True
diff --git a/docs/0.9.5/_modules/evennia/contrib/tutorial_world/objects.html b/docs/0.9.5/_modules/evennia/contrib/tutorial_world/objects.html
index 69fe5bfe07..a5c357d6c6 100644
--- a/docs/0.9.5/_modules/evennia/contrib/tutorial_world/objects.html
+++ b/docs/0.9.5/_modules/evennia/contrib/tutorial_world/objects.html
@@ -170,7 +170,7 @@
)
self.db.readable_text = "There is no text written on %s." % self.key
# define a command on the object.
- self.cmdset.add_default(CmdSetReadable, permanent=True)
+ self.cmdset.add_default(CmdSetReadable, persistent=True)
# -------------------------------------------------------------
@@ -236,7 +236,7 @@
[docs] def at_object_creation(self):
"""Called at initial creation only"""
-
self.cmdset.add_default(CmdSetClimbable, permanent=True)
+ self.cmdset.add_default(CmdSetClimbable, persistent=True)
# -------------------------------------------------------------
@@ -384,7 +384,7 @@
# when created.
self.db.desc = "A splinter of wood with remnants of resin on it, enough for burning."
# add the Light command
- self.cmdset.add_default(CmdSetLight, permanent=True)
+ self.cmdset.add_default(CmdSetLight, persistent=True)
def _burnout(self):
"""
@@ -711,7 +711,7 @@
# exit_open is set to True.
self.locks.add("cmd:locattr(is_lit);traverse:objattr(exit_open)")
# set cmdset
- self.cmdset.add(CmdSetCrumblingWall, permanent=True)
+ self.cmdset.add(CmdSetCrumblingWall, persistent=True)
[docs] def open_wall(self):
"""
@@ -991,7 +991,7 @@
self.db.parry = 0.8 # parry chance
self.db.damage = 1.0
self.db.magic = False
-
self.cmdset.add_default(CmdSetWeapon, permanent=True)
+ self.cmdset.add_default(CmdSetWeapon, persistent=True)
[docs] def reset(self):
"""
@@ -1189,7 +1189,7 @@
"""
called at creation
"""
-
self.cmdset.add_default(CmdSetWeaponRack, permanent=True)
+
self.cmdset.add_default(CmdSetWeaponRack, persistent=True)
self.db.rack_id = "weaponrack_1"
# these are prototype names from the prototype
# dictionary above.
diff --git a/docs/0.9.5/_modules/evennia/contrib/tutorial_world/rooms.html b/docs/0.9.5/_modules/evennia/contrib/tutorial_world/rooms.html
index 1a4910e1a9..9107ceac21 100644
--- a/docs/0.9.5/_modules/evennia/contrib/tutorial_world/rooms.html
+++ b/docs/0.9.5/_modules/evennia/contrib/tutorial_world/rooms.html
@@ -470,7 +470,7 @@
"This assigns the health Attribute to "
"the account."
)
-
self.cmdset.add(CmdSetEvenniaIntro, permanent=True)
+ self.cmdset.add(CmdSetEvenniaIntro, persistent=True)
[docs] def at_object_receive(self, character, source_location):
"""
@@ -773,7 +773,7 @@
self.db.east_exit = "gate"
self.db.fall_exit = "cliffledge"
# add the cmdset on the room.
-
self.cmdset.add(BridgeCmdSet, permanent=True)
+
self.cmdset.add(BridgeCmdSet, persistent=True)
# since the default Character's at_look() will access the room's
# return_description (this skips the cmdset) when
# first entering it, we need to explicitly turn off the room
@@ -998,7 +998,7 @@
self.db.tutorial_info = "This is a room with custom command sets on itself."
# the room starts dark.
self.db.is_lit = False
-
self.cmdset.add(DarkCmdSet, permanent=True)
+ self.cmdset.add(DarkCmdSet, persistent=True)
[docs] def at_init(self):
"""
@@ -1050,7 +1050,7 @@
# noone is carrying light - darken the room
self.db.is_lit = False
self.locks.add("view:false()")
-
self.cmdset.add(DarkCmdSet, permanent=True)
+
self.cmdset.add(DarkCmdSet, persistent=True)
for char in (obj for obj in self.contents if obj.has_account):
if char.is_superuser:
char.msg("You are Superuser, so you are not affected by the dark state.")
diff --git a/docs/0.9.5/_modules/evennia/locks/lockfuncs.html b/docs/0.9.5/_modules/evennia/locks/lockfuncs.html
index 7a1c4b7fc3..f1450658d3 100644
--- a/docs/0.9.5/_modules/evennia/locks/lockfuncs.html
+++ b/docs/0.9.5/_modules/evennia/locks/lockfuncs.html
@@ -137,6 +137,9 @@
(this is order to avoid Accounts potentially escalating their own permissions
by use of a higher-level Object)
+
For non-hierarchical permissions, a puppeted object's account is checked first,
+
followed by the puppet (unless quelled, when only puppet's access is checked).
+
"""
# this allows the perm_above lockfunc to make use of this function too
try:
@@ -210,11 +213,17 @@
else:
# no hierarchy match - check direct matches
if account:
-
# account exists, check it first unless quelled
+
# account exists
if is_quell and permission in perms_object:
+
# if quelled, first check object
return True
elif permission in perms_account:
+
# unquelled - check account
return True
+
else:
+
# no account-pass, check object pass
+
return permission in perms_object
+
elif permission in perms_object:
return True
diff --git a/docs/0.9.5/_modules/evennia/objects/objects.html b/docs/0.9.5/_modules/evennia/objects/objects.html
index 9160d9fc6d..f24698df35 100644
--- a/docs/0.9.5/_modules/evennia/objects/objects.html
+++ b/docs/0.9.5/_modules/evennia/objects/objects.html
@@ -1351,7 +1351,7 @@
[docs] def at_object_delete(self):
"""
-
Called just before the database object is permanently
+
Called just before the database object is persistently
delete()d from the database. If this method returns False,
deletion is aborted.
@@ -2302,7 +2302,7 @@
";".join(["get:false()", "call:false()"]) # noone can pick up the character
) # no commands can be called on character from outside
# add the default cmdset
-
self.cmdset.add_default(settings.CMDSET_CHARACTER, permanent=True)
+
self.cmdset.add_default(settings.CMDSET_CHARACTER, persistent=True)
[docs] def at_after_move(self, source_location, **kwargs):
"""
@@ -2752,7 +2752,7 @@
if "force_init" in kwargs or not self.cmdset.has_cmdset("ExitCmdSet", must_be_default=True):
# we are resetting, or no exit-cmdset was set. Create one dynamically.
-
self.cmdset.add_default(self.create_exit_cmdset(self), permanent=False)
+ self.cmdset.add_default(self.create_exit_cmdset(self), persistent=False)
[docs] def at_init(self):
"""
diff --git a/docs/0.9.5/_modules/evennia/prototypes/prototypes.html b/docs/0.9.5/_modules/evennia/prototypes/prototypes.html
index 56cbbde71f..6a04639204 100644
--- a/docs/0.9.5/_modules/evennia/prototypes/prototypes.html
+++ b/docs/0.9.5/_modules/evennia/prototypes/prototypes.html
@@ -870,7 +870,8 @@
prototype["prototype_locks"] = prototype_locks
-[docs]def protfunc_parser(value, available_functions=None, testing=False, stacktrace=False, caller=None, **kwargs):
+
[docs]def protfunc_parser(value, available_functions=None, testing=False, stacktrace=False,
+
caller=None, **kwargs):
"""
Parse a prototype value string for a protfunc and process it.
@@ -1044,7 +1045,7 @@
return default
-
[docs]def init_spawn_value(value, validator=None, caller=None):
+
[docs]def init_spawn_value(value, validator=None, caller=None, prototype=None):
"""
Analyze the prototype value and produce a value useful at the point of spawning.
@@ -1057,6 +1058,7 @@
check and guarantee the outcome is of a given type.
caller (Object or Account): This is necessary for certain protfuncs that perform object
searches and have to check permissions.
+
prototype (dict): Prototype this is to be used for. Necessary for certain protfuncs.
Returns:
any (any): The (potentially pre-processed value to use for this prototype key)
@@ -1071,7 +1073,7 @@
value = validator(value[0](*make_iter(args)))
else:
value = validator(value)
-
result = protfunc_parser(value, caller=caller)
+
result = protfunc_parser(value, caller=caller, prototype=prototype)
if result != value:
return validator(result)
return result
diff --git a/docs/0.9.5/_modules/evennia/prototypes/spawner.html b/docs/0.9.5/_modules/evennia/prototypes/spawner.html
index 6e85caf2e7..3a92c58c27 100644
--- a/docs/0.9.5/_modules/evennia/prototypes/spawner.html
+++ b/docs/0.9.5/_modules/evennia/prototypes/spawner.html
@@ -719,36 +719,37 @@
val = new_prototype[key]
do_save = True
+
def _init(val, typ):
+
return init_spawn_value(val, str, caller=caller, prototype=new_prototype)
+
if key == "key":
-
obj.db_key = init_spawn_value(val, str, caller=caller)
+
obj.db_key = _init(val, str)
elif key == "typeclass":
-
obj.db_typeclass_path = init_spawn_value(val, str, caller=caller)
+
obj.db_typeclass_path = _init(val, str)
elif key == "location":
-
obj.db_location = init_spawn_value(val, value_to_obj, caller=caller)
+
obj.db_location = _init(val, value_to_obj)
elif key == "home":
-
obj.db_home = init_spawn_value(val, value_to_obj, caller=caller)
+
obj.db_home = _init(val, value_to_obj)
elif key == "destination":
-
obj.db_destination = init_spawn_value(val, value_to_obj, caller=caller)
+
obj.db_destination = _init(val, value_to_obj)
elif key == "locks":
if directive == "REPLACE":
obj.locks.clear()
-
obj.locks.add(init_spawn_value(val, str, caller=caller))
+
obj.locks.add(_init(val, str))
elif key == "permissions":
if directive == "REPLACE":
obj.permissions.clear()
-
obj.permissions.batch_add(*(init_spawn_value(perm, str, caller=caller)
-
for perm in val))
+
obj.permissions.batch_add(*(_init(perm, str) for perm in val))
elif key == "aliases":
if directive == "REPLACE":
obj.aliases.clear()
-
obj.aliases.batch_add(*(init_spawn_value(alias, str, caller=caller)
-
for alias in val))
+
obj.aliases.batch_add(*(_init(alias, str) for alias in val))
elif key == "tags":
if directive == "REPLACE":
obj.tags.clear()
obj.tags.batch_add(
*(
-
(init_spawn_value(ttag, str, caller=caller), tcategory, tdata)
+
(_init(ttag, str), tcategory, tdata)
for ttag, tcategory, tdata in val
)
)
@@ -758,8 +759,8 @@
obj.attributes.batch_add(
*(
(
-
init_spawn_value(akey, str, caller=caller),
-
init_spawn_value(aval, value_to_obj, caller=caller),
+
_init(akey, str),
+
_init(aval, value_to_obj),
acategory,
alocks,
)
@@ -770,7 +771,7 @@
# we don't auto-rerun exec statements, it would be huge security risk!
pass
else:
-
obj.attributes.add(key, init_spawn_value(val, value_to_obj, caller=caller))
+
obj.attributes.add(key, _init(val, value_to_obj))
elif directive == "REMOVE":
do_save = True
if key == "key":
diff --git a/docs/0.9.5/_modules/evennia/server/sessionhandler.html b/docs/0.9.5/_modules/evennia/server/sessionhandler.html
index f6a8893c6d..de78be2395 100644
--- a/docs/0.9.5/_modules/evennia/server/sessionhandler.html
+++ b/docs/0.9.5/_modules/evennia/server/sessionhandler.html
@@ -291,6 +291,7 @@
elif isinstance(data, dict):
rkwargs[key] = [[], _validate(data)]
elif is_iter(data):
+
data = tuple(data)
if isinstance(data[-1], dict):
if len(data) == 2:
if is_iter(data[0]):
diff --git a/docs/0.9.5/_modules/evennia/typeclasses/attributes.html b/docs/0.9.5/_modules/evennia/typeclasses/attributes.html
index 52018143f4..2ec0c27241 100644
--- a/docs/0.9.5/_modules/evennia/typeclasses/attributes.html
+++ b/docs/0.9.5/_modules/evennia/typeclasses/attributes.html
@@ -260,7 +260,7 @@
# Database manager
# objects = managers.AttributeManager()
-
class Meta(object):
+
class Meta:
"Define Django meta options"
verbose_name = "Attribute"
@@ -277,11 +277,11 @@
return self.db_lock_storage
def __lock_storage_set(self, value):
-
super().__lock_storage_set(value)
+
self.db_lock_storage = value
self.save(update_fields=["db_lock_storage"])
def __lock_storage_del(self):
-
super().__lock_storage_del()
+
self.db_lock_storage = ''
self.save(update_fields=["db_lock_storage"])
lock_storage = property(__lock_storage_get, __lock_storage_set, __lock_storage_del)
@@ -1265,7 +1265,7 @@
return [
attr
for attr in attrs
-
if attr.access(accessing_obj, self._attredit, default=default_access)
+
if attr.access(accessing_obj, self._attrread, default=default_access)
]
else:
return attrs
diff --git a/docs/0.9.5/_modules/evennia/typeclasses/models.html b/docs/0.9.5/_modules/evennia/typeclasses/models.html
index 308b7cc800..b04353b0ac 100644
--- a/docs/0.9.5/_modules/evennia/typeclasses/models.html
+++ b/docs/0.9.5/_modules/evennia/typeclasses/models.html
@@ -526,6 +526,23 @@
# Object manipulation methods
#
+
[docs] @classmethod
+
def search(cls, query, **kwargs):
+
"""
+
Overridden by class children. This implements a common API.
+
+
Args:
+
query (str): A search query.
+
**kwargs: Other search parameters.
+
+
Returns:
+
list: A list of 0, 1 or more matches, only of this typeclass.
+
+
"""
+
if cls.objects.dbref(query):
+
return [cls.objects.get_id(query)]
+
return list(cls.objects.filter(db_key__lower=query))
+
[docs] def is_typeclass(self, typeclass, exact=False):
"""
Returns true if this object has this type OR has a typeclass
diff --git a/docs/0.9.5/_modules/evennia/utils/containers.html b/docs/0.9.5/_modules/evennia/utils/containers.html
index b0e5ee8214..38ee075fde 100644
--- a/docs/0.9.5/_modules/evennia/utils/containers.html
+++ b/docs/0.9.5/_modules/evennia/utils/containers.html
@@ -52,6 +52,7 @@
"""
+
from pickle import dumps
from django.conf import settings
from evennia.utils.utils import class_from_module, callables_from_module
from evennia.utils import logger
@@ -173,37 +174,42 @@
self.load_data()
typeclass = self.typeclass_storage[key]
-
found = typeclass.objects.filter(db_key=key).first()
-
interval = self.loaded_data[key].get("interval", None)
-
start_delay = self.loaded_data[key].get("start_delay", None)
-
repeats = self.loaded_data[key].get("repeats", 0)
-
desc = self.loaded_data[key].get("desc", "")
+
script = typeclass.objects.filter(
+
db_key=key, db_account__isnull=True, db_obj__isnull=True).first()
-
if not found:
+
kwargs = {**self.loaded_data[key]}
+
kwargs['key'] = key
+
kwargs['persistent'] = kwargs.get('persistent', True)
+
+
compare_hash = str(dumps(kwargs, protocol=4))
+
+
if script:
+
script_hash = script.attributes.get("global_script_settings", category="settings_hash")
+
if script_hash is None:
+
# legacy - store the hash anew and assume no change
+
script.attributes.add("global_script_settings", compare_hash,
+
category="settings_hash")
+
elif script_hash != compare_hash:
+
# wipe the old version and create anew
+
logger.log_info(f"GLOBAL_SCRIPTS: Settings changed for {key} ({typeclass}).")
+
script.stop()
+
script.delete()
+
script = None
+
+
if not script:
logger.log_info(f"GLOBAL_SCRIPTS: (Re)creating {key} ({typeclass}).")
-
new_script, errors = typeclass.create(
-
key=key,
-
persistent=True,
-
interval=interval,
-
start_delay=start_delay,
-
repeats=repeats,
-
desc=desc,
-
)
+
+
script, errors = typeclass.create(**kwargs)
if errors:
logger.log_err("\n".join(errors))
return None
-
new_script.start()
-
return new_script
+
# store a hash representation of the setup
+
script.attributes.add("_global_script_settings",
+
compare_hash, category="settings_hash")
+
script.start()
-
if ((found.interval != interval)
-
or (found.start_delay != start_delay)
-
or (found.repeats != repeats)):
-
# the setup changed
-
found.start(interval=interval, start_delay=start_delay, repeats=repeats)
-
if found.desc != desc:
-
found.desc = desc
-
return found
+
return script
[docs] def start(self):
"""
@@ -233,10 +239,9 @@
try:
typeclass = data.get("typeclass", settings.BASE_SCRIPT_TYPECLASS)
self.typeclass_storage[key] = class_from_module(typeclass)
-
except ImportError as err:
-
logger.log_err(
-
f"GlobalScriptContainer could not start global script {key}: {err}"
-
)
+
except Exception:
+
logger.log_trace(
+
f"GlobalScriptContainer could not start import global script {key}.")
[docs] def get(self, key, default=None):
"""
diff --git a/docs/0.9.5/_modules/evennia/utils/eveditor.html b/docs/0.9.5/_modules/evennia/utils/eveditor.html
index d8a2f27dfc..a06907c40c 100644
--- a/docs/0.9.5/_modules/evennia/utils/eveditor.html
+++ b/docs/0.9.5/_modules/evennia/utils/eveditor.html
@@ -934,7 +934,7 @@
persistent = False
# Create the commands we need
-
caller.cmdset.add(EvEditorCmdSet, permanent=persistent)
+
caller.cmdset.add(EvEditorCmdSet, persistent=persistent)
# echo inserted text back to caller
self._echo_mode = True
diff --git a/docs/0.9.5/_modules/evennia/utils/evmenu.html b/docs/0.9.5/_modules/evennia/utils/evmenu.html
index 066c09c267..c6d79fdf0e 100644
--- a/docs/0.9.5/_modules/evennia/utils/evmenu.html
+++ b/docs/0.9.5/_modules/evennia/utils/evmenu.html
@@ -706,7 +706,7 @@
menu_cmdset = EvMenuCmdSet()
menu_cmdset.mergetype = str(cmdset_mergetype).lower().capitalize() or "Replace"
menu_cmdset.priority = int(cmdset_priority)
-
self.caller.cmdset.add(menu_cmdset, permanent=persistent)
+
self.caller.cmdset.add(menu_cmdset, persistent=persistent)
reserved_startnode_kwargs = set(("nodename", "raw_string"))
startnode_kwargs = {}
@@ -1581,7 +1581,8 @@
getinput = caller.ndb._getinput
if not getinput and hasattr(caller, "account"):
getinput = caller.account.ndb._getinput
-
caller = caller.account
+
if getinput:
+
caller = caller.account
callback = getinput._callback
caller.ndb._getinput._session = self.session
@@ -1683,7 +1684,7 @@
caller.ndb._getinput._session = session
caller.ndb._getinput._args = args
caller.ndb._getinput._kwargs = kwargs
-
caller.cmdset.add(InputCmdSet)
+
caller.cmdset.add(InputCmdSet, persistent=False)
caller.msg(prompt, session=session)
diff --git a/docs/0.9.5/_modules/evennia/utils/gametime.html b/docs/0.9.5/_modules/evennia/utils/gametime.html
index b93247c281..9f80d38c72 100644
--- a/docs/0.9.5/_modules/evennia/utils/gametime.html
+++ b/docs/0.9.5/_modules/evennia/utils/gametime.html
@@ -101,8 +101,10 @@
[docs] def at_repeat(self):
"""Call the callback and reset interval."""
callback = self.db.callback
+
args = self.db.schedule_args or []
+
kwargs = self.db.schedule_kwargs or {}
if callback:
-
callback()
+
callback(*args, **kwargs)
seconds = real_seconds_until(**self.db.gametime)
self.restart(interval=seconds)
@@ -257,7 +259,8 @@
[docs]def schedule(
-
callback, repeat=False, sec=None, min=None, hour=None, day=None, month=None, year=None
+
callback, repeat=False, sec=None, min=None, hour=None, day=None, month=None, year=None,
+
*args, **kwargs
):
"""
Call a callback at a given in-game time.
@@ -265,7 +268,8 @@
Args:
callback (function): The callback function that will be called. Note
that the callback must be a module-level function, since the script will
-
be persistent.
+
be persistent. The callable should be on form `callable(*args, **kwargs)`
+
where args/kwargs are passed into this schedule.
repeat (bool, optional): Defines if the callback should be called regularly
at the specified time.
sec (int or None): Number of absolute game seconds at which to run repeat.
@@ -274,6 +278,8 @@
day (int or None): Number of absolute days.
month (int or None): Number of absolute months.
year (int or None): Number of absolute years.
+
*args, **kwargs: Will be passed into the callable. These must be possible
+
to store in Attributes on the generated scheduling Script.
Returns:
script (Script): The created Script handling the sceduling.
@@ -300,6 +306,8 @@
"month": month,
"year": year,
}
+
script.db.schedule_args = args
+
script.db.schedule_kwargs = kwargs
return script
diff --git a/docs/0.9.5/api/evennia.accounts.accounts.html b/docs/0.9.5/api/evennia.accounts.accounts.html
index 0354075a12..29fc914753 100644
--- a/docs/0.9.5/api/evennia.accounts.accounts.html
+++ b/docs/0.9.5/api/evennia.accounts.accounts.html
@@ -512,7 +512,7 @@ errors (list): List of error messages in string form
-
delete(*args, **kwargs)[source]
-Deletes the account permanently.
+Deletes the account persistently.
Notes
- *args and **kwargs are passed on to the base delete
mechanism (these are usually not used).
diff --git a/docs/0.9.5/api/evennia.commands.cmdset.html b/docs/0.9.5/api/evennia.commands.cmdset.html
index ff1fbb80da..6fb4cc98b8 100644
--- a/docs/0.9.5/api/evennia.commands.cmdset.html
+++ b/docs/0.9.5/api/evennia.commands.cmdset.html
@@ -199,8 +199,8 @@ something goes wrong)
--
-
permanent = False
+-
+
persistent = False
@@ -215,7 +215,7 @@ something goes wrong)
-
-
to_duplicate = ('key', 'cmdsetobj', 'no_exits', 'no_objs', 'no_channels', 'permanent', 'mergetype', 'priority', 'duplicates', 'errmessage')
+to_duplicate = ('key', 'cmdsetobj', 'no_exits', 'no_objs', 'no_channels', 'persistent', 'mergetype', 'priority', 'duplicates', 'errmessage')
diff --git a/docs/0.9.5/api/evennia.commands.cmdsethandler.html b/docs/0.9.5/api/evennia.commands.cmdsethandler.html
index 9f11b53aaa..9a1685fd33 100644
--- a/docs/0.9.5/api/evennia.commands.cmdsethandler.html
+++ b/docs/0.9.5/api/evennia.commands.cmdsethandler.html
@@ -159,7 +159,7 @@ and loads the current cmdset.
- Parameters
init_mode (bool, optional) – Used automatically right after
-this handler was created; it imports all permanent cmdsets
+this handler was created; it imports all persistent cmdsets
from the database.
@@ -176,7 +176,7 @@ to the central cmdhandler.get_and_merge_cmdsets()!
-
-
add(cmdset, emit_to_obj=None, persistent=True, default_cmdset=False, **kwargs)[source]
+add(cmdset, emit_to_obj=None, persistent=False, default_cmdset=False, **kwargs)[source]
Add a cmdset to the handler, on top of the old ones, unless it
is set as the default one (it will then end up at the bottom of the stack)
diff --git a/docs/0.9.5/api/evennia.commands.command.html b/docs/0.9.5/api/evennia.commands.command.html
index 7913fb6e84..9a0ac89937 100644
--- a/docs/0.9.5/api/evennia.commands.command.html
+++ b/docs/0.9.5/api/evennia.commands.command.html
@@ -155,6 +155,11 @@ replace this without disabling auto_help.
msg_all_sessions = False
+
+-
+
retain_instance = False
+
+
-
__init__(**kwargs)[source]
diff --git a/docs/0.9.5/api/evennia.commands.default.admin.html b/docs/0.9.5/api/evennia.commands.default.admin.html
index 9d704d1ca9..cb68b37510 100644
--- a/docs/0.9.5/api/evennia.commands.default.admin.html
+++ b/docs/0.9.5/api/evennia.commands.default.admin.html
@@ -254,7 +254,7 @@ to accounts respectively.
-
-
aliases = ['pemit', 'remit']
+aliases = ['remit', 'pemit']
@@ -285,7 +285,7 @@ to accounts respectively.
-
-
search_index_entry = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}
+search_index_entry = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}
diff --git a/docs/0.9.5/api/evennia.commands.default.building.html b/docs/0.9.5/api/evennia.commands.default.building.html
index 331964571c..7aac840adc 100644
--- a/docs/0.9.5/api/evennia.commands.default.building.html
+++ b/docs/0.9.5/api/evennia.commands.default.building.html
@@ -1231,7 +1231,7 @@ with older attrs that might have been named with []’s.
- Usage:
typeclass[/switch] <object> [= typeclass.path]
typeclass/prototype <object> = prototype_key
-typeclass/list/show [typeclass.path]
+
typeclasses or typeclass/list/show [typeclass.path]
swap - this is a shorthand for using /force/reset flags.
update - this is a shorthand for using the /force/reload flag.
@@ -1275,7 +1275,7 @@ server settings.
-
-
aliases = ['type', 'parent', 'swap', 'update']
+aliases = ['typeclasses', 'type', 'swap', 'update', 'parent']
@@ -1306,7 +1306,7 @@ server settings.
-
-
search_index_entry = {'aliases': 'type parent swap update', 'category': 'building', 'key': 'typeclass', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object.\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
+search_index_entry = {'aliases': 'typeclasses type swap update parent', 'category': 'building', 'key': 'typeclass', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object.\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
@@ -1459,7 +1459,7 @@ If object is not specified, the current location is examined.
-
-
aliases = ['ex', 'exam']
+aliases = ['exam', 'ex']
@@ -1556,7 +1556,7 @@ non-persistent data stored on object
-
-
search_index_entry = {'aliases': 'ex exam', 'category': 'building', 'key': 'examine', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
+search_index_entry = {'aliases': 'exam ex', 'category': 'building', 'key': 'examine', 'tags': '', 'text': '\n get detailed information about an object\n\n Usage:\n examine [<object>[/attrname]]\n examine [*<account>[/attrname]]\n\n Switch:\n account - examine an Account (same as adding *)\n object - examine an Object (useful when OOC)\n\n The examine command shows detailed game info about an\n object and optionally a specific attribute on it.\n If object is not specified, the current location is examined.\n\n Append a * before the search string to examine an account.\n\n '}
@@ -1711,63 +1711,139 @@ teleported to the target location.
--
-class
evennia.commands.default.building.CmdScript(**kwargs)[source]
+-
+class
evennia.commands.default.building.CmdScripts(**kwargs)[source]
Bases: evennia.commands.default.muxcommand.MuxCommand
-attach a script to an object
+List and manage all running scripts. Allows for creating new global
+scripts.
-- Usage:
addscript[/switch] <obj> [= script_path or <scriptkey>]
+- Usage:
script[/switches] [script-#dbref, key, script.path or <obj>]
+script[/start||stop] <obj> = <script.path or script-key>
-- Switches:
start - start all non-running scripts on object, or a given script only
-stop - stop all scripts on objects, or a given script only
+- Switches:
start - start/unpause an existing script’s timer.
+stop - stops an existing script’s timer
+pause - pause a script’s timer
+delete - deletes script. This will also stop the timer as needed
-If no script path/key is given, lists all scripts active on the given
-object.
-Script path can be given from the base location for scripts as given in
-settings. If adding a new script, it will be started automatically
-(no /start switch is needed). Using the /start or /stop switches on an
-object without specifying a script key/path will start/stop ALL scripts on
-the object.
+Examples
+script - list scripts
+script myobj - list all scripts on object
+script foo.bar.Script - create a new global Script
+script scriptname - examine named existing global script
+script myobj = foo.bar.Script - create and assign script to object
+script/stop myobj = scriptname - stop script on object
+script/pause foo.Bar.Script - pause global script
+script/delete myobj - delete ALL scripts on object
+When given with an <obj> as left-hand-side, this creates and
+assigns a new script to that object. Without an <obj>, this
+manages and inspects global scripts
+If no switches are given, this command just views all active
+scripts. The argument can be either an object, at which point it
+will be searched for all scripts defined on it, or a script name
+or #dbref. For using the /stop switch, a unique script #dbref is
+required since whole classes of scripts often have the same name.
+Use the script build-level command for managing scripts attached to
+objects.
--
-
key = 'addscript'
+-
+
key = 'scripts'
--
-
aliases = ['attachscript']
+-
+
aliases = ['script']
--
-
switch_options = ('start', 'stop')
+-
+
switch_options = ('create', 'start', 'stop', 'pause', 'delete')
--
-
locks = 'cmd:perm(script) or perm(Builder)'
+-
+
locks = 'cmd:perm(scripts) or perm(Builder)'
--
-
help_category = 'building'
+-
+
help_category = 'system'
+
+
+
+-
+
excluded_typeclass_paths = ['evennia.prototypes.prototypes.DbPrototype']
+
+
+
+-
+
switch_mapping = {'create': '|gCreated|n', 'delete': '|rDeleted|n', 'pause': '|Paused|n', 'start': '|gStarted|n', 'stop': '|RStopped|n'}
--
-
func()[source]
-Do stuff
+-
+
func()[source]
+implement method
--
-
lock_storage = 'cmd:perm(script) or perm(Builder)'
+-
+
lock_storage = 'cmd:perm(scripts) or perm(Builder)'
--
-
search_index_entry = {'aliases': 'attachscript', 'category': 'building', 'key': 'addscript', 'tags': '', 'text': '\n attach a script to an object\n\n Usage:\n addscript[/switch] <obj> [= script_path or <scriptkey>]\n\n Switches:\n start - start all non-running scripts on object, or a given script only\n stop - stop all scripts on objects, or a given script only\n\n If no script path/key is given, lists all scripts active on the given\n object.\n Script path can be given from the base location for scripts as given in\n settings. If adding a new script, it will be started automatically\n (no /start switch is needed). Using the /start or /stop switches on an\n object without specifying a script key/path will start/stop ALL scripts on\n the object.\n '}
+-
+
search_index_entry = {'aliases': 'script', 'category': 'system', 'key': 'scripts', 'tags': '', 'text': "\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [script-#dbref, key, script.path or <obj>]\n script[/start||stop] <obj> = <script.path or script-key>\n\n Switches:\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n Examples:\n script - list scripts\n script myobj - list all scripts on object\n script foo.bar.Script - create a new global Script\n script scriptname - examine named existing global script\n script myobj = foo.bar.Script - create and assign script to object\n script/stop myobj = scriptname - stop script on object\n script/pause foo.Bar.Script - pause global script\n script/delete myobj - delete ALL scripts on object\n\n When given with an `<obj>` as left-hand-side, this creates and\n assigns a new script to that object. Without an `<obj>`, this\n manages and inspects global scripts\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n "}
+
+
+
+
+
+-
+class
evennia.commands.default.building.CmdObjects(**kwargs)[source]
+Bases: evennia.commands.default.muxcommand.MuxCommand
+statistics on objects in the database
+
+- Usage:
objects [<nr>]
+
+
+Gives statictics on objects in database as well as
+a list of <nr> latest objects in database. If not
+given, <nr> defaults to 10.
+
+-
+
key = 'objects'
+
+
+
+-
+
aliases = ['stats', 'listobjects', 'db', 'listobjs']
+
+
+
+-
+
locks = 'cmd:perm(listobjects) or perm(Builder)'
+
+
+
+-
+
help_category = 'system'
+
+
+
+-
+
func()[source]
+Implement the command
+
+
+
+-
+
lock_storage = 'cmd:perm(listobjects) or perm(Builder)'
+
+
+
+-
+
search_index_entry = {'aliases': 'stats listobjects db listobjs', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}
diff --git a/docs/0.9.5/api/evennia.commands.default.comms.html b/docs/0.9.5/api/evennia.commands.default.comms.html
index 5efeebe0af..6fdd46bed7 100644
--- a/docs/0.9.5/api/evennia.commands.default.comms.html
+++ b/docs/0.9.5/api/evennia.commands.default.comms.html
@@ -193,7 +193,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.
-
-
aliases = ['channels', 'chan']
+aliases = ['chan', 'channels']
@@ -719,7 +719,7 @@ don’t actually sub to yet.
-
-
search_index_entry = {'aliases': 'channels chan', 'category': 'comms', 'key': 'channel', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
+search_index_entry = {'aliases': 'chan channels', 'category': 'comms', 'key': 'channel', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
@@ -801,7 +801,7 @@ for that channel.
-
-
aliases = ['delaliaschan', 'delchanalias']
+aliases = ['delchanalias', 'delaliaschan']
@@ -832,7 +832,7 @@ for that channel.
-
-
search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
+search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
diff --git a/docs/0.9.5/api/evennia.commands.default.general.html b/docs/0.9.5/api/evennia.commands.default.general.html
index 7fe75f38ec..d764867878 100644
--- a/docs/0.9.5/api/evennia.commands.default.general.html
+++ b/docs/0.9.5/api/evennia.commands.default.general.html
@@ -205,7 +205,7 @@ for everyone to use, you need build privileges and the alias command.
-
-
aliases = ['nickname', 'nicks']
+aliases = ['nicks', 'nickname']
@@ -237,7 +237,7 @@ for everyone to use, you need build privileges and the alias command.
-
-
search_index_entry = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}
+search_index_entry = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}
@@ -260,7 +260,7 @@ inv
-
-
aliases = ['i', 'inv']
+aliases = ['inv', 'i']
@@ -291,7 +291,7 @@ inv
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
@@ -535,7 +535,7 @@ placing it in their inventory.
-
-
aliases = ["'", '"']
+aliases = ['"', "'"]
@@ -561,7 +561,7 @@ placing it in their inventory.
-
-
search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
+search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
@@ -641,7 +641,7 @@ automatically begin with your name.
-
-
aliases = [':', 'emote']
+aliases = ['emote', ':']
@@ -677,7 +677,7 @@ space.
-
-
search_index_entry = {'aliases': ': emote', 'category': 'general', 'key': 'pose', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
+search_index_entry = {'aliases': 'emote :', 'category': 'general', 'key': 'pose', 'tags': '', 'text': "\n strike a pose\n\n Usage:\n pose <pose text>\n pose's <pose text>\n\n Example:\n pose is standing by the wall, smiling.\n -> others will see:\n Tom is standing by the wall, smiling.\n\n Describe an action being taken. The pose text will\n automatically begin with your name.\n "}
diff --git a/docs/0.9.5/api/evennia.commands.default.system.html b/docs/0.9.5/api/evennia.commands.default.system.html
index 0402e49f86..5253983e25 100644
--- a/docs/0.9.5/api/evennia.commands.default.system.html
+++ b/docs/0.9.5/api/evennia.commands.default.system.html
@@ -287,135 +287,6 @@ should only be accessible by trusted server admins/superusers.|n
-
--
-class
evennia.commands.default.system.CmdScripts(**kwargs)[source]
-Bases: evennia.commands.default.muxcommand.MuxCommand
-List and manage all running scripts. Allows for creating new global
-scripts.
-
-- Usage:
script[/switches] [#dbref, key, script.path or <obj>]
-
-- Switches:
-- create - create a new global script of given typeclass path. This will
auto-start the script’s timer if it has one.
-
-
-start - start/unpause an existing script’s timer.
-stop - stops an existing script’s timer
-pause - pause a script’s timer
-delete - deletes script. This will also stop the timer as needed
-
-
-If no switches are given, this command just views all active
-scripts. The argument can be either an object, at which point it
-will be searched for all scripts defined on it, or a script name
-or #dbref. For using the /stop switch, a unique script #dbref is
-required since whole classes of scripts often have the same name.
-Use the script build-level command for managing scripts attached to
-objects.
-
--
-
key = 'scripts'
-
-
-
--
-
aliases = []
-
-
-
--
-
switch_options = ('create', 'start', 'stop', 'pause', 'delete')
-
-
-
--
-
locks = 'cmd:perm(listscripts) or perm(Admin)'
-
-
-
--
-
help_category = 'system'
-
-
-
--
-
excluded_typeclass_paths = ['evennia.prototypes.prototypes.DbPrototype']
-
-
-
--
-
switch_mapping = {'create': '|gCreated|n', 'delete': '|rDeleted|n', 'pause': '|Paused|n', 'start': '|gStarted|n', 'stop': '|RStopped|n'}
-
-
-
--
-
func()[source]
-implement method
-
-
-
--
-
lock_storage = 'cmd:perm(listscripts) or perm(Admin)'
-
-
-
--
-
search_index_entry = {'aliases': '', 'category': 'system', 'key': 'scripts', 'tags': '', 'text': "\n List and manage all running scripts. Allows for creating new global\n scripts.\n\n Usage:\n script[/switches] [#dbref, key, script.path or <obj>]\n\n Switches:\n create - create a new global script of given typeclass path. This will\n auto-start the script's timer if it has one.\n start - start/unpause an existing script's timer.\n stop - stops an existing script's timer\n pause - pause a script's timer\n delete - deletes script. This will also stop the timer as needed\n\n If no switches are given, this command just views all active\n scripts. The argument can be either an object, at which point it\n will be searched for all scripts defined on it, or a script name\n or #dbref. For using the /stop switch, a unique script #dbref is\n required since whole classes of scripts often have the same name.\n\n Use the `script` build-level command for managing scripts attached to\n objects.\n\n "}
-
-
-
-
-
--
-class
evennia.commands.default.system.CmdObjects(**kwargs)[source]
-Bases: evennia.commands.default.muxcommand.MuxCommand
-statistics on objects in the database
-
-- Usage:
objects [<nr>]
-
-
-Gives statictics on objects in database as well as
-a list of <nr> latest objects in database. If not
-given, <nr> defaults to 10.
-
--
-
key = 'objects'
-
-
-
--
-
aliases = ['stats', 'db', 'listobjects', 'listobjs']
-
-
-
--
-
locks = 'cmd:perm(listobjects) or perm(Builder)'
-
-
-
--
-
help_category = 'system'
-
-
-
--
-
func()[source]
-Implement the command
-
-
-
--
-
lock_storage = 'cmd:perm(listobjects) or perm(Builder)'
-
-
-
--
-
search_index_entry = {'aliases': 'stats db listobjects listobjs', 'category': 'system', 'key': 'objects', 'tags': '', 'text': '\n statistics on objects in the database\n\n Usage:\n objects [<nr>]\n\n Gives statictics on objects in database as well as\n a list of <nr> latest objects in database. If not\n given, <nr> defaults to 10.\n '}
-
-
-
-
-
class
evennia.commands.default.system.CmdService(**kwargs)[source]
@@ -612,7 +483,7 @@ the released memory will instead be re-used by the program.
-
-
aliases = ['serverprocess', 'serverload']
+aliases = ['serverload', 'serverprocess']
@@ -643,7 +514,7 @@ the released memory will instead be re-used by the program.
-
-
search_index_entry = {'aliases': 'serverprocess serverload', 'category': 'system', 'key': 'server', 'tags': '', 'text': "\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n "}
+search_index_entry = {'aliases': 'serverload serverprocess', 'category': 'system', 'key': 'server', 'tags': '', 'text': "\n show server load and memory statistics\n\n Usage:\n server[/mem]\n\n Switches:\n mem - return only a string of the current memory usage\n flushmem - flush the idmapper cache\n\n This command shows server load statistics and dynamic memory\n usage. It also allows to flush the cache of accessed database\n objects.\n\n Some Important statistics in the table:\n\n |wServer load|n is an average of processor usage. It's usually\n between 0 (no usage) and 1 (100% usage), but may also be\n temporarily higher if your computer has multiple CPU cores.\n\n The |wResident/Virtual memory|n displays the total memory used by\n the server process.\n\n Evennia |wcaches|n all retrieved database entities when they are\n loaded by use of the idmapper functionality. This allows Evennia\n to maintain the same instances of an entity and allowing\n non-persistent storage schemes. The total amount of cached objects\n are displayed plus a breakdown of database object types.\n\n The |wflushmem|n switch allows to flush the object cache. Please\n note that due to how Python's memory management works, releasing\n caches may not show you a lower Residual/Virtual memory footprint,\n the released memory will instead be re-used by the program.\n\n "}
@@ -686,7 +557,7 @@ See |luhttps://ww
-
-
aliases = ['delays', 'task']
+aliases = ['task', 'delays']
@@ -732,7 +603,7 @@ to all the variables defined therein.
-
-
search_index_entry = {'aliases': 'delays task', 'category': 'system', 'key': 'tasks', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
+search_index_entry = {'aliases': 'task delays', 'category': 'system', 'key': 'tasks', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
diff --git a/docs/0.9.5/api/evennia.commands.default.unloggedin.html b/docs/0.9.5/api/evennia.commands.default.unloggedin.html
index 23eca42182..afa20a1e2b 100644
--- a/docs/0.9.5/api/evennia.commands.default.unloggedin.html
+++ b/docs/0.9.5/api/evennia.commands.default.unloggedin.html
@@ -59,7 +59,7 @@ connect “account name” “pass word”
-
-
aliases = ['conn', 'con', 'co']
+aliases = ['co', 'conn', 'con']
@@ -94,7 +94,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
+search_index_entry = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
@@ -118,7 +118,7 @@ create “account name” “pass word”
-
-
aliases = ['cre', 'cr']
+aliases = ['cr', 'cre']
@@ -149,7 +149,7 @@ create “account name” “pass word”
-
-
search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
+search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
@@ -173,7 +173,7 @@ version is a bit more complicated.
-
-
aliases = ['q', 'qu']
+aliases = ['qu', 'q']
@@ -199,7 +199,7 @@ version is a bit more complicated.
-
-
search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
+search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
@@ -223,7 +223,7 @@ All it does is display the connect screen.
-
-
aliases = ['look', 'l']
+aliases = ['l', 'look']
@@ -249,7 +249,7 @@ All it does is display the connect screen.
-
-
search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
+search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
@@ -272,7 +272,7 @@ for simplicity. It shows a pane of info.
-
-
aliases = ['h', '?']
+aliases = ['?', 'h']
@@ -298,7 +298,7 @@ for simplicity. It shows a pane of info.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
+search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.barter.html b/docs/0.9.5/api/evennia.contrib.barter.html
index 0d4e6647bf..18109a7926 100644
--- a/docs/0.9.5/api/evennia.contrib.barter.html
+++ b/docs/0.9.5/api/evennia.contrib.barter.html
@@ -681,7 +681,7 @@ try to influence the other part in the deal.
-
-
aliases = ['offers', 'deal']
+aliases = ['deal', 'offers']
@@ -707,7 +707,7 @@ try to influence the other part in the deal.
-
-
search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}
+search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}
diff --git a/docs/0.9.5/api/evennia.contrib.clothing.html b/docs/0.9.5/api/evennia.contrib.clothing.html
index 84a36d3416..7096325864 100644
--- a/docs/0.9.5/api/evennia.contrib.clothing.html
+++ b/docs/0.9.5/api/evennia.contrib.clothing.html
@@ -628,7 +628,7 @@ inv
-
-
aliases = ['i', 'inv']
+aliases = ['inv', 'i']
@@ -659,7 +659,7 @@ inv
-
-
search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
+search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.email_login.html b/docs/0.9.5/api/evennia.contrib.email_login.html
index 2e599c2dc0..ef67ab49d8 100644
--- a/docs/0.9.5/api/evennia.contrib.email_login.html
+++ b/docs/0.9.5/api/evennia.contrib.email_login.html
@@ -74,7 +74,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.
-
-
aliases = ['conn', 'con', 'co']
+aliases = ['co', 'conn', 'con']
@@ -104,7 +104,7 @@ there is no object yet before the account has logged in)
-
-
search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
+search_index_entry = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
@@ -126,7 +126,7 @@ there is no object yet before the account has logged in)
-
-
aliases = ['cre', 'cr']
+aliases = ['cr', 'cre']
@@ -162,7 +162,7 @@ name enclosed in quotes:
-
-
search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
+search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
@@ -181,7 +181,7 @@ version is a bit more complicated.
-
-
aliases = ['q', 'qu']
+aliases = ['qu', 'q']
@@ -207,7 +207,7 @@ version is a bit more complicated.
-
-
search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
+search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
@@ -226,7 +226,7 @@ All it does is display the connect screen.
-
-
aliases = ['look', 'l']
+aliases = ['l', 'look']
@@ -252,7 +252,7 @@ All it does is display the connect screen.
-
-
search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
+search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
@@ -270,7 +270,7 @@ for simplicity. It shows a pane of info.
-
-
aliases = ['h', '?']
+aliases = ['?', 'h']
@@ -296,7 +296,7 @@ for simplicity. It shows a pane of info.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
+search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.ingame_python.commands.html b/docs/0.9.5/api/evennia.contrib.ingame_python.commands.html
index c49e79617f..0d96ae7555 100644
--- a/docs/0.9.5/api/evennia.contrib.ingame_python.commands.html
+++ b/docs/0.9.5/api/evennia.contrib.ingame_python.commands.html
@@ -52,7 +52,7 @@
-
-
aliases = ['@calls', '@callback', '@callbacks']
+aliases = ['@callback', '@calls', '@callbacks']
@@ -133,7 +133,7 @@ on user permission.
-
-
search_index_entry = {'aliases': '@calls @callback @callbacks', 'category': 'building', 'key': '@call', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
+search_index_entry = {'aliases': '@callback @calls @callbacks', 'category': 'building', 'key': '@call', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.rpsystem.html b/docs/0.9.5/api/evennia.contrib.rpsystem.html
index 2757aa1531..bc0096acfe 100644
--- a/docs/0.9.5/api/evennia.contrib.rpsystem.html
+++ b/docs/0.9.5/api/evennia.contrib.rpsystem.html
@@ -636,7 +636,7 @@ a different language.
-
-
aliases = ["'", '"']
+aliases = ['"', "'"]
@@ -662,7 +662,7 @@ a different language.
-
-
search_index_entry = {'aliases': '\' "', 'category': 'general', 'key': 'say', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
+search_index_entry = {'aliases': '" \'', 'category': 'general', 'key': 'say', 'tags': '', 'text': '\n speak as your character\n\n Usage:\n say <message>\n\n Talk to those in your current location.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_basic.html b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_basic.html
index ab302517a0..2dc9b33447 100644
--- a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_basic.html
+++ b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_basic.html
@@ -570,7 +570,7 @@ if there are still any actions you can take.
-
-
aliases = ['hold', 'wait']
+aliases = ['wait', 'hold']
@@ -591,7 +591,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_equip.html b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_equip.html
index 78b37c6df8..603ec6d54a 100644
--- a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_equip.html
+++ b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_equip.html
@@ -687,7 +687,7 @@ if there are still any actions you can take.
-
-
aliases = ['hold', 'wait']
+aliases = ['wait', 'hold']
@@ -708,7 +708,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_items.html b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_items.html
index 1de765a839..896ef07e74 100644
--- a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_items.html
+++ b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_items.html
@@ -721,7 +721,7 @@ if there are still any actions you can take.
-
-
aliases = ['hold', 'wait']
+aliases = ['wait', 'hold']
@@ -742,7 +742,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_magic.html b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_magic.html
index f830f8855a..8fcd7c5b0b 100644
--- a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_magic.html
+++ b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_magic.html
@@ -593,7 +593,7 @@ if there are still any actions you can take.
-
-
aliases = ['hold', 'wait']
+aliases = ['wait', 'hold']
@@ -614,7 +614,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_range.html b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_range.html
index c9dbcc741f..f8379a4019 100644
--- a/docs/0.9.5/api/evennia.contrib.turnbattle.tb_range.html
+++ b/docs/0.9.5/api/evennia.contrib.turnbattle.tb_range.html
@@ -1020,7 +1020,7 @@ if there are still any actions you can take.
-
-
aliases = ['hold', 'wait']
+aliases = ['wait', 'hold']
@@ -1041,7 +1041,7 @@ if there are still any actions you can take.
-
-
search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
+search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html b/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html
index e474c4f7ca..c0a2636f4c 100644
--- a/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html
+++ b/docs/0.9.5/api/evennia.contrib.tutorial_examples.red_button.html
@@ -79,7 +79,7 @@ such as when closing the lid and un-blinding a character.
-
-
aliases = ['push', 'press', 'press button']
+aliases = ['press', 'press button', 'push']
@@ -108,7 +108,7 @@ check if the lid is open or closed.
-
-
search_index_entry = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
+search_index_entry = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
@@ -178,7 +178,7 @@ check if the lid is open or closed.
-
-
aliases = ['break lid', 'smash lid', 'smash']
+aliases = ['smash', 'smash lid', 'break lid']
@@ -205,7 +205,7 @@ break.
-
-
search_index_entry = {'aliases': 'break lid smash lid smash', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
+search_index_entry = {'aliases': 'smash smash lid break lid', 'category': 'general', 'key': 'smash glass', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
@@ -305,7 +305,7 @@ be mutually exclusive.
-
-
aliases = ['push', 'press', 'press button']
+aliases = ['press', 'press button', 'push']
@@ -334,7 +334,7 @@ set in self.parse())
-
-
search_index_entry = {'aliases': 'push press press button', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
+search_index_entry = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
@@ -432,7 +432,7 @@ be mutually exclusive.
-
-
aliases = ['ex', 'l', 'get', 'feel', 'examine', 'listen']
+aliases = ['listen', 'l', 'examine', 'get', 'feel', 'ex']
@@ -458,7 +458,7 @@ be mutually exclusive.
-
-
search_index_entry = {'aliases': 'ex l get feel examine listen', 'category': 'general', 'key': 'look', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}
+search_index_entry = {'aliases': 'listen l examine get feel ex', 'category': 'general', 'key': 'look', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}
diff --git a/docs/0.9.5/api/evennia.contrib.tutorial_world.objects.html b/docs/0.9.5/api/evennia.contrib.tutorial_world.objects.html
index 96d3bd0887..ea118bc1e1 100644
--- a/docs/0.9.5/api/evennia.contrib.tutorial_world.objects.html
+++ b/docs/0.9.5/api/evennia.contrib.tutorial_world.objects.html
@@ -361,7 +361,7 @@ of the object. We overload it with our own version.
-
-
aliases = ['burn', 'light']
+aliases = ['light', 'burn']
@@ -388,7 +388,7 @@ to sit on a “lightable” object, we operate only on self.obj.
-
-
search_index_entry = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}
+search_index_entry = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}
@@ -492,7 +492,7 @@ shift green root up/down
-
-
aliases = ['push', 'pull', 'shiftroot', 'move']
+aliases = ['move', 'shiftroot', 'push', 'pull']
@@ -528,7 +528,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'push pull shiftroot move', 'category': 'tutorialworld', 'key': 'shift', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
+search_index_entry = {'aliases': 'move shiftroot push pull', 'category': 'tutorialworld', 'key': 'shift', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
@@ -545,7 +545,7 @@ yellow/green - horizontal roots
-
-
aliases = ['push button', 'button', 'press button']
+aliases = ['button', 'press button', 'push button']
@@ -571,7 +571,7 @@ yellow/green - horizontal roots
-
-
search_index_entry = {'aliases': 'push button button press button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}
+search_index_entry = {'aliases': 'button press button push button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}
@@ -715,7 +715,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
aliases = ['thrust', 'defend', 'bash', 'fight', 'pierce', 'stab', 'hit', 'parry', 'kill', 'chop', 'slash']
+aliases = ['chop', 'fight', 'parry', 'hit', 'pierce', 'bash', 'thrust', 'slash', 'stab', 'defend', 'kill']
@@ -741,7 +741,7 @@ parry - forgoes your attack but will make you harder to hit on next
-
-
search_index_entry = {'aliases': 'thrust defend bash fight pierce stab hit parry kill chop slash', 'category': 'tutorialworld', 'key': 'attack', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
+search_index_entry = {'aliases': 'chop fight parry hit pierce bash thrust slash stab defend kill', 'category': 'tutorialworld', 'key': 'attack', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
diff --git a/docs/0.9.5/api/evennia.contrib.tutorial_world.rooms.html b/docs/0.9.5/api/evennia.contrib.tutorial_world.rooms.html
index 048fcbe93e..6f7e793c40 100644
--- a/docs/0.9.5/api/evennia.contrib.tutorial_world.rooms.html
+++ b/docs/0.9.5/api/evennia.contrib.tutorial_world.rooms.html
@@ -713,7 +713,7 @@ if they fall off the bridge.
-
-
aliases = ['h', '?']
+aliases = ['?', 'h']
@@ -739,7 +739,7 @@ if they fall off the bridge.
-
-
search_index_entry = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
+search_index_entry = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
@@ -865,7 +865,7 @@ to find something.
-
-
aliases = ['l', 'feel', 'search', 'fiddle', 'feel around']
+aliases = ['fiddle', 'feel around', 'search', 'feel', 'l']
@@ -893,7 +893,7 @@ random chance of eventually finding a light source.
-
-
search_index_entry = {'aliases': 'l feel search fiddle feel around', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
+search_index_entry = {'aliases': 'fiddle feel around search feel l', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
diff --git a/docs/0.9.5/api/evennia.locks.lockfuncs.html b/docs/0.9.5/api/evennia.locks.lockfuncs.html
index 6c9c3b4fca..387572709d 100644
--- a/docs/0.9.5/api/evennia.locks.lockfuncs.html
+++ b/docs/0.9.5/api/evennia.locks.lockfuncs.html
@@ -105,6 +105,8 @@ is set to True on the Object. In this case however, the
LOWEST hieararcy-permission of the Account/Object-pair will be used
(this is order to avoid Accounts potentially escalating their own permissions
by use of a higher-level Object)
+For non-hierarchical permissions, a puppeted object’s account is checked first,
+followed by the puppet (unless quelled, when only puppet’s access is checked).
diff --git a/docs/0.9.5/api/evennia.objects.objects.html b/docs/0.9.5/api/evennia.objects.objects.html
index e9aa8663e2..3c9b18478b 100644
--- a/docs/0.9.5/api/evennia.objects.objects.html
+++ b/docs/0.9.5/api/evennia.objects.objects.html
@@ -814,7 +814,7 @@ normal hook to overload for most object types.
-
at_object_delete()[source]
-Called just before the database object is permanently
+
Called just before the database object is persistently
delete()d from the database. If this method returns False,
deletion is aborted.
diff --git a/docs/0.9.5/api/evennia.prototypes.prototypes.html b/docs/0.9.5/api/evennia.prototypes.prototypes.html
index f78a6a80b2..41fe630672 100644
--- a/docs/0.9.5/api/evennia.prototypes.prototypes.html
+++ b/docs/0.9.5/api/evennia.prototypes.prototypes.html
@@ -433,7 +433,7 @@ data type to insert into the prototype.
-
-
evennia.prototypes.prototypes.init_spawn_value(value, validator=None, caller=None)[source]
+evennia.prototypes.prototypes.init_spawn_value(value, validator=None, caller=None, prototype=None)[source]
Analyze the prototype value and produce a value useful at the point of spawning.
- Parameters
@@ -449,6 +449,7 @@ validator (callable, optional): If given, this will be called with the value to<
- caller (Object or Account): This is necessary for certain protfuncs that perform object
searches and have to check permissions.
+prototype (dict): Prototype this is to be used for. Necessary for certain protfuncs.
- Returns
diff --git a/docs/0.9.5/api/evennia.typeclasses.models.html b/docs/0.9.5/api/evennia.typeclasses.models.html
index 0f5dcf18c9..f36f2ffd9c 100644
--- a/docs/0.9.5/api/evennia.typeclasses.models.html
+++ b/docs/0.9.5/api/evennia.typeclasses.models.html
@@ -282,6 +282,23 @@ If Django were to change this name internally, we need to
update here (unlikely, but marking just in case).
+
+-
+classmethod
search(query, **kwargs)[source]
+Overridden by class children. This implements a common API.
+
+- Parameters
+-
+
+- Returns
+list – A list of 0, 1 or more matches, only of this typeclass.
+
+
+
+
-
is_typeclass(typeclass, exact=False)[source]
diff --git a/docs/0.9.5/api/evennia.utils.eveditor.html b/docs/0.9.5/api/evennia.utils.eveditor.html
index 6853794f5d..73b61e89c2 100644
--- a/docs/0.9.5/api/evennia.utils.eveditor.html
+++ b/docs/0.9.5/api/evennia.utils.eveditor.html
@@ -274,7 +274,7 @@ indentation.
-
-
aliases = [':uu', ':q', ':dd', ':h', ':I', ':u', ':s', '::', ':r', ':A', ':S', ':f', ':=', ':fd', ':DD', ':j', ':UU', ':', ':y', ':w', ':echo', ':wq', ':fi', ':x', ':::', ':<', ':!', ':p', ':>', ':q!', ':i', ':dw']
+aliases = [':r', ':!', ':u', ':dd', ':DD', ':', ':echo', ':UU', ':f', ':fi', ':::', ':i', ':dw', ':fd', ':p', ':uu', ':s', ':S', ':=', ':y', ':I', ':x', ':A', '::', ':q!', ':w', ':h', ':<', ':q', ':wq', ':>', ':j']
@@ -302,7 +302,7 @@ efficient presentation.
-
-
search_index_entry = {'aliases': ':uu :q :dd :h :I :u :s :: :r :A :S :f := :fd :DD :j :UU : :y :w :echo :wq :fi :x ::: :< :! :p :> :q! :i :dw', 'category': 'general', 'key': ':editor_command_group', 'tags': '', 'text': '\n Commands for the editor\n '}
+search_index_entry = {'aliases': ':r :! :u :dd :DD : :echo :UU :f :fi ::: :i :dw :fd :p :uu :s :S := :y :I :x :A :: :q! :w :h :< :q :wq :> :j', 'category': 'general', 'key': ':editor_command_group', 'tags': '', 'text': '\n Commands for the editor\n '}
diff --git a/docs/0.9.5/api/evennia.utils.evmenu.html b/docs/0.9.5/api/evennia.utils.evmenu.html
index c254022e45..5b743f4399 100644
--- a/docs/0.9.5/api/evennia.utils.evmenu.html
+++ b/docs/0.9.5/api/evennia.utils.evmenu.html
@@ -940,7 +940,7 @@ single question.
+aliases = ['abort', 'y', 'n', 'yes', 'no', '__nomatch_command', 'a']
@@ -966,7 +966,7 @@ single question.
+search_index_entry = {'aliases': 'abort y n yes no __nomatch_command a', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
diff --git a/docs/0.9.5/api/evennia.utils.evmore.html b/docs/0.9.5/api/evennia.utils.evmore.html
index 704aba0ac2..496ccd7097 100644
--- a/docs/0.9.5/api/evennia.utils.evmore.html
+++ b/docs/0.9.5/api/evennia.utils.evmore.html
@@ -75,7 +75,7 @@ the caller.msg() construct every time the page is updated.
-
-
aliases = ['quit', 'q', 'top', 'abort', 'e', 'n', 't', 'b', 'a', 'end', 'next', 'back']
+aliases = ['abort', 't', 'n', 'next', 'end', 'top', 'b', 'quit', 'q', 'e', 'back', 'a']
@@ -101,7 +101,7 @@ the caller.msg() construct every time the page is updated.
-
-
search_index_entry = {'aliases': 'quit q top abort e n t b a end next back', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}
+search_index_entry = {'aliases': 'abort t n next end top b quit q e back a', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}
diff --git a/docs/0.9.5/api/evennia.utils.gametime.html b/docs/0.9.5/api/evennia.utils.gametime.html
index db51676847..41783f2eab 100644
--- a/docs/0.9.5/api/evennia.utils.gametime.html
+++ b/docs/0.9.5/api/evennia.utils.gametime.html
@@ -194,14 +194,15 @@ return 300 (5 minutes).
-
-
evennia.utils.gametime.schedule(callback, repeat=False, sec=None, min=None, hour=None, day=None, month=None, year=None)[source]
+evennia.utils.gametime.schedule(callback, repeat=False, sec=None, min=None, hour=None, day=None, month=None, year=None, *args, **kwargs)[source]
Call a callback at a given in-game time.
- Parameters
callback (function) – The callback function that will be called. Note
that the callback must be a module-level function, since the script will
-be persistent.
+be persistent. The callable should be on form callable(*args, **kwargs)
+where args/kwargs are passed into this schedule.
repeat (bool, optional) – Defines if the callback should be called regularly
at the specified time.
sec (int or None) – Number of absolute game seconds at which to run repeat.
@@ -210,6 +211,11 @@ at the specified time.
day (int or None) – Number of absolute days.
month (int or None) – Number of absolute months.
year (int or None) – Number of absolute years.
+*args – Will be passed into the callable. These must be possible
+to store in Attributes on the generated scheduling Script.
+**kwargs –
Will be passed into the callable. These must be possible
+to store in Attributes on the generated scheduling Script.
+
- Returns
diff --git a/docs/0.9.5/genindex.html b/docs/0.9.5/genindex.html
index 9aa1f3dd2f..ce090093aa 100644
--- a/docs/0.9.5/genindex.html
+++ b/docs/0.9.5/genindex.html
@@ -577,10 +577,12 @@
- (evennia.commands.default.building.CmdMvAttr attribute)
- (evennia.commands.default.building.CmdName attribute)
+
+ - (evennia.commands.default.building.CmdObjects attribute)
- (evennia.commands.default.building.CmdOpen attribute)
- - (evennia.commands.default.building.CmdScript attribute)
+
- (evennia.commands.default.building.CmdScripts attribute)
- (evennia.commands.default.building.CmdSetAttribute attribute)
@@ -673,16 +675,12 @@
- (evennia.commands.default.syscommands.SystemNoMatch attribute)
- (evennia.commands.default.system.CmdAbout attribute)
-
- - (evennia.commands.default.system.CmdObjects attribute)
- (evennia.commands.default.system.CmdPy attribute)
- (evennia.commands.default.system.CmdReload attribute)
- (evennia.commands.default.system.CmdReset attribute)
-
- - (evennia.commands.default.system.CmdScripts attribute)
- (evennia.commands.default.system.CmdServerLoad attribute)
@@ -1055,10 +1053,10 @@
- allHeadersReceived() (evennia.server.webserver.HTTPChannelWithXForwardedFor method)
-
- |
+
- - CmdScript (class in evennia.commands.default.building)
-
- - CmdScripts (class in evennia.commands.default.system)
+
- CmdScripts (class in evennia.commands.default.building)
- CmdSdesc (class in evennia.contrib.rpsystem)
@@ -5429,7 +5425,7 @@
- EvTable (class in evennia.utils.evtable)
- - excluded_typeclass_paths (evennia.commands.default.system.CmdScripts attribute)
+
- excluded_typeclass_paths (evennia.commands.default.building.CmdScripts attribute)
- execute_cmd() (evennia.accounts.accounts.DefaultAccount method)
@@ -5685,10 +5681,12 @@
- (evennia.commands.default.building.CmdMvAttr method)
- (evennia.commands.default.building.CmdName method)
+
+ - (evennia.commands.default.building.CmdObjects method)
- (evennia.commands.default.building.CmdOpen method)
- - (evennia.commands.default.building.CmdScript method)
+
- (evennia.commands.default.building.CmdScripts method)
- (evennia.commands.default.building.CmdSetAttribute method)
@@ -5777,16 +5775,12 @@
- (evennia.commands.default.syscommands.SystemNoMatch method)
- (evennia.commands.default.system.CmdAbout method)
-
- - (evennia.commands.default.system.CmdObjects method)
- (evennia.commands.default.system.CmdPy method)
- (evennia.commands.default.system.CmdReload method)
- (evennia.commands.default.system.CmdReset method)
-
- - (evennia.commands.default.system.CmdScripts method)
- (evennia.commands.default.system.CmdServerLoad method)
@@ -6699,10 +6693,12 @@
- (evennia.commands.default.building.CmdMvAttr attribute)
- (evennia.commands.default.building.CmdName attribute)
+
+ - (evennia.commands.default.building.CmdObjects attribute)
- (evennia.commands.default.building.CmdOpen attribute)
- - (evennia.commands.default.building.CmdScript attribute)
+
- (evennia.commands.default.building.CmdScripts attribute)
- (evennia.commands.default.building.CmdSetAttribute attribute)
@@ -6795,16 +6791,12 @@
- (evennia.commands.default.syscommands.SystemNoMatch attribute)
- (evennia.commands.default.system.CmdAbout attribute)
-
- - (evennia.commands.default.system.CmdObjects attribute)
- (evennia.commands.default.system.CmdPy attribute)
- (evennia.commands.default.system.CmdReload attribute)
- (evennia.commands.default.system.CmdReset attribute)
-
- - (evennia.commands.default.system.CmdScripts attribute)
- (evennia.commands.default.system.CmdServerLoad attribute)
@@ -7565,10 +7557,12 @@
- (evennia.commands.default.building.CmdMvAttr attribute)
- (evennia.commands.default.building.CmdName attribute)
+
+ - (evennia.commands.default.building.CmdObjects attribute)
- (evennia.commands.default.building.CmdOpen attribute)
- - (evennia.commands.default.building.CmdScript attribute)
+
- (evennia.commands.default.building.CmdScripts attribute)
- (evennia.commands.default.building.CmdSetAttribute attribute)
@@ -7669,16 +7663,12 @@
- (evennia.commands.default.syscommands.SystemNoMatch attribute)
- (evennia.commands.default.system.CmdAbout attribute)
-
- - (evennia.commands.default.system.CmdObjects attribute)
- (evennia.commands.default.system.CmdPy attribute)
- (evennia.commands.default.system.CmdReload attribute)
- (evennia.commands.default.system.CmdReset attribute)
-
- - (evennia.commands.default.system.CmdScripts attribute)
- (evennia.commands.default.system.CmdServerLoad attribute)
@@ -8269,10 +8259,12 @@
- (evennia.commands.default.building.CmdMvAttr attribute)
- (evennia.commands.default.building.CmdName attribute)
+
+ - (evennia.commands.default.building.CmdObjects attribute)
- (evennia.commands.default.building.CmdOpen attribute)
- - (evennia.commands.default.building.CmdScript attribute)
+
- (evennia.commands.default.building.CmdScripts attribute)
- (evennia.commands.default.building.CmdSetAttribute attribute)
@@ -8365,16 +8357,12 @@
- (evennia.commands.default.syscommands.SystemNoMatch attribute)
- (evennia.commands.default.system.CmdAbout attribute)
-
- - (evennia.commands.default.system.CmdObjects attribute)
- (evennia.commands.default.system.CmdPy attribute)
- (evennia.commands.default.system.CmdReload attribute)
- (evennia.commands.default.system.CmdReset attribute)
-
- - (evennia.commands.default.system.CmdScripts attribute)
- (evennia.commands.default.system.CmdServerLoad attribute)
@@ -8769,10 +8757,12 @@
- (evennia.commands.default.building.CmdMvAttr attribute)
- (evennia.commands.default.building.CmdName attribute)
+
+ - (evennia.commands.default.building.CmdObjects attribute)
- (evennia.commands.default.building.CmdOpen attribute)
- - (evennia.commands.default.building.CmdScript attribute)
+
- (evennia.commands.default.building.CmdScripts attribute)
- (evennia.commands.default.building.CmdSetAttribute attribute)
@@ -8859,16 +8849,12 @@
- (evennia.commands.default.syscommands.SystemNoMatch attribute)
- (evennia.commands.default.system.CmdAbout attribute)
-
- - (evennia.commands.default.system.CmdObjects attribute)
- (evennia.commands.default.system.CmdPy attribute)
- (evennia.commands.default.system.CmdReload attribute)
- (evennia.commands.default.system.CmdReset attribute)
-
- - (evennia.commands.default.system.CmdScripts attribute)
- (evennia.commands.default.system.CmdServerLoad attribute)
@@ -10577,14 +10563,14 @@
- perm_above() (in module evennia.locks.lockfuncs)
- perm_used (evennia.commands.default.admin.CmdForce attribute)
-
- - permanent (evennia.commands.cmdset.CmdSet attribute)
- PermissionError
- PermissionHandler (class in evennia.typeclasses.tags)
- permissions (evennia.typeclasses.models.TypedObject attribute)
+
+ - persistent (evennia.commands.cmdset.CmdSet attribute)
- persistent() (evennia.scripts.models.ScriptDB property)
@@ -11126,6 +11112,8 @@
- (evennia.scripts.tickerhandler.TickerHandler method)
+ - retain_instance (evennia.commands.command.Command attribute)
+
- return_appearance() (evennia.contrib.clothing.ClothedCharacter method)
- search_account() (evennia.objects.objects.DefaultObject method)
@@ -11440,10 +11430,12 @@
- (evennia.commands.default.building.CmdMvAttr attribute)
- (evennia.commands.default.building.CmdName attribute)
+
+ - (evennia.commands.default.building.CmdObjects attribute)
- (evennia.commands.default.building.CmdOpen attribute)
- - (evennia.commands.default.building.CmdScript attribute)
+
- (evennia.commands.default.building.CmdScripts attribute)
- (evennia.commands.default.building.CmdSetAttribute attribute)
@@ -11536,16 +11528,12 @@
- (evennia.commands.default.syscommands.SystemNoMatch attribute)
- (evennia.commands.default.system.CmdAbout attribute)
-
- - (evennia.commands.default.system.CmdObjects attribute)
- (evennia.commands.default.system.CmdPy attribute)
- (evennia.commands.default.system.CmdReload attribute)
- (evennia.commands.default.system.CmdReset attribute)
-
- - (evennia.commands.default.system.CmdScripts attribute)
- (evennia.commands.default.system.CmdServerLoad attribute)
@@ -11871,11 +11859,11 @@
- seek() (evennia.utils.logger.EvenniaLogFile method)
- self() (in module evennia.locks.lockfuncs)
-
- - send_AdminPortal2Server() (evennia.server.portal.amp_server.AMPServerProtocol method)
|
|