diff --git a/docs/0.9.5/.buildinfo b/docs/0.9.5/.buildinfo index b744e3519f..3f6f5eed84 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: 3af820173b2891ecb000a81806e22587 +config: eb5b3799f420448adcc2fb67b1842b04 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/0.9.5/Default-Commands.html b/docs/0.9.5/Default-Commands.html index 78d5d6de2e..a908503f37 100644 --- a/docs/0.9.5/Default-Commands.html +++ b/docs/0.9.5/Default-Commands.html @@ -57,7 +57,7 @@ with about [version] (cmdset: CharacterCmdSet, help-category: System)

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

  • accounts [listaccounts, account] (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 [clist, comlist, chanlist, all channels, channellist] (cmdset: AccountCmdSet, help-category: Comms)

  • +
  • channels [clist, all channels, chanlist, comlist, 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, co, con] (cmdset: UnloggedinCmdSet, help-category: General)

  • +
  • connect [co, con, conn] (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)

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

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

  • delcom [delaliaschan, delchanalias] (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 [locate, search] (cmdset: CharacterCmdSet, help-category: Building)

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

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

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

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

  • @@ -95,17 +95,17 @@ with home (cmdset: CharacterCmdSet, help-category: General)

  • ic [puppet] (cmdset: AccountCmdSet, help-category: General)

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

  • -
  • inventory [i, inv] (cmdset: CharacterCmdSet, help-category: General)

  • +
  • inventory [inv, i] (cmdset: CharacterCmdSet, help-category: General)

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

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

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

  • lock [locks] (cmdset: CharacterCmdSet, help-category: Building)

  • -
  • look [l, ls] (cmdset: AccountCmdSet, help-category: General)

  • -
  • look [l, ls] (cmdset: CharacterCmdSet, help-category: General)

  • +
  • look [ls, l] (cmdset: AccountCmdSet, help-category: General)

  • +
  • look [ls, l] (cmdset: CharacterCmdSet, help-category: General)

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

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

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

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

  • +
  • objects [listobjs, listobjects, 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)

  • @@ -119,10 +119,10 @@ with 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)

  • +
  • 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)

  • +
  • 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)

  • @@ -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 [type, parent, swap, update] (cmdset: CharacterCmdSet, help-category: Building)

  • +
  • typeclass [type, update, parent, swap] (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 e153f4d343..7916855901 100644 --- a/docs/0.9.5/_sources/Default-Commands.md.txt +++ b/docs/0.9.5/_sources/Default-Commands.md.txt @@ -18,7 +18,7 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**about** [version]](evennia.commands.default.system.CmdAbout) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) - [**access** [hierarchy, groups]](evennia.commands.default.general.CmdAccess) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**accounts** [listaccounts, account]](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** [clist, comlist, chanlist, all channels, channellist]](evennia.commands.default.comms.CmdChannels) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) +- [**channels** [clist, all channels, chanlist, comlist, 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, co, con]](evennia.commands.default.unloggedin.CmdUnconnectedConnect) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) +- [**connect** [co, con, conn]](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_) +- [**create** [cre, cr]](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_) - [**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** [locate, search]](evennia.commands.default.building.CmdFind) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**find** [search, locate]](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_) @@ -56,17 +56,17 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**home**](evennia.commands.default.general.CmdHome) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**ic** [puppet]](evennia.commands.default.account.CmdIC) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) - [**info**](evennia.commands.default.unloggedin.CmdUnconnectedInfo) (cmdset: [UnloggedinCmdSet](evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet), help-category: _General_) -- [**inventory** [i, inv]](evennia.commands.default.general.CmdInventory) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**inventory** [inv, i]](evennia.commands.default.general.CmdInventory) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**irc2chan**](evennia.commands.default.comms.CmdIRC2Chan) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**ircstatus**](evennia.commands.default.comms.CmdIRCStatus) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _Comms_) - [**link**](evennia.commands.default.building.CmdLink) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) - [**lock** [locks]](evennia.commands.default.building.CmdLock) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) -- [**look** [l, ls]](evennia.commands.default.account.CmdOOCLook) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**look** [l, ls]](evennia.commands.default.general.CmdLook) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) +- [**look** [ls, l]](evennia.commands.default.account.CmdOOCLook) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) +- [**look** [ls, l]](evennia.commands.default.general.CmdLook) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _General_) - [**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** [nickname, nicks]](evennia.commands.default.general.CmdNick) (cmdset: [AccountCmdSet](evennia.commands.default.cmdset_account.AccountCmdSet), help-category: _General_) -- [**objects** [listobjs, stats, db, listobjects]](evennia.commands.default.system.CmdObjects) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _System_) +- [**objects** [listobjs, listobjects, 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_) @@ -80,10 +80,10 @@ with [EvEditor](./EvEditor.md), flipping pages in [EvMore](./EvMore.md) or using - [**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_) +- [**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_) +- [**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_) @@ -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** [type, parent, swap, update]](evennia.commands.default.building.CmdTypeclass) (cmdset: [CharacterCmdSet](evennia.commands.default.cmdset_character.CharacterCmdSet), help-category: _Building_) +- [**typeclass** [type, update, parent, swap]](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.account.html b/docs/0.9.5/api/evennia.commands.default.account.html index b0883f258d..d998c2f3e5 100644 --- a/docs/0.9.5/api/evennia.commands.default.account.html +++ b/docs/0.9.5/api/evennia.commands.default.account.html @@ -72,7 +72,7 @@ method. Otherwise all text will be returned to all connected sessions.

    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    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 2a84edbbb1..0417f7eeb1 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 = ['type', 'parent', 'swap', 'update']
    +aliases = ['type', 'update', 'parent', 'swap']
    @@ -1481,7 +1481,7 @@ one is given.

    -aliases = ['locate', 'search']
    +aliases = ['search', 'locate']
    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 485e6ffb3f..a8f6a20930 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']
    @@ -221,7 +221,7 @@ Use addcom/delcom to join and leave channels

    -aliases = ['clist', 'comlist', 'chanlist', 'all channels', 'channellist']
    +aliases = ['clist', 'all channels', 'chanlist', 'comlist', '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 7d32425741..97e7a5c3c4 100644 --- a/docs/0.9.5/api/evennia.commands.default.general.html +++ b/docs/0.9.5/api/evennia.commands.default.general.html @@ -109,7 +109,7 @@ look *<account&g
    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    @@ -247,7 +247,7 @@ inv

    -aliases = ['i', 'inv']
    +aliases = ['inv', 'i']
    @@ -497,7 +497,7 @@ placing it in their inventory.

    -aliases = ["'", '"']
    +aliases = ['"', "'"]
    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 868e9d6ed4..9ab9d84d9a 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 = ['listobjs', 'stats', 'db', 'listobjects']
    +aliases = ['listobjs', 'listobjects', 'db', 'stats']
    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 62ba845749..b39dc0f048 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', 'co', 'con']
    +aliases = ['co', 'con', 'conn']
    @@ -115,7 +115,7 @@ create “account name” “pass word”

    -aliases = ['cr', 'cre']
    +aliases = ['cre', 'cr']
    diff --git a/docs/0.9.5/api/evennia.contrib.chargen.html b/docs/0.9.5/api/evennia.contrib.chargen.html index d12901c845..e7f84087a5 100644 --- a/docs/0.9.5/api/evennia.contrib.chargen.html +++ b/docs/0.9.5/api/evennia.contrib.chargen.html @@ -79,7 +79,7 @@ at them with this command.

    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    diff --git a/docs/0.9.5/api/evennia.contrib.clothing.html b/docs/0.9.5/api/evennia.contrib.clothing.html index 68cdbe13fa..e1d032f019 100644 --- a/docs/0.9.5/api/evennia.contrib.clothing.html +++ b/docs/0.9.5/api/evennia.contrib.clothing.html @@ -600,7 +600,7 @@ inv

    -aliases = ['i', 'inv']
    +aliases = ['inv', 'i']
    diff --git a/docs/0.9.5/api/evennia.contrib.dice.html b/docs/0.9.5/api/evennia.contrib.dice.html index 31f97ae1cb..6dc941e2e3 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 = ['roll', '@dice']
    +aliases = ['@dice', 'roll']
    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 8962dac44c..ed47397df5 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', 'co', 'con']
    +aliases = ['co', 'con', 'conn']
    @@ -123,7 +123,7 @@ there is no object yet before the account has logged in)

    -aliases = ['cr', 'cre']
    +aliases = ['cre', 'cr']
    diff --git a/docs/0.9.5/api/evennia.contrib.extended_room.html b/docs/0.9.5/api/evennia.contrib.extended_room.html index 82cd005b3a..06d3ab50ad 100644 --- a/docs/0.9.5/api/evennia.contrib.extended_room.html +++ b/docs/0.9.5/api/evennia.contrib.extended_room.html @@ -278,7 +278,7 @@ look *<account&g
    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    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 43cb95ffd7..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 = ['@calls', '@callback', '@callbacks']
    +aliases = ['@calls', '@callbacks', '@callback']
    diff --git a/docs/0.9.5/api/evennia.contrib.rpsystem.html b/docs/0.9.5/api/evennia.contrib.rpsystem.html index 80729fb150..e6d1f41232 100644 --- a/docs/0.9.5/api/evennia.contrib.rpsystem.html +++ b/docs/0.9.5/api/evennia.contrib.rpsystem.html @@ -625,7 +625,7 @@ a different language.

    -aliases = ["'", '"']
    +aliases = ['"', "'"]
    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 4383f10009..c337ec3963 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 = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    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 a9e6929a11..76ba8cab38 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 = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    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 c58f087ca3..5a993996d6 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 = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    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 45e59490ce..9d00e31190 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 = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    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 91da9c133f..bbd3dfc46f 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 = ['hold', 'wait']
    +aliases = ['wait', 'hold']
    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 583166be95..1c73dfe6f6 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', 'press button', 'push']
    +aliases = ['push', 'press', 'press button']
    @@ -155,7 +155,7 @@ lid-state respectively.

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

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

    -aliases = ['listen', 'get', 'feel', 'ex', 'examine', 'l']
    +aliases = ['feel', 'ex', 'listen', 'get', 'examine', 'l']
    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 015d847cab..a1e187b3c6 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 = ['light', 'burn']
    +aliases = ['burn', 'light']
    @@ -479,7 +479,7 @@ shift green root up/down

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

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

    -aliases = ['defend', 'parry', 'slash', 'hit', 'bash', 'stab', 'pierce', 'fight', 'thrust', 'kill', 'chop']
    +aliases = ['slash', 'hit', 'thrust', 'bash', 'defend', 'parry', 'fight', 'kill', 'pierce', 'chop', 'stab']
    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 564b95732c..0bcc0d5dee 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 @@ -176,7 +176,7 @@ code except for adding in the details.

    -aliases = ['l', 'ls']
    +aliases = ['ls', 'l']
    @@ -822,7 +822,7 @@ to find something.

    -aliases = ['feel around', 'search', 'feel', 'l', 'fiddle']
    +aliases = ['feel', 'fiddle', 'feel around', '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 2e8cfd4de7..45ad59f10f 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 = [':dw', ':uu', ':fi', ':u', ':', ':<', ':y', ':dd', ':j', ':f', ':A', ':q', ':h', ':S', ':s', '::', ':w', ':I', ':r', ':=', ':::', ':x', ':DD', ':echo', ':p', ':!', ':q!', ':fd', ':>', ':UU', ':wq', ':i']
    +aliases = [':dw', ':<', ':A', ':I', '::', ':i', ':dd', ':s', ':UU', ':DD', ':h', ':>', ':wq', ':q!', ':uu', ':f', ':fi', ':', ':!', ':y', ':S', ':echo', ':x', ':q', ':::', ':p', ':u', ':r', ':w', ':j', ':fd', ':=']
    diff --git a/docs/0.9.5/api/evennia.utils.evmore.html b/docs/0.9.5/api/evennia.utils.evmore.html index d1df618373..5f37d78dfc 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 = ['next', 'abort', 'e', 'n', 'q', 'top', 'back', 'a', 'b', 'quit', 't', 'end']
    +aliases = ['e', 'a', 'back', 'top', 'q', 'quit', 'b', 't', 'abort', 'n', 'end', 'next']
    diff --git a/docs/1.0-dev/.buildinfo b/docs/1.0-dev/.buildinfo index 982993b9a2..04c6fbb1a6 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: 8c9f4b59db1258692e62f50298da9a3e +config: b2fb4b3cadc18ca336a414b8eb2c297f tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/1.0-dev/.vale/write-good/README.html b/docs/1.0-dev/.vale/write-good/README.html index f8196ffa72..2c1e703245 100644 --- a/docs/1.0-dev/.vale/write-good/README.html +++ b/docs/1.0-dev/.vale/write-good/README.html @@ -34,43 +34,8 @@
    +
    -
    -
    - -

    Based on write-good.

    -
    -

    Naive linter for English prose for developers who can’t write good and wanna learn to do other stuff good too.

    -
    -
    The MIT License (MIT)
    -
    -Copyright (c) 2014 Brian Ford
    -
    -Permission is hereby granted, free of charge, to any person obtaining a copy
    -of this software and associated documentation files (the "Software"), to deal
    -in the Software without restriction, including without limitation the rights
    -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    -copies of the Software, and to permit persons to whom the Software is
    -furnished to do so, subject to the following conditions:
    -
    -The above copyright notice and this permission notice shall be included in all
    -copies or substantial portions of the Software.
    -
    -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    -SOFTWARE.
    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +

    Based on write-good.

    +
    +

    Naive linter for English prose for developers who can’t write good and wanna learn to do other stuff good too.

    +
    +
    The MIT License (MIT)
    +
    +Copyright (c) 2014 Brian Ford
    +
    +Permission is hereby granted, free of charge, to any person obtaining a copy
    +of this software and associated documentation files (the "Software"), to deal
    +in the Software without restriction, including without limitation the rights
    +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
    +copies of the Software, and to permit persons to whom the Software is
    +furnished to do so, subject to the following conditions:
    +
    +The above copyright notice and this permission notice shall be included in all
    +copies or substantial portions of the Software.
    +
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
    +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
    +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
    +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
    +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
    +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
    +SOFTWARE.
    +
    +
    + + +
    +
    +
    +
    +
    +
    @@ -253,6 +364,8 @@ automatically puppet the last/available character on connection (legacy MUD styl
  • Add new setting MAX_NR_SIMULTANEUS_PUPPETS - how many puppets the account can run at the same time. Used to limit multi-playing.

  • Make setting MAX_NR_CHARACTERS interact better with the new settings above.

  • +
  • Allow $search funcparser func to search tags and to accept kwargs for more +powerful searches passed into the regular search functions.

  • @@ -937,121 +1050,10 @@ and have no changelogs.

    -
    - -
    +
    +
    @@ -180,67 +237,10 @@ to you, but some things may still be useful.

    -
    - -
    +
    +
    @@ -231,70 +291,10 @@ build steps could be added or removed at this point, adding some features like U -
    - -
    +
    -
    -
    - -
    -

    Continuous integration with Travis

    -

    Travis CI is an online service for checking, validating and potentially -deploying code automatically. It can check that every commit is building successfully after every -commit to its Github repository.

    -

    If your game is open source on Github you may use Travis for free. -See [the Travis docs](https://docs.travis-ci.com/user/getting- started/) for how to get started.

    -

    After logging in you will get to point Travis to your repository on github. One further thing you -need to set up yourself is a Travis config file named .travis.yml (note the initial period .). -This should be created in the root of your game directory. The idea with this file is that it -describes what Travis needs to import and build in order to create an instance of Evennia from -scratch and then run validation tests on it. Here is an example:

    -
    language: python
    -python:
    -  - "3.10"
    -install:
    -  - git clone https://github.com/evennia/evennia.git
    -  - cd evennia
    -  - pip install -e .
    -  - cd $TRAVIS_BUILD_DIR
    -script:
    -  - evennia migrate
    -  - evennia test --settings settings.py .
    -
    -
    -

    This will tell travis how to download Evennia, install it, set up a database and then run -your own test suite (inside the game dir). Use evennia test evennia if you also want to -run the Evennia full test suite.

    -

    You need to add this file to git (git add .travis.yml) and then commit your changes before Travis -will be able to see it.

    -

    For properly testing your game you of course also need to write unittests. -The Unit testing doc page gives some ideas on how to set those up for Evennia. -You should be able to refer to that for making tests fitting your game.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Continuous integration with Travis

    +

    Travis CI is an online service for checking, validating and potentially +deploying code automatically. It can check that every commit is building successfully after every +commit to its Github repository.

    +

    If your game is open source on Github you may use Travis for free. +See [the Travis docs](https://docs.travis-ci.com/user/getting- started/) for how to get started.

    +

    After logging in you will get to point Travis to your repository on github. One further thing you +need to set up yourself is a Travis config file named .travis.yml (note the initial period .). +This should be created in the root of your game directory. The idea with this file is that it +describes what Travis needs to import and build in order to create an instance of Evennia from +scratch and then run validation tests on it. Here is an example:

    +
    language: python
    +python:
    +  - "3.10"
    +install:
    +  - git clone https://github.com/evennia/evennia.git
    +  - cd evennia
    +  - pip install -e .
    +  - cd $TRAVIS_BUILD_DIR
    +script:
    +  - evennia migrate
    +  - evennia test --settings settings.py .
    +
    +
    +

    This will tell travis how to download Evennia, install it, set up a database and then run +your own test suite (inside the game dir). Use evennia test evennia if you also want to +run the Evennia full test suite.

    +

    You need to add this file to git (git add .travis.yml) and then commit your changes before Travis +will be able to see it.

    +

    For properly testing your game you of course also need to write unittests. +The Unit testing doc page gives some ideas on how to set those up for Evennia. +You should be able to refer to that for making tests fitting your game.

    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    Continuous Integration

    -

    One of the advantages of Evennia over traditional MU* development systems is that Evennia can -integrate into enterprise-level integration environments and source control.

    -
    -

    What is Continuous Integration (CI)?

    -

    Continuous Integration (CI) is a development -practice that requires developers to integrate code into a shared repository. -Each check-in is then verified by an automated build, allowing teams to detect problems early. This -can be set up to safely deploy data to a production server only after tests have passed, for example.

    -

    For Evennia, continuous integration allows an automated build process to:

    -
      -
    • Pull down a latest build from Source Control.

    • -
    • Run migrations on the backing SQL database.

    • -
    • Automate additional unique tasks for that project.

    • -
    • Run unit tests.

    • -
    • Publish those files to the server directory

    • -
    • Reload the game.

    • -
    -
    -
    -

    List of continuous integration tools

    -

    There are a lot of tools and services providing CI functionality. Here are a few that people have used -with Evennia:

    - -

    This is an overview of other tools -(external link).

    -
    -
    - - -
    -
    -
    -
    -

    Table of Contents

    +

    Table of Contents

    -
    +
    +
    + +
    +

    Continuous Integration

    +

    One of the advantages of Evennia over traditional MU* development systems is that Evennia can +integrate into enterprise-level integration environments and source control.

    +
    +

    What is Continuous Integration (CI)?

    +

    Continuous Integration (CI) is a development +practice that requires developers to integrate code into a shared repository. +Each check-in is then verified by an automated build, allowing teams to detect problems early. This +can be set up to safely deploy data to a production server only after tests have passed, for example.

    +

    For Evennia, continuous integration allows an automated build process to:

    +
      +
    • Pull down a latest build from Source Control.

    • +
    • Run migrations on the backing SQL database.

    • +
    • Automate additional unique tasks for that project.

    • +
    • Run unit tests.

    • +
    • Publish those files to the server directory

    • +
    • Reload the game.

    • +
    +
    +
    +

    List of continuous integration tools

    +

    There are a lot of tools and services providing CI functionality. Here are a few that people have used +with Evennia:

    + +

    This is an overview of other tools +(external link).

    +
    +
    + + +
    +
    + +
    +
    +
    @@ -291,74 +355,10 @@ For this, actual real-game testing is required.

    -
    - -
    + - -
    +
    +
    @@ -147,66 +203,10 @@ any.

    -
    - -
    +
    +
    @@ -225,69 +284,10 @@ mode instead, see its readme for install instructions.

    -
    - -
    +
    +
    @@ -122,65 +177,10 @@ allowed.

    -
    - -
    +
    +
    @@ -144,77 +211,10 @@ over
    - -
    +
    +
    @@ -414,74 +478,10 @@ commands having any combination of the keys and/or aliases “kick”, “punch -
    - -
    +
    + - -
    +
    +
    @@ -352,69 +411,10 @@ than, the doc-strings of each component in the -
    - -
    +
    +
    @@ -84,65 +139,10 @@ tutorial section on how to add new commands to a default command set.

    -
    - -
    +
    +
    @@ -145,57 +192,10 @@ with
    - -
    +
    +
    @@ -225,69 +284,10 @@ editor can be useful if you want to test the code you have typed but add new lin -
    - -
    + - -
    +
    +
    @@ -83,65 +138,10 @@ paging.

    -
    - -
    - -
    +
    +
    @@ -230,80 +300,10 @@ add more. By default the following fields/attributes can be monitored:

    -
    - -
    +
    +
    @@ -119,65 +174,10 @@ the monitor to remove:

    -
    - -
    +
    +
    @@ -136,69 +195,10 @@ it.

    -
    - -
    +
    +
    @@ -162,66 +218,10 @@ basically the unchanged strings you enter to the
    - -
    +
    +
    @@ -280,73 +343,10 @@ and display this as an error message. If this is not found, the Exit will instea -
    - -
    +
    -
    -
    - -
    -

    Outputfuncs

    -

    TODO. For now info about outputfuncs are found in OOB.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Outputfuncs

    +

    TODO. For now info about outputfuncs are found in OOB.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -238,74 +302,10 @@ affectable by locks.

    -
    - -
    +
    -
    -
    - -
    -

    Portal And Server

    -

    Evennia consists of two processes, known as Portal and Server. They can be controlled from -inside the game or from the command line as described here.

    -

    If you are new to the concept, the main purpose of separating the two is to have accounts connect to -the Portal but keep the MUD running on the Server. This way one can restart/reload the game (the -Server part) without Accounts getting disconnected.

    -

    ![portal and server layout](https://474a3b9f-a-62cb3a1a-s- -sites.googlegroups.com/site/evenniaserver/file-cabinet/evennia_server_portal.png)

    -

    The Server and Portal are glued together via an AMP (Asynchronous Messaging Protocol) connection. -This allows the two programs to communicate seamlessly.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Portal And Server

    +

    Evennia consists of two processes, known as Portal and Server. They can be controlled from +inside the game or from the command line as described here.

    +

    If you are new to the concept, the main purpose of separating the two is to have accounts connect to +the Portal but keep the MUD running on the Server. This way one can restart/reload the game (the +Server part) without Accounts getting disconnected.

    +

    ![portal and server layout](https://474a3b9f-a-62cb3a1a-s- +sites.googlegroups.com/site/evenniaserver/file-cabinet/evennia_server_portal.png)

    +

    The Server and Portal are glued together via an AMP (Asynchronous Messaging Protocol) connection. +This allows the two programs to communicate seamlessly.

    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    Server component

    -

    TODO: This is currently in Portal-and-Server.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Server component

    +

    TODO: This is currently in Portal-and-Server.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -230,70 +290,10 @@ module for details on the capabilities of the
    - -
    +
    +
    @@ -161,66 +217,10 @@ decorator (only relevant for unit testing)

    -
    - -
    +
    +
    @@ -162,68 +220,10 @@ same time without input from something else.

    -
    - -
    +
    +
    @@ -163,66 +219,10 @@ copy over evennia/w -
    - -
    +
    +
    @@ -121,68 +179,10 @@ come back or you reload it manually in your browser.

    -
    - -
    +
    +
    @@ -256,70 +316,10 @@ your own liking.

    -
    - -
    +
    +
    @@ -191,74 +255,10 @@ objects on the fly. For advanced users.

    -
    - -
    +
    +
    @@ -150,67 +207,10 @@ started/introduction/) or read one of our other web tutorials.

    -
    - -
    +
    +
    @@ -120,67 +177,10 @@ levels. Note that you cannot escalate your permissions this way; If the Characte -
    - -
    +
    +
    @@ -398,71 +459,10 @@ worth checking out for inspiration.

    -
    - -
    +
    -
    -
    - - - - -
    -
    -
    -
    -
    +
    +
    + + + + +
    +
    +
    +
    +
    +
    @@ -224,70 +284,10 @@ use of ANSI color tags and the pitfalls of mixing ANSI and Xterms256 color tags -
    - -
    +
    +
    @@ -189,69 +248,10 @@ -
    - -
    +
    +
    @@ -269,71 +330,10 @@ ways.

    -
    - -
    +
    -
    -
    - -
    -

    Guest Logins

    -

    Evennia supports guest logins out of the box. A guest login is an anonymous, low-access account -and can be useful if you want users to have a chance to try out your game without committing to -creating a real account.

    -

    Guest accounts are turned off by default. To activate, add this to your game/settings.py file:

    -
    GUEST_ENABLED = True
    -
    -
    -

    Henceforth users can use connect guest (in the default command set) to login with a guest account. -You may need to change your Connection Screen to inform them of this -possibility. Guest accounts work differently from normal accounts - they are automatically deleted -whenever the user logs off or the server resets (but not during a reload). They are literally re- -usable throw-away accounts.

    -

    You can add a few more variables to your settings.py file to customize your guests:

    -
      -
    • BASE_GUEST_TYPECLASS - the python-path to the default typeclass for guests. -Defaults to "typeclasses.accounts.Guest".

    • -
    • PERMISSION_GUEST_DEFAULT - permission level for guest accounts. Defaults to "Guests", -which is the lowest permission level in the hierarchy.

    • -
    • GUEST_START_LOCATION - the #dbref to the starting location newly logged-in guests should -appear at. Defaults to "#2 (Limbo).

    • -
    • GUEST_HOME - guest home locations. Defaults to Limbo as well.

    • -
    • GUEST_LIST - this is a list holding the possible guest names to use when entering the game. The -length of this list also sets how many guests may log in at the same time. By default this is a list -of nine names from "Guest1" to "Guest9".

    • -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Guest Logins

    +

    Evennia supports guest logins out of the box. A guest login is an anonymous, low-access account +and can be useful if you want users to have a chance to try out your game without committing to +creating a real account.

    +

    Guest accounts are turned off by default. To activate, add this to your game/settings.py file:

    +
    GUEST_ENABLED = True
    +
    +
    +

    Henceforth users can use connect guest (in the default command set) to login with a guest account. +You may need to change your Connection Screen to inform them of this +possibility. Guest accounts work differently from normal accounts - they are automatically deleted +whenever the user logs off or the server resets (but not during a reload). They are literally re- +usable throw-away accounts.

    +

    You can add a few more variables to your settings.py file to customize your guests:

    +
      +
    • BASE_GUEST_TYPECLASS - the python-path to the default typeclass for guests. +Defaults to "typeclasses.accounts.Guest".

    • +
    • PERMISSION_GUEST_DEFAULT - permission level for guest accounts. Defaults to "Guests", +which is the lowest permission level in the hierarchy.

    • +
    • GUEST_START_LOCATION - the #dbref to the starting location newly logged-in guests should +appear at. Defaults to "#2 (Limbo).

    • +
    • GUEST_HOME - guest home locations. Defaults to Limbo as well.

    • +
    • GUEST_LIST - this is a list holding the possible guest names to use when entering the game. The +length of this list also sets how many guests may log in at the same time. By default this is a list +of nine names from "Guest1" to "Guest9".

    • +
    +
    + + +
    +
    +
    +
    +
    +
    @@ -226,69 +285,10 @@ Swedish: "Fel medan cmdset laddades: Ingen cmdset-klass med namn '{cla -
    - -
    +
    -
    -
    - -
    -

    Multisession modes

    -

    TODO: This is covered in various places before.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Multisession modes

    +

    TODO: This is covered in various places before.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -290,70 +350,10 @@ lot more information about querying the database.

    -
    - -
    +
    +
    @@ -205,76 +271,10 @@ same example (" -
    - -
    +
    +
    @@ -132,69 +191,10 @@ pseudo-softcode plugin aimed at developers wanting to script their game from ins -
    - -
    +
    +
    @@ -109,65 +164,10 @@ the Wikipedia article
    - -
    +
    -
    -
    - -
    -

    In-text tags parsed by Evennia

    -

    Evennia understands various extra information embedded in text:

    -
      -
    • Colors - Using |r, |n etc can be used to mark parts of text with a color. The color will -become ANSI/XTerm256 color tags for Telnet connections and CSS information for the webclient.

    • -
    • Clickable links - This allows you to provide a text the user can click to execute an -in-game command. This is on the form |lc command |lt text |le.

    • -
    • FuncParser callables - These are full-fledged function calls on the form $funcname(args, kwargs) -that lead to calls to Python functions. The parser can be run with different available callables in different -circumstances. The parser is run on all outgoing messages if settings.FUNCPARSER_PARSE_OUTGOING_MESSAGES_ENABLED=True -(disabled by default).

    • -
    -
    - - -
    -
    -
    -
    +
    +
    +
    @@ -128,65 +183,10 @@ something to the effect of

    -
    - -
    +
    +
    @@ -169,72 +231,10 @@ implementation, the relevant django “applications” in default Evennia are -
    - -
    +
    +
    @@ -97,66 +153,10 @@ properly search the inheritance tree.

    -
    - -
    +
    +
    @@ -263,76 +329,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -121,65 +176,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -157,68 +215,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -86,65 +141,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    -
    -
    - -
    -

    Script example

    -

    Contribution by Griatch, 2012

    -

    Example script for testing. This adds a simple timer that has your -character make small verbal observations at irregular intervals.

    -

    To test, use (in game)

    -
    > script me = contrib.tutorials.bodyfunctions.BodyFunctions
    -
    -
    -
    -

    Notes

    -

    Use scripts me to see the script running on you. Note that even though -the timer ticks down to 0, you will not see an echo every tick (it’s -random if an echo is given on a tick or not).

    -
    -

    This document page is generated from evennia/contrib/tutorials/bodyfunctions/README.md. Changes to this -file will be overwritten, so edit that file rather than this one.

    -
    -
    - - -
    -
    -
    -
    -

    Table of Contents

    +

    Table of Contents

    • Script example
      • Notes
      • @@ -126,7 +99,34 @@ file will be overwritten, so edit that file rather than this one.

    -
    +
    +
    + +
    +

    Script example

    +

    Contribution by Griatch, 2012

    +

    Example script for testing. This adds a simple timer that has your +character make small verbal observations at irregular intervals.

    +

    To test, use (in game)

    +
    > script me = contrib.tutorials.bodyfunctions.BodyFunctions
    +
    +
    +
    +

    Notes

    +

    Use scripts me to see the script running on you. Note that even though +the timer ticks down to 0, you will not see an echo every tick (it’s +random if an echo is given on a tick or not).

    +
    +

    This document page is generated from evennia/contrib/tutorials/bodyfunctions/README.md. Changes to this +file will be overwritten, so edit that file rather than this one.

    +
    +
    + + +
    +
    + +
    +
    +
    @@ -468,102 +560,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -1332,87 +1409,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -158,81 +229,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -136,65 +191,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -106,66 +162,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -237,67 +294,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -104,66 +160,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -323,72 +385,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -97,66 +153,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -113,69 +172,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    -
    -
    - -
    -

    Email-based login system

    -

    Contrib by Griatch, 2012

    -

    This is a variant of the login system that asks for an email-address -instead of a username to login. Note that it does not verify the email, -it just uses it as the identifier rather than a username.

    -

    This used to be the default Evennia login before replacing it with a -more standard username + password system (having to supply an email -for some reason caused a lot of confusion when people wanted to expand -on it. The email is not strictly needed internally, nor is any -confirmation email sent out anyway).

    -
    -

    Installation

    -

    To your settings file, add/edit the line:

    -
    CMDSET_UNLOGGEDIN = "contrib.base_systems.email_login.UnloggedinCmdSet"
    -CONNECTION_SCREEN_MODULE = "contrib.base_systems.email_login.connection_screens"
    -
    -
    -
    -

    That’s it. Reload the server and reconnect to see it.

    -
    -
    -

    Notes:

    -

    If you want to modify the way the connection screen looks, point -CONNECTION_SCREEN_MODULE to your own module. Use the default as a -guide (see also Evennia docs).

    -
    -

    This document page is generated from evennia/contrib/base_systems/email_login/README.md. Changes to this -file will be overwritten, so edit that file rather than this one.

    -
    -
    - - -
    -
    -
    -
    -

    Table of Contents

    +

    Table of Contents

    -
    +
    +
    + +
    +

    Email-based login system

    +

    Contrib by Griatch, 2012

    +

    This is a variant of the login system that asks for an email-address +instead of a username to login. Note that it does not verify the email, +it just uses it as the identifier rather than a username.

    +

    This used to be the default Evennia login before replacing it with a +more standard username + password system (having to supply an email +for some reason caused a lot of confusion when people wanted to expand +on it. The email is not strictly needed internally, nor is any +confirmation email sent out anyway).

    +
    +

    Installation

    +

    To your settings file, add/edit the line:

    +
    CMDSET_UNLOGGEDIN = "contrib.base_systems.email_login.UnloggedinCmdSet"
    +CONNECTION_SCREEN_MODULE = "contrib.base_systems.email_login.connection_screens"
    +
    +
    +
    +

    That’s it. Reload the server and reconnect to see it.

    +
    +
    +

    Notes:

    +

    If you want to modify the way the connection screen looks, point +CONNECTION_SCREEN_MODULE to your own module. Use the default as a +guide (see also Evennia docs).

    +
    +

    This document page is generated from evennia/contrib/base_systems/email_login/README.md. Changes to this +file will be overwritten, so edit that file rather than this one.

    +
    +
    + + +
    +
    + +
    +
    -
    -
    - -
    -

    EvAdventure

    -

    Contrib by Griatch 2022

    -

    A complete example MUD using Evennia. This is the final result of what is -implemented if you follow the Getting-Started tutorial. It’s recommended -that you follow the tutorial step by step and write your own code. But if -you prefer you can also pick apart or use this as a starting point for your -own game.

    -
    -

    Features

    -
      -
    • Uses a MUD-version of the Knave old-school -fantasy ruleset by Ben Milton (classless and overall compatible with early -edition D&D), released under the Creative Commons Attribution (all uses, -including commercial are allowed -as long as attribution is given).

    • -
    • Character creation using an editable character sheet

    • -
    • Weapons, effects, healing and resting

    • -
    • Two alternative combat systems (turn-based and twitch based)

    • -
    • Magic (three spells)

    • -
    • NPC/mobs with simple AI.

    • -
    • Simple Quest system.

    • -
    • Small game world.

    • -
    • Coded using best Evennia practices, with unit tests.

    • -
    -
    -
    -

    Installation

    -

    TODO

    -
    -

    This document page is generated from evennia/contrib/tutorials/evadventure/README.md. Changes to this -file will be overwritten, so edit that file rather than this one.

    -
    -
    - - -
    -
    -
    -
    -

    Table of Contents

    +

    Table of Contents

    • EvAdventure
      • Features
      • @@ -142,7 +100,55 @@ file will be overwritten, so edit that file rather than this one.

    -
    +
    +
    + +
    +

    EvAdventure

    +

    Contrib by Griatch 2022

    +
    +

    Warning

    +

    NOTE - this tutorial is WIP and NOT complete! It was put on hold to focus on +releasing Evennia 1.0. You will still learn things from it, but don’t expect +perfection.

    +
    +

    A complete example MUD using Evennia. This is the final result of what is +implemented if you follow the Getting-Started tutorial. It’s recommended +that you follow the tutorial step by step and write your own code. But if +you prefer you can also pick apart or use this as a starting point for your +own game.

    +
    +

    Features

    +
      +
    • Uses a MUD-version of the Knave old-school +fantasy ruleset by Ben Milton (classless and overall compatible with early +edition D&D), released under the Creative Commons Attribution (all uses, +including commercial are allowed +as long as attribution is given).

    • +
    • Character creation using an editable character sheet

    • +
    • Weapons, effects, healing and resting

    • +
    • Two alternative combat systems (turn-based and twitch based)

    • +
    • Magic (three spells)

    • +
    • NPC/mobs with simple AI.

    • +
    • Simple Quest system.

    • +
    • Small game world.

    • +
    • Coded using best Evennia practices, with unit tests.

    • +
    +
    +
    +

    Installation

    +

    TODO

    +
    +

    This document page is generated from evennia/contrib/tutorials/evadventure/README.md. Changes to this +file will be overwritten, so edit that file rather than this one.

    +
    +
    + + +
    +
    + +
    +
    +
    @@ -165,73 +228,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -125,72 +187,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    - -
    + - -
    +
    +
    @@ -97,65 +152,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -328,71 +389,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    -
    -
    - - - - -
    -
    -
    -
    -

    Table of Contents

    +

    Table of Contents

    -
    +
    +
    + + + + +
    +
    + +
    +
    -
    -
    - -
    -

    TutorialMirror

    -

    Contribution by Griatch, 2017

    -

    A simple mirror object to experiment with. It will respond to being looked at.

    -
      -
    • echoes back the description of the object looking at it

    • -
    • echoes back whatever is being sent to its .msg - to the -sender, if given, otherwise to the location of the mirror.

    • -
    -
    -

    Installation

    -

    Create the mirror with

    -
    create/drop mirror:contrib.tutorials.mirror.TutorialMirror
    -
    -
    -

    Then look at it.

    -
    -

    This document page is generated from evennia/contrib/tutorials/mirror/README.md. Changes to this -file will be overwritten, so edit that file rather than this one.

    -
    -
    - - -
    -
    -
    -
    -

    Table of Contents

    +

    Table of Contents

    -
    +
    +
    + +
    +

    TutorialMirror

    +

    Contribution by Griatch, 2017

    +

    A simple mirror object to experiment with. It will respond to being looked at.

    +
      +
    • echoes back the description of the object looking at it

    • +
    • echoes back whatever is being sent to its .msg - to the +sender, if given, otherwise to the location of the mirror.

    • +
    +
    +

    Installation

    +

    Create the mirror with

    +
    create/drop mirror:contrib.tutorials.mirror.TutorialMirror
    +
    +
    +

    Then look at it.

    +
    +

    This document page is generated from evennia/contrib/tutorials/mirror/README.md. Changes to this +file will be overwritten, so edit that file rather than this one.

    +
    +
    + + +
    +
    + +
    +
    -
    -
    - -
    -

    Evennia Multidescer

    -

    Contribution by Griatch 2016

    -

    A “multidescer” is a concept from the MUSH world. It allows for -creating, managing and switching between multiple character -descriptions and is a way for quickly managing your look (such as when -changing clothes) in more free-form roleplaying systems. This will also -work well together with the rpsystem contrib.

    -

    This multidescer will not -require any changes to the Character class, rather it will use the multidescs -Attribute (a list) and create it if it does not exist.

    -
    -

    Installation

    -

    Edit mygame/commands/default_cmdsets.py and add -from evennia.contrib.game_systems.multidescer import CmdMultiDesc to the top.

    -

    Next, look up the at_cmdset_create method of the CharacterCmdSet -class and add a line self.add(CmdMultiDesc()) to the end -of it.

    -

    Reload the server and you should have the +desc command available (it -will replace the default desc command).

    -
    -

    This document page is generated from evennia/contrib/game_systems/multidescer/README.md. Changes to this -file will be overwritten, so edit that file rather than this one.

    -
    -
    - - -
    -
    -
    -
    -

    Table of Contents

    +

    Table of Contents

    -
    +
    +
    + +
    +

    Evennia Multidescer

    +

    Contribution by Griatch 2016

    +

    A “multidescer” is a concept from the MUSH world. It allows for +creating, managing and switching between multiple character +descriptions and is a way for quickly managing your look (such as when +changing clothes) in more free-form roleplaying systems. This will also +work well together with the rpsystem contrib.

    +

    This multidescer will not +require any changes to the Character class, rather it will use the multidescs +Attribute (a list) and create it if it does not exist.

    +
    +

    Installation

    +

    Edit mygame/commands/default_cmdsets.py and add +from evennia.contrib.game_systems.multidescer import CmdMultiDesc to the top.

    +

    Next, look up the at_cmdset_create method of the CharacterCmdSet +class and add a line self.add(CmdMultiDesc()) to the end +of it.

    +

    Reload the server and you should have the +desc command available (it +will replace the default desc command).

    +
    +

    This document page is generated from evennia/contrib/game_systems/multidescer/README.md. Changes to this +file will be overwritten, so edit that file rather than this one.

    +
    +
    + + +
    +
    + +
    +
    +
    @@ -120,65 +175,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    -
    +
    +
    + +
    +

    Talkative NPC example

    +

    Contribution by Griatch 2011. Updated by grungies1138, 2016

    +

    This is an example of a static NPC object capable of holding a simple menu-driven +conversation. Suitable for example as a quest giver or merchant.

    +
    +

    Installation

    +

    Create the NPC by creating an object of typeclass contrib.tutorials.talking_npc.TalkingNPC, +For example:

    +
    create/drop John : contrib.tutorials.talking_npc.TalkingNPC
    +
    +
    +

    Use talk in the same room as the NPC to start a conversation.

    +

    If there are many talkative npcs in the same room you will get to choose which +one’s talk command to call (Evennia handles this automatically).

    +

    This use of EvMenu is very simplistic; See EvMenu for a lot more complex +possibilities.

    +
    +

    This document page is generated from evennia/contrib/tutorials/talking_npc/README.md. Changes to this +file will be overwritten, so edit that file rather than this one.

    +
    +
    + + +
    +
    + +
    +
    +
    @@ -463,83 +536,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -207,57 +254,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -105,57 +152,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -146,68 +204,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -115,65 +170,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -161,69 +220,10 @@ file will be overwritten, so edit that file rather than this one.

    -
    - -
    +
    +
    @@ -99,16 +188,15 @@ doing

    This will install all optional requirements of Evennia.

    -
  • Import and add the evennia.contrib.commands.XYZGridCmdSet to the +

  • Import and add the evennia.contrib.grid.xyzgrid.commands.XYZGridCmdSet to the CharacterCmdset cmdset in mygame/commands.default_cmds.py. Reload the server. This makes the map, goto/path and the modified teleport and open commands available in-game.

  • + +
    1. Edit mygame/server/conf/settings.py and add

      -
      EXTRA_LAUNCHER_COMMANDS['xyzgrid'] = 'evennia.contrib.launchcmd.xyzcommand'
      -
      -
      -

      and

      -
      PROTOTYPE_MODULES += [’evennia.contrib.grid.xyzgrid.prototypes’]
      +
      EXTRA_LAUNCHER_COMMANDS['xyzgrid'] = 'evennia.contrib.grid.xyzgrid.launchcmd.xyzcommand'
      +PROTOTYPE_MODULES += ['evennia.contrib.grid.xyzgrid.prototypes']
       

      This will add the new ability to enter evennia xyzgrid <option> on the @@ -1482,99 +1570,10 @@ file will be overwritten, so edit that file rather than this one.

      -
    - -
    +
    +
    @@ -492,11 +616,12 @@ character make small verbal observations at irregular intervals.

    Contrib: evadventure

    Contrib by Griatch 2022

    -

    A complete example MUD using Evennia. This is the final result of what is -implemented if you follow the Getting-Started tutorial. It’s recommended -that you follow the tutorial step by step and write your own code. But if -you prefer you can also pick apart or use this as a starting point for your -own game.

    +
    +

    Warning

    +

    NOTE - this tutorial is WIP and NOT complete! It was put on hold to focus on +releasing Evennia 1.0. You will still learn things from it, but don’t expect +perfection.

    +

    Read the documentation - Browse the Code

    @@ -540,6 +665,7 @@ and more.

    +
    +

    Contrib: git_integration

    +

    Contribution by helpme (2022)

    +

    A module to integrate a stripped-down version of git within the game, allowing developers to view their git status, change branches, and pull updated code of both their local mygame repo and Evennia core. After a successful pull or checkout, the git command will reload the game: Manual restarts may be required to to apply certain changes that would impact persistent scripts etc.

    +

    Read the documentation - Browse the Code

    +

    Contrib: name_generator

    Contribution by InspectorCaracal (2022)

    @@ -597,133 +729,10 @@ will be overwritten.

    -
    - -
    - -
    +
    +
    @@ -168,76 +234,10 @@ game-specific contributions and plugins (
    - -
    +
    +
    @@ -420,89 +499,10 @@ activated whenever you want to use the
    - -
    +
    +
    @@ -800,69 +859,10 @@ mixing them, or even try a third solution that better fits what you have in mind -
    - -
    +
    +
    @@ -914,71 +975,10 @@ Click here to expand a list of all Beginner-Tutorial sections (all parts). -
    - -
    +
    +
    @@ -439,70 +499,10 @@ get into how we replace and extend Evennia’s default Commands.

    -
    - -
    +
    +
    @@ -101,66 +157,10 @@ You can find the parent class for Accounts in
    - -
    +
    +
    @@ -183,66 +239,10 @@ to look it up in the docs:

    -
    - -
    + - -
    +
    +
    @@ -194,66 +250,10 @@ these concepts in the context of Evennia before.

    -
    - -
    + - -
    + - -
    +
    +
    @@ -167,70 +227,10 @@ move on with how to access this power through code.

    -
    - -
    +
    +
    @@ -177,66 +233,10 @@ and “what to think about” when creating a multiplayer online text game.

    -
    - -
    +
    +
    @@ -446,116 +552,10 @@ playable game!

    -
    - -
    +
    +
    @@ -187,72 +249,10 @@ then try to answer those questions for the sake of creating our little tutorial -
    - -
    +
    -
    -
    - -
    -

    In-game Commands

    -
    -

    Warning

    -

    This part of the Beginner tutorial is still being developed.

    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    In-game Commands

    +
    +

    Warning

    +

    This part of the Beginner tutorial is still being developed.

    +
    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    Dynamically generated Dungeon

    -
    -

    Warning

    -

    This part of the Beginner tutorial is still being developed.

    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Dynamically generated Dungeon

    +
    +

    Warning

    +

    This part of the Beginner tutorial is still being developed.

    +
    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    Non-Player-Characters (NPCs)

    -
    -

    Warning

    -

    This part of the Beginner tutorial is still being developed.

    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Non-Player-Characters (NPCs)

    +
    +

    Warning

    +

    This part of the Beginner tutorial is still being developed.

    +
    +
    + + +
    +
    +
    +
    +
    +
    @@ -218,66 +274,10 @@ of experience using Evennia and be really helpful for doing your own thing later -
    - -
    +
    -
    -
    - -
    -

    Game Quests

    -
    -

    Warning

    -

    This part of the Beginner tutorial is still being developed.

    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Game Quests

    +
    +

    Warning

    +

    This part of the Beginner tutorial is still being developed.

    +
    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    In-game Rooms

    -
    -

    Warning

    -

    This part of the Beginner tutorial is still being developed.

    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    In-game Rooms

    +
    +

    Warning

    +

    This part of the Beginner tutorial is still being developed.

    +
    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    In-game Shops

    -
    -

    Warning

    -

    This part of the Beginner tutorial is still being developed.

    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    In-game Shops

    +
    +

    Warning

    +

    This part of the Beginner tutorial is still being developed.

    +
    +
    + + +
    +
    +
    +
    +
    +
    @@ -337,72 +399,10 @@ small modules and even making your first unit test, you are off to a great start -
    - -
    +
    +
    @@ -87,66 +143,10 @@ and batchcode processors.

    -
    - -
    +
    +
    @@ -138,67 +195,10 @@ to.

    -
    - -
    +
    +
    @@ -104,66 +160,10 @@ to bring your game online so you can invite your first players.

    -
    - -
    +
    +
    @@ -159,68 +217,10 @@ works and what possibilities exist.

    -
    - -
    +
    +
    @@ -278,70 +338,10 @@ shooting goodness would be made available to you only when you enter it.

    -
    - -
    + - -
    +
    +
    @@ -142,66 +198,10 @@ other types of attacks for a while before the warrior can recover.

    -
    - -
    +
    +
    @@ -437,72 +499,10 @@ callback when the server comes back up (it will resume the countdown and ignore -
    - -
    +
    +
    @@ -164,69 +223,10 @@ directly the easiest way is to just wrap those with a multiple inheritance to yo -
    - -
    +
    +
    @@ -381,73 +444,10 @@ square (E, G, M and O) are not in this circle. So we remove them.

    -
    - -
    +
    +
    @@ -170,66 +226,10 @@ with its alias ‘north’. So the -
    - -
    +
    +
    @@ -509,71 +570,10 @@ also look into up/down directions and figure out how to display that in a good w -
    - -
    +
    +
    @@ -228,67 +285,10 @@ your mob.

    -
    - -
    - -
    + - -
    +
    +
    @@ -155,72 +217,10 @@ in mind for your own game, this will give you a good start.

    -
    - -
    +
    +
    @@ -309,71 +370,10 @@ your rules -
    - -
    +
    +
    @@ -205,68 +263,10 @@ regardless of if Evennia thinks their client supports it or not.

    -
    - -
    +
    +
    @@ -138,67 +195,10 @@ the following message in the elevator’s appearance:
    - -
    +
    +
    @@ -367,72 +429,10 @@ it well stocked.

    -
    - -
    +
    +
    @@ -438,70 +498,10 @@ Tutorial), -
    - -
    +
    +
    @@ -160,57 +207,10 @@ AI code).

    -
    - -
    +
    +
    @@ -150,65 +205,10 @@ Which way to go depends on the design requirements of your particular game.

    -
    - -
    +
    +
    @@ -142,57 +189,10 @@ as mygame/typeclass -
    - -
    - -
    +
    +
    @@ -210,66 +266,10 @@ push it over the limit, so to speak.

    -
    - -
    +
    +
    @@ -96,57 +143,10 @@ weather came before it. Expanding it to be more realistic is a useful exercise.< -
    - -
    + - -
    +
    +
    @@ -254,57 +301,10 @@ here.

    -
    - -
    +
    -
    -
    - -
    -

    Licensing Q&A

    -

    Evennia is licensed under the very friendly BSD -(3-clause) license. You can find the license as -LICENSE.txt in the Evennia -repository’s root.

    -

    Q: When creating a game using Evennia, what does the license permit me to do with it?

    -

    A: It’s your own game world to do with as you please! Keep it to yourself or re-distribute it -under another license of your choice - or sell it and become filthy rich for all we care.

    -

    Q: I have modified the Evennia library itself, what does the license say about that?

    -

    A: Our license allows you to do whatever you want with your modified Evennia, including -re-distributing or selling it, as long as you include our license and copyright info found in -LICENSE.txt along with your distribution.

    -

    … Of course, if you fix bugs or add some new snazzy feature we softly nudge you to make those -changes available so they can be added to the core Evennia package for everyone’s benefit. The -license doesn’t require you to do it, but that doesn’t mean we won’t still greatly appreciate it -if you do!

    -

    Q: Can I re-distribute the Evennia server package along with my custom game implementation?

    -

    A: Sure. As long as the text in LICENSE.txt is included.

    -

    Q: What about Contributions?

    -

    The contributions in evennia/evennia/contrib are considered to be released under the same license -as Evennia itself, unless the individual contributor has specifically defined otherwise.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Licensing Q&A

    +

    Evennia is licensed under the very friendly BSD +(3-clause) license. You can find the license as +LICENSE.txt in the Evennia +repository’s root.

    +

    Q: When creating a game using Evennia, what does the license permit me to do with it?

    +

    A: It’s your own game world to do with as you please! Keep it to yourself or re-distribute it +under another license of your choice - or sell it and become filthy rich for all we care.

    +

    Q: I have modified the Evennia library itself, what does the license say about that?

    +

    A: Our license allows you to do whatever you want with your modified Evennia, including +re-distributing or selling it, as long as you include our license and copyright info found in +LICENSE.txt along with your distribution.

    +

    … Of course, if you fix bugs or add some new snazzy feature we softly nudge you to make those +changes available so they can be added to the core Evennia package for everyone’s benefit. The +license doesn’t require you to do it, but that doesn’t mean we won’t still greatly appreciate it +if you do!

    +

    Q: Can I re-distribute the Evennia server package along with my custom game implementation?

    +

    A: Sure. As long as the text in LICENSE.txt is included.

    +

    Q: What about Contributions?

    +

    The contributions in evennia/evennia/contrib are considered to be released under the same license +as Evennia itself, unless the individual contributor has specifically defined otherwise.

    +
    + + +
    +
    +
    +
    + - -
    +
    +
    @@ -207,69 +266,10 @@ parameter to disable it for that Evennia account permanently.

    -
    - -
    +
    +
    @@ -119,67 +176,10 @@ if you are not ready for players yet.

    -
    - -
    +
    +
    @@ -111,66 +167,10 @@ it to your channel in-game.

    -
    - -
    +
    +
    @@ -276,67 +333,10 @@ uncommented in the config file, it will now start as a background process.

    -
    - -
    +
    +
    @@ -149,68 +207,10 @@ help.

    -
    - -
    +
    +
    @@ -127,66 +183,10 @@ name of the IRC channel you used (#evennia here).

    -
    - -
    +
    +
    @@ -179,73 +242,10 @@ killed if your phone is heavily taxed. Termux seems to keep a notification up to -
    - -
    +
    +
    @@ -274,68 +332,10 @@ folders when you use the -
    - -
    +
    -
    -
    - -
    -

    Non-interactive setup

    -

    The first ime you run evennia start (just after having created the database), you will be asked -to interactively insert the superuser username, email and password. If you are deploying Evennia -as part of an automatic build script, you don’t want to enter this information manually.

    -

    You can have the superuser be created automatically by passing environment variables to your -build script:

    -
      -
    • EVENNIA_SUPERUSER_USERNAME

    • -
    • EVENNIA_SUPERUSER_PASSWORD

    • -
    • EVENNIA_SUPERUSER_EMAIL is optional. If not given, empty string is used.

    • -
    -

    These envvars will only be used on the very first server start and then ignored. For example:

    -
    EVENNIA_SUPERUSER_USERNAME=myname EVENNIA_SUPERUSER_PASSWORD=mypwd evennia start
    -
    -
    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Non-interactive setup

    +

    The first ime you run evennia start (just after having created the database), you will be asked +to interactively insert the superuser username, email and password. If you are deploying Evennia +as part of an automatic build script, you don’t want to enter this information manually.

    +

    You can have the superuser be created automatically by passing environment variables to your +build script:

    +
      +
    • EVENNIA_SUPERUSER_USERNAME

    • +
    • EVENNIA_SUPERUSER_PASSWORD

    • +
    • EVENNIA_SUPERUSER_EMAIL is optional. If not given, empty string is used.

    • +
    +

    These envvars will only be used on the very first server start and then ignored. For example:

    +
    EVENNIA_SUPERUSER_USERNAME=myname EVENNIA_SUPERUSER_PASSWORD=mypwd evennia start
    +
    +
    +
    +
    + + +
    +
    +
    +
    +
    +
    @@ -193,71 +254,10 @@ virus software interfering. Try disabling or changing your anti-virus software s -
    - -
    +
    +
    @@ -97,65 +152,10 @@ your imports.

    -
    - -
    +
    +
    @@ -164,71 +225,10 @@ to learn how to start making your new game!

    -
    - -
    + - -
    +
    +
    @@ -95,68 +153,10 @@ same channels as
    - -
    +
    +
    @@ -648,7 +695,7 @@ to change into myga "column_names_color": ("Table column header text.", "Color", "w"), "help_category_color": ("Help category names.", "Color", "n"), "help_entry_color": ("Help entry names.", "Color", "n"), - "timezone": ("Timezone for dates. @tz for a list.", "Timezone", "UTC"), + "timezone": ("Timezone for dates.", "Timezone", "UTC"), } # Modules holding Option classes, responsible for serializing the option and # calling validator functions on it. Same-named functions in modules added @@ -1270,57 +1317,10 @@ to change into myga -
    - -
    +
    +
    @@ -141,66 +197,10 @@ room).

    -
    - -
    +
    +
    @@ -209,67 +266,10 @@ from first install to opening your game to the public.

    -
    - -
    +
    -
    -
    - -
    -

    Unimplemented

    -

    Sorry, but this page has not been written yet.

    -

    Go back or return to the front page.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    Unimplemented

    +

    Sorry, but this page has not been written yet.

    +

    Go back or return to the front page.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -336,44 +370,10 @@ settings = LazySettings()
    -
    - -
    +
    +
    @@ -1413,44 +1447,10 @@ return ManyRelatedManager
    -
    - -
    +
    +
    @@ -254,44 +288,10 @@ return super().get_queryset().none()
    -
    - -
    +
    +
    @@ -2311,44 +2345,10 @@ return iterators
    -
    - -
    +
    +
    @@ -377,44 +411,10 @@ return compiler.compile(where)
    -
    - -
    +
    +
    @@ -480,44 +514,10 @@ return results
    -
    - -
    +
    +
    @@ -471,44 +505,10 @@ )
    -
    - -
    +
    +
    @@ -1887,44 +1921,10 @@ self.delete()
    -
    - -
    +
    +
    @@ -619,44 +653,10 @@ self.ndb.ev_channel.msg(text, senders=self)
    -
    - -
    +
    +
    @@ -253,7 +287,7 @@ Keyword Args: typeclass (str): The typeclass to use for the account. - is_superuser (bool): Wether or not this account is to be a superuser + is_superuser (bool): Whether or not this account is to be a superuser locks (str): Lockstring. permission (list): List of permission strings. tags (list): List of Tags on form `(key, category[, data])` @@ -342,44 +376,10 @@ pass
    -
    - -
    +
    +
    @@ -220,44 +254,10 @@ uid = property(__uid_get, __uid_set, __uid_del)
    -
    - -
    +
    +
    @@ -790,7 +824,7 @@ ) if suggestions: sysarg += _(" Maybe you meant {command}?").format( - command=utils.list_to_string(suggestions, _("or"), addquote=True) + command=utils.list_to_string(suggestions, endsep=_("or"), addquote=True) ) else: sysarg += _(' Type "help" for help.') @@ -838,44 +872,10 @@ _msg_err(error_to, _ERROR_CMDHANDLER)
    -
    - -
    +
    +
    @@ -245,44 +279,10 @@ return matches
    -
    - -
    +
    +
    @@ -745,44 +779,10 @@ pass
    -
    - -
    +
    +
    @@ -707,44 +741,10 @@ self.update()
    -
    - -
    +
    +
    @@ -806,44 +840,10 @@ return self._render_decoration(*args, **kwargs)
    -
    - -
    +
    +
    @@ -1103,44 +1137,10 @@ self.msg("Style %s set to %s" % (self.lhs, result))
    -
    - -
    +
    +
    @@ -647,44 +681,10 @@ self.caller.msg("You have forced %s to: %s" % (targ, self.rhs))
    -
    - -
    +
    +
    @@ -863,44 +897,10 @@ self.add(CmdStateHH())
    -
    - -
    +
    +
    @@ -4449,44 +4483,10 @@ caller.msg(err)
    -
    - -
    +
    +
    @@ -119,44 +153,10 @@ # self.add(comms.CmdCdesc())
    -
    - -
    +
    +
    @@ -134,44 +168,10 @@ self.add(batchprocess.CmdBatchCode())
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.commands.default.cmdset_session

    -"""
    -This module stores session-level commands.
    -"""
    -from evennia.commands.cmdset import CmdSet
    -from evennia.commands.default import account
    -
    -
    -
    [docs]class SessionCmdSet(CmdSet): - """ - Sets up the unlogged cmdset. - """ - - key = "DefaultSession" - priority = -20 - -
    [docs] def at_cmdset_creation(self): - "Populate the cmdset" - self.add(account.CmdSessions())
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.commands.default.cmdset_session

    +"""
    +This module stores session-level commands.
    +"""
    +from evennia.commands.cmdset import CmdSet
    +from evennia.commands.default import account
    +
    +
    +
    [docs]class SessionCmdSet(CmdSet): + """ + Sets up the unlogged cmdset. + """ + + key = "DefaultSession" + priority = -20 + +
    [docs] def at_cmdset_creation(self): + "Populate the cmdset" + self.add(account.CmdSessions())
    +
    + +
    +
    +
    +
    +
    -
    -
    - -

    Source code for evennia.commands.default.cmdset_unloggedin

    -"""
    -This module describes the unlogged state of the default game.
    -The setting STATE_UNLOGGED should be set to the python path
    -of the state instance in this module.
    -"""
    -from evennia.commands.cmdset import CmdSet
    -from evennia.commands.default import unloggedin
    -
    -
    -
    [docs]class UnloggedinCmdSet(CmdSet): - """ - Sets up the unlogged cmdset. - """ - - key = "DefaultUnloggedin" - priority = 0 - -
    [docs] def at_cmdset_creation(self): - "Populate the cmdset" - self.add(unloggedin.CmdUnconnectedConnect()) - self.add(unloggedin.CmdUnconnectedCreate()) - self.add(unloggedin.CmdUnconnectedQuit()) - self.add(unloggedin.CmdUnconnectedLook()) - self.add(unloggedin.CmdUnconnectedHelp()) - self.add(unloggedin.CmdUnconnectedEncoding()) - self.add(unloggedin.CmdUnconnectedScreenreader()) - self.add(unloggedin.CmdUnconnectedInfo())
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.commands.default.cmdset_unloggedin

    +"""
    +This module describes the unlogged state of the default game.
    +The setting STATE_UNLOGGED should be set to the python path
    +of the state instance in this module.
    +"""
    +from evennia.commands.cmdset import CmdSet
    +from evennia.commands.default import unloggedin
    +
    +
    +
    [docs]class UnloggedinCmdSet(CmdSet): + """ + Sets up the unlogged cmdset. + """ + + key = "DefaultUnloggedin" + priority = 0 + +
    [docs] def at_cmdset_creation(self): + "Populate the cmdset" + self.add(unloggedin.CmdUnconnectedConnect()) + self.add(unloggedin.CmdUnconnectedCreate()) + self.add(unloggedin.CmdUnconnectedQuit()) + self.add(unloggedin.CmdUnconnectedLook()) + self.add(unloggedin.CmdUnconnectedHelp()) + self.add(unloggedin.CmdUnconnectedEncoding()) + self.add(unloggedin.CmdUnconnectedScreenreader()) + self.add(unloggedin.CmdUnconnectedInfo())
    +
    + +
    +
    +
    +
    +
    +
    @@ -1956,44 +1990,10 @@ self.msg(f"Grapevine connection created {channel} <-> {grapevine_channel}.")
    -
    - -
    +
    +
    @@ -785,44 +819,10 @@ caller.msg(string)
    -
    - -
    +
    +
    @@ -1069,44 +1103,10 @@ self.msg(f"Error when creating topic '{topicstr}'{aliastxt}! Contact an admin.")
    -
    - -
    +
    +
    @@ -312,44 +346,10 @@ account_caller = True # Using MuxAccountCommand explicitly defaults the caller to an account
    -
    - -
    +
    +
    @@ -147,44 +181,10 @@ at_search_result([match[2] for match in matches], self.caller, query=matches[0][0])
    -
    - -
    +
    +
    @@ -1219,44 +1253,10 @@ self.msg(str(tasks_table) + helptxt)
    -
    - -
    +
    +
    @@ -2119,44 +2153,10 @@ self.call(multimatch, "look", "")
    -
    - -
    +
    +
    @@ -561,44 +595,10 @@ logger.log_trace()
    -
    - -
    +
    +
    @@ -934,44 +968,10 @@ raise RuntimeError("Channel.post_send_message was renamed to Channel.at_post_msg.")
    -
    - -
    +
    +
    @@ -548,44 +582,10 @@ pass
    -
    - -
    +
    +
    @@ -755,44 +789,10 @@ return SubscriptionHandler(self)
    -
    - -
    +
    +
    @@ -687,44 +721,10 @@ self.assertEqual(storage.location, "foo2")
    -
    - -
    +
    +
    @@ -1312,44 +1346,10 @@ menu.open()
    -
    - -
    +
    +
    @@ -219,44 +253,10 @@ self.assertEqual(self.exit.key, "in")
    -
    - -
    +
    +
    @@ -108,44 +142,10 @@ self.assertEqual(bright_map[-1][1], "%c[222")
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.contrib.base_systems.components

    -"""
    -Components - ChrisLR 2022
    -
    -This is a basic Component System.
    -It allows you to use components on typeclasses using a simple syntax.
    -This helps writing isolated code and reusing it over multiple objects.
    -
    -See the docs for more information.
    -"""
    -
    -from evennia.contrib.base_systems.components.component import Component
    -from evennia.contrib.base_systems.components.dbfield import DBField, NDBField, TagField
    -from evennia.contrib.base_systems.components.holder import ComponentHolderMixin, ComponentProperty
    -
    -
    -
    [docs]def get_component_class(component_name): - subclasses = Component.__subclasses__() - component_class = next((sc for sc in subclasses if sc.name == component_name), None) - if component_class is None: - message = ( - f"Component named {component_name} has not been found. " - f"Make sure it has been imported before being used." - ) - raise Exception(message) - - return component_class
    -
    - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -198,44 +232,10 @@ pass
    -
    - -
    +
    +
    @@ -159,44 +193,10 @@ instance.host.tags.clear(category=self._category_key)
    -
    - -
    +
    +
    @@ -355,44 +389,10 @@ pass
    -
    - -
    +
    +
    @@ -254,44 +288,10 @@ self.remove_responder(signal_name=responder_signal_name, callback=callback)
    -
    - -
    +
    +
    @@ -444,44 +478,10 @@ assert not responses
    -
    - -
    +
    +
    @@ -373,44 +407,10 @@ self.start(interval=seconds, force_restart=True)
    -
    - -
    +
    +
    @@ -96,44 +130,10 @@ self.assertEqual(self.timescript.interval, 1700.7699999809265)
    -
    - -
    +
    +
    @@ -360,44 +394,10 @@ self.add(CmdUnconnectedHelp())
    -
    - -
    +
    +
    @@ -82,44 +116,10 @@ self.call(email_login.CmdUnconnectedHelp(), "", "You are not yet logged into the game.")
    -
    - -
    +
    +
    @@ -267,44 +301,10 @@ )
    -
    - -
    +
    +
    @@ -624,44 +658,10 @@ caller.msg("Exited the code editor.")
    -
    - -
    +
    +
    @@ -133,44 +167,10 @@ script.set_task(seconds, obj, event_name)
    -
    - -
    +
    +
    @@ -711,44 +745,10 @@ script.call(obj, callback_name, locals=locals)
    -
    - -
    +
    +
    @@ -615,44 +649,10 @@ self.char2.msg = old_msg
    -
    - -
    +
    +
    @@ -304,44 +338,10 @@ pass
    -
    - -
    +
    +
    @@ -586,44 +620,10 @@ self.add(CmdCdesc())
    -
    - -
    +
    +
    @@ -128,44 +162,10 @@ )
    -
    - -
    +
    +
    @@ -92,44 +126,10 @@ self.assertTrue(any(lin.startswith("dummy: error:") for lin in lines))
    -
    - -
    +
    +
    @@ -340,44 +374,10 @@ raise InterruptCommand
    -
    - -
    +
    +
    @@ -825,44 +859,10 @@ self.add(CmdJumpState())
    -
    - -
    +
    +
    @@ -396,44 +430,10 @@ )
    -
    - -
    +
    +
    @@ -1123,44 +1157,10 @@ return ["sit", "lie", "kneel", "climb"], txt
    -
    - -
    +
    +
    @@ -282,44 +316,10 @@ return f"{self.db.desc}{pos}{admin_only}"
    -
    - -
    +
    +
    @@ -73,44 +107,10 @@ room.delete()
    -
    - -
    +
    +
    @@ -350,44 +384,10 @@ pass
    -
    - -
    +
    +
    @@ -347,44 +381,10 @@ self.assertEqual(next_state, mod.State.next_state)
    -
    - -
    +
    +
    @@ -237,44 +271,10 @@ return text
    -
    - -
    +
    +
    @@ -941,44 +975,10 @@ return
    -
    - -
    +
    +
    @@ -189,44 +223,10 @@ )
    -
    - -
    +
    +
    @@ -786,44 +820,10 @@ self.add(CmdInventory())
    -
    - -
    +
    +
    @@ -175,44 +209,10 @@ self.assertEqual(clothing.single_type_count(clothes_list, "hat"), 1)
    -
    - -
    +
    +
    @@ -250,44 +284,10 @@ self.data = self.obj.attributes.get(self.db_attribute)
    -
    - -
    +
    +
    @@ -189,44 +223,10 @@ self.assertEqual(list(self.handler.data.keys()), ["a", "b", "c", "d"])
    -
    - -
    +
    +
    @@ -1131,44 +1165,10 @@ obj.location = caller
    -
    - -
    +
    +
    @@ -581,44 +615,10 @@ )
    -
    - -
    +
    +
    @@ -741,44 +775,10 @@ )
    -
    - -
    +
    +
    @@ -201,44 +235,10 @@ super().msg(text, from_obj=from_obj, session=session, **kwargs)
    -
    - -
    +
    +
    @@ -72,44 +106,10 @@ mock_msg.assert_called_with("Test her gender", from_obj=None, session=None)
    -
    - -
    +
    +
    @@ -402,44 +436,10 @@ account_caller = False
    -
    - -
    +
    +
    @@ -89,44 +123,10 @@ self.call(mail.CmdMail(), "/delete 2", "Message 2 deleted", caller=self.account)
    -
    - -
    +
    +
    @@ -311,44 +345,10 @@ caller.msg(err)
    -
    - -
    +
    +
    @@ -82,44 +116,10 @@ self.assertEqual(self.char1.db.desc, "test1 Desc 2 Desc 3")
    -
    - -
    +
    +
    @@ -860,44 +894,10 @@ self.add(CmdUsePuzzleParts())
    -
    - -
    +
    +
    @@ -1017,44 +1051,10 @@ self._check_room_contents({"boiling water": 1, "pasta": 2, "boiled egg": 1})
    -
    - -
    +
    +
    @@ -846,44 +880,10 @@ self.add(CmdCombatHelp())
    -
    - -
    +
    +
    @@ -772,44 +806,10 @@ }
    -
    - -
    +
    +
    @@ -1078,44 +1112,10 @@ self.add(CmdUse())
    -
    - -
    +
    +
    @@ -898,44 +932,10 @@ self.add(CmdStatus())
    -
    - -
    +
    +
    @@ -1095,44 +1129,10 @@ self.add(CmdCombatHelp())
    -
    - -
    +
    +
    @@ -658,44 +692,10 @@ self.assertTrue(self.turnhandler.db.fighters == [self.joiner, self.attacker, self.defender])
    -
    - -
    +
    +
    @@ -635,44 +669,10 @@ self.add(CmdExtendedRoomGameTime)
    -
    - -
    +
    +
    @@ -145,44 +179,10 @@ self.call(extended_room.CmdExtendedRoomGameTime(), "", "It's a spring day, in the evening.")
    -
    - -
    +
    +
    @@ -365,44 +399,10 @@ self.add(CmdMap)
    -
    - -
    +
    +
    @@ -236,44 +270,10 @@ self.add(CmdOpenCloseDoor())
    -
    - -
    +
    +
    @@ -71,44 +105,10 @@ )
    -
    - -
    +
    +
    @@ -216,44 +250,10 @@ self.add(CmdStop())
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.contrib.grid.slow_exit.tests

    -"""
    -Slow exit tests.
    -
    -"""
    -
    -from mock import Mock, patch
    -from evennia.commands.default.tests import BaseEvenniaCommandTest
    -from evennia.utils.create import create_object
    -from . import slow_exit
    -
    -slow_exit.MOVE_DELAY = {"stroll": 0, "walk": 0, "run": 0, "sprint": 0}
    -
    -
    -def _cancellable_mockdelay(time, callback, *args, **kwargs):
    -    callback(*args, **kwargs)
    -    return Mock()
    -
    -
    -
    [docs]class TestSlowExit(BaseEvenniaCommandTest): -
    [docs] @patch("evennia.utils.delay", _cancellable_mockdelay) - def test_exit(self): - exi = create_object( - slow_exit.SlowExit, key="slowexit", location=self.room1, destination=self.room2 - ) - exi.at_traverse(self.char1, self.room2) - self.call(slow_exit.CmdSetSpeed(), "walk", "You are now walking.") - self.call(slow_exit.CmdStop(), "", "You stop moving.")
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.contrib.grid.slow_exit.tests

    +"""
    +Slow exit tests.
    +
    +"""
    +
    +from mock import Mock, patch
    +from evennia.commands.default.tests import BaseEvenniaCommandTest
    +from evennia.utils.create import create_object
    +from . import slow_exit
    +
    +slow_exit.MOVE_DELAY = {"stroll": 0, "walk": 0, "run": 0, "sprint": 0}
    +
    +
    +def _cancellable_mockdelay(time, callback, *args, **kwargs):
    +    callback(*args, **kwargs)
    +    return Mock()
    +
    +
    +
    [docs]class TestSlowExit(BaseEvenniaCommandTest): +
    [docs] @patch("evennia.utils.delay", _cancellable_mockdelay) + def test_exit(self): + exi = create_object( + slow_exit.SlowExit, key="slowexit", location=self.room1, destination=self.room2 + ) + exi.at_traverse(self.char1, self.room2) + self.call(slow_exit.CmdSetSpeed(), "walk", "You are now walking.") + self.call(slow_exit.CmdStop(), "", "You stop moving.")
    +
    + +
    +
    +
    +
    +
    +
    @@ -179,44 +213,10 @@ self.assertEqual(new_loc, correct_loc, direction)
    -
    - -
    +
    +
    @@ -816,44 +850,10 @@ pass
    -
    - -
    +
    +
    @@ -550,44 +584,10 @@ self.add(CmdMap())
    -
    - -
    +
    +
    @@ -307,44 +341,10 @@ XYMAP_DATA_LIST = [XYMAP_DATA_MAP1, XYMAP_DATA_MAP2]
    -
    - -
    +
    +
    @@ -493,44 +527,10 @@ print(f"Unknown option '{option}'. Use 'evennia xyzgrid help' for valid arguments.")
    -
    - -
    +
    +
    @@ -45,6 +79,7 @@ Tests for the XYZgrid system. """ +from unittest import mock from random import randint from parameterized import parameterized @@ -1457,46 +1492,87 @@ self.assertTrue(room2a.db.desc.startswith("This is the entrance to")) self.assertEqual(room2b.key, "North-west corner of the atrium") self.assertTrue(room2b.db.desc.startswith("Sunlight sifts down"))
    + + +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]class TestXyzExit(xyzroom.XYZExit): +
    [docs] def at_object_creation(self): + mock_exit_callbacks.at_object_creation()
    + +MAP_DATA = { + "map": """ + + + 0 1 + + 0 #-# + + + 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", + } +} + +
    [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) + self.grid.log = _log + + self.map_data = map_data + self.grid.add_maps(map_data)
    + +
    [docs] def tearDown(self): + super().tearDown() + self.grid.delete()
    + +
    [docs] def test_typeclassed_xyzroom_and_xyzexit_with_at_object_creation_are_called(self): + map_data = dict(MAP_DATA) + for prototype_key, prototype_value in map_data["prototypes"].items(): + if len(prototype_key) == 2: + prototype_value["typeclass"] = "evennia.contrib.grid.xyzgrid.tests.TestXyzRoom" + if len(prototype_key) == 3: + prototype_value["typeclass"] = "evennia.contrib.grid.xyzgrid.tests.TestXyzExit" + self.setup_grid(map_data) + + 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()])
    -
    - -
    +
    +
    @@ -100,44 +134,10 @@ pass
    -
    - -
    +
    +
    @@ -1031,44 +1065,10 @@ return gridmap
    -
    - -
    +
    +
    @@ -64,8 +98,9 @@ from django.core import exceptions as django_exceptions from evennia.prototypes import spawner +from evennia.utils.utils import class_from_module -from .utils import MAPSCAN, REVERSE_DIRECTIONS, MapParserError, BIGVAL +from .utils import MAPSCAN, REVERSE_DIRECTIONS, MapParserError, BIGVAL, MapError NodeTypeclass = None ExitTypeclass = None @@ -358,13 +393,14 @@ try: nodeobj = NodeTypeclass.objects.get_xyz(xyz=xyz) except django_exceptions.ObjectDoesNotExist: - # create a new entity with proper coordinates etc - tclass = self.prototype["typeclass"] - tclass = ( - f" ({tclass})" if tclass != "evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom" else "" - ) - self.log(f" spawning room at xyz={xyz}{tclass}") - nodeobj, err = NodeTypeclass.create(self.prototype.get("key", "An empty room"), xyz=xyz) + # create a new entity, using the specified typeclass (if there's one) and + # 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) + 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) if err: raise RuntimeError(err) else: @@ -442,7 +478,14 @@ continue exitnode = self.links[direction] - exi, err = ExitTypeclass.create( + 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) + self.log(f" spawning/updating exit xyz={xyz}, direction={key} ({typeclass})") + + Typeclass = class_from_module(typeclass) + exi, err = Typeclass.create( key, xyz=xyz, xyz_destination=exitnode.get_spawn_xyz(), @@ -450,15 +493,8 @@ ) if err: raise RuntimeError(err) + linkobjs[key.lower()] = exi - prot = maplinks[key.lower()][3].prototype - tclass = prot["typeclass"] - tclass = ( - f" ({tclass})" - if tclass != "evennia.contrib.grid.xyzgrid.xyzroom.XYZExit" - else "" - ) - self.log(f" spawning/updating exit xyz={xyz}, direction={key}{tclass}") # apply prototypes to catch any changes for key, linkobj in linkobjs.items(): @@ -1407,44 +1443,10 @@ }
    -
    - -
    +
    +
    @@ -353,44 +387,10 @@ return xyzgrid
    -
    - -
    +
    +
    @@ -49,9 +83,10 @@ """ +from django.conf import settings from django.db.models import Q -from evennia.objects.objects import DefaultRoom, DefaultExit from evennia.objects.manager import ObjectManager +from evennia.objects.objects import DefaultExit, DefaultRoom # name of all tag categories. Note that the Z-coordinate is # the `map_name` of the XYZgrid @@ -65,6 +100,8 @@ GET_XYZGRID = None +CLIENT_DEFAULT_WIDTH = settings.CLIENT_DEFAULT_WIDTH +
    [docs]class XYZManager(ObjectManager): """ @@ -271,7 +308,7 @@ f"{key}={val}" for key, val in kwargs.items() ) raise self.model.DoesNotExist( - f"{self.model.__name__} " f"matching query {inp} does not exist." + f"{self.model.__name__} matching query {inp} does not exist." )
    @@ -500,7 +537,8 @@ xymap.options.get("map_separator_char", self.map_separator_char), ) - client_width, _ = looker.sessions.get()[0].get_client_size() + sessions = looker.sessions.get() + client_width, _ = sessions[0].get_client_size() if sessions else CLIENT_DEFAULT_WIDTH map_width = xymap.max_x @@ -667,44 +705,10 @@ )
    -
    - -
    +
    +
    @@ -1244,44 +1278,10 @@ )
    -
    - -
    +
    +
    @@ -183,44 +217,10 @@ self.flavor = self.flavor.format(stats=msg)
    -
    - -
    +
    +
    @@ -467,44 +501,10 @@ )
    -
    - -
    +
    +
    @@ -332,44 +366,10 @@ self.add(CmdDice())
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.contrib.rpg.dice.tests

    -"""
    -Testing of TestDice.
    -
    -"""
    -
    -from evennia.commands.default.tests import BaseEvenniaCommandTest
    -from mock import patch
    -from . import dice
    -
    -
    -
    [docs]@patch("evennia.contrib.rpg.dice.dice.randint", return_value=5) -class TestDice(BaseEvenniaCommandTest): -
    [docs] def test_roll_dice(self, mocked_randint): - self.assertEqual(dice.roll_dice(6, 6, modifier=("+", 4)), mocked_randint() * 6 + 4) - self.assertEqual(dice.roll_dice(6, 6, conditional=("<", 35)), True) - self.assertEqual(dice.roll_dice(6, 6, conditional=(">", 33)), False)
    - -
    [docs] def test_cmddice(self, mocked_randint): - self.call( - dice.CmdDice(), "3d6 + 4", "You roll 3d6 + 4.| Roll(s): 5, 5 and 5. Total result is 19." - ) - self.call(dice.CmdDice(), "100000d1000", "The maximum roll allowed is 10000d10000.") - self.call(dice.CmdDice(), "/secret 3d6 + 4", "You roll 3d6 + 4 (secret, not echoed).")
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.contrib.rpg.dice.tests

    +"""
    +Testing of TestDice.
    +
    +"""
    +
    +from evennia.commands.default.tests import BaseEvenniaCommandTest
    +from mock import patch
    +from . import dice
    +
    +
    +
    [docs]@patch("evennia.contrib.rpg.dice.dice.randint", return_value=5) +class TestDice(BaseEvenniaCommandTest): +
    [docs] def test_roll_dice(self, mocked_randint): + self.assertEqual(dice.roll_dice(6, 6, modifier=("+", 4)), mocked_randint() * 6 + 4) + self.assertEqual(dice.roll_dice(6, 6, conditional=("<", 35)), True) + self.assertEqual(dice.roll_dice(6, 6, conditional=(">", 33)), False)
    + +
    [docs] def test_cmddice(self, mocked_randint): + self.call( + dice.CmdDice(), "3d6 + 4", "You roll 3d6 + 4.| Roll(s): 5, 5 and 5. Total result is 19." + ) + self.call(dice.CmdDice(), "100000d1000", "The maximum roll allowed is 10000d10000.") + self.call(dice.CmdDice(), "/secret 3d6 + 4", "You roll 3d6 + 4 (secret, not echoed).")
    +
    + +
    +
    +
    +
    +
    +
    @@ -177,44 +211,10 @@ return final_bar
    -
    - -
    +
    +
    @@ -88,44 +122,10 @@ )
    -
    - -
    +
    +
    @@ -651,44 +685,10 @@ return _RE_WHISPER_OBSCURE[olevel].sub("-", whisper)
    -
    - -
    +
    +
    @@ -1796,44 +1830,10 @@ return "{label}|w{text}|n".format(label=f"|W({language})" if language else "", text=text)
    -
    - -
    +
    +
    @@ -369,44 +403,10 @@ )
    -
    - -
    +
    +
    @@ -1106,44 +1140,10 @@ self.char1.HP.value = 2
    -
    - -
    +
    +
    @@ -1730,44 +1764,10 @@ del self.current
    -
    - -
    +
    +
    @@ -113,44 +147,10 @@ self.obj.msg(string)
    -
    - -
    +
    +
    @@ -115,44 +149,10 @@ self.char1.msg = old_func
    -
    - -
    +
    +
    @@ -443,44 +477,10 @@ return str(form)
    -
    - -
    +
    +
    @@ -371,44 +405,10 @@ EvMenu(caller, menutree, startnode="node_chargen", session=session, tmp_character=tmp_character)
    -
    - -
    +
    +
    @@ -1453,44 +1487,10 @@ return combathandler
    -
    - -
    +
    +
    @@ -505,44 +539,10 @@ self.add(CmdTalk())
    -
    - -
    +
    +
    @@ -537,44 +571,10 @@ obj.tags.remove(category="dungeon_character")
    -
    - -
    +
    +
    @@ -114,44 +148,10 @@ TREASURE = "treasure"
    -
    - -
    +
    +
    @@ -460,44 +494,10 @@ return [tup for tup in lst]
    -
    - -
    +
    +
    @@ -375,44 +409,10 @@ )
    -
    - -
    +
    +
    @@ -283,44 +317,10 @@ inventory_use_slot = WieldLocation.HEAD
    -
    - -
    +
    +
    @@ -348,44 +382,10 @@ self._save()
    -
    - -
    +
    +
    @@ -143,44 +177,10 @@ return "|yNon-lethal PvP combat is allowed here!|n"
    -
    - -
    +
    +
    @@ -386,44 +420,10 @@ dice = EvAdventureRollEngine()
    -
    - -
    +
    +
    @@ -539,44 +573,10 @@ node_tree_shopkeep = {**node_tree_buy, **node_tree_sell}
    -
    - -
    +
    +
    @@ -95,44 +129,10 @@ self.item = create.create_object(EvAdventureObject, key="backpack item")
    -
    - -
    +
    +
    @@ -88,44 +122,10 @@ self.assertEqual(self.character.coins, 0)
    -
    - -
    +
    +
    @@ -106,44 +140,10 @@ character.delete()
    -
    - -
    +
    +
    @@ -352,44 +386,10 @@ self.assertTrue(self.combatant in self.combathandler.combatants)
    -
    - -
    +
    +
    @@ -168,44 +202,10 @@ )
    -
    - -
    +
    +
    @@ -139,44 +173,10 @@ self.assertEqual(self.start_room, start_room)
    -
    - -
    +
    +
    @@ -231,44 +265,10 @@ self.assertEqual(self.character.equipment.weapon, self.big_weapon)
    -
    - -
    +
    +
    @@ -192,44 +226,10 @@ self.assertEqual(self._get_quest().is_completed, True)
    -
    - -
    +
    +
    @@ -267,44 +301,10 @@ self.assertEqual(character.strength, 10)
    -
    - -
    +
    +
    @@ -76,44 +110,10 @@ )
    -
    - -
    +
    +
    @@ -94,44 +128,10 @@ )
    -
    - -
    +
    +
    @@ -104,44 +138,10 @@ logger.log_msg(f"{self.key}.msg was called without from_obj and .location is None.")
    -
    - -
    +
    +
    @@ -637,44 +671,10 @@ delay(21, self._unbreak_lamp)
    -
    - -
    +
    +
    @@ -186,44 +220,10 @@ self.cmdset.add_default(TalkingCmdSet, persistent=True)
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.contrib.tutorials.talking_npc.tests

    -"""
    -Tutorial - talking NPC tests.
    -
    -"""
    -from evennia.commands.default.tests import BaseEvenniaCommandTest
    -from evennia.utils.create import create_object
    -from . import talking_npc
    -
    -
    -
    [docs]class TestTalkingNPC(BaseEvenniaCommandTest): -
    [docs] def test_talkingnpc(self): - npc = create_object(talking_npc.TalkingNPC, key="npctalker", location=self.room1) - self.call(talking_npc.CmdTalk(), "", "(You walk up and talk to Char.)") - npc.delete()
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.contrib.tutorials.talking_npc.tests

    +"""
    +Tutorial - talking NPC tests.
    +
    +"""
    +from evennia.commands.default.tests import BaseEvenniaCommandTest
    +from evennia.utils.create import create_object
    +from . import talking_npc
    +
    +
    +
    [docs]class TestTalkingNPC(BaseEvenniaCommandTest): +
    [docs] def test_talkingnpc(self): + npc = create_object(talking_npc.TalkingNPC, key="npctalker", location=self.room1) + self.call(talking_npc.CmdTalk(), "", "(You walk up and talk to Char.)") + npc.delete()
    +
    + +
    +
    +
    +
    +
    +
    @@ -820,44 +854,10 @@ TutorialEvMenu(caller, menutree)
    -
    - -
    +
    +
    @@ -478,44 +512,10 @@ self.start_attacking()
    -
    - -
    +
    +
    @@ -1227,44 +1261,10 @@ caller.msg(self.db.get_weapon_msg % wpn.key)
    -
    - -
    +
    +
    @@ -1230,44 +1264,10 @@ character.account.execute_cmd("unquell")
    -
    - -
    +
    +
    @@ -233,44 +267,10 @@ create_object(tutrooms.OutroRoom, key="outroroom")
    -
    - -
    +
    +
    @@ -102,44 +136,10 @@ syslog.syslog(json.dumps(data))
    -
    - -
    +
    +
    @@ -291,44 +325,10 @@ super().data_in(**kwargs)
    -
    - -
    +
    +
    @@ -176,44 +210,10 @@ self.assertEqual(log["data"]["pane"], 2)
    -
    - -
    +
    +
    @@ -758,44 +792,10 @@ return
    -
    - -
    +
    +
    @@ -485,44 +519,10 @@ return names
    -
    - -
    +
    +
    @@ -200,44 +234,10 @@ namegen.full_name(num=-1)
    -
    - -
    +
    +
    @@ -400,44 +434,10 @@ generated[:] = []
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.contrib.utils.random_string_generator.tests

    -"""
    -Random string tests.
    -
    -"""
    -
    -from evennia.utils.test_resources import BaseEvenniaTest
    -from . import random_string_generator
    -
    -SIMPLE_GENERATOR = random_string_generator.RandomStringGenerator("simple", "[01]{2}")
    -
    -
    -
    [docs]class TestRandomStringGenerator(BaseEvenniaTest): -
    [docs] def test_generate(self): - """Generate and fail when exhausted.""" - generated = [] - for i in range(4): - generated.append(SIMPLE_GENERATOR.get()) - - generated.sort() - self.assertEqual(generated, ["00", "01", "10", "11"]) - - # At this point, we have generated 4 strings. - # We can't generate one more - with self.assertRaises(random_string_generator.ExhaustedGenerator): - SIMPLE_GENERATOR.get()
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.contrib.utils.random_string_generator.tests

    +"""
    +Random string tests.
    +
    +"""
    +
    +from evennia.utils.test_resources import BaseEvenniaTest
    +from . import random_string_generator
    +
    +SIMPLE_GENERATOR = random_string_generator.RandomStringGenerator("simple", "[01]{2}")
    +
    +
    +
    [docs]class TestRandomStringGenerator(BaseEvenniaTest): +
    [docs] def test_generate(self): + """Generate and fail when exhausted.""" + generated = [] + for i in range(4): + generated.append(SIMPLE_GENERATOR.get()) + + generated.sort() + self.assertEqual(generated, ["00", "01", "10", "11"]) + + # At this point, we have generated 4 strings. + # We can't generate one more + with self.assertRaises(random_string_generator.ExhaustedGenerator): + SIMPLE_GENERATOR.get()
    +
    + +
    +
    +
    +
    +
    +
    @@ -104,44 +138,10 @@ self.assertTrue(fieldfill.form_template_to_dict(FIELD_TEST_TEMPLATE) == FIELD_TEST_DATA)
    -
    - -
    +
    +
    @@ -620,44 +654,10 @@ caller.msg(newcolor + ("Name color changed to %s!" % selection) + "|n")
    -
    - -
    +
    +
    @@ -302,44 +336,10 @@ FILE_HELP_ENTRIES = FileHelpStorageHandler()
    -
    - -
    +
    +
    @@ -242,44 +276,10 @@ signals.SIGNAL_HELPENTRY_POST_CREATE.send(sender=new_help)
    -
    - -
    +
    +
    @@ -350,44 +384,10 @@ get_absolute_url = web_get_detail_url
    -
    - -
    +
    +
    @@ -275,44 +309,10 @@ return structure
    -
    - -
    +
    +
    @@ -727,44 +761,10 @@ return False
    -
    - -
    +
    +
    @@ -831,44 +865,10 @@ print(obj1.locks.check(obj2, "listen"))
    -
    - -
    +
    +
    @@ -784,44 +818,10 @@ pass
    -
    - -
    +
    +
    @@ -433,44 +467,10 @@ verbose_name_plural = "Objects"
    -
    - -
    +
    +
    @@ -3174,47 +3208,30 @@ read for an error string instead. """ - traversing_object.msg(_("You cannot go there."))
    + traversing_object.msg(_("You cannot go there."))
    + +
    [docs] def get_return_exit(self, return_all=False): + """ + Get the exits that pair with this one in its destination room + (i.e. returns to its location) + + Args: + return_all (bool): Whether to return available results as a + list or single matching exit. + + Returns: + queryset or exit (Exit): The matching exit(s). + """ + query = ObjectDB.objects.filter(db_location=self.destination, db_destination=self.location) + if return_all: + return query + return query.first()
    -
    - -
    +
    +
    @@ -2802,44 +2836,10 @@ )
    -
    - -
    +
    +
    @@ -120,44 +154,10 @@ }
    -
    - -
    +
    +
    @@ -174,7 +208,7 @@ # attrs must be on form [(key, value, category, lockstr)] if not is_iter(attr): logger.log_error( - "Prototype's 'attr' field must " f"be a list of tuples: {prototype}" + f"Prototype's 'attr' field must be a list of tuples: {prototype}" ) elif attr: nattr = len(attr) @@ -279,8 +313,7 @@ for prot in prototype_list: if not isinstance(prot, dict): logger.log_err( - f"Prototype read from {mod}.PROTOTYPE_LIST " - f"is not a dict (skipping): {prot}" + f"Prototype read from {mod}.PROTOTYPE_LIST is not a dict (skipping): {prot}" ) continue elif "prototype_key" not in prot: @@ -865,7 +898,7 @@ if strict and not (typeclass or prototype_parent): if is_prototype_base: _flags["errors"].append( - _("Prototype {protkey} requires `typeclass` " "or 'prototype_parent'.").format( + _("Prototype {protkey} requires `typeclass` or 'prototype_parent'.").format( protkey=protkey ) ) @@ -908,8 +941,7 @@ if not protparent: _flags["errors"].append( _( - "Prototype {protkey}'s `prototype_parent` (named '{parent}') " - "was not found." + "Prototype {protkey}'s `prototype_parent` (named '{parent}') was not found." ).format(protkey=protkey, parent=protstring) ) @@ -1001,7 +1033,7 @@ if not isinstance(value, str): return value - result = FUNC_PARSER.parse(value, raise_errors=True, return_str=False, caller=caller, **kwargs) + result = FUNC_PARSER.parse_to_any(value, raise_errors=True, caller=caller, **kwargs) return result
    @@ -1205,44 +1237,10 @@ return dbid_to_obj(value, ObjectDB)
    -
    - -
    +
    +
    @@ -1108,44 +1142,10 @@ return batch_create_object(*objsparams)
    -
    - -
    +
    +
    @@ -369,44 +403,10 @@ pass
    -
    - -
    +
    +
    @@ -221,44 +255,10 @@ object = property(__get_obj, __set_obj)
    -
    - -
    +
    +
    @@ -266,44 +300,10 @@ MONITOR_HANDLER = MonitorHandler()
    -
    - -
    +
    +
    @@ -203,44 +237,10 @@ return ScriptDB.objects.get_all_scripts_on_obj(self.obj)
    -
    - -
    +
    +
    @@ -873,44 +907,10 @@ self.desc = "This is a generic storage container."
    -
    - -
    +
    +
    @@ -652,44 +686,10 @@ TASK_HANDLER = TaskHandler()
    -
    - -
    +
    +
    @@ -686,44 +720,10 @@ TICKER_HANDLER = TickerHandler()
    -
    - -
    +
    +
    @@ -294,44 +328,10 @@ return {}
    -
    - -
    +
    +
    @@ -563,44 +597,10 @@ node_start(wizard)
    -
    - -
    +
    +
    @@ -223,44 +257,10 @@ )
    -
    - -
    +
    +
    @@ -2420,44 +2454,10 @@ main()
    -
    - -
    +
    +
    @@ -220,44 +254,10 @@ noisy = False
    -
    - -
    +
    +
    @@ -100,44 +134,10 @@ self.stopService()
    -
    - -
    +
    +
    @@ -272,44 +306,10 @@ break
    -
    - -
    +
    +
    @@ -693,44 +727,10 @@ client_gui = _not_implemented
    -
    - -
    +
    +
    @@ -95,44 +129,10 @@ return None
    -
    - -
    +
    +
    @@ -175,44 +209,10 @@ self.value = value
    -
    - -
    +
    +
    @@ -634,44 +668,10 @@ return {"result": dumps(result)}
    -
    - -
    +
    +
    @@ -527,44 +561,10 @@ return {}
    -
    - -
    +
    +
    @@ -401,44 +435,10 @@ self.sessionhandler.data_in(self, bot_data_in=("", kwargs))
    -
    - -
    +
    +
    @@ -520,44 +554,10 @@ self.sessionhandler.portal.services.addService(service)
    -
    - -
    +
    +
    @@ -131,44 +165,10 @@ self.protocol.handshake_done()
    -
    - -
    +
    +
    @@ -176,44 +210,10 @@ self.protocol.handshake_done()
    -
    - -
    +
    +
    @@ -133,44 +167,10 @@ self.protocol.handshake_done()
    -
    - -
    +
    +
    @@ -126,44 +160,10 @@ self.protocol.protocol_flags["SCREENHEIGHT"][0] = int(codecs_encode(height, "hex"), 16)
    -
    - -
    +
    +
    @@ -486,44 +520,10 @@ plugin_module.start_plugin_services(PORTAL)
    -
    - -
    +
    +
    @@ -533,44 +567,10 @@ PORTAL_SESSIONS = _PORTAL_SESSION_HANDLER_CLASS()
    -
    - -
    +
    +
    @@ -206,44 +240,10 @@ self.task.start(self.rate, now=False).addErrback(errback)
    -
    - -
    +
    +
    @@ -571,44 +605,10 @@ return factory
    -
    - -
    +
    +
    @@ -162,44 +196,10 @@ return twisted_ssl.DefaultOpenSSLContextFactory(keyfile, certfile)
    -
    - -
    +
    +
    @@ -110,44 +144,10 @@ self.protocol.handshake_done()
    -
    - -
    +
    +
    @@ -557,44 +591,10 @@ self.oob.data_out(cmdname, *args, **kwargs)
    -
    - -
    +
    +
    @@ -489,44 +523,10 @@ self.protocol._write(IAC + SB + GMCP + encoded_oob + IAC + SE)
    -
    - -
    +
    +
    @@ -194,44 +228,10 @@ return None
    -
    - -
    +
    +
    @@ -363,44 +397,10 @@ self.proto.sendLine.assert_called_with(json.dumps(["text", ["Excepting Alice"], {}]))
    -
    - -
    +
    +
    @@ -229,44 +263,10 @@ self.ttype_step += 1
    -
    - -
    +
    +
    @@ -358,44 +392,10 @@ self.sendLine(json.dumps([cmdname, args, kwargs]))
    -
    - -
    +
    +
    @@ -533,44 +567,10 @@ self.client.lineSend(self.csessid, [cmdname, args, kwargs])
    -
    - -
    +
    +
    @@ -680,44 +714,10 @@ print("... dummy client runner stopped after %s." % time_format(ttot, style=3))
    -
    - -
    +
    +
    @@ -372,44 +406,10 @@ sys.exit()
    -
    - -
    +
    +
    @@ -158,44 +192,10 @@ pp.show()
    -
    - -
    +
    +
    @@ -85,44 +119,10 @@ count_queries(exec_string, setup_string)
    -
    - -
    +
    +
    @@ -201,44 +235,10 @@ script.stop()
    -
    - -
    +
    +
    @@ -82,44 +116,10 @@ return message
    -
    - -
    +
    +
    @@ -824,44 +858,10 @@ print("Server server_starting_mode couldn't unset - db not set up.")
    -
    - -
    +
    +
    @@ -479,44 +513,10 @@ return True
    -
    - -
    +
    +
    @@ -217,44 +251,10 @@ pass
    -
    - -
    +
    +
    @@ -917,44 +951,10 @@ SESSIONS = SESSION_HANDLER # legacy
    -
    - -
    +
    +
    @@ -265,44 +299,10 @@ return False
    -
    - -
    +
    +
    @@ -132,44 +166,10 @@ )
    -
    - -
    +
    +
    @@ -351,44 +385,10 @@ return resource.ForbiddenResource()
    -
    - -
    +
    +
    @@ -1786,44 +1820,10 @@ return raw_string
    -
    - -
    +
    +
    @@ -47,12 +81,13 @@ """ import shlex -from django.db.models import F, Q, Count, ExpressionWrapper, FloatField + +from django.db.models import Count, ExpressionWrapper, F, FloatField, Q from django.db.models.functions import Cast -from evennia.utils import idmapper -from evennia.utils.utils import make_iter, variable_from_module from evennia.typeclasses.attributes import Attribute from evennia.typeclasses.tags import Tag +from evennia.utils import idmapper +from evennia.utils.utils import class_from_module, make_iter, variable_from_module __all__ = ("TypedObjectManager",) _GA = object.__getattribute__ @@ -238,6 +273,8 @@ query.append(("db_key", key)) if category: query.append(("db_category", category)) + else: + query.append(("db_category", None)) return _Tag.objects.filter(**dict(query)) else: # search only among tags stored on on this model @@ -579,15 +616,14 @@
    + parent_queries.append(super().filter(db_typeclass_path__exact=parent.path)) + query = query.union(*parent_queries) + + return query
    class TypeclassManager(TypedObjectManager): @@ -890,44 +919,10 @@ return super().all().filter(db_typeclass_path__in=paths)
    -
    - -
    +
    +
    @@ -1128,44 +1162,10 @@ get_absolute_url = web_get_detail_url
    -
    - -
    +
    +
    @@ -461,7 +495,7 @@ if key: for tag_str in make_iter(key): tag_str = tag_str.strip().lower() - ret.extend(bool(tag) for tag in self._getcache(tag_str, category)) + ret.append(bool(self._getcache(tag_str, category))) elif category: ret.extend(bool(tag) for tag in self._getcache(category=category)) else: @@ -743,44 +777,10 @@ return any(perm_lockfunc(self.obj, None, perm) for perm in permissions)
    -
    - -
    +
    +
    @@ -1546,44 +1580,10 @@ return self._filler(fillchar, _difference) + self
    -
    - -
    +
    +
    @@ -481,44 +515,10 @@ BATCHCODE = BatchCodeProcessor()
    -
    - -
    +
    +
    @@ -54,13 +88,14 @@ from pickle import dumps -from django.db.utils import OperationalError, ProgrammingError -from django.conf import settings -from evennia.utils.utils import class_from_module, callables_from_module -from evennia.utils import logger +from django.conf import settings +from django.db.utils import OperationalError, ProgrammingError +from evennia.utils import logger +from evennia.utils.utils import callables_from_module, class_from_module SCRIPTDB = None +_BASE_SCRIPT_TYPECLASS = None
    [docs]class Container: @@ -242,16 +277,27 @@ initialized. """ + if self.loaded_data: + # we don't always load this, it collides with doc generation + global _BASE_SCRIPT_TYPECLASS + if not _BASE_SCRIPT_TYPECLASS: + _BASE_SCRIPT_TYPECLASS = class_from_module(settings.BASE_SCRIPT_TYPECLASS) + if self.typeclass_storage is None: self.typeclass_storage = {} - for key, data in self.loaded_data.items(): + for key, data in list(self.loaded_data.items()): try: typeclass = data.get("typeclass", settings.BASE_SCRIPT_TYPECLASS) - self.typeclass_storage[key] = class_from_module(typeclass) + script_typeclass = class_from_module(typeclass) + assert issubclass(script_typeclass, _BASE_SCRIPT_TYPECLASS) + self.typeclass_storage[key] = script_typeclass except Exception: logger.log_trace( - f"GlobalScriptContainer could not start import global script {key}." - )
    + f"GlobalScriptContainer could not start import global script {key}. " + "It will be removed (skipped)." + ) + # Let's remove this key/value. We want to let other scripts load. + self.loaded_data.pop(key)
    [docs] def get(self, key, default=None): """ @@ -297,44 +343,10 @@ OPTION_CLASSES = OptionContainer()
    -
    - -
    +
    +
    @@ -971,44 +1005,10 @@ return from_pickle(do_unpickle(data), db_obj=db_obj)
    -
    - -
    +
    +
    @@ -1226,44 +1260,10 @@ self._caller.attributes.add("_eveditor_indent", self._indent)
    -
    - -
    +
    +
    @@ -510,44 +544,10 @@ return str(ANSIString("\n").join([line for line in self.form]))
    -
    - -
    +
    +
    @@ -2182,44 +2216,10 @@ )
    -
    - -
    +
    +
    @@ -596,44 +630,10 @@ msg.__doc__ += dedent(EvMore.__init__.__doc__)
    -
    - -
    +
    +
    @@ -1792,44 +1826,10 @@ return table
    -
    - -
    +
    +
    @@ -396,7 +430,6 @@ if curr_func: # we are starting a nested funcdef - return_str = True if len(callstack) > _MAX_NESTING: # stack full - ignore this function if raise_errors: @@ -629,7 +662,9 @@ return fullstr
    -
    [docs] def parse_to_any(self, string, raise_errors=False, **reserved_kwargs): +
    [docs] def parse_to_any( + self, string, raise_errors=False, escape=False, strip=False, **reserved_kwargs + ): """ This parses a string and if the string only contains a "$func(...)", the return will be the return value of that function, even if it's not @@ -641,6 +676,10 @@ raise_errors (bool, optional): If unset, leave a failing (or unrecognized) inline function as unparsed in the string. If set, raise an ParsingError. + escape (bool, optional): If set, escape all found functions so they + are not executed by later parsing. + strip (bool, optional): If set, strip any inline funcs from string + as if they were not there. **reserved_kwargs: If given, these are guaranteed to _always_ pass as part of each parsed callable's **kwargs. These override same-named default options given in `__init__` as well as any @@ -677,9 +716,9 @@ """ return self.parse( string, - raise_errors=False, - escape=False, - strip=False, + raise_errors=raise_errors, + escape=escape, + strip=strip, return_str=False, **reserved_kwargs, )
    @@ -835,7 +874,7 @@ num, *significant = args significant = significant[0] if significant else 0 try: - round(num, significant) + return round(num, significant) except Exception: if kwargs.get("raise_errors"): raise @@ -903,20 +942,33 @@ Args: listing (list): A list of items to randomly choose between. This will be converted from a string to a real list. + *args: If multiple args are given, will pick one randomly from them. Returns: any: The randomly chosen element. Example: - - `$choice([key, flower, house])` + - `$choice(key, flower, house)` - `$choice([1, 2, 3, 4])` """ if not args: return "" - args, _ = safe_convert_to_types(("py", {}), *args, **kwargs) + + nargs = len(args) + if nargs == 1: + # this needs to be a list/tuple for this to make sense + args, _ = safe_convert_to_types(("py", {}), args[0], **kwargs) + args = make_iter(args[0]) if args else None + else: + # separate arg per entry + converters = ["py" for _ in range(nargs)] + args, _ = safe_convert_to_types((converters, {}), *args, **kwargs) + + if not args: + return "" try: - return random.choice(args[0]) + return random.choice(args) except Exception: if kwargs.get("raise_errors"): raise @@ -1130,7 +1182,9 @@ security. If called without session, the call is aborted. Args: - query (str): The key or dbref to search for. + query (str): The key or dbref to search for. This can consist of any args used + for one of the regular search methods. Also kwargs will be passed into + the search (except the kwargs given below) Keyword Args: return_list (bool): If set, return a list of objects with @@ -1141,6 +1195,7 @@ The 'control' permission is required. access (str): Which locktype access to check. Unset to disable the security check. + **kwargs: Will be passed into the main search. Returns: any: An entity match or None if no match or a list if `return_list` is set. @@ -1153,30 +1208,38 @@ - "$search(#233)" - "$search(Tom, type=account)" - "$search(meadow, return_list=True)" + - "$search(beach, category=outdoors, type=tag) """ - return_list = kwargs.get("return_list", "false").lower() == "true" + # clean out funcparser-specific kwargs so we can use the kwargs for + # searching + search_kwargs = { + key: value + for key, value in kwargs.items() + if key not in ("funcparser", "raise_errors", "type", "return_list") + } + return_list = str(kwargs.pop("return_list", "false")).lower() == "true" if not args: return [] if return_list else None if not caller: raise ParsingError("$search requires a `caller` passed to the parser.") - query = str(args[0]) - typ = kwargs.get("type", "obj") targets = [] if typ == "obj": - targets = search.search_object(query) + targets = search.search_object(*args, **search_kwargs) elif typ == "account": - targets = search.search_account(query) + targets = search.search_account(*args, **search_kwargs) elif typ == "script": - targets = search.search_script(query) + targets = search.search_script(*args, **search_kwargs) + elif typ == "tag": + targets = search.search_object_by_tag(*args, **search_kwargs) if not targets: if return_list: return [] - raise ParsingError(f"$search: Query '{query}' gave no matches.") + raise ParsingError(f"$search: Query '{args[0]}' gave no matches.") if len(targets) > 1 and not return_list: raise ParsingError( @@ -1185,7 +1248,7 @@ ) for target in targets: - if not target.access(caller, target, access): + if not target.access(caller, access): raise ParsingError("$search Cannot add found entity - access failure.") return list(targets) if return_list else targets[0]
    @@ -1513,44 +1576,10 @@ }
    -
    - -
    +
    +
    @@ -334,44 +368,10 @@ ServerConfig.objects.conf("gametime_offset", GAME_TIME_OFFSET)
    -
    - -
    +
    +
    @@ -75,44 +109,10 @@ return inst
    -
    - -
    +
    +
    @@ -723,44 +757,10 @@ return numtotal[0], classdict
    -
    - -
    +
    +
    @@ -120,44 +154,10 @@ self.assertEqual(pk not in Article.__instance_cache__, True)
    -
    - -
    +
    +
    @@ -393,7 +427,7 @@
    [docs] def rotate(self): try: - self.rotate() + super().rotate() except Exception: log_trace(f"Could not rotate the log file {self.name}.")
    @@ -659,44 +693,10 @@ return None
    -
    - -
    +
    +
    @@ -365,44 +399,10 @@ return validatorfuncs.lock(value, option_key=self.key, **kwargs)
    -
    - -
    +
    +
    @@ -226,44 +260,10 @@ return [self.get(key, return_obj=return_objs) for key in self.options_dict]
    -
    - -
    +
    +
    @@ -344,44 +378,10 @@ )
    -
    - -
    +
    +
    @@ -83,6 +117,7 @@ "search_script_tag", "search_account_tag", "search_channel_tag", + "search_typeclass", ) @@ -404,46 +439,44 @@ # search for tag objects (not the objects they are attached to search_tag_object = ObjectDB.objects.get_tag + + +# Locate Objects by Typeclass + +# search_objects_by_typeclass(typeclass="", include_children=False, include_parents=False) (also search_typeclass works) +# This returns the objects of the given typeclass + + +def search_objects_by_typeclass(typeclass, include_children=False, include_parents=False): + """ + Searches through all objects returning those of a certain typeclass. + + Args: + typeclass (str or class): A typeclass class or a python path to a typeclass. + include_children (bool, optional): Return objects with + given typeclass *and* all children inheriting from this + typeclass. Mutuall exclusive to `include_parents`. + include_parents (bool, optional): Return objects with + given typeclass *and* all parents to this typeclass. + Mutually exclusive to `include_children`. + + Returns: + objects (list): The objects found with the given typeclasses. + """ + return ObjectDB.objects.typeclass_search( + typeclass=typeclass, + include_children=include_children, + include_parents=include_parents, + ) + + +search_typeclass = search_objects_by_typeclass
    -
    - -
    +
    +
    @@ -648,44 +682,10 @@ """
    -
    - -
    +
    +
    @@ -130,8 +164,10 @@ re.S | re.M | re.I, ) re_url = re.compile( - r'(?<!=")((?:ftp|www|https?)\W+(?:(?!\.(?:\s|$)|&\w+;)[^"\',;$*^\\(){}<>\[\]\s])+)(\.(?:\s|$)|&\w+;|)' + 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_mxplink = re.compile(r"\|lc(.*?)\|lt(.*?)\|le", re.DOTALL) re_mxpurl = re.compile(r"\|lu(.*?)\|lt(.*?)\|le", re.DOTALL) @@ -189,9 +225,22 @@ text (str): Processed text. """ - # -> added target to output prevent the web browser from attempting to - # change pages (and losing our webclient session). - return self.re_url.sub(r'<a href="\1" target="_blank">\1</a>\2', text)
    + 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():] + else: + return text
    -
    - -
    +
    +
    @@ -67,6 +101,7 @@ from inspect import getmembers, getmodule, getmro, ismodule, trace from os.path import join as osjoin from unicodedata import east_asian_width +from string import punctuation from django.apps import apps from django.conf import settings @@ -445,18 +480,23 @@ if not iterable: return "" len_iter = len(iterable) - + if addquote: iterable = tuple(f'"{val}"' for val in iterable) else: iterable = tuple(str(val) for val in iterable) - if endsep.startswith(sep): - # oxford comma alternative - endsep = endsep[1:] if len_iter < 3 else endsep - elif endsep: - # normal space-separated end separator - endsep = " " + str(endsep).strip() + if endsep: + if endsep.startswith(sep): + # oxford comma alternative + endsep = endsep[1:] if len_iter < 3 else endsep + elif endsep[0] not in punctuation: + # add a leading space if endsep is a word + endsep = " " + str(endsep).strip() + + # also add a leading space if separator is a word + if sep not in punctuation: + sep = " "+sep if len_iter == 1: return str(iterable[0]) @@ -2605,6 +2645,14 @@ # ... """ + container_end_char = {"(": ")", "[": "]", "{": "}"} # tuples, lists, sets + + def _manual_parse_containers(inp): + startchar = inp[0] + endchar = inp[-1] + if endchar != container_end_char.get(startchar): + return + return [str(part).strip() for part in inp[1:-1].split(",")] def _safe_eval(inp): if not inp: @@ -2612,16 +2660,21 @@ if not isinstance(inp, str): # already converted return inp - try: - return literal_eval(inp) + try: + return literal_eval(inp) + except ValueError: + parts = _manual_parse_containers(inp) + if not parts: + raise + return parts + except Exception as err: literal_err = f"{err.__class__.__name__}: {err}" try: return simple_eval(inp) except Exception as err: simple_err = f"{str(err.__class__.__name__)}: {err}" - pass if raise_errors: from evennia.utils.funcparser import ParsingError @@ -2632,6 +2685,9 @@ f"simple_eval raised {simple_err}" ) raise ParsingError(err) + else: + # fallback - convert to str + return str(inp) # handle an incomplete/mixed set of input converters if not converters: @@ -2797,46 +2853,119 @@ if adjective: return _INT2STR_MAP_ADJ.get(number, f"{number}th") return _INT2STR_MAP_NOUN.get(number, str(number))
    + + +_STR2INT_MAP = { + "one": 1, + "two": 2, + "three": 3, + "four": 4, + "five": 5, + "six": 6, + "seven": 7, + "eight": 8, + "nine": 9, + "ten": 10, + "eleven": 11, + "twelve": 12, + "thirteen": 13, + "fourteen": 14, + "fifteen": 15, + "sixteen": 16, + "seventeen": 17, + "eighteen": 18, + "nineteen": 19, + "twenty": 20, + "thirty": 30, + "forty": 40, + "fifty": 50, + "sixty": 60, + "seventy": 70, + "eighty": 80, + "ninety": 90, + "hundred": 100, + "thousand": 1000, +} +_STR2INT_ADJS = { + "first": 1, + "second": 2, + "third": 3, +} + + +
    [docs]def str2int(number): + """ + Converts a string to an integer. + + Args: + number (str): The string to convert. It can be a digit such as "1", or a number word such as "one". + + Returns: + int: The string represented as an integer. + """ + number = str(number) + original_input = number + try: + # it's a digit already + return int(number) + except: + # if it's an ordinal number such as "1st", it'll convert to int with the last two characters chopped off + try: + return int(number[:-2]) + except: + pass + + # convert sound changes for generic ordinal numbers + if number[-2:] == "th": + # remove "th" + number = number[:-2] + if number[-1] == "f": + # e.g. twelfth, fifth + number = number[:-1] + "ve" + elif number[-2:] == "ie": + # e.g. twentieth, fortieth + number = number[:-2] + "y" + # custom case for ninth + elif number[-3:] == "nin": + number += "e" + + if i := _STR2INT_MAP.get(number): + # it's a single number, return it + return i + + # remove optional "and"s + number = number.replace(" and ", " ") + + # split number words by spaces, hyphens and commas, to accommodate multiple styles + numbers = [word.lower() for word in re.split(r"[-\s\,]", number) if word] + sums = [] + for word in numbers: + # check if it's a known number-word + if i := _STR2INT_MAP.get(word): + if not len(sums): + # initialize the list with the current value + sums = [i] + else: + # if the previous number was smaller, it's a multiplier + # e.g. the "two" in "two hundred" + if sums[-1] < i: + sums[-1] = sums[-1] * i + # otherwise, it's added on, like the "five" in "twenty five" + else: + sums.append(i) + elif i := _STR2INT_ADJS.get(word): + # it's a special adj word; ordinal case will never be a multiplier + sums.append(i) + else: + # invalid number-word, raise ValueError + raise ValueError(f"String {original_input} cannot be converted to int.") + return sum(sums)
    -
    - -
    +
    +
    @@ -321,44 +355,10 @@ return entry
    -
    - -
    +
    +
    @@ -429,44 +463,10 @@ return (you_str, them_str)
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.utils.verb_conjugation.pronouns

    -"""
    -English pronoun mapping between 1st/2nd person and 3rd person perspective (and vice-versa).
    -
    -This file is released under the Evennia regular BSD License.
    -(Griatch 2021)
    -
    -Pronouns are words you use instead of a proper name, such as 'him', 'herself', 'theirs' etc. These
    -look different depending on who sees the outgoing string. This mapping maps between 1st/2nd case and
    -the 3rd person case and back. In some cases, the mapping is not unique; it is assumed the system can
    -differentiate between the options in some other way.
    -
    -
    -====================  =======  ========  ==========  ==========  ===========
    -viewpoint/pronouns    Subject  Object    Possessive  Possessive  Reflexive
    -                      Pronoun  Pronoun   Adjective   Pronoun     Pronoun
    -====================  =======  ========  ==========  ==========  ===========
    -1st person              I        me        my         mine       myself
    -1st person plural       we       us        our        ours       ourselves
    -2nd person              you      you       your       yours      yourself
    -2nd person plural       you      you       your       yours      yourselves
    -
    -3rd person male         he       him       his        his        himself
    -3rd person female       she      her       her        hers       herself
    -3rd person neutral      it       it        its        theirs*    itself
    -3rd person plural       they     them      their      theirs     themselves
    -====================  =======  ========  ==========  ==========  ===========
    -
    -> `*`) Not formally used, we use `theirs` here as a filler.
    -
    -"""
    -from evennia.utils.utils import copy_word_case
    -
    -DEFAULT_PRONOUN_TYPE = "object_pronoun"
    -DEFAULT_VIEWPOINT = "2nd person"
    -DEFAULT_GENDER = "neutral"
    -
    -PRONOUN_MAPPING = {
    -    # 1st/2nd person -> 3rd person mappings
    -    "I": {"subject pronoun": {"3rd person": {"male": "he", "female": "she", "neutral": "it"}}},
    -    "me": {"object pronoun": {"3rd person": {"male": "him", "female": "her", "neutral": "it"}}},
    -    "my": {
    -        "possessive adjective": {"3rd person": {"male": "his", "female": "her", "neutral": "its"}}
    -    },
    -    "mine": {
    -        "possessive pronoun": {
    -            "3rd person": {
    -                "male": "his",
    -                "female": "hers",
    -                "neutral": "theirs",  # colloqial,
    -            }
    -        }
    -    },
    -    "myself": {
    -        "reflexive_pronoun": {
    -            "3rd person": {
    -                "male": "himself",
    -                "female": "herself",
    -                "neutral": "itself",
    -                "plural": "themselves",
    -            }
    -        }
    -    },
    -    "you": {
    -        "subject pronoun": {
    -            "3rd person": {
    -                "male": "he",
    -                "female": "she",
    -                "neutral": "it",
    -                "plural": "they",
    -            }
    -        },
    -        "object pronoun": {
    -            "3rd person": {
    -                "male": "him",
    -                "female": "her",
    -                "neutral": "it",
    -                "plural": "them",
    -            }
    -        },
    -    },
    -    "your": {
    -        "possessive adjective": {
    -            "3rd person": {
    -                "male": "his",
    -                "female": "her",
    -                "neutral": "its",
    -                "plural": "their",
    -            }
    -        }
    -    },
    -    "yours": {
    -        "possessive pronoun": {
    -            "3rd person": {
    -                "male": "his",
    -                "female": "hers",
    -                "neutral": "theirs",  # colloqial
    -                "plural": "theirs",
    -            }
    -        }
    -    },
    -    "yourself": {
    -        "reflexive_pronoun": {
    -            "3rd person": {
    -                "male": "himself",
    -                "female": "herself",
    -                "neutral": "itself",
    -            }
    -        }
    -    },
    -    "we": {"subject pronoun": {"3rd person": {"plural": "they"}}},
    -    "us": {"object pronoun": {"3rd person": {"plural": "them"}}},
    -    "our": {"possessive adjective": {"3rd person": {"plural": "their"}}},
    -    "ours": {"possessive pronoun": {"3rd person": {"plural": "theirs"}}},
    -    "ourselves": {"reflexive pronoun": {"3rd person": {"plural": "themselves"}}},
    -    "ours": {"possessive pronoun": {"3rd person": {"plural": "theirs"}}},
    -    "ourselves": {"reflexive pronoun": {"3rd person": {"plural": "themselves"}}},
    -    "yourselves": {"reflexive_pronoun": {"3rd person": {"plural": "themselves"}}},
    -    # 3rd person to 1st/second person mappings
    -    "he": {
    -        "subject pronoun": {
    -            "1st person": {"neutral": "I", "plural": "we"},  # pluralis majestatis
    -            "2nd person": {"neutral": "you", "plural": "you"},  # pluralis majestatis
    -        }
    -    },
    -    "him": {
    -        "object pronoun": {
    -            "1st person": {"neutral": "me", "plural": "us"},  # pluralis majestatis
    -            "2nd person": {"neutral": "you", "plural": "you"},  # pluralis majestatis
    -        }
    -    },
    -    "his": {
    -        "possessive adjective": {
    -            "1st person": {"neutral": "my", "plural": "our"},  # pluralis majestatis
    -            "2nd person": {"neutral": "your", "plural": "your"},  # pluralis majestatis
    -        },
    -        "possessive pronoun": {
    -            "1st person": {"neutral": "mine", "plural": "ours"},  # pluralis majestatis
    -            "2nd person": {"neutral": "yours", "plural": "yours"},  # pluralis majestatis
    -        },
    -    },
    -    "himself": {
    -        "reflexive pronoun": {
    -            "1st person": {"neutral": "myself", "plural": "ourselves"},  # pluralis majestatis
    -            "2nd person": {"neutral": "yours", "plural": "yours"},  # pluralis majestatis
    -        },
    -    },
    -    "she": {
    -        "subject pronoun": {
    -            "1st person": {"neutral": "I", "plural": "you"},  # pluralis majestatis
    -            "2nd person": {"neutral": "you", "plural": "we"},  # pluralis majestatis
    -        }
    -    },
    -    "her": {
    -        "object pronoun": {
    -            "1st person": {"neutral": "me", "plural": "us"},  # pluralis majestatis
    -            "2nd person": {"neutral": "you", "plural": "you"},  # pluralis majestatis
    -        },
    -        "possessive adjective": {
    -            "1st person": {"neutral": "my", "plural": "our"},  # pluralis majestatis
    -            "2nd person": {"neutral": "your", "plural": "your"},  # pluralis majestatis
    -        },
    -    },
    -    "hers": {
    -        "possessive pronoun": {
    -            "1st person": {"neutral": "mine", "plural": "ours"},  # pluralis majestatis
    -            "2nd person": {"neutral": "yours", "plural": "yours"},  # pluralis majestatis
    -        }
    -    },
    -    "herself": {
    -        "reflexive pronoun": {
    -            "1st person": {"neutral": "myself", "plural": "ourselves"},  # pluralis majestatis
    -            "2nd person": {"neutral": "yourself", "plural": "yourselves"},  # pluralis majestatis
    -        },
    -    },
    -    "it": {
    -        "subject pronoun": {
    -            "1st person": {"neutral": "I", "plural": "we"},  # pluralis majestatis
    -            "2nd person": {"neutral": "you", "plural": "you"},  # pluralis majestatis
    -        },
    -        "object pronoun": {
    -            "1st person": {"neutral": "me", "plural": "us"},  # pluralis majestatis
    -            "2nd person": {"neutral": "you", "plural": "you"},  # pluralis majestatis
    -        },
    -    },
    -    "its": {
    -        "possessive adjective": {
    -            "1st person": {"neutral": "my", "plural": "our"},  # pluralis majestatis
    -            "2nd person": {"neutral": "your", "plural": "your"},  # pluralis majestatis
    -        }
    -    },
    -    "theirs": {
    -        "possessive pronoun": {
    -            "1st person": {"neutral": "mine", "plural": "ours"},  # pluralis majestatis
    -            "2nd person": {"neutral": "yours", "plural": "yours"},  # pluralis majestatis
    -        }
    -    },
    -    "itself": {
    -        "reflexive pronoun": {
    -            "1st person": {"neutral": "myself", "plural": "ourselves"},  # pluralis majestatis
    -            "2nd person": {"neutral": "yourself", "plural": "yourselves"},  # pluralis majestatis
    -        },
    -    },
    -    "they": {
    -        "subject pronoun": {
    -            "1st person": {
    -                "plural": "we",
    -            },
    -            "2nd person": {
    -                "plural": "you",
    -            },
    -        }
    -    },
    -    "them": {
    -        "object pronoun": {
    -            "1st person": {
    -                "plural": "us",
    -            },
    -            "2nd person": {
    -                "plural": "you",
    -            },
    -        }
    -    },
    -    "their": {
    -        "possessive adjective": {
    -            "1st person": {
    -                "plural": "our",
    -            },
    -            "2nd person": {
    -                "plural": "your",
    -            },
    -        }
    -    },
    -    "themselves": {
    -        "reflexive pronoun": {
    -            "1st person": {
    -                "plural": "ourselves",
    -            },
    -            "2nd person": {
    -                "plural": "yourselves",
    -            },
    -        }
    -    },
    -}
    -
    -
    -ALIASES = {
    -    "m": "male",
    -    "f": "female",
    -    "n": "neutral",
    -    "p": "plural",
    -    "1st": "1st person",
    -    "2nd": "2nd person",
    -    "3rd": "3rd person",
    -    "1": "1st person",
    -    "2": "2nd person",
    -    "3": "3rd person",
    -    "s": "subject pronoun",
    -    "sp": "subject pronoun",
    -    "subject": "subject pronoun",
    -    "op": "object pronoun",
    -    "object": "object pronoun",
    -    "pa": "possessive adjective",
    -    "pp": "possessive pronoun",
    -}
    -
    -PRONOUN_TYPES = [
    -    "subject pronoun",
    -    "object pronoun",
    -    "possessive adjective",
    -    "possessive pronoun",
    -    "reflexive pronoun",
    -]
    -VIEWPOINTS = ["1st person", "2nd person", "3rd person"]
    -GENDERS = ["male", "female", "neutral", "plural"]  # including plural as a gender for simplicity
    -
    -
    -
    [docs]def pronoun_to_viewpoints( - pronoun, options=None, pronoun_type="object_pronoun", gender="neutral", viewpoint="2nd person" -): - """ - Access function for determining the forms of a pronount from different viewpoints. - - Args: - pronoun (str): A valid English pronoun, such as 'you', 'his', 'themselves' etc. - options (str or list, optional): A list or space-separated string of options to help - the engine when there is no unique mapping to use. This could for example - be "2nd female" (alias 'f') or "possessive adjective" (alias 'pa' or 'a'). - pronoun_type (str, optional): An explicit object pronoun to separate cases where - there is no unique mapping. Pronoun types defined in `options` take precedence. - Values are - - - `subject pronoun`/`subject`/`sp` (I, you, he, they) - - `object pronoun`/`object/`/`op` (me, you, him, them) - - `possessive adjective`/`adjective`/`pa` (my, your, his, their) - - `possessive pronoun`/`pronoun`/`pp` (mine, yours, his, theirs) - - gender (str, optional): Specific gender to use (plural counts a gender for this purpose). - A gender specified in `options` takes precedence. Values and aliases are: - - - `male`/`m` - - `female`/`f` - - `neutral`/`n` - - `plural`/`p` - - viewpoint (str, optional): A specified viewpoint of the one talking, to use - when there is no unique mapping. A viewpoint given in `options` take - precedence. Values and aliases are: - - - `1st person`/`1st`/`1` - - `2nd person`/`2nd`/`2` - - `3rd person`/`3rd`/`3` - - Returns: - tuple: A tuple `(1st/2nd_person_pronoun, 3rd_person_pronoun)` to show to the one sending the - string and others respectively. If pronoun is invalid, the word is returned verbatim. - - Note: - The capitalization of the original word will be retained. - - """ - if not pronoun: - return pronoun - - pronoun_lower = "I" if pronoun == "I" else pronoun.lower() - - if pronoun_lower not in PRONOUN_MAPPING: - return pronoun - - # differentiators - - if pronoun_type not in PRONOUN_TYPES: - pronoun_type = DEFAULT_PRONOUN_TYPE - if viewpoint not in VIEWPOINTS: - viewpoint = DEFAULT_VIEWPOINT - if gender not in GENDERS: - gender = DEFAULT_GENDER - - if options: - # option string/list will override the kwargs differentiators given - if isinstance(options, str): - options = options.split() - options = [str(part).strip().lower() for part in options] - options = [ALIASES.get(opt, opt) for opt in options] - - for opt in options: - if opt in PRONOUN_TYPES: - pronoun_type = opt - elif opt in VIEWPOINTS: - viewpoint = opt - elif opt in GENDERS: - gender = opt - - # step down into the mapping, using differentiators as needed - pronoun_types = PRONOUN_MAPPING[pronoun_lower] - # this has one or more pronoun-types - if len(pronoun_types) == 1: - pronoun_type, viewpoints = next(iter(pronoun_types.items())) - elif pronoun_type in pronoun_types: - viewpoints = pronoun_types[pronoun_type] - elif DEFAULT_PRONOUN_TYPE in pronoun_types: - pronoun_type = DEFAULT_PRONOUN_TYPE - viewpoints = pronoun_types[pronoun_type] - else: - # not enough info - grab the first of the mappings - pronoun_type, viewpoints = next(iter(pronoun_types.items())) - - # we have one or more viewpoints at this point - if len(viewpoints) == 1: - viewpoint, genders = next(iter(viewpoints.items())) - elif viewpoint in viewpoints: - genders = viewpoints[viewpoint] - elif DEFAULT_VIEWPOINT in viewpoints: - viewpoint = DEFAULT_VIEWPOINT - genders = viewpoints[viewpoint] - else: - # not enough info - grab first of mappings - viewpoint, genders = next(iter(viewpoints.items())) - - # we have one or more possible genders (including plural forms) - if len(genders) == 1: - gender, mapped_pronoun = next(iter(genders.items())) - elif gender in genders: - mapped_pronoun = genders[gender] - elif DEFAULT_GENDER in genders: - gender = DEFAULT_GENDER - mapped_pronoun = genders[gender] - else: - # not enough info - grab first mapping - gender, mapped_pronoun = next(iter(genders.items())) - - # keep the same capitalization as the original - if pronoun != "I": - # don't remap I, since this is always capitalized. - mapped_pronoun = copy_word_case(pronoun, mapped_pronoun) - if mapped_pronoun == "i": - mapped_pronoun = mapped_pronoun.upper() - - if viewpoint == "3rd person": - # the remapped viewpoing is in 3rd person, meaning the ingoing viewpoing - # must have been 1st or 2nd person. - return pronoun, mapped_pronoun - else: - # the remapped viewpoint is 1st or 2nd person, so ingoing must have been - # in 3rd person form. - return mapped_pronoun, pronoun
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.utils.verb_conjugation.pronouns

    +"""
    +English pronoun mapping between 1st/2nd person and 3rd person perspective (and vice-versa).
    +
    +This file is released under the Evennia regular BSD License.
    +(Griatch 2021) - revised by InspectorCaracal 2022
    +
    +Pronouns are words you use instead of a proper name, such as 'him', 'herself', 'theirs' etc. These
    +look different depending on who sees the outgoing string. This mapping maps between 1st/2nd case and
    +the 3rd person case and back. In some cases, the mapping is not unique; it is assumed the system can
    +differentiate between the options in some other way.
    +
    +
    +====================  =======  ========  ==========  ==========  ===========
    +viewpoint/pronouns    Subject  Object    Possessive  Possessive  Reflexive
    +                      Pronoun  Pronoun   Adjective   Pronoun     Pronoun
    +====================  =======  ========  ==========  ==========  ===========
    +1st person              I        me        my         mine       myself
    +1st person plural       we       us        our        ours       ourselves
    +2nd person              you      you       your       yours      yourself
    +2nd person plural       you      you       your       yours      yourselves
    +
    +3rd person male         he       him       his        his        himself
    +3rd person female       she      her       her        hers       herself
    +3rd person neutral      it       it        its        its        itself
    +3rd person plural       they     them      their      theirs     themselves
    +====================  =======  ========  ==========  ==========  ===========
    +"""
    +from evennia.utils.utils import copy_word_case, is_iter
    +
    +DEFAULT_PRONOUN_TYPE = "subject pronoun"
    +DEFAULT_VIEWPOINT = "2nd person"
    +DEFAULT_GENDER = "neutral"
    +
    +PRONOUN_TYPES = [
    +    "subject pronoun",
    +    "object pronoun",
    +    "possessive adjective",
    +    "possessive pronoun",
    +    "reflexive pronoun",
    +]
    +VIEWPOINTS = ["1st person", "2nd person", "3rd person"]
    +GENDERS = ["male", "female", "neutral", "plural"]
    +
    +PRONOUN_MAPPING = {
    +    "1st person": {
    +        "subject pronoun": {
    +            "neutral": "I",
    +            "plural": "we",
    +        },
    +        "object pronoun": {
    +            "neutral": "me",
    +            "plural": "us",
    +        },
    +        "possessive adjective": {
    +            "neutral": "my",
    +            "plural": "our",
    +        },
    +        "possessive pronoun": {
    +            "neutral": "mine",
    +            "plural": "ours",
    +        },
    +        "reflexive pronoun": {
    +            "neutral": "myself",
    +            "plural": "ourselves"
    +        }
    +    },
    +    "2nd person": {
    +        "subject pronoun": {
    +            "neutral": "you",
    +        },
    +        "object pronoun": {
    +            "neutral": "you",
    +        },
    +        "possessive adjective": {
    +            "neutral": "your",
    +        },
    +        "possessive pronoun": {
    +            "neutral": "yours",
    +        },
    +        "reflexive pronoun": {
    +            "neutral": "yourself",
    +            "plural": "yourselves",
    +        }
    +    },
    +    "3rd person": {
    +        "subject pronoun": {
    +            "male": "he",
    +            "female": "she",
    +            "neutral": "it",
    +            "plural": "they"
    +        },
    +        "object pronoun": {
    +            "male": "him",
    +            "female": "her",
    +            "neutral": "it",
    +            "plural": "them"
    +        },
    +        "possessive adjective": {
    +            "male": "his",
    +            "female": "her",
    +            "neutral": "its",
    +            "plural": "their"
    +        },
    +        "possessive pronoun": {
    +            "male": "his",
    +            "female": "hers",
    +            "neutral": "its",
    +            "plural": "theirs",
    +        },
    +        "reflexive pronoun": {
    +            "male": "himself",
    +            "female": "herself",
    +            "neutral": "itself",
    +            "plural": "themselves",
    +        },
    +    }
    +}
    +
    +PRONOUN_TABLE = {
    +    "I": (
    +            "1st person",
    +            ("neutral", "male", "female"),
    +            "subject pronoun"
    +        ),
    +    "me": (
    +            "1st person",
    +            ("neutral", "male", "female"),
    +            "object pronoun"
    +        ),
    +    "my": (
    +            "1st person",
    +            ("neutral", "male", "female"),
    +            "possessive adjective"
    +        ),
    +    "mine": (
    +            "1st person",
    +            ("neutral", "male", "female"),
    +            "possessive pronoun"
    +        ),
    +    "myself": (
    +            "1st person",
    +            ("neutral", "male", "female"),
    +            "reflexive pronoun"
    +        ),
    +
    +    "we": (
    +            "1st person",
    +            "plural",
    +            "subject pronoun"
    +        ),
    +    "us": (
    +            "1st person",
    +            "plural",
    +            "object pronoun"
    +        ),
    +    "our": (
    +            "1st person",
    +            "plural",
    +            "possessive adjective"
    +        ),
    +    "ours": (
    +            "1st person",
    +            "plural",
    +            "possessive pronoun"
    +        ),
    +    "ourselves": (
    +            "1st person",
    +            "plural",
    +            "reflexive pronoun"
    +        ),
    +    "you": (
    +            "2nd person",
    +            ("neutral", "male", "female", "plural"),
    +            ("subject pronoun", "object pronoun")
    +        ),
    +    "your": (
    +            "2nd person",
    +            ("neutral", "male", "female", "plural"),
    +            "possessive adjective"
    +        ),
    +    "yours": (
    +            "2nd person",
    +            ("neutral", "male", "female", "plural"),
    +            "possessive pronoun"
    +        ),
    +    "yourself": (
    +            "2nd person",
    +            ("neutral", "male", "female"),
    +            "reflexive pronoun"
    +        ),
    +    "yourselves": (
    +            "2nd person",
    +            "plural",
    +            "reflexive pronoun"
    +        ),
    +    "he": (
    +            "3rd person",
    +            "male",
    +            "subject pronoun"
    +        ),
    +    "him": (
    +            "3rd person",
    +            "male",
    +            "object pronoun"
    +        ),
    +    "his":(
    +            "3rd person",
    +            "male",
    +            ("possessive pronoun","possessive adjective"),
    +        ),
    +    "himself": (
    +            "3rd person",
    +            "male",
    +            "reflexive pronoun"
    +        ),
    +    "she": (
    +            "3rd person",
    +            "female",
    +            "subject pronoun"
    +        ),
    +    "her": (
    +            "3rd person",
    +            "female",
    +            ("object pronoun", "possessive adjective"),
    +        ),
    +    "hers": (
    +            "3rd person",
    +            "female",
    +            "possessive pronoun"
    +        ),
    +    "herself": (
    +            "3rd person",
    +            "female",
    +            "reflexive pronoun"
    +        ),
    +    "it": (
    +            "3rd person",
    +            "neutral",
    +            ("subject pronoun", "object pronoun"),
    +        ),
    +    "its": (
    +            "3rd person",
    +            "neutral",
    +            ("possessive pronoun", "possessive adjective"),
    +        ),
    +    "itself": (
    +            "3rd person",
    +            "neutral",
    +            "reflexive pronoun"
    +        ),
    +    "they": (
    +            "3rd person",
    +            "plural",
    +            "subject pronoun"
    +        ),
    +    "them": (
    +            "3rd person",
    +            "plural",
    +            "object pronoun"
    +        ),
    +    "their": (
    +            "3rd person",
    +            "plural",
    +            "possessive adjective"
    +        ),
    +    "theirs": (
    +            "3rd person",
    +            "plural",
    +            "possessive pronoun"
    +        ),
    +    "themselves": (
    +            "3rd person",
    +            "plural",
    +            "reflexive pronoun"
    +        ),
    +}
    +
    +# define the default viewpoint conversions
    +VIEWPOINT_CONVERSION = {
    +    "1st person": "3rd person",
    +    "2nd person": "3rd person",
    +    "3rd person": ("1st person", "2nd person"),
    +}
    +
    +ALIASES = {
    +    "m": "male",
    +    "f": "female",
    +    "n": "neutral",
    +    "p": "plural",
    +    "1st": "1st person",
    +    "2nd": "2nd person",
    +    "3rd": "3rd person",
    +    "1": "1st person",
    +    "2": "2nd person",
    +    "3": "3rd person",
    +    "s": "subject pronoun",
    +    "sp": "subject pronoun",
    +    "subject": "subject pronoun",
    +    "op": "object pronoun",
    +    "object": "object pronoun",
    +    "pa": "possessive adjective",
    +    "pp": "possessive pronoun",
    +}
    +
    +
    +
    [docs]def pronoun_to_viewpoints( + pronoun, options=None, pronoun_type=DEFAULT_PRONOUN_TYPE, gender=DEFAULT_GENDER, viewpoint=DEFAULT_VIEWPOINT +): + """ + Access function for determining the forms of a pronount from different viewpoints. + + Args: + pronoun (str): A valid English pronoun, such as 'you', 'his', 'themselves' etc. + options (str or list, optional): A list or space-separated string of options to help + the engine when there is no unique mapping to use. This could for example + be "2nd female" (alias 'f') or "possessive adjective" (alias 'pa' or 'a'). + pronoun_type (str, optional): An explicit object pronoun to separate cases where + there is no unique mapping. Pronoun types defined in `options` take precedence. + Values are + + - `subject pronoun`/`subject`/`sp` (I, you, he, they) + - `object pronoun`/`object/`/`op` (me, you, him, them) + - `possessive adjective`/`adjective`/`pa` (my, your, his, their) + - `possessive pronoun`/`pronoun`/`pp` (mine, yours, his, theirs) + + gender (str, optional): Specific gender to use (plural counts a gender for this purpose). + A gender specified in `options` takes precedence. Values and aliases are: + + - `male`/`m` + - `female`/`f` + - `neutral`/`n` + - `plural`/`p` + + viewpoint (str, optional): A specified viewpoint of the one talking, to use + when there is no unique mapping. A viewpoint given in `options` take + precedence. Values and aliases are: + + - `1st person`/`1st`/`1` + - `2nd person`/`2nd`/`2` + - `3rd person`/`3rd`/`3` + + Returns: + tuple: A tuple `(1st/2nd_person_pronoun, 3rd_person_pronoun)` to show to the one sending the + string and others respectively. If pronoun is invalid, the word is returned verbatim. + + Note: + The capitalization of the original word will be retained. + + """ + if not pronoun: + return pronoun + + pronoun_lower = "I" if pronoun == "I" else pronoun.lower() + + if pronoun_lower not in PRONOUN_TABLE: + return pronoun + + # get the default data for the input pronoun + source_viewpoint, source_gender, source_type = PRONOUN_TABLE[pronoun_lower] + + # differentiators + if pronoun_type not in PRONOUN_TYPES: + pronoun_type = DEFAULT_PRONOUN_TYPE + if viewpoint not in VIEWPOINTS: + viewpoint = DEFAULT_VIEWPOINT + if gender not in GENDERS: + gender = DEFAULT_GENDER + + if options: + # option string/list will override the kwargs differentiators given + if isinstance(options, str): + options = options.split() + options = [str(part).strip().lower() for part in options] + options = [ALIASES.get(opt, opt) for opt in options] + + for opt in options: + if opt in PRONOUN_TYPES: + pronoun_type = opt + elif opt in VIEWPOINTS: + viewpoint = opt + elif opt in GENDERS: + gender = opt + + # check if pronoun maps to multiple options and differentiate + # but don't allow invalid differentiators + if is_iter(source_type): + pronoun_type = pronoun_type if pronoun_type in source_type else source_type[0] + else: + pronoun_type = source_type + target_viewpoint = VIEWPOINT_CONVERSION[source_viewpoint] + if is_iter(target_viewpoint): + viewpoint = viewpoint if viewpoint in target_viewpoint else target_viewpoint[0] + else: + viewpoint = target_viewpoint + + # special handling for the royal "we" + if is_iter(source_gender): + gender_opts = list(source_gender) + else: + gender_opts = [source_gender] + if viewpoint == "1st person": + # make sure plural is always an option when converting to 1st person + # it doesn't matter if it's in the list twice, so don't bother checking + gender_opts.append("plural") + # if the gender is still not in the extended options, fall back to source pronoun's default + gender = gender if gender in gender_opts else gender_opts[0] + + # step down into the mapping + viewpoint_map = PRONOUN_MAPPING[viewpoint] + pronouns = viewpoint_map.get(pronoun_type, viewpoint_map[DEFAULT_PRONOUN_TYPE]) + mapped_pronoun = pronouns.get(gender, pronouns[DEFAULT_GENDER]) + + # keep the same capitalization as the original + if pronoun != "I": + # don't remap I, since this is always capitalized. + mapped_pronoun = copy_word_case(pronoun, mapped_pronoun) + if mapped_pronoun == "i": + mapped_pronoun = mapped_pronoun.upper() + + if viewpoint == "3rd person": + # the desired viewpoint is 3rd person, meaning the incoming viewpoint + # must have been 1st or 2nd person. + return pronoun, mapped_pronoun + else: + # the desired viewpoint is 1st or 2nd person, so incoming must have been + # in 3rd person form. + return mapped_pronoun, pronoun
    +
    + +
    +
    +
    +
    +
    +
    @@ -321,7 +355,7 @@ ("you", "m", "you", "he"), ("you", "f op", "you", "her"), ("I", "", "I", "it"), - ("I", "p", "I", "it"), # plural is invalid + ("I", "p", "I", "it"), # plural is invalid ("I", "m", "I", "he"), ("Me", "n", "Me", "It"), ("your", "p", "your", "their"), @@ -337,7 +371,6 @@ ("her", "p", "you", "her"), ("her", "pa", "your", "her"), ("their", "pa", "your", "their"), - ("their", "pa", "your", "their"), ("itself", "", "yourself", "itself"), ("themselves", "", "yourselves", "themselves"), ("herself", "", "yourself", "herself"), @@ -353,49 +386,14 @@ received_1st_or_2nd_person, received_3rd_person = pronouns.pronoun_to_viewpoints( pronoun, options ) - self.assertEqual(expected_1st_or_2nd_person, received_1st_or_2nd_person) self.assertEqual(expected_3rd_person, received_3rd_person)
    -
    - -
    +
    +
    @@ -471,44 +505,10 @@ return HttpResponseRedirect(reverse("admin:accounts_accountdb_change", args=[obj.id]))
    -
    - -
    +
    +
    @@ -251,44 +285,10 @@ return ProxyFormset
    -
    - -
    +
    +
    @@ -361,44 +395,10 @@ return HttpResponseRedirect(reverse("admin:comms_channeldb_change", args=[obj.id]))
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.web.admin.frontpage

    -"""
    -Admin views.
    -
    -"""
    -
    -from django.contrib.admin.sites import site
    -from django.shortcuts import render
    -from django.contrib.admin.views.decorators import staff_member_required
    -
    -from evennia.accounts.models import AccountDB
    -
    -
    -
    [docs]@staff_member_required -def evennia_admin(request): - """ - Helpful Evennia-specific admin page. - - """ - return render(request, "admin/frontpage.html", {"accountdb": AccountDB})
    - - -
    [docs]def admin_wrapper(request): - """ - Wrapper that allows us to properly use the base Django admin site, if needed. - - """ - return staff_member_required(site.index)(request)
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.web.admin.frontpage

    +"""
    +Admin views.
    +
    +"""
    +
    +from django.contrib.admin.sites import site
    +from django.shortcuts import render
    +from django.contrib.admin.views.decorators import staff_member_required
    +
    +from evennia.accounts.models import AccountDB
    +
    +
    +
    [docs]@staff_member_required +def evennia_admin(request): + """ + Helpful Evennia-specific admin page. + + """ + return render(request, "admin/frontpage.html", {"accountdb": AccountDB})
    + + +
    [docs]def admin_wrapper(request): + """ + Wrapper that allows us to properly use the base Django admin site, if needed. + + """ + return staff_member_required(site.index)(request)
    +
    + +
    +
    +
    +
    +
    +
    @@ -106,44 +140,10 @@ )
    -
    - -
    +
    +
    @@ -417,44 +451,10 @@ return HttpResponseRedirect(reverse("admin:objects_objectdb_change", args=[obj.id]))
    -
    - -
    +
    +
    @@ -197,44 +231,10 @@ obj.set_class_from_typeclass(typeclass_path=obj.db_typeclass_path)
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.web.admin.server

    -"""
    -
    -This sets up how models are displayed
    -in the web admin interface.
    -
    -"""
    -
    -from django.contrib import admin
    -from evennia.server.models import ServerConfig
    -
    -
    -
    [docs]@admin.register(ServerConfig) -class ServerConfigAdmin(admin.ModelAdmin): - """ - Custom admin for server configs - - """ - - list_display = ("db_key", "db_value") - list_display_links = ("db_key",) - ordering = ["db_key", "db_value"] - search_fields = ["db_key"] - save_as = True - save_on_top = True - list_select_related = True
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.web.admin.server

    +"""
    +
    +This sets up how models are displayed
    +in the web admin interface.
    +
    +"""
    +
    +from django.contrib import admin
    +from evennia.server.models import ServerConfig
    +
    +
    +
    [docs]@admin.register(ServerConfig) +class ServerConfigAdmin(admin.ModelAdmin): + """ + Custom admin for server configs + + """ + + list_display = ("db_key", "db_value") + list_display_links = ("db_key",) + ordering = ["db_key", "db_value"] + search_fields = ["db_key"] + save_as = True + save_on_top = True + list_select_related = True
    +
    + +
    +
    +
    +
    +
    +
    @@ -275,44 +309,10 @@ )
    -
    - -
    +
    +
    @@ -132,44 +166,10 @@ return [("", "-")] + [(path, path) for path in cpaths if path]
    -
    - -
    +
    +
    @@ -190,44 +224,10 @@ alias = AliasFilter(lookup_expr="iexact")
    -
    - -
    +
    +
    @@ -135,44 +169,10 @@ return self.check_locks(obj, request.user, self.update_locks)
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.web.api.root

    -"""
    -Set a more useful description on the Api root.
    -
    -"""
    -
    -from rest_framework import routers
    -
    -
    -
    [docs]class EvenniaAPIRoot(routers.APIRootView): - """ - Root of the Evennia API tree. - - """ - - pass
    - - -
    [docs]class APIRootRouter(routers.DefaultRouter): - APIRootView = EvenniaAPIRoot
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.web.api.root

    +"""
    +Set a more useful description on the Api root.
    +
    +"""
    +
    +from rest_framework import routers
    +
    +
    +
    [docs]class EvenniaAPIRoot(routers.APIRootView): + """ + Root of the Evennia API tree. + + """ + + pass
    + + +
    [docs]class APIRootRouter(routers.DefaultRouter): + APIRootView = EvenniaAPIRoot
    +
    + +
    +
    +
    +
    +
    +
    @@ -396,44 +430,10 @@ read_only_fields = ["id"]
    -
    - -
    +
    +
    @@ -229,44 +263,10 @@ self.assertEquals(view.obj.attributes.get(attr_name), None)
    -
    - -
    +
    +
    @@ -214,44 +248,10 @@ list_serializer_class = serializers.HelpListSerializer
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.web.templatetags.addclass

    -from django import template
    -
    -register = template.Library()
    -
    -
    -
    [docs]@register.filter(name="addclass") -def addclass(field, given_class): - existing_classes = field.field.widget.attrs.get("class", None) - if existing_classes: - if existing_classes.find(given_class) == -1: - # if the given class doesn't exist in the existing classes - classes = existing_classes + " " + given_class - else: - classes = existing_classes - else: - classes = given_class - return field.as_widget(attrs={"class": classes})
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.web.templatetags.addclass

    +from django import template
    +
    +register = template.Library()
    +
    +
    +
    [docs]@register.filter(name="addclass") +def addclass(field, given_class): + existing_classes = field.field.widget.attrs.get("class", None) + if existing_classes: + if existing_classes.find(given_class) == -1: + # if the given class doesn't exist in the existing classes + classes = existing_classes + " " + given_class + else: + classes = existing_classes + else: + classes = given_class + return field.as_widget(attrs={"class": classes})
    +
    + +
    +
    +
    +
    +
    +
    @@ -91,44 +125,10 @@ return [app_mapping.get(app_label) for app_label in self.app_order]
    -
    - -
    +
    +
    @@ -85,44 +119,10 @@ return None
    -
    - -
    +
    +
    @@ -173,44 +207,10 @@ }
    -
    - -
    +
    +
    @@ -114,44 +148,10 @@ csession["webclient_authenticated_nonce"] = 0
    -
    - -
    +
    +
    @@ -94,44 +128,10 @@ )
    -
    - -
    +
    +
    @@ -72,44 +106,10 @@ return render(request, "webclient.html", pagevars)
    -
    - -
    +
    +
    @@ -220,44 +254,10 @@ pass
    -
    - -
    +
    +
    @@ -408,44 +442,10 @@ self.assertEqual(response.status_code, 403)
    -
    - -
    +
    +
    @@ -118,44 +152,10 @@ return HttpResponseRedirect(self.success_url)
    -
    - -
    +
    +
    @@ -220,44 +254,10 @@ return obj
    -
    - -
    +
    +
    @@ -297,44 +331,10 @@ return self.form_invalid(form)
    -
    - -
    +
    -
    -
    - -

    Source code for evennia.web.website.views.errors

    -"""
    -Error views.
    -
    -"""
    -
    -from django.shortcuts import render
    -
    -
    -
    [docs]def to_be_implemented(request): - """ - A notice letting the user know that this particular feature hasn't been - implemented yet. - """ - - pagevars = {"page_title": "To Be Implemented..."} - - return render(request, "tbi.html", pagevars)
    -
    - -
    -
    -
    -
    -
    +
    +
    + +

    Source code for evennia.web.website.views.errors

    +"""
    +Error views.
    +
    +"""
    +
    +from django.shortcuts import render
    +
    +
    +
    [docs]def to_be_implemented(request): + """ + A notice letting the user know that this particular feature hasn't been + implemented yet. + """ + + pagevars = {"page_title": "To Be Implemented..."} + + return render(request, "tbi.html", pagevars)
    +
    + +
    +
    +
    +
    +
    +
    @@ -373,44 +407,10 @@ return obj
    -
    - -
    +
    +
    @@ -159,44 +193,10 @@ return context
    -
    - -
    +
    +
    @@ -131,44 +165,10 @@ return "Delete %s" % self.typeclass._meta.verbose_name.title()
    -
    - -
    +
    +
    @@ -292,44 +326,10 @@ return HttpResponseRedirect(self.get_success_url())
    -
    - -
    +
    +
    @@ -1045,44 +1079,10 @@ __class_getitem__ = classmethod(GenericAlias)
    -
    - -
    +
    +
    @@ -453,44 +487,10 @@ del cls._module.urlpatterns
    -
    - -
    + - -
    +
    +
    @@ -1168,57 +1215,10 @@ overriding the call (unused by default).

    -
    - -
    +
    +
    @@ -465,57 +512,10 @@ triggered by the bot_data_in Inputfunc.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.accounts

    -

    This sub-package defines the out-of-character entities known as -Accounts. These are equivalent to ‘accounts’ and can puppet one or -more Objects depending on settings. An Account has no in-game existence.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.accounts

    +

    This sub-package defines the out-of-character entities known as +Accounts. These are equivalent to ‘accounts’ and can puppet one or +more Objects depending on settings. An Account has no in-game existence.

    + +
    + + +
    +
    +
    +
    +
    +
    @@ -223,7 +270,7 @@ the empty string, will be set to None.

    Keyword Arguments
    • typeclass (str) – The typeclass to use for the account.

    • -
    • is_superuser (bool) – Wether or not this account is to be a superuser

    • +
    • is_superuser (bool) – Whether or not this account is to be a superuser

    • locks (str) – Lockstring.

    • permission (list) – List of permission strings.

    • tags (list) – List of Tags on form (key, category[, data])

    • @@ -275,57 +322,10 @@ accounts of this typeclass.

      -
    - -
    +
    +
    @@ -481,57 +528,10 @@ object the first time, the query is executed.

    -
    - -
    +
    +
    @@ -141,57 +188,10 @@ default Evennia.

    -
    - -
    +
    +
    @@ -177,57 +224,10 @@ the remaining arguments, and the matched cmdobject from the cmdset.

    -
    - -
    +
    +
    @@ -394,57 +441,10 @@ self.add().

    -
    - -
    +
    +
    @@ -362,57 +409,10 @@ handled automatically by @reload).

    -
    - -
    +
    +
    @@ -509,57 +556,10 @@ detailing the contents of the table.

    -
    - -
    +
    +
    @@ -831,57 +878,10 @@ to all the variables defined therein.

    -
    - -
    +
    +
    @@ -516,57 +563,10 @@ including all currently unlogged in.

    -
    - -
    +
    +
    @@ -191,57 +238,10 @@ object copies behind when testing out the script.

    -
    - -
    +
    +
    @@ -1296,7 +1343,7 @@ server settings.

    -aliases = ['@swap', '@parent', '@typeclasses', '@update', '@type']
    +aliases = ['@typeclasses', '@swap', '@type', '@parent', '@update']
    @@ -1327,7 +1374,7 @@ server settings.

    -search_index_entry = {'aliases': '@swap @parent @typeclasses @update @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap parent typeclasses update type', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
    +search_index_entry = {'aliases': '@typeclasses @swap @type @parent @update', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass typeclasses swap type parent update', 'tags': '', 'text': "\n set or change an object's typeclass\n\n Usage:\n typeclass[/switch] <object> [= typeclass.path]\n typeclass/prototype <object> = prototype_key\n\n typeclasses or typeclass/list/show [typeclass.path]\n swap - this is a shorthand for using /force/reset flags.\n update - this is a shorthand for using the /force/reload flag.\n\n Switch:\n show, examine - display the current typeclass of object (default) or, if\n given a typeclass path, show the docstring of that typeclass.\n update - *only* re-run at_object_creation on this object\n meaning locks or other properties set later may remain.\n reset - clean out *all* the attributes and properties on the\n object - basically making this a new clean object. This will also\n reset cmdsets!\n force - change to the typeclass also if the object\n already has a typeclass of the same name.\n list - show available typeclasses. Only typeclasses in modules actually\n imported or used from somewhere in the code will show up here\n (those typeclasses are still available if you know the path)\n prototype - clean and overwrite the object with the specified\n prototype key - effectively making a whole new object.\n\n Example:\n type button = examples.red_button.RedButton\n type/prototype button=a red button\n\n If the typeclass_path is not given, the current object's typeclass is\n assumed.\n\n View or set an object's typeclass. If setting, the creation hooks of the\n new typeclass will be run on the object. If you have clashing properties on\n the old class, use /reset. By default you are protected from changing to a\n typeclass of the same name as the one you already have - use /force to\n override this protection.\n\n The given typeclass must be identified by its location using python\n dot-notation pointing to the correct module and class. If no typeclass is\n given (or a wrong typeclass is given). Errors in the path or new typeclass\n will lead to the old typeclass being kept. The location of the typeclass\n module is searched from the default typeclass directory, as defined in the\n server settings.\n\n "}
    @@ -1784,7 +1831,7 @@ one is given.

    -aliases = ['@locate', '@search']
    +aliases = ['@search', '@locate']
    @@ -1815,7 +1862,7 @@ one is given.

    -search_index_entry = {'aliases': '@locate @search', 'category': 'building', 'key': '@find', 'no_prefix': 'find locate search', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
    +search_index_entry = {'aliases': '@search @locate', 'category': 'building', 'key': '@find', 'no_prefix': 'find search locate', 'tags': '', 'text': '\n search the database for objects\n\n Usage:\n find[/switches] <name or dbref or *account> [= dbrefmin[-dbrefmax]]\n locate - this is a shorthand for using the /loc switch.\n\n Switches:\n room - only look for rooms (location=None)\n exit - only look for exits (destination!=None)\n char - only look for characters (BASE_CHARACTER_TYPECLASS)\n exact - only exact matches are returned.\n loc - display object location if exists and match has one result\n startswith - search for names starting with the string, rather than containing\n\n Searches the database for an object of a particular name or exact #dbref.\n Use *accountname to search for an account. The switches allows for\n limiting object matches to certain game entities. Dbrefmin and dbrefmax\n limits matches to within the given dbrefs range, or above/below if only\n one is given.\n '}
    @@ -2233,57 +2280,10 @@ displays a list of available prototypes.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.commands.default.cmdset_account

    -

    This is the cmdset for Account (OOC) commands. These are -stored on the Account object and should thus be able to handle getting -an Account object as caller rather than a Character.

    -

    Note - in order for session-rerouting (in MULTISESSION_MODE=2) to -function, all commands in this cmdset should use the self.msg() -command method rather than caller.msg().

    -
    -
    -class evennia.commands.default.cmdset_account.AccountCmdSet(cmdsetobj=None, key=None)[source]
    -

    Bases: evennia.commands.cmdset.CmdSet

    -

    Implements the account command set.

    -
    -
    -key = 'DefaultAccount'
    -
    - -
    -
    -priority = -10
    -
    - -
    -
    -at_cmdset_creation()[source]
    -

    Populates the cmdset

    -
    - -
    -
    -path = 'evennia.commands.default.cmdset_account.AccountCmdSet'
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.commands.default.cmdset_account

    +

    This is the cmdset for Account (OOC) commands. These are +stored on the Account object and should thus be able to handle getting +an Account object as caller rather than a Character.

    +

    Note - in order for session-rerouting (in MULTISESSION_MODE=2) to +function, all commands in this cmdset should use the self.msg() +command method rather than caller.msg().

    +
    +
    +class evennia.commands.default.cmdset_account.AccountCmdSet(cmdsetobj=None, key=None)[source]
    +

    Bases: evennia.commands.cmdset.CmdSet

    +

    Implements the account command set.

    +
    +
    +key = 'DefaultAccount'
    +
    + +
    +
    +priority = -10
    +
    + +
    +
    +at_cmdset_creation()[source]
    +

    Populates the cmdset

    +
    + +
    +
    +path = 'evennia.commands.default.cmdset_account.AccountCmdSet'
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.commands.default.cmdset_character

    -

    This module ties together all the commands default Character objects have -available (i.e. IC commands). Note that some commands, such as -communication-commands are instead put on the account level, in the -Account cmdset. Account commands remain available also to Characters.

    -
    -
    -class evennia.commands.default.cmdset_character.CharacterCmdSet(cmdsetobj=None, key=None)[source]
    -

    Bases: evennia.commands.cmdset.CmdSet

    -

    Implements the default command set.

    -
    -
    -key = 'DefaultCharacter'
    -
    - -
    -
    -priority = 0
    -
    - -
    -
    -at_cmdset_creation()[source]
    -

    Populates the cmdset

    -
    - -
    -
    -path = 'evennia.commands.default.cmdset_character.CharacterCmdSet'
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.commands.default.cmdset_character

    +

    This module ties together all the commands default Character objects have +available (i.e. IC commands). Note that some commands, such as +communication-commands are instead put on the account level, in the +Account cmdset. Account commands remain available also to Characters.

    +
    +
    +class evennia.commands.default.cmdset_character.CharacterCmdSet(cmdsetobj=None, key=None)[source]
    +

    Bases: evennia.commands.cmdset.CmdSet

    +

    Implements the default command set.

    +
    +
    +key = 'DefaultCharacter'
    +
    + +
    +
    +priority = 0
    +
    + +
    +
    +at_cmdset_creation()[source]
    +

    Populates the cmdset

    +
    + +
    +
    +path = 'evennia.commands.default.cmdset_character.CharacterCmdSet'
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.commands.default.cmdset_session

    -

    This module stores session-level commands.

    -
    -
    -class evennia.commands.default.cmdset_session.SessionCmdSet(cmdsetobj=None, key=None)[source]
    -

    Bases: evennia.commands.cmdset.CmdSet

    -

    Sets up the unlogged cmdset.

    -
    -
    -key = 'DefaultSession'
    -
    - -
    -
    -priority = -20
    -
    - -
    -
    -at_cmdset_creation()[source]
    -

    Populate the cmdset

    -
    - -
    -
    -path = 'evennia.commands.default.cmdset_session.SessionCmdSet'
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.commands.default.cmdset_session

    +

    This module stores session-level commands.

    +
    +
    +class evennia.commands.default.cmdset_session.SessionCmdSet(cmdsetobj=None, key=None)[source]
    +

    Bases: evennia.commands.cmdset.CmdSet

    +

    Sets up the unlogged cmdset.

    +
    +
    +key = 'DefaultSession'
    +
    + +
    +
    +priority = -20
    +
    + +
    +
    +at_cmdset_creation()[source]
    +

    Populate the cmdset

    +
    + +
    +
    +path = 'evennia.commands.default.cmdset_session.SessionCmdSet'
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.commands.default.cmdset_unloggedin

    -

    This module describes the unlogged state of the default game. -The setting STATE_UNLOGGED should be set to the python path -of the state instance in this module.

    -
    -
    -class evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet(cmdsetobj=None, key=None)[source]
    -

    Bases: evennia.commands.cmdset.CmdSet

    -

    Sets up the unlogged cmdset.

    -
    -
    -key = 'DefaultUnloggedin'
    -
    - -
    -
    -priority = 0
    -
    - -
    -
    -at_cmdset_creation()[source]
    -

    Populate the cmdset

    -
    - -
    -
    -path = 'evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet'
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.commands.default.cmdset_unloggedin

    +

    This module describes the unlogged state of the default game. +The setting STATE_UNLOGGED should be set to the python path +of the state instance in this module.

    +
    +
    +class evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet(cmdsetobj=None, key=None)[source]
    +

    Bases: evennia.commands.cmdset.CmdSet

    +

    Sets up the unlogged cmdset.

    +
    +
    +key = 'DefaultUnloggedin'
    +
    + +
    +
    +priority = 0
    +
    + +
    +
    +at_cmdset_creation()[source]
    +

    Populate the cmdset

    +
    + +
    +
    +path = 'evennia.commands.default.cmdset_unloggedin.UnloggedinCmdSet'
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -207,7 +254,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

    -aliases = ['@chan', '@channels']
    +aliases = ['@channels', '@chan']
    @@ -733,7 +780,7 @@ don’t actually sub to yet.

    -search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    +search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    @@ -886,7 +933,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

    -aliases = ['@chan', '@channels']
    +aliases = ['@channels', '@chan']
    @@ -906,7 +953,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

    -search_index_entry = {'aliases': '@chan @channels', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel chan channels', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    +search_index_entry = {'aliases': '@channels @chan', 'category': 'comms', 'key': '@channel', 'no_prefix': 'channel channels chan', 'tags': '', 'text': "\n Use and manage in-game channels.\n\n Usage:\n channel channelname <msg>\n channel channel name = <msg>\n channel (show all subscription)\n channel/all (show available channels)\n channel/alias channelname = alias[;alias...]\n channel/unalias alias\n channel/who channelname\n channel/history channelname [= index]\n channel/sub channelname [= alias[;alias...]]\n channel/unsub channelname[,channelname, ...]\n channel/mute channelname[,channelname,...]\n channel/unmute channelname[,channelname,...]\n\n channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n channel/desc channelname = description\n channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n channel/ban channelname (list bans)\n channel/ban[/quiet] channelname[, channelname, ...] = subscribername [: reason]\n channel/unban[/quiet] channelname[, channelname, ...] = subscribername\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n\n # subtopics\n\n ## sending\n\n Usage: channel channelname msg\n channel channel name = msg (with space in channel name)\n\n This sends a message to the channel. Note that you will rarely use this\n command like this; instead you can use the alias\n\n channelname <msg>\n channelalias <msg>\n\n For example\n\n public Hello World\n pub Hello World\n\n (this shortcut doesn't work for aliases containing spaces)\n\n See channel/alias for help on setting channel aliases.\n\n ## alias and unalias\n\n Usage: channel/alias channel = alias[;alias[;alias...]]\n channel/unalias alias\n channel - this will list your subs and aliases to each channel\n\n Set one or more personal aliases for referencing a channel. For example:\n\n channel/alias warrior's guild = warrior;wguild;warchannel;warrior guild\n\n You can now send to the channel using all of these:\n\n warrior's guild Hello\n warrior Hello\n wguild Hello\n warchannel Hello\n\n Note that this will not work if the alias has a space in it. So the\n 'warrior guild' alias must be used with the `channel` command:\n\n channel warrior guild = Hello\n\n Channel-aliases can be removed one at a time, using the '/unalias' switch.\n\n ## who\n\n Usage: channel/who channelname\n\n List the channel's subscribers. Shows who are currently offline or are\n muting the channel. Subscribers who are 'muting' will not see messages sent\n to the channel (use channel/mute to mute a channel).\n\n ## history\n\n Usage: channel/history channel [= index]\n\n This will display the last |c20|n lines of channel history. By supplying an\n index number, you will step that many lines back before viewing those 20 lines.\n\n For example:\n\n channel/history public = 35\n\n will go back 35 lines and show the previous 20 lines from that point (so\n lines -35 to -55).\n\n ## sub and unsub\n\n Usage: channel/sub channel [=alias[;alias;...]]\n channel/unsub channel\n\n This subscribes you to a channel and optionally assigns personal shortcuts\n for you to use to send to that channel (see aliases). When you unsub, all\n your personal aliases will also be removed.\n\n ## mute and unmute\n\n Usage: channel/mute channelname\n channel/unmute channelname\n\n Muting silences all output from the channel without actually\n un-subscribing. Other channel members will see that you are muted in the /who\n list. Sending a message to the channel will automatically unmute you.\n\n ## create and destroy\n\n Usage: channel/create channelname[;alias;alias[:typeclass]] [= description]\n channel/destroy channelname [= reason]\n\n Creates a new channel (or destroys one you control). You will automatically\n join the channel you create and everyone will be kicked and loose all aliases\n to a destroyed channel.\n\n ## lock and unlock\n\n Usage: channel/lock channelname = lockstring\n channel/unlock channelname = lockstring\n\n Note: this is an admin command.\n\n A lockstring is on the form locktype:lockfunc(). Channels understand three\n locktypes:\n listen - who may listen or join the channel.\n send - who may send messages to the channel\n control - who controls the channel. This is usually the one creating\n the channel.\n\n Common lockfuncs are all() and perm(). To make a channel everyone can\n listen to but only builders can talk on, use this:\n\n listen:all()\n send: perm(Builders)\n\n ## boot and ban\n\n Usage:\n channel/boot[/quiet] channelname[,channelname,...] = subscribername [: reason]\n channel/ban channelname[, channelname, ...] = subscribername [: reason]\n channel/unban channelname[, channelname, ...] = subscribername\n channel/unban channelname\n channel/ban channelname (list bans)\n\n Booting will kick a named subscriber from channel(s) temporarily. The\n 'reason' will be passed to the booted user. Unless the /quiet switch is\n used, the channel will also be informed of the action. A booted user is\n still able to re-connect, but they'll have to set up their aliases again.\n\n Banning will blacklist a user from (re)joining the provided channels. It\n will then proceed to boot them from those channels if they were connected.\n The 'reason' and `/quiet` works the same as for booting.\n\n Example:\n boot mychannel1 = EvilUser : Kicking you to cool down a bit.\n ban mychannel1,mychannel2= EvilUser : Was banned for spamming.\n\n "}
    @@ -1273,57 +1320,10 @@ must be added to game settings.

    -
    - -
    +
    +
    @@ -219,7 +266,7 @@ for everyone to use, you need build privileges and the alias command.

    -aliases = ['nickname', 'nicks']
    +aliases = ['nicks', 'nickname']
    @@ -251,7 +298,7 @@ for everyone to use, you need build privileges and the alias command.

    -search_index_entry = {'aliases': 'nickname nicks', 'category': 'general', 'key': 'nick', 'no_prefix': ' nickname nicks', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}
    +search_index_entry = {'aliases': 'nicks nickname', 'category': 'general', 'key': 'nick', 'no_prefix': ' nicks nickname', 'tags': '', 'text': '\n define a personal alias/nick by defining a string to\n match and replace it with another on the fly\n\n Usage:\n nick[/switches] <string> [= [replacement_string]]\n nick[/switches] <template> = <replacement_template>\n nick/delete <string> or number\n nicks\n\n Switches:\n inputline - replace on the inputline (default)\n object - replace on object-lookup\n account - replace on account-lookup\n list - show all defined aliases (also "nicks" works)\n delete - remove nick by index in /list\n clearall - clear all nicks\n\n Examples:\n nick hi = say Hello, I\'m Sarah!\n nick/object tom = the tall man\n nick build $1 $2 = create/drop $1;$2\n nick tell $1 $2=page $1=$2\n nick tm?$1=page tallman=$1\n nick tm\\=$1=page tallman=$1\n\n A \'nick\' is a personal string replacement. Use $1, $2, ... to catch arguments.\n Put the last $-marker without an ending space to catch all remaining text. You\n can also use unix-glob matching for the left-hand side <string>:\n\n * - matches everything\n ? - matches 0 or 1 single characters\n [abcd] - matches these chars in any order\n [!abcd] - matches everything not among these chars\n \\= - escape literal \'=\' you want in your <string>\n\n Note that no objects are actually renamed or changed by this command - your nicks\n are only available to you. If you want to permanently add keywords to an object\n for everyone to use, you need build privileges and the alias command.\n\n '}
    @@ -763,57 +810,10 @@ which permission groups you are a member of.

    -
    - -
    +
    +
    @@ -459,57 +506,10 @@ the user will be able to enter a partial match to access it.

    -
    - -
    +
    +
    +
    @@ -253,57 +300,10 @@ character is actually attached to this Account and Session.

    -
    - -
    +
    +
    @@ -209,57 +256,10 @@ the raw_cmdname is the cmdname unmodified by eventual prefix-st -
    - -
    +
    +
    @@ -634,7 +681,7 @@ See |luhttps://ww
    -aliases = ['@delays', '@task']
    +aliases = ['@task', '@delays']
    @@ -680,7 +727,7 @@ to all the variables defined therein.

    -search_index_entry = {'aliases': '@delays @task', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks delays task', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
    +search_index_entry = {'aliases': '@task @delays', 'category': 'system', 'key': '@tasks', 'no_prefix': 'tasks task delays', 'tags': '', 'text': "\n Display or terminate active tasks (delays).\n\n Usage:\n tasks[/switch] [task_id or function_name]\n\n Switches:\n pause - Pause the callback of a task.\n unpause - Process all callbacks made since pause() was called.\n do_task - Execute the task (call its callback).\n call - Call the callback of this task.\n remove - Remove a task without executing it.\n cancel - Stop a task from automatically executing.\n\n Notes:\n A task is a single use method of delaying the call of a function. Calls are created\n in code, using `evennia.utils.delay`.\n See |luhttps://www.evennia.com/docs/latest/Command-Duration.html|ltthe docs|le for help.\n\n By default, tasks that are canceled and never called are cleaned up after one minute.\n\n Examples:\n - `tasks/cancel move_callback` - Cancels all movement delays from the slow_exit contrib.\n In this example slow exits creates it's tasks with\n `utils.delay(move_delay, move_callback)`\n - `tasks/cancel 2` - Cancel task id 2.\n\n "}
    @@ -740,57 +787,10 @@ to all the variables defined therein.

    -
    - -
    +
    +
    @@ -853,7 +900,7 @@ main test suite started with

    Test the batch processor.

    -red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmpt439vk98/caa46997884d347a53675565c8f3a9d08abb7de2/evennia/contrib/tutorials/red_button/red_button.py'>
    +red_button = <module 'evennia.contrib.tutorials.red_button.red_button' from '/tmp/tmp5vy9obbc/3d6b1be7093f6df4c45aef564bde0383709a92de/evennia/contrib/tutorials/red_button/red_button.py'>
    @@ -1006,57 +1053,10 @@ set in self.parse())

    -
    - -
    +
    +
    @@ -73,7 +120,7 @@ connect “account name” “pass word”

    -aliases = ['con', 'co', 'conn']
    +aliases = ['co', 'conn', 'con']
    @@ -108,7 +155,7 @@ there is no object yet before the account has logged in)

    -search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    +search_index_entry = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n connect to the game\n\n Usage (at login screen):\n connect accountname password\n connect "account name" "pass word"\n\n Use the create command to first create an account before logging in.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    @@ -132,7 +179,7 @@ create “account name” “pass word”

    -aliases = ['cr', 'cre']
    +aliases = ['cre', 'cr']
    @@ -163,7 +210,7 @@ create “account name” “pass word”

    -search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    +search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n create a new account account\n\n Usage (at login screen):\n create <accountname> <password>\n create "account name" "pass word"\n\n This creates a new account account.\n\n If you have spaces in your name, enclose it in double quotes.\n '}
    @@ -187,7 +234,7 @@ version is a bit more complicated.

    -aliases = ['qu', 'q']
    +aliases = ['q', 'qu']
    @@ -213,7 +260,7 @@ version is a bit more complicated.

    -search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    +search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n quit when in unlogged-in state\n\n Usage:\n quit\n\n We maintain a different version of the quit command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    @@ -286,7 +333,7 @@ for simplicity. It shows a pane of info.

    -aliases = ['?', 'h']
    +aliases = ['h', '?']
    @@ -312,7 +359,7 @@ for simplicity. It shows a pane of info.

    -search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
    +search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n get help when in unconnected-in state\n\n Usage:\n help\n\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
    @@ -470,57 +517,10 @@ logged in, use option screenreader on).

    -
    - -
    + -
    +
    +
    +
    +
    +
    @@ -851,57 +898,10 @@ responsibility.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.comms

    -

    This sub-package contains Evennia’s comms-system, a set of models and -handlers for in-game communication via channels and messages as well -as code related to external communication like IRC or RSS.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.comms

    +

    This sub-package contains Evennia’s comms-system, a set of models and +handlers for in-game communication via channels and messages as well +as code related to external communication like IRC or RSS.

    + +
    + + +
    +
    +
    +
    +
    +
    @@ -392,57 +439,10 @@ case sensitive) match.

    -
    - -
    +
    +
    @@ -787,57 +834,10 @@ entities to un-subscribe from the channel.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.awsstorage.aws_s3_cdn

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +
    +
    @@ -274,57 +321,10 @@ -
    - -
    +
    +
    @@ -897,57 +944,10 @@ set in self.parse())

    -
    - -
    +
    +
    +
    @@ -128,57 +175,10 @@ Use add_choice and its variants to create menu choices.

    -
    - -
    +
    +
    @@ -99,57 +146,10 @@ COLOR_ANSI_BRIGHT_BGS_EXTRA_MAP = color_markups.CURLY_COLOR_ANSI_BRIGHT_BGS_EXTR -
    - -
    +
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.color_markups.tests

    -

    Test Color markup.

    -
    -
    -class evennia.contrib.base_systems.color_markups.tests.TestColorMarkup(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -

    Note: Normally this would be tested by importing the ansi parser and run -the mappings through it. This is not possible since the ansi module creates -its mapping at the module/class level; since the ansi module is used by so -many other modules it appears that trying to overload -settings to test it causes issues with unrelated tests.

    -
    -
    -test_curly_markup()[source]
    -
    - -
    -
    -test_mux_markup()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.base_systems.color_markups.tests

    +

    Test Color markup.

    +
    +
    +class evennia.contrib.base_systems.color_markups.tests.TestColorMarkup(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +

    Note: Normally this would be tested by importing the ansi parser and run +the mappings through it. This is not possible since the ansi module creates +its mapping at the module/class level; since the ansi module is used by so +many other modules it appears that trying to overload +settings to test it causes issues with unrelated tests.

    +
    +
    +test_curly_markup()[source]
    +
    + +
    +
    +test_mux_markup()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -202,57 +249,10 @@ To persist the value, the key must correspond to a DBField.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.components.dbfield

    -

    Components - ChrisLR 2022

    -

    This file contains the Descriptors used to set Fields in Components

    -
    -
    -class evennia.contrib.base_systems.components.dbfield.DBField(default=None, category=None, strattr=False, lockstring='', autocreate=True)[source]
    -

    Bases: evennia.typeclasses.attributes.AttributeProperty

    -

    Component Attribute Descriptor. -Allows you to set attributes related to a component on the class. -It uses AttributeProperty under the hood but prefixes the key with the component name.

    -
    - -
    -
    -class evennia.contrib.base_systems.components.dbfield.NDBField(default=None, category=None, strattr=False, lockstring='', autocreate=True)[source]
    -

    Bases: evennia.typeclasses.attributes.NAttributeProperty

    -

    Component In-Memory Attribute Descriptor. -Allows you to set in-memory attributes related to a component on the class. -It uses NAttributeProperty under the hood but prefixes the key with the component name.

    -
    - -
    -
    -class evennia.contrib.base_systems.components.dbfield.TagField(default=None, enforce_single=False)[source]
    -

    Bases: object

    -

    Component Tags Descriptor. -Allows you to set Tags related to a component on the class. -The tags are set with a prefixed category, so it can support -multiple tags or enforce a single one.

    -

    Default value of a tag is added when the component is registered. -Tags are removed if the component itself is removed.

    -
    -
    -__init__(default=None, enforce_single=False)[source]
    -

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

    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.base_systems.components.dbfield

    +

    Components - ChrisLR 2022

    +

    This file contains the Descriptors used to set Fields in Components

    +
    +
    +class evennia.contrib.base_systems.components.dbfield.DBField(default=None, category=None, strattr=False, lockstring='', autocreate=True)[source]
    +

    Bases: evennia.typeclasses.attributes.AttributeProperty

    +

    Component Attribute Descriptor. +Allows you to set attributes related to a component on the class. +It uses AttributeProperty under the hood but prefixes the key with the component name.

    +
    + +
    +
    +class evennia.contrib.base_systems.components.dbfield.NDBField(default=None, category=None, strattr=False, lockstring='', autocreate=True)[source]
    +

    Bases: evennia.typeclasses.attributes.NAttributeProperty

    +

    Component In-Memory Attribute Descriptor. +Allows you to set in-memory attributes related to a component on the class. +It uses NAttributeProperty under the hood but prefixes the key with the component name.

    +
    + +
    +
    +class evennia.contrib.base_systems.components.dbfield.TagField(default=None, enforce_single=False)[source]
    +

    Bases: object

    +

    Component Tags Descriptor. +Allows you to set Tags related to a component on the class. +The tags are set with a prefixed category, so it can support +multiple tags or enforce a single one.

    +

    Default value of a tag is added when the component is registered. +Tags are removed if the component itself is removed.

    +
    +
    +__init__(default=None, enforce_single=False)[source]
    +

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

    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -262,57 +309,10 @@ components that were set on the typeclass using ComponentProperty.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.components

    -

    Components - ChrisLR 2022

    -

    This is a basic Component System. -It allows you to use components on typeclasses using a simple syntax. -This helps writing isolated code and reusing it over multiple objects.

    -

    See the docs for more information.

    -
    -
    -evennia.contrib.base_systems.components.get_component_class(component_name)[source]
    -
    - - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.base_systems.components

    +

    Components - ChrisLR 2022

    +

    This is a basic Component System. +It allows you to use components on typeclasses using a simple syntax. +This helps writing isolated code and reusing it over multiple objects.

    +

    See the docs for more information.

    +
    +
    +evennia.contrib.base_systems.components.get_component_class(component_name)[source]
    +
    + + +
    + + +
    +
    +
    +
    +
    +
    @@ -221,57 +268,10 @@ It will be passed to aggregate_func if it is also given.

    -
    - -
    +
    +
    @@ -542,57 +589,10 @@ to any instance of this typeclass.

    -
    - -
    +
    +
    @@ -296,57 +343,10 @@ The time is given in units as keyword arguments.

    -
    - -
    +
    +
    +
    @@ -100,57 +147,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.email_login.connection_screens

    -

    Connection screen

    -

    This is the text to show the user when they first connect to the game (before -they log in).

    -

    To change the login screen in this module, do one of the following:

    -
      -
    • Define a function connection_screen(), taking no arguments. This will be -called first and must return the full string to act as the connection screen. -This can be used to produce more dynamic screens.

    • -
    • Alternatively, define a string variable in the outermost scope of this module -with the connection string that should be displayed. If more than one such -variable is given, Evennia will pick one of them at random.

    • -
    -

    The commands available to the user when the connection screen is shown -are defined in evennia.default_cmds.UnloggedinCmdSet. The parsing and display -of the screen is done by the unlogged-in “look” command.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.base_systems.email_login.connection_screens

    +

    Connection screen

    +

    This is the text to show the user when they first connect to the game (before +they log in).

    +

    To change the login screen in this module, do one of the following:

    +
      +
    • Define a function connection_screen(), taking no arguments. This will be +called first and must return the full string to act as the connection screen. +This can be used to produce more dynamic screens.

    • +
    • Alternatively, define a string variable in the outermost scope of this module +with the connection string that should be displayed. If more than one such +variable is given, Evennia will pick one of them at random.

    • +
    +

    The commands available to the user when the connection screen is shown +are defined in evennia.default_cmds.UnloggedinCmdSet. The parsing and display +of the screen is done by the unlogged-in “look” command.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -90,7 +137,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.

    -aliases = ['con', 'co', 'conn']
    +aliases = ['co', 'conn', 'con']
    @@ -120,7 +167,7 @@ there is no object yet before the account has logged in)

    -search_index_entry = {'aliases': 'con co conn', 'category': 'general', 'key': 'connect', 'no_prefix': ' con co conn', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
    +search_index_entry = {'aliases': 'co conn con', 'category': 'general', 'key': 'connect', 'no_prefix': ' co conn con', 'tags': '', 'text': '\n Connect to the game.\n\n Usage (at login screen):\n connect <email> <password>\n\n Use the create command to first create an account before logging in.\n '}
    @@ -142,7 +189,7 @@ there is no object yet before the account has logged in)

    -aliases = ['cr', 'cre']
    +aliases = ['cre', 'cr']
    @@ -178,7 +225,7 @@ name enclosed in quotes:

    -search_index_entry = {'aliases': 'cr cre', 'category': 'general', 'key': 'create', 'no_prefix': ' cr cre', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
    +search_index_entry = {'aliases': 'cre cr', 'category': 'general', 'key': 'create', 'no_prefix': ' cre cr', 'tags': '', 'text': '\n Create a new account.\n\n Usage (at login screen):\n create "accountname" <email> <password>\n\n This creates a new account account.\n\n '}
    @@ -197,7 +244,7 @@ version is a bit more complicated.

    -aliases = ['qu', 'q']
    +aliases = ['q', 'qu']
    @@ -223,7 +270,7 @@ version is a bit more complicated.

    -search_index_entry = {'aliases': 'qu q', 'category': 'general', 'key': 'quit', 'no_prefix': ' qu q', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    +search_index_entry = {'aliases': 'q qu', 'category': 'general', 'key': 'quit', 'no_prefix': ' q qu', 'tags': '', 'text': '\n We maintain a different version of the `quit` command\n here for unconnected accounts for the sake of simplicity. The logged in\n version is a bit more complicated.\n '}
    @@ -286,7 +333,7 @@ for simplicity. It shows a pane of info.

    -aliases = ['?', 'h']
    +aliases = ['h', '?']
    @@ -312,7 +359,7 @@ for simplicity. It shows a pane of info.

    -search_index_entry = {'aliases': '? h', 'category': 'general', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
    +search_index_entry = {'aliases': 'h ?', 'category': 'general', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n This is an unconnected version of the help command,\n for simplicity. It shows a pane of info.\n '}
    @@ -320,57 +367,10 @@ for simplicity. It shows a pane of info.

    -
    - -
    +
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.email_login.tests

    -

    Test email login.

    -
    -
    -class evennia.contrib.base_systems.email_login.tests.TestEmailLogin(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_connect()[source]
    -
    - -
    -
    -test_quit()[source]
    -
    - -
    -
    -test_unconnectedlook()[source]
    -
    - -
    -
    -test_unconnectedhelp()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.base_systems.email_login.tests

    +

    Test email login.

    +
    +
    +class evennia.contrib.base_systems.email_login.tests.TestEmailLogin(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_connect()[source]
    +
    + +
    +
    +test_quit()[source]
    +
    + +
    +
    +test_unconnectedlook()[source]
    +
    + +
    +
    +test_unconnectedhelp()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -119,57 +166,10 @@ -
    - -
    +
    +
    @@ -292,57 +339,10 @@ the expected fields for a callback (code, author, valid…).

    -
    - -
    +
    +
    @@ -67,7 +114,7 @@
    -aliases = ['@calls', '@callbacks', '@callback']
    +aliases = ['@callback', '@callbacks', '@calls']
    @@ -148,7 +195,7 @@ on user permission.

    -search_index_entry = {'aliases': '@calls @callbacks @callback', 'category': 'building', 'key': '@call', 'no_prefix': 'call calls callbacks callback', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
    +search_index_entry = {'aliases': '@callback @callbacks @calls', 'category': 'building', 'key': '@call', 'no_prefix': 'call callback callbacks calls', 'tags': '', 'text': '\n Command to edit callbacks.\n '}
    @@ -156,57 +203,10 @@ on user permission.

    -
    - -
    +
    +
    @@ -124,57 +171,10 @@ to be called from inside another event.

    -
    - -
    +
    +
    +
    @@ -413,57 +460,10 @@ restart only twice.

    -
    - -
    +
    +
    @@ -199,57 +246,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.ingame_python.typeclasses

    -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -177,57 +224,10 @@ either “yes” or “okay” (maybe ‘say I don’t like it, but okay’).

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.menu_login.connection_screens

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.menu_login.menu_login

    -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.base_systems.menu_login.tests

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +
    +
    @@ -168,7 +215,7 @@ for that channel.

    -aliases = ['delaliaschan', 'delchanalias']
    +aliases = ['delchanalias', 'delaliaschan']
    @@ -199,7 +246,7 @@ for that channel.

    -search_index_entry = {'aliases': 'delaliaschan delchanalias', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delaliaschan delchanalias', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
    +search_index_entry = {'aliases': 'delchanalias delaliaschan', 'category': 'comms', 'key': 'delcom', 'no_prefix': ' delchanalias delaliaschan', 'tags': '', 'text': "\n remove a channel alias and/or unsubscribe from channel\n\n Usage:\n delcom <alias or channel>\n delcom/all <channel>\n\n If the full channel name is given, unsubscribe from the\n channel. If an alias is given, remove the alias but don't\n unsubscribe. If the 'all' switch is used, remove all aliases\n for that channel.\n "}
    @@ -606,57 +653,10 @@ channel lists.

    -
    - -
    +
    +
    @@ -106,57 +153,10 @@ -
    - -
    +
    +
    +
    @@ -120,57 +167,10 @@ -
    - -
    +
    +
    @@ -346,57 +393,10 @@ use its add_argument method.

    -
    - -
    +
    +
    @@ -162,7 +209,7 @@ the operation will be general or on the room.

    -aliases = ['quit', 'chicken out', 'q', 'abort']
    +aliases = ['q', 'abort', 'chicken out', 'quit']
    @@ -186,7 +233,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'quit chicken out q abort', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit chicken out q abort', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}
    +search_index_entry = {'aliases': 'q abort chicken out quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q abort chicken out quit', 'tags': '', 'text': '\n Give up\n\n Usage:\n give up\n\n Abandons your attempts at escaping and of ever winning the pie-eating contest.\n\n '}
    @@ -322,7 +369,7 @@ shout

    -aliases = ['shout', 'whisper', ';']
    +aliases = ['whisper', ';', 'shout']
    @@ -351,7 +398,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'shout whisper ;', 'category': 'general', 'key': 'say', 'no_prefix': ' shout whisper ;', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}
    +search_index_entry = {'aliases': 'whisper ; shout', 'category': 'general', 'key': 'say', 'no_prefix': ' whisper ; shout', 'tags': '', 'text': '\n Perform an communication action.\n\n Usage:\n say <text>\n whisper\n shout\n\n '}
    @@ -441,7 +488,7 @@ looks and what actions is available.

    -aliases = ['ex', 'examine', 'unfocus', 'e']
    +aliases = ['unfocus', 'examine', 'ex', 'e']
    @@ -470,7 +517,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'ex examine unfocus e', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex examine unfocus e', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}
    +search_index_entry = {'aliases': 'unfocus examine ex e', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' unfocus examine ex e', 'tags': '', 'text': '\n Focus your attention on a target.\n\n Usage:\n focus <obj>\n\n Once focusing on an object, use look to get more information about how it\n looks and what actions is available.\n\n '}
    @@ -532,7 +579,7 @@ set in self.parse())

    -aliases = ['inv', 'give', 'i', 'inventory']
    +aliases = ['give', 'inventory', 'inv', 'i']
    @@ -556,7 +603,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'inv give i inventory', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inv give i inventory', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
    +search_index_entry = {'aliases': 'give inventory inv i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' give inventory inv i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
    @@ -1010,57 +1057,10 @@ self.add().

    -
    - -
    +
    +
    +
    @@ -164,57 +211,10 @@ option related to this node.

    -
    - -
    +
    +
    @@ -1787,57 +1834,10 @@ inject the list of callsigns.

    -
    - -
    +
    +
    @@ -246,57 +293,10 @@ contents of the object by default.

    -
    - -
    +
    +
    @@ -107,57 +154,10 @@ overriding the call (unused by default).

    -
    - -
    +
    +
    @@ -243,57 +290,10 @@ happens just before room.character_cleanup()

    -
    - -
    +
    +
    @@ -183,57 +230,10 @@ -
    - -
    +
    +
    @@ -175,57 +222,10 @@ surrounded by borders.

    -
    - -
    +
    +
    +
    @@ -696,7 +743,7 @@ try to influence the other part in the deal.

    -aliases = ['deal', 'offers']
    +aliases = ['offers', 'deal']
    @@ -722,7 +769,7 @@ try to influence the other part in the deal.

    -search_index_entry = {'aliases': 'deal offers', 'category': 'trading', 'key': 'status', 'no_prefix': ' deal offers', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}
    +search_index_entry = {'aliases': 'offers deal', 'category': 'trading', 'key': 'status', 'no_prefix': ' offers deal', 'tags': '', 'text': "\n show a list of the current deal\n\n Usage:\n status\n deal\n offers\n\n Shows the currently suggested offers on each sides of the deal. To\n accept the current deal, use the 'accept' command. Use 'offer' to\n change your deal. You might also want to use 'say', 'emote' etc to\n try to influence the other part in the deal.\n "}
    @@ -858,57 +905,10 @@ info to your choice.

    -
    - -
    +
    +
    -
    -
    - -
    -

    evennia.contrib.game_systems.barter.tests

    -

    Test the contrib barter system

    -
    -
    -class evennia.contrib.game_systems.barter.tests.TestBarter(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -setUp()[source]
    -

    Sets up testing environment

    -
    - -
    -
    -test_tradehandler_base()[source]
    -
    - -
    -
    -test_tradehandler_joins()[source]
    -
    - -
    -
    -test_tradehandler_offers()[source]
    -
    - -
    -
    -test_cmdtrade()[source]
    -
    - -
    -
    -test_cmdtradehelp()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.game_systems.barter.tests

    +

    Test the contrib barter system

    +
    +
    +class evennia.contrib.game_systems.barter.tests.TestBarter(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +setUp()[source]
    +

    Sets up testing environment

    +
    + +
    +
    +test_tradehandler_base()[source]
    +
    + +
    +
    +test_tradehandler_joins()[source]
    +
    + +
    +
    +test_tradehandler_offers()[source]
    +
    + +
    +
    +test_cmdtrade()[source]
    +
    + +
    +
    +test_cmdtradehelp()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -708,57 +755,10 @@ items.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.game_systems.clothing

    -

    Clothing contrib - Tim Ashley Jenkins 2017

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.game_systems.clothing.tests

    -

    Testing clothing contrib

    -
    -
    -class evennia.contrib.game_systems.clothing.tests.TestClothingCmd(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_clothingcommands()[source]
    -
    - -
    - -
    -
    -class evennia.contrib.game_systems.clothing.tests.TestClothingFunc(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -test_clothingfunctions()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.game_systems.clothing.tests

    +

    Testing clothing contrib

    +
    +
    +class evennia.contrib.game_systems.clothing.tests.TestClothingCmd(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_clothingcommands()[source]
    +
    + +
    + +
    +
    +class evennia.contrib.game_systems.clothing.tests.TestClothingFunc(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +test_clothingfunctions()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -291,57 +338,10 @@ requirements small.

    -
    - -
    +
    +
    +
    @@ -150,57 +197,10 @@ -
    - -
    +
    +
    @@ -882,68 +940,10 @@ the crafting_tool_err_msg if available.

    -
    - -
    +
    +
    +
    @@ -275,57 +322,10 @@ -
    - -
    +
    +
    @@ -197,57 +244,10 @@ All extra kwargs will be passed on to the protocol.

    -
    - -
    +
    +
    -
    -
    - -
    -

    evennia.contrib.game_systems.gendersub.tests

    -

    Test gendersub contrib.

    -
    -
    -class evennia.contrib.game_systems.gendersub.tests.TestGenderSub(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_setgender()[source]
    -
    - -
    -
    -test_gendercharacter()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.game_systems.gendersub.tests

    +

    Test gendersub contrib.

    +
    +
    +class evennia.contrib.game_systems.gendersub.tests.TestGenderSub(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_setgender()[source]
    +
    + +
    +
    +test_gendercharacter()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -119,57 +166,10 @@ -
    - -
    +
    +
    +
    @@ -316,57 +363,10 @@ reply - Replies to a received message, appending the original message to the b -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.game_systems.mail.tests

    -

    Test mail contrib

    -
    -
    -class evennia.contrib.game_systems.mail.tests.TestMail(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_mail()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.game_systems.mail.tests

    +

    Test mail contrib

    +
    +
    +class evennia.contrib.game_systems.mail.tests.TestMail(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_mail()[source]
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    +
    @@ -141,57 +188,10 @@ description in use and db.multidesc to store all descriptions.< -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.game_systems.multidescer.tests

    -

    Test multidescer contrib.

    -
    -
    -class evennia.contrib.game_systems.multidescer.tests.TestMultidescer(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_cmdmultidesc()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.game_systems.multidescer.tests

    +

    Test multidescer contrib.

    +
    +
    +class evennia.contrib.game_systems.multidescer.tests.TestMultidescer(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_cmdmultidesc()[source]
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    +
    @@ -523,57 +570,10 @@ self.add().

    -
    - -
    +
    +
    @@ -120,57 +167,10 @@ -
    - -
    +
    +
    +
    @@ -623,7 +670,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    @@ -649,7 +696,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    @@ -835,57 +882,10 @@ topics related to the game.

    -
    - -
    +
    +
    @@ -518,7 +565,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    @@ -538,7 +585,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    @@ -903,57 +950,10 @@ You can’t use this command in combat.

    -
    - -
    +
    +
    @@ -641,7 +688,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    @@ -661,7 +708,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    @@ -879,57 +926,10 @@ to attack others, and as such can only be used in combat.

    -
    - -
    +
    +
    @@ -420,7 +467,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    @@ -440,7 +487,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    @@ -763,57 +810,10 @@ topics related to the game.

    -
    - -
    +
    +
    @@ -880,7 +927,7 @@ if there are still any actions you can take.

    -aliases = ['wait', 'hold']
    +aliases = ['hold', 'wait']
    @@ -900,7 +947,7 @@ if there are still any actions you can take.

    -search_index_entry = {'aliases': 'wait hold', 'category': 'combat', 'key': 'pass', 'no_prefix': ' wait hold', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    +search_index_entry = {'aliases': 'hold wait', 'category': 'combat', 'key': 'pass', 'no_prefix': ' hold wait', 'tags': '', 'text': '\n Passes on your turn.\n\n Usage:\n pass\n\n When in a fight, you can use this command to end your turn early, even\n if there are still any actions you can take.\n '}
    @@ -1117,57 +1164,10 @@ topics related to the game.

    -
    - -
    +
    +
    @@ -240,57 +287,10 @@ -
    - -
    +
    +
    @@ -518,57 +565,10 @@ self.add().

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.grid.extended_room

    -

    Extended Room - Griatch 2012, vincent-lg 2019

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -129,57 +176,10 @@ -
    - -
    +
    +
    @@ -122,57 +169,10 @@ -
    - -
    +
    +
    +
    @@ -327,57 +374,10 @@ self.add().

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.grid.ingame_map_display.tests

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +
    -
    -
    - -
    -

    evennia.contrib.grid.mapbuilder.mapbuilder

    -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.grid.mapbuilder.tests

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +
    +
    @@ -281,57 +328,10 @@ self.add().

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.grid.simpledoor.tests

    -

    Tests of simpledoor.

    -
    -
    -class evennia.contrib.grid.simpledoor.tests.TestSimpleDoor(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_cmdopen()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.grid.simpledoor.tests

    +

    Tests of simpledoor.

    +
    +
    +class evennia.contrib.grid.simpledoor.tests.TestSimpleDoor(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_cmdopen()[source]
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    +
    @@ -243,69 +302,10 @@ self.add().

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.grid.slow_exit.tests

    -

    Slow exit tests.

    -
    -
    -class evennia.contrib.grid.slow_exit.tests.TestSlowExit(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_exit()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.grid.slow_exit.tests

    +

    Slow exit tests.

    +
    +
    +class evennia.contrib.grid.slow_exit.tests.TestSlowExit(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_exit()[source]
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    +
    @@ -115,57 +162,10 @@ -
    - -
    +
    +
    @@ -680,68 +738,10 @@ coordinate.

    -
    - -
    +
    +
    @@ -357,57 +404,10 @@ self.add().

    -
    - -
    +
    +
    @@ -105,57 +152,10 @@ into a room by only acts as a target for finding the exit’s destination.

    -
    - -
    +
    +
    -
    -
    - -
    -

    evennia.contrib.grid.xyzgrid.launchcmd

    -

    Custom Evennia launcher command option for maintaining the grid in a separate process than the main -server (since this can be slow).

    -

    To use, add to the settings:

    -
    EXTRA_LAUNCHER_COMMANDS.update({'xyzgrid': 'evennia.contrib.grid.xyzgrid.launchcmd.xyzcommand'})
    -
    -
    -

    You should now be able to do

    -
    evennia xyzgrid <options>
    -
    -
    -

    Use evennia xyzgrid help for usage help.

    -
    -
    -evennia.contrib.grid.xyzgrid.launchcmd.xyzcommand(*args)[source]
    -

    Evennia launcher command. This is made available as evennia xyzgrid on the command line, -once added to settings.EXTRA_LAUNCHER_COMMANDS.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.grid.xyzgrid.launchcmd

    +

    Custom Evennia launcher command option for maintaining the grid in a separate process than the main +server (since this can be slow).

    +

    To use, add to the settings:

    +
    EXTRA_LAUNCHER_COMMANDS.update({'xyzgrid': 'evennia.contrib.grid.xyzgrid.launchcmd.xyzcommand'})
    +
    +
    +

    You should now be able to do

    +
    evennia xyzgrid <options>
    +
    +
    +

    Use evennia xyzgrid help for usage help.

    +
    +
    +evennia.contrib.grid.xyzgrid.launchcmd.xyzcommand(*args)[source]
    +

    Evennia launcher command. This is made available as evennia xyzgrid on the command line, +once added to settings.EXTRA_LAUNCHER_COMMANDS.

    +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.grid.xyzgrid.prototypes

    -

    Default prototypes for building the XYZ-grid into actual game-rooms.

    -

    Add this to mygame/conf/settings/settings.py:

    -
    -

    PROTOTYPE_MODULES += [‘evennia.contrib.grid.xyzgrid.prototypes’]

    -
    -

    The prototypes can then be used in mapping prototypes as

    -
    -

    {‘prototype_parent’: ‘xyz_room’, …}

    -
    -

    and/or

    -
    -

    {‘prototype_parent’: ‘xyz_exit’, …}

    -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.grid.xyzgrid.prototypes

    +

    Default prototypes for building the XYZ-grid into actual game-rooms.

    +

    Add this to mygame/conf/settings/settings.py:

    +
    +

    PROTOTYPE_MODULES += [‘evennia.contrib.grid.xyzgrid.prototypes’]

    +
    +

    The prototypes can then be used in mapping prototypes as

    +
    +

    {‘prototype_parent’: ‘xyz_room’, …}

    +
    +

    and/or

    +
    +

    {‘prototype_parent’: ‘xyz_exit’, …}

    +
    +
    + + +
    +
    +
    +
    +
    +
    @@ -1332,60 +1379,111 @@ different visibility distances.

    +
    +
    +class evennia.contrib.grid.xyzgrid.tests.TestXyzRoom(id, db_key, db_typeclass_path, db_date_created, db_lock_storage, db_account, db_sessid, db_location, db_home, db_destination, db_cmdset_storage)[source]
    +

    Bases: evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom

    +
    +
    +at_object_creation()[source]
    +

    Called once, when this object is first created. This is the +normal hook to overload for most object types.

    +
    + +
    +
    +exception DoesNotExist
    +

    Bases: evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom.DoesNotExist

    +
    + +
    +
    +exception MultipleObjectsReturned
    +

    Bases: evennia.contrib.grid.xyzgrid.xyzroom.XYZRoom.MultipleObjectsReturned

    +
    + +
    +
    +path = 'evennia.contrib.grid.xyzgrid.tests.TestXyzRoom'
    +
    + +
    +
    +typename = 'TestXyzRoom'
    +
    + +
    + +
    +
    +class evennia.contrib.grid.xyzgrid.tests.TestXyzExit(id, db_key, db_typeclass_path, db_date_created, db_lock_storage, db_account, db_sessid, db_location, db_home, db_destination, db_cmdset_storage)[source]
    +

    Bases: evennia.contrib.grid.xyzgrid.xyzroom.XYZExit

    +
    +
    +at_object_creation()[source]
    +

    Called once, when this object is first created. This is the +normal hook to overload for most object types.

    +
    + +
    +
    +exception DoesNotExist
    +

    Bases: evennia.contrib.grid.xyzgrid.xyzroom.XYZExit.DoesNotExist

    +
    + +
    +
    +exception MultipleObjectsReturned
    +

    Bases: evennia.contrib.grid.xyzgrid.xyzroom.XYZExit.MultipleObjectsReturned

    +
    + +
    +
    +path = 'evennia.contrib.grid.xyzgrid.tests.TestXyzExit'
    +
    + +
    +
    +typename = 'TestXyzExit'
    +
    + +
    + +
    +
    +class evennia.contrib.grid.xyzgrid.tests.TestCallbacks(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +setUp()[source]
    +

    Sets up testing environment

    +
    + +
    +
    +setup_grid(map_data)[source]
    +
    + +
    +
    +tearDown()[source]
    +

    Hook method for deconstructing the test fixture after testing it.

    +
    + +
    +
    +test_typeclassed_xyzroom_and_xyzexit_with_at_object_creation_are_called()[source]
    +
    + +
    + -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.grid.xyzgrid.utils

    -

    Helpers and resources for the map system.

    -
    -
    -exception evennia.contrib.grid.xyzgrid.utils.MapError(error='', node_or_link=None)[source]
    -

    Bases: RuntimeError

    -
    -
    -__init__(error='', node_or_link=None)[source]
    -

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

    -
    - -
    - -
    -
    -exception evennia.contrib.grid.xyzgrid.utils.MapParserError(error='', node_or_link=None)[source]
    -

    Bases: evennia.contrib.grid.xyzgrid.utils.MapError

    -
    - -
    -
    -exception evennia.contrib.grid.xyzgrid.utils.MapTransition[source]
    -

    Bases: RuntimeWarning

    -

    Used when signaling to the parser that a link -leads to another map.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.grid.xyzgrid.utils

    +

    Helpers and resources for the map system.

    +
    +
    +exception evennia.contrib.grid.xyzgrid.utils.MapError(error='', node_or_link=None)[source]
    +

    Bases: RuntimeError

    +
    +
    +__init__(error='', node_or_link=None)[source]
    +

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

    +
    + +
    + +
    +
    +exception evennia.contrib.grid.xyzgrid.utils.MapParserError(error='', node_or_link=None)[source]
    +

    Bases: evennia.contrib.grid.xyzgrid.utils.MapError

    +
    + +
    +
    +exception evennia.contrib.grid.xyzgrid.utils.MapTransition[source]
    +

    Bases: RuntimeWarning

    +

    Used when signaling to the parser that a link +leads to another map.

    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -488,65 +543,10 @@ weights and may also show nodes not actually reachable at the moment:

    -
    - -
    +
    +
    @@ -1238,65 +1293,10 @@ one-way link out of the teleporter on one side.

    -
    - -
    +
    +
    @@ -289,57 +336,10 @@ previously exist.

    -
    - -
    +
    +
    @@ -488,57 +535,10 @@ be any room (including non-XYRooms) and is not checked for XYZ coordinates.

    < -
    - -
    +
    +
    @@ -413,6 +460,11 @@ useful but are deemed too game-specific to go into the core library.

  • evennia.contrib.utils.fieldfill.fieldfill
  • +
  • evennia.contrib.utils.git_integration +
  • evennia.contrib.utils.name_generator
  • - -
    +
    +
    @@ -1003,73 +1066,10 @@ set in self.parse())

    -
    - -
    +
    +
    +
    @@ -347,57 +394,10 @@ cache: The cache dictionary (what you get if you use handler.buffca -
    - -
    +
    +
    @@ -198,57 +245,10 @@ restart or reload.

    -
    - -
    +
    +
    @@ -246,7 +303,7 @@ everyone but the person rolling.

    -aliases = ['roll', '@dice']
    +aliases = ['@dice', 'roll']
    @@ -272,7 +329,7 @@ everyone but the person rolling.

    -search_index_entry = {'aliases': 'roll @dice', 'category': 'general', 'key': 'dice', 'no_prefix': ' roll dice', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}
    +search_index_entry = {'aliases': '@dice roll', 'category': 'general', 'key': 'dice', 'no_prefix': ' dice roll', 'tags': '', 'text': "\n roll dice\n\n Usage:\n dice[/switch] <nr>d<sides> [modifier] [success condition]\n\n Switch:\n hidden - tell the room the roll is being done, but don't show the result\n secret - don't inform the room about neither roll nor result\n\n Examples:\n dice 3d6 + 4\n dice 1d100 - 2 < 50\n\n This will roll the given number of dice with given sides and modifiers.\n So e.g. 2d6 + 3 means to 'roll a 6-sided die 2 times and add the result,\n then add 3 to the total'.\n Accepted modifiers are +, -, * and /.\n A success condition is given as normal Python conditionals\n (<,>,<=,>=,==,!=). So e.g. 2d6 + 3 > 10 means that the roll will succeed\n only if the final result is above 8. If a success condition is given, the\n outcome (pass/fail) will be echoed along with how much it succeeded/failed\n with. The hidden/secret switches will hide all or parts of the roll from\n everyone but the person rolling.\n "}
    @@ -300,67 +357,10 @@ Add with @py self.cmdset.add(“contrib.dice.DiceCmdSet”)

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.rpg.dice

    -

    Rolling dice - Griatch, 2012

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.rpg.dice.tests

    -

    Testing of TestDice.

    -
    -
    -class evennia.contrib.rpg.dice.tests.TestDice(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_roll_dice(mocked_randint)[source]
    -
    - -
    -
    -test_cmddice(mocked_randint)[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.rpg.dice.tests

    +

    Testing of TestDice.

    +
    +
    +class evennia.contrib.rpg.dice.tests.TestDice(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_roll_dice(mocked_randint)[source]
    +
    + +
    +
    +test_cmddice(mocked_randint)[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -122,57 +169,10 @@ readers will be unable to read the graphical aspect of the bar.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.rpg.health_bar

    -

    Health bar - Tim Ashley Jenkins, 2017

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.rpg.health_bar.tests

    -

    Test health bar contrib

    -
    -
    -class evennia.contrib.rpg.health_bar.tests.TestHealthBar(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -test_healthbar()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.rpg.health_bar.tests

    +

    Test health bar contrib

    +
    +
    +class evennia.contrib.rpg.health_bar.tests.TestHealthBar(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +test_healthbar()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -128,57 +175,10 @@ -
    - -
    +
    +
    +
    @@ -406,67 +463,10 @@ means fully obscured.

    -
    - -
    +
    +
    @@ -1335,57 +1382,10 @@ the evennia.contrib.rpg.rplanguage module.

    -
    - -
    +
    +
    @@ -176,57 +223,10 @@ -
    - -
    +
    +
    +
    @@ -628,57 +675,10 @@ under the hood.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.batchprocessor.example_batch_code

    -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.batchprocessor

    -

    Batch processing examples - Griatch 2012

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -114,57 +161,10 @@ a random check here so as to only return 33% of the time.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.bodyfunctions

    -

    Bodyfunctions example script - Griatch, 2012

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.bodyfunctions.tests

    -

    Tests for the bodyfunctions.

    -
    -
    -class evennia.contrib.tutorials.bodyfunctions.tests.TestBodyFunctions(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -script_typeclass
    -

    alias of evennia.contrib.tutorials.bodyfunctions.bodyfunctions.BodyFunctions

    -
    - -
    -
    -setUp()[source]
    -

    Sets up testing environment

    -
    - -
    -
    -tearDown()[source]
    -

    Hook method for deconstructing the test fixture after testing it.

    -
    - -
    -
    -test_at_repeat(mock_random)[source]
    -

    test that no message will be sent when below the 66% threshold

    -
    - -
    -
    -test_send_random_message(mock_random)[source]
    -

    Test that correct message is sent for each random value

    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.bodyfunctions.tests

    +

    Tests for the bodyfunctions.

    +
    +
    +class evennia.contrib.tutorials.bodyfunctions.tests.TestBodyFunctions(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +script_typeclass
    +

    alias of evennia.contrib.tutorials.bodyfunctions.bodyfunctions.BodyFunctions

    +
    + +
    +
    +setUp()[source]
    +

    Sets up testing environment

    +
    + +
    +
    +tearDown()[source]
    +

    Hook method for deconstructing the test fixture after testing it.

    +
    + +
    +
    +test_at_repeat(mock_random)[source]
    +

    test that no message will be sent when below the 66% threshold

    +
    + +
    +
    +test_send_random_message(mock_random)[source]
    +

    Test that correct message is sent for each random value

    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.build_techdemo

    -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.build_world

    -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -490,57 +537,10 @@ it easier to override the look of the sheet.

    -
    - -
    +
    +
    @@ -128,57 +175,10 @@ sheet and break off to edit different parts of it.

    -
    - -
    +
    +
    @@ -1052,57 +1099,10 @@ one opponent!).

    -
    - -
    +
    +
    @@ -493,57 +540,10 @@ self.add().

    -
    - -
    +
    +
    @@ -652,57 +699,10 @@ easier (for example we may want an empty room which auto-clears).

    -
    - -
    +
    +
    @@ -226,57 +273,10 @@ enum, Python will give you an error while a typo in a string may go through sile -
    - -
    +
    +
    @@ -300,57 +347,10 @@ this will just be a flat list of objects.

    -
    - -
    +
    +
    @@ -97,57 +144,10 @@ documentation’s beginner tutorial.

    -
    - -
    +
    +
    @@ -596,57 +643,10 @@ combatant in the current combat handler.

    -
    - -
    +
    +
    @@ -852,57 +899,10 @@ the full AttributeHandler if you need to do access checks.

    -
    - -
    +
    +
    @@ -333,57 +380,10 @@ otherwise check progress on all quests.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.random_tables

    -

    Random tables - adopted from _Knave_.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.random_tables

    +

    Random tables - adopted from _Knave_.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -163,57 +210,10 @@ just not be able to fight in them).

    -
    - -
    +
    +
    @@ -259,57 +306,10 @@ their morale.

    -
    - -
    +
    +
    @@ -224,57 +271,10 @@ along in **kwargs is the selected item (see _select_war -
    - -
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.tests.mixins

    -

    Helpers for testing evadventure modules.

    -
    -
    -class evennia.contrib.tutorials.evadventure.tests.mixins.EvAdventureMixin[source]
    -

    Bases: object

    -

    Provides a set of pre-made characters.

    -
    -
    -setUp()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.tests.mixins

    +

    Helpers for testing evadventure modules.

    +
    +
    +class evennia.contrib.tutorials.evadventure.tests.mixins.EvAdventureMixin[source]
    +

    Bases: object

    +

    Provides a set of pre-made characters.

    +
    +
    +setUp()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.tests.test_characters

    -

    Test characters.

    -
    -
    -class evennia.contrib.tutorials.evadventure.tests.test_characters.TestCharacters(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -setUp()[source]
    -

    Sets up testing environment

    -
    - -
    -
    -test_abilities()[source]
    -
    - -
    -
    -test_heal()[source]
    -

    Make sure we don’t heal too much

    -
    - -
    -
    -test_at_damage()[source]
    -
    - -
    -
    -test_at_pay()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.tests.test_characters

    +

    Test characters.

    +
    +
    +class evennia.contrib.tutorials.evadventure.tests.test_characters.TestCharacters(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +setUp()[source]
    +

    Sets up testing environment

    +
    + +
    +
    +test_abilities()[source]
    +
    + +
    +
    +test_heal()[source]
    +

    Make sure we don’t heal too much

    +
    + +
    +
    +test_at_damage()[source]
    +
    + +
    +
    +test_at_pay()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.tests.test_chargen

    -

    Test chargen.

    -
    -
    -class evennia.contrib.tutorials.evadventure.tests.test_chargen.EvAdventureCharacterGenerationTest(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -

    Test the Character generator in the rule engine.

    -
    -
    -setUp(mock_randint)[source]
    -

    Sets up testing environment

    -
    - -
    -
    -test_base_chargen()[source]
    -
    - -
    -
    -test_build_desc()[source]
    -
    - -
    -
    -test_apply(mock_spawn)[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.tests.test_chargen

    +

    Test chargen.

    +
    +
    +class evennia.contrib.tutorials.evadventure.tests.test_chargen.EvAdventureCharacterGenerationTest(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +

    Test the Character generator in the rule engine.

    +
    +
    +setUp(mock_randint)[source]
    +

    Sets up testing environment

    +
    + +
    +
    +test_base_chargen()[source]
    +
    + +
    +
    +test_build_desc()[source]
    +
    + +
    +
    +test_apply(mock_spawn)[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -220,57 +267,10 @@ swap to a spell rune.

    -
    - -
    +
    +
    @@ -106,57 +153,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.tests.test_dungeon

    -

    Test Dungeon orchestrator / procedurally generated dungeon rooms.

    -
    -
    -class evennia.contrib.tutorials.evadventure.tests.test_dungeon.TestDungeon(methodName='runTest')[source]
    -

    Bases: evennia.contrib.tutorials.evadventure.tests.mixins.EvAdventureMixin, evennia.utils.test_resources.BaseEvenniaTest

    -

    Test with a starting room and a character moving through the dungeon, -generating more and more rooms as they go.

    -
    -
    -setUp()[source]
    -

    Create a start room with exits leading away from it

    -
    - -
    -
    -test_start_room()[source]
    -

    Test move through one of the start room exits.

    -
    - -
    -
    -test_different_start_directions()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.tests.test_dungeon

    +

    Test Dungeon orchestrator / procedurally generated dungeon rooms.

    +
    +
    +class evennia.contrib.tutorials.evadventure.tests.test_dungeon.TestDungeon(methodName='runTest')[source]
    +

    Bases: evennia.contrib.tutorials.evadventure.tests.mixins.EvAdventureMixin, evennia.utils.test_resources.BaseEvenniaTest

    +

    Test with a starting room and a character moving through the dungeon, +generating more and more rooms as they go.

    +
    +
    +setUp()[source]
    +

    Create a start room with exits leading away from it

    +
    + +
    +
    +test_start_room()[source]
    +

    Test move through one of the start room exits.

    +
    + +
    +
    +test_different_start_directions()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -191,57 +238,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.tests.test_quests

    -

    Testing Quest functionality.

    -
    -
    -class evennia.contrib.tutorials.evadventure.tests.test_quests.EvAdventureQuestTest(methodName='runTest')[source]
    -

    Bases: evennia.contrib.tutorials.evadventure.tests.mixins.EvAdventureMixin, evennia.utils.test_resources.BaseEvenniaTest

    -

    Test questing.

    -
    -
    -setUp()[source]
    -

    Sets up testing environment

    -
    - -
    -
    -test_help()[source]
    -

    Get help

    -
    - -
    -
    -test_progress__fail()[source]
    -

    Check progress without having any.

    -
    - -
    -
    -test_progress()[source]
    -

    Fulfill the quest steps in sequess

    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.tests.test_quests

    +

    Testing Quest functionality.

    +
    +
    +class evennia.contrib.tutorials.evadventure.tests.test_quests.EvAdventureQuestTest(methodName='runTest')[source]
    +

    Bases: evennia.contrib.tutorials.evadventure.tests.mixins.EvAdventureMixin, evennia.utils.test_resources.BaseEvenniaTest

    +

    Test questing.

    +
    +
    +setUp()[source]
    +

    Sets up testing environment

    +
    + +
    +
    +test_help()[source]
    +

    Get help

    +
    + +
    +
    +test_progress__fail()[source]
    +

    Check progress without having any.

    +
    + +
    +
    +test_progress()[source]
    +

    Fulfill the quest steps in sequess

    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -117,57 +164,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.tests.test_utils

    -

    Tests of the utils module.

    -
    -
    -class evennia.contrib.tutorials.evadventure.tests.test_utils.TestUtils(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -test_get_obj_stats()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.tests.test_utils

    +

    Tests of the utils module.

    +
    +
    +class evennia.contrib.tutorials.evadventure.tests.test_utils.TestUtils(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +test_get_obj_stats()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.evadventure.utils

    -

    Various utilities.

    -
    -
    -evennia.contrib.tutorials.evadventure.utils.get_obj_stats(obj, owner=None)[source]
    -

    Get a string of stats about the object.

    -
    -
    Parameters
    -
      -
    • obj (EvAdventureObject) – The object to get stats for.

    • -
    • owner (EvAdventureCharacter, optional) – If given, it allows us to -also get information about if the item is currently worn/wielded.

    • -
    -
    -
    Returns
    -

    str – A stat string to show about the object.

    -
    -
    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.evadventure.utils

    +

    Various utilities.

    +
    +
    +evennia.contrib.tutorials.evadventure.utils.get_obj_stats(obj, owner=None)[source]
    +

    Get a string of stats about the object.

    +
    +
    Parameters
    +
      +
    • obj (EvAdventureObject) – The object to get stats for.

    • +
    • owner (EvAdventureCharacter, optional) – If given, it allows us to +also get information about if the item is currently worn/wielded.

    • +
    +
    +
    Returns
    +

    str – A stat string to show about the object.

    +
    +
    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -126,57 +173,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.mirror

    -

    Mirror object - Griatch 2015.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -128,57 +175,10 @@ on all entities in it.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.red_button

    -

    Tutorial Red Button Object - Griatch 2011

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -96,7 +151,7 @@ such as when closing the lid and un-blinding a character.

    -aliases = ['push', 'press button', 'press']
    +aliases = ['press', 'push', 'press button']
    @@ -125,7 +180,7 @@ check if the lid is open or closed.

    -search_index_entry = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
    +search_index_entry = {'aliases': 'press push press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' press push press button', 'tags': '', 'text': '\n Push the red button (lid closed)\n\n Usage:\n push button\n\n '}
    @@ -195,7 +250,7 @@ check if the lid is open or closed.

    -aliases = ['break lid', 'smash lid', 'smash']
    +aliases = ['smash lid', 'smash', 'break lid']
    @@ -222,7 +277,7 @@ break.

    -search_index_entry = {'aliases': 'break lid smash lid smash', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' break lid smash lid smash', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
    +search_index_entry = {'aliases': 'smash lid smash break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash lid smash break lid', 'tags': '', 'text': '\n Smash the protective glass.\n\n Usage:\n smash glass\n\n Try to smash the glass of the button.\n\n '}
    @@ -322,7 +377,7 @@ be mutually exclusive.

    -aliases = ['push', 'press button', 'press']
    +aliases = ['press', 'push', 'press button']
    @@ -351,7 +406,7 @@ set in self.parse())

    -search_index_entry = {'aliases': 'push press button press', 'category': 'general', 'key': 'push button', 'no_prefix': ' push press button press', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
    +search_index_entry = {'aliases': 'press push press button', 'category': 'general', 'key': 'push button', 'no_prefix': ' press push press button', 'tags': '', 'text': '\n Push the red button\n\n Usage:\n push button\n\n '}
    @@ -449,7 +504,7 @@ be mutually exclusive.

    -aliases = ['get', 'l', 'ex', 'examine', 'listen', 'feel']
    +aliases = ['feel', 'examine', 'l', 'ex', 'listen', 'get']
    @@ -475,7 +530,7 @@ be mutually exclusive.

    -search_index_entry = {'aliases': 'get l ex examine listen feel', 'category': 'general', 'key': 'look', 'no_prefix': ' get l ex examine listen feel', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}
    +search_index_entry = {'aliases': 'feel examine l ex listen get', 'category': 'general', 'key': 'look', 'no_prefix': ' feel examine l ex listen get', 'tags': '', 'text': "\n Looking around in darkness\n\n Usage:\n look <obj>\n\n ... not that there's much to see in the dark.\n\n "}
    @@ -712,65 +767,10 @@ temporarily.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.talking_npc

    -

    Talking NPC - Griatch 2011, grungies1138 2016

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    +
    @@ -206,57 +253,10 @@ the conversation defined above.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.tutorials.talking_npc.tests

    -

    Tutorial - talking NPC tests.

    -
    -
    -class evennia.contrib.tutorials.talking_npc.tests.TestTalkingNPC(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    -
    -
    -test_talkingnpc()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.tutorials.talking_npc.tests

    +

    Tutorial - talking NPC tests.

    +
    +
    +class evennia.contrib.tutorials.talking_npc.tests.TestTalkingNPC(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaCommandTest

    +
    +
    +test_talkingnpc()[source]
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    +
    @@ -245,57 +292,10 @@ option related to this node.

    -
    - -
    +
    +
    @@ -297,57 +344,10 @@ right away, also when patrolling on a very slow ticker.

    -
    - -
    +
    +
    @@ -507,7 +554,7 @@ shift green root up/down

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

    -search_index_entry = {'aliases': 'push shiftroot pull move', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' push shiftroot pull move', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
    +search_index_entry = {'aliases': 'pull shiftroot move push', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' pull shiftroot move push', 'tags': '', 'text': '\n Shifts roots around.\n\n Usage:\n shift blue root left/right\n shift red root left/right\n shift yellow root up/down\n shift green root up/down\n\n '}
    @@ -560,7 +607,7 @@ yellow/green - horizontal roots

    -aliases = ['button', 'press button', 'push button']
    +aliases = ['push button', 'press button', 'button']
    @@ -586,7 +633,7 @@ yellow/green - horizontal roots

    -search_index_entry = {'aliases': 'button press button push button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' button press button push button', 'tags': '', 'text': '\n Presses a button.\n '}
    +search_index_entry = {'aliases': 'push button press button button', 'category': 'tutorialworld', 'key': 'press', 'no_prefix': ' push button press button button', 'tags': '', 'text': '\n Presses a button.\n '}
    @@ -730,7 +777,7 @@ parry - forgoes your attack but will make you harder to hit on next

    -aliases = ['kill', 'pierce', 'slash', 'chop', 'thrust', 'fight', 'hit', 'bash', 'stab', 'defend', 'parry']
    +aliases = ['fight', 'kill', 'parry', 'bash', 'slash', 'defend', 'stab', 'pierce', 'hit', 'chop', 'thrust']
    @@ -756,7 +803,7 @@ parry - forgoes your attack but will make you harder to hit on next

    -search_index_entry = {'aliases': 'kill pierce slash chop thrust fight hit bash stab defend parry', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' kill pierce slash chop thrust fight hit bash stab defend parry', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
    +search_index_entry = {'aliases': 'fight kill parry bash slash defend stab pierce hit chop thrust', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' fight kill parry bash slash defend stab pierce hit chop thrust', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
    @@ -963,57 +1010,10 @@ pulling weapons from it indefinitely.

    -
    - -
    +
    +
    @@ -767,7 +814,7 @@ if they fall off the bridge.

    -aliases = ['?', 'h']
    +aliases = ['h', '?']
    @@ -793,7 +840,7 @@ if they fall off the bridge.

    -search_index_entry = {'aliases': '? h', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' ? h', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
    +search_index_entry = {'aliases': 'h ?', 'category': 'tutorial world', 'key': 'help', 'no_prefix': ' h ?', 'tags': '', 'text': '\n Overwritten help command while on the bridge.\n '}
    @@ -919,7 +966,7 @@ to find something.

    -aliases = ['fiddle', 'l', 'feel around', 'search', 'feel']
    +aliases = ['feel', 'search', 'feel around', 'l', 'fiddle']
    @@ -947,7 +994,7 @@ random chance of eventually finding a light source.

    -search_index_entry = {'aliases': 'fiddle l feel around search feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' fiddle l feel around search feel', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
    +search_index_entry = {'aliases': 'feel search feel around l fiddle', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel search feel around l fiddle', 'tags': '', 'text': '\n Look around in darkness\n\n Usage:\n look\n\n Look around in the darkness, trying\n to find something.\n '}
    @@ -1273,57 +1320,10 @@ overriding the call (unused by default).

    -
    - -
    +
    +
    @@ -156,57 +203,10 @@ -
    - -
    +
    +
    +
    @@ -99,57 +146,10 @@ compromised or taken down, losing your logs along with it is no help!).

    -
    - -
    +
    +
    @@ -138,57 +185,10 @@ writing to log. Recording cleartext password attempts is bad policy.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.utils.auditing.tests

    -

    Module containing the test cases for the Audit system.

    -
    -
    -class evennia.contrib.utils.auditing.tests.AuditingTest(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -setup_session()[source]
    -

    Overrides default one in EvenniaTest

    -
    - -
    -
    -test_mask()[source]
    -

    Make sure the ‘mask’ function is properly masking potentially sensitive -information from strings.

    -
    - -
    -
    -test_audit()[source]
    -

    Make sure the ‘audit’ function is returning a dictionary based on values -parsed from the Session object.

    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.utils.auditing.tests

    +

    Module containing the test cases for the Audit system.

    +
    +
    +class evennia.contrib.utils.auditing.tests.AuditingTest(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +setup_session()[source]
    +

    Overrides default one in EvenniaTest

    +
    + +
    +
    +test_mask()[source]
    +

    Make sure the ‘mask’ function is properly masking potentially sensitive +information from strings.

    +
    + +
    +
    +test_audit()[source]
    +

    Make sure the ‘audit’ function is returning a dictionary based on values +parsed from the Session object.

    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    +
    @@ -186,57 +233,10 @@ NAMEGEN_FANTASY_RULES - Option to add new fantasy-name style rules.

    -
    - -
    +
    +
    @@ -110,57 +157,10 @@ full_name(return_list=True) - list of length 1

    -
    - -
    +
    +
    +
    @@ -272,57 +319,10 @@ calling the get method.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.contrib.utils.random_string_generator.tests

    -

    Random string tests.

    -
    -
    -class evennia.contrib.utils.random_string_generator.tests.TestRandomStringGenerator(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -test_generate()[source]
    -

    Generate and fail when exhausted.

    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.utils.random_string_generator.tests

    +

    Random string tests.

    +
    +
    +class evennia.contrib.utils.random_string_generator.tests.TestRandomStringGenerator(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +test_generate()[source]
    +

    Generate and fail when exhausted.

    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.utils.tree_select

    -

    Menu selection tree - Tim Ashley Jenkins 2017

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.contrib.utils.tree_select.tests

    -

    Test tree select

    -
    -
    -class evennia.contrib.utils.tree_select.tests.TestTreeSelectFunc(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -test_tree_functions()[source]
    -
    - -
    - -
    -
    -class evennia.contrib.utils.tree_select.tests.TestFieldFillFunc(methodName='runTest')[source]
    -

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    -
    -
    -test_field_functions()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.contrib.utils.tree_select.tests

    +

    Test tree select

    +
    +
    +class evennia.contrib.utils.tree_select.tests.TestTreeSelectFunc(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +test_tree_functions()[source]
    +
    + +
    + +
    +
    +class evennia.contrib.utils.tree_select.tests.TestFieldFillFunc(methodName='runTest')[source]
    +

    Bases: evennia.utils.test_resources.BaseEvenniaTest

    +
    +
    +test_field_functions()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -412,57 +459,10 @@ to determine the color the player chose.

    -
    - -
    +
    +
    @@ -253,57 +300,10 @@ return a list of **FileHelpEntry.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.help

    -

    This sub-package defines the help system of Evennia. It is pretty -simple, mainly consisting of a database model to hold help entries. -The auto-cmd-help is rather handled by the default ‘help’ command -itself.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.help

    +

    This sub-package defines the help system of Evennia. It is pretty +simple, mainly consisting of a database model to hold help entries. +The auto-cmd-help is rather handled by the default ‘help’ command +itself.

    + +
    + + +
    +
    +
    +
    +
    +
    @@ -221,57 +268,10 @@ in-game setting information and so on.

    -
    - -
    +
    +
    @@ -384,57 +431,10 @@ object the first time, the query is executed.

    -
    - -
    +
    +
    @@ -157,57 +204,10 @@ followed by any sub-sub-categories down to a max-depth of 5.

    -
    - -
    +
    +
    @@ -545,6 +592,11 @@ with ‘q’, remove the break line and restart server when finished.

  • evennia.contrib.utils.fieldfill.fieldfill
  • +
  • evennia.contrib.utils.git_integration +
  • evennia.contrib.utils.name_generator
  • - -
    +
    -
    -
    - -
    -

    evennia.locks

    -

    This sub-package defines the lock (access) mechanism of Evennia. All -lock strings are processed through the lockhandler in this package. It -also contains the default lock functions used in lock definitions.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.locks

    +

    This sub-package defines the lock (access) mechanism of Evennia. All +lock strings are processed through the lockhandler in this package. It +also contains the default lock functions used in lock definitions.

    + +
    + + +
    +
    +
    +
    +
    +
    @@ -431,57 +478,10 @@ unpacked to their real value. We only support basic properties.

    -
    - -
    +
    +
    @@ -427,57 +474,10 @@ among the locks defined by lockstring.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.objects

    -

    This sub-package defines the basic in-game “Object”. All in-game -objects inherit from classes in this package.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.objects

    +

    This sub-package defines the basic in-game “Object”. All in-game +objects inherit from classes in this package.

    + +
    + + +
    +
    +
    +
    +
    +
    @@ -463,57 +510,10 @@ adding this rarely makes sense since this data will not survive a reload.

    -
    - -
    +
    +
    @@ -566,57 +613,10 @@ class built by **create_forward_many_to_many_manager()** define -
    - -
    +
    +
    @@ -2413,6 +2460,22 @@ Attribute err_traverse is defined - this will in that case be read for an error string instead.

    +
    +
    +get_return_exit(return_all=False)[source]
    +

    Get the exits that pair with this one in its destination room +(i.e. returns to its location)

    +
    +
    Parameters
    +

    return_all (bool) – Whether to return available results as a +list or single matching exit.

    +
    +
    Returns
    +

    queryset or exit (Exit) – The matching exit(s).

    +
    +
    +
    +
    exception DoesNotExist
    @@ -2440,57 +2503,10 @@ read for an error string instead.

    -
    - -
    +
    +
    +
    @@ -168,57 +215,10 @@ prototype rather than creating a new one.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.prototypes.protfuncs

    -

    Protfuncs are FuncParser-callables that can be embedded in a prototype to -provide custom logic without having access to Python. The protfunc is parsed at -the time of spawning, using the creating object’s session as input. If the -protfunc returns a non-string, this is what will be added to the prototype.

    -

    In the prototype dict, the protfunc is specified as a string inside the prototype, e.g.:

    -
    -

    { …

    -

    “key”: “$funcname(args, kwargs)”

    -

    … }

    -
    -

    Available protfuncs are either all callables in one of the modules of settings.PROT_FUNC_MODULES -or all callables added to a dict FUNCPARSER_CALLABLES in such a module.

    -
    -

    def funcname (*args, **kwargs)

    -
    -

    At spawn-time the spawner passes the following extra kwargs into each callable (in addition to -what is added in the call itself):

    -
    -
      -
    • session (Session): The Session of the entity spawning using this prototype.

    • -
    • prototype (dict): The dict this protfunc is a part of.

    • -
    • current_key (str): The active key this value belongs to in the prototype.

    • -
    -
    -

    Any traceback raised by this function will be handled at the time of spawning and abort the spawn -before any object is created/updated. It must otherwise return the value to store for the specified -prototype key (this value must be possible to serialize in an Attribute).

    -
    -
    -evennia.prototypes.protfuncs.protfunc_callable_protkey(*args, **kwargs)[source]
    -

    Usage: $protkey(keyname) -Returns the value of another key in this prototoype. Will raise an error if

    -
    -

    the key is not found in this prototype.

    -
    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.prototypes.protfuncs

    +

    Protfuncs are FuncParser-callables that can be embedded in a prototype to +provide custom logic without having access to Python. The protfunc is parsed at +the time of spawning, using the creating object’s session as input. If the +protfunc returns a non-string, this is what will be added to the prototype.

    +

    In the prototype dict, the protfunc is specified as a string inside the prototype, e.g.:

    +
    +

    { …

    +

    “key”: “$funcname(args, kwargs)”

    +

    … }

    +
    +

    Available protfuncs are either all callables in one of the modules of settings.PROT_FUNC_MODULES +or all callables added to a dict FUNCPARSER_CALLABLES in such a module.

    +
    +

    def funcname (*args, **kwargs)

    +
    +

    At spawn-time the spawner passes the following extra kwargs into each callable (in addition to +what is added in the call itself):

    +
    +
      +
    • session (Session): The Session of the entity spawning using this prototype.

    • +
    • prototype (dict): The dict this protfunc is a part of.

    • +
    • current_key (str): The active key this value belongs to in the prototype.

    • +
    +
    +

    Any traceback raised by this function will be handled at the time of spawning and abort the spawn +before any object is created/updated. It must otherwise return the value to store for the specified +prototype key (this value must be possible to serialize in an Attribute).

    +
    +
    +evennia.prototypes.protfuncs.protfunc_callable_protkey(*args, **kwargs)[source]
    +

    Usage: $protkey(keyname) +Returns the value of another key in this prototoype. Will raise an error if

    +
    +

    the key is not found in this prototype.

    +
    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -489,57 +536,10 @@ validator (callable, optional): If given, this will be called with the value to< -
    - -
    +
    +
    @@ -493,57 +540,10 @@ custom prototype_parents are given to this function.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.scripts

    -

    This sub-package holds the Scripts system. Scripts are database -entities that can store data both in connection to Objects and Accounts -or globally. They may also have a timer-component to execute various -timed effects.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.scripts

    +

    This sub-package holds the Scripts system. Scripts are database +entities that can store data both in connection to Objects and Accounts +or globally. They may also have a timer-component to execute various +timed effects.

    + +
    + + +
    +
    +
    +
    +
    +
    @@ -252,57 +299,10 @@ scripts in the database.

    -
    - -
    +
    +
    @@ -377,57 +424,10 @@ class built by **create_forward_many_to_many_manager()** define -
    - -
    +
    +
    @@ -174,57 +221,10 @@ all kwargs must be possible to pickle!

    -
    - -
    +
    +
    @@ -172,57 +219,10 @@ If no key is given, delete all scripts on the object!

    -
    - -
    +
    +
    @@ -276,57 +323,10 @@ could be used).

    -
    - -
    +
    +
    @@ -534,57 +581,10 @@ This method should be automatically called when Evennia starts.

    -
    - -
    +
    +
    @@ -399,57 +446,10 @@ non-db objects.

    -
    - -
    +
    +
    @@ -237,57 +284,10 @@ operation, as defined by the global variables in -
    - -
    +
    +
    @@ -176,57 +223,10 @@ fails (and is expected to echo why if so).

    -
    - -
    +
    -
    -
    - -
    -

    evennia.server.deprecations

    -

    This module contains historical deprecations that the Evennia launcher -checks for.

    -

    These all print to the terminal.

    -
    -
    -evennia.server.deprecations.check_errors(settings)[source]
    -

    Check for deprecations that are critical errors and should stop -the launcher.

    -
    -
    Parameters
    -

    settings (Settings) – The Django settings file

    -
    -
    Raises
    -

    DeprecationWarning if a critical deprecation is found.

    -
    -
    -
    - -
    -
    -evennia.server.deprecations.check_warnings(settings)[source]
    -

    Check conditions and deprecations that should produce warnings but which -does not stop launch.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.server.deprecations

    +

    This module contains historical deprecations that the Evennia launcher +checks for.

    +

    These all print to the terminal.

    +
    +
    +evennia.server.deprecations.check_errors(settings)[source]
    +

    Check for deprecations that are critical errors and should stop +the launcher.

    +
    +
    Parameters
    +

    settings (Settings) – The Django settings file

    +
    +
    Raises
    +

    DeprecationWarning if a critical deprecation is found.

    +
    +
    +
    + +
    +
    +evennia.server.deprecations.check_warnings(settings)[source]
    +

    Check conditions and deprecations that should produce warnings but which +does not stop launch.

    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -583,57 +630,10 @@ in the terminal/console, for example:

    -
    - -
    +
    +
    @@ -167,57 +214,10 @@ to this Protocol. The connection has been closed.

    -
    - -
    +
    +
    -
    -
    - -
    -

    evennia.server.game_index_client.service

    -

    Service for integrating the Evennia Game Index client into Evennia.

    -
    -
    -class evennia.server.game_index_client.service.EvenniaGameIndexService[source]
    -

    Bases: twisted.application.service.Service

    -

    Twisted Service that contains a LoopingCall for regularly sending game details -to the Evennia Game Index.

    -
    -
    -name = 'GameIndexClient'
    -
    - -
    -
    -__init__()[source]
    -

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

    -
    - -
    -
    -startService()[source]
    -
    - -
    -
    -stopService()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.server.game_index_client.service

    +

    Service for integrating the Evennia Game Index client into Evennia.

    +
    +
    +class evennia.server.game_index_client.service.EvenniaGameIndexService[source]
    +

    Bases: twisted.application.service.Service

    +

    Twisted Service that contains a LoopingCall for regularly sending game details +to the Evennia Game Index.

    +
    +
    +name = 'GameIndexClient'
    +
    + +
    +
    +__init__()[source]
    +

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

    +
    + +
    +
    +startService()[source]
    +
    + +
    +
    +stopService()[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -121,57 +168,10 @@ to connect to the game.

    -
    - -
    +
    +
    @@ -103,57 +150,10 @@ the function will exit immediately.

    -
    - -
    +
    +
    @@ -364,57 +411,10 @@ common clients.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.server.manager

    -

    Custom manager for ServerConfig objects.

    -
    -
    -class evennia.server.manager.ServerConfigManager(*args, **kwargs)[source]
    -

    Bases: django.db.models.manager.Manager

    -

    This ServerConfigManager implements methods for searching and -manipulating ServerConfigs directly from the database.

    -

    These methods will all return database objects (or QuerySets) -directly.

    -

    ServerConfigs are used to store certain persistent settings for -the server at run-time.

    -
    -
    -conf(key=None, value=None, delete=False, default=None)[source]
    -

    Add, retrieve and manipulate config values.

    -
    -
    Parameters
    -
      -
    • key (str, optional) – Name of config.

    • -
    • value (str, optional) – Data to store in this config value.

    • -
    • delete (bool, optional) – If True, delete config with key.

    • -
    • default (str, optional) – Use when retrieving a config value -by a key that does not exist.

    • -
    -
    -
    Returns
    -

    all (list) – If key was not given - all stored config values. -value (str): If key was given, this is the stored value, or

    -
    -

    default if no matching key was found.

    -
    -

    -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.server.manager

    +

    Custom manager for ServerConfig objects.

    +
    +
    +class evennia.server.manager.ServerConfigManager(*args, **kwargs)[source]
    +

    Bases: django.db.models.manager.Manager

    +

    This ServerConfigManager implements methods for searching and +manipulating ServerConfigs directly from the database.

    +

    These methods will all return database objects (or QuerySets) +directly.

    +

    ServerConfigs are used to store certain persistent settings for +the server at run-time.

    +
    +
    +conf(key=None, value=None, delete=False, default=None)[source]
    +

    Add, retrieve and manipulate config values.

    +
    +
    Parameters
    +
      +
    • key (str, optional) – Name of config.

    • +
    • value (str, optional) – Data to store in this config value.

    • +
    • delete (bool, optional) – If True, delete config with key.

    • +
    • default (str, optional) – Use when retrieving a config value +by a key that does not exist.

    • +
    +
    +
    Returns
    +

    all (list) – If key was not given - all stored config values. +value (str): If key was given, this is the stored value, or

    +
    +

    default if no matching key was found.

    +
    +

    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -147,57 +194,10 @@ object the first time, the query is executed.

    -
    - -
    +
    +
    @@ -557,57 +604,10 @@ function call

    -
    - -
    +
    +
    @@ -279,57 +326,10 @@ global variables in evennia/server/amp.py.

    -
    - -
    +
    +
    @@ -276,57 +323,10 @@ disconnect this protocol.

    -
    - -
    +
    +
    +
    @@ -392,57 +439,10 @@ sessions.

    -
    - -
    +
    +
    @@ -126,57 +173,10 @@ creating a zlib compression stream.

    -
    - -
    +
    +
    @@ -127,57 +174,10 @@ operation.

    -
    - -
    +
    +
    @@ -119,57 +166,10 @@ that supports it (mudlet, zmud, mushclient are a few)

    -
    - -
    +
    +
    @@ -115,57 +162,10 @@ operation.

    -
    - -
    +
    +
    @@ -114,57 +161,10 @@ case it always needs to be restarted manually.

    -
    - -
    +
    +
    @@ -315,57 +362,10 @@ method exixts, it sends the data to a method send_default.

    -
    - -
    +
    +
    @@ -156,57 +203,10 @@ on slow connections.

    -
    - -
    +
    +
    @@ -377,57 +424,10 @@ do not exist, the keypair is created.

    -
    - -
    +
    +
    @@ -97,57 +144,10 @@ server-side.

    -
    - -
    +
    +
    @@ -105,57 +152,10 @@ protocol to set it up.

    -
    - -
    +
    +
    @@ -298,57 +345,10 @@ Note that it must be actively turned back on again!

    -
    - -
    +
    +
    @@ -271,57 +318,10 @@ We assume the structure is valid JSON.

    -
    - -
    +
    +
    @@ -108,57 +155,10 @@ server-side.

    -
    - -
    +
    +
    @@ -164,57 +211,10 @@ its inverse gives the correct string.

    -
    - -
    +
    +
    @@ -114,57 +161,10 @@ stored on protocol.protocol_flags under the TTYPE key.

    -
    - -
    +
    +
    @@ -231,57 +278,10 @@ client instead.

    -
    - -
    +
    +
    @@ -375,57 +422,10 @@ client instead.

    -
    - -
    +
    +
    @@ -313,57 +360,10 @@ all “intelligence” of the dummy client.

    -
    - -
    +
    +
    @@ -196,57 +243,10 @@ dummyrunner output about just how fast commands are being processed.

    -
    - -
    +
    +
    +
    @@ -101,57 +148,10 @@ the script will append to this file if it already exists.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.server.profiling.settings_mixin

    -

    Dummyrunner mixin. Add this at the end of the settings file before -running dummyrunner, like this:

    -
    -

    from evennia.server.profiling.settings_mixin import *

    -
    -

    Note that these mixin-settings are not suitable for production -servers!

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.server.profiling.settings_mixin

    +

    Dummyrunner mixin. Add this at the end of the settings file before +running dummyrunner, like this:

    +
    +

    from evennia.server.profiling.settings_mixin import *

    +
    +

    Note that these mixin-settings are not suitable for production +servers!

    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.server.profiling.test_queries

    -

    This is a little routine for viewing the sql queries that are executed by a given -query as well as count them for optimization testing.

    -
    -
    -evennia.server.profiling.test_queries.count_queries(exec_string, setup_string)[source]
    -

    Display queries done by exec_string. Use setup_string -to setup the environment to test.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.server.profiling.test_queries

    +

    This is a little routine for viewing the sql queries that are executed by a given +query as well as count them for optimization testing.

    +
    +
    +evennia.server.profiling.test_queries.count_queries(exec_string, setup_string)[source]
    +

    Display queries done by exec_string. Use setup_string +to setup the environment to test.

    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -159,57 +206,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.server.profiling.timetrace

    -

    Trace a message through the messaging system

    -
    -
    -evennia.server.profiling.timetrace.timetrace(message, idstring, tracemessage='TEST_MESSAGE', final=False)[source]
    -

    Trace a message with time stamps.

    -
    -
    Parameters
    -
      -
    • message (str) – The actual message coming through

    • -
    • idstring (str) – An identifier string specifying where this trace is happening.

    • -
    • tracemessage (str) – The start of the message to tag. -This message will get attached time stamp.

    • -
    • final (bool) – This is the final leg in the path - include total time in message

    • -
    -
    -
    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.server.profiling.timetrace

    +

    Trace a message through the messaging system

    +
    +
    +evennia.server.profiling.timetrace.timetrace(message, idstring, tracemessage='TEST_MESSAGE', final=False)[source]
    +

    Trace a message with time stamps.

    +
    +
    Parameters
    +
      +
    • message (str) – The actual message coming through

    • +
    • idstring (str) – An identifier string specifying where this trace is happening.

    • +
    • tracemessage (str) – The start of the message to tag. +This message will get attached time stamp.

    • +
    • final (bool) – This is the final leg in the path - include total time in message

    • +
    +
    +
    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -204,57 +251,10 @@ shutdown or a reset.

    -
    - -
    +
    +
    @@ -363,57 +410,10 @@ property, e.g. obj.ndb.attr = value etc.

    -
    - -
    +
    +
    @@ -168,57 +215,10 @@ should overload this to format/handle the outgoing data as needed.

    -
    - -
    +
    +
    @@ -575,57 +622,10 @@ on the form commandname=((args), {kwargs}).

    -
    - -
    +
    -
    -
    - -
    -

    evennia.server.signals

    -

    This module brings Django Signals into Evennia. These are events that can be -subscribed to by importing a given Signal and using the following code.

    -
    THIS_SIGNAL.connect(callback, sender_object)
    -
    -
    -

    When other code calls THIS_SIGNAL.send(sender, **kwargs), the callback will -be triggered.

    -

    Callbacks must be on the following format:

    -
    def my_callback(sender, **kwargs):
    -    # ...
    -
    -
    -

    This is used on top of hooks to make certain features easier to add to contribs -without necessitating a full takeover of hooks that may be in high demand.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.server.signals

    +

    This module brings Django Signals into Evennia. These are events that can be +subscribed to by importing a given Signal and using the following code.

    +
    THIS_SIGNAL.connect(callback, sender_object)
    +
    +
    +

    When other code calls THIS_SIGNAL.send(sender, **kwargs), the callback will +be triggered.

    +

    Callbacks must be on the following format:

    +
    def my_callback(sender, **kwargs):
    +    # ...
    +
    +
    +

    This is used on top of hooks to make certain features easier to add to contribs +without necessitating a full takeover of hooks that may be in high demand.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -208,57 +255,10 @@ fails recently.

    -
    - -
    +
    +
    @@ -117,57 +164,10 @@ by this validator.

    -
    - -
    +
    +
    @@ -275,57 +322,10 @@ directory this path represents.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.settings_default

    -

    Master configuration file for Evennia.

    -

    NOTE: NO MODIFICATIONS SHOULD BE MADE TO THIS FILE!

    -

    All settings changes should be done by copy-pasting the variable and -its value to <gamedir>/server/conf/settings.py.

    -

    Hint: Don’t copy&paste over more from this file than you actually want -to change. Anything you don’t copy&paste will thus retain its default -value - which may change as Evennia is developed. This way you can -always be sure of what you have changed and what is default behaviour.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.settings_default

    +

    Master configuration file for Evennia.

    +

    NOTE: NO MODIFICATIONS SHOULD BE MADE TO THIS FILE!

    +

    All settings changes should be done by copy-pasting the variable and +its value to <gamedir>/server/conf/settings.py.

    +

    Hint: Don’t copy&paste over more from this file than you actually want +to change. Anything you don’t copy&paste will thus retain its default +value - which may change as Evennia is developed. This way you can +always be sure of what you have changed and what is default behaviour.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -1528,57 +1575,10 @@ with nicks stored on the Account level.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.typeclasses

    -

    This sub-package defines the typeclass-system, a way to wrap database -access into almost-normal Python classes. Using typeclasses one can -work in normal Python while having the luxury of persistent data -storage at every turn. ObjectDB, ChannelDB, AccountDB and ScriptDB all -inherit from the models in this package. Here is also were the -Attribute and Tag models are defined along with their handlers.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.typeclasses

    +

    This sub-package defines the typeclass-system, a way to wrap database +access into almost-normal Python classes. Using typeclasses one can +work in normal Python while having the luxury of persistent data +storage at every turn. ObjectDB, ChannelDB, AccountDB and ScriptDB all +inherit from the models in this package. Here is also were the +Attribute and Tag models are defined along with their handlers.

    + +
    + + +
    +
    +
    +
    +
    +
    @@ -436,16 +483,15 @@ object having that typeclass set on themselves).

    -

    Searches through all objects returning those which has a -certain typeclass. If location is set, limit search to objects -in that location.

    +

    Searches through all objects returning those which are of the +specified typeclass.

    Parameters
    • typeclass (str or class) – A typeclass class or a python path to a typeclass.

    • include_children (bool, optional) – Return objects with given typeclass and all children inheriting from this -typeclass. Mutuall exclusive to include_parents.

    • +typeclass. Mutually exclusive to include_parents.

    • include_parents (bool, optional) – Return objects with given typeclass and all parents to this typeclass. Mutually exclusive to include_children.

    • @@ -454,6 +500,10 @@ Mutually exclusive to include_children.

      Returns

      objects (list) – The objects found with the given typeclasses.

      +
      Raises
      +

      ImportError – If the provided typeclass is not a valid typeclass or the +path to an existing typeclass.

      +
    @@ -462,57 +512,10 @@ Mutually exclusive to include_children.

    -
    - -
    +
    +
    @@ -755,57 +802,10 @@ developer’s responsibility.

    -
    - -
    +
    +
    @@ -553,57 +600,10 @@ replicated with a lock check against the lockstring

    -
    - -
    +
    +
    @@ -937,65 +992,10 @@ with.

    -
    - -
    +
    +
    @@ -352,72 +414,10 @@ namespace.

    -
    - -
    +
    +
    @@ -202,57 +249,10 @@ scripts defined in settings.

    -
    - -
    +
    +
    @@ -244,7 +291,7 @@ the empty string, will be set to None.

    Keyword Arguments
    • typeclass (str) – The typeclass to use for the account.

    • -
    • is_superuser (bool) – Wether or not this account is to be a superuser

    • +
    • is_superuser (bool) – Whether or not this account is to be a superuser

    • locks (str) – Lockstring.

    • permission (list) – List of permission strings.

    • tags (list) – List of Tags on form (key, category[, data])

    • @@ -271,57 +318,10 @@ operations and is thus not suitable for play-testing the game.

      -
    - -
    +
    +
    @@ -137,57 +184,10 @@ _SaverList, _SaverDict and _SaverSet counterparts.

    -
    - -
    +
    +
    @@ -287,7 +334,7 @@ indentation.

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

    -search_index_entry = {'aliases': ':u :fi :h :DD :y :< :A :dw :S :q! :UU :I := :s :uu :echo :wq : :! ::: :f :x :i :j :fd :w :p :: :r :q :dd :>', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :u :fi :h :DD :y :< :A :dw :S :q! :UU :I := :s :uu :echo :wq : :! ::: :f :x :i :j :fd :w :p :: :r :q :dd :>', 'tags': '', 'text': '\n Commands for the editor\n '}
    +search_index_entry = {'aliases': ':q :fd :j :S :A :wq :i :DD :dw :UU :fi : :q! :y :h := :x :uu :echo :w :r :> :u :f :dd :: ::: :! :p :s :< :I', 'category': 'general', 'key': ':editor_command_group', 'no_prefix': ' :q :fd :j :S :A :wq :i :DD :dw :UU :fi : :q! :y :h := :x :uu :echo :w :r :> :u :f :dd :: ::: :! :p :s :< :I', 'tags': '', 'text': '\n Commands for the editor\n '}
    @@ -504,57 +551,10 @@ formatting information.

    -
    - -
    +
    +
    @@ -233,57 +280,10 @@ If this is given, filename is not read.

    -
    - -
    +
    +
    @@ -954,7 +1009,7 @@ single question.

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

    -search_index_entry = {'aliases': 'n no yes __nomatch_command a abort y', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n no yes __nomatch_command a abort y', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    +search_index_entry = {'aliases': 'no n yes abort a __nomatch_command y', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' no n yes abort a __nomatch_command y', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
    @@ -1133,65 +1188,10 @@ Must be on the form callable(caller, raw_string, **kwargs).

    -
    - -
    +
    +
    @@ -88,7 +135,7 @@ the caller.msg() construct every time the page is updated.

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

    -search_index_entry = {'aliases': 'next n top end a previous abort quit t p q e', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' next n top end a previous abort quit t p q e', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    +search_index_entry = {'aliases': 't top n p abort previous e next end a quit q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' t top n p abort previous e next end a quit q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
    @@ -514,57 +561,10 @@ the evmore commands will be available when this is run).

    -
    - -
    +
    +
    @@ -623,57 +670,10 @@ given from 0 to Ncolumns-1.

    -
    - -
    +
    +
    @@ -235,7 +282,7 @@ callable (like the current Session object for inlinefuncs).

    -parse_to_any(string, raise_errors=False, **reserved_kwargs)[source]
    +parse_to_any(string, raise_errors=False, escape=False, strip=False, **reserved_kwargs)[source]

    This parses a string and if the string only contains a “$func(…)”, the return will be the return value of that function, even if it’s not a string. If mixed in with other strings, the result will still always @@ -247,6 +294,10 @@ be a string.

  • raise_errors (bool, optional) – If unset, leave a failing (or unrecognized) inline function as unparsed in the string. If set, raise an ParsingError.

  • +
  • escape (bool, optional) – If set, escape all found functions so they +are not executed by later parsing.

  • +
  • strip (bool, optional) – If set, strip any inline funcs from string +as if they were not there.

  • **reserved_kwargs – If given, these are guaranteed to _always_ pass as part of each parsed callable’s kwargs. These override same-named default options given in **__init__ as well as any @@ -424,8 +475,11 @@ integer value in the given range.

    FuncParser callable. Picks a random choice from a list.

    Parameters
    -

    listing (list) – A list of items to randomly choose between. -This will be converted from a string to a real list.

    +
      +
    • listing (list) – A list of items to randomly choose between. +This will be converted from a string to a real list.

    • +
    • *args – If multiple args are given, will pick one randomly from them.

    • +
    Returns

    any – The randomly chosen element.

    @@ -433,7 +487,7 @@ This will be converted from a string to a real list.

    Example

      -
    • $choice([key, flower, house])

    • +
    • $choice(key, flower, house)

    • $choice([1, 2, 3, 4])

  • @@ -588,7 +642,9 @@ this requries the parser be called with the caller’s Session for proper security. If called without session, the call is aborted.

    Parameters
    -

    query (str) – The key or dbref to search for.

    +

    query (str) – The key or dbref to search for. This can consist of any args used +for one of the regular search methods. Also kwargs will be passed into +the search (except the kwargs given below)

    Keyword Arguments
      @@ -600,6 +656,7 @@ be passed into the access check for the entity being searched for. The ‘control’ permission is required.

    • access (str) – Which locktype access to check. Unset to disable the security check.

    • +
    • **kwargs – Will be passed into the main search.

    Returns
    @@ -615,6 +672,7 @@ passed into parser.

  • “$search(#233)”

  • “$search(Tom, type=account)”

  • “$search(meadow, return_list=True)”

  • +
  • “$search(beach, category=outdoors, type=tag)

  • @@ -919,57 +977,10 @@ and the mapping can always be auto-detected.

    -
    - -
    +
    +
    @@ -250,57 +297,10 @@ the epoch set by settings.TIME_GAME_EPOCH will still apply.

    -
    - -
    +
    +
    @@ -114,57 +161,10 @@ functionality.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.utils.idmapper

    -

    The idmapper holds the main database caching mechanism.

    - -
    - - -
    -
    -
    -
    -
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.utils.idmapper.manager

    -

    IDmapper extension to the default manager.

    -
    -
    -class evennia.utils.idmapper.manager.SharedMemoryManager(*args, **kwargs)[source]
    -

    Bases: django.db.models.manager.Manager

    -
    -
    -get(*args, **kwargs)[source]
    -

    Data entity lookup.

    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.utils.idmapper.manager

    +

    IDmapper extension to the default manager.

    +
    +
    +class evennia.utils.idmapper.manager.SharedMemoryManager(*args, **kwargs)[source]
    +

    Bases: django.db.models.manager.Manager

    +
    +
    +get(*args, **kwargs)[source]
    +

    Data entity lookup.

    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -281,57 +328,10 @@ catch in an easy way here. Ideas are appreciated. /Griatch

    -
    - -
    +
    +
    @@ -378,57 +425,10 @@ object the first time, the query is executed.

    -
    - -
    +
    +
    @@ -725,57 +772,10 @@ all if the file is shorter than nlines.

    -
    - -
    +
    +
    @@ -870,57 +917,10 @@ entries are processed.

    -
    - -
    +
    +
    @@ -178,57 +225,10 @@ than their values.

    -
    - -
    +
    +
    @@ -222,57 +269,10 @@ This is used by the serialization framework.

    -
    - -
    +
    +
    @@ -338,60 +385,35 @@ matches were found.

    +
    +
    +evennia.utils.search.search_typeclass(typeclass, include_children=False, include_parents=False)
    +

    Searches through all objects returning those of a certain typeclass.

    +
    +
    Parameters
    +
      +
    • typeclass (str or class) – A typeclass class or a python path to a typeclass.

    • +
    • include_children (bool, optional) – Return objects with +given typeclass and all children inheriting from this +typeclass. Mutuall exclusive to include_parents.

    • +
    • include_parents (bool, optional) – Return objects with +given typeclass and all parents to this typeclass. +Mutually exclusive to include_children.

    • +
    +
    +
    Returns
    +

    objects (list) – The objects found with the given typeclasses.

    +
    +
    +
    + -
    - -
    +
    +
    @@ -395,57 +442,10 @@ classes and settings in mygame.

    -
    - -
    +
    +
    @@ -114,7 +161,17 @@ snippet #577349 on
    -re_url = re.compile('(?<!=")((?:ftp|www|https?)\\W+(?:(?!\\.(?:\\s|$)|&\\w+;)[^"\\\',;$*^\\\\(){}<>\\[\\]\\s])+)(\\.(?:\\s|$)|&\\w+;|)')
    +re_url = re.compile('(?<!=")(\\b(?:ftp|www|https?)\\W+(?:(?!\\.(?:\\s|$)|&\\w+;)[^"\\\',;$*^\\\\(){}<>\\[\\]\\s])+)(\\.(?:\\s|$)|&\\w+;|)') +
    + +
    +
    +re_protocol = re.compile('^(?:ftp|https?)://')
    +
    + +
    +
    +re_valid_no_protocol = re.compile('^(?:www|ftp)\\.[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b[-a-zA-Z0-9@:%_\\+.~#?&//=]*')
    @@ -271,57 +328,10 @@ into html statements.

    -
    - -
    +
    +
    @@ -1743,60 +1790,27 @@ up to twelve.

    +
    +
    +evennia.utils.utils.str2int(number)[source]
    +

    Converts a string to an integer.

    +
    +
    Parameters
    +

    number (str) – The string to convert. It can be a digit such as “1”, or a number word such as “one”.

    +
    +
    Returns
    +

    int – The string represented as an integer.

    +
    +
    +
    + -
    - -
    +
    +
    @@ -178,57 +225,10 @@ ignored.

    -
    - -
    +
    +
    @@ -310,57 +357,10 @@ need, dare, ought.

    -
    - -
    +
    +
    +
    @@ -55,7 +102,7 @@

    evennia.utils.verb_conjugation.pronouns

    English pronoun mapping between 1st/2nd person and 3rd person perspective (and vice-versa).

    This file is released under the Evennia regular BSD License. -(Griatch 2021)

    +(Griatch 2021) - revised by InspectorCaracal 2022

    Pronouns are words you use instead of a proper name, such as ‘him’, ‘herself’, ‘theirs’ etc. These look different depending on who sees the outgoing string. This mapping maps between 1st/2nd case and the 3rd person case and back. In some cases, the mapping is not unique; it is assumed the system can @@ -130,7 +177,7 @@ Pronoun

    it

    it

    its

    -

    theirs*

    +

    its

    itself

    3rd person plural

    @@ -142,10 +189,9 @@ Pronoun

    -

    > *) Not formally used, we use theirs here as a filler.

    -evennia.utils.verb_conjugation.pronouns.pronoun_to_viewpoints(pronoun, options=None, pronoun_type='object_pronoun', gender='neutral', viewpoint='2nd person')[source]
    +evennia.utils.verb_conjugation.pronouns.pronoun_to_viewpoints(pronoun, options=None, pronoun_type='subject pronoun', gender='neutral', viewpoint='2nd person')[source]

    Access function for determining the forms of a pronount from different viewpoints.

    Parameters
    @@ -161,7 +207,7 @@ Values are

  • subject pronoun/subject/sp (I, you, he, they)

  • object pronoun/object//op (me, you, him, them)

  • possessive adjective/adjective/pa (my, your, his, their)

  • -
  • possessive pronoun/pronoun/pp (mine, yours, his, theirs)

  • +
  • possessive pronoun/pronoun/pp (mine, yours, his, theirs)

  • gender (str, optional) –

    Specific gender to use (plural counts a gender for this purpose). @@ -198,57 +244,10 @@ string and others respectively. If pronoun is invalid, the word is returned verb -

  • - -
    +
    +
    @@ -881,26 +928,20 @@
    -
    -test_mapping_with_options_19_their()
    -

    Test the pronoun mapper [with pronoun=’their’, options=’pa’, expected_1st_or_2nd_person=’your’, expected_3rd_person=’their’].

    -
    - -
    -
    -test_mapping_with_options_20_itself()
    +
    +test_mapping_with_options_19_itself()

    Test the pronoun mapper [with pronoun=’itself’, options=’’, expected_1st_or_2nd_person=’yourself’, expected_3rd_person=’itself’].

    -
    -test_mapping_with_options_21_themselves()
    +
    +test_mapping_with_options_20_themselves()

    Test the pronoun mapper [with pronoun=’themselves’, options=’’, expected_1st_or_2nd_person=’yourselves’, expected_3rd_person=’themselves’].

    -
    -test_mapping_with_options_22_herself()
    +
    +test_mapping_with_options_21_herself()

    Test the pronoun mapper [with pronoun=’herself’, options=’’, expected_1st_or_2nd_person=’yourself’, expected_3rd_person=’herself’].

    @@ -909,57 +950,10 @@ -
    - -
    +
    +
    @@ -440,57 +487,10 @@ has a slightly different workflow.

    -
    - -
    +
    +
    @@ -199,57 +246,10 @@ people used the admin at the same time

    -
    - -
    +
    +
    @@ -440,57 +487,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.web.admin.frontpage

    -

    Admin views.

    -
    -
    -evennia.web.admin.frontpage.evennia_admin(request)[source]
    -

    Helpful Evennia-specific admin page.

    -
    - -
    -
    -evennia.web.admin.frontpage.admin_wrapper(request)[source]
    -

    Wrapper that allows us to properly use the base Django admin site, if needed.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.admin.frontpage

    +

    Admin views.

    +
    +
    +evennia.web.admin.frontpage.evennia_admin(request)[source]
    +

    Helpful Evennia-specific admin page.

    +
    + +
    +
    +evennia.web.admin.frontpage.admin_wrapper(request)[source]
    +

    Wrapper that allows us to properly use the base Django admin site, if needed.

    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -192,57 +239,10 @@ -
    - -
    +
    +
    +
    @@ -360,57 +407,10 @@ -
    - -
    +
    +
    @@ -230,57 +277,10 @@ -
    - -
    +
    +
    @@ -105,57 +152,10 @@ in the web admin interface.

    -
    - -
    +
    +
    @@ -284,57 +331,10 @@ people used the admin at the same time

    -
    - -
    +
    -
    -
    - -
    -

    evennia.web.admin.urls

    -

    Rerouting admin frontpage to evennia version.

    -

    These patterns are all under the admin/* namespace.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.admin.urls

    +

    Rerouting admin frontpage to evennia version.

    +

    These patterns are all under the admin/* namespace.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -97,57 +144,10 @@ admin process. This is intended to be used with forms.ChoiceField.

    -
    - -
    +
    +
    @@ -267,57 +314,10 @@ documentation specifically regarding DRF integration.

    -
    - -
    +
    +
    +
    @@ -152,57 +199,10 @@ complete the action.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.web.api.root

    -

    Set a more useful description on the Api root.

    -
    -
    -class evennia.web.api.root.EvenniaAPIRoot(**kwargs)[source]
    -

    Bases: rest_framework.routers.APIRootView

    -

    Root of the Evennia API tree.

    -
    - -
    -
    -class evennia.web.api.root.APIRootRouter(*args, **kwargs)[source]
    -

    Bases: rest_framework.routers.DefaultRouter

    -
    -
    -APIRootView
    -

    alias of EvenniaAPIRoot

    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.api.root

    +

    Set a more useful description on the Api root.

    +
    +
    +class evennia.web.api.root.EvenniaAPIRoot(**kwargs)[source]
    +

    Bases: rest_framework.routers.APIRootView

    +

    Root of the Evennia API tree.

    +
    + +
    +
    +class evennia.web.api.root.APIRootRouter(*args, **kwargs)[source]
    +

    Bases: rest_framework.routers.DefaultRouter

    +
    +
    +APIRootView
    +

    alias of EvenniaAPIRoot

    +
    + +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -506,57 +553,10 @@ explicitly to not have them render PK-related fields.

    -
    - -
    +
    +
    @@ -122,57 +169,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.web.api.urls

    -

    The Django Rest Framework provides a way of generating urls for different -views that implement standard CRUD operations in a quick way, using ‘routers’ -and ‘viewsets’. A viewset implements standard CRUD actions and any custom actions -that you want, and then a router will automatically generate URLs based on the -actions that it detects for a viewset. For example, below we create a DefaultRouter. -We then register ObjectDBViewSet, a viewset for CRUD operations for ObjectDB -instances, to the ‘objects’ base endpoint. That will generate a number of URLs -like the following:

    -

    list objects: action: GET, url: /objects/, view name: object-list -create object: action: POST, url: /objects/, view name: object-list -retrieve object: action: GET, url: /objects/<:pk>, view name: object-detail -update object: action: POST, url: /objects/<:pk>, view name: object-detail -delete object: action: DELETE, url: /objects/<:pk>, view name: object-detail -set attribute: action: POST, url: /objects/<:pk>/set-attribute, view name: object-set-attribute

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.api.urls

    +

    The Django Rest Framework provides a way of generating urls for different +views that implement standard CRUD operations in a quick way, using ‘routers’ +and ‘viewsets’. A viewset implements standard CRUD actions and any custom actions +that you want, and then a router will automatically generate URLs based on the +actions that it detects for a viewset. For example, below we create a DefaultRouter. +We then register ObjectDBViewSet, a viewset for CRUD operations for ObjectDB +instances, to the ‘objects’ base endpoint. That will generate a number of URLs +like the following:

    +

    list objects: action: GET, url: /objects/, view name: object-list +create object: action: POST, url: /objects/, view name: object-list +retrieve object: action: GET, url: /objects/<:pk>, view name: object-detail +update object: action: POST, url: /objects/<:pk>, view name: object-detail +delete object: action: DELETE, url: /objects/<:pk>, view name: object-detail +set attribute: action: POST, url: /objects/<:pk>/set-attribute, view name: object-set-attribute

    +
    + + +
    +
    +
    +
    +
    +
    @@ -439,57 +486,10 @@ Note that command auto-help and file-based help entries are not accessible this -
    - -
    +
    +
    @@ -123,57 +170,10 @@ relate the database contents to web pages.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.web.templatetags.addclass

    -
    -
    -evennia.web.templatetags.addclass.addclass(field, given_class)[source]
    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.templatetags.addclass

    +
    +
    +evennia.web.templatetags.addclass.addclass(field, given_class)[source]
    +
    + +
    + + +
    +
    +
    + +
    +
    -
    -
    - -
    -

    evennia.web.urls

    -

    File that determines what each URL points to. This uses Python regular expressions. -This is the starting point when a user enters an URL.

    -
      -
    1. The URL is matched with a regex, tying it to a given view. Note that this central url.py -file includes url.py from all the various web-components found in views/ so the search -space is much larger than what is shown here.

    2. -
    3. The view (a Python function or class is executed)

    4. -
    5. The view uses a template (a HTML file which may contain template markers for dynamically -modifying its contents; the locations of such templates are given by -settings.TEMPLATES[0][‘DIRS’]) and which may in turn may include static -assets (CSS, images etc).

    6. -
    7. The view ‘renders’ the template into a finished HTML page, replacing all -dynamic content as appropriate.

    8. -
    9. The HTML page is returned to the user.

    10. -
    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.urls

    +

    File that determines what each URL points to. This uses Python regular expressions. +This is the starting point when a user enters an URL.

    +
      +
    1. The URL is matched with a regex, tying it to a given view. Note that this central url.py +file includes url.py from all the various web-components found in views/ so the search +space is much larger than what is shown here.

    2. +
    3. The view (a Python function or class is executed)

    4. +
    5. The view uses a template (a HTML file which may contain template markers for dynamically +modifying its contents; the locations of such templates are given by +settings.TEMPLATES[0][‘DIRS’]) and which may in turn may include static +assets (CSS, images etc).

    6. +
    7. The view ‘renders’ the template into a finished HTML page, replacing all +dynamic content as appropriate.

    8. +
    9. The HTML page is returned to the user.

    10. +
    +
    + + +
    +
    +
    +
    +
    +
    @@ -98,57 +145,10 @@ registered in this site.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.web.utils.backends

    -
    -
    -class evennia.web.utils.backends.CaseInsensitiveModelBackend[source]
    -

    Bases: django.contrib.auth.backends.ModelBackend

    -

    By default ModelBackend does case _sensitive_ username -authentication, which isn’t what is generally expected. This -backend supports case insensitive username authentication.

    -
    -
    -authenticate(request, username=None, password=None, autologin=None)[source]
    -

    Custom authenticate with bypass for auto-logins

    -
    -
    Parameters
    -
      -
    • request (Request) – Request object.

    • -
    • username (str, optional) – Name of user to authenticate.

    • -
    • password (str, optional) – Password of user

    • -
    • autologin (Account, optional) – If given, assume this is -an already authenticated account and bypass authentication.

    • -
    -
    -
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.utils.backends

    +
    +
    +class evennia.web.utils.backends.CaseInsensitiveModelBackend[source]
    +

    Bases: django.contrib.auth.backends.ModelBackend

    +

    By default ModelBackend does case _sensitive_ username +authentication, which isn’t what is generally expected. This +backend supports case insensitive username authentication.

    +
    +
    +authenticate(request, username=None, password=None, autologin=None)[source]
    +

    Custom authenticate with bypass for auto-logins

    +
    +
    Parameters
    +
      +
    • request (Request) – Request object.

    • +
    • username (str, optional) – Name of user to authenticate.

    • +
    • password (str, optional) – Password of user

    • +
    • autologin (Account, optional) – If given, assume this is +an already authenticated account and bypass authentication.

    • +
    +
    +
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.web.utils.general_context

    -

    This file defines global variables that will always be available in a view -context without having to repeatedly include it.

    -

    For this to work, this file is included in the settings file, in the -TEMPLATES[“OPTIONS”][“context_processors”] list.

    -
    -
    -evennia.web.utils.general_context.load_game_settings()[source]
    -

    Load and cache game settings.

    -
    - -
    -
    -evennia.web.utils.general_context.general_context(request)[source]
    -

    Returns common Evennia-related context stuff, which is automatically added -to context of all views.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.utils.general_context

    +

    This file defines global variables that will always be available in a view +context without having to repeatedly include it.

    +

    For this to work, this file is included in the settings file, in the +TEMPLATES[“OPTIONS”][“context_processors”] list.

    +
    +
    +evennia.web.utils.general_context.load_game_settings()[source]
    +

    Load and cache game settings.

    +
    + +
    +
    +evennia.web.utils.general_context.general_context(request)[source]
    +

    Returns common Evennia-related context stuff, which is automatically added +to context of all views.

    +
    + +
    + + +
    +
    +
    + +
    +
    -
    -
    - -
    -

    evennia.web.utils.middleware

    -
    -
    -class evennia.web.utils.middleware.SharedLoginMiddleware(get_response)[source]
    -

    Bases: object

    -

    Handle the shared login between website and webclient.

    -
    -
    -__init__(get_response)[source]
    -

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

    -
    - -
    -
    -classmethod make_shared_login(request)[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.utils.middleware

    +
    +
    +class evennia.web.utils.middleware.SharedLoginMiddleware(get_response)[source]
    +

    Bases: object

    +

    Handle the shared login between website and webclient.

    +
    +
    +__init__(get_response)[source]
    +

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

    +
    + +
    +
    +classmethod make_shared_login(request)[source]
    +
    + +
    + +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.web.utils.tests

    -
    -
    -class evennia.web.utils.tests.TestGeneralContext(methodName='runTest')[source]
    -

    Bases: django.test.testcases.TestCase

    -
    -
    -maxDiff = None
    -
    - -
    -
    -test_general_context()[source]
    -
    - -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.utils.tests

    +
    +
    +class evennia.web.utils.tests.TestGeneralContext(methodName='runTest')[source]
    +

    Bases: django.test.testcases.TestCase

    +
    +
    +maxDiff = None
    +
    + +
    +
    +test_general_context()[source]
    +
    + +
    + +
    + + +
    +
    +
    + +
    +
    -
    -
    - -
    -

    evennia.web.webclient.urls

    -

    This structures the (simple) structure of the webpage ‘application’.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.webclient.urls

    +

    This structures the (simple) structure of the webpage ‘application’.

    +
    + + +
    +
    +
    +
    +
    -
    -
    - -
    -

    evennia.web.webclient.views

    -

    This contains a simple view for rendering the webclient -page and serve it eventual static content.

    -
    -
    -evennia.web.webclient.views.webclient(request)[source]
    -

    Webclient page template loading.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.webclient.views

    +

    This contains a simple view for rendering the webclient +page and serve it eventual static content.

    +
    +
    +evennia.web.webclient.views.webclient(request)[source]
    +

    Webclient page template loading.

    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -294,57 +341,10 @@ wish to allow.

    -
    - -
    +
    +
    +
    @@ -502,57 +549,10 @@ -
    - -
    +
    -
    -
    - -
    -

    evennia.web.website.urls

    -

    This redirects to website sub-pages.

    -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.website.urls

    +

    This redirects to website sub-pages.

    +
    + + +
    +
    +
    +
    +
    +
    @@ -105,57 +152,10 @@ proceeds with creating the Account object.

    -
    - -
    +
    +
    @@ -180,57 +227,10 @@ name.

    -
    - -
    +
    +
    @@ -277,57 +324,10 @@ proceeds with creating the Character object.

    -
    - -
    +
    -
    -
    - -
    -

    evennia.web.website.views.errors

    -

    Error views.

    -
    -
    -evennia.web.website.views.errors.to_be_implemented(request)[source]
    -

    A notice letting the user know that this particular feature hasn’t been -implemented yet.

    -
    - -
    - - -
    -
    -
    -
    -
    +
    +
    + +
    +

    evennia.web.website.views.errors

    +

    Error views.

    +
    +
    +evennia.web.website.views.errors.to_be_implemented(request)[source]
    +

    A notice letting the user know that this particular feature hasn’t been +implemented yet.

    +
    + +
    + + +
    +
    +
    +
    +
    +
    @@ -241,57 +288,10 @@ instead of pk and slug.

    -
    - -
    +
    +
    +
    @@ -106,57 +153,10 @@ of this method.

    -
    - -
    +
    +
    @@ -132,57 +179,10 @@ otherwise.

    -
    - -
    +
    +
    @@ -222,57 +269,10 @@ validated and sanitized.

    -
    - -
    +
    +
    @@ -1253,6 +1287,12 @@
  • (evennia.contrib.tutorials.tutorial_world.rooms.CmdWest attribute)
  • (evennia.contrib.utils.fieldfill.fieldfill.CmdTestMenu attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGit attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.GitCommand attribute)
  • (evennia.contrib.utils.tree_select.tree_select.CmdNameColor attribute)
  • @@ -1777,6 +1817,8 @@
  • (evennia.contrib.tutorials.tutorial_world.rooms.DarkCmdSet method)
  • (evennia.contrib.tutorials.tutorial_world.rooms.TutorialRoomCmdSet method) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.GitCmdSet method)
  • (evennia.server.profiling.dummyrunner.DummyRunnerCmdSet method)
  • @@ -2111,6 +2153,10 @@
  • (evennia.contrib.grid.extended_room.extended_room.ExtendedRoom method)
  • (evennia.contrib.grid.simpledoor.simpledoor.SimpleDoor method) +
  • +
  • (evennia.contrib.grid.xyzgrid.tests.TestXyzExit method) +
  • +
  • (evennia.contrib.grid.xyzgrid.tests.TestXyzRoom method)
  • (evennia.contrib.rpg.rpsystem.rpsystem.ContribRPCharacter method)
  • @@ -3320,6 +3366,8 @@
  • check_to_attr() (evennia.commands.default.building.CmdCpAttr method)
  • check_warnings() (in module evennia.server.deprecations) +
  • +
  • checkout() (evennia.contrib.utils.git_integration.git_integration.GitCommand method)
  • Choice (class in evennia.contrib.base_systems.building_menu.building_menu)
  • @@ -3676,6 +3724,10 @@
  • CmdGetInput (class in evennia.utils.evmenu)
  • CmdGetWeapon (class in evennia.contrib.tutorials.tutorial_world.objects) +
  • +
  • CmdGit (class in evennia.contrib.utils.git_integration.git_integration) +
  • +
  • CmdGitEvennia (class in evennia.contrib.utils.git_integration.git_integration)
  • CmdGive (class in evennia.commands.default.general) @@ -3785,12 +3837,12 @@
  • CmdObjects (class in evennia.commands.default.building)
  • + + - - + +
  • directory (evennia.contrib.utils.git_integration.git_integration.CmdGit attribute) + +
  • directoryListing() (evennia.server.webserver.PrivateStaticRoot method) @@ -7126,8 +7184,6 @@
  • module
  • - -
    • evennia.contrib.tutorials.evadventure.random_tables @@ -7142,6 +7198,8 @@
    • module
    + + - +
  • gidcounter() (in module evennia.server.profiling.dummyrunner) +
  • +
  • GitCmdSet (class in evennia.contrib.utils.git_integration.git_integration) +
  • +
  • GitCommand (class in evennia.contrib.utils.git_integration.git_integration)
  • give_advantage (evennia.contrib.tutorials.evadventure.combat_turnbased.CombatActionStunt attribute)
  • @@ -11096,6 +11189,12 @@
  • (evennia.contrib.tutorials.tutorial_world.rooms.CmdWest attribute)
  • (evennia.contrib.utils.fieldfill.fieldfill.CmdTestMenu attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGit attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.GitCommand attribute)
  • (evennia.contrib.utils.tree_select.tree_select.CmdNameColor attribute)
  • @@ -12282,6 +12381,12 @@
  • (evennia.contrib.tutorials.tutorial_world.rooms.TutorialRoomCmdSet attribute)
  • (evennia.contrib.utils.fieldfill.fieldfill.CmdTestMenu attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGit attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.GitCommand attribute)
  • (evennia.contrib.utils.tree_select.tree_select.CmdNameColor attribute)
  • @@ -13126,6 +13231,12 @@
  • (evennia.contrib.tutorials.tutorial_world.rooms.CmdWest attribute)
  • (evennia.contrib.utils.fieldfill.fieldfill.CmdTestMenu attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGit attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.GitCommand attribute)
  • (evennia.contrib.utils.tree_select.tree_select.CmdNameColor attribute)
  • @@ -13510,6 +13621,10 @@
  • (evennia.contrib.tutorials.tutorial_world.rooms.CmdTutorialSetDetail attribute)
  • (evennia.contrib.tutorials.tutorial_world.rooms.CmdWest attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGit attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.CmdGitEvennia attribute)
  • (evennia.help.filehelp.FileHelpEntry attribute)
  • @@ -14523,6 +14638,12 @@
  • evennia.contrib.utils.fieldfill
  • evennia.contrib.utils.fieldfill.fieldfill +
  • +
  • evennia.contrib.utils.git_integration +
  • +
  • evennia.contrib.utils.git_integration.git_integration +
  • +
  • evennia.contrib.utils.git_integration.tests
  • evennia.contrib.utils.name_generator
  • @@ -15963,6 +16084,8 @@
  • (evennia.contrib.tutorials.evadventure.commands.EvAdventureCommand method)
  • (evennia.contrib.tutorials.tutorial_world.objects.CmdShiftRoot method) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.GitCommand method)
  • (evennia.utils.eveditor.CmdEditorBase method)
  • @@ -16201,6 +16324,10 @@
  • (evennia.contrib.grid.wilderness.wilderness.WildernessScript attribute)
  • (evennia.contrib.grid.xyzgrid.commands.XYZGridCmdSet attribute) +
  • +
  • (evennia.contrib.grid.xyzgrid.tests.TestXyzExit attribute) +
  • +
  • (evennia.contrib.grid.xyzgrid.tests.TestXyzRoom attribute)
  • (evennia.contrib.grid.xyzgrid.xyzgrid.XYZGrid attribute)
  • @@ -16355,6 +16482,8 @@
  • (evennia.contrib.tutorials.tutorial_world.rooms.TutorialStartExit attribute)
  • (evennia.contrib.tutorials.tutorial_world.rooms.WeatherRoom attribute) +
  • +
  • (evennia.contrib.utils.git_integration.git_integration.GitCmdSet attribute)
  • (evennia.contrib.utils.random_string_generator.random_string_generator.RandomStringGeneratorScript attribute)
  • @@ -16736,6 +16865,8 @@
  • prototype_to_str() (in module evennia.prototypes.prototypes)
  • PrototypeEvMore (class in evennia.prototypes.prototypes) +
  • +
  • pull() (evennia.contrib.utils.git_integration.git_integration.GitCommand method)
  • puppet() (evennia.accounts.accounts.DefaultAccount property)
  • @@ -16890,12 +17021,16 @@
  • re_mxplink (evennia.utils.text2html.TextToHTMLparser attribute)
  • re_mxpurl (evennia.utils.text2html.TextToHTMLparser attribute) +
  • +
  • re_protocol (evennia.utils.text2html.TextToHTMLparser attribute)
  • re_string (evennia.utils.text2html.TextToHTMLparser attribute)
  • re_style (evennia.utils.text2html.TextToHTMLparser attribute)
  • re_url (evennia.utils.text2html.TextToHTMLparser attribute) +
  • +
  • re_valid_no_protocol (evennia.utils.text2html.TextToHTMLparser attribute)
  • read_batchfile() (in module evennia.utils.batchprocessors)
  • @@ -17081,6 +17216,12 @@
  • reload_evennia() (in module evennia.server.evennia_launcher)
  • +
  • remote_link (evennia.contrib.utils.git_integration.git_integration.CmdGit attribute) + +
  • remove() (evennia.commands.cmdset.CmdSet method)
  • +
  • setup_grid() (evennia.contrib.grid.xyzgrid.tests.TestCallbacks method) +
  • setup_session() (evennia.contrib.utils.auditing.tests.AuditingTest method)
  • - - +
    - -
    +
    +
    - -
    +
    +
    @@ -1087,6 +1121,21 @@     evennia.contrib.utils.fieldfill.fieldfill + + +     + evennia.contrib.utils.git_integration + + + +     + evennia.contrib.utils.git_integration.git_integration + + + +     + evennia.contrib.utils.git_integration.tests +     @@ -1920,44 +1969,10 @@ -
    - -
    +
    +
    @@ -64,34 +88,10 @@
    -
    - -