From b092cbba9a94e47353b073622ba6794fc3586c4f Mon Sep 17 00:00:00 2001
From: Griatch
aliases = ['remit', 'pemit']¶aliases = ['pemit', 'remit']¶
aliases = ['delete', 'del']¶aliases = ['del', 'delete']¶
aliases = ['swap', 'parent', 'update', 'type']¶aliases = ['parent', 'swap', 'type', 'update']¶
aliases = ['ex', 'exam']¶aliases = ['exam', 'ex']¶
aliases = ['locate', 'search']¶aliases = ['search', 'locate']¶
aliases = ['aliaschan', 'chanalias']¶aliases = ['chanalias', 'aliaschan']¶
aliases = ['delchanalias', 'delaliaschan']¶aliases = ['delaliaschan', 'delchanalias']¶
aliases = ['clist', 'all channels', 'channellist', 'chanlist', 'comlist']¶aliases = ['chanlist', 'channellist', 'clist', 'all channels', 'comlist']¶
aliases = ['i', 'inv']¶aliases = ['inv', 'i']¶
aliases = ['emote', ':']¶aliases = [':', 'emote']¶
aliases = ['hierarchy', 'groups']¶aliases = ['groups', 'hierarchy']¶
aliases = ['globalscript', 'listscripts']¶aliases = ['listscripts', 'globalscript']¶
aliases = ['db', 'listobjects', 'stats', 'listobjs']¶aliases = ['listobjs', 'db', 'stats', 'listobjects']¶
aliases = ['co', 'conn', 'con']¶aliases = ['con', 'conn', 'co']¶
aliases = ['look', 'l']¶aliases = ['l', 'look']¶
aliases = ['h', '?']¶aliases = ['?', 'h']¶
aliases = ['offers', 'deal']¶aliases = ['deal', 'offers']¶
aliases = ['i', 'inv']¶aliases = ['inv', 'i']¶
aliases = ['co', 'conn', 'con']¶aliases = ['con', 'conn', 'co']¶
aliases = ['look', 'l']¶aliases = ['l', 'look']¶
aliases = ['h', '?']¶aliases = ['?', 'h']¶
aliases = ['hold', 'wait']¶aliases = ['wait', 'hold']¶
aliases = ['hold', 'wait']¶aliases = ['wait', 'hold']¶
aliases = ['hold', 'wait']¶aliases = ['wait', 'hold']¶
aliases = ['hold', 'wait']¶aliases = ['wait', 'hold']¶
aliases = ['hold', 'wait']¶aliases = ['wait', 'hold']¶
aliases = ['press button', 'press', 'push']¶
aliases = ['listen', 'ex', 'get', 'examine', 'l', 'feel']¶
aliases = ['light', 'burn']¶aliases = ['burn', 'light']¶
aliases = ['shiftroot', 'move', 'push', 'pull']¶aliases = ['pull', 'move', 'shiftroot', 'push']¶
aliases = ['press button', 'button', 'push button']¶aliases = ['press button', 'push button', 'button']¶
aliases = ['defend', 'stab', 'bash', 'thrust', 'kill', 'parry', 'pierce', 'slash', 'fight', 'chop', 'hit']¶aliases = ['fight', 'stab', 'pierce', 'bash', 'chop', 'thrust', 'kill', 'slash', 'parry', 'hit', 'defend']¶
aliases = ['h', '?']¶aliases = ['?', 'h']¶
aliases = ['search', 'fiddle', 'feel around', 'feel', 'l']¶aliases = ['fiddle', 'feel around', 'feel', 'l', 'search']¶
aliases = [':DD', ':uu', ':i', ':q', ':y', ':!', ':j', ':q!', ':=', ':h', ':w', '::', ':>', ':echo', ':I', ':', ':f', ':S', ':dw', ':p', ':fd', ':A', ':x', ':u', ':wq', ':<', ':r', ':dd', ':UU', ':s', ':fi', ':::']¶aliases = [':dd', ':I', '::', ':DD', ':y', ':fd', ':S', ':!', ':i', ':s', ':::', ':A', ':<', ':', ':UU', ':h', ':u', ':wq', ':uu', ':fi', ':echo', ':q', ':w', ':>', ':f', ':p', ':r', ':j', ':x', ':=', ':dw', ':q!']¶
aliases = ['q', 'abort', 't', 'top', 'a', 'n', 'b', 'next', 'quit', 'end', 'e', 'back']¶aliases = ['a', 'top', 't', 'end', 'b', 'quit', 'abort', 'back', 'q', 'n', 'e', 'next']¶
+The FuncParser extracts and executes
‘inline functions’
embedded in a string on the form $funcname(args, kwargs). Under the hood, this will
@@ -106,7 +109,7 @@ Evennia expects you to do in a proper text editor, outside of the game, not from
You can apply inline function parsing to any string. The
-FuncParser is found in evennia.utils.funcparser.py.
evennia.utils.funcparser.
1 2 3 @@ -133,7 +136,7 @@ available to the parser as you parse strings with it. It can either be to include and how they should be named. Do you want a callable to be available under more than one name? Just add it multiple times to the dict, with a different key. A raise_errors
[docs]def send_emote(sender, receivers, emote, anonymous_add="first"):
+
# ------------------------------------------------------------
diff --git a/docs/1.0-dev/_modules/evennia/objects/objects.html b/docs/1.0-dev/_modules/evennia/objects/objects.html
index 9bca109ab9..d1db9b4e36 100644
--- a/docs/1.0-dev/_modules/evennia/objects/objects.html
+++ b/docs/1.0-dev/_modules/evennia/objects/objects.html
@@ -716,7 +716,7 @@
logger.log_trace()
kwargs["options"] = options
try:
- if not self.at_msg_receive(text=text, **kwargs):
+ if not self.at_msg_receive(text=text, from_obj=from_obj, **kwargs):
# if at_msg_receive returns false, we abort message to this object
return
except Exception:
@@ -1561,7 +1561,7 @@
}
)
- location.msg_contents(string, exclude=(self,), mapping=mapping)
+ location.msg_contents(string, exclude=(self,), from_obj=self, mapping=mapping)
[docs]def send_emote(sender, receivers, emote, anonymous_add="first", **kwargs):
"""
Main access function for distribute an emote.
@@ -551,7 +551,9 @@
# we escape the object mappings since we'll do the language ones first
# (the text could have nested object mappings).
emote = _RE_REF.sub(r"{{#\1}}", emote)
-
+ # if anonymous_add is passed as a kwarg, collect and remove it from kwargs
+ if 'anonymous_add' in kwargs:
+ anonymous_add = kwargs.pop('anonymous_add')
if anonymous_add and not "#%i" % sender.id in obj_mapping:
# no self-reference in the emote - add to the end
key = "#%i" % sender.id
@@ -609,7 +611,7 @@
receiver_sdesc_mapping[rkey] = process_sdesc(receiver.key, receiver)
# do the template replacement of the sdesc/recog {#num} markers
- receiver.msg(sendemote.format(**receiver_sdesc_mapping))
+ receiver.msg(sendemote.format(**receiver_sdesc_mapping), from_obj=sender, **kwargs)[docs] def announce_move_to(self, source_location, msg=None, mapping=None, **kwargs):
"""
@@ -1623,7 +1623,7 @@
}
)
- destination.msg_contents(string, exclude=(self,), mapping=mapping)
+ destination.msg_contents(string, exclude=(self,), from_obj=self, mapping=mapping)
[docs] def at_after_move(self, source_location, **kwargs):
"""
diff --git a/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html b/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html
index 5311a89be7..ef29d57388 100644
--- a/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html
+++ b/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html
@@ -425,10 +425,12 @@
else:
mod_matches = _MODULE_PROTOTYPES
+ allow_fuzzy = True
if key:
if key in mod_matches:
# exact match
module_prototypes = [mod_matches[key]]
+ allow_fuzzy = False
else:
# fuzzy matching
module_prototypes = [
@@ -452,7 +454,7 @@
if key:
# exact or partial match on key
exact_match = db_matches.filter(Q(db_key__iexact=key)).order_by("db_key")
- if not exact_match:
+ if not exact_match and allow_fuzzy:
# try with partial match instead
db_matches = db_matches.filter(Q(db_key__icontains=key)).order_by("db_key")
else:
@@ -469,7 +471,7 @@
nmodules = len(module_prototypes)
ndbprots = db_matches.count()
if nmodules + ndbprots != 1:
- raise KeyError(f"Found {nmodules + ndbprots} matching prototypes.")
+ raise KeyError(f"Found {nmodules + ndbprots} matching prototypes {module_prototypes}.")
if return_iterators:
# trying to get the entire set of prototypes - we must paginate
diff --git a/docs/1.0-dev/_modules/evennia/server/deprecations.html b/docs/1.0-dev/_modules/evennia/server/deprecations.html
index d5b5651b42..bbb979bb66 100644
--- a/docs/1.0-dev/_modules/evennia/server/deprecations.html
+++ b/docs/1.0-dev/_modules/evennia/server/deprecations.html
@@ -106,7 +106,7 @@
"replaces and generalizes that which inlinefuncs used to do).")
if hasattr(settings, "INLINEFUNC_ENABLED"):
raise DeprecationWarning(depstring.format(
- "settings.INLINEFUNC_ENABLED", "FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLE"))
+ "settings.INLINEFUNC_ENABLED", "FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED"))
if hasattr(settings, "INLINEFUNC_STACK_MAXSIZE"):
raise DeprecationWarning(depstring.format(
"settings.INLINEFUNC_STACK_MAXSIZE", "FUNCPARSER_MAX_NESTING"))
diff --git a/docs/1.0-dev/_modules/evennia/server/portal/portal.html b/docs/1.0-dev/_modules/evennia/server/portal/portal.html
index ffbcb8ad5f..ddf4958c25 100644
--- a/docs/1.0-dev/_modules/evennia/server/portal/portal.html
+++ b/docs/1.0-dev/_modules/evennia/server/portal/portal.html
@@ -161,7 +161,7 @@
_MAINTENANCE_COUNT += 1
- if _MAINTENANCE_COUNT % (3600 * 7) == 0:
+ if _MAINTENANCE_COUNT % (60 * 7) == 0:
# drop database connection every 7 hrs to avoid default timeouts on MySQL
# (see https://github.com/evennia/evennia/issues/1376)
connection.close()
diff --git a/docs/1.0-dev/_modules/evennia/server/server.html b/docs/1.0-dev/_modules/evennia/server/server.html
index 4902e16eea..231c759279 100644
--- a/docs/1.0-dev/_modules/evennia/server/server.html
+++ b/docs/1.0-dev/_modules/evennia/server/server.html
@@ -182,13 +182,16 @@
_GAMETIME_MODULE.SERVER_RUNTIME_LAST_UPDATED = now
ServerConfig.objects.conf("runtime", _GAMETIME_MODULE.SERVER_RUNTIME)
- if _MAINTENANCE_COUNT % 300 == 0:
+ if _MAINTENANCE_COUNT % 5 == 0:
# check cache size every 5 minutes
_FLUSH_CACHE(_IDMAPPER_CACHE_MAXSIZE)
- if _MAINTENANCE_COUNT % 3700 == 0:
+ if _MAINTENANCE_COUNT % 60 == 0:
+ # validate scripts every hour
+ evennia.ScriptDB.objects.validate()
+ if _MAINTENANCE_COUNT % 61 == 0:
# validate channels off-sync with scripts
evennia.CHANNEL_HANDLER.update()
- if _MAINTENANCE_COUNT % (3600 * 7) == 0:
+ if _MAINTENANCE_COUNT % (60 * 7) == 0:
# drop database connection every 7 hrs to avoid default timeouts on MySQL
# (see https://github.com/evennia/evennia/issues/1376)
connection.close()
diff --git a/docs/1.0-dev/_modules/evennia/server/sessionhandler.html b/docs/1.0-dev/_modules/evennia/server/sessionhandler.html
index ceb026d560..dccc6fb904 100644
--- a/docs/1.0-dev/_modules/evennia/server/sessionhandler.html
+++ b/docs/1.0-dev/_modules/evennia/server/sessionhandler.html
@@ -219,7 +219,7 @@
global _FUNCPARSER
if not _FUNCPARSER:
from evennia.utils.funcparser import FuncParser
- _FUNCPARSER = FuncParser(settings.FUNCPARSER_OUTGOING_MESSAGES_MODULE, raise_errors=True)
+ _FUNCPARSER = FuncParser(settings.FUNCPARSER_OUTGOING_MESSAGES_MODULES, raise_errors=True)
options = kwargs.pop("options", None) or {}
raw = options.get("raw", False)
diff --git a/docs/1.0-dev/_modules/evennia/utils/evmenu.html b/docs/1.0-dev/_modules/evennia/utils/evmenu.html
index 0f20d32a10..80932353a7 100644
--- a/docs/1.0-dev/_modules/evennia/utils/evmenu.html
+++ b/docs/1.0-dev/_modules/evennia/utils/evmenu.html
@@ -1596,7 +1596,7 @@
self.add(CmdGetInput())
-class _Prompt(object):
+class _Prompt:
"""Dummy holder"""
pass
@@ -1663,6 +1663,174 @@
caller.msg(prompt, session=session)
+[docs]class CmdYesNoQuestion(Command):
+ """
+ Handle a prompt for yes or no. Press [return] for the default choice.
+
+ """
+
+ key = _CMD_NOINPUT
+ aliases = [_CMD_NOMATCH, "yes", "no", 'y', 'n', 'a', 'abort']
+ arg_regex = r"^$"
+
+ def _clean(self):
+ del self.caller.ndb._yes_no_question
+ self.caller.cmdset.remove(YesNoQuestionCmdSet)
+
+
+
+
+
+[docs] def func(self):
+ """This is called when user enters anything."""
+ caller = self.caller
+ try:
+ yes_no_question = caller.ndb._yes_no_question
+ if not yes_no_question and hasattr(caller, "account"):
+ yes_no_question = caller.account.ndb._yes_no_question
+ caller = caller.account
+
+ inp = self.cmdname
+
+ if inp == _CMD_NOINPUT:
+ raw = self.raw_cmdname.strip()
+ if not raw:
+ # use default
+ inp = yes_no_question.default
+ else:
+ inp = raw
+
+ if inp in ('a', 'abort') and yes_no_question.allow_abort:
+ caller.msg("Aborted.")
+ self._clean()
+ return
+
+ caller.ndb._yes_no_question.session = self.session
+
+ args = yes_no_question.args
+ kwargs = yes_no_question.kwargs
+ kwargs['caller_session'] = self.session
+
+ ok = False
+ if inp in ('yes', 'y'):
+ yes_no_question.yes_callable(caller, *args, **kwargs)
+ elif inp in ('no', 'n'):
+ yes_no_question.no_callable(caller, *args, **kwargs)
+ else:
+ # invalid input. Resend prompt without cleaning
+ caller.msg(yes_no_question.prompt, session=self.session)
+ return
+
+ # cleanup
+ self._clean()
+ except Exception:
+ # make sure to clean up cmdset if something goes wrong
+ caller.msg("|rError in ask_yes_no. Choice not confirmed (report to admin)|n")
+ logger.log_trace("Error in ask_yes_no")
+ self._clean() [docs]class YesNoQuestionCmdSet(CmdSet):
+ """
+ This stores the input command
+ """
+
+ key = "yes_no_question_cmdset"
+ priority = 1
+ mergetype = "Replace"
+ no_objs = True
+ no_exits = True
+ no_channels = False
+
+
+
+
+[docs]def ask_yes_no(caller, prompt, yes_action, no_action, default=None,
+ allow_abort=False, session=None, *args, **kwargs):
+ """
+ A helper question for asking a simple yes/no question. This will cause
+ the system to pause and wait for input from the player.
+
+ Args:
+ prompt (str): The yes/no question to ask. This takes an optional formatting
+ marker `{suffix}` which will be filled with 'Y/N', [Y]/N or Y/[N]
+ depending on the setting of `default`. If `allow_abort`, then the
+ `A(bort)` will also be available.
+ yes_action (callable or str): If a callable, this will be called
+ with `(caller, *args, **kwargs) when the yes-choice is made.
+ If a string, this string will be echoed back to the caller.
+ no_action (callable or str): If a callable, this will be called
+ with `(caller, *args, **kwargs)` when the no-choice is made.
+ If a string, this string will be echoed back to the caller.
+ default (str optional): One of "N", "Y", "A" or None for no default.
+ If "A" is given, `allow_abort` is assumed set. The user can choose
+ the default option just by pressing return.
+ allow_abort (bool, optional): If set, the Q(uit) option is available,
+ which is neither yes or no.
+ session (Session, optional): This allows to specify the
+ session to send the prompt to. It's usually only needed if `caller`
+ is an Account in multisession modes greater than 2. The session is
+ then updated by the command and is available (for example in
+ callbacks) through `caller.ndb._yes_no_question.session`.
+ *args, **kwargs: These are passed into the callables, if any.
+
+ Raises:
+ RuntimeError: If default and allow_abort clashes.
+
+ Example:
+
+ ask_yes_no(caller, "Are you happy {suffix}?",
+ "you answered yes", "you answered no")
+ ask_yes_no(caller, "Are you sad {suffix}?",
+ _callable_yes, _callable_no, allow_abort=True)
+
+ """
+ def _callable_yes_txt(caller, *args, **kwargs):
+ yes_txt = kwargs['yes_txt']
+ session = kwargs['caller_session']
+ caller.msg(yes_txt, session=session)
+
+ def _callable_no_txt(caller, *args, **kwargs):
+ no_txt = kwargs['no_txt']
+ session = kwargs['caller_session']
+ caller.msg(no_txt, session=session)
+
+ if not callable(yes_action):
+ kwargs['yes_txt'] = str(yes_action)
+ yes_action = _callable_yes_txt
+
+ if not callable(no_action):
+ kwargs['no_txt'] = str(no_action)
+ no_action = _callable_no_txt
+
+ # prepare the prompt with suffix
+ suffix = "Y/N"
+ abort_txt = "/Abort" if allow_abort else ""
+ if default:
+ default = default.lower()
+ if default == "y":
+ suffix = "[Y]/N"
+ elif default == "n":
+ suffix = "Y/[N]"
+ elif default == "a":
+ allow_abort = True
+ abort_txt = "/[A]bort"
+ suffix += abort_txt
+ prompt = prompt.format(suffix=suffix)
+
+ caller.ndb._yes_no_question = _Prompt()
+ caller.ndb._yes_no_question.session = session
+ caller.ndb._yes_no_question.prompt = prompt
+ caller.ndb._yes_no_question.default = default
+ caller.ndb._yes_no_question.allow_abort = allow_abort
+ caller.ndb._yes_no_question.yes_callable = yes_action
+ caller.ndb._yes_no_question.no_callable = no_action
+ caller.ndb._yes_no_question.args = args
+ caller.ndb._yes_no_question.kwargs = kwargs
+
+ caller.cmdset.add(YesNoQuestionCmdSet)
+ caller.msg(prompt, session=session)
+
+
# -------------------------------------------------------------
#
# Menu generation from menu template string
diff --git a/docs/1.0-dev/_sources/Components/FuncParser.md.txt b/docs/1.0-dev/_sources/Components/FuncParser.md.txt
index 696b20c3be..e17e23bf15 100644
--- a/docs/1.0-dev/_sources/Components/FuncParser.md.txt
+++ b/docs/1.0-dev/_sources/Components/FuncParser.md.txt
@@ -1,5 +1,9 @@
# The Inline Function Parser
+```
+
+```
+
The [FuncParser](api:evennia.utils.funcparser#evennia.utils.funcparser.FuncParser) extracts and executes
'inline functions'
embedded in a string on the form `$funcname(args, kwargs)`. Under the hood, this will
@@ -65,7 +69,7 @@ The FuncParser can be applied to any string. Out of the box it's applied in a fe
## Using the FuncParser
You can apply inline function parsing to any string. The
-[FuncParser](api:evennia.utils.funcparser.FuncParser) is found in `evennia.utils.funcparser.py`.
+[FuncParser](api:evennia.utils.funcparser.FuncParser) is imported as `evennia.utils.funcparser`.
```python
from evennia.utils import funcparser
@@ -85,7 +89,7 @@ available to the parser as you parse strings with it. It can either be
to include and how they should be named. Do you want a callable to be available under more than one name?
Just add it multiple times to the dict, with a different key.
- A `module` or (more commonly) a `python-path` to a module. This module can define a dict
- `FUNCPARSER_CALLABLES = {"funcname": callable, ...}` - this will be imported and used like ther `dict` above.
+ `FUNCPARSER_CALLABLES = {"funcname": callable, ...}` - this will be imported and used like the `dict` above.
If no such variable is defined, _every_ top-level function in the module (whose name doesn't start with
an underscore `_`) will be considered a suitable callable. The name of the function will be the `$funcname`
by which it can be called.
@@ -123,7 +127,7 @@ Here the callable will be called as
```python
_test('foo', bar='4', mydefault=2, myreserved=[1, 2, 3],
- funcparser=evennia.commands.command¶The base Command class. All commands in Evennia inherit from the ‘Command’ class in this module. +
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\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 '}¶
search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}¶
search_index_entry = {'aliases': 'type parent update swap', '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': '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 '}¶
search_index_entry = {'aliases': 'chanalias aliaschan', 'category': 'comms', 'key': 'addcom', 'tags': '', 'text': '\n add a channel alias and/or subscribe to a channel\n\n Usage:\n addcom [alias=] <channel>\n\n Joins a given channel. If alias is given, this will allow you to\n refer to the channel by this alias rather than the full channel\n name. Subsequent calls of this command can be used to add multiple\n aliases to an already joined channel.\n '}¶
aliases = ['all channels', 'comlist', 'chanlist', 'clist', 'channellist']¶
search_index_entry = {'aliases': 'all channels comlist chanlist clist channellist', 'category': 'comms', 'key': 'channels', 'tags': '', 'text': "\n list all channels available to you\n\n Usage:\n channels\n clist\n comlist\n\n Lists all channels available to you, whether you listen to them or not.\n Use 'comlist' to only view your current channel subscriptions.\n Use addcom/delcom to join and leave channels\n "}¶
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\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 '}¶
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': ': 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': 'groups hierarchy', 'category': 'general', 'key': 'access', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}¶
aliases = ['listobjects', 'stats', 'listobjs', 'db']¶
search_index_entry = {'aliases': 'listobjects stats listobjs db', '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 '}¶
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 '}¶
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': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n ooc look\n\n Usage:\n look\n look <character>\n\n This is an OOC version of the look command. Since an Account doesn\'t\n have an in-game existence, there is no concept of location or\n "self".\n\n If any characters are available for you to control, you may look\n at them with this command.\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 '}¶
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': 'chicken out quit q abort', 'category': 'evscaperoom', 'key': 'give up', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}¶
search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}¶
search_index_entry = {'aliases': ': pose', 'category': 'general', 'key': 'emote', 'tags': '', 'text': '\n Perform a free-form emote. Use /me to\n include yourself in the emote and /name\n to include other objects or characters.\n Use "..." to enact speech.\n\n Usage:\n emote <emote>\n :<emote\n\n Example:\n emote /me smiles at /peter\n emote /me points to /box and /lever.\n\n '}¶
search_index_entry = {'aliases': 'examine ex unfocus e', 'category': 'evscaperoom', 'key': 'focus', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}¶
search_index_entry = {'aliases': 'i give inv inventory', 'category': 'evscaperoom', 'key': 'get', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}¶
search_index_entry = {'aliases': '@dig @open', 'category': 'general', 'key': 'open', 'tags': '', 'text': '\n Interact with an object in focus.\n\n Usage:\n <action> [arg]\n\n '}¶
search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}¶
search_index_entry = {'aliases': '@callbacks @callback @calls', 'category': 'building', 'key': '@call', 'tags': '', 'text': '\n Command to edit callbacks.\n '}¶
evennia.contrib.rpsystem.send_emote(sender, receivers, emote, anonymous_add='first', **kwargs)[source]¶
search_index_entry = {'aliases': 'forget recognize', 'category': 'general', 'key': 'recog', 'tags': '', 'text': '\n Recognize another person in the same room.\n\n Usage:\n recog\n recog sdesc as alias\n forget alias\n\n Example:\n recog tall man as Griatch\n forget griatch\n\n This will assign a personal alias for a person, or forget said alias.\n Using the command without arguments will list all current recogs.\n\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 '}¶
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 '}¶
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 '}¶
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 '}¶
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 '}¶
aliases = ['press', 'push', 'press button']¶
search_index_entry = {'aliases': 'press push press button', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}¶
aliases = ['break lid', 'smash lid', 'smash']¶
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 '}¶
aliases = ['press', 'push', 'press button']¶
search_index_entry = {'aliases': 'press push press button', 'category': 'general', 'key': 'push button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}¶
aliases = ['examine', 'feel', 'ex', 'l', 'get', 'listen']¶
search_index_entry = {'aliases': 'examine feel ex l get 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': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}¶
search_index_entry = {'aliases': 'shiftroot pull push 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 '}¶
aliases = ['push button', 'press button', 'button']¶
search_index_entry = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'tags': '', 'text': '\n Presses a button.\n '}¶
aliases = ['defend', 'pierce', 'chop', 'slash', 'bash', 'parry', 'stab', 'thrust', 'hit', 'kill', 'fight']¶
search_index_entry = {'aliases': 'defend pierce chop slash bash parry stab thrust hit kill fight', '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': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}¶
search_index_entry = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}¶
aliases = ['fiddle', 'feel', 'l', 'search', 'feel around']¶
search_index_entry = {'aliases': 'fiddle feel l search 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 '}¶
aliases = [':>', ':', ':j', ':w', ':I', ':wq', ':DD', ':fd', ':uu', ':dw', ':dd', ':S', ':echo', ':i', ':=', ':!', ':<', ':fi', ':UU', ':p', ':f', ':x', ':h', ':y', ':::', ':u', ':q', '::', ':q!', ':r', ':A', ':s']¶
search_index_entry = {'aliases': ':> : :j :w :I :wq :DD :fd :uu :dw :dd :S :echo :i := :! :< :fi :UU :p :f :x :h :y ::: :u :q :: :q! :r :A :s', 'category': 'general', 'key': ':editor_command_group', 'tags': '', 'text': '\n Commands for the editor\n '}¶
aliases = ['a', 'abort', 'e', 'quit', 'end', 'n', 'b', 't', 'next', 'q', 'top', 'back']¶
search_index_entry = {'aliases': 'a abort e quit end n b t next q top back', 'category': 'general', 'key': '__noinput_command', 'tags': '', 'text': '\n Manipulate the text paging\n '}¶
|
- + |
|
@@ -11805,6 +11831,8 @@