From ab66bd541af80ac85129213700d07a844afec747 Mon Sep 17 00:00:00 2001 From: Evennia docbuilder action Date: Mon, 31 Oct 2022 19:49:10 +0000 Subject: [PATCH] Updated HTML docs --- docs/0.9.5/.buildinfo | 2 +- docs/0.9.5/Default-Commands.html | 28 +-- docs/0.9.5/_sources/Default-Commands.md.txt | 28 +-- .../api/evennia.commands.default.admin.html | 2 +- .../evennia.commands.default.building.html | 8 +- .../api/evennia.commands.default.comms.html | 6 +- .../api/evennia.commands.default.general.html | 4 +- .../api/evennia.commands.default.system.html | 6 +- .../evennia.commands.default.unloggedin.html | 4 +- docs/0.9.5/api/evennia.contrib.barter.html | 2 +- docs/0.9.5/api/evennia.contrib.dice.html | 2 +- .../api/evennia.contrib.email_login.html | 4 +- ...vennia.contrib.ingame_python.commands.html | 2 +- .../evennia.contrib.turnbattle.tb_basic.html | 2 +- .../evennia.contrib.turnbattle.tb_equip.html | 2 +- .../evennia.contrib.turnbattle.tb_items.html | 2 +- .../evennia.contrib.turnbattle.tb_magic.html | 2 +- .../evennia.contrib.turnbattle.tb_range.html | 2 +- ...b.tutorial_examples.cmdset_red_button.html | 8 +- ...vennia.contrib.tutorial_world.objects.html | 8 +- .../evennia.contrib.tutorial_world.rooms.html | 2 +- docs/0.9.5/api/evennia.utils.eveditor.html | 2 +- docs/0.9.5/api/evennia.utils.evmore.html | 2 +- docs/1.0-dev/.buildinfo | 2 +- docs/1.0-dev/Coding/Changelog.html | 3 + .../_modules/evennia/accounts/accounts.html | 3 + .../_modules/evennia/commands/cmdhandler.html | 4 +- .../evennia/commands/default/account.html | 8 +- .../evennia/commands/default/admin.html | 6 +- .../evennia/commands/default/comms.html | 6 +- .../evennia/commands/default/general.html | 15 +- .../game_systems/crafting/crafting.html | 1 + .../ingame_map_display.html | 63 ++--- .../evennia/contrib/grid/xyzgrid/tests.html | 59 +++-- .../contrib/grid/xyzgrid/xymap_legend.html | 9 +- .../git_integration/git_integration.html | 58 +++-- .../contrib/utils/git_integration/tests.html | 18 +- .../_modules/evennia/objects/objects.html | 15 +- .../evennia/prototypes/prototypes.html | 238 +++++++++++------- .../_modules/evennia/prototypes/spawner.html | 54 ++-- .../_modules/evennia/server/server.html | 55 ++-- .../_modules/evennia/utils/containers.html | 5 +- .../_modules/evennia/utils/funcparser.html | 2 +- .../_modules/evennia/utils/text2html.html | 36 +-- .../utils/verb_conjugation/pronouns.html | 238 +++++------------- .../evennia/utils/verb_conjugation/tests.html | 2 +- docs/1.0-dev/_sources/Coding/Changelog.md.txt | 3 + .../evennia.commands.default.building.html | 8 +- .../api/evennia.commands.default.comms.html | 8 +- .../api/evennia.commands.default.general.html | 12 +- .../api/evennia.commands.default.tests.html | 2 +- .../evennia.commands.default.unloggedin.html | 12 +- ....base_systems.email_login.email_login.html | 12 +- ...b.base_systems.ingame_python.commands.html | 4 +- ...rib.full_systems.evscaperoom.commands.html | 24 +- ...ia.contrib.game_systems.barter.barter.html | 4 +- ...ontrib.game_systems.clothing.clothing.html | 4 +- ...evennia.contrib.rpg.rpsystem.rpsystem.html | 4 +- ...ontrib.tutorials.evadventure.commands.html | 8 +- ...ntrib.tutorials.red_button.red_button.html | 16 +- ...trib.tutorials.tutorial_world.objects.html | 16 +- ...ontrib.tutorials.tutorial_world.rooms.html | 8 +- ...utils.git_integration.git_integration.html | 8 +- docs/1.0-dev/api/evennia.objects.objects.html | 13 +- .../api/evennia.prototypes.prototypes.html | 52 +++- .../api/evennia.prototypes.spawner.html | 7 +- 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/genindex.html | 22 +- docs/1.0-dev/objects.inv | Bin 157191 -> 157242 bytes docs/1.0-dev/searchindex.js | 2 +- 72 files changed, 691 insertions(+), 600 deletions(-) diff --git a/docs/0.9.5/.buildinfo b/docs/0.9.5/.buildinfo index b5078b8b22..3eeabd5a9b 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: cc8a3a14195f3505d7ecb116102b1503 +config: e2cd0407d84ad36a0d8cffa6ba70a1ff tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/0.9.5/Default-Commands.html b/docs/0.9.5/Default-Commands.html index 6407da0355..4e88e8594b 100644 --- a/docs/0.9.5/Default-Commands.html +++ b/docs/0.9.5/Default-Commands.html @@ -55,9 +55,9 @@ with
  • __unloggedin_look_command [look, l] (cmdset: UnloggedinCmdSet, help-category: General)

  • about [version] (cmdset: CharacterCmdSet, help-category: System)

  • -
  • access [groups, hierarchy] (cmdset: CharacterCmdSet, help-category: General)

  • +
  • access [hierarchy, groups] (cmdset: CharacterCmdSet, help-category: General)

  • accounts [account, listaccounts] (cmdset: CharacterCmdSet, help-category: System)

  • -
  • addcom [chanalias, aliaschan] (cmdset: AccountCmdSet, help-category: Comms)

  • +
  • addcom [aliaschan, chanalias] (cmdset: AccountCmdSet, help-category: Comms)

  • alias [setobjalias] (cmdset: CharacterCmdSet, help-category: Building)

  • allcom (cmdset: AccountCmdSet, help-category: Comms)

  • batchcode [batchcodes] (cmdset: CharacterCmdSet, help-category: Building)

  • @@ -67,26 +67,26 @@ with cdesc (cmdset: AccountCmdSet, help-category: Comms)

  • cdestroy (cmdset: AccountCmdSet, help-category: Comms)

  • cemit [cmsg] (cmdset: AccountCmdSet, help-category: Comms)

  • -
  • channels [comlist, channellist, chanlist, clist, all channels] (cmdset: AccountCmdSet, help-category: Comms)

  • +
  • channels [chanlist, all channels, comlist, clist, channellist] (cmdset: AccountCmdSet, help-category: Comms)

  • charcreate (cmdset: AccountCmdSet, help-category: General)

  • chardelete (cmdset: AccountCmdSet, help-category: General)

  • clock (cmdset: AccountCmdSet, help-category: Comms)

  • cmdsets [listcmsets] (cmdset: CharacterCmdSet, help-category: Building)

  • color (cmdset: AccountCmdSet, help-category: General)

  • -
  • connect [conn, con, co] (cmdset: UnloggedinCmdSet, help-category: General)

  • +
  • connect [conn, co, con] (cmdset: UnloggedinCmdSet, help-category: General)

  • copy (cmdset: CharacterCmdSet, help-category: Building)

  • cpattr (cmdset: CharacterCmdSet, help-category: Building)

  • create (cmdset: CharacterCmdSet, help-category: Building)

  • create [cr, cre] (cmdset: UnloggedinCmdSet, help-category: General)

  • cwho (cmdset: AccountCmdSet, help-category: Comms)

  • -
  • delcom [delaliaschan, delchanalias] (cmdset: AccountCmdSet, help-category: Comms)

  • +
  • delcom [delchanalias, delaliaschan] (cmdset: AccountCmdSet, help-category: Comms)

  • desc [describe] (cmdset: CharacterCmdSet, help-category: Building)

  • -
  • destroy [delete, del] (cmdset: CharacterCmdSet, help-category: Building)

  • +
  • destroy [del, delete] (cmdset: CharacterCmdSet, help-category: Building)

  • dig (cmdset: CharacterCmdSet, help-category: Building)

  • drop (cmdset: CharacterCmdSet, help-category: General)

  • encoding [encode] (cmdset: UnloggedinCmdSet, help-category: General)

  • -
  • examine [ex, exam] (cmdset: AccountCmdSet, help-category: Building)

  • -
  • find [search, locate] (cmdset: CharacterCmdSet, help-category: Building)

  • +
  • examine [exam, ex] (cmdset: AccountCmdSet, help-category: Building)

  • +
  • find [locate, search] (cmdset: CharacterCmdSet, help-category: Building)

  • get [grab] (cmdset: CharacterCmdSet, help-category: General)

  • give (cmdset: CharacterCmdSet, help-category: General)

  • grapevine2chan (cmdset: AccountCmdSet, help-category: Comms)

  • @@ -105,25 +105,25 @@ with mvattr (cmdset: CharacterCmdSet, help-category: Building)

  • name [rename] (cmdset: CharacterCmdSet, help-category: Building)

  • nick [nicks, nickname] (cmdset: AccountCmdSet, help-category: General)

  • -
  • objects [stats, listobjs, listobjects, db] (cmdset: CharacterCmdSet, help-category: System)

  • +
  • objects [listobjects, listobjs, db, stats] (cmdset: CharacterCmdSet, help-category: System)

  • ooc [unpuppet] (cmdset: AccountCmdSet, help-category: General)

  • open (cmdset: CharacterCmdSet, help-category: Building)

  • option [options] (cmdset: AccountCmdSet, help-category: General)

  • page [tell] (cmdset: AccountCmdSet, help-category: Comms)

  • password (cmdset: AccountCmdSet, help-category: General)

  • -
  • pose [:, emote] (cmdset: CharacterCmdSet, help-category: General)

  • +
  • pose [emote, :] (cmdset: CharacterCmdSet, help-category: General)

  • py [!] (cmdset: AccountCmdSet, help-category: System)

  • quell [unquell] (cmdset: AccountCmdSet, help-category: General)

  • quit (cmdset: AccountCmdSet, help-category: General)

  • -
  • quit [qu, q] (cmdset: UnloggedinCmdSet, help-category: General)

  • +
  • quit [q, qu] (cmdset: UnloggedinCmdSet, help-category: General)

  • reload [restart] (cmdset: AccountCmdSet, help-category: System)

  • reset [reboot] (cmdset: AccountCmdSet, help-category: System)

  • rss2chan (cmdset: AccountCmdSet, help-category: Comms)

  • say [’, “] (cmdset: CharacterCmdSet, help-category: General)

  • screenreader (cmdset: UnloggedinCmdSet, help-category: General)

  • script [addscript] (cmdset: CharacterCmdSet, help-category: Building)

  • -
  • scripts [listscripts, globalscript] (cmdset: CharacterCmdSet, help-category: System)

  • -
  • server [serverprocess, serverload] (cmdset: CharacterCmdSet, help-category: System)

  • +
  • scripts [globalscript, listscripts] (cmdset: CharacterCmdSet, help-category: System)

  • +
  • server [serverload, serverprocess] (cmdset: CharacterCmdSet, help-category: System)

  • service [services] (cmdset: CharacterCmdSet, help-category: System)

  • sessions (cmdset: SessionCmdSet, help-category: General)

  • set (cmdset: CharacterCmdSet, help-category: Building)

  • @@ -138,7 +138,7 @@ with tickers (cmdset: CharacterCmdSet, help-category: System)

  • time [uptime] (cmdset: CharacterCmdSet, help-category: System)

  • tunnel [tun] (cmdset: CharacterCmdSet, help-category: Building)

  • -
  • typeclass [update, swap, parent, type] (cmdset: CharacterCmdSet, help-category: Building)

  • +
  • typeclass [type, swap, parent, update] (cmdset: CharacterCmdSet, help-category: Building)

  • unlink (cmdset: CharacterCmdSet, help-category: Building)

  • whisper (cmdset: CharacterCmdSet, help-category: General)

  • who [doing] (cmdset: AccountCmdSet, help-category: General)

  • diff --git a/docs/0.9.5/_sources/Default-Commands.md.txt b/docs/0.9.5/_sources/Default-Commands.md.txt index c54c66e6cb..35cc9e387b 100644 --- a/docs/0.9.5/_sources/Default-Commands.md.txt +++ b/docs/0.9.5/_sources/Default-Commands.md.txt @@ -16,9 +16,9 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**__unloggedin_look_command** [look, l]](evennia.commands.default.unloggedin.CmdUnconnectedLook) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**about** [version]](evennia.commands.default.system.CmdAbout) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) -- [**access** [groups, hierarchy]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**access** [hierarchy, groups]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**accounts** [account, listaccounts]](evennia.commands.default.system.CmdAccounts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) -- [**addcom** [chanalias, aliaschan]](evennia.commands.default.comms.CmdAddCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) +- [**addcom** [aliaschan, chanalias]](evennia.commands.default.comms.CmdAddCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**alias** [setobjalias]](evennia.commands.default.building.CmdSetObjAlias) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**allcom**](evennia.commands.default.comms.CmdAllCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**batchcode** [batchcodes]](evennia.commands.default.batchprocess.CmdBatchCode) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) @@ -28,26 +28,26 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**cdesc**](evennia.commands.default.comms.CmdCdesc) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**cdestroy**](evennia.commands.default.comms.CmdCdestroy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**cemit** [cmsg]](evennia.commands.default.comms.CmdCemit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) -- [**channels** [comlist, channellist, chanlist, clist, all channels]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) +- [**channels** [chanlist, all channels, comlist, clist, channellist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**charcreate**](evennia.commands.default.account.CmdCharCreate) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**chardelete**](evennia.commands.default.account.CmdCharDelete) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**clock**](evennia.commands.default.comms.CmdClock) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**cmdsets** [listcmsets]](evennia.commands.default.building.CmdListCmdSets) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**color**](evennia.commands.default.account.CmdColorTest) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**connect** [conn, con, co]](evennia.commands.default.unloggedin.CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) +- [**connect** [conn, co, con]](evennia.commands.default.unloggedin.CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**copy**](evennia.commands.default.building.CmdCopy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**cpattr**](evennia.commands.default.building.CmdCpAttr) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**create**](evennia.commands.default.building.CmdCreate) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**create** [cr, cre]](evennia.commands.default.unloggedin.CmdUnconnectedCreate) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**cwho**](evennia.commands.default.comms.CmdCWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) -- [**delcom** [delaliaschan, delchanalias]](evennia.commands.default.comms.CmdDelCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) +- [**delcom** [delchanalias, delaliaschan]](evennia.commands.default.comms.CmdDelCom) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**desc** [describe]](evennia.commands.default.building.CmdDesc) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**destroy** [delete, del]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**destroy** [del, delete]](evennia.commands.default.building.CmdDestroy) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**dig**](evennia.commands.default.building.CmdDig) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**drop**](evennia.commands.default.general.CmdDrop) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**encoding** [encode]](evennia.commands.default.unloggedin.CmdUnconnectedEncoding) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) -- [**examine** [ex, exam]](evennia.commands.default.building.CmdExamine) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Building_) -- [**find** [search, locate]](evennia.commands.default.building.CmdFind) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**examine** [exam, ex]](evennia.commands.default.building.CmdExamine) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Building_) +- [**find** [locate, search]](evennia.commands.default.building.CmdFind) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**get** [grab]](evennia.commands.default.general.CmdGet) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**give**](evennia.commands.default.general.CmdGive) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**grapevine2chan**](evennia.commands.default.comms.CmdGrapevine2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) @@ -66,25 +66,25 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**mvattr**](evennia.commands.default.building.CmdMvAttr) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**name** [rename]](evennia.commands.default.building.CmdName) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**nick** [nicks, nickname]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**objects** [stats, listobjs, listobjects, db]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**objects** [listobjects, listobjs, db, stats]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**ooc** [unpuppet]](evennia.commands.default.account.CmdOOC) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**open**](evennia.commands.default.building.CmdOpen) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**option** [options]](evennia.commands.default.account.CmdOption) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**page** [tell]](evennia.commands.default.comms.CmdPage) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**password**](evennia.commands.default.account.CmdPassword) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**pose** [:, emote]](evennia.commands.default.general.CmdPose) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**pose** [emote, :]](evennia.commands.default.general.CmdPose) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**py** [!]](evennia.commands.default.system.CmdPy) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_) - [**quell** [unquell]](evennia.commands.default.account.CmdQuell) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**quit**](evennia.commands.default.account.CmdQuit) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**quit** [qu, q]](evennia.commands.default.unloggedin.CmdUnconnectedQuit) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) +- [**quit** [q, qu]](evennia.commands.default.unloggedin.CmdUnconnectedQuit) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**reload** [restart]](evennia.commands.default.system.CmdReload) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_) - [**reset** [reboot]](evennia.commands.default.system.CmdReset) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _System_) - [**rss2chan**](evennia.commands.default.comms.CmdRSS2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**say** [', "]](evennia.commands.default.general.CmdSay) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**screenreader**](evennia.commands.default.unloggedin.CmdUnconnectedScreenreader) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) - [**script** [addscript]](evennia.commands.default.building.CmdScript) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**scripts** [listscripts, globalscript]](evennia.commands.default.system.CmdScripts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) -- [**server** [serverprocess, serverload]](evennia.commands.default.system.CmdServerLoad) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**scripts** [globalscript, listscripts]](evennia.commands.default.system.CmdScripts) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**server** [serverload, serverprocess]](evennia.commands.default.system.CmdServerLoad) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**service** [services]](evennia.commands.default.system.CmdService) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**sessions**](evennia.commands.default.account.CmdSessions) (cmdset: [SessionCmdSet](evennia.commands.default.cmdset_session.SessionCmdSet), help-category: _General_) - [**set**](evennia.commands.default.building.CmdSetAttribute) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) @@ -99,7 +99,7 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**tickers**](evennia.commands.default.system.CmdTickers) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**time** [uptime]](evennia.commands.default.system.CmdTime) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**tunnel** [tun]](evennia.commands.default.building.CmdTunnel) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**typeclass** [update, swap, parent, type]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**typeclass** [type, swap, parent, update]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**unlink**](evennia.commands.default.building.CmdUnLink) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**whisper**](evennia.commands.default.general.CmdWhisper) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**who** [doing]](evennia.commands.default.account.CmdWho) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) 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 1fdb15eef8..fc745748e6 100644 --- a/docs/0.9.5/api/evennia.commands.default.admin.html +++ b/docs/0.9.5/api/evennia.commands.default.admin.html @@ -241,7 +241,7 @@ to accounts respectively.

    -aliases = ['pemit', 'remit']
    +aliases = ['remit', 'pemit']
    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 457775bc01..5ccdd44a0b 100644 --- a/docs/0.9.5/api/evennia.commands.default.building.html +++ b/docs/0.9.5/api/evennia.commands.default.building.html @@ -496,7 +496,7 @@ You can specify the /force switch to bypass this confirmation.

    -aliases = ['delete', 'del']
    +aliases = ['del', 'delete']
    @@ -1186,7 +1186,7 @@ server settings.

    -aliases = ['update', 'swap', 'parent', 'type']
    +aliases = ['type', 'swap', 'parent', 'update']
    @@ -1355,7 +1355,7 @@ If object is not specified, the current location is examined.

    -aliases = ['ex', 'exam']
    +aliases = ['exam', 'ex']
    @@ -1481,7 +1481,7 @@ one is given.

    -aliases = ['search', 'locate']
    +aliases = ['locate', 'search']
    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 6174edc48a..b60ea046cc 100644 --- a/docs/0.9.5/api/evennia.commands.default.comms.html +++ b/docs/0.9.5/api/evennia.commands.default.comms.html @@ -66,7 +66,7 @@ aliases to an already joined channel.

    -aliases = ['chanalias', 'aliaschan']
    +aliases = ['aliaschan', 'chanalias']
    @@ -118,7 +118,7 @@ for that channel.

    -aliases = ['delaliaschan', 'delchanalias']
    +aliases = ['delchanalias', 'delaliaschan']
    @@ -221,7 +221,7 @@ Use addcom/delcom to join and leave channels

    -aliases = ['comlist', 'channellist', 'chanlist', 'clist', 'all channels']
    +aliases = ['chanlist', 'all channels', 'comlist', 'clist', 'channellist']
    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 554adbb356..6e57fe233a 100644 --- a/docs/0.9.5/api/evennia.commands.default.general.html +++ b/docs/0.9.5/api/evennia.commands.default.general.html @@ -593,7 +593,7 @@ automatically begin with your name.

    -aliases = [':', 'emote']
    +aliases = ['emote', ':']
    @@ -647,7 +647,7 @@ which permission groups you are a member of.

    -aliases = ['groups', 'hierarchy']
    +aliases = ['hierarchy', 'groups']
    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 71c47dd2d7..401af5dafb 100644 --- a/docs/0.9.5/api/evennia.commands.default.system.html +++ b/docs/0.9.5/api/evennia.commands.default.system.html @@ -296,7 +296,7 @@ required since whole classes of scripts often have the same name.

    -aliases = ['listscripts', 'globalscript']
    +aliases = ['globalscript', 'listscripts']
    @@ -351,7 +351,7 @@ given, <nr> defaults to 10.

    -aliases = ['stats', 'listobjs', 'listobjects', 'db']
    +aliases = ['listobjects', 'listobjs', 'db', 'stats']
    @@ -558,7 +558,7 @@ the released memory will instead be re-used by the program.

    -aliases = ['serverprocess', 'serverload']
    +aliases = ['serverload', 'serverprocess']
    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 fbba4e2ebd..713f6068c2 100644 --- a/docs/0.9.5/api/evennia.commands.default.unloggedin.html +++ b/docs/0.9.5/api/evennia.commands.default.unloggedin.html @@ -61,7 +61,7 @@ connect “account name” “pass word”

    -aliases = ['conn', 'con', 'co']
    +aliases = ['conn', 'co', 'con']
    @@ -165,7 +165,7 @@ version is a bit more complicated.

    -aliases = ['qu', 'q']
    +aliases = ['q', 'qu']
    diff --git a/docs/0.9.5/api/evennia.contrib.barter.html b/docs/0.9.5/api/evennia.contrib.barter.html index c0def718e9..aaa45d309f 100644 --- a/docs/0.9.5/api/evennia.contrib.barter.html +++ b/docs/0.9.5/api/evennia.contrib.barter.html @@ -653,7 +653,7 @@ try to influence the other part in the deal.

    -aliases = ['deal', 'offers']
    +aliases = ['offers', 'deal']
    diff --git a/docs/0.9.5/api/evennia.contrib.dice.html b/docs/0.9.5/api/evennia.contrib.dice.html index 6dc941e2e3..31f97ae1cb 100644 --- a/docs/0.9.5/api/evennia.contrib.dice.html +++ b/docs/0.9.5/api/evennia.contrib.dice.html @@ -151,7 +151,7 @@ everyone but the person rolling.

    -aliases = ['@dice', 'roll']
    +aliases = ['roll', '@dice']
    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 2f46099bcd..478a9ea1ca 100644 --- a/docs/0.9.5/api/evennia.contrib.email_login.html +++ b/docs/0.9.5/api/evennia.contrib.email_login.html @@ -76,7 +76,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.

    -aliases = ['conn', 'con', 'co']
    +aliases = ['conn', 'co', 'con']
    @@ -173,7 +173,7 @@ version is a bit more complicated.

    -aliases = ['qu', 'q']
    +aliases = ['q', 'qu']
    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 0af38e6f08..b88bdbfca9 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 @@ -54,7 +54,7 @@
    -aliases = ['@callback', '@callbacks', '@calls']
    +aliases = ['@calls', '@callbacks', '@callback']
    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 c337ec3963..4383f10009 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 @@ -562,7 +562,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    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 76ba8cab38..a9e6929a11 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 @@ -679,7 +679,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    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 5a993996d6..c58f087ca3 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 @@ -713,7 +713,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    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 9d00e31190..45e59490ce 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 @@ -585,7 +585,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    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 bbd3dfc46f..91da9c133f 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 @@ -997,7 +997,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    diff --git a/docs/0.9.5/api/evennia.contrib.tutorial_examples.cmdset_red_button.html b/docs/0.9.5/api/evennia.contrib.tutorial_examples.cmdset_red_button.html index 8d69b1117f..4d54fc7abe 100644 --- a/docs/0.9.5/api/evennia.contrib.tutorial_examples.cmdset_red_button.html +++ b/docs/0.9.5/api/evennia.contrib.tutorial_examples.cmdset_red_button.html @@ -107,7 +107,7 @@ push the lid of the button away.

    -aliases = ['press', 'push', 'press button']
    +aliases = ['press button', 'press', 'push']
    @@ -155,7 +155,7 @@ lid-state respectively.

    -aliases = ['smash', 'smash lid', 'break lid']
    +aliases = ['break lid', 'smash', 'smash lid']
    @@ -198,7 +198,7 @@ of causing the lamp to break.

    -aliases = ['open', 'open button']
    +aliases = ['open button', 'open']
    @@ -284,7 +284,7 @@ of causing the lamp to break.

    -aliases = ['examine', 'get', 'l', 'feel', 'listen', 'ex']
    +aliases = ['ex', 'feel', 'get', 'listen', 'l', 'examine']
    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 47bbe7134c..796e638903 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 @@ -353,7 +353,7 @@ of the object. We overload it with our own version.

    -aliases = ['burn', 'light']
    +aliases = ['light', 'burn']
    @@ -479,7 +479,7 @@ shift green root up/down

    -aliases = ['pull', 'push', 'move', 'shiftroot']
    +aliases = ['pull', 'shiftroot', 'push', 'move']
    @@ -527,7 +527,7 @@ yellow/green - horizontal roots

    -aliases = ['button', 'press button', 'push button']
    +aliases = ['press button', 'button', 'push button']
    @@ -692,7 +692,7 @@ parry - forgoes your attack but will make you harder to hit on next

    -aliases = ['slash', 'hit', 'fight', 'kill', 'parry', 'pierce', 'bash', 'thrust', 'chop', 'stab', 'defend']
    +aliases = ['pierce', 'stab', 'slash', 'chop', 'thrust', 'bash', 'hit', 'defend', 'parry', 'kill', 'fight']
    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 1d4f123286..da058a3535 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 @@ -822,7 +822,7 @@ to find something.

    -aliases = ['l', 'feel', 'fiddle', 'feel around', 'search']
    +aliases = ['feel around', 'feel', 'fiddle', 'search', 'l']
    diff --git a/docs/0.9.5/api/evennia.utils.eveditor.html b/docs/0.9.5/api/evennia.utils.eveditor.html index dd21636e02..69a21ceec0 100644 --- a/docs/0.9.5/api/evennia.utils.eveditor.html +++ b/docs/0.9.5/api/evennia.utils.eveditor.html @@ -267,7 +267,7 @@ indentation.

    -aliases = [':i', ':!', ':<', ':S', ':x', ':fd', ':echo', ':uu', ':dw', ':', ':UU', ':=', ':s', ':h', ':::', ':q', ':y', ':p', ':>', ':w', ':q!', ':fi', ':dd', ':u', ':r', ':A', ':f', ':I', ':j', '::', ':wq', ':DD']
    +aliases = [':i', ':w', ':j', ':f', ':q', ':wq', ':UU', ':h', ':I', ':uu', ':fi', ':q!', ':dw', ':!', ':DD', ':echo', ':>', ':A', ':p', ':<', ':S', '::', ':s', ':dd', ':', ':fd', ':y', ':x', ':::', ':r', ':u', ':=']
    diff --git a/docs/0.9.5/api/evennia.utils.evmore.html b/docs/0.9.5/api/evennia.utils.evmore.html index 14ab75dbf4..18f88693de 100644 --- a/docs/0.9.5/api/evennia.utils.evmore.html +++ b/docs/0.9.5/api/evennia.utils.evmore.html @@ -77,7 +77,7 @@ the caller.msg() construct every time the page is updated.

    -aliases = ['q', 'end', 'n', 'next', 'top', 'back', 'e', 't', 'abort', 'quit', 'b', 'a']
    +aliases = ['a', 'n', 'next', 'abort', 'back', 't', 'end', 'b', 'e', 'quit', 'q', 'top']
    diff --git a/docs/1.0-dev/.buildinfo b/docs/1.0-dev/.buildinfo index 776b2ef375..a2da33d10c 100644 --- a/docs/1.0-dev/.buildinfo +++ b/docs/1.0-dev/.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: 8f5eba52f979a28837f3cf22af96ebb0 +config: b1b4f181a18f30a93bb6b823b0d8facc tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/1.0-dev/Coding/Changelog.html b/docs/1.0-dev/Coding/Changelog.html index c4ef986e1c..4ef19229ac 100644 --- a/docs/1.0-dev/Coding/Changelog.html +++ b/docs/1.0-dev/Coding/Changelog.html @@ -368,6 +368,9 @@ can run at the same time. Used to limit multi-playing.

    powerful searches passed into the regular search functions.

  • spawner.spawn and linked methods now has a kwarg protfunc_raise_errors (default True) to disable strict errors on malformed/not-found protfuncs

  • +
  • Improve search performance when having many DB-based prototypes via caching.

  • +
  • Remove the return_parents kwarg of evennia.prototypes.spawner.spawn since it +was inefficient and unused.

  • diff --git a/docs/1.0-dev/_modules/evennia/accounts/accounts.html b/docs/1.0-dev/_modules/evennia/accounts/accounts.html index de7e9d95ec..b6d2f7366f 100644 --- a/docs/1.0-dev/_modules/evennia/accounts/accounts.html +++ b/docs/1.0-dev/_modules/evennia/accounts/accounts.html @@ -440,6 +440,8 @@ # do the puppeting obj.at_pre_puppet(self, session=session) + # used to track in case of crash so we can clean up later + obj.tags.add("puppeted", category="account") # do the connection obj.sessions.add(session) @@ -474,6 +476,7 @@ if not obj.sessions.count(): del obj.account obj.at_post_unpuppet(self, session=session) + obj.tags.remove("puppeted", category="account") SIGNAL_OBJECT_POST_UNPUPPET.send(sender=obj, session=session, account=self) # Just to be sure we're always clear. session.puppet = None diff --git a/docs/1.0-dev/_modules/evennia/commands/cmdhandler.html b/docs/1.0-dev/_modules/evennia/commands/cmdhandler.html index 9c78ae7a99..6b3aadd148 100644 --- a/docs/1.0-dev/_modules/evennia/commands/cmdhandler.html +++ b/docs/1.0-dev/_modules/evennia/commands/cmdhandler.html @@ -824,7 +824,9 @@ ) if suggestions: sysarg += _(" Maybe you meant {command}?").format( - command=utils.list_to_string(suggestions, endsep=_("or"), addquote=True) + command=utils.list_to_string( + suggestions, endsep=_("or"), addquote=True + ) ) else: sysarg += _(' Type "help" for help.') diff --git a/docs/1.0-dev/_modules/evennia/commands/default/account.html b/docs/1.0-dev/_modules/evennia/commands/default/account.html index 030e6be905..ea21ec868e 100644 --- a/docs/1.0-dev/_modules/evennia/commands/default/account.html +++ b/docs/1.0-dev/_modules/evennia/commands/default/account.html @@ -744,7 +744,9 @@ self.msg(f"Option |w{new_name}|n was kept as '|w{old_val}|n'.") else: flags[new_name] = new_val - self.msg(f"Option |w{new_name}|n was changed from '|w{old_val}|n' to '|w{new_val}|n'.") + self.msg( + f"Option |w{new_name}|n was changed from '|w{old_val}|n' to '|w{new_val}|n'." + ) return {new_name: new_val} except Exception as err: self.msg(f"|rCould not set option |w{new_name}|r:|n {err}") @@ -835,7 +837,9 @@ account.set_password(newpass) account.save() self.msg("Password changed.") - logger.log_sec(f"Password Changed: {account} (Caller: {account}, IP: {self.session.address}).") + logger.log_sec( + f"Password Changed: {account} (Caller: {account}, IP: {self.session.address})." + )
    [docs]class CmdQuit(COMMAND_DEFAULT_CLASS): diff --git a/docs/1.0-dev/_modules/evennia/commands/default/admin.html b/docs/1.0-dev/_modules/evennia/commands/default/admin.html index de572466d4..532c025eb6 100644 --- a/docs/1.0-dev/_modules/evennia/commands/default/admin.html +++ b/docs/1.0-dev/_modules/evennia/commands/default/admin.html @@ -556,7 +556,7 @@ # we supplied an argument on the form obj = perm locktype = "edit" if accountmode else "control" if not obj.access(caller, locktype): - accountstr = 'account' if accountmode else 'object' + accountstr = "account" if accountmode else "object" caller.msg(f"You are not allowed to edit this {accountstr}'s permissions.") return @@ -597,9 +597,7 @@ return if perm in permissions: - caller_result.append( - f"\nPermission '{perm}' is already defined on {obj.name}." - ) + caller_result.append(f"\nPermission '{perm}' is already defined on {obj.name}.") else: obj.permissions.add(perm) plystring = "the Account" if accountmode else "the Object/Character" diff --git a/docs/1.0-dev/_modules/evennia/commands/default/comms.html b/docs/1.0-dev/_modules/evennia/commands/default/comms.html index b4f6ed7c6c..70ebb46c71 100644 --- a/docs/1.0-dev/_modules/evennia/commands/default/comms.html +++ b/docs/1.0-dev/_modules/evennia/commands/default/comms.html @@ -1468,7 +1468,7 @@ header = f"|wAccount|n |c{caller.key}|n |wpages:|n" if message.startswith(":"): - message = f"{caller.key} {message.strip(':').strip()}" + message = f"{caller.key} {message.strip(':').strip()}" # create the persistent message object create.create_message(caller, message, receivers=targets) @@ -1641,7 +1641,7 @@ return if "disconnect" in self.switches or "remove" in self.switches or "delete" in self.switches: - botname = f"ircbot-{self.lhs}" + botname = f"ircbot-{self.lhs}" matches = AccountDB.objects.filter(db_is_bot=True, username=botname) dbref = utils.dbref(self.lhs) if not matches and dbref: @@ -1946,7 +1946,7 @@ return if "disconnect" in self.switches or "remove" in self.switches or "delete" in self.switches: - botname = f"grapevinebot-{self.lhs}" + botname = f"grapevinebot-{self.lhs}" matches = AccountDB.objects.filter(db_is_bot=True, db_key=botname) if not matches: diff --git a/docs/1.0-dev/_modules/evennia/commands/default/general.html b/docs/1.0-dev/_modules/evennia/commands/default/general.html index b10f99d866..66048c0696 100644 --- a/docs/1.0-dev/_modules/evennia/commands/default/general.html +++ b/docs/1.0-dev/_modules/evennia/commands/default/general.html @@ -297,7 +297,8 @@ _, _, old_nickstring, old_replstring = oldnick.value caller.nicks.remove(old_nickstring, category=nicktype) caller.msg( - f"{nicktypestr} removed: '|w{old_nickstring}|n' -> |w{old_replstring}|n.") + f"{nicktypestr} removed: '|w{old_nickstring}|n' -> |w{old_replstring}|n." + ) else: caller.msg("No matching nicks to remove.") return @@ -318,9 +319,7 @@ for nick in nicks: _, _, nick, repl = nick.value if nick.startswith(self.lhs): - strings.append( - f"{nicktype.capitalize()}-nick: '{nick}' -> '{repl}'" - ) + strings.append(f"{nicktype.capitalize()}-nick: '{nick}' -> '{repl}'") if strings: caller.msg("\n".join(strings)) else: @@ -341,9 +340,7 @@ for nick in nicks: _, _, nick, repl = nick.value if nick.startswith(self.lhs): - strings.append( - f"{nicktype.capitalize()}-nick: '{nick}' -> '{repl}'" - ) + strings.append(f"{nicktype.capitalize()}-nick: '{nick}' -> '{repl}'") if strings: caller.msg("\n".join(strings)) else: @@ -364,9 +361,7 @@ for nick in nicks: _, _, nick, repl = nick.value if nick.startswith(self.lhs): - strings.append( - f"{nicktype.capitalize()}-nick: '{nick}' -> '{repl}'" - ) + strings.append(f"{nicktype.capitalize()}-nick: '{nick}' -> '{repl}'") if strings: caller.msg("\n".join(strings)) else: diff --git a/docs/1.0-dev/_modules/evennia/contrib/game_systems/crafting/crafting.html b/docs/1.0-dev/_modules/evennia/contrib/game_systems/crafting/crafting.html index 6a55cee8e3..535f3bc35d 100644 --- a/docs/1.0-dev/_modules/evennia/contrib/game_systems/crafting/crafting.html +++ b/docs/1.0-dev/_modules/evennia/contrib/game_systems/crafting/crafting.html @@ -419,6 +419,7 @@
    [docs]class NonExistentRecipe(CraftingRecipeBase): """A recipe that does not exist and never produces anything.""" + allow_craft = True allow_reuse = True diff --git a/docs/1.0-dev/_modules/evennia/contrib/grid/ingame_map_display/ingame_map_display.html b/docs/1.0-dev/_modules/evennia/contrib/grid/ingame_map_display/ingame_map_display.html index 1b2ce62490..dfb1ea18bb 100644 --- a/docs/1.0-dev/_modules/evennia/contrib/grid/ingame_map_display/ingame_map_display.html +++ b/docs/1.0-dev/_modules/evennia/contrib/grid/ingame_map_display/ingame_map_display.html @@ -137,21 +137,21 @@ from evennia import CmdSet from evennia.commands.default.muxcommand import MuxCommand -_BASIC_MAP_SIZE = settings.BASIC_MAP_SIZE if hasattr(settings, 'BASIC_MAP_SIZE') else 2 -_MAX_MAP_SIZE = settings.BASIC_MAP_SIZE if hasattr(settings, 'MAX_MAP_SIZE') else 10 +_BASIC_MAP_SIZE = settings.BASIC_MAP_SIZE if hasattr(settings, "BASIC_MAP_SIZE") else 2 +_MAX_MAP_SIZE = settings.BASIC_MAP_SIZE if hasattr(settings, "MAX_MAP_SIZE") else 10 # _COMPASS_DIRECTIONS specifies which way to move the pointer on the x/y axes and what characters to use to depict the exits on the map. _COMPASS_DIRECTIONS = { - 'north': (0, -3, ' | '), - 'south': (0, 3, ' | '), - 'east': (3, 0, '-'), - 'west': (-3, 0, '-'), - 'northeast': (3, -3, '/'), - 'northwest': (-3, -3, '\\'), - 'southeast': (3, 3, '\\'), - 'southwest': (-3, 3, '/'), - 'up': (0, 0, '^'), - 'down': (0, 0, 'v') + "north": (0, -3, " | "), + "south": (0, 3, " | "), + "east": (3, 0, "-"), + "west": (-3, 0, "-"), + "northeast": (3, -3, "/"), + "northwest": (-3, -3, "\\"), + "southeast": (3, 3, "\\"), + "southwest": (-3, 3, "/"), + "up": (0, 0, "^"), + "down": (0, 0, "v"), } @@ -167,7 +167,7 @@ """ self.start_time = time.time() self.caller = caller - self.max_width = int(size * 2 + 1) * 5 # This must be an odd number + self.max_width = int(size * 2 + 1) * 5 # This must be an odd number self.max_length = int(size * 2 + 1) * 3 # This must be an odd number self.has_mapped = {} self.curX = None @@ -185,8 +185,8 @@ board = [] for row in range(self.max_length): board.append([]) - for column in range(int(self.max_width/5)): - board[row].extend([' ', ' ', ' ']) + for column in range(int(self.max_width / 5)): + board[row].extend([" ", " ", " "]) return board
    [docs] def exit_name_as_ordinal(self, ex): @@ -200,11 +200,13 @@ """ exit_name = ex.name if exit_name not in _COMPASS_DIRECTIONS: - compass_aliases = [direction in ex.aliases.all() for direction in _COMPASS_DIRECTIONS.keys()] + compass_aliases = [ + direction in ex.aliases.all() for direction in _COMPASS_DIRECTIONS.keys() + ] if compass_aliases[0]: exit_name = compass_aliases[0] if exit_name not in _COMPASS_DIRECTIONS: - return '' + return "" return exit_name
    [docs] def update_pos(self, room, exit_name): @@ -255,7 +257,7 @@ # Additionally, if the name of the exit is not ordinal but an alias of it is, use that. for ex in [x for x in room.exits if x.access(self.caller, "traverse")]: ex_name = self.exit_name_as_ordinal(ex) - if not ex_name or ex_name in ['up', 'down']: + if not ex_name or ex_name in ["up", "down"]: continue if self.has_drawn(ex.destination): continue @@ -277,20 +279,20 @@ continue ex_character = _COMPASS_DIRECTIONS[ex_name][2] - delta_x = int(_COMPASS_DIRECTIONS[ex_name][1]/3) - delta_y = int(_COMPASS_DIRECTIONS[ex_name][0]/3) + delta_x = int(_COMPASS_DIRECTIONS[ex_name][1] / 3) + delta_y = int(_COMPASS_DIRECTIONS[ex_name][0] / 3) # Make modifications if the exit has BOTH up and down exits - if ex_name == 'up': - if 'v' in self.grid[x][y]: - self.render_room(room, x, y, p1='^', p2='v') + if ex_name == "up": + if "v" in self.grid[x][y]: + self.render_room(room, x, y, p1="^", p2="v") else: - self.render_room(room, x, y, here='^') - elif ex_name == 'down': - if '^' in self.grid[x][y]: - self.render_room(room, x, y, p1='^', p2='v') + self.render_room(room, x, y, here="^") + elif ex_name == "down": + if "^" in self.grid[x][y]: + self.render_room(room, x, y, p1="^", p2="v") else: - self.render_room(room, x, y, here='v') + self.render_room(room, x, y, here="v") else: self.grid[x + delta_x][y + delta_y] = ex_character
    @@ -310,7 +312,7 @@ self.has_mapped[room] = [self.curX, self.curY] self.render_room(room, self.curX, self.curY)
    -
    [docs] def render_room(self, room, x, y, p1='[', p2=']', here=None): +
    [docs] def render_room(self, room, x, y, p1="[", p2="]", here=None): """ Draw a given room with ascii characters @@ -329,7 +331,7 @@ you[0] = f"{p1}|n" you[1] = f"{here if here else you[1]}" if room == self.caller.location: - you[1] = '|[x|co|n' # Highlight the location you are currently in + you[1] = "|[x|co|n" # Highlight the location you are currently in you[2] = f"{p2}|n" self.grid[x][y] = "".join(you)
    @@ -376,6 +378,7 @@ Usage: map (optional size) """ + key = "map"
    [docs] def func(self): diff --git a/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/tests.html b/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/tests.html index ee377b1a9f..cd4bc51a4c 100644 --- a/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/tests.html +++ b/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/tests.html @@ -1497,16 +1497,19 @@ mock_room_callbacks = mock.MagicMock() mock_exit_callbacks = mock.MagicMock() +
    [docs]class TestXyzRoom(xyzroom.XYZRoom): -
    [docs] def at_object_creation(self): - mock_room_callbacks.at_object_creation()
    +
    [docs] def at_object_creation(self): + mock_room_callbacks.at_object_creation()
    +
    [docs]class TestXyzExit(xyzroom.XYZExit): -
    [docs] def at_object_creation(self): - mock_exit_callbacks.at_object_creation()
    +
    [docs] def at_object_creation(self): + mock_exit_callbacks.at_object_creation()
    + MAP_DATA = { - "map": """ + "map": """ + 0 1 @@ -1515,35 +1518,37 @@ + 0 1 """, - "zcoord": "map1", - "prototypes": { - ("*", "*"): { - "key": "room", - "desc": "A room.", - "prototype_parent": "xyz_room", - }, - ("*", "*", "*"): { - "desc": "A passage.", - "prototype_parent": "xyz_exit", - } - }, - "options": { - "map_visual_range": 1, - "map_mode": "scan", - } + "zcoord": "map1", + "prototypes": { + ("*", "*"): { + "key": "room", + "desc": "A room.", + "prototype_parent": "xyz_room", + }, + ("*", "*", "*"): { + "desc": "A passage.", + "prototype_parent": "xyz_exit", + }, + }, + "options": { + "map_visual_range": 1, + "map_mode": "scan", + }, } +
    [docs]class TestCallbacks(BaseEvenniaTest):
    [docs] def setUp(self): super().setUp() mock_room_callbacks.reset_mock() mock_exit_callbacks.reset_mock()
    - +
    [docs] def setup_grid(self, map_data): self.grid, err = xyzgrid.XYZGrid.create("testgrid") def _log(msg): - print(msg) + print(msg) + self.grid.log = _log self.map_data = map_data @@ -1565,8 +1570,12 @@ self.grid.spawn() # Two rooms and 2 exits, Each one should have gotten one `at_object_creation` callback. - self.assertEqual(mock_room_callbacks.at_object_creation.mock_calls, [mock.call(), mock.call()]) - self.assertEqual(mock_exit_callbacks.at_object_creation.mock_calls, [mock.call(), mock.call()])
    + self.assertEqual( + mock_room_callbacks.at_object_creation.mock_calls, [mock.call(), mock.call()] + ) + self.assertEqual( + mock_exit_callbacks.at_object_creation.mock_calls, [mock.call(), mock.call()] + ) diff --git a/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/xymap_legend.html b/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/xymap_legend.html index 12dfd28e30..02507c5f88 100644 --- a/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/xymap_legend.html +++ b/docs/1.0-dev/_modules/evennia/contrib/grid/xyzgrid/xymap_legend.html @@ -397,7 +397,9 @@ # with proper coordinates etc typeclass = self.prototype.get("typeclass") if typeclass is None: - raise MapError(f"The prototype {self.prototype} for this node has no 'typeclass' key.", self) + raise MapError( + f"The prototype {self.prototype} for this node has no 'typeclass' key.", self + ) self.log(f" spawning room at xyz={xyz} ({typeclass})") Typeclass = class_from_module(typeclass) nodeobj, err = Typeclass.create(self.prototype.get("key", "An empty room"), xyz=xyz) @@ -481,7 +483,10 @@ prot = maplinks[key.lower()][3].prototype typeclass = prot.get("typeclass") if typeclass is None: - raise MapError(f"The prototype {self.prototype} for this node has no 'typeclass' key.", self) + raise MapError( + f"The prototype {self.prototype} for this node has no 'typeclass' key.", + self, + ) self.log(f" spawning/updating exit xyz={xyz}, direction={key} ({typeclass})") Typeclass = class_from_module(typeclass) diff --git a/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/git_integration.html b/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/git_integration.html index 2c5a98b488..ade44f7cac 100644 --- a/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/git_integration.html +++ b/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/git_integration.html @@ -83,6 +83,7 @@ import git import datetime +
    [docs]class GitCommand(MuxCommand): """ The shared functionality between git/git evennia @@ -93,31 +94,35 @@ Parse the arguments, set default arg to 'status' and check for existence of currently targeted repo """ super().parse() - + if self.args: split_args = self.args.strip().split(" ", 1) self.action = split_args[0] if len(split_args) > 1: - self.args = ''.join(split_args[1:]) + self.args = "".join(split_args[1:]) else: - self.args = '' + self.args = "" else: self.action = "status" self.args = "" - - self.err_msgs = ["|rInvalid Git Repository|n:", + + self.err_msgs = [ + "|rInvalid Git Repository|n:", "The {repo_type} repository is not recognized as a git directory.", "In order to initialize it as a git directory, you will need to access your terminal and run the following commands from within your directory:", " git init", - " git remote add origin {remote_link}"] - + " git remote add origin {remote_link}", + ] + try: self.repo = git.Repo(self.directory, search_parent_directories=True) except git.exc.InvalidGitRepositoryError: - err_msg = '\n'.join(self.err_msgs).format(repo_type=self.repo_type, remote_link=self.remote_link) + err_msg = "\n".join(self.err_msgs).format( + repo_type=self.repo_type, remote_link=self.remote_link + ) self.caller.msg(err_msg) raise InterruptCommand - + self.commit = self.repo.head.commit try: @@ -132,16 +137,20 @@ """ short_sha = repo.git.rev_parse(hexsha, short=True) return short_sha
    - +
    [docs] def get_status(self): """ Retrieves the status of the active git repository, displaying unstaged changes/untracked files. """ time_of_commit = datetime.datetime.fromtimestamp(self.commit.committed_date) - status_msg = '\n'.join([f"Branch: |w{self.branch}|n ({self.repo.git.rev_parse(self.commit.hexsha, short=True)}) ({time_of_commit})", - f"By {self.commit.author.email}: {self.commit.message}"]) + status_msg = "\n".join( + [ + f"Branch: |w{self.branch}|n ({self.repo.git.rev_parse(self.commit.hexsha, short=True)}) ({time_of_commit})", + f"By {self.commit.author.email}: {self.commit.message}", + ] + ) - changedFiles = { item.a_path for item in self.repo.index.diff(None) } + changedFiles = {item.a_path for item in self.repo.index.diff(None)} if changedFiles: status_msg += f"Unstaged/uncommitted changes:|/ |g{'|/ '.join(changedFiles)}|n|/" if len(self.repo.untracked_files) > 0: @@ -153,7 +162,9 @@ Display current and available branches. """ remote_refs = self.repo.remote().refs - branch_msg = f"Current branch: |w{self.branch}|n. Branches available: {list_to_string(remote_refs)}" + branch_msg = ( + f"Current branch: |w{self.branch}|n. Branches available: {list_to_string(remote_refs)}" + ) return branch_msg
    [docs] def checkout(self): @@ -161,7 +172,9 @@ Check out a specific branch. """ remote_refs = self.repo.remote().refs - to_branch = self.args.strip().removeprefix('origin/') # Slightly hacky, but git tacks on the origin/ + to_branch = self.args.strip().removeprefix( + "origin/" + ) # Slightly hacky, but git tacks on the origin/ if to_branch not in remote_refs: self.caller.msg(f"Branch '{to_branch}' not available.") @@ -177,7 +190,7 @@ return False self.msg(f"Checked out |w{to_branch}|n successfully. Server restart initiated.") return True
    - +
    [docs] def pull(self): """ Attempt to pull new code. @@ -192,7 +205,9 @@ self.caller.msg("No new code to pull, no need to reset.\n") return False else: - self.caller.msg(f"You have pulled new code. Server restart initiated.|/Head now at {self.repo.git.rev_parse(self.repo.head.commit.hexsha, short=True)}.|/Author: {self.repo.head.commit.author.name} ({self.repo.head.commit.author.email})|/{self.repo.head.commit.message.strip()}") + self.caller.msg( + f"You have pulled new code. Server restart initiated.|/Head now at {self.repo.git.rev_parse(self.repo.head.commit.hexsha, short=True)}.|/Author: {self.repo.head.commit.author.name} ({self.repo.head.commit.author.email})|/{self.repo.head.commit.message.strip()}" + ) return True
    [docs] def func(self): @@ -215,18 +230,19 @@ caller.msg("You can only git status, git branch, git checkout, or git pull.") return
    +
    [docs]class CmdGitEvennia(GitCommand): """ Pull the latest code from the evennia core or checkout a different branch. - + Usage: git evennia status - View an overview of the evennia repository status. git evennia branch - View available branches in evennia. git evennia checkout <branch> - Checkout a different branch in evennia. git evennia pull - Pull the latest evennia code. - + For updating your local mygame repository, the same commands are available with 'git'. - + If there are any conflicts encountered, the command will abort. The command will reload your game after pulling new code automatically, but for some changes involving persistent scripts etc, you may need to manually restart. """ @@ -249,7 +265,7 @@ git pull - Pull the latest code from your current branch. For updating evennia code, the same commands are available with 'git evennia'. - + If there are any conflicts encountered, the command will abort. The command will reload your game after pulling new code automatically, but for changes involving persistent scripts etc, you may need to manually restart. """ diff --git a/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/tests.html b/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/tests.html index 1369d26579..4b96be5837 100644 --- a/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/tests.html +++ b/docs/1.0-dev/_modules/evennia/contrib/utils/git_integration/tests.html @@ -87,6 +87,7 @@ import mock import datetime +
    [docs]class TestGitIntegration(EvenniaTest):
    [docs] @mock.patch("git.Repo") @mock.patch("git.Git") @@ -121,11 +122,15 @@ test_cmd_git.caller = self.char1 test_cmd_git.args = "nonexistent_branch" self.test_cmd_git = test_cmd_git
    - +
    [docs] def test_git_status(self): time_of_commit = datetime.datetime.fromtimestamp(self.test_cmd_git.commit.committed_date) - status_msg = '\n'.join([f"Branch: |w{self.test_cmd_git.branch}|n ({self.test_cmd_git.repo.git.rev_parse(self.test_cmd_git.commit.hexsha, short=True)}) ({time_of_commit})", - f"By {self.test_cmd_git.commit.author.email}: {self.test_cmd_git.commit.message}"]) + status_msg = "\n".join( + [ + f"Branch: |w{self.test_cmd_git.branch}|n ({self.test_cmd_git.repo.git.rev_parse(self.test_cmd_git.commit.hexsha, short=True)}) ({time_of_commit})", + f"By {self.test_cmd_git.commit.author.email}: {self.test_cmd_git.commit.message}", + ] + ) self.assertEqual(status_msg, self.test_cmd_git.get_status())
    [docs] def test_git_branch(self): @@ -138,11 +143,12 @@ # Checkout no branch self.test_cmd_git.checkout() self.char1.msg.assert_called_with("Branch 'nonexistent_branch' not available.")
    - +
    [docs] def test_git_pull(self): self.test_cmd_git.pull() - self.char1.msg.assert_called_with(f"You have pulled new code. Server restart initiated.|/Head now at {self.repo.git.rev_parse(self.repo.head.commit.hexsha, short=True)}.|/Author: {self.repo.head.commit.author.name} ({self.repo.head.commit.author.email})|/{self.repo.head.commit.message.strip()}")
    - + self.char1.msg.assert_called_with( + f"You have pulled new code. Server restart initiated.|/Head now at {self.repo.git.rev_parse(self.repo.head.commit.hexsha, short=True)}.|/Author: {self.repo.head.commit.author.name} ({self.repo.head.commit.author.email})|/{self.repo.head.commit.message.strip()}" + )
    diff --git a/docs/1.0-dev/_modules/evennia/objects/objects.html b/docs/1.0-dev/_modules/evennia/objects/objects.html index f7f1c4f12e..5300275206 100644 --- a/docs/1.0-dev/_modules/evennia/objects/objects.html +++ b/docs/1.0-dev/_modules/evennia/objects/objects.html @@ -1720,14 +1720,15 @@ """ pass -
    [docs] def at_post_unpuppet(self, account, session=None, **kwargs): +
    [docs] def at_post_unpuppet(self, account=None, session=None, **kwargs): """ Called just after the Account successfully disconnected from this object, severing all connections. Args: account (Account): The account object that just disconnected - from this object. + from this object. This can be `None` if this is called + automatically (such as after a cleanup operation). session (Session): Session id controlling the connection that just disconnected. **kwargs (dict): Arbitrary, optional arguments for users @@ -2765,7 +2766,7 @@ self.location.for_contents(message, exclude=[self], from_obj=self)
    -
    [docs] def at_post_unpuppet(self, account, session=None, **kwargs): +
    [docs] def at_post_unpuppet(self, account=None, session=None, **kwargs): """ We stove away the character when the account goes ooc/logs off, otherwise the character object will remain in the room also @@ -2776,6 +2777,9 @@ from this object. session (Session): Session controlling the connection that just disconnected. + Keyword Args: + reason (str): If given, adds a reason for the unpuppet. This + is set when the user is auto-unpuppeted due to being link-dead. **kwargs (dict): Arbitrary, optional arguments for users overriding the call (unused by default). """ @@ -2785,7 +2789,10 @@ def message(obj, from_obj): obj.msg( - _("{name} has left the game.").format(name=self.get_display_name(obj)), + _("{name} has left the game{reason}.").format( + name=self.get_display_name(obj), + reason=kwargs.get("reason", ""), + ), from_obj=from_obj, ) diff --git a/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html b/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html index ae16c3f6d9..6f2005d5e8 100644 --- a/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html +++ b/docs/1.0-dev/_modules/evennia/prototypes/prototypes.html @@ -135,7 +135,6 @@ _PROTOTYPE_FALLBACK_LOCK = "spawn:all();edit:all()" - # the protfunc parser FUNC_PARSER = FuncParser(settings.PROT_FUNC_MODULES) @@ -378,7 +377,7 @@ prototype_key = mod_or_dict.get("prototype_key") if not prototype_key: raise ValidationError( - f"The prototype {mod_or_prototype} does not contain a 'prototype_key'" + f"The prototype {mod_or_dict} does not contain a 'prototype_key'" ) prots = [(prototype_key, mod_or_dict)] mod = None @@ -407,6 +406,36 @@ # Db-based prototypes +
    [docs]class DBPrototypeCache: + """ + Cache DB-stored prototypes; it can still be slow to initially load 1000s of + prototypes, due to having to deserialize all prototype-dicts, but after the + first time the cache will be populated and things will be fast. + + """ + +
    [docs] def __init__(self): + self._cache = {}
    + +
    [docs] def get(self, db_prot_id): + return self._cache.get(db_prot_id, None)
    + +
    [docs] def add(self, db_prot_id, prototype): + self._cache[db_prot_id] = prototype
    + +
    [docs] def remove(self, db_prot_id): + self._cache.pop(db_prot_id, None)
    + +
    [docs] def clear(self): + self._cache = {}
    + +
    [docs] def replace(self, all_data): + self._cache = all_data
    + + +DB_PROTOTYPE_CACHE = DBPrototypeCache() + +
    [docs]class DbPrototype(DefaultScript): """ This stores a single prototype, in an Attribute `prototype`. @@ -516,6 +545,7 @@ tags=in_prototype["prototype_tags"], attributes=[("prototype", in_prototype)], ) + DB_PROTOTYPE_CACHE.add(stored_prototype.id, stored_prototype.prototype) return stored_prototype.prototype
    @@ -560,12 +590,19 @@ "delete prototype {prototype_key}." ).format(caller=caller, prototype_key=prototype_key) ) + DB_PROTOTYPE_CACHE.remove(stored_prototype.id) stored_prototype.delete() return True
    [docs]def search_prototype( - key=None, tags=None, require_single=False, return_iterators=False, no_db=False + key=None, + tags=None, + require_single=False, + return_iterators=False, + no_db=False, + page_size=None, + page_no=None, ): """ Find prototypes based on key and/or tags, or all prototypes. @@ -589,7 +626,7 @@ no match was found. Note that if neither `key` nor `tags` were given, *all* available prototypes will be returned. list, queryset: If `return_iterators` are found, this is a list of - module-based prototypes followed by a *paginated* queryset of + module-based prototypes followed by a queryset of db-prototypes. Raises: @@ -602,94 +639,117 @@ be found as a match. """ - # This will load the prototypes the first time they are searched - loaded = getattr(load_module_prototypes, "_LOADED", False) - if not loaded: - load_module_prototypes() - setattr(load_module_prototypes, "_LOADED", True) - # prototype keys are always in lowecase - if key: - key = key.lower() + def _search_module_based_prototypes(key, tags): + """ + Helper function to load module-based prots. - # search module prototypes + """ + # This will load the prototypes the first time they are searched + loaded = getattr(load_module_prototypes, "_LOADED", False) + if not loaded: + load_module_prototypes() + setattr(load_module_prototypes, "_LOADED", True) - mod_matches = {} - if tags: - # use tags to limit selection - tagset = set(tags) - mod_matches = { - prototype_key: prototype - for prototype_key, prototype in _MODULE_PROTOTYPES.items() - if tagset.intersection(prototype.get("prototype_tags", [])) - } - else: - mod_matches = _MODULE_PROTOTYPES + # search module prototypes - allow_fuzzy = True - if key: - if key in mod_matches: - # exact match - module_prototypes = [mod_matches[key].copy()] - allow_fuzzy = False + mod_matches = {} + if tags: + # use tags to limit selection + tagset = set(tags) + mod_matches = { + prototype_key: prototype + for prototype_key, prototype in _MODULE_PROTOTYPES.items() + if tagset.intersection(prototype.get("prototype_tags", [])) + } else: - # fuzzy matching - module_prototypes = [ - prototype - for prototype_key, prototype in mod_matches.items() - if key in prototype_key - ] - else: - # note - we return a copy of the prototype dict, otherwise using this with e.g. - # prototype_from_object will modify the base prototype for every object - module_prototypes = [match.copy() for match in mod_matches.values()] + mod_matches = _MODULE_PROTOTYPES - if no_db: - db_matches = [] - else: + fuzzy_match_db = True + if key: + if key in mod_matches: + # exact match + module_prototypes = [mod_matches[key].copy()] + fuzzy_match_db = False + else: + # fuzzy matching + module_prototypes = [ + prototype + for prototype_key, prototype in mod_matches.items() + if key in prototype_key + ] + else: + # note - we return a copy of the prototype dict, otherwise using this with e.g. + # prototype_from_object will modify the base prototype for every object + module_prototypes = [match.copy() for match in mod_matches.values()] + + return module_prototypes, fuzzy_match_db + + def _search_db_based_prototypes(key, tags, fuzzy_matching): + """ + Helper function for loading db-based prots. + + """ # search db-stored prototypes if tags: # exact match on tag(s) tags = make_iter(tags) tag_categories = ["db_prototype" for _ in tags] - db_matches = DbPrototype.objects.get_by_tag(tags, tag_categories) + query = DbPrototype.objects.get_by_tag(tags, tag_categories) else: - db_matches = DbPrototype.objects.all() + query = DbPrototype.objects.all() 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 and allow_fuzzy: + exact_match = query.filter(Q(db_key__iexact=key)) + if not exact_match and fuzzy_matching: # try with partial match instead - db_matches = db_matches.filter(Q(db_key__icontains=key)).order_by("db_key") + query = query.filter(Q(db_key__icontains=key)) else: - db_matches = exact_match + query = exact_match - # convert to prototype - db_ids = db_matches.values_list("id", flat=True) - db_matches = ( - Attribute.objects.filter(scriptdb__pk__in=db_ids, db_key="prototype") - .values_list("db_value", flat=True) - .order_by("scriptdb__db_key") - ) + # convert to prototype, cached or from db + + db_matches = [] + not_found = [] + for db_id in query.values_list("id", flat=True).order_by("db_key"): + prot = DB_PROTOTYPE_CACHE.get(db_id) + if prot: + db_matches.append(prot) + else: + not_found.append(db_id) + + if not_found: + new_db_matches = ( + Attribute.objects.filter(scriptdb__pk__in=not_found, db_key="prototype") + .values_list("db_value", flat=True) + .order_by("scriptdb__db_key") + ) + for db_id, prot in zip(not_found, new_db_matches): + DB_PROTOTYPE_CACHE.add(db_id, prot) + db_matches.extend(list(new_db_matches)) + + return db_matches + + if key: + key = key.lower() + + module_prototypes, fuzzy_match_db = _search_module_based_prototypes(key, tags) + + db_prototypes = [] if no_db else _search_db_based_prototypes(key, tags, fuzzy_match_db) if key and require_single: - nmodules = len(module_prototypes) - ndbprots = db_matches.count() if db_matches else 0 - if nmodules + ndbprots != 1: - raise KeyError( - _("Found {num} matching prototypes among {module_prototypes}.").format( - num=nmodules + ndbprots, module_prototypes=module_prototypes - ) - ) + num = len(module_prototypes) + len(db_prototypes) + if num != 1: + raise KeyError(_(f"Found {num} matching prototypes.")) if return_iterators: # trying to get the entire set of prototypes - we must paginate # the result instead of trying to fetch the entire set at once - return db_matches, module_prototypes + return db_prototypes, module_prototypes else: # full fetch, no pagination (compatibility mode) - return list(db_matches) + module_prototypes
    + return list(db_prototypes) + module_prototypes
    [docs]def search_objects_with_prototype(prototype_key): @@ -740,7 +800,7 @@ # of each. n_mod = len(modprot_list) self._npages_mod = n_mod // self.height + (0 if n_mod % self.height == 0 else 1) - self._db_count = dbprot_paged.count + self._db_count = dbprot_paged.count if dbprot_paged else 0 self._npages_db = dbprot_paged.num_pages if self._db_count > 0 else 0 # total number of pages self._npages = self._npages_mod + self._npages_db @@ -861,8 +921,9 @@ prototype (dict): Prototype to validate. protkey (str, optional): The name of the prototype definition. If not given, the prototype dict needs to have the `prototype_key` field set. - protpartents (dict, optional): The available prototype parent library. If - note given this will be determined from settings/database. + protparents (dict, optional): Additional prototype-parents, supposedly provided specifically + for this prototype. If given, matching parents will first be taken from this + dict rather than from the global set of prototypes found via settings/database. is_prototype_base (bool, optional): We are trying to create a new object *based on this object*. This means we can't allow 'mixin'-style prototypes without typeclass/parent etc. @@ -876,16 +937,11 @@ """ assert isinstance(prototype, dict) + protparents = {} if protparents is None else protparents if _flags is None: _flags = {"visited": [], "depth": 0, "typeclass": False, "errors": [], "warnings": []} - if not protparents: - protparents = { - prototype.get("prototype_key", "").lower(): prototype - for prototype in search_prototype() - } - protkey = protkey and protkey.lower() or prototype.get("prototype_key", None) if strict and not bool(protkey): @@ -937,13 +993,20 @@ _flags["errors"].append( _("Prototype {protkey} tries to parent itself.").format(protkey=protkey) ) + + # get prototype parent, first try custom set, then search globally protparent = protparents.get(protstring) if not protparent: - _flags["errors"].append( - _( - "Prototype {protkey}'s `prototype_parent` (named '{parent}') was not found." - ).format(protkey=protkey, parent=protstring) - ) + protparent = search_prototype(key=protstring, require_single=True) + if protparent: + protparent = protparent[0] + else: + _flags["errors"].append( + _( + "Prototype {protkey}'s `prototype_parent` (named '{parent}') was not" + " found." + ).format(protkey=protkey, parent=protstring) + ) # check for infinite recursion if id(prototype) in _flags["visited"]: @@ -960,7 +1023,11 @@ # next step of recursive validation validate_prototype( - protparent, protstring, protparents, is_prototype_base=is_prototype_base, _flags=_flags + protparent, + protkey=protstring, + protparents=protparents, + is_prototype_base=is_prototype_base, + _flags=_flags, ) _flags["visited"].pop() @@ -1021,7 +1088,8 @@ available_functions (dict, optional): Mapping of name:protfunction to use for this parsing. If not set, use default sources. stacktrace (bool, optional): If set, print the stack parsing process of the protfunc-parser. - raise_errors (bool, optional): Raise explicit errors from malformed/not found protfunc calls. + raise_errors (bool, optional): Raise explicit errors from malformed/not found protfunc + calls. Keyword Args: session (Session): Passed to protfunc. Session of the entity spawning the prototype. @@ -1171,8 +1239,10 @@ logger.log_err(err.format(protkey=prototype_key, module=mod)) return False - prototype = search_prototype(key=prototype_key) - if not prototype: + prototype = search_prototype(key=prototype_key, require_single=True) + if prototype: + prototype = prototype[0] + else: logger.log_err("Prototype {} not found.".format(prototype_key)) return False diff --git a/docs/1.0-dev/_modules/evennia/prototypes/spawner.html b/docs/1.0-dev/_modules/evennia/prototypes/spawner.html index 4ac47cdbf9..89102ab285 100644 --- a/docs/1.0-dev/_modules/evennia/prototypes/spawner.html +++ b/docs/1.0-dev/_modules/evennia/prototypes/spawner.html @@ -221,6 +221,7 @@ from evennia.prototypes.prototypes import ( PROTOTYPE_TAG_CATEGORY, init_spawn_value, + search_prototype, value_to_obj, value_to_obj_or_any, ) @@ -266,7 +267,7 @@ # Helper -def _get_prototype(inprot, protparents, uninherited=None, _workprot=None): +def _get_prototype(inprot, protparents=None, uninherited=None, _workprot=None): """ Recursively traverse a prototype dictionary, including multiple inheritance. Use validate_prototype before this, we don't check @@ -274,7 +275,9 @@ Args: inprot (dict): Prototype dict (the individual prototype, with no inheritance included). - protparents (dict): Available protparents, keyed by prototype_key. + protparents (dict): Custom protparents, supposedly provided specifically for this `inprot`. + If given, any parents will first be looked up in this dict, and then by searching + the global prototype store given by settings/db. uninherited (dict): Parts of prototype to not inherit. _workprot (dict, optional): Work dict for the recursive algorithm. @@ -296,6 +299,8 @@ old.update(new) return list(old.values()) + protparents = {} if protparents is None else protparents + _workprot = {} if _workprot is None else _workprot if "prototype_parent" in inprot: # move backwards through the inheritance @@ -310,8 +315,12 @@ # protparent already embedded as-is parent_prototype = prototype else: - # protparent given by-name - parent_prototype = protparents.get(prototype.lower(), {}) + # protparent given by-name, first search provided parents, then global store + parent_prototype = protparents.get(prototype.lower()) + if not parent_prototype: + parent_prototype = search_prototype(key=prototype.lower()) or {} + if parent_prototype: + parent_prototype = parent_prototype[0] # Build the prot dictionary in reverse order, overloading new_prot = _get_prototype(parent_prototype, protparents, _workprot=_workprot) @@ -353,14 +362,9 @@ if prototype: prototype = protlib.homogenize_prototype(prototype) - protparents = { - prot["prototype_key"].lower(): prot for prot in protlib.search_prototype(no_db=no_db) - } - protlib.validate_prototype( - prototype, None, protparents, is_prototype_base=validate, strict=validate - ) + protlib.validate_prototype(prototype, is_prototype_base=validate, strict=validate) return _get_prototype( - prototype, protparents, uninherited={"prototype_key": prototype.get("prototype_key")} + prototype, uninherited={"prototype_key": prototype.get("prototype_key")} ) return {}
    @@ -737,6 +741,8 @@ if isinstance(prototype, str): new_prototype = protlib.search_prototype(prototype) + if new_prototype: + new_prototype = new_prototype[0] else: new_prototype = prototype @@ -968,10 +974,6 @@ prototype_parents (dict): A dictionary holding a custom prototype-parent dictionary. Will overload same-named prototypes from prototype_modules. - return_parents (bool): Return a dict of the entire prototype-parent tree - available to this prototype (no object creation happens). This is a - merged result between the globally found protparents and whatever - custom `prototype_parents` are given to this function. only_validate (bool): Only run validation of prototype/parents (no object creation) and return the create-kwargs. protfunc_raise_errors (bool): Raise explicit exceptions on a malformed/not-found @@ -979,8 +981,7 @@ Returns: object (Object, dict or list): Spawned object(s). If `only_validate` is given, return - a list of the creation kwargs to build the object(s) without actually creating it. If - `return_parents` is set, instead return dict of prototype parents. + a list of the creation kwargs to build the object(s) without actually creating it. """ # search string (=prototype_key) from input @@ -989,9 +990,6 @@ for prot in prototypes ] - # get available protparents - protparents = {prot["prototype_key"].lower(): prot for prot in protlib.search_prototype()} - if not kwargs.get("only_validate"): # homogenization to be more lenient about prototype format when entering the prototype # manually @@ -1000,21 +998,23 @@ # overload module's protparents with specifically given protparents # we allow prototype_key to be the key of the protparent dict, to allow for module-level # prototype imports. We need to insert prototype_key in this case + custom_protparents = {} for key, protparent in kwargs.get("prototype_parents", {}).items(): key = str(key).lower() protparent["prototype_key"] = str(protparent.get("prototype_key", key)).lower() - protparents[key] = protlib.homogenize_prototype(protparent) - - if "return_parents" in kwargs: - # only return the parents - return copy.deepcopy(protparents) + custom_protparents[key] = protlib.homogenize_prototype(protparent) objsparams = [] for prototype in prototypes: - protlib.validate_prototype(prototype, None, protparents, is_prototype_base=True) + # run validation and homogenization of provided prototypes + protlib.validate_prototype( + prototype, None, protparents=custom_protparents, is_prototype_base=True + ) prot = _get_prototype( - prototype, protparents, uninherited={"prototype_key": prototype.get("prototype_key")} + prototype, + protparents=custom_protparents, + uninherited={"prototype_key": prototype.get("prototype_key")}, ) if not prot: continue diff --git a/docs/1.0-dev/_modules/evennia/server/server.html b/docs/1.0-dev/_modules/evennia/server/server.html index 521b41dfff..9a71720478 100644 --- a/docs/1.0-dev/_modules/evennia/server/server.html +++ b/docs/1.0-dev/_modules/evennia/server/server.html @@ -83,39 +83,36 @@ evennia/server/server_runner.py). """ -import time -import sys import os +import sys +import time import traceback -from twisted.web import static +import django from twisted.application import internet, service -from twisted.internet import reactor, defer +from twisted.internet import defer, reactor from twisted.internet.task import LoopingCall from twisted.logger import globalLogPublisher - -import django +from twisted.web import static django.setup() -import evennia import importlib +import evennia + evennia._init() +from django.conf import settings from django.db import connection from django.db.utils import OperationalError -from django.conf import settings - +from django.utils.translation import gettext as _ from evennia.accounts.models import AccountDB from evennia.scripts.models import ScriptDB from evennia.server.models import ServerConfig - -from evennia.utils.utils import get_evennia_version, mod_import, make_iter -from evennia.utils import logger from evennia.server.sessionhandler import SESSIONS - -from django.utils.translation import gettext as _ +from evennia.utils import logger +from evennia.utils.utils import get_evennia_version, make_iter, mod_import _SA = object.__setattr__ @@ -184,6 +181,7 @@ _FLUSH_CACHE = None _IDMAPPER_CACHE_MAXSIZE = settings.IDMAPPER_CACHE_MAXSIZE _GAMETIME_MODULE = None +_DEFAULTOBJECT = None _IDLE_TIMEOUT = settings.IDLE_TIMEOUT _LAST_SERVER_TIME_SNAPSHOT = 0 @@ -196,11 +194,12 @@ """ global EVENNIA, _MAINTENANCE_COUNT, _FLUSH_CACHE, _GAMETIME_MODULE global _LAST_SERVER_TIME_SNAPSHOT + global _OBJECTDB - if not _FLUSH_CACHE: - from evennia.utils.idmapper.models import conditional_flush as _FLUSH_CACHE - if not _GAMETIME_MODULE: + if not _MAINTENANCE_COUNT: + from evennia.objects.models import ObjectDB as _OBJECTDB from evennia.utils import gametime as _GAMETIME_MODULE + from evennia.utils.idmapper.models import conditional_flush as _FLUSH_CACHE _MAINTENANCE_COUNT += 1 @@ -243,6 +242,20 @@ for session in to_disconnect: SESSIONS.disconnect(session, reason=reason) + # run unpuppet hooks for objects that are marked as being puppeted, + # but which lacks an account (indicates a broken unpuppet operation + # such as a server crash) + if _MAINTENANCE_COUNT > 1: + unpuppet_count = 0 + for obj in _OBJECTDB.objects.get_by_tag(key="puppeted", category="account"): + if not obj.has_account: + obj.at_pre_unpuppet() + obj.at_post_unpuppet(None, reason=_(" (connection lost)")) + obj.tags.remove("puppeted", category="account") + unpuppet_count += 1 + if unpuppet_count: + logger.log_msg(f"Ran unpuppet-hooks for {unpuppet_count} link-dead puppets.") + # ------------------------------------------------------------ # Evennia Main Server object @@ -356,8 +369,8 @@ ): # can't use any() since mismatches may be [0] which reads as False for any() # we have a changed default. Import relevant objects and # run the update - from evennia.objects.models import ObjectDB from evennia.comms.models import ChannelDB + from evennia.objects.models import ObjectDB # from evennia.accounts.models import AccountDB for i, prev, curr in ( @@ -448,8 +461,8 @@ """ - from evennia.comms.models import ChannelDB from evennia.accounts.models import AccountDB + from evennia.comms.models import ChannelDB from evennia.utils.create import create_channel superuser = AccountDB.objects.get(id=1) @@ -785,10 +798,10 @@ from evennia.server.webserver import ( DjangoWebRoot, - WSGIWebServer, - Website, LockableThreadPool, PrivateStaticRoot, + Website, + WSGIWebServer, ) # start a thread pool and define the root url (/) as a wsgi resource diff --git a/docs/1.0-dev/_modules/evennia/utils/containers.html b/docs/1.0-dev/_modules/evennia/utils/containers.html index 12855d0ea6..45f284348b 100644 --- a/docs/1.0-dev/_modules/evennia/utils/containers.html +++ b/docs/1.0-dev/_modules/evennia/utils/containers.html @@ -96,6 +96,7 @@ SCRIPTDB = None +
    [docs]class Container: """ Base container class. A container is simply a storage object whose @@ -279,7 +280,9 @@ self.typeclass_storage = {} for key, data in list(self.loaded_data.items()): typeclass = data.get("typeclass", settings.BASE_SCRIPT_TYPECLASS) - self.typeclass_storage[key] = class_from_module(typeclass, fallback=settings.BASE_SCRIPT_TYPECLASS)
    + self.typeclass_storage[key] = class_from_module( + typeclass, fallback=settings.BASE_SCRIPT_TYPECLASS + )
    [docs] def get(self, key, default=None): """ diff --git a/docs/1.0-dev/_modules/evennia/utils/funcparser.html b/docs/1.0-dev/_modules/evennia/utils/funcparser.html index 709102327b..508f0ced7e 100644 --- a/docs/1.0-dev/_modules/evennia/utils/funcparser.html +++ b/docs/1.0-dev/_modules/evennia/utils/funcparser.html @@ -428,7 +428,7 @@ if curr_func: # we are starting a nested funcdef - if len(callstack) > _MAX_NESTING: + if len(callstack) >= _MAX_NESTING - 1: # stack full - ignore this function if raise_errors: raise ParsingError( diff --git a/docs/1.0-dev/_modules/evennia/utils/text2html.html b/docs/1.0-dev/_modules/evennia/utils/text2html.html index 589c2087fa..c7b09ebf56 100644 --- a/docs/1.0-dev/_modules/evennia/utils/text2html.html +++ b/docs/1.0-dev/_modules/evennia/utils/text2html.html @@ -166,8 +166,10 @@ re_url = re.compile( r'(?<!=")(\b(?:ftp|www|https?)\W+(?:(?!\.(?:\s|$)|&\w+;)[^"\',;$*^\\(){}<>\[\]\s])+)(\.(?:\s|$)|&\w+;|)' ) - re_protocol = re.compile(r'^(?:ftp|https?)://') - re_valid_no_protocol = re.compile(r'^(?:www|ftp)\.[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[-a-zA-Z0-9@:%_\+.~#?&//=]*') + re_protocol = re.compile(r"^(?:ftp|https?)://") + re_valid_no_protocol = re.compile( + r"^(?:www|ftp)\.[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[-a-zA-Z0-9@:%_\+.~#?&//=]*" + ) re_mxplink = re.compile(r"\|lc(.*?)\|lt(.*?)\|le", re.DOTALL) re_mxpurl = re.compile(r"\|lu(.*?)\|lt(.*?)\|le", re.DOTALL) @@ -227,20 +229,24 @@ """ m = self.re_url.search(text) if m: - href = m.group(1) - label = href - # if there is no protocol (i.e. starts with www or ftp) - # prefix with http:// so the link isn't treated as relative - if not self.re_protocol.match(href): - if not self.re_valid_no_protocol.match(href): - return text - href = "http://" + href - rest = m.group(2) - # -> added target to output prevent the web browser from attempting to - # change pages (and losing our webclient session). - return text[:m.start()] + f'<a href="{href}" target="_blank">{label}</a>{rest}' + text[m.end():] + href = m.group(1) + label = href + # if there is no protocol (i.e. starts with www or ftp) + # prefix with http:// so the link isn't treated as relative + if not self.re_protocol.match(href): + if not self.re_valid_no_protocol.match(href): + return text + href = "http://" + href + rest = m.group(2) + # -> added target to output prevent the web browser from attempting to + # change pages (and losing our webclient session). + return ( + text[: m.start()] + + f'<a href="{href}" target="_blank">{label}</a>{rest}' + + text[m.end() :] + ) else: - return text
    + return text
    +
    +
    +class evennia.prototypes.prototypes.DBPrototypeCache[source]
    +

    Bases: object

    +

    Cache DB-stored prototypes; it can still be slow to initially load 1000s of +prototypes, due to having to deserialize all prototype-dicts, but after the +first time the cache will be populated and things will be fast.

    +
    +
    +__init__()[source]
    +

    Initialize self. See help(type(self)) for accurate signature.

    +
    + +
    +
    +get(db_prot_id)[source]
    +
    + +
    +
    +add(db_prot_id, prototype)[source]
    +
    + +
    +
    +remove(db_prot_id)[source]
    +
    + +
    +
    +clear()[source]
    +
    + +
    +
    +replace(all_data)[source]
    +
    + +
    +
    class evennia.prototypes.prototypes.DbPrototype(*args, **kwargs)[source]
    @@ -273,7 +313,7 @@ Note that no locks will be checked if**caller** is not passed.

    -evennia.prototypes.prototypes.search_prototype(key=None, tags=None, require_single=False, return_iterators=False, no_db=False)[source]
    +evennia.prototypes.prototypes.search_prototype(key=None, tags=None, require_single=False, return_iterators=False, no_db=False, page_size=None, page_no=None)[source]

    Find prototypes based on key and/or tags, or all prototypes.

    Keyword Arguments
    @@ -298,7 +338,7 @@ module-prototypes are static and require no db-lookup.

    Default return, all found prototype dicts. Empty list if

    no match was found. Note that if neither key nor tags were given, all available prototypes will be returned.

    -
    list, queryset: If return_iterators are found, this is a list of

    module-based prototypes followed by a paginated queryset of +

    list, queryset: If return_iterators are found, this is a list of

    module-based prototypes followed by a queryset of db-prototypes.

    @@ -400,8 +440,9 @@ None: If no matches were found. In this case the caller has already been notifie
  • prototype (dict) – Prototype to validate.

  • protkey (str, optional) – The name of the prototype definition. If not given, the prototype dict needs to have the prototype_key field set.

  • -
  • protpartents (dict, optional) – The available prototype parent library. If -note given this will be determined from settings/database.

  • +
  • protparents (dict, optional) – Additional prototype-parents, supposedly provided specifically +for this prototype. If given, matching parents will first be taken from this +dict rather than from the global set of prototypes found via settings/database.

  • is_prototype_base (bool, optional) – We are trying to create a new object based on this object. This means we can’t allow ‘mixin’-style prototypes without typeclass/parent etc.

  • @@ -434,7 +475,8 @@ protfuncs, all other types are returned as-is.

  • available_functions (dict, optional) – Mapping of name:protfunction to use for this parsing. If not set, use default sources.

  • stacktrace (bool, optional) – If set, print the stack parsing process of the protfunc-parser.

  • -
  • raise_errors (bool, optional) – Raise explicit errors from malformed/not found protfunc calls.

  • +
  • raise_errors (bool, optional) – Raise explicit errors from malformed/not found protfunc +calls.

  • Keyword Arguments
    diff --git a/docs/1.0-dev/api/evennia.prototypes.spawner.html b/docs/1.0-dev/api/evennia.prototypes.spawner.html index 35b15f23d5..5cbf814367 100644 --- a/docs/1.0-dev/api/evennia.prototypes.spawner.html +++ b/docs/1.0-dev/api/evennia.prototypes.spawner.html @@ -519,10 +519,6 @@ defined by settings.PROTOTYPE_MODULES.

  • prototype_parents (dict) – A dictionary holding a custom prototype-parent dictionary. Will overload same-named prototypes from prototype_modules.

  • -
  • return_parents (bool) – Return a dict of the entire prototype-parent tree -available to this prototype (no object creation happens). This is a -merged result between the globally found protparents and whatever -custom prototype_parents are given to this function.

  • only_validate (bool) – Only run validation of prototype/parents (no object creation) and return the create-kwargs.

  • protfunc_raise_errors (bool) – Raise explicit exceptions on a malformed/not-found @@ -532,8 +528,7 @@ protfunc. Defaults to True.

  • Returns

    object (Object, dict or list)

    -
    Spawned object(s). If only_validate is given, return

    a list of the creation kwargs to build the object(s) without actually creating it. If -return_parents is set, instead return dict of prototype parents.

    +
    Spawned object(s). If only_validate is given, return

    a list of the creation kwargs to build the object(s) without actually creating it.

    diff --git a/docs/1.0-dev/api/evennia.utils.eveditor.html b/docs/1.0-dev/api/evennia.utils.eveditor.html index 1e9748beeb..bee893390e 100644 --- a/docs/1.0-dev/api/evennia.utils.eveditor.html +++ b/docs/1.0-dev/api/evennia.utils.eveditor.html @@ -334,7 +334,7 @@ indentation.

    -aliases = [':h', ':q', ':>', ':i', ':s', ':UU', ':dw', ':fd', ':I', ':DD', ':dd', ':wq', ':f', ':<', ':echo', ':!', ':j', ':', ':p', '::', ':uu', ':x', ':y', ':A', ':fi', ':S', ':::', ':=', ':q!', ':u', ':r', ':w']
    +aliases = [':r', ':uu', ':j', ':I', ':f', ':w', ':q', ':i', ':fd', ':h', ':dd', ':>', ':x', ':', ':dw', ':UU', ':y', ':S', ':q!', ':::', ':=', ':fi', ':DD', ':!', '::', ':u', ':A', ':s', ':echo', ':p', ':<', ':wq']
    @@ -362,7 +362,7 @@ efficient presentation.

    -search_index_entry = {'aliases': ':h :q :> :i :s :UU :dw :fd :I :DD :dd :wq :f :< :echo :! :j : :p :: :uu :x :y :A :fi :S ::: := :q! :u :r :w', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :h :q :> :i :s :UU :dw :fd :I :DD :dd :wq :f :< :echo :! :j : :p :: :uu :x :y :A :fi :S ::: := :q! :u :r :w', 'tags': '', 'text': '\n Commands for the editor\n '}
    +search_index_entry = {'aliases': ':r :uu :j :I :f :w :q :i :fd :h :dd :> :x : :dw :UU :y :S :q! ::: := :fi :DD :! :: :u :A :s :echo :p :< :wq', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :r :uu :j :I :f :w :q :i :fd :h :dd :> :x : :dw :UU :y :S :q! ::: := :fi :DD :! :: :u :A :s :echo :p :< :wq', 'tags': '', 'text': '\n Commands for the editor\n '}
    diff --git a/docs/1.0-dev/api/evennia.utils.evmenu.html b/docs/1.0-dev/api/evennia.utils.evmenu.html index 791623dce3..a039018a7f 100644 --- a/docs/1.0-dev/api/evennia.utils.evmenu.html +++ b/docs/1.0-dev/api/evennia.utils.evmenu.html @@ -1009,7 +1009,7 @@ single question.

    -aliases = ['yes', 'abort', 'a', 'no', 'y', '__nomatch_command', 'n']
    +aliases = ['abort', 'y', 'a', 'yes', 'no', '__nomatch_command', 'n']
    @@ -1035,7 +1035,7 @@ single question.

    -search_index_entry = {'aliases': 'yes abort a no y __nomatch_command n', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' yes abort a no y __nomatch_command n', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    +search_index_entry = {'aliases': 'abort y a yes no __nomatch_command n', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' abort y a yes no __nomatch_command n', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    diff --git a/docs/1.0-dev/api/evennia.utils.evmore.html b/docs/1.0-dev/api/evennia.utils.evmore.html index 2d2d437151..ad9c4f0498 100644 --- a/docs/1.0-dev/api/evennia.utils.evmore.html +++ b/docs/1.0-dev/api/evennia.utils.evmore.html @@ -135,7 +135,7 @@ the caller.msg() construct every time the page is updated.

    -aliases = ['abort', 'p', 't', 'a', 'end', 'previous', 'e', 'q', 'next', 'top', 'n', 'quit']
    +aliases = ['top', 'abort', 'e', 't', 'p', 'q', 'quit', 'previous', 'n', 'end', 'a', 'next']
    @@ -161,7 +161,7 @@ the caller.msg() construct every time the page is updated.

    -search_index_entry = {'aliases': 'abort p t a end previous e q next top n quit', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' abort p t a end previous e q next top n quit', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    +search_index_entry = {'aliases': 'top abort e t p q quit previous n end a next', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' top abort e t p q quit previous n end a next', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    diff --git a/docs/1.0-dev/genindex.html b/docs/1.0-dev/genindex.html index 230c081c0f..1f4a4c6a4c 100644 --- a/docs/1.0-dev/genindex.html +++ b/docs/1.0-dev/genindex.html @@ -213,6 +213,8 @@
  • (evennia.objects.models.ContentsHandler method)
  • (evennia.objects.objects.ObjectSessionHandler method) +
  • +
  • (evennia.prototypes.prototypes.DBPrototypeCache method)
  • (evennia.prototypes.prototypes.PrototypeEvMore method)
  • @@ -637,6 +639,8 @@
  • (evennia.objects.models.ContentsHandler method)
  • (evennia.objects.objects.ObjectSessionHandler method) +
  • +
  • (evennia.prototypes.prototypes.DBPrototypeCache method)
  • (evennia.scripts.monitorhandler.MonitorHandler method)
  • @@ -3433,6 +3437,8 @@
  • (evennia.objects.models.ContentsHandler method)
  • (evennia.objects.objects.ObjectSessionHandler method) +
  • +
  • (evennia.prototypes.prototypes.DBPrototypeCache method)
  • (evennia.scripts.monitorhandler.MonitorHandler method)
  • @@ -4996,6 +5002,8 @@
  • DbPrototype.DoesNotExist
  • DbPrototype.MultipleObjectsReturned +
  • +
  • DBPrototypeCache (class in evennia.prototypes.prototypes)
  • dbref() (evennia.typeclasses.managers.TypedObjectManager method) @@ -9817,6 +9825,8 @@
  • (evennia.objects.models.ContentsHandler method)
  • (evennia.objects.objects.ObjectSessionHandler method) +
  • +
  • (evennia.prototypes.prototypes.DBPrototypeCache method)
  • (evennia.scripts.scripthandler.ScriptHandler method)
  • @@ -10146,11 +10156,11 @@
  • get_exit() (evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid method)
  • get_exit_spawn_name() (evennia.contrib.grid.xyzgrid.xymap_legend.MapNode method) -
  • -
  • get_exits() (evennia.web.api.serializers.ObjectDBSerializer static method)