From 210c5ee4db4bec7f90a297d1d98afc564e89bd80 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 9 Jan 2022 19:40:57 +0100 Subject: [PATCH] Updated HTML docs --- docs/0.9.5/.buildinfo | 2 +- .../api/evennia.commands.default.admin.html | 4 +- .../evennia.commands.default.building.html | 12 +- .../api/evennia.commands.default.comms.html | 8 +- .../api/evennia.commands.default.general.html | 12 +- .../evennia.commands.default.unloggedin.html | 12 +- docs/0.9.5/api/evennia.utils.eveditor.html | 4 +- docs/0.9.5/api/evennia.utils.evmenu.html | 4 +- docs/0.9.5/api/evennia.utils.evmore.html | 4 +- docs/1.0-dev/.buildinfo | 2 +- docs/1.0-dev/Components/EvMenu.html | 324 ++++++++++++++++- .../1.0-dev/_sources/Components/EvMenu.md.txt | 327 +++++++++++++++++- .../api/evennia.commands.default.account.html | 4 +- .../api/evennia.commands.default.admin.html | 4 +- ...evennia.commands.default.batchprocess.html | 4 +- .../evennia.commands.default.building.html | 4 +- .../api/evennia.commands.default.comms.html | 8 +- .../api/evennia.commands.default.general.html | 16 +- .../evennia.commands.default.unloggedin.html | 12 +- ....base_systems.email_login.email_login.html | 12 +- ...b.base_systems.ingame_python.commands.html | 4 +- ...systems.mux_comms_cmds.mux_comms_cmds.html | 4 +- ...rib.full_systems.evscaperoom.commands.html | 20 +- ...ontrib.game_systems.clothing.clothing.html | 4 +- ...trib.grid.extended_room.extended_room.html | 4 +- .../api/evennia.contrib.rpg.dice.dice.html | 4 +- ...ntrib.tutorials.red_button.red_button.html | 16 +- ...trib.tutorials.tutorial_world.objects.html | 16 +- ...ontrib.tutorials.tutorial_world.rooms.html | 8 +- docs/1.0-dev/api/evennia.utils.eveditor.html | 4 +- docs/1.0-dev/api/evennia.utils.evmenu.html | 4 +- docs/1.0-dev/api/evennia.utils.evmore.html | 4 +- docs/1.0-dev/objects.inv | Bin 137139 -> 137271 bytes docs/1.0-dev/searchindex.js | 2 +- docs/1.0-dev/toc.html | 12 +- 35 files changed, 752 insertions(+), 133 deletions(-) diff --git a/docs/0.9.5/.buildinfo b/docs/0.9.5/.buildinfo index b06bf58165..0b6ea755a3 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: 13e03b2041c10390196e0d6afb7b4405 +config: 9be3f6653eac8c57b523ebb96ad28c40 tags: 645f666f9bcd5a90fca523b33c5a78b7 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 84e120da35..dc2b3f96fb 100644 --- a/docs/0.9.5/api/evennia.commands.default.admin.html +++ b/docs/0.9.5/api/evennia.commands.default.admin.html @@ -256,7 +256,7 @@ to accounts respectively.

-aliases = ['remit', 'pemit']
+aliases = ['pemit', 'remit']
@@ -287,7 +287,7 @@ to accounts respectively.

-search_index_entry = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' remit pemit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}
+search_index_entry = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' pemit remit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}
diff --git a/docs/0.9.5/api/evennia.commands.default.building.html b/docs/0.9.5/api/evennia.commands.default.building.html index ce99c356de..dfa9468879 100644 --- a/docs/0.9.5/api/evennia.commands.default.building.html +++ b/docs/0.9.5/api/evennia.commands.default.building.html @@ -531,7 +531,7 @@ You can specify the /force switch to bypass this confirmation.

-aliases = ['@delete', '@del']
+aliases = ['@del', '@delete']
@@ -572,7 +572,7 @@ You can specify the /force switch to bypass this confirmation.

-search_index_entry = {'aliases': '@delete @del', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy delete del', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
+search_index_entry = {'aliases': '@del @delete', 'category': 'building', 'key': '@destroy', 'no_prefix': 'destroy del delete', 'tags': '', 'text': '\n permanently delete objects\n\n Usage:\n destroy[/switches] [obj, obj2, obj3, [dbref-dbref], ...]\n\n Switches:\n override - The destroy command will usually avoid accidentally\n destroying account objects. This switch overrides this safety.\n force - destroy without confirmation.\n Examples:\n destroy house, roof, door, 44-78\n destroy 5-10, flower, 45\n destroy/force north\n\n Destroys one or many objects. If dbrefs are used, a range to delete can be\n given, e.g. 4-10. Also the end points will be deleted. This command\n displays a confirmation before destroying, to make sure of your choice.\n You can specify the /force switch to bypass this confirmation.\n '}
@@ -1284,7 +1284,7 @@ server settings.

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

-search_index_entry = {'aliases': '@type @update @swap @parent @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass type update swap parent typeclasses', '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': '@parent @type @update @swap @typeclasses', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass parent type update swap typeclasses', '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 "}
@@ -1772,7 +1772,7 @@ one is given.

-aliases = ['@locate', '@search']
+aliases = ['@search', '@locate']
@@ -1803,7 +1803,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 '}
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 1abeae2df0..7a7c35cc23 100644 --- a/docs/0.9.5/api/evennia.commands.default.comms.html +++ b/docs/0.9.5/api/evennia.commands.default.comms.html @@ -195,7 +195,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

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

-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 "}
+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 "}
@@ -874,7 +874,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

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

-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 "}
+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 "}
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 4d52ca14e7..1f61cf2d64 100644 --- a/docs/0.9.5/api/evennia.commands.default.general.html +++ b/docs/0.9.5/api/evennia.commands.default.general.html @@ -207,7 +207,7 @@ for everyone to use, you need build privileges and the alias command.

-aliases = ['nickname', 'nicks']
+aliases = ['nicks', 'nickname']
@@ -239,7 +239,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 '}
@@ -262,7 +262,7 @@ inv

-aliases = ['inv', 'i']
+aliases = ['i', 'inv']
@@ -293,7 +293,7 @@ inv

-search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
+search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
@@ -712,7 +712,7 @@ which permission groups you are a member of.

-aliases = ['groups', 'hierarchy']
+aliases = ['hierarchy', 'groups']
@@ -743,7 +743,7 @@ which permission groups you are a member of.

-search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}
+search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}
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 71bae7efed..6b0c49520c 100644 --- a/docs/0.9.5/api/evennia.commands.default.unloggedin.html +++ b/docs/0.9.5/api/evennia.commands.default.unloggedin.html @@ -61,7 +61,7 @@ connect “account name” “pass word”

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

-search_index_entry = {'aliases': 'conn con co', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn con co', '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': '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 '}
@@ -120,7 +120,7 @@ create “account name” “pass word”

-aliases = ['cr', 'cre']
+aliases = ['cre', 'cr']
@@ -151,7 +151,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 '}
@@ -274,7 +274,7 @@ for simplicity. It shows a pane of info.

-aliases = ['h', '?']
+aliases = ['?', 'h']
@@ -300,7 +300,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 '}
diff --git a/docs/0.9.5/api/evennia.utils.eveditor.html b/docs/0.9.5/api/evennia.utils.eveditor.html index a99fcd6c2c..259588da8d 100644 --- a/docs/0.9.5/api/evennia.utils.eveditor.html +++ b/docs/0.9.5/api/evennia.utils.eveditor.html @@ -276,7 +276,7 @@ indentation.

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

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

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

-search_index_entry = {'aliases': 'n a yes no abort y __nomatch_command', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a yes no abort y __nomatch_command', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
+search_index_entry = {'aliases': '__nomatch_command n y no abort yes a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' __nomatch_command n y no abort yes a', 'tags': '', 'text': '\n Handle a prompt for yes or no. Press [return] for the default choice.\n\n '}
diff --git a/docs/0.9.5/api/evennia.utils.evmore.html b/docs/0.9.5/api/evennia.utils.evmore.html index 612b98de5a..06800d7b62 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 = ['n', 'a', 'p', 't', 'end', 'next', 'e', 'previous', 'top', 'abort', 'quit', 'q']
+aliases = ['end', 'n', 'q', 'quit', 'previous', 'next', 'e', 'top', 't', 'abort', 'a', 'p']
@@ -103,7 +103,7 @@ the caller.msg() construct every time the page is updated.

-search_index_entry = {'aliases': 'n a p t end next e previous top abort quit q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' n a p t end next e previous top abort quit q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
+search_index_entry = {'aliases': 'end n q quit previous next e top t abort a p', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' end n q quit previous next e top t abort a p', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
diff --git a/docs/1.0-dev/.buildinfo b/docs/1.0-dev/.buildinfo index fdb0ed328f..fd082b185d 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: 44e75c10040f09608c15510f0fb43995 +config: 083ec91783c92156508ec202c9409a10 tags: 645f666f9bcd5a90fca523b33c5a78b7 diff --git a/docs/1.0-dev/Components/EvMenu.html b/docs/1.0-dev/Components/EvMenu.html index bf7e4f37d9..fa16277a72 100644 --- a/docs/1.0-dev/Components/EvMenu.html +++ b/docs/1.0-dev/Components/EvMenu.html @@ -42,12 +42,121 @@

EvMenu

+

EvMenu is used for generate branching multi-choice menus. Each menu ‘node’ can +accepts specific options as input or free-form input. Depending what the player +chooses, they are forwarded to different nodes in the menu.

Introduction

-

The EvMenu utility class is located in -evennia/utils/evmenu.py. +

The EvMenu utility class is located in evennia/utils/evmenu.py. It allows for easily adding interactive menus to the game; for example to implement Character creation, building commands or similar. Below is an example of offering NPC conversation choices:

+
+

Examples

+

This section gives some examples of how menus work in-game. A menu is a state +(it’s actually a custom cmdset) where menu-specific commands are made available +to you. An EvMenu is usually started from inside a command, but could also +just be put in a file and run with py.

+

This is how the example menu will look in-game:

+
Is your answer yes or no?
+_________________________________________
+[Y]es! - Answer yes.
+[N]o! - Answer no.
+[A]bort - Answer neither, and abort.
+
+
+

If you pick (for example) Y(es), you will see

+
You chose yes!
+
+Thanks for your answer. Goodbye!
+
+
+

After which the menu will end (in this example at least - it could also continue +on to other questions and choices or even repeat the same node over and over!)

+

Here’s the full EvMenu code for this example:

+
from evennia.utils import evmenu
+
+def _handle_answer(caller, raw_input, **kwargs):
+    answer = kwargs.get("answer")
+    caller.msg(f"You chose {answer}!")
+    return "end"  # name of next node
+
+def node_question(caller, raw_input, **kwargs):
+    text = "Is your answer yes or no?"
+    options = (
+        {"key": ("[Y]es!", "yes", "y"),
+         "desc": Answer yes.",
+         "goto": _handle_answer, {"answer": "yes"}},
+        {"key": ("[N]o!", "no", "n"),
+         "desc": "Answer no.",
+         "goto": _handle_answer, {"answer": "no"}},
+        {"key": ("[A]bort", "abort", "a"),
+         "desc": "Answer neither, and abort.",
+         "goto": "end"}
+    )
+    return text, options
+
+def node_end(caller, raw_input, **kwargs):
+    text "Thanks for your answer. Goodbye!"
+    return text, None  # empty options ends the menu
+
+evmenu.EvMenu(caller, {"start": node_question, "end": node_end})
+
+
+
+

Note the call to EvMenu at the end; this immediately creates the menu for the +caller. It also assigns the two node-functions to menu node-names start and +end, which is what the menu then uses to reference the nodes.

+

Each node of the menu is a function that returns the text and a list of dicts +describing the choices you can make on that node.

+

Each option details what it should show (key/desc) as well as which node to go +to (goto) next. The “goto” should be the name of the next node to go (if None, +the same node will be rerun again).

+

Above, the Abort option gives the “end” node name just as a string whereas the +yes/no options instead uses the callable _handle_answer but pass different +arguments to it. _handle_answer then returns the name of the next node (this +allows you to perform actions when making a choice before you move on to the +next node the menu). Note that _handle_answer is not a node in the menu, +it’s just a helper function.

+

When choosing ‘yes’ (or ‘no’) what happens here is that _handle_answer gets +called and echoes your choice before directing to the “end” node, which exits +the menu (since it doesn’t return any options).

+

You can also write menus using the EvMenu templating language. This +allows you to use a text string to generate simpler menus with less boiler +plate. Let’s create exactly the same menu using the templating language:

+
from evennia.utils import evmenu
+
+def _handle_answer(caller, raw_input, **kwargs):
+    answer = kwargs.get("answer")
+    caller.msg(f"You chose {answer}!")
+    return "end"  # name of next node
+
+menu_template = """
+
+## node start
+
+Is your answer yes or no?
+
+## options
+
+[Y]es!;yes;y: Answer yes. -> handle_answer(answer=yes)
+[N]o!;no;n: Answer no. -> handle_answer(answer=no)
+[A]bort;abort;a: Answer neither, and abort. -> end
+
+## node end
+
+Thanks for your answer. Goodbye!
+
+"""
+
+evmenu.template2menu(caller, menu_template, {"handle_answer": _handle_answer})
+
+
+
+

As seen, the _handle_answer is the same, but the menu structure is +described in the menu_template string. The template2menu helper +uses the template-string and a mapping of callables (we must add +_handle_answer here) to build a full EvMenu for us.

+

Here’s another menu example, where we can choose how to interact with an NPC:

The guard looks at you suspiciously.
 "No one is supposed to be in here ..."
 he says, a hand on his weapon.
@@ -57,15 +166,49 @@ creation, building commands or similar. Below is an example of offering NPC conv
  3. Appeal to his vanity [Cha]
  4. Try to knock him out [Luck + Dex]
  5. Try to run away [Dex]
+
+
+

+def _skill_check(caller, raw_string, **kwargs):
+    skills = kwargs.get("skills", [])
+    gold = kwargs.get("gold", 0)
+
+    # perform skill check here, decide if check passed or not
+    # then decide which node-name to return based on
+    # the result ...
+
+    return next_node_name
+
+def node_guard(caller, raw_string, **kwarg):
+    text = (
+        'The guard looks at you suspiciously.\n'
+        '"No one is supposed to be in here ..."\n'
+        'he says, a hand on his weapon.'
+    options = (
+        {"desc": "Try to bribe on [Cha + 10 gold]",
+         "goto": (_skill_check, {"skills": ["Cha"], "gold": 10})},
+        {"desc": "Convince him you work here [Int].",
+         "goto": (_skill_check, {"skills": ["Int"]})},
+        {"desc": "Appeal to his vanity [Cha]",
+         "goto": (_skill_check, {"skills": ["Cha"]})},
+        {"desc": "Try to knock him out [Luck + Dex]",
+         "goto": (_skill_check, {"skills"" ["Luck", "Dex"]})},
+        {"desc": "Try to run away [Dex]",
+         "goto": (_skill_check, {"skills": ["Dex"]})}
+    return text, options
+    )
+
+# EvMenu called below, with all the nodes ...
 
 
-

This is an example of a menu node. Think of a node as a point where the menu stops printing text -and waits for user to give some input. By jumping to different nodes depending on the input, a menu -is constructed.

-

To create the menu, EvMenu uses normal Python functions, one per node. It will load all those -functions/nodes either from a module or by being passed a dictionary mapping the node’s names to -said functions, like {"nodename": <function>, ...}

+

Note that by skipping the key of the options, we instead get an +(auto-generated) list of numbered options to choose from.

+

Here the _skill_check helper will check (roll your stats, exactly what this +means depends on your game) to decide if your approach succeeded. It may then +choose to point you to nodes that continue the conversation or maybe dump you +into combat!

+

Launching the menu

@@ -426,8 +569,157 @@ needed. Here is an example:

See evennia/utils/evmenu.py for the details of their default implementations.

-
-

Examples:

+
+

EvMenu templating language

+

In evmenu.py are two helper functions parse_menu_template and template2menu +that is used to parse a menu template string into an EvMenu:

+
evmenu.template2menu(caller, menu_template, goto_callables)
+
+
+

One can also do it in two steps, by generate a menutree and using that to call +EvMenu normally:

+
menutree = evmenu.parse_menu_template(caller, menu_template, goto_callables)
+EvMenu(caller, menutree)
+
+
+

With this latter solution, one could mix and match normally created menu nodes +with those generated by the template engine.

+

The goto_callables is a mapping {"funcname": callable, ...}, where each +callable must be a module-global function on the form +funcname(caller, raw_string, **kwargs) (like any goto-callable). The +menu_template is a multi-line string on the following form:

+
menu_template = """
+
+## node node1
+
+Text for node
+
+## options
+
+key1: desc1 -> node2
+key2: desc2 -> node3
+key3: desc3 -> node4
+"""
+
+
+

Each menu node is defined by a ## node <name> containing the text of the node, +followed by ## options Also ## NODE and ## OPTIONS work. No python code +logics is allowed in the template, this code is not evaluated but parsed. More +advanced dynamic usage requires a full node-function.

+

Except for defining the node/options, # act as comments - everything following +will be ignored by the template parser.

+
+

Template Options

+

The option syntax is

+
<key>: [desc ->] nodename or function-call
+
+
+

The ‘desc’ part is optional, and if that is not given, the -> can be skipped +too:

+
key: nodename
+
+
+

The key can both be strings and numbers. Separate the aliases with ;.

+
key: node1
+1: node2
+key;k: node3
+foobar;foo;bar;f;b: node4
+
+
+

Starting the key with the special letter > indicates that what follows is a +glob/regex matcher.

+
>: node1          - matches empty input
+> foo*: node1     - everything starting with foo
+> *foo: node3     - everything ending with foo
+> [0-9]+?: node4  - regex (all numbers)
+> *: node5        - catches everything else (put as last option)
+
+
+

Here’s how to call a goto-function from an option:

+
key: desc -> myfunc(foo=bar)
+
+
+

For this to work template2menu or parse_menu_template must be given a dict +that includes {"myfunc": _actual_myfunc_callable}. All callables to be +available in the template must be mapped this way. Goto callables act like +normal EvMenu goto-callables and should have a callsign of +_actual_myfunc_callable(caller, raw_string, **kwargs) and return the next node +(passing dynamic kwargs into the next node does not work with the template

+
    +
  • use the full EvMenu if you want advanced dynamic data passing).

  • +
+

Only no or named keywords are allowed in these callables. So

+
myfunc()         # OK
+myfunc(foo=bar)  # OK
+myfunc(foo)      # error!
+
+
+

This is because these properties are passed as **kwargs into the goto callable.

+
+
+

Templating example

+
from random import random
+from evennia.utils import evmenu
+
+def _gamble(caller, raw_string, **kwargs):
+
+    caller.msg("You roll the dice ...")
+    if random() < 0.5:
+        return "loose"
+    else:
+        return "win"
+
+def _try_again(caller, raw_string, **kwargs):
+    return None   # reruns the same node
+
+template_string = """
+
+## node start
+
+Death patiently holds out a set of bone dice to you.
+
+"ROLL"
+
+he says.
+
+## options
+
+1. Roll the dice -> gamble()
+2. Try to talk yourself out of rolling -> ask_again()
+
+## node win
+
+The dice clatter over the stones.
+
+"LOOKS LIKE YOU WIN THIS TIME"
+
+says Death.
+
+# (this ends the menu since there are no options)
+
+## node loose
+
+The dice clatter over the stones.
+
+"YOUR LUCK RAN OUT"
+
+says Death.
+
+"YOU ARE COMING WITH ME."
+
+# (this ends the menu, but what happens next - who knows!)
+
+"""
+
+goto_callables = {"gamble": _gamble, "ask_again": _ask_again}
+evmenu.template2menu(caller, template_string, goto_callables)
+
+
+
+
+
+
+

Examples:

  • Simple branching menu - choose from options

  • Dynamic goto - jumping to different nodes based on response

  • @@ -973,7 +1265,10 @@ until the exit node.

    Table of Contents

    • EvMenu
        -
      • Introduction
      • +
      • Introduction +
      • Launching the menu
      • The Menu nodes
        • Input arguments to the node
        • @@ -991,7 +1286,12 @@ until the exit node.

        • Temporary storage
        • Customizing Menu formatting
        • -
        • Examples:
            +
          • EvMenu templating language +
          • +
          • Examples:
            • Example: Simple branching menu
            • Example: Dynamic goto
            • Example: Set caller properties
            • diff --git a/docs/1.0-dev/_sources/Components/EvMenu.md.txt b/docs/1.0-dev/_sources/Components/EvMenu.md.txt index 626e25b3b7..fa1940a18d 100644 --- a/docs/1.0-dev/_sources/Components/EvMenu.md.txt +++ b/docs/1.0-dev/_sources/Components/EvMenu.md.txt @@ -1,13 +1,139 @@ # EvMenu +EvMenu is used for generate branching multi-choice menus. Each menu 'node' can +accepts specific options as input or free-form input. Depending what the player +chooses, they are forwarded to different nodes in the menu. ## Introduction -The `EvMenu` utility class is located in -[evennia/utils/evmenu.py](https://github.com/evennia/evennia/blob/master/evennia/utils/evmenu.py). +The `EvMenu` utility class is located in [evennia/utils/evmenu.py](evennia.utils.evmenu). It allows for easily adding interactive menus to the game; for example to implement Character creation, building commands or similar. Below is an example of offering NPC conversation choices: +### Examples + +This section gives some examples of how menus work in-game. A menu is a state +(it's actually a custom cmdset) where menu-specific commands are made available +to you. An EvMenu is usually started from inside a command, but could also +just be put in a file and run with `py`. + +This is how the example menu will look in-game: + +``` +Is your answer yes or no? +_________________________________________ +[Y]es! - Answer yes. +[N]o! - Answer no. +[A]bort - Answer neither, and abort. +``` + +If you pick (for example) Y(es), you will see + +``` +You chose yes! + +Thanks for your answer. Goodbye! +``` + +After which the menu will end (in this example at least - it could also continue +on to other questions and choices or even repeat the same node over and over!) + +Here's the full EvMenu code for this example: + +```python +from evennia.utils import evmenu + +def _handle_answer(caller, raw_input, **kwargs): + answer = kwargs.get("answer") + caller.msg(f"You chose {answer}!") + return "end" # name of next node + +def node_question(caller, raw_input, **kwargs): + text = "Is your answer yes or no?" + options = ( + {"key": ("[Y]es!", "yes", "y"), + "desc": Answer yes.", + "goto": _handle_answer, {"answer": "yes"}}, + {"key": ("[N]o!", "no", "n"), + "desc": "Answer no.", + "goto": _handle_answer, {"answer": "no"}}, + {"key": ("[A]bort", "abort", "a"), + "desc": "Answer neither, and abort.", + "goto": "end"} + ) + return text, options + +def node_end(caller, raw_input, **kwargs): + text "Thanks for your answer. Goodbye!" + return text, None # empty options ends the menu + +evmenu.EvMenu(caller, {"start": node_question, "end": node_end}) + +``` + +Note the call to `EvMenu` at the end; this immediately creates the menu for the +`caller`. It also assigns the two node-functions to menu node-names `start` and +`end`, which is what the menu then uses to reference the nodes. + +Each node of the menu is a function that returns the text and a list of dicts +describing the choices you can make on that node. + +Each option details what it should show (key/desc) as well as which node to go +to (goto) next. The "goto" should be the name of the next node to go (if `None`, +the same node will be rerun again). + +Above, the `Abort` option gives the "end" node name just as a string whereas the +yes/no options instead uses the callable `_handle_answer` but pass different +arguments to it. `_handle_answer` then returns the name of the next node (this +allows you to perform actions when making a choice before you move on to the +next node the menu). Note that `_handle_answer` is _not_ a node in the menu, +it's just a helper function. + +When choosing 'yes' (or 'no') what happens here is that `_handle_answer` gets +called and echoes your choice before directing to the "end" node, which exits +the menu (since it doesn't return any options). + +You can also write menus using the [EvMenu templating language](#evmenu-templating-language). This +allows you to use a text string to generate simpler menus with less boiler +plate. Let's create exactly the same menu using the templating language: + +```python +from evennia.utils import evmenu + +def _handle_answer(caller, raw_input, **kwargs): + answer = kwargs.get("answer") + caller.msg(f"You chose {answer}!") + return "end" # name of next node + +menu_template = """ + +## node start + +Is your answer yes or no? + +## options + +[Y]es!;yes;y: Answer yes. -> handle_answer(answer=yes) +[N]o!;no;n: Answer no. -> handle_answer(answer=no) +[A]bort;abort;a: Answer neither, and abort. -> end + +## node end + +Thanks for your answer. Goodbye! + +""" + +evmenu.template2menu(caller, menu_template, {"handle_answer": _handle_answer}) + +``` + +As seen, the `_handle_answer` is the same, but the menu structure is +described in the `menu_template` string. The `template2menu` helper +uses the template-string and a mapping of callables (we must add +`_handle_answer` here) to build a full EvMenu for us. + +Here's another menu example, where we can choose how to interact with an NPC: + ``` The guard looks at you suspiciously. "No one is supposed to be in here ..." @@ -18,16 +144,50 @@ _______________________________________________ 3. Appeal to his vanity [Cha] 4. Try to knock him out [Luck + Dex] 5. Try to run away [Dex] +``` + +```python + +def _skill_check(caller, raw_string, **kwargs): + skills = kwargs.get("skills", []) + gold = kwargs.get("gold", 0) + + # perform skill check here, decide if check passed or not + # then decide which node-name to return based on + # the result ... + + return next_node_name + +def node_guard(caller, raw_string, **kwarg): + text = ( + 'The guard looks at you suspiciously.\n' + '"No one is supposed to be in here ..."\n' + 'he says, a hand on his weapon.' + options = ( + {"desc": "Try to bribe on [Cha + 10 gold]", + "goto": (_skill_check, {"skills": ["Cha"], "gold": 10})}, + {"desc": "Convince him you work here [Int].", + "goto": (_skill_check, {"skills": ["Int"]})}, + {"desc": "Appeal to his vanity [Cha]", + "goto": (_skill_check, {"skills": ["Cha"]})}, + {"desc": "Try to knock him out [Luck + Dex]", + "goto": (_skill_check, {"skills"" ["Luck", "Dex"]})}, + {"desc": "Try to run away [Dex]", + "goto": (_skill_check, {"skills": ["Dex"]})} + return text, options + ) + +# EvMenu called below, with all the nodes ... ``` -This is an example of a menu *node*. Think of a node as a point where the menu stops printing text -and waits for user to give some input. By jumping to different nodes depending on the input, a menu -is constructed. +Note that by skipping the `key` of the options, we instead get an +(auto-generated) list of numbered options to choose from. -To create the menu, EvMenu uses normal Python functions, one per node. It will load all those -functions/nodes either from a module or by being passed a dictionary mapping the node's names to -said functions, like `{"nodename": , ...}` +Here the `_skill_check` helper will check (roll your stats, exactly what this +means depends on your game) to decide if your approach succeeded. It may then +choose to point you to nodes that continue the conversation or maybe dump you +into combat! ## Launching the menu @@ -425,6 +585,157 @@ class MyEvMenu(EvMenu): ``` See `evennia/utils/evmenu.py` for the details of their default implementations. +## EvMenu templating language + +In evmenu.py are two helper functions `parse_menu_template` and `template2menu` +that is used to parse a _menu template_ string into an EvMenu: + + evmenu.template2menu(caller, menu_template, goto_callables) + +One can also do it in two steps, by generate a menutree and using that to call +EvMenu normally: + + menutree = evmenu.parse_menu_template(caller, menu_template, goto_callables) + EvMenu(caller, menutree) + +With this latter solution, one could mix and match normally created menu nodes +with those generated by the template engine. + +The `goto_callables` is a mapping `{"funcname": callable, ...}`, where each +callable must be a module-global function on the form +`funcname(caller, raw_string, **kwargs)` (like any goto-callable). The +`menu_template` is a multi-line string on the following form: + +```python +menu_template = """ + +## node node1 + +Text for node + +## options + +key1: desc1 -> node2 +key2: desc2 -> node3 +key3: desc3 -> node4 +""" +``` + +Each menu node is defined by a `## node ` containing the text of the node, +followed by `## options` Also `## NODE` and `## OPTIONS` work. No python code +logics is allowed in the template, this code is not evaluated but parsed. More +advanced dynamic usage requires a full node-function. + +Except for defining the node/options, `#` act as comments - everything following +will be ignored by the template parser. + +### Template Options + +The option syntax is + + : [desc ->] nodename or function-call + +The 'desc' part is optional, and if that is not given, the `->` can be skipped +too: + + key: nodename + +The key can both be strings and numbers. Separate the aliases with `;`. + + key: node1 + 1: node2 + key;k: node3 + foobar;foo;bar;f;b: node4 + +Starting the key with the special letter `>` indicates that what follows is a +glob/regex matcher. + + >: node1 - matches empty input + > foo*: node1 - everything starting with foo + > *foo: node3 - everything ending with foo + > [0-9]+?: node4 - regex (all numbers) + > *: node5 - catches everything else (put as last option) + +Here's how to call a goto-function from an option: + + key: desc -> myfunc(foo=bar) + +For this to work `template2menu` or `parse_menu_template` must be given a dict +that includes `{"myfunc": _actual_myfunc_callable}`. All callables to be +available in the template must be mapped this way. Goto callables act like +normal EvMenu goto-callables and should have a callsign of +`_actual_myfunc_callable(caller, raw_string, **kwargs)` and return the next node +(passing dynamic kwargs into the next node does not work with the template +- use the full EvMenu if you want advanced dynamic data passing). + +Only no or named keywords are allowed in these callables. So + + myfunc() # OK + myfunc(foo=bar) # OK + myfunc(foo) # error! + +This is because these properties are passed as `**kwargs` into the goto callable. + +### Templating example + +```python +from random import random +from evennia.utils import evmenu + +def _gamble(caller, raw_string, **kwargs): + + caller.msg("You roll the dice ...") + if random() < 0.5: + return "loose" + else: + return "win" + +def _try_again(caller, raw_string, **kwargs): + return None # reruns the same node + +template_string = """ + +## node start + +Death patiently holds out a set of bone dice to you. + +"ROLL" + +he says. + +## options + +1. Roll the dice -> gamble() +2. Try to talk yourself out of rolling -> ask_again() + +## node win + +The dice clatter over the stones. + +"LOOKS LIKE YOU WIN THIS TIME" + +says Death. + +# (this ends the menu since there are no options) + +## node loose + +The dice clatter over the stones. + +"YOUR LUCK RAN OUT" + +says Death. + +"YOU ARE COMING WITH ME." + +# (this ends the menu, but what happens next - who knows!) + +""" + +goto_callables = {"gamble": _gamble, "ask_again": _ask_again} +evmenu.template2menu(caller, template_string, goto_callables) + +``` ## Examples: diff --git a/docs/1.0-dev/api/evennia.commands.default.account.html b/docs/1.0-dev/api/evennia.commands.default.account.html index 9a07462030..c8a57a75ed 100644 --- a/docs/1.0-dev/api/evennia.commands.default.account.html +++ b/docs/1.0-dev/api/evennia.commands.default.account.html @@ -73,7 +73,7 @@ method. Otherwise all text will be returned to all connected sessions.

              -aliases = ['ls', 'l']
              +aliases = ['l', 'ls']
              @@ -104,7 +104,7 @@ method. Otherwise all text will be returned to all connected sessions.

              -search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}
              +search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look while out-of-character\n\n Usage:\n look\n\n Look in the ooc state.\n '}
              diff --git a/docs/1.0-dev/api/evennia.commands.default.admin.html b/docs/1.0-dev/api/evennia.commands.default.admin.html index 4537a0850e..811b3b6852 100644 --- a/docs/1.0-dev/api/evennia.commands.default.admin.html +++ b/docs/1.0-dev/api/evennia.commands.default.admin.html @@ -257,7 +257,7 @@ to accounts respectively.

              -aliases = ['remit', 'pemit']
              +aliases = ['pemit', 'remit']
              @@ -288,7 +288,7 @@ to accounts respectively.

              -search_index_entry = {'aliases': 'remit pemit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' remit pemit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}
              +search_index_entry = {'aliases': 'pemit remit', 'category': 'admin', 'key': 'emit', 'no_prefix': ' pemit remit', 'tags': '', 'text': '\n admin command for emitting message to multiple objects\n\n Usage:\n emit[/switches] [<obj>, <obj>, ... =] <message>\n remit [<obj>, <obj>, ... =] <message>\n pemit [<obj>, <obj>, ... =] <message>\n\n Switches:\n room - limit emits to rooms only (default)\n accounts - limit emits to accounts only\n contents - send to the contents of matched objects too\n\n Emits a message to the selected objects or to\n your immediate surroundings. If the object is a room,\n send to its contents. remit and pemit are just\n limited forms of emit, for sending to rooms and\n to accounts respectively.\n '}
              diff --git a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html index 6b6a30d6b0..4c14a254c7 100644 --- a/docs/1.0-dev/api/evennia.commands.default.batchprocess.html +++ b/docs/1.0-dev/api/evennia.commands.default.batchprocess.html @@ -78,7 +78,7 @@ skipping, reloading etc.

              -aliases = ['batchcmd', 'batchcommand']
              +aliases = ['batchcommand', 'batchcmd']
              @@ -109,7 +109,7 @@ skipping, reloading etc.

              -search_index_entry = {'aliases': 'batchcmd batchcommand', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcmd batchcommand', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
              +search_index_entry = {'aliases': 'batchcommand batchcmd', 'category': 'building', 'key': 'batchcommands', 'no_prefix': ' batchcommand batchcmd', 'tags': '', 'text': '\n build from batch-command file\n\n Usage:\n batchcommands[/interactive] <python.path.to.file>\n\n Switch:\n interactive - this mode will offer more control when\n executing the batch file, like stepping,\n skipping, reloading etc.\n\n Runs batches of commands from a batch-cmd text file (*.ev).\n\n '}
              diff --git a/docs/1.0-dev/api/evennia.commands.default.building.html b/docs/1.0-dev/api/evennia.commands.default.building.html index 4c76083760..11faad039b 100644 --- a/docs/1.0-dev/api/evennia.commands.default.building.html +++ b/docs/1.0-dev/api/evennia.commands.default.building.html @@ -1285,7 +1285,7 @@ server settings.

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

              -search_index_entry = {'aliases': '@typeclasses @type @swap @update @parent', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass typeclasses type swap update parent', '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': '@swap @typeclasses @parent @update @type', 'category': 'building', 'key': '@typeclass', 'no_prefix': 'typeclass swap typeclasses parent 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 "}
              diff --git a/docs/1.0-dev/api/evennia.commands.default.comms.html b/docs/1.0-dev/api/evennia.commands.default.comms.html index e1c8bfbb59..f37e10c816 100644 --- a/docs/1.0-dev/api/evennia.commands.default.comms.html +++ b/docs/1.0-dev/api/evennia.commands.default.comms.html @@ -196,7 +196,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

              -aliases = ['@chan', '@channels']
              +aliases = ['@channels', '@chan']
              @@ -722,7 +722,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 "}
              @@ -875,7 +875,7 @@ ban mychannel1,mychannel2= EvilUser : Was banned for spamming.

              -aliases = ['@chan', '@channels']
              +aliases = ['@channels', '@chan']
              @@ -895,7 +895,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 "}
              diff --git a/docs/1.0-dev/api/evennia.commands.default.general.html b/docs/1.0-dev/api/evennia.commands.default.general.html index e773d4e96e..27d18bc714 100644 --- a/docs/1.0-dev/api/evennia.commands.default.general.html +++ b/docs/1.0-dev/api/evennia.commands.default.general.html @@ -115,7 +115,7 @@ look *<account&g
              -aliases = ['ls', 'l']
              +aliases = ['l', 'ls']
              @@ -146,7 +146,7 @@ look *<account&g
              -search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}
              +search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look at location or object\n\n Usage:\n look\n look <obj>\n look *<account>\n\n Observes your location or objects in your vicinity.\n '}
              @@ -208,7 +208,7 @@ for everyone to use, you need build privileges and the alias command.

              -aliases = ['nickname', 'nicks']
              +aliases = ['nicks', 'nickname']
              @@ -240,7 +240,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 '}
              @@ -263,7 +263,7 @@ inv

              -aliases = ['inv', 'i']
              +aliases = ['i', 'inv']
              @@ -294,7 +294,7 @@ inv

              -search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
              +search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
              @@ -713,7 +713,7 @@ which permission groups you are a member of.

              -aliases = ['groups', 'hierarchy']
              +aliases = ['hierarchy', 'groups']
              @@ -744,7 +744,7 @@ which permission groups you are a member of.

              -search_index_entry = {'aliases': 'groups hierarchy', 'category': 'general', 'key': 'access', 'no_prefix': ' groups hierarchy', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}
              +search_index_entry = {'aliases': 'hierarchy groups', 'category': 'general', 'key': 'access', 'no_prefix': ' hierarchy groups', 'tags': '', 'text': '\n show your current game access\n\n Usage:\n access\n\n This command shows you the permission hierarchy and\n which permission groups you are a member of.\n '}
              diff --git a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html index 3029699285..e7b37b15d1 100644 --- a/docs/1.0-dev/api/evennia.commands.default.unloggedin.html +++ b/docs/1.0-dev/api/evennia.commands.default.unloggedin.html @@ -62,7 +62,7 @@ connect “account name” “pass word”

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

              -search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', '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': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co 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 '}
              @@ -121,7 +121,7 @@ create “account name” “pass word”

              -aliases = ['cr', 'cre']
              +aliases = ['cre', 'cr']
              @@ -152,7 +152,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 '}
              @@ -226,7 +226,7 @@ All it does is display the connect screen.

              -aliases = ['look', 'l']
              +aliases = ['l', 'look']
              @@ -252,7 +252,7 @@ All it does is display the connect screen.

              -search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
              +search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n look when in unlogged-in state\n\n Usage:\n look\n\n This is an unconnected version of the look command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
              diff --git a/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html b/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html index ac429fdc47..29c45e1100 100644 --- a/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html +++ b/docs/1.0-dev/api/evennia.contrib.base_systems.email_login.email_login.html @@ -78,7 +78,7 @@ the module given by settings.CONNECTION_SCREEN_MODULE.

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

              -search_index_entry = {'aliases': 'con conn co', 'category': 'general', 'key': 'connect', 'no_prefix': ' con conn co', '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': 'conn co con', 'category': 'general', 'key': 'connect', 'no_prefix': ' conn co 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 '}
              @@ -130,7 +130,7 @@ there is no object yet before the account has logged in)

              -aliases = ['cr', 'cre']
              +aliases = ['cre', 'cr']
              @@ -166,7 +166,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 '}
              @@ -230,7 +230,7 @@ All it does is display the connect screen.

              -aliases = ['look', 'l']
              +aliases = ['l', 'look']
              @@ -256,7 +256,7 @@ All it does is display the connect screen.

              -search_index_entry = {'aliases': 'look l', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' look l', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
              +search_index_entry = {'aliases': 'l look', 'category': 'general', 'key': '__unloggedin_look_command', 'no_prefix': ' l look', 'tags': '', 'text': '\n This is an unconnected version of the `look` command for simplicity.\n\n This is called by the server and kicks everything in gear.\n All it does is display the connect screen.\n '}
              diff --git a/docs/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html b/docs/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html index 4633e2b849..dac4abe75b 100644 --- a/docs/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html +++ b/docs/1.0-dev/api/evennia.contrib.base_systems.ingame_python.commands.html @@ -55,7 +55,7 @@
              -aliases = ['@callback', '@callbacks', '@calls']
              +aliases = ['@calls', '@callbacks', '@callback']
              @@ -136,7 +136,7 @@ on user permission.

              -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 '}
              +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 '}
              diff --git a/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html b/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html index 179f7b82e6..58c6104bbf 100644 --- a/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html +++ b/docs/1.0-dev/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.html @@ -156,7 +156,7 @@ for that channel.

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

              -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 "}
              +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 "}
              diff --git a/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html b/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html index 0414ad9f23..1f0a26e32f 100644 --- a/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html +++ b/docs/1.0-dev/api/evennia.contrib.full_systems.evscaperoom.commands.html @@ -150,7 +150,7 @@ the operation will be general or on the room.

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

              -search_index_entry = {'aliases': 'quit q abort chicken out', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' quit q abort chicken out', '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 chicken out abort quit', 'category': 'evscaperoom', 'key': 'give up', 'no_prefix': ' q chicken out abort 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 '}
              @@ -195,7 +195,7 @@ set in self.parse())

              -aliases = ['ls', 'l']
              +aliases = ['l', 'ls']
              @@ -229,7 +229,7 @@ set in self.parse())

              -search_index_entry = {'aliases': 'ls l', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}
              +search_index_entry = {'aliases': 'l ls', 'category': 'evscaperoom', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n Look at the room, an object or the currently focused object\n\n Usage:\n look [obj]\n\n '}
              @@ -310,7 +310,7 @@ shout

              -aliases = ['shout', ';', 'whisper']
              +aliases = [';', 'whisper', 'shout']
              @@ -339,7 +339,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 '}
              @@ -429,7 +429,7 @@ looks and what actions is available.

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

              -search_index_entry = {'aliases': 'e examine ex unfocus', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' e examine ex unfocus', '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': 'ex unfocus e examine', 'category': 'evscaperoom', 'key': 'focus', 'no_prefix': ' ex unfocus e examine', '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 '}
              @@ -520,7 +520,7 @@ set in self.parse())

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

              -search_index_entry = {'aliases': 'inventory inv give i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory inv give i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
              +search_index_entry = {'aliases': 'inventory give inv i', 'category': 'evscaperoom', 'key': 'get', 'no_prefix': ' inventory give inv i', 'tags': '', 'text': '\n Use focus / examine instead.\n\n '}
              diff --git a/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html b/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html index 5975b30364..39b2131185 100644 --- a/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html +++ b/docs/1.0-dev/api/evennia.contrib.game_systems.clothing.clothing.html @@ -631,7 +631,7 @@ inv

              -aliases = ['inv', 'i']
              +aliases = ['i', 'inv']
              @@ -662,7 +662,7 @@ inv

              -search_index_entry = {'aliases': 'inv i', 'category': 'general', 'key': 'inventory', 'no_prefix': ' inv i', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
              +search_index_entry = {'aliases': 'i inv', 'category': 'general', 'key': 'inventory', 'no_prefix': ' i inv', 'tags': '', 'text': '\n view inventory\n\n Usage:\n inventory\n inv\n\n Shows your inventory.\n '}
              diff --git a/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html b/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html index 7eb533864a..fe8614ebd7 100644 --- a/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html +++ b/docs/1.0-dev/api/evennia.contrib.grid.extended_room.extended_room.html @@ -279,7 +279,7 @@ look *<account&g
              -aliases = ['ls', 'l']
              +aliases = ['l', 'ls']
              @@ -299,7 +299,7 @@ look *<account&g
              -search_index_entry = {'aliases': 'ls l', 'category': 'general', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}
              +search_index_entry = {'aliases': 'l ls', 'category': 'general', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n look\n\n Usage:\n look\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects in your vicinity.\n '}
              diff --git a/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html b/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html index 344f5cc866..d7751b4d96 100644 --- a/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html +++ b/docs/1.0-dev/api/evennia.contrib.rpg.dice.dice.html @@ -234,7 +234,7 @@ everyone but the person rolling.

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

              -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 "}
              +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 "}
              diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html b/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html index aba8be254f..2feb4bc331 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorials.red_button.red_button.html @@ -84,7 +84,7 @@ such as when closing the lid and un-blinding a character.

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

              -search_index_entry = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press press button push', '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 '}
              @@ -183,7 +183,7 @@ check if the lid is open or closed.

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

              -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 '}
              +search_index_entry = {'aliases': 'smash smash lid break lid', 'category': 'general', 'key': 'smash glass', 'no_prefix': ' smash smash lid 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 '}
              @@ -310,7 +310,7 @@ be mutually exclusive.

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

              -search_index_entry = {'aliases': 'press press button push', 'category': 'general', 'key': 'push button', 'no_prefix': ' press press button push', '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 '}
              @@ -437,7 +437,7 @@ be mutually exclusive.

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

              -search_index_entry = {'aliases': 'feel ex listen l get examine', 'category': 'general', 'key': 'look', 'no_prefix': ' feel ex listen l get examine', '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': 'ex l get examine listen feel', 'category': 'general', 'key': 'look', 'no_prefix': ' ex l get 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 "}
              diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html index 5218d52b2c..bae04f0d85 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.objects.html @@ -364,7 +364,7 @@ of the object. We overload it with our own version.

              -aliases = ['light', 'burn']
              +aliases = ['burn', 'light']
              @@ -391,7 +391,7 @@ to sit on a “lightable” object, we operate only on self.obj.

              -search_index_entry = {'aliases': 'light burn', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' light burn', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}
              +search_index_entry = {'aliases': 'burn light', 'category': 'tutorialworld', 'key': 'on', 'no_prefix': ' burn light', 'tags': '', 'text': '\n Creates light where there was none. Something to burn.\n '}
              @@ -495,7 +495,7 @@ shift green root up/down

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

              -search_index_entry = {'aliases': 'pull move push shiftroot', 'category': 'tutorialworld', 'key': 'shift', 'no_prefix': ' pull move push shiftroot', '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': '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 '}
              @@ -548,7 +548,7 @@ yellow/green - horizontal roots

              -aliases = ['button', 'press button', 'push button']
              +aliases = ['push button', 'press button', 'button']
              @@ -574,7 +574,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 '}
              @@ -718,7 +718,7 @@ parry - forgoes your attack but will make you harder to hit on next

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

              -search_index_entry = {'aliases': 'bash kill slash parry stab defend pierce thrust chop hit fight', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' bash kill slash parry stab defend pierce thrust chop hit fight', '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': 'parry pierce hit slash defend kill fight stab bash thrust chop', 'category': 'tutorialworld', 'key': 'attack', 'no_prefix': ' parry pierce hit slash defend kill fight stab bash thrust chop', 'tags': '', 'text': '\n Attack the enemy. Commands:\n\n stab <enemy>\n slash <enemy>\n parry\n\n stab - (thrust) makes a lot of damage but is harder to hit with.\n slash - is easier to land, but does not make as much damage.\n parry - forgoes your attack but will make you harder to hit on next\n enemy attack.\n\n '}
              diff --git a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html index f3b40da037..5a4b278199 100644 --- a/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html +++ b/docs/1.0-dev/api/evennia.contrib.tutorials.tutorial_world.rooms.html @@ -187,7 +187,7 @@ code except for adding in the details.

              -aliases = ['ls', 'l']
              +aliases = ['l', 'ls']
              @@ -202,7 +202,7 @@ code except for adding in the details.

              -search_index_entry = {'aliases': 'ls l', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' ls l', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}
              +search_index_entry = {'aliases': 'l ls', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' l ls', 'tags': '', 'text': '\n looks at the room and on details\n\n Usage:\n look <obj>\n look <room detail>\n look *<account>\n\n Observes your location, details at your location or objects\n in your vicinity.\n\n Tutorial: This is a child of the default Look command, that also\n allows us to look at "details" in the room. These details are\n things to examine and offers some extra description without\n actually having to be actual database objects. It uses the\n return_detail() hook on TutorialRooms for this.\n '}
              @@ -868,7 +868,7 @@ to find something.

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

              -search_index_entry = {'aliases': 'feel l feel around fiddle search', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' feel l feel around fiddle search', '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': 'search l feel around fiddle feel', 'category': 'tutorialworld', 'key': 'look', 'no_prefix': ' search l feel around fiddle 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 '}
              diff --git a/docs/1.0-dev/api/evennia.utils.eveditor.html b/docs/1.0-dev/api/evennia.utils.eveditor.html index 3a8cd72b08..a064de84b5 100644 --- a/docs/1.0-dev/api/evennia.utils.eveditor.html +++ b/docs/1.0-dev/api/evennia.utils.eveditor.html @@ -277,7 +277,7 @@ indentation.

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

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

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

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

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

              -search_index_entry = {'aliases': 'q t quit top abort n e previous end p next a', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' q t quit top abort n e previous end p next a', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
              +search_index_entry = {'aliases': 't previous top next a n quit p end abort e q', 'category': 'general', 'key': '__noinput_command', 'no_prefix': ' t previous top next a n quit p end abort e q', 'tags': '', 'text': '\n Manipulate the text paging. Catch no-input with aliases.\n '}
              diff --git a/docs/1.0-dev/objects.inv b/docs/1.0-dev/objects.inv index 6d3daf13cd006ce54bcb7f0b5e0b2afa1133dea2..8454fe65b58bd72053ae55fc9d7cf5572c9bdfd3 100644 GIT binary patch delta 76247 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
                ^N1VSku&!#5_3pG~Zg%bE%% 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 SlXUcLrXD5u)Bg{sAUCT<5i=+N delta 76030 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%0AB3(>U9|Nb9bE7ZKnyzj?Ix} z?(BuW&&W;>wCPixS}emUwK8BWEHLHyaEBgZb0hcWNs=A{P9EaV$%6ii0SN#!ZL^4* z*M?XOWj|&9-TsNY8h)t?g1@)c$nU|ZO+a@aYPD@iMTTDk8U<53FA=obe+Pjn8h3p& zMEwn3jx&1T0Fh@qCMZgoSWwvdGcRUx0VbBV)Z6`^5ri+9SXILA_^WlbkfWJW{&zF} zMqQEpW;-9`wIJFaSR@1X<&1!y{A;bm0_bR}ck#Q&f!ntYpx1eSJmiBnX00gHp=3T1 ziScFFwZvvDENjiP^}cL)+HmuW9z4QfyNNY7I^y3A0xuo*%*9-=T5vLn}f z;x-HN^VCF~x$6$e6NT`L5LI@j2dwBDY|IRvx1o?M3^EV_ED_{F1`#aLF9 zRu=tXMh5Pbb{OP8VW^YSV#1D!HqbOUsPNQAn!0wnRM&Y(lhHcM4#XMBxUF?keJ}0& zctRgJ#fym_SH$a+cj*AUt6Kg(U+jtaVji+S-7wU3MHW5F8_mX>-$?p1HvEy#p|9sY zh2c=B6T6gK&-;JJ7r%5#4H7RGZ&6u$#7sun*qdcACAl67d6#5UCiZHr*I<=qP3!TD z%fLDQqC0T}swA%eg2a9LkSsuJPDOaa2s&#Aot3Wor*zh2JHh}kOZBx}n-6th=hZ3G zMFHL}TTh?SsP&l3w!Q?PJ2Pro;m@qse~-)N`M0egh!|^TVC%M2b763MK5O5XX7Z~> zGGQCZIwT2}s9R~*hMKzW?-5zz^B0OU-TAO4J_&hAgm-1 zq~R0`A){2RG7b9QT=l${&)!Lp-eK^2mULDj4b5xX{r(G|-f)myqZL+_%o4=PdIyA* zecwNwXgR!a5YzxgV^Ww0N8*}WT zeQm=*2zN?ekhW0RaZY$5Y?c$GyDrL~ zh`OCdN5AT@p&J=h4=ST6|T zcNN}Jimuvbsi|zd7YCY`ZC@hPjCXE(zbw$S4W2CAF#=+)z#PhVPzLa?K&Qtz4ak|< zlMhS43?`B=rdr(h1K~GhD#Cw{;KU7no&tqEZkIy`zQEWn8)sC_8*D&Yw?$Sw8MBq9Ff=GgFuOHoMNK zDo~95u|ypNEf57Jm4%aO2HsZ>xI7cDkXP$Eq71r25njAwjB^R}vQ%A2F7yD-7emt-mbe38az;?r5wCba@h%y2GMz zWV7Wa&o~@uhlUge1~m37V2)P-8TvCgU!nOg=}UL5nWHt^s)80dtPa6PxRVQ-J~7MZ zs=DxLXDSX`hh`zHbLVpEwy$95?Mfa20lJ2VAfnd+IoYpspq@i^tGDdZfq+#Q+^ZQ` zG{#izH$MZ^F&n(@IpAK;v!Rx+pCsqWKKOkSw2k-Qf0w{$h1Tsd2IGE}Mya0{<_??| z(j%0w0cQod9SuMKGIr7YX4xP63gJh;Sx3vdKE=V1uz5MFS z;TqhF!BkmpB&hIN6a72ds0Yv!!Z$oZf%UvWk+Cg%5sjLzRM~Fn!jM)XuLQArU6zPo zDOmict+-%JSM;g_`TqcdKz+ZaR{-mBz_>c5b)AtDAm^r>8%=+jV0lSlc<{dNhcUIj zgHc8_#PHy4IW*(i|raQep-rjMe6`tv6-Ey1QdpH>nOQ`&`;zPZ5Lse~0#n!ZR`c zWPJ_N!YsAgJ(#U=#^c=P5=~aOs(uKEf@4EylU24(r+QRYDId=*T zu-My$&M?Q#qgYwhK}lg>e>3&nd(ha7&P0)ghy9kTAN8qYZ#*1PaWu#0O2Pr?wlC^X z=fb^kYC>UJh(T8SyEuTX4^f%`D*f0 zlux9S!IWm|LWqSLK#PMAJc*waIEy4DXnl$MG0C^2Fmt%CHuXMQ4X=cy^>!4d#7gtC z8DfB5exNmyY;I{Qe;Z0G8!N!Ntt!}NMGi3XfOYqaBEYe73k#;=Nv!iQS3o6n|1zAv zVjHKZ1B@J}v)C9HZtRd6T9af#FO4p|jSWRmx4Q7civr3c#bz@Q@Ldc?csIfIJ#D0p z;Y-~#)i%Q)9OnfDB?#kO8Lua34r0D)7&hgE$)a*;H+*Mbe`D<2_^mLu)^|&Ul?50V zkWvA;=u@hp2{q107h^@hf$x$pSv zR+NK#pa*x5!J4&8@?L7;Gf~8=$0>Pr#%EN&cZ|CyA8qHj`SKc+|}GkQO+NPitRC42I8-Htu)U=z4(|5!KO z(Cr^zVpQ5zKI8x(HvrB#^cP{m~$uMF7(30u-j^cgQD1&sYVQewvhLCaA2mzjPIO*bwG zodsw`kpo_b3Fmt6>#Et_v)(~bmBUL0pKt{DN_k%PQWtrLM(jIrZ&n{+=Ap!U) zV=W_A#f=qCPbktPAVMw?_>6}i-d(&u&#o^nf3M!3U0-DXe(|?;5mLctW0XxIwKU5< zNc#{;U;X`1_tiF$M4DwErG1Em(si8>1V=(2pfL8s;jU1hBIs{rIyDtWn5hdPmW0;R zgealyr0FQ(n(zd}^;nh7_z3T93jPt^T1D`GF$eEOU zUXeUdO&k!;f7DE8Btc6YZMqgt0+Yvytvgm&mbHh24(vb5tWrFF9Bxr%7a*LOJ2}i%P;tL(iQ=gK~ozWPqCnf4a5$ zMh^-|cSyDRs^{9+$N2<~sP-lxs|}|0b^;dR0^xFN8>k1M+02&(0_u=GRaskA+mpB< zH`sw%0C{kH9(nSoDo36bK}@=fkh83q*1b`s)ckZqRh&=YA(Sspqbs?~EM%E;!+6-fe=yAGd_S@yh?pbd2a6zG;7J}Uw!)(xE9@ciRQ5PO zt*;)+p09eZHizDEeq%_Td{79qT%qL(?JWCz_VK58KfTR9Uc5c~cn+V|7pqSn-(CML zDpS8B#-|8Owiy=a({G;*m@^l6s-hF9nJb~HzzwC~Hu^cT^eV0f?omL}f9tO_1^hl= zedSih&w3rk{;+{@E3BHocAN6<(7-83$@2KouL=*J2L|4oAYDu>IChH>PZx&4;@ zCtT8ucJ6|xfL3k-vM!M|$KM!I9|xS@9$~_m-fh(`sK(F={)@ubLwUz<5mxC6iRGAe z?PkG!sL*m%Td^kfn0NftBtKP5rd*TDcfs3rd=tDQN|jvx%lF>ne}JrnDZq;`Aysea zTrjdm6XaqJ9MvM0>##ZzUk~!1X_FdUsyJLO;AA6I&TW{GU72K2rO)M#?TtB_AgU9hMf^>1Q@M=yrix;VbSA81b!Ul}-KU51^5n%LCMcWMt1MLoygu!;3 zcBm>?%Ldg0tY=GSe`Wx%Kn^M&1X$aEQGU5e0(K91JB?4MPgf$KcxM#bBm!#fBZ;ZQ zrZFz2XLUeY|5=Z9^5yv);MxYH@E_AFQjy^H*A`rq9A0DgRl^7T7S;zQh^z#z=fE*7 zOUFIU{jr4gC;Et`O}n_MY|^V{@+Sv0P0lI0gnEl%t4FA}e-%#Y5PmIL?TMQ=gCDA1 zPZp(cFh~mLuTJ>6D3}z-s!_SxakJYF)%dC$Z~3QN-fE1`(Y$0hYL0{j2JI^GNrHi< zGoEI(+pgV&ey!?N*lE;G;5>R)GSvdbyomu{XssDb9_BdCT@<$OTAaI^U1~fpGkub+ z$w{ANi!{3zf6(|^&i;A5t?tW1!{hU6|3W9;{!13Yaw*v3QmU#~D@$O9tQe;>vgX<6 zU@4~BXCK;%#5O*43)#R@vRyxQ6t-a*RcHZ$L6Xp%ni3_nr3^y$F%zE?`Iu!cE!j1` zs?YUu++ZWk#GVp`=VRlx7|HXVVFBO5Y0m~BeoUVJe?8^aDE8#T4t7}5Y4z7_n ztRp4JQvoTFK0IT~X~2hU8tZeuLdz9A42~pjs)us(l8Ikv^I%;HI8HvndC$>T)~|C- z>iAE%f6;E`nbTnr_UWIvah^0ZQ37P*ha&q~?uzqs66bVJ9htsR`})wx)rJxa>GgIw zT7deEB!O>Du#8^pPNAszcOtF1+J7m%iDAkxf2YYYm+LQ7V?r2W%%5pm%x$F>YO$94 zYb_=+NsCltp7$3uwWq`AqSc+S zh1^DOQ40ul7o94eZ?W%#BXmoJm_0L7e~XDtlCwYj`fF1y)FF(u0PzEfxo15*_8=cd z*xc zMZforPC3Z=KIYqQY368qEkOT9lhAZew=gq%p#o-(v%d`i5|P9|mJKXPzis!Me`N{; z0Bm)rH5jNg6@6Kc3-48KYjERtB5hUO4pmca#--d7DHvrv={(di18yy#S^wY+GFtxqb zpnoGtcz*fyp|2MPK^SXt@k5+>e^|n&ybQSp+v+bG-Q@f63qunnK!&a6C1ltNmxd-v zhzvrVL;?np{OI=&NtlqH{R<#cXMfqa+A1*FOK}{=IuV~+;Qw=6(e@&4#c{<`6F1?I z*a+1k_Kk%W}x)D};0Ew!gXTCiqMf7cUs^8d)~ z*WCWCv=`x2An)WSx`O>s9k!jgoav@ApAh>{GlQ37#98>7S4_wi_*VoGbeDKe(Dum; zYDXZo=PqWge+Nz7tS?}r2GPPNs$jNn&_HhYAh8rXOOm~@FoP1PyZua=Nt^x1?m|ih z@bQY@aeAss_{Mi~6lo+0e-m*OT~oFX2gqnBdryz`0J~>)clU>3Biy9aK(-KxiG^NZ z<_4y$o8Hs71M2&(spLLWc-)sjhE?pe;~;G123~HwD#gX~67OSx(|cfqQ*pH;On~qU z6y_gihyi-ioEDohJflVTWRptnTA8JnU4zo-Tc`0EhWygGvoCH?e~}_LrHRB&_RG^k z2UZu%YC+@_A!!T52~&6jM2!uf_)_^Kcs)u17qScI;Dj-dkWw383$vg0o8%^$NeQ1> zvab~$`#^ix&A1f^p8Oy|t`#(#``~@%@qvrt6^yyYs*Y<+tG1M6>A9I7l~ur-svW=k zJ^@+SWZKw|k0+nef1xos8hIgcR&aC*lnE*=R{XCQxq9BS=MvPaxU@}e$0&x9=!6Q0 zuc1?WJ_?`<56`t{h)T$NC=U-QvE=FB!v9{(lsn3RPPv&l5lb@G8y?C8B5uY(V8MyP z@Dimm@buRNOjt8Iq$20s>RKa&S@u2b1~b;_Ook<1yHel7e~igQL#&{RR9Lw2^CK(n zP0}sPA^7cML0lWy`1wbE!7E0r?nw1iEal*4p9~Baks9sgI}P$fNbm=^Kj3pE zD5p!ZIaXZ2f2b^BX_DIK<1<*vDqonc#D^%EZ0xHYNBDSkI<=f@I~n+v({0s$BcI*l z-V<4mH531u)Od4=LGzrq<9Y9 z6>?cq!Q{CVI$@a$%X0zr9=`?&`ECSdn?1k8EAJ^M-|3)ib8dWY!2QSHE?qUXW~SVw z6TZm1Ac-w256X>UG04??2XlCx!$jGJ1w^5>e|#Dqrjp8K$vCLV`VV7A>Elc|1rXj5 zID%>bU4&@->g-)^lLKz=rOVBKm_z#c`TM4lJr>(;TfK(+Difff%#$mrsp&iWJB1UXv5=FSzO%pkIiZ3{uNYx*sj#|K ze*j^UWS4-08v(^naX0vD!c+=j1swbxVUPrR#O+XHxm)Csw%5)<$6JC%{OsB)e=1+n zpPa%_6v+=JOn_}a5;i=td4vhyD?fxSW;!H+OB*>&!VkZ!HaD!U2=#Q&8a-8?UPD-R zAB``5sQZ>v^wBEN!xBS6eU0V@xEa;a6kxde@=s~ zcPBr$JZF}2Usya+QkwJ4j=1@m7uh9aUk7fN8SB0lCFtzxon1E?n8@|_gZD-D6xB@s zMt^o8%Y&EU#d^=~QQw}#GYYw&6W-cO!#57J5NX#oFIZG}WzG8J-R7Ws=t&{~2=4>{ z%59)G1h$Y!uz+7O7D(2Jdr4CUf1po2_KbwOi$c53PkIrA;Zv6FLccxJCA=yL4*+?}~{kILbNm4;^$z1)#ff0$fY2ri1R zWs^e>l4U2nb@@uGn50>*&E`lhI@WLQ;m9R=Ytm^ z>S3hfK+5;mJ{+ zcEK(iS+z)Fmlio%{MEE~;}7Zx$BJ*ZyRG)@wkZ801`f(W9THjb4Sg+;zeZRb!sOu; z6n>fZGyiL$;k)-k3&&94yFf--s^-^|uRDCu=d>$(bW7P|TMzA57QuQ(FqLDp2*k$Y zKQk5NyOR0a40G! zis5T>?BmM2Te|4wrs_cw`zh&T{$`&Gn z->QZ&F_UGkwyHra4KEesg$-#l^XX0{6ajcO*jM{*@EuKK@bc+SWzNlVW%fzH{b0lW z&N+3Yh%{%=|SJL5+jk{AxV-Rw{k;a1Liae6pHri8BDnt!&?-21Z4pj5Jz z+-c1Qk>Qx#f94J(GwsU!W@Eyhuk5L=w!DhKV)ESBA!}l9fp1IpgoifI28M!m>^^9Q z>^r>c;fHejwPa68*q5<`Eu6lOkW086;BpSf>lpYh(Q<*7ohPze(jS`c4%!{8STz-_ z^$`>MVgcfIxw6ZZ-CG}`#fw7*Ec5Q`hX@mnM2M7^f7;4I8>+J3Jd$&lCpU6;J+ZgJ zA6b8Ba~PwjD&1OsvT(ddtjv(il-I_|C?*=L!mQ`7KWA7v-6#3!clxA-vG2AA^tsru zs;ti7xM|qge&}}9(<5u%{n?HG&M=in<+OQ?XIR5d`N}?9G2C|!T(=5+riA{Hs=x)P zYG*UKf14VH%Gy7S*_W0*S-xYp5C8fEonrPB+jifx+WrOJ2S4=XZU+@{&LZ~9VbF>C zL(6Js7-#ywsH$N=tsQe<&DlMUUjPoCecO&bdR}sal7$!uRSHJP9uv4-H4L`3|NO^) z*&g5zVISUkeeeYe3HS+Fe7mFnkukP9D|fJTf4&jJM6CbUxAZVz1o$yo;^+?+jyf-Q z`Ttkjw=KtQWLv)bD{%ZUw$JI5qJ5c&VN8shE>RNWh!(A)S~E{FScM|dLIG$1MT-68 z&zKX@{W>4!FPYqX=M6w!QRN3)#j4zEt-K(S*S!TM4;<0gQt*>p;Ps7eIvj5*V=(6l2!-zko;sL5cVwOfE0yImAP6!PD=$W}hW>J!lH5 zz?31*hdG+0eI~r!_s-FhN-^$NlpUKvf2Cmh!M!ZEO%wwpbD$%F1(}b+^1JE5J1e+I z>A;sbHVPVTJK0$QFUTF0W;9-Ty5UtC z3i${mPzeh^rF?q4)Z2Yorw~K>5G`VQNKN0z3EZYxK*ET@r$lZTCa4f5Aq5iI!!81o zq*wpgFrY++O9?jy87M`DP)S#$Oye|Zrm!kL6Y6KPf*4K0Fiw$V3F|r3RdaV&Y|90b zv~8R!gUcrjd@!bnf%G8(i0L6Ee|IQV00a8TtFzyeZJg=UI% zHQiC%lth6e+X!*v&@Cy#p2?WZ5ewX@SgFFWE5-3bkQ`Fe8>zw4URK5?-t%)e8m^2KgzlXrjyjd9 zZ)6;!ZXEk6N!v-Ke;%p)xQr}n3KocT*-=fx3@no-@-X$&=GA8M#7kOKdNcbpdCBE= zqB2}uo`JG;N2syMGgI4Ti~`sA>7JQkNz$Z7=_81 zK#$UJl$1n8X~H5Kw9_mp1WATSB}YqIpeh|Y^h>o)U{WMYkFZiftnx+8aAcgKGO7`RztN)W54VZ3lwE`(%@Hf+1hN(h zTq1QzrB1AqBt}&$Y-J{D0+R?Kh#bMbSVDr1cri;Ve@Pq0%89F*Lp78TOe=X5Ygoo8 zGI-)8ok-qdsY_)qs^F=8qSUDBR^fP)q_t+eT(2OBA1C8TImxn8$$P2+2~3H%V%_V2Q}ZA|y*C-UO)&x}d3fqDWUqH1lL_6{16E zO!>gx4*QJ4Z4}#&aVzh08#g7B>0E2<7O>;xEE2awYHa&(SVl|pwF*8qZSh2Y)F5qa z;1OV;26>N?kfr+Nq(Re?)$^vKy#D-lHTWs!0=;QZ-YvI63~R zshY=+bKm`L2{OHpTg9FZksd*xBqT*rQiY7IqNI4M!;Ib*rQmTIhR;TBpayx9@;^0; z(hyq$M-@h5xkMC^HI9Z;ib(Atmw0}O-*Li@X}{KhB~FI4eq}cau^YI3*G!J&Hd`N|LICT9{fzY4O!a*M=R! z%u~B*6`r4tf2i{M?hxe=!(kW}!3>t5o<-#lUm(#Xlh7K*HW3LGM1Rqx(NlA zk0>RdrbUP}B9BY58kb{t#)reubY&hhaDP%s?Q9y!!!q)@7qcMZvJ7Zo6P|cU>Ldz& z{c#@9AW7vMEKRsN+=5?Iv;=Qnn(dRreR)8)X&BTvVu{vsDs{`XE><4dDR|A(l)AbL zO|dV#F6|K_i;xb18>U{aAVo-wp03z_ygdv<%*B73RY(a>$pn6!jN=t85f`g-$bTz{ zI`Xk@H!122vydi{lmSDel2fQ!rf`|s)E;4GoTM<=8^})|ADgb)CJ7r^233hqjCkTD zJwrF`k?y@BK+=SglX%yqEhpW+xjjNGw@y?Edk4C`i*1p{mR4 zZL|MK(UL!s|LCEKZYB zZ^~GOhKWxPBx3?Of<3L2W`>bU;!ES$l1VQmM~V3zzR&%;Pu#g<0toOMfg_X60hvOW zAO~aVn5itd^B6j05b%d>B(i}{y)IDOI!i(G5ZGMCAM&1sU*ifd_9$}G^X#_1gB)7B-8q6@=U zD3-#BIYi+)FJV0zVI+pRW*jW0bb&L%u~NXtKpVHEc2a3PCtX5mg$piNhJBkq*1kqN zPwV88Sehv4Ma1ePWbOk*CJR1dlY~}W%Oj@D0*}}@odbRPh-ss`es>dAALc%`B{(hOb6}JEPtfZC7ma zz%G|1v6XOyHscb1et)E6gAr9UHL!B3@rgv8@#2M>vfdV-W9xEeVP(c!Ihe{>vvZ)u z3Q~k5=z$-+XQo1yk%}bGOj60aU09Xui{a1)WsFi=sYMD#cow?$5E_Tfk~)YK(u^hi zb{(a&;#=OW!YK4=HIvz)XD?PVX`62F#WNcvvmy%w2QqY$v47}1sfPjjQyQ~cUgpKSu@%hw*n7ASsg!0VSytVz~XJ<-QoYJYsTfu?dkY z?3sYbnSYOGy5pMT&_BUo`Z@kFXt5RAyG>%Cj`Zy7K+D9=? zIi(QYpTyA=QNfvb@0XL*0Um$fMbbb@Hwofsioo##%gKW2 zp#pJWuI|ea45YDOF|?fmjxXy3B~FstXr_o$MmXY)(clX1Z$U1)d3ZMecrZV^)j6e zTw%Dt!`mSC^gc4nw#XDD@CLCa_ft;aBNK?g?827X%Qu}_5J1)3MU*9_vcU`cDQwfi zc5QIjVo7Wx8Kc>`f@5w=VmH@(yiMk9x%pHTcyv0%WF)omm`GEWzR0`HeTaZk*|3HE z6c(qzUC}p(ZWFGRacUcX4bGD_-kk39@GY2ynM6W6iA0&=M-7TxLnFrkNzEeyo4K~s zHkJwAjIQWzKk|{t-wtR>GDZl~JV8l(09ZGNx=&Ul z4Wk4pmY|-f&e(1hrDWPU^SP#*jsG|Xh14V4XZd#TTdPw^W;l$0EG=ly^38@9maiD* zX&v}XVOfbHW~8>%PBPnUR0Cj8%orw2=prE$8~%>BvZ3`lRIwy>@n|#~m;WICIGu}O zaui=11A!ToQ4)=5Gq{NxRbW^Eb3ZA%MYTh4LdM#@cM_Hr*$zYEE^HsxU67s3G<;C zzKMy8RwQE**~Y#vw|p}En0HZSs#Ci-4LloNL`PyIbdlIPlZZ1Nqhxbz+xd;LN%-*? zr}c2y9vN*w9MOGE68orZT^Ve61s^1l$ck-waAa~=2kzsLF{u-u5t5xHqA87%x>+2} z2~DG_T%~k#*sB{2<0@Mxb(451mmk;xVt=oAOUcS_5huHZk6+wXP2cC;)7eMyoPHeJ zyb`|?w@8zTe@$ze8gnsz0F^A$A59p!ZsSLhsWSD+z!1;77eS=S#J^)}dQe05lqyr7 zObqhL;76b|nfP~P-4y{-K8%9@8AjW`<@H_THKQaM{bQKohJ@FWwk+`fhTUE1Z+|TO z_l*BHwzxmshKzWUjQ%l9_vKxe2bzUQlZk&#YlxXBk8r^*oFB(XjeB<4%-+DJr_KvV zNizD!Fm21$YsY`j_<-`lxo0lD-Zk8zkh}`pW%8f`R^J3&$Pgs!G0r5lF>h=>0{Xsh5xY< zX)^JzX)VtM`R!$@Onovi9?EVw(BRvKA(Q>rwnVRIGub< zG~`uf+3<{$i70G@^3x1BEM{})hh|^?1G3b1KNl6eBcDDBN;(d1IBE6sl zVcBrI0sv?LFki)w6Dm-cf%0w!EW}_uK1iIieX+S$elE}QZZ97k_`#;*Cx@+gG7$iu zMg%z5fLHwQ5WoC^cYbIte@GYNqR4)7P=uu6S;^xHM?&c0S(%_Q1%I?V42O>R`*Z=&9UF`EuMv?IW+V+5sHL_}U*E>cB!O7n=97DJ(Np@u+6G}G?qVMv*<4YON z5URcc%JR#h`7+xURk<&R>Fy~hToJ;{^I!DaSin#>1eG*2OoN=;h<^X=pF{KeZ~xL{ zR)t`*X{v^gx%ga094wueU5I@d$te^5Ml6ztSjrEG!a8@5if$=eiG&upysq}VS#Ed- z{FEKqEj5>?+W{SaJeqhe8uE?ZFt^PxhU13vJU41wW)4TwG@1@QF}IrCg~#jfaz zdQ)WNMFj!HESQ%@4rPw#w?#0-XE8ZapiF~`H7}@wycUPTWrW4-T~Niv!?50y(_`B3nV1|o`Q&2Fbl z35q$JhoJL+X+$UtPR=-#Dl@EN3X;8!qqJxpVC9U@lZWg8d6R1ee3;DN2Hh<3sY529 zFhF5|BJb<5vSkuw?I60mmPB)L)PXcRToEj0n=y7RXvE8jDWe++vl8DZCaU>O(^T8$ zu|AV6N`7IdBcqi_BfHx%lxi_DnTry7&zARyu-s994-1&b09wG$c3_u|qcqs~uY=s% z15F&x@>{r+4|U}4O33VmFcTvHX{&pZ^BJ6n_`sVZT{bGJ{ORj&l9&&Jyov|F$_W%D^Fcj=>URicf7!?VIS=ySF zg%U%|$z|mf!ja*n@rQ>@Y&&L$R<@yRTlTGEbnB!RFznFEro<%7ddzSIRX{&^WI@Wi zuH3?`+u5f()qn)BhFLsW!_f4Vz+yl5#4AbZ~%Pm$o0E8#od18&Pt z2Uzat;0?_O{d`y^7T2t~y)aB*Ux4ZRULBGIduH0N0PuzW!cSl94;3xt$yI;;da0V` zQwAf|UBP8k}M8h_rBsxt3*J8>O2@X5iUgv4M11BVeWCGgF?ajd|UvOo0q zLdvgyX>;CChF`OXKKu1A>g>y}Sk}M(1!G?P8WMN)e*M}MN0{uP*G_q`x)CiCl)$J7 zk&o#7ig{6&T@UY_qRqq(pvXSXpjEjhYUbYpE(2U9wgL&4Ch!XPJbzL^ARDmgO07Jn zBXN9~)NhJ(-3kbHE={0w7lmKhrl~4e91~0YumX&)V3xH{!#)3-*IVE0hIwT3u-Fkc zEtzBQOUTe*6!OX`<66mBi^PEp83#$QbBCgkh5b|yQ#YXz*)UG5V5hGUnLu0xN&TX? z{QC+{9QKe=cxguTSs+uL8U%_~g1i_(U(>gKHD(tIU&nQ!Q#p3*A|X5r@`3=&_+h)hI9;2QD}9hk(7?EiXlBiDWr#YTi8?N)J)++2|G-@K znCxyJ&LN3;b#;91wh&f@|5Alt=x+T0!UV_*4H&Dz?6i#pas%~e6l0v032B zpf2vZoHseALxB|O91+?9B95F2ymnB3#Y$C&(Wpggks{S3ssvd~>T zyyQO}C)jy<=NQEVYL{%D}iccIH znVZWzLB@W_JDOn}j(F2Z6bKogtqsUn8My343!Oc@Y#`BcIk*f)t6G4DDQP8));$$P ziagyXX7^>$!3M?CaS}Bm(}*_?s%WWYVHutCo_+M?V%cReAE(0$#rQJ2K?y6H1ofrJ zj`Rg;9ClZ|1RReQOQ}%)n?r|x%O==N<~~R%7q2AV&G-PkI;;kVa|sk@t^$-=3xb|U z^Lw(OHDWK%^MupkYy&rUumlqq;sL7hQcX6MQ zZr@0__wU|BQA^KL3%Qkl`DzLn#SShL7BZvh$^;5B($I=O^=-R=ltyX1gW=Yz37n4_ zT^d7LblJS+t=PQ?>Xsl;m_iYYpsyY9UP1i$pY4m@%!uo)!JDEaigV3ko7!&kf* ziXtodtgh)krD@>i;BvWOC7&;X^_yb&{kQ)bA^PZ{?%+|Gy9f<`F+($erw%RO8ZbV( zmXGkcD!6wuGDXJnIw$d6e@pq*p+bmHW199tzm@>$4s2Lk?Z4iiQag*ktUP z1i7(;OFi&^#((U8prbt776qKPc(5NE!2h$iBC*^MQWh`NM?3f~|9dnnrhR$-ivtS( z{3;p^llPPWIs!ZBzPY7MHt zmJDp!pBb34$AY2hwZQve;CYz8)y$81JtQ%ItC-RBTHt+uFz`Ig-=Af497gif8+)51 z;d@30W26v?aV;3$+Za5eemLWE>E=;+QE0jnXBZ$aiNMtW0yw zcQCQ%y>(Kf_>RFUG%t@kSUW)LYeIcJLA6Vu9x1xf%jDD%IT||NA&?7K-ob>00q+XP zB`{?S-KtuD3!4rkChX!@dK?q`3uTN?w&*=>Mu>sFVL#M7}pUK%LUc08BeT&go5@}^1t-#nk{~)e= z6P#LnUb(5lI^|E9@sogBAk$5hNz=?Q&CoPLB)JTKs~o3(gR0;(kubl~P+?wZS8&rD zd#GRc{oU8!{F?EZ@qM$X5+xj+VCf;4DMGz9X^=&bgcTZVD{2W&pYU3s(O6?q%YGVg zZK1nS-kYRaarW%7DDUnETw4;p{mzVQ<*Ox zqOC7~<);YFy*z+Nzu}si)wN=z3J(|TKDf9dlpdo>+P)pJ@sS`53R;W17knr3pKNS= z$Vg^4b_Xx`N(9@Vrf5!H;irK-xlH4^d0EBHXL8`eEmvbCC*!t&*rf|em9gf1F~f6G z^KYnZePay=^9&6J@PsxQX3TkUEmm)E;HYJPN$zpUSMRAHjxLBBAB$HT=7LZBnzpF% z*|>!vbkX+3;F1n*)Oj7_k$~Guz2n^2 zwaZT5HW9`v^)ZH$zW|3U@9qwCe}h+Gec0bR*80LC0FEg*Xe|3knRqn$)H_!rq z;&k|20dX-xt;H8PCWPX0T;{WGhj^d_z~Zt;4@nh)>zB<)_lOaP4`K8K9hHMk9iaYAno4EE5e3WFJGeEp>y5*NfIewK3K4Y zAh|XJ%7#BbSKitPT<@ysa}(~h0lA_B8aWnS;$`vx?PQ}(pVg4711_pKrE02w4(F^M z?;Chu-j~BtoodPn4p}%Hyqf{;rJW{Dqd55o+ftkTwlDBBsq{XwP^dWW2OCy|X?p0n z@({*J22*go=WP^71Df7|Jpg#M2)`$HlOfEdGS5Z zaATF1UX%vqRPq;vG`jtsW8?;ZMsVkn0ykMN;JXF-oD1K{(g;bZ`e3YkM+nj#M=gE9 z9U)5h8ZyG6(OuMH+8!?s7SVHj6kr@x4oB4`tkmbs1bc<>*ZP|zWtgdXl#pamSYC+p z$^ea*0ylB7e7ojQAJwD;5)(*oM!@lcMDGc1SYT)b4`TzagpN=qI!_6I2@fPfihlF| zXsXxneZ1E8(BDh3d;&cTj++UwLIoZRJ-M0K%6*_=C6Ma8 z#htM}QITh@H%XAhQF_J;z_D`N_wi+v*F#mHE? zq|ylI`g0UJAD*>U@i`NJFH|5<|@BDYyrfSX(LDF7SIMK|PSEyMdPuSiKkJAjge0SOZ%%piG{q$w(! z@b42$|0u*149E_D?b7T>Fos}Eg8gFUu*;LH%T;;X@p+g&7h(9(Yj*r&TQ!}0nTf;^ zs^x{9Hv)cqd_p_l17ARj17E3<<2Sn@&Y6KOu(d(!r72xnel*0W&);Z zsG7U}Xbk|8nShZR)G3wX2n_~EW&%cPcr0$0b8};e?iI}iGrl9(a2iP5Xa> z#91!SKQ(oKM$`C*s2BJf33j8wB? zLP6s2S3zD_nUbUqT@D%DmPae(NK7JKAnuC(O34WU6Fhk^1|t`M zM*IMQ`_|2wpnPUa2O-V3{4p7r$)@9wCj50!K|*%qX4}$@|wzBI(w+R_JRRx$hH;al?MHhpcfa9oFIZU?Oqx7jTXK?p$9CIsYi2mN> zUs?F=dBG#?jo$awJC(*E$do<8D*-s(*j2lh#=%RySEx2IR~F7R-IGJ2xek~>`|C$$ zU~+ae*P$8+-Ut-CvZ+{MvdAn^SP={`ld!#iZ`V(eOfY~F|3RTEA2Un!l_+uP) zWl`riW~@)mfxig~d}QvMimtKrd}g`*x5Y|0CId`7AH*@~bU$FiwycZJE?Bs_l~I^~ zwXgQX+1a%VXTcQBtw}Cm-WOHXMDHF4w8;fW1Qk2Ta;5UMCQ8++VvoSpNjypok!a}r z{gH}Qgc5|t1OEkf-a1stlr&X+xo?|JM;66Ra0CUvriZFHL7Pw%6z3Fo#F2tYip!9Q zwp4SI(`}@^@U6;4_<);7Ycx__7hA!CwoJnjsLDRIq|Mq|7 zkH7!+U&*;ZC*By2xP3Z-ZUx6U+?5HQs*D=RBg9(ckHCNjxv9cjZo<=~QZog7cmd5O zGTHbBJY7x}i2rs@f34}0GoxmEcpT+WJ0o%=WG0}#RYFUH- zw@u1B(gG<4PR0)!cV%N+ta-!drRWZ1e{)|}+pefjsGDP>s}ZKKS1#6M{d$ZNeHbbv zTaQTu&a;j0s5A%4Oa(i=7P^C*Ga zM&LlC$?o8|CoNBiAAdZ7KEQ`qB@E!jiij*wxXwiW%dG77ywI&P$xgfLppO@5c&qP-4bQuP?VV3eqd z2befz(AR+Lf#X{pgDAB*}~)yDrZCZf2ZN%9amc- z#7TSnbL!F^LC)1y5&Rh`V}IE40cRO^G1V@DLofkxo?X3vA@Je^)ES(=h^rqPd(DLX zd7WM0rzqa4=zAD7G`o!aJ7z5V()957;z>oIk$Nyw{TV_uu|$`hxuZw|_-t z0k#Rz?Ug!*N?nWJFMLE6f8fYBdfSpmQAI~)IE`Nix#O}h^EUW3)y6kVrB6K&ib|L} zA9Nb%>W#vBB|fCf;d$couv3UZr0g}~rR#u5(^$0NU}6gaf91dCjrBg?W<}i` z?(V-ig+w61N(BcOK*IPl!#NmnWN$+v((^TX)MNMMf*CQNbFnc84x7|-%YYl&g@#4%Yz>yjPuc- zQ6j4LK8Hzokw;vHf3|A?2qq!U5%3-T6{Fy`7?gnLZPB&GaNxy=UoX-FmQoH=fD8eD zg8vC|ؽ>y4#UxZyEOj^s^xiORp$KI@@hQ0p`+l-ie{ox^@f{)&}#lBf6fxHOf zsU(iX5NW01ZzO!2ton{O?*lqmmsjuqZK*JgrLOVAsRj!}e~dP{ru954U4E3qqU7Qk zLA)J9MyaSX`B{#omIC8`p-n$RqgnsA^kPG$U|wvaXq(0kG%#Av+|@r41uL|*ZEDC%uNZlh1D zQ$nMgY9;u>Mz}<|>e8WO0XI9%j?O<(LJ57M7NN92e?P<-VClssOLzYPSxd6q$sjSO zttbVnD(T&|h$eGP1@Wm69!dib%qP_=fFZVuQhX!Gz(Mmdn!6lsZJkywVrr!$ibWz1 zU45GmLv`YgMdNC*Gpc~#(YzR5#b+P;`{qFBmAe9#u`wjhU5TgC|9&WX*eNgJA^8&q zJJ~k4e}chFZS#qK2e;P4A!0w>$R!^nDEH6|-sxi8f?6mR3aqt*7DieaX<;Qi*cdov z+u&LYDxqH)Dak&rCwYRvKGQs1I`Z_3nWyC9OkO1j70H4n1E0K3R4`2BFm%$k-0cbs z=*s^q!O6&vvP`)7llc7LEcx$lSg#8=Y@4~3voG#EnC@@t!&DU&Gvn{-4-=m zJcAcD3`(d7q(?_cP>g>*d0CJKxE=>`X}FZv$`2&`UYNg53&@s-l{XK|N)3DlwH@!} zs^YE?vnp6f67f0Z4M_+@joo8PSKJ+{yo2S3Ck#(g^$nd2tjc{kNC=+UHoq;wx8=zS z7rY^9sZ2_h_uS=ePYA4yZv-Kg38@UE((y(il})8mB}|Isr$3-b7S)&U_5mn=PgOs% zn6ZTMY8A+1u%n@4o|8NV{=6w(GlXl#qy?OOLV0lRSIfgX@nn5F~LSTy?TvB=w|{wm``+by|T;!LNi0~p(&G!^a~ zq+ua5k_Mka8YYEFPtJriM#>m}2qPa+c*pSA4FCSy|0UqxfBUaVrqfG5WuZJ+Uh%8u zK1s{gDO{QsEmF)?ZAB{w_hdcqgrIwpFPB}@LBv%)Y*i8S#ADLn_7MJnv4)E+ye({H7cS)&#L;FXci|BX@ z7mu6WE<>+%d;|_pRM+0gxVP}sA z8UgePTn8N9coKftp-dw(^X~eUFEdMvkggiQ)_BXSuqr>{=6roEC14FRpc;iL5xnc#UZ1zu3=6{23H-}~qtzRrdQ6t3gU*A~urH zVGN7qH&`!tHgRAoE+g+&rLs{4oHEA?iXJbQNEaaZ%!vqqoc^Jy4!mdjx+l3C^i$0L z=`b=7Jbz`)N8wq%2S?JvyXF3y(-b^j@Q`OlLEPau~ z3C5F^JH~1{Nsd)!CUT=$bC@IqKwx3G4Gl~k7HFDPsuB2 z=9`F*bngoAt~BuRN$}^c-*hELW)vrP zjjna(1G^#T&4o1&Uc{kwZgX zuA)bO#Lf=2@MNGx20dY@1xocanMy9sJs-o+LaXU3k&k|0hts$^{B`@#o@DsU3E7O0 z5utIPm~p=BDpuU}!}WsUZtQjWaHi~$!sC@3b*wQY?u2I?Jz0o7@EB4XJpJg=AbK6x z`hAX@*Eo^FQ#*ar;mjy6Pk8(Q_oi{D8fSrjc*p~YV0Mz1+1ikU`_gkc=a)Y&&86HP zG5XZD0iQqz2C~#((2qqs4V3_xHy*9lH94Ky4SNLIyO?A_%IB;;;}L637n*V z%GQyRmgZGYl{<6}$E%{KcTESLG{MU>uI9-T$NY=?!=8`O&|shUP&X$m4ZR$IVxaX& zG3Xl`*DZw@_yWa{fe<6h>jc?KFVW~j-NE9BIpOV5qM|yh$Z`7u9-nff&;P*4L=U9l zz=CjqcGzr+Vv7^AU0zlvsb3WsS_Qk83;h8bf4IVJi#o3`))Rj*Y>Qoy^Vwxvbi6g; z3JWZ?{+MAv!K^F#HiwNPT&=>;Pi5cKCof;63Hngd#FQk4k|@L>6N+e64ntRgpm70P zb9g{d?w}Ooy{xacHp00V| ze`&$bM@jzji@Mn3nX=UvqO%xTZ*~`sZ2>7FKzQQ zLa7Sng-VU7yy*YX{jgHXKq=K?REb>b61hk(k@Tu6$L{ORb%HM64Mx0*)4W5 zHTKPn5E@U-UjYW|<%l&k18P85f50AgalB|X+!TN}V}ewDYUqcL1-?=H6BMl)z2W0a zuzCM%& zTnnMxzFe>QwA0*IVSt`XZC ze-r2zn)IC}U6uj!cj=%7b0W@4pC~5*8QG;@#%w}*X8}t9X7+EJ6RnG z5_wK|Lh{xpVOg&JfOcj!u3(EAjgP(y4)DJFCPL+Cy!2hv0Pnlt0PnkR>=}TY=6K~` z3vd2gIH@DM9QZ3fe-PSt&u=u;ilEk`-Uh!?c&jn~GIeljw#>mDXlzWhNSO*)hY@x# zCJHY;w|T8%{mCBlSk(#@-;fgZ!p4=Tw=ts9i$d3qFX;NjvEn5KZt|Ms>QYDcHmD*o zTeJ@t-EsIcK--f>m(hFs45ug&gA#H_H=DYnrHQzc@U?`zf0?nQ%H%)b1*7exE{+!K zU_{>+f>At%YtNg|BV2Tes!<=WSoFdQ@n*{5(kKjJ0!$Hg_J{tSwt>if1D=tBhZk>e zLfiNcac(N5uba_ayhH zTPz&6572ie`dY$g^6;(r$<-*XQf9nT+J)(B-EZCQ@oBt&o-hNas z=S|ZUCwzj)6$hMI02cL%C6?D9;`iVF3BSYTp}CNy*)x`upa{3%@%FIWWsF`%g$FyvHUNJ3*33aZniZE5bYZJxO2h8ze?P~9KZXZL)x1ARd;3{lZkqE!+w zQ^0E?e_D&bm+BqF!mNCMpG>a+W)k>jOte@pG$dXKE&A;^c}vG*D*|0L>l+*A;ta@v zG3@VP3UEDgPiJ+b&dJATCL~6W(zO@>(qe46{C>RJ^L=o&=lk$#&-dfip6{bpd%h2@ z_Iz($?fKz(zTN7}L~ugpvAE@!ci_x!tFHyYe{mT8O9sCLv+%?7a~G;~Yv=emJ9m+$ zs#iXqiY#hg7u2krQxyyWS7U-yeP9Q;Cn`~p1s|vs;W2%EbM?cHh>sdgU2$60c=oWm})C0DKuX+j=yhN6ANP+kD0TS!F$Ed_G3fF`$k?@-T ziZL*6c!E^TRdd(K4RWpjc;SF6cj$E{#`5jl5jof$I=pkjyM`!Fk~XyhgGr2+W6TH@ z&}BvkfU-$2(K7zCdK5JIfB~Q7)rwX-f6s(6<6n4JKfw61#`MI z$qMWi5Pq#p{zp|k^HK=|< zev`mIL(|=WOelB{HTXFm!~uX!Q$h63{El}4bzj;T-;WGdXaI4YWr$U7b^i1EG7295 zrdZQ(S4>Ul7LXd)(Dg_xFOZU9dJH}dG-CD^5-1SVAa!7u41Z#Nj1Q+#OZ$+fuS zvPL7X9Q>;i0h3IyjxoN`H_ECZadm#ZdVS6%iVr@Cp{$FQ)qS%CXB*2N6g*A|=3*7~ z3jc~^K6FR$qOo9o|L%WHEGIPY<)maSSpN!tB+)WnPsQd_+wdv$*>NJ6MjGki94pNc zrw-8<%RyrUD8xzK+(J&#N20L-6yn76L$Plmyy$}J#}#>Pk4y45^3M=CcCicdOWiZt zYM3w~Mo5NE z<@ecL)7;rl>-rS|0sAu}e7fue_&ACueApYrLxaD$-e}S)MWZX6z;4@zLax3~pvpK-sB+45l*l*Rs!`A$HEM9{- zQU@sZ&@b|yZJ6()8PMZYSGag8{vs%~o&N_(J=>d{i*#1yrl@<^T~MFKIB(?FVnI@+ zQa^Bv`cr>@w(IhJVOdpu1HX#BU7h5m`Y6n)c~{x~u!SDzuqQ``+p^yrddq&M0V_-y zH)Ui>KJpFIR|5U&{R;=Wkb(bqGSRR2g-Sob!#BGzI5JX6-l&hlyxHwaj4mZxil1L5 zSB{b>`CEx{VWLP1TnG{oexY=?+_-95baBr|BfNjh-xMB7Tv!reUZI2ybEeJTMzIJ< z?bC4IV33E#$xCS%rn#o{m;AFp81Bn%i$_~Qd7E!=_W{N}XTNfak8Rg{e)<*jj(_)k^=pQy$G~d@I46J=0;o|r zLl6-Ym5)99iV=b$5OGftp3vQj9{am8T>@ActneopSc!7nsYPECd=9~Dy=p9HU7UnD z?)#!E32x4``MCqvE&~4&Bhgr96CtAn86|)4aoi6BFHAaNEJwbUw^)c4V3;_#JcbcU zUf4NdpU7JGT}glGN`jr&Z2ij{M!k+cnT?2Jp)i3~yRV$|>WLf9 zN#!nVK=cE+``e-`Z#a3x?BOLq3BO6#PQXk9GX!RYD+KTi2m#kxz~1K^Bf`??2Al~Pu$Ml1oujxsa1;J5pWJ-6R4x}M z5iT|8`WO5vN`zdWn`H){=jVHH)U~}`s822&&PtRz3kiN1kb?cj^D9XG;wOKus9$@Y zEz~{MMg7(DEQ%Rte0?gRu)=?NVDBeb-nb3R*e1HLT}m_lz1ae*5~B|s+7?1$+;!#l zjK0g@vz3HQ*23f!PbPXk`T^}IQ3gMTnZ$RC8BI*dEE0zllzo3F&a$DXYW}9Kn-*43 zz?n54s__=n9=Z}joT&xDXG!`Hoe?-67`9A;v%F^#+_(mPNosCL&Ch>tuS04)IfJFB zylW0{v<|MoiLypX_Cc*P8wM2Kw-a;(m3{CM35D|2L;kUGsgJ)|YB=wyyiGio|HwOQ z0}$^eI#PS7*8v5Dc4;9XR(5E&7Wt;dGrpEZ2)~Rupn8+yDPFlo;UK3_td4uNer7V& zH)pR1O5L1wa@KqZ*dBjwt8#;RP9oK|jBJ0NfJxfVLs4%rA~?Q8XgA@Gw9$pI!d~6d z@X|1pE2C)5r1dL-wx++m%=|5O_$)WS5_!>9!oj*1M-r(bI0ycC+*U=;yXV2Nv=Zc= zVvvTL@wZ+r`+T!7_uNwD{VLx?N!Ww@yoD(bDYiS-G6AZDm z_OlJytA&DsV9QNZK*2l6k^*mFd-t++1-I(Z6<(i6H!^)^{NW`$uCk}rDV0p#p!sz5 zuF2}zZO9-sd4A>-;=6{S`3H&js>yzatBziB-k~;+{lX_pSgWV&gFuUU!X)!?1uqp$ zQKS-kMcj3HTReZ1HG1+dUQ15tMYU~Qh3S|9s9`+B+- z+<${{=(4)p6x9=d&UqQ#+ZTFl846b)lhd2x@$(9`Upj zI~z;1#?eVA`tAsYqcd3o&FtSq;%Ien&kMrYh{=tdv+%Eu*BWHU8)63gg=SC9hkV!J z%{hTCHqdR}I+OAtSKsi`9{s??#`|7w7zfy+^C5;BMcW@C7(f_-z)%AZv&p{L=rXx} z-jKTn7ESVpBDar!=`KeG=VTxnqp(`hzg~u2S>xd;N6tJfXeqMuQlog;RC6f0{o!*W zp{j2(mX&*hf5y-nFOFr@#=F3LfsJ=gf)aS^6W=aZp^;4?up>?1dbPA&fx~_{Ih$JR zW7})R9-qk{A zQ(6_nR}d6&(>=9AoT3Vb?$Y8-F`(O{3;Nqi!N=)%aUE`EL{bP7yg7%r-xYw3f&OqW zV9g0k^NfBTodX-g;~*av{v%rq9it?Jx7yf--4%C#;CiDQ`Ia6nxo^vkKW|O<6vu4< z>b3vTDz^rFXCuF`lH0Xc#RJ4cf@3ve!ixn8=Qz8)b06L&nvn2NAkEll)73=2*O5UyhZS`DK^)9a}NzG@8Mcc!ZUBYS@6m$ zJ_!Uw2D@XqeCpS6q#nJ!JqANSSg&F%tS2y5s=kUu=Lvb;+Azc>WE6}@OFM-&utTq| zL_>-3nJ}N&^WsddCj`<}B!NbCm)Q~mJPIB_{%3d?r=X07mmd=X7(1Voi>tq|Y{jd8 z=X#HbLAsg_bEFrDr0>QP9FuTN!JTWamE>B9AA>^0{cF`mX{UETb3qs-Q`~q~50`Qi z0xN$n*I((Uj2r#xTj&dFSIBTK32!yx&x`}B1-}<_eoa4F0CeZV?LsL^s?C+s2fPXt zB9@CEYBBG=!_eI#59w0mf{0qLB0#~X7Dz6vd_lQXrZwD}F74SQpDu8G z&x;3-P~U}_gX(E7Tb3jD#qvsVEg^If4(`txme%){@cIgN&qqL zKb6B1`QDYWr2BiEoY_>Zg@NH&SB9nT?{RuZu5>3*Q@U;0V+>K_346XRZVz{Nm&_Cb zIVhvj)2wupcM(bmhK*q8sq9677=U>lLpD|Tspju3tmCS=i>N9{PYstX6#{7i@t2ns z0yBSRE_7{+U4E#BEP_=)yyOYA=Y4gVo^aS$%Z;(B^+GT?^ualQ;dp*Dv$ad%sim9x z*#y^|+}iQ)8b~G%hei^hjXY5L$^fuam}jE0|CY&dQ6!mZ&7|$671B$O$7v4z08VVg zqGF$@0gve*gj&Pw%|-7iyj_ou(gPhFII4dwcSWoc9f=3}OK^e<#yTF4fPBNh9kJs9 zMI3yci7O)IKML?vS3Ft*znJ{LC`(xu(i}YG6_4b@{L%*MR$$a#0
              1. EvMenu