From 0f195f7c856dda045eab38ad080c46ba221ebaeb Mon Sep 17 00:00:00 2001 From: Tim Goode <68455040+telimektar3@users.noreply.github.com> Date: Thu, 3 Feb 2022 11:08:10 -0500 Subject: [PATCH 001/177] Made simple grammar and spelling changes. --- docs/README.md | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/docs/README.md b/docs/README.md index 2a9b3e6a01..bafd3def40 100644 --- a/docs/README.md +++ b/docs/README.md @@ -10,7 +10,7 @@ The live documentation is (will in the future be) available at `https://evennia. # Editing the docs The documentation source files are `*.md` (Markdown) files found in `evennia/docs/source/`. -Markdown files are simple text files that can be edited with a normal text editor. They primaroly use +Markdown files are simple text files that can be edited with a normal text editor. They primarily use the [Markdown][commonmark] syntax. See [the syntax section below](#Editing-syntax) for more help. Don't edit the files in `source/api/`. These are auto-generated and your changes @@ -18,7 +18,7 @@ will be lost. ## Contributing -Contributing to the docs is is like [contributing to the rest of Evennia][contributing]: +Contributing to the docs is like [contributing to the rest of Evennia][contributing]: Check out the branch of Evennia you want to edit the documentation for. Create your own work-branch, make your changes to files in `evennia/docs/source/` and make a PR for it! @@ -66,7 +66,7 @@ All is done in your terminal/console. The full documentation includes both the doc pages and the API documentation generated from the Evennia source. For this you must install Evennia and initialize a new game with a default database (you don't need to have it -running) +running). - Follow the normal [Evennia Getting-Started instructions][getting-started] to install Evennia. Use a virtualenv. @@ -79,7 +79,7 @@ repo with ``` - Then `cd` into it and create a new, empty database. You don't need to start the game - or do any further changes. + or make any further changes. ``` evennia migrate @@ -104,7 +104,7 @@ repo with pip install -r requirements.txt ``` -- Finally, build the full documentation, including the auto-docs: +- Finally, build the full documentation including the auto-docs: ``` make local @@ -274,7 +274,7 @@ The Evennia documentation supports some special reference shortcuts in links: This will generate a link to https://github.com/evennia/evennia/issues/new/choose. - > For some reason these particular shortcuts gives a warning during documentation compilation. This + > For some reason these particular shortcuts give a warning during documentation compilation. This warning > can be ignored. ## Verbatim text @@ -304,7 +304,7 @@ Everything within these backticks will be verbatim. ## Code blocks -A special case is code examples - we want them to get code-highlighting for readability. This is done by using +Code examples are a special case - we want them to get code-highlighting for readability. This is done by using the triple-backticks and specify which language we use: ```` @@ -318,10 +318,9 @@ def a_python_func(x): ## ReST blocks -Markdown is easy to read and use. But while it does most of what we need, there are some things it's -not quite as expressive as it needs to be. For this we need to fall back to the [ReST][ReST] markup -language which the documentation system uses under the hood. This is done by specifying `eval_rst` as -the name of the `language` of a literal block: +Markdown is easy to read and use, but it isn't as expressive as it needs to be for some things. For this we +need to fall back to the [ReST][ReST] markup language which the documentation system uses under the hood. This is +done by specifying `eval_rst` as the name of the `language` of a literal block: ```` ```eval_rst From d4366ce753fe2a1c019478a9b5450a3c6099a000 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Wed, 2 Mar 2022 13:20:58 -0500 Subject: [PATCH 002/177] Add tests to cover all 3 cases of CmdHome --- evennia/commands/default/tests.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index c7a57c6ba9..aa0cbf1f23 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -184,6 +184,14 @@ class TestGeneral(CommandTest): def test_home(self): self.call(general.CmdHome(), "", "You are already home") + def test_go_home(self): + self.call(building.CmdTeleport(), "/quiet Room2") + self.call(general.CmdHome(), "", "There's no place like home") + + def test_no_home(self): + self.char1.home = None + self.call(general.CmdHome(), "", "You have no home") + def test_inventory(self): self.call(general.CmdInventory(), "", "You are not carrying anything.") From b636e0b68d14b9fb7421d8e828a7004b95e2c87b Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 16 Mar 2022 00:12:21 +0100 Subject: [PATCH 003/177] First layout of evadventure --- .../contrib/tutorials/evadventure/README.md | 30 ++ .../contrib/tutorials/evadventure/__init__.py | 0 .../tutorials/evadventure/characters.py | 0 .../contrib/tutorials/evadventure/combat.py | 0 .../contrib/tutorials/evadventure/commands.py | 0 .../contrib/tutorials/evadventure/objects.py | 0 .../tutorials/evadventure/random_tables.py | 354 ++++++++++++++++++ .../contrib/tutorials/evadventure/rooms.py | 0 .../contrib/tutorials/evadventure/rules.py | 259 +++++++++++++ .../contrib/tutorials/evadventure/utils.py | 47 +++ .../tutorials/evadventure/world_batchfile.py | 0 11 files changed, 690 insertions(+) create mode 100644 evennia/contrib/tutorials/evadventure/README.md create mode 100644 evennia/contrib/tutorials/evadventure/__init__.py create mode 100644 evennia/contrib/tutorials/evadventure/characters.py create mode 100644 evennia/contrib/tutorials/evadventure/combat.py create mode 100644 evennia/contrib/tutorials/evadventure/commands.py create mode 100644 evennia/contrib/tutorials/evadventure/objects.py create mode 100644 evennia/contrib/tutorials/evadventure/random_tables.py create mode 100644 evennia/contrib/tutorials/evadventure/rooms.py create mode 100644 evennia/contrib/tutorials/evadventure/rules.py create mode 100644 evennia/contrib/tutorials/evadventure/utils.py create mode 100644 evennia/contrib/tutorials/evadventure/world_batchfile.py diff --git a/evennia/contrib/tutorials/evadventure/README.md b/evennia/contrib/tutorials/evadventure/README.md new file mode 100644 index 0000000000..6e308c37d6 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/README.md @@ -0,0 +1,30 @@ +# EvAdventure + +Contrib by Griatch 2022 + +A complete example MUD using Evennia. This is the final result of what is +implemented if you follow the Getting-Started tutorial. It's recommended +that you follow the tutorial step by step and write your own code. But if +you prefer you can also pick apart or use this as a starting point for your +own game. + +## Features + +- Uses a MUD-version of the [Knave](https://rpggeek.com/rpg/50827/knave) old-school + fantasy ruleset by Ben Milton (classless and overall compatible with early + edition D&D), released under the Creative Commons Attribution (all uses, + including commercial are allowed + as long as attribution is given). +- Character creation using an editable character sheet +- Weapons, effects, healing and resting +- Two alternative combat systems (turn-based and twitch based) +- Magic (three spells) +- NPC/mobs with simple AI. +- Simple Quest system. +- Small game world. +- Coded using best Evennia practices, with unit tests. + + +## Installation + +TODO diff --git a/evennia/contrib/tutorials/evadventure/__init__.py b/evennia/contrib/tutorials/evadventure/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/contrib/tutorials/evadventure/combat.py b/evennia/contrib/tutorials/evadventure/combat.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/contrib/tutorials/evadventure/commands.py b/evennia/contrib/tutorials/evadventure/commands.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/contrib/tutorials/evadventure/random_tables.py b/evennia/contrib/tutorials/evadventure/random_tables.py new file mode 100644 index 0000000000..19604ec922 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/random_tables.py @@ -0,0 +1,354 @@ +""" +Random tables - adopted from _Knave_. + +""" + +# Character generation tables + +character_generation = { + "physique": [ + "athletic", + "brawny", + "corpulent", + "delicate", + "gaunt", + "hulking", + "lanky", + "ripped", + "rugged", + "scrawny", + "short", + "sinewy", + "slender", + "flabby", + "statuesque", + "stout", + "tiny", + "towering", + "willowy", + "wiry", + ], + "face": [ + "bloated", + "blunt", + "bony", + "chiseled", + "delicate", + "elongated", + "patrician", + "pinched", + "hawkish", + "broken", + "impish", + "narrow", + "ratlike", + "round", + "sunken", + "sharp", + "soft", + "square", + "wide", + "wolfish", + ], + "skin": [ + "battle scar", + "birthmark", + "burn scar", + "dark", + "makeup", + "oily", + "pale", + "perfect", + "pierced", + "pockmarked", + "reeking", + "tattooed", + "rosy", + "rough", + "sallow", + "sunburned", + "tanned", + "war paint", + "weathered", + "whip scar", + ], + "hair": [ + "bald", + "braided", + "bristly", + "cropped", + "curly", + "disheveled", + "dreadlocks", + "filthy", + "frizzy", + "greased", + "limp", + "long", + "luxurious", + "mohawk", + "oily", + "ponytail", + "silky", + "topknot", + "wavy", + "wispy", + ], + "clothing": [ + "antique", + "bloody", + "ceremonial", + "decorated", + "eccentric", + "elegant", + "fashionable", + "filthy", + "flamboyant", + "stained", + "foreign", + "frayed", + "frumpy", + "livery", + "oversized", + "patched", + "perfumed", + "rancid", + "torn", + "undersized", + ], + "virtue": [ + "ambitious", + "cautious", + "courageous", + "courteous", + "curious", + "disciplined", + "focused", + "generous", + "gregarious", + "honest", + "honorable", + "humble", + "idealistic", + "just", + "loyal", + "merciful", + "righteous", + "serene", + "stoic", + "tolerant", + ], + "vice": [ + "aggressive", + "arrogant", + "bitter", + "cowardly", + "cruel", + "deceitful", + "flippant", + "gluttonous", + "greedy", + "irascible", + "lazy", + "nervous", + "prejudiced", + "reckless", + "rude", + "suspicious", + "vain", + "vengeful", + "wasteful", + "whiny", + ], + "speech": [ + "blunt", + "booming", + "breathy", + "cryptic", + "drawling", + "droning", + "flowery", + "formal", + "gravelly", + "hoarse", + "mumbling", + "precise", + "quaint", + "rambling", + "rapid-fire", + "dialect", + "slow", + "squeaky", + "stuttering", + "whispery", + ], + "background": [ + "alchemist", + "beggar", + "butcher", + "burglar", + "charlatan", + "cleric", + "cook", + "cultist", + "gambler", + "herbalist", + "magician", + "mariner", + "mercenary", + "merchant", + "outlaw", + "performer", + "pickpocket", + "smuggler", + "student", + "tracker", + ], + "mifortuntes": [ + "abandoned", + "addicted", + "blackmailed", + "condemned", + "cursed", + "defrauded", + "demoted", + "discredited", + "disowned", + "exiled", + "framed", + "haunted", + "kidnapped", + "mutilated", + "poor", + "pursued", + "rejected", + "replaced", + "robbed", + "suspected", + ], + "alignment": [ + ('1-5', "law"), + ('6-15', "neutrality"), + ('16-20', "chaos"), + ], + "armor": [ + ('1-3', "no armor"), + ('4-14', "gambeson"), + ('15-19', "brigandine"), + ('20', "chain"), + ], + "helmets and shields": [ + ('1-13', "no helmet"), + ('14-16', "helmet"), + ('17-19', "shield"), + ('20', "helmet and shield"), + ], + "starting weapon": [ # note: these are all d6 dmg weapons + ('1-7', "dagger", + '8-13', "club", + '14-20', "staff"), + ], + "dungeoning gear": [ + "rope, 50ft", + "pulleys", + "candles, 5", + "chain, 10ft", + "chalk, 10", + "crowbar", + "tinderbox", + "grap. hook", + "hammer", + "waterskin", + "lantern", + "lamp oil", + "padlock", + "manacles", + "mirror", + "pole, 10ft", + "sack", + "tent", + "spikes, 5", + "torches, 5", + ], + "general gear 1": [ + "air bladder", + "bear trap", + "shovel", + "bellows", + "grease", + "saw", + "bucket", + "caltrops", + "chisel", + "drill", + "fish. rod", + "marbles", + "glue", + "pick", + "hourglass", + "net", + "tongs", + "lockpicks", + "metal file", + "nails", + ], + "general gear 2": [ + "incense", + "sponge", + "lens", + "perfume", + "horn", + "bottle", + "soap", + "spyglass", + "tar pot", + "twine", + "fake jewels", + "blank book", + "card deck", + "dice set", + "cook pots", + "face paint", + "whistle", + "instrument", + "quill & ink", + "small bell", + ], + "name": [ + "Abbo", "Adelaide", "Ellis", "Eleanor", "Lief", "Luanda", "Ablerus", "Agatha", + "Eneto", "Elizabeth", "Luke", "Lyra", "Acot", "Aleida", "Enio", "Elspeth", "Martin", + "Mabel", "Alexander", "Alexia", "Eral", "Emeline", "Merrick", "Maerwynn", "Almanzor", + "Alianor", "Erasmus", "Emma", "Mortimer", "Malkyn", "Althalos", "Aline", "Eustace", + "Emmony", "Ogden", "Margaret", "Ancelot", "Alma", "Everard", "Enna", "Oliver", "Margery", + "Asher", "Alys", "Faustus", "Enndolynn", "Orion", "Maria", "Aster", "Amabel", "Favian", + "Eve", "Oswald", "Marion", "Balan", "Amice", "Fendrel", "Evita", "Pelagon", "Matilda", + "Balthazar", "Anastas", "Finn", "Felice", "Pello", "Millicent", "Barat", "Angmar", + "Florian", "Fern", "Peyton", "Mirabelle", "Bartholomew", "Annabel", "Francis", "Floria", + "Philip", "Muriel", "Basil", "Arabella", "Frederick", "Fredegonde", "Poeas", "Nabarne", + "Benedict", "Ariana", "Gaidon", "Gillian", "Quinn", "Nell", "Berinon", "Ayleth", "Gavin", + "Gloriana", "Ralph", "Nesea", "Bertram", "Barberry", "Geoffrey", "Godeleva", "Randolph", + "Niree", "Beves", "Barsaba", "Gerard", "Godiva", "Reginald", "Odette", "Bilmer", + "Basilia", "Gervase", "Gunnilda", "Reynold", "Odila", "Blanko", "Beatrix", "Gilbert", + "Gussalen", "Richard", "Oria", "Bodo", "Benevolence", "Giles", "Gwendolynn", "Robert", + "Osanna", "Borin", "Bess", "Godfrey", "Hawise", "Robin", "Ostrythe", "Bryce", "Brangian", + "Gregory", "Helena", "Roger", "Ottilia", "Carac", "Brigida", "Gringoire", "Helewise", + "Ronald", "Panope", "Caspar", "Brunhild", "Gunthar", "Hester", "Rowan", "Paternain", + "Cassius", "Camilla", "Guy", "Hildegard", "Rulf", "Pechel", "Cedric", "Canace", "Gyras", + "Idony", "Sabin", "Pepper", "Cephalos", "Cecily", "Hadrian", "Isabella", "Sevrin", + "Petronilla", "Chadwick", "Cedany", "Hedelf", "Iseult", "Silas", "Phrowenia", "Charillos", + "Christina", "Hewelin", "Isolde", "Simon", "Poppy", "Charles", "Claramunda", "Hilderith", + "Jacquelyn", "Solomon", "Quenell", "Chermon", "Clarice", "Humbert", "Jasmine", "Stephen", + "Raisa", "Clement", "Clover", "Hyllus", "Jessamine", "Terrowin", "Reyna", "Clifton", + "Collette", "Ianto", "Josselyn", "Thomas", "Rixende", "Clovis", "Constance", "Ibykos", + "Juliana", "Tristan", "Rosamund", "Cyon", "Damaris", "Inigo", "Karitate", "Tybalt", + "Rose", "Dain", "Daphne", "Itylus", "Katelyn", "Ulric", "Ryia", "Dalmas", "Demona", + "James", "Katja", "Walter", "Sarah", "Danor", "Dimia", "Jasper", "Katrina", "Wander", + "Seraphina", "Destrian", "Dione", "Jiles", "Kaylein", "Warin", "Thea", "Domeka", + "Dorothea", "Joffridus", "Kinna", "Waverly", "Trillby", "Donald", "Douce", "Jordan", + "Krea", "Willahelm", "Wendel", "Doran", "Duraina", "Joris", "Kypris", "William", + "Wilberga", "Dumphey", "Dyota", "Josef", "Landerra", "Wimarc", "Winifred", "Eadmund", + "Eberhild", "Laurence", "Larraza", "Wystan", "Wofled", "Eckardus", "Edelot", "Leofrick", + "Linet", "Xalvador", "Wymarc", "Edward", "Edyva", "Letholdus", "Loreena", "Zane", "Ysmay", + ], +} + diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py new file mode 100644 index 0000000000..b8fc1e8816 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -0,0 +1,259 @@ +""" +MUD ruleset based on the _Knave_ OSR tabletop RPG by Ben Milton (modified for MUD use). + +The rules are divided into three parts: + +- Character generation - these are rules only used when creating a character. +- Improvement - these are rules used with experience to improve the character + over time. +- Actions - all in-game interactions (making use of the character's abilities) + are defined as discreet _actions_ in the game. An action is the smallest rule + unit to accomplish something with rule support. While in a tabletop game you + have a human game master to arbitrate, the computer requires exactness. While + free-form roleplay is also possible, only the actions defined here will have a + coded support. + +""" +from dataclasses import dataclass +from .utils import roll +from .random_tables import character_generation as chargen_table + + +# Basic rolls + +def saving_throw(bonus, advantage=False, disadvantage=False): + """ + To save, roll d20 + relevant Attrribute bonus > 15 (always 15). + + Args: + advantage (bool): Roll 2d20 and use the bigger number. + disadvantage (bool): Roll 2d20 and use the smaller number. + + Returns: + bool: If the save was passed or not. + + Notes: + Advantage and disadvantage cancel each other out. + + Example: + Trying to overcome the effects of poison, roll d20 + Constitution-bonus above 15. + + """ + if not (advantage or disadvantage) or (advantage and disadvantage): + # normal roll + dice_roll = roll("1d20") + elif advantage: + dice_roll = max(roll("1d20"), roll("1d20")) + else: + dice_roll = min(roll("1d20"), roll("1d20")) + return (dice_roll + bonus) > 15 + + +def roll_attribute_bonus(): + """ + For the MUD version, we use a flat bonus and let the user redistribute it. This + function (unused by default) implements the original Knave random generator for + the Attribute bonus, if you prefer producing more 'unbalanced' characters. + + The Attribute bonus is generated by rolling the lowest value of 3d6. + + Returns: + int: The randomly generated Attribute bonus. + + """ + return min(roll("1d6"), roll("1d6"), roll("1d6")) + + +def roll_random_table(dieroll, table, table_choices): + """ + Make a roll on a random table. + + Args: + dieroll (str): The dice to roll, like 1d6, 1d20, 3d6 etc). + table_choices (iterable): If a list of single elements, the die roll + should fully encompass the table, like a 1d20 roll for a table + with 20 elements. If each element is a tuple, the first element + of the tuple is assumed to be a string 'X-Y' indicating the + range of values that should match the roll. + + Returns: + Any: The result of the random roll. + + Example: + `roll table_choices = [('1-5', "Blue"), ('6-9': "Red"), ('10', "Purple")]` + + Notes: + If the roll is outside of the listing, the closest edge value is used. + + """ + roll_result = roll(dieroll) + + if isinstance(table_choices[0], (tuple, list)): + # tuple with range conditional, like ('1-5', "Blue") or ('10', "Purple") + max_range = -1 + min_range = 10**6 + for (valrange, choice) in table_choices: + + minval, *maxval = valrange.split('-', 1) + minval = abs(int(minval)) + maxval = abs(int(maxval[0]) if maxval else minval) + + # we store the largest/smallest values so far in case we need to use them + max_range = max(max_range, maxval) + min_range = min(min_range, minval) + + if minval <= roll_result <= maxval: + return choice + + # if we have no result, we are outside of the range, we pick the edge values. It is also + # possible the range contains 'gaps', but that'd be an error in the random table itself. + if roll_result > max_range: + return max_range + else: + return min_range + else: + # regular list - one line per value. + roll_result = max(1, min(len(table_choices), roll_result)) + return table_choices[roll_result - 1] + + +# character generation + +@dataclass +class CharAttribute: + """ + A character Attribute, like strength or wisdom, has a _bonus_, used + to improve the result of doing a related action. It also has a _defense_ value + which is always 10 points higher than the bonus. For example, to attack + someone, you'd have to roll d20 + `strength bonus` to beat the `strength defense` + of the enemy. + + """ + bonus: str = 0 + + @property + def defense(self): + return bonus + 10 + + +class CharacterGeneration: + """ + This collects all the rules for generating a new character. An instance of this class can be + used to track all the stats during generation and will be used to apply all the data to the + character at the end. This class instance can also be saved temporarily to make sure a user + is not losing their half-created character. + + Note: + Unlike standard Knave, characters will come out more similar here. This is because in + a table top game it's fun to roll randomly and have to live with a crappy roll - but + online players can (and usually will) just disconnect and reroll until they get values + they are happy with. + + So, in standard Knave, the character's attribute bonus is rolled randomly and will give a + value 1-6; and there is no guarantee for 'equal' starting characters. Instead we + homogenize the results to a flat +2 bonus and let people redistribute the + points afterwards. This also allows us to show off some more advanced concepts in the + chargen menu, but you can also easily make it random like in base Knave by using the + (currently unused, but included) `roll_attribute_bonus` function above to get the bonus + instead of the flat +2. + + In the same way, Knave uses a d8 roll to get the initial hit points. Instead we use a + flat max of 8 HP to start, in order to give players a little more survivability. + + We *will* roll random start equipment though. Contrary to standard Knave, we'll also + randomly assign the starting weapon among a small selection of equal-dmg weapons (since + there is no GM to adjudicate a different choice). + + """ + def __init__(self): + """ + Initialize starting values + + """ + # name will likely be modified later + self.name = roll_random_table('1d282', chargen_table['name']) + + # base attribute bonuses + self.strength = CharAttribute(bonus=2) + self.dexterity = CharAttribute(bonus=2) + self.constitution = CharAttribute(bonus=2) + self.intelligence = CharAttribute(bonus=2) + self.wisdom = CharAttribute(bonus=2) + self.charisma = CharAttribute(bonus=2) + + self.armor = CharAttribute(bonus=1) # un-armored default + + # physical attributes (only for rp purposes) + self.physique = roll_random_table('1d20', chargen_table['physique']) + self.face = roll_random_table(chargen_table['1d20', 'face']) + self.skin = roll_random_table(chargen_table['1d20', 'skin']) + self.hair = roll_random_table(chargen_table['1d20', 'hair']) + self.clothing = roll_random_table(chargen_table['1d20', 'clothing']) + self.virtue = roll_random_table(chargen_table['1d20', 'virtue']) + self.vice = roll_random_table(chargen_table['1d20', 'vice']) + self.background = roll_random_table(chargen_table['1d20', 'background']) + self.misfortune = roll_random_table(chargen_table['1d20', 'misfortune']) + self.alignment = roll_random_table(chargen_table['1d20', 'alignment']) + + # same for all + self.exploration_speed = 120 + self.combat_speed = 40 + self.hp = 0 + self.xp = 0 + self.level = 1 + + # random equipment + self.armor = roll_random_table('1d20', chargen_table['armor']) + + _helmet_and_shield = roll_random_table('1d20', chargen_table["helmets and shields"]) + self.helmet = "helmet" if "helmet" in _helmet_and_shield else "none" + self.shield = "shield" if "shield" in _helmet_and_shield else "none" + + self.weapon = roll_random_table(chargen_table['1d20', "starting_weapon"]) + + self.equipment = [ + "ration", + "ration", + roll_random_table(chargen_table['1d20', "dungeoning gear"]), + roll_random_table(chargen_table['1d20', "dungeoning gear"]), + roll_random_table(chargen_table['1d20', "general gear 1"]), + roll_random_table(chargen_table['1d20', "general gear 2"]), + ] + + def adjust_attribute(self, source_attribute, target_attribute, value): + """ + Redistribute bonus from one attribute to another. The resulting values + must not be lower than +1 and not above +6. + + Args: + source_attribute (str): The name of the attribute to deduct bonus from, like 'strength' + target_attribute (str): The attribute to give the bonus to, like 'dexterity'. + value (int): How much to change. This is always 1 for the current chargen. + + Raises: + ValueError: On input error, using invalid values etc. + + Notes: + We assume the strings are provided by the chargen, so we don't do + much input validation here, we do make sure we don't overcharge ourselves though. + + """ + # we use getattr() to fetch the CharaAttribute of e.g. the .strength property etc + source_current_bonus = getattr(self, source_attribute).bonus + target_current_bonus = getattr(self, target_attribute).bonus + + if source_current_val - value < 1: + raise ValueError(f"You can't reduce the {source_attribute} bonus below +1.") + if target_current_val + value > 6: + raise ValueError(f"You can't increase the {target_attribute} bonus above +6.") + + # all is good, apply the change. + setattr(self, source_attribute, CharAttribute(bonus=source_current_val - value)) + setattr(self, target_attribute, CharAttribute(bonus=source_current_val + value)) + + def apply(self, character): + """ + Once the chargen is complete, call this to transfer all the data to the character + permanently. + + """ diff --git a/evennia/contrib/tutorials/evadventure/utils.py b/evennia/contrib/tutorials/evadventure/utils.py new file mode 100644 index 0000000000..13e145d108 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/utils.py @@ -0,0 +1,47 @@ +""" +Various utilities. + +""" +from random import randint + + +def roll(roll_string, max_number=10): + """ + NOTE: In evennia/contribs/rpg/dice/ is a more powerful dice roller with + more features, such as modifiers, secret rolls etc. This is much simpler and only + gets a simple sum of normal rpg-dice. + + Args: + roll_string (str): A roll using standard rpg syntax, d, like + 1d6, 2d10 etc. Max die-size is 1000. + max_number (int): The max number of dice to roll. Defaults to 10, which is usually + more than enough. + + Returns: + int: The rolled result - sum of all dice rolled. + + Raises: + TypeError: If roll_string is not on the right format or otherwise doesn't validate. + + Notes: + Since we may see user input to this function, we make sure to validate the inputs (we + wouldn't bother much with that if it was just for developer use). + + """ + max_diesize = 1000 + roll_string = roll_string.lower() + if 'd' not in roll_string: + raise TypeError(f"Dice roll '{roll_string}' was not recognized. Must be `d`.") + number, diesize = roll_string.split('d', 1) + try: + number = int(number) + diesize = int(diesize) + except Exception: + raise TypeError(f"The number and dice-size of '{roll_string}' must be numerical.") + if 0 < number > max_number: + raise TypeError(f"Invalid number of dice rolled (must be between 1 and {max_number})") + if 0 < diesize > max_diesize: + raise TypeError(f"Invalid die-size used (must be between 1 and {max_diesize} sides)") + + # At this point we know we have valid input - roll and all dice together + return sum(randint(1, diesize) for _ in range(number)) diff --git a/evennia/contrib/tutorials/evadventure/world_batchfile.py b/evennia/contrib/tutorials/evadventure/world_batchfile.py new file mode 100644 index 0000000000..e69de29bb2 From 0c81b836b6e65fdc52902b443f77a26f43036b3e Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 21 Mar 2022 15:35:07 +0100 Subject: [PATCH 004/177] Continue with evadventure implementation --- CHANGELOG.md | 4 + .../tutorials/evadventure/characters.py | 423 ++++++++++++ .../tutorials/evadventure/combat_turnbased.py | 127 ++++ .../{combat.py => combat_twitch.py} | 0 .../contrib/tutorials/evadventure/objects.py | 60 ++ .../tutorials/evadventure/random_tables.py | 14 + .../contrib/tutorials/evadventure/rules.py | 606 ++++++++++++++---- .../contrib/tutorials/evadventure/tests.py | 26 + .../contrib/tutorials/evadventure/utils.py | 41 -- evennia/objects/objects.py | 86 ++- evennia/utils/evform.py | 2 +- evennia/utils/funcparser.py | 67 +- evennia/utils/tests/test_funcparser.py | 7 + evennia/utils/utils.py | 23 + 14 files changed, 1296 insertions(+), 190 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/combat_turnbased.py rename evennia/contrib/tutorials/evadventure/{combat.py => combat_twitch.py} (100%) create mode 100644 evennia/contrib/tutorials/evadventure/tests.py diff --git a/CHANGELOG.md b/CHANGELOG.md index 6268fa57ec..314c4be37e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -160,6 +160,10 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 - Attribute storage support defaultdics (Hendher) - Add ObjectParent mixin to default game folder template as an easy, ready-made way to override features on all ObjectDB-inheriting objects easily. +- New `at_pre_object_receive(obj, source_location)` method on Objects. Called on + destination, mimicking behavior of `at_pre_move` hook - returning False will abort move. +- New `at_pre_object_leave(obj, destination)` method on Objects. Called on + source location, mimicking behavior of `at_pre_move` hook - returning False will abort move. ## Evennia 0.9.5 diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index e69de29bb2..bd397db48c 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -0,0 +1,423 @@ +""" +Base Character and NPCs. + +""" + + +from evennia.objects.objects import DefaultCharacter, DefaultObject +from evennia.typeclasses.attributes import AttributeProperty +from evennia.utils.utils import lazy_property, int2str +from .objects import EvAdventureObject + + +class EquipmentError(TypeError): + pass + + +class EquipmentHandler: + """ + _Knave_ puts a lot of emphasis on the inventory. You have 20 inventory slots, + Some things, like torches can fit multiple in one slot, other (like + big weapons) use more than one slot. The items carried and wielded has a big impact + on character customization - even magic requires carrying a runestone per spell. + + The inventory also doubles as a measure of negative effects. Getting soaked in mud + or slime could gunk up some of your inventory slots and make the items there unusuable + until you cleaned them. + + """ + # these are the equipment slots available + total_slots = 20 + wield_slots = ["shield", "weapon"] + wear_slots = ["helmet", "armor"] + + def __init__(self, obj): + self.obj = obj + self._slots_used = None + self._wielded = None + self._worn = None + self._armor = None + + def _wield_or_wear(self, item, action="wear"): + """ + Wield or wear a previously carried item in one of the supported wield/wear slots. Items need + to have the wieldable/wearable tag and will get a wielded/worn tag. The slot to occupy is + retrieved from the item itself. + + Args: + item (Object): The object to wield. This will replace any existing + wieldable item in that spot. + action (str): One of 'wield' or 'wear'. + Returns: + tuple: (slot, old_item - the slot-name this item was + assigned to (like 'helmet') and any old item that was replaced in that location,. + (else `old_item` is `None`). This is useful for returning info messages + to the user. + Raises: + EquipmentError: If there is a problem wielding the item. + + Notes: + Since the action of wielding is so similar to wearing, we use the same code for both, + just exchanging which slot to use and the wield/wear and wielded/worn texts. + + """ + adjective = 'wearable' if action == 'wear' else 'wieldable' + verb = "worn" if action == 'wear' else 'wielded' + + if item not in self.obj.contents: + raise EquipmentError(f"You need to pick it up before you can use it.") + if item in self.wielded: + raise EquipmentError(f"Already using {item.key}") + if not item.tags.has(adjective, category="inventory"): + # must have wieldable/wearable tag + raise EquipmentError(f"Cannot {action} {item.key}") + + # see if an existing item already sits in the relevant slot + if action == 'wear': + slot = item.wear_slot + old_item = self.worn.get(slot) + self.worn[slot] = item + else: + slot = item.wield_slot + old_item = self.wielded.get(slot) + self.wielded[item] + + # untag old, tag the new and store it in .wielded dict for easy access + if old_item: + old_item.tags.remove(verb, category="inventory") + item.tags.add(verb, category="inventory") + + return slot, old_item + + @property + def slots_used(self): + """ + Return how many slots are used up (out of .total_slots). Certain, big items may use more + than one slot. Also caches the results. + + """ + slots_used = self._slots_used + if slots_used is None: + slots_used = self._slots_used = sum( + item.inventory_slot_usage for item in self.contents + ) + return slots_used + + @property + def all(self): + """ + Get all carried items. Used by an 'inventory' command. + + """ + return self.obj.contents + + @property + def worn(self): + """ + Get (and cache) all worn items. + + """ + worn = self._worn + if worn is None: + worn = self._worn = list( + DefaultObject.objects + .get_by_tag(["wearable", "worn"], category="inventory") + .filter(db_location=self.obj) + ) + return worn + + @property + def wielded(self): + wielded = self._wielded + if wielded is None: + wielded = self._wielded = list( + DefaultObject.objects + .get_by_tag(["wieldable", "wielded"], category="inventory") + .filter(db_location=self.obj) + ) + return wielded + + @property + def carried(self): + wielded_or_worn = self.wielded + self.worn + return [item for item in self.contents if item not in wielded_or_worn] + + @property + def armor_defense(self): + """ + Figure out the total armor defense of the character. This is a combination + of armor from worn items (helmets, armor) and wielded ones (shields). + + """ + armor = self._armor + if armor is None: + # recalculate and refresh cache. Default for unarmored enemy is armor defense of 11. + armor = self._armor = sum(item.armor for item in self.worn + self.wielded) or 11 + return armor + + def has_space(self, item): + """ + Check if there's room in equipment for this item. + + Args: + item (Object): An entity that takes up space. + + Returns: + bool: If there's room or not. + + Notes: + Also informs the user of the failure. + + """ + needed_slots = getattr(item, "inventory_slot_usage", 1) + free = self.slots_used - needed_slots + if free - needed_slots < 0: + self.obj.msg(f"No space in inventory - {item} takes up {needed_slots}, " + f"but $int2str({free}) $pluralize(is, {free}, are) available.") + return False + return True + + def can_drop(self, item): + """ + Check if the item can be dropped - this is blocked by being worn or wielded. + + Args: + item (Object): The item to drop. + + Returns: + bool: If the object can be dropped. + + Notes: + Informs the user of a failure. + + """ + if item in self.wielded: + self.msg("You are currently wielding {item.key}. Unwield it first.") + return False + if item in self.worn: + self.msg("You are currently wearing {item.key}. Remove it first.") + return False + return True + + def add(self, item): + """ + Add an item to the inventory. This will be called when picking something up. An item + must be carried before it can be worn or wielded. + + There is a max number of carry-slots. + + Args: + item (EvAdventureObject): The item to add (pick up). + Raises: + EquipmentError: If the item can't be added (usually because of lack of space). + + """ + slots_needed = item.inventory_slot_usage + slots_already_used = self.slots_used + + slots_free = self.total_slots - slots_already_used + + if slot_needed > slots_free: + raise EquipmentError( + f"This requires {slots_needed} equipment slots - you have " + f"$int2str({slots_free}) $pluralize(slot, {slots_free}) available.") + # move to inventory + item.location = self.obj + self.slots_used += slots_needed + + def remove(self, item): + """ + Remove (drop) an item from inventory. This will also un-wear or un-wield it. + + Args: + item (EvAdventureObject): The item to drop. + Raises: + EquipmentError: If the item can't be dropped (usually because we don't have it). + + """ + if item not in self.obj.contents: + raise EquipmentError("You are not carrying this item.") + self.slots_used -= item.inventory_slot_usage + + def wear(self, item): + """ + Wear a previously carried item. The item itelf knows which slot it belongs in (like 'helmet' + or 'armor'). + + Args: + item (EvAdventureObject): The item to wear. Must already be carried. + Returns: + tuple: (slot, old_item - the slot-name this item was + assigned to (like 'helmet') and any old item that was replaced in that location + (else `old_item` is `None`). This is useful for returning info messages + to the user. + Raises: + EquipmentError: If there is a problem wearing the item. + + """ + return self._wield_or_wear(item, action="wield") + + def wield(self, item): + """ + Wield a previously carried item. The item itelf knows which wield-slot it belongs in (like + 'helmet' or 'armor'). + + Args: + item (EvAdventureObject): The item to wield. Must already be carried. + + Returns: + tuple: (slot, old_item - the wield-slot-name this item was + assigned to (like 'shield') and any old item that was replaced in that location + (else `old_item` is `None`). This is useful for returning info messages + to the user. + Raises: + EquipmentError: If there is a problem wielding the item. + + """ + return self._wield_or_wear(item, action="wear") + + +class EvAdventureCharacter(DefaultCharacter): + """ + A Character for use with EvAdventure. This also works fine for + monsters and NPCS. + + """ + + strength = AttributeProperty(default=1) + dexterity = AttributeProperty(default=1) + constitution = AttributeProperty(default=1) + intelligence = AttributeProperty(default=1) + wisdom = AttributeProperty(default=1) + charisma = AttributeProperty(default=1) + + armor = AttributeProperty(default=1) + + exploration_speed = AttributeProperty(default=120) + combat_speed = AttributeProperty(default=40) + + hp = AttributeProperty(default=4) + hp_max = AttributeProperty(default=4) + level = AttributeProperty(default=1) + xp = AttributeProperty(default=0) + + morale = AttributeProperty(default=9) # only used for NPC/monster morale checks + + @lazy_property + def equipment(self): + """Allows to access equipment like char.equipment.worn""" + return EquipmentHandler(self) + + def at_pre_object_receive(self, moved_object, source_location, **kwargs): + """ + Hook called by Evennia before moving an object here. Return False to abort move. + + Args: + moved_object (Object): Object to move into this one (that is, into inventory). + source_location (Object): Source location moved from. + **kwargs: Passed from move operation; unused here. + + Returns: + bool: If move should be allowed or not. + + """ + return self.equipment.has_space(moved_object) + + def at_object_receive(self, moved_object, source_location, **kwargs): + """ + Hook called by Evennia as an object is moved here. We make sure it's added + to the equipment handler. + + Args: + moved_object (Object): Object to move into this one (that is, into inventory). + source_location (Object): Source location moved from. + **kwargs: Passed from move operation; unused here. + + """ + self.equipment.add(moved_object) + + def at_pre_object_leave(self, leaving_object, destination, **kwargs): + """ + Hook called when dropping an item. We don't allow to drop weilded/worn items + (need to unwield/remove them first). + + """ + self.equipment.can_drop(leaving_object) + + def at_object_leave(self, moved_object, destination, **kwargs): + """ + Called just before an object leaves from inside this object + + Args: + moved_obj (Object): The object leaving + destination (Object): Where `moved_obj` is going. + **kwargs (dict): Arbitrary, optional arguments for users + overriding the call (unused by default). + + """ + self.equipment.remove(moved_object) + + +class EvAdventureNPC(DefaultCharacter): + """ + This is the base class for all non-player entities, including monsters. These + generally don't advance in level but uses a simplified, abstract measure of how + dangerous or competent they are - the 'hit dice' (HD). + + HD indicates how much health they have and how hard they hit. In _Knave_, HD also + defaults to being the bonus for all abilities. HP is 4 x Hit die (this can then be + customized per-entity of course). + + Morale is set explicitly per-NPC, usually between 7 and 9. + + Monsters don't use equipment in the way PCs do, instead their weapons and equipment + are baked into their HD (and/or dropped as loot when they go down). If you want monsters + or NPCs that can level and work the same as PCs, base them off the EvAdventureCharacter + class instead. + + Unlike for a Character, we generate all the abilities dynamically based on HD. + + """ + hit_dice = AttributeProperty(default=1) + # note: this is the armor bonus, 10 lower than the armor defence (what is usually + # referred to as ascending AC for many older D&D versions). So if AC is 14, this value + # should be 4. + armor = AttributeProperty(default=1) + morale = AttributeProperty(default=9) + hp = AttributeProperty(default=8) + + @property + def strength(self): + return self.hit_dice + + @property + def dexterity(self): + return self.hit_dice + + @property + def constitution(self): + return self.hit_dice + + @property + def intelligence(self): + return self.hit_dice + + @property + def wisdom(self): + return self.hit_dice + + @property + def charisma(self): + return self.hit_dice + + @property + def hp_max(self): + return self.hit_dice * 4 + + def at_object_creation(self): + """ + Start with max health. + + """ + self.hp = self.hp_max + diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py new file mode 100644 index 0000000000..ee2276ee52 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -0,0 +1,127 @@ +""" +EvAdventure turn-based combat + +This implements a turn-based combat style, where both sides have a little longer time to +choose their next action. If they don't react before a timer runs out, the previous action +will be repeated. This means that a 'twitch' style combat can be created using the same +mechanism, by just speeding up each 'turn'. + +The combat is handled with a `Script` shared between all combatants; this tracks the state +of combat and handles all timing elements. + +Unlike in base _Knave_, the MUD version's combat is simultaneous; everyone plans and executes +their turns simultaneously with minimum downtime. This version also includes a stricter +handling of optimal distances than base _Knave_ (this would be handled by the GM normally). + +""" + +from dataclasses import dataclass +from collections import defaultdict +from evennia.scripts.scripts import DefaultScript +from evennia.typeclasses.attributes import AttributeProperty +from . import rules + + +@dataclass +class CombatantStats: + """ + Represents temporary combat-only data we need to track + during combat for a single Character. + """ + weapon = None + armor = None + # abstract distance relationship to other combatants + distance_matrix = {} + # actions may affect what works better/worse next round + advantage_actions_next_turn = [] + disadvantage_actions_next_turn = [] + + def get_distance(self, target): + return self.distance_matrix.get(target) + + def change_distance(self, target, change): + current_dist = self.distance_matrix.get(target) # will raise error if None, as it should + self.distance_matrix[target] = max(0, min(4, current_dist + target)) + + +class EvAdventureCombat(DefaultScript): + """ + This script is created when combat is initialized and stores a queue + of all active participants. It's also possible to join (or leave) the fray later. + + """ + combatants = AttributeProperty(default=dict()) + queue = AttributeProperty(default=list()) + # turn counter - abstract time + turn = AttributeProperty(default=1) + # symmetric distance matrix + distance_matrix = {} + + def _refresh_distance_matrix(self): + """ + Refresh the distance matrix, either after movement or when a + new combatant enters combat - everyone must have a symmetric + distance to every other combatant (that is, if you are 'near' an opponent, + they are also 'near' to you). + + Distances are abstract and divided into four steps: + + 0. Close (melee, short weapons, fists, long weapons with disadvantage) + 1. Near (melee, long weapons, short weapons with disadvantage) + 2. Medium (thrown, ranged with disadvantage) + 3. Far (ranged, thrown with disadvantage) + 4. Disengaging/fleeing (no weapons can be used) + + Distance is tracked to each opponent individually. One can move 1 step and atack + or 3 steps without attacking. Ranged weapons can't be used in range 0, 1 and + melee weapons can't be used at ranges 2, 3. + + New combatants will start at a distance averaged between the optimal ranges + of them and their opponents. + + """ + handled = [] + for combatant1, combatant_stats1 in self.combatants.items(): + for combatant2, combatant_stats2 in self.combatants.items(): + + if combatant1 == combatant2: + continue + + # only update if data was not available already (or drifted + # out of sync, which should not happen) + dist1 = combatant_stats1.get_distance(combatant2) + dist2 = combatant_stats2.get_distance(combatant1) + if None in (dist1, dist2) or dist1 != dist2: + avg_range = round(0.5 * (combatant1.weapon.range_optimal + + combatant2.weapon.range_optimal)) + combatant_stats1.distance_matrix[combatant2] = avg_range + combatant_stats2.distance_matrix[combatant1] = avg_range + + handled.append(combatant1) + handled.append(combatant2) + + self.combatants = handled + + def _move_relative_to(self, combatant, target_combatant, change): + """ + Change the distance to a target. + + Args: + combatant (Character): The one doing the change. + target_combatant (Character): The one changing towards. + change (int): A +/- change value. Result is always in range 0..4. + + """ + self.combatants[combatant].change_distance(target_combatant, change) + self.combatants[target_combatant].change_distance(combatant, change) + + def add_combatant(self, combatant): + self.combatants[combatant] = CombatantStats( + weapon=combatant.equipment.get("weapon"), + armor=combatant.equipment.armor, + ) + self._refresh_distance_matrix() + + def remove_combatant(self, combatant): + self.combatants.pop(combatant, None) + self._refresh_distance_matrix() diff --git a/evennia/contrib/tutorials/evadventure/combat.py b/evennia/contrib/tutorials/evadventure/combat_twitch.py similarity index 100% rename from evennia/contrib/tutorials/evadventure/combat.py rename to evennia/contrib/tutorials/evadventure/combat_twitch.py diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index e69de29bb2..2c47ef5e70 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -0,0 +1,60 @@ +""" +All items in the game inherit from a base object. The properties (what you can do +with an object, such as wear, wield, eat, drink, kill etc) are all controlled by +Tags. + +""" + +from evennia.objects.objects import DefaultObject +from evennia.typeclasses.attributes import AttributeProperty + + +class EvAdventureObject(DefaultObject): + """ + Base in-game entity. + + """ + # inventory management + wield_slot = AttributeProperty(default=None) + wear_slot = AttributeProperty(default=None) + inventory_slot_usage = AttributeProperty(default=1) + armor = AttributeProperty(default=0) + # when 0, item is destroyed and is unusable + quality = AttributeProperty(default=1) + + +class EvAdventureObjectFiller(EvAdventureObject): + """ + In _Knave_, the inventory slots act as an extra measure of how you are affected by + various averse effects. For example, mud or water could fill up some of your inventory + slots and make the equipment there unusable until you cleaned it. Inventory is also + used to track how long you can stay under water etc - the fewer empty slots you have, + the less time you can stay under water due to carrying so much stuff with you. + + This class represents such an effect filling up an empty slot. It has a quality of 0, + meaning it's unusable. + + """ + quality = AttributeProperty(default=0) + + +class EvAdventureWeapon(EvAdventureObject): + """ + Base weapon class for all EvAdventure weapons. + + """ + wield_slot = AttributeProperty(default="weapon") + damage_roll = AttributeProperty(default="1d6") + # at which ranges this weapon can be used. If not listed, unable to use + range_optimal = AttributeProperty(default=0) # normal usage + range_suboptimal = AttributeProperty(default=1) # usage with disadvantage + + +class EvAdventureRunestone(EvAdventureWeapon): + """ + Base class for magic runestones. In _Knave_, every spell is represented by a rune stone + that takes up an inventory slot. It is wielded as a weapon in order to create the specific + magical effect provided by the stone. Normally each stone can only be used once per day but + they are quite powerful (and scales with caster level). + + """ diff --git a/evennia/contrib/tutorials/evadventure/random_tables.py b/evennia/contrib/tutorials/evadventure/random_tables.py index 19604ec922..d1a2cc493f 100644 --- a/evennia/contrib/tutorials/evadventure/random_tables.py +++ b/evennia/contrib/tutorials/evadventure/random_tables.py @@ -352,3 +352,17 @@ character_generation = { ], } + +reactions = [ + ('2', "Hostile"), + ('3-5', "Unfriendly"), + ('6-8', "Unsure"), + ('9-11', "Talkative"), + ('12', "Helpful"), +] + +initiative = [ + ('1-3', "Enemy acts first"), + ('4-6', "PC acts first"), +] + diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index b8fc1e8816..b735ea1600 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -1,142 +1,292 @@ """ MUD ruleset based on the _Knave_ OSR tabletop RPG by Ben Milton (modified for MUD use). -The rules are divided into three parts: +The rules are divided into a set of classes. While each class (except chargen) could +also have been stand-alone functions, having them as classes makes it a little easier +to use them as the base for your own variation (tweaking values etc). -- Character generation - these are rules only used when creating a character. -- Improvement - these are rules used with experience to improve the character - over time. -- Actions - all in-game interactions (making use of the character's abilities) - are defined as discreet _actions_ in the game. An action is the smallest rule - unit to accomplish something with rule support. While in a tabletop game you - have a human game master to arbitrate, the computer requires exactness. While - free-form roleplay is also possible, only the actions defined here will have a - coded support. +- Roll-engine: Class with methods for making all dice rolls needed by the rules. Knave only + has a few resolution rolls, but we define helper methods for different actions the + character will be able to do in-code. +- Character generation - this is a container used for holding, tweaking and setting + all character data during character generation. At the end it will save itself + onto the Character for permanent storage. +- Improvement - this container holds rules used with experience to improve the + character over time. +- Charsheet - a container with tools for visually displaying the character sheet in-game. + +This module presents several singletons to import + +- `dice` - the `EvAdventureRollEngine` for all random resolution and table-rolling. +- `character_sheet` - the `EvAdventureCharacterSheet` visualizer. +- `improvement` - the EvAdventureImprovement` class for handling char xp and leveling. """ +from random import randint from dataclasses import dataclass +from evennia.utils.evform import EvForm +from evennia.utils.evtable import EvTable from .utils import roll from .random_tables import character_generation as chargen_table # Basic rolls -def saving_throw(bonus, advantage=False, disadvantage=False): +class EvAdventureRollEngine: """ - To save, roll d20 + relevant Attrribute bonus > 15 (always 15). - - Args: - advantage (bool): Roll 2d20 and use the bigger number. - disadvantage (bool): Roll 2d20 and use the smaller number. - - Returns: - bool: If the save was passed or not. - - Notes: - Advantage and disadvantage cancel each other out. - - Example: - Trying to overcome the effects of poison, roll d20 + Constitution-bonus above 15. + This groups all dice rolls of EvAdventure. These could all have been normal functions, but we + are group them in a class to make them easier to partially override and replace later. """ - if not (advantage or disadvantage) or (advantage and disadvantage): - # normal roll - dice_roll = roll("1d20") - elif advantage: - dice_roll = max(roll("1d20"), roll("1d20")) - else: - dice_roll = min(roll("1d20"), roll("1d20")) - return (dice_roll + bonus) > 15 + @staticmethod + def roll(roll_string, max_number=10): + """ + NOTE: In evennia/contribs/rpg/dice/ is a more powerful dice roller with + more features, such as modifiers, secret rolls etc. This is much simpler and only + gets a simple sum of normal rpg-dice. -def roll_attribute_bonus(): - """ - For the MUD version, we use a flat bonus and let the user redistribute it. This - function (unused by default) implements the original Knave random generator for - the Attribute bonus, if you prefer producing more 'unbalanced' characters. + Args: + roll_string (str): A roll using standard rpg syntax, d, like + 1d6, 2d10 etc. Max die-size is 1000. + max_number (int): The max number of dice to roll. Defaults to 10, which is usually + more than enough. - The Attribute bonus is generated by rolling the lowest value of 3d6. + Returns: + int: The rolled result - sum of all dice rolled. - Returns: - int: The randomly generated Attribute bonus. + Raises: + TypeError: If roll_string is not on the right format or otherwise doesn't validate. - """ - return min(roll("1d6"), roll("1d6"), roll("1d6")) + Notes: + Since we may see user input to this function, we make sure to validate the inputs (we + wouldn't bother much with that if it was just for developer use). + """ + max_diesize = 1000 + roll_string = roll_string.lower() + if 'd' not in roll_string: + raise TypeError(f"Dice roll '{roll_string}' was not recognized. " + "Must be `d`.") + number, diesize = roll_string.split('d', 1) + try: + number = int(number) + diesize = int(diesize) + except Exception: + raise TypeError(f"The number and dice-size of '{roll_string}' must be numerical.") + if 0 < number > max_number: + raise TypeError(f"Invalid number of dice rolled (must be between 1 and {max_number})") + if 0 < diesize > max_diesize: + raise TypeError(f"Invalid die-size used (must be between 1 and {max_diesize} sides)") -def roll_random_table(dieroll, table, table_choices): - """ - Make a roll on a random table. + # At this point we know we have valid input - roll and all dice together + return sum(randint(1, diesize) for _ in range(number)) - Args: - dieroll (str): The dice to roll, like 1d6, 1d20, 3d6 etc). - table_choices (iterable): If a list of single elements, the die roll - should fully encompass the table, like a 1d20 roll for a table - with 20 elements. If each element is a tuple, the first element - of the tuple is assumed to be a string 'X-Y' indicating the - range of values that should match the roll. + @staticmethod + def roll_with_advantage_or_disadvantage(advantage=False, disadvantage=False): + """ + Base roll of d20, or 2d20, based on dis/advantage given. - Returns: - Any: The result of the random roll. + Args: + bonus (int): The ability bonus to apply, like strength or charisma. + advantage (bool): Roll 2d20 and use the bigger number. + disadvantage (bool): Roll 2d20 and use the smaller number. - Example: - `roll table_choices = [('1-5', "Blue"), ('6-9': "Red"), ('10', "Purple")]` + Notes: + Disadvantage and advantage cancel each other out. - Notes: - If the roll is outside of the listing, the closest edge value is used. - - """ - roll_result = roll(dieroll) - - if isinstance(table_choices[0], (tuple, list)): - # tuple with range conditional, like ('1-5', "Blue") or ('10', "Purple") - max_range = -1 - min_range = 10**6 - for (valrange, choice) in table_choices: - - minval, *maxval = valrange.split('-', 1) - minval = abs(int(minval)) - maxval = abs(int(maxval[0]) if maxval else minval) - - # we store the largest/smallest values so far in case we need to use them - max_range = max(max_range, maxval) - min_range = min(min_range, minval) - - if minval <= roll_result <= maxval: - return choice - - # if we have no result, we are outside of the range, we pick the edge values. It is also - # possible the range contains 'gaps', but that'd be an error in the random table itself. - if roll_result > max_range: - return max_range + """ + if not (advantage or disadvantage) or (advantage and disadvantage): + # normal roll + return roll("1d20") + elif advantage: + return max(roll("1d20"), roll("1d20")) else: - return min_range - else: - # regular list - one line per value. - roll_result = max(1, min(len(table_choices), roll_result)) - return table_choices[roll_result - 1] + return min(roll("1d20"), roll("1d20")) + + @staticmethod + def saving_throw(character, bonus_type='strength', + advantage=False, disadvantage=False, modifier=0): + """ + A saving throw without a clear enemy to beat. In _Knave_ all unopposed saving + throws always tries to beat 15, so (d20 + bonus + modifier) > 15. + + Args: + character (Object): The one attempting to save themselves. + bonus (str): The ability bonus to apply, like strength or charisma. Minimum is 1. + advantage (bool): Roll 2d20 and use the bigger number. + disadvantage (bool): Roll 2d20 and use the smaller number. + modifier (int): An additional +/- modifier to the roll. + + Returns: + tuple: (bool, str): If the save was passed or not. The second element is the + quality of the roll - None (normal), "critical fail" and "critical success". + + Notes: + Advantage and disadvantage cancel each other out. + + Example: + Trying to overcome the effects of poison, roll d20 + Constitution-bonus above 15. + + """ + bonus = getattr(character, bonus_type, 1) + dice_roll = roll_with_advantage_or_disadvantage(advantage, disadvantage) + if dice_roll == 1: + quality = "critical failure" + elif dice_roll == 20: + quality = "critical success" + else: + quality = None + return (dice_roll + bonus + modifier) > 15, quality + + @staticmethod + def opposed_saving_throw(attacker, defender, attack_type='strength', defense_type='armor', + advantage=False, disadvantage=False): + """ + An saving throw that tries to beat an active opposing side. + + Args: + attacker (Character): The attacking party. + defender (Character): The one defending. + attack_type (str): Which ability to use in the attack, like 'strength' or 'willpower'. + Minimum is always 1. + defense_type (str): Which ability to defend with, in addition to 'armor'. + Minimum is always 11 (bonus + 10 is always the defense in _Knave_). + advantage (bool): Roll 2d20 and use the bigger number. + disadvantage (bool): Roll 2d20 and use the smaller number. + modifier (int): An additional +/- modifier to the roll. + + Returns: + tuple: (bool, str): If the attack succeed or not. The second element is the + quality of the roll - None (normal), "critical fail" and "critical success". + Notes: + Advantage and disadvantage cancel each other out. + + """ + attack_bonus = getattr(attacker, attack_type, 1) + # defense is always bonus + 10 in Knave + defender_defense = getattr(defender, defense_type_type, 1) + 10 + dice_roll = roll_with_advantage_or_disadvantage(advantage, disadvantage) + if dice_roll == 1: + quality = "critical failure" + elif dice_roll == 20: + quality = "critical success" + else: + quality = None + return (dice_roll + attack_bonus + modifier) > defender_defense, quality + + # specific rolls / actions + + @staticmethod + def melee_attack(attacker, defender, advantage=False, disadvantage=False): + """Close attack (strength vs armor)""" + return opposed_saving_throw( + attacker, defender, attack_type="strength", defense_type="armor", + advantage=advantage, disadvantage=disadvantage) + + @staticmethod + def ranged_attack(attacker, defender, advantage=False, disadvantage=False): + """Ranged attack (wisdom vs armor)""" + return opposed_saving_throw( + attacker, defender, attack_type="wisdom", defense_type="armor", + advantage=advantage, disadvantage=disadvantage) + + @staticmethod + def magic_attack(attacker, defender, advantage=False, disadvantage=False): + """Magic attack (int vs dexterity)""" + return opposed_saving_throw( + attacker, defender, attack_type="intelligence", defense_type="dexterity", + advantage=advantage, disadvantage=disadvantage) + + @staticmethod + def morale_check(defender): + """ + A morale check is done for NPCs/monsters. It's done with a 2d6 against + their morale. + + Args: + defender (NPC): The entity trying to defend its morale. + + Returns: + bool: False if morale roll failed, True otherwise. + + """ + return roll('2d6') <= defender.morale + + @staticmethod + def healing_from_rest(character): + """ + A meal and a full night's rest allow for regaining 1d8 + Const bonus HP. + + Args: + character (Character): The one resting. + + Returns: + int: How much HP was healed. This is never more than how damaged we are. + + """ + # we can't heal more than our damage + damage = character.hp_max - character.hp + healed = roll('1d8') + character.constitution + return min(damage, healed) + + @staticmethod + def roll_random_table(dieroll, table, table_choices): + """ + Make a roll on a random table. + + Args: + dieroll (str): The dice to roll, like 1d6, 1d20, 3d6 etc). + table_choices (iterable): If a list of single elements, the die roll + should fully encompass the table, like a 1d20 roll for a table + with 20 elements. If each element is a tuple, the first element + of the tuple is assumed to be a string 'X-Y' indicating the + range of values that should match the roll. + + Returns: + Any: The result of the random roll. + + Example: + `roll table_choices = [('1-5', "Blue"), ('6-9': "Red"), ('10', "Purple")]` + + Notes: + If the roll is outside of the listing, the closest edge value is used. + + """ + roll_result = roll(dieroll) + + if isinstance(table_choices[0], (tuple, list)): + # tuple with range conditional, like ('1-5', "Blue") or ('10', "Purple") + max_range = -1 + min_range = 10**6 + for (valrange, choice) in table_choices: + + minval, *maxval = valrange.split('-', 1) + minval = abs(int(minval)) + maxval = abs(int(maxval[0]) if maxval else minval) + + # we store the largest/smallest values so far in case we need to use them + max_range = max(max_range, maxval) + min_range = min(min_range, minval) + + if minval <= roll_result <= maxval: + return choice + + # if we have no result, we are outside of the range, we pick the edge values. It is also + # possible the range contains 'gaps', but that'd be an error in the random table itself. + if roll_result > max_range: + return max_range + else: + return min_range + else: + # regular list - one line per value. + roll_result = max(1, min(len(table_choices), roll_result)) + return table_choices[roll_result - 1] # character generation -@dataclass -class CharAttribute: - """ - A character Attribute, like strength or wisdom, has a _bonus_, used - to improve the result of doing a related action. It also has a _defense_ value - which is always 10 points higher than the bonus. For example, to attack - someone, you'd have to roll d20 + `strength bonus` to beat the `strength defense` - of the enemy. - - """ - bonus: str = 0 - - @property - def defense(self): - return bonus + 10 - - -class CharacterGeneration: +class EvAdventureCharacterGeneration: """ This collects all the rules for generating a new character. An instance of this class can be used to track all the stats during generation and will be used to apply all the data to the @@ -170,56 +320,74 @@ class CharacterGeneration: Initialize starting values """ + # for clarity we initialize the engine here rather than use the + # global singleton at the end of the module + dice = EvAdventureRollEngine() + # name will likely be modified later - self.name = roll_random_table('1d282', chargen_table['name']) + self.name = dice.roll_random_table('1d282', chargen_table['name']) # base attribute bonuses - self.strength = CharAttribute(bonus=2) - self.dexterity = CharAttribute(bonus=2) - self.constitution = CharAttribute(bonus=2) - self.intelligence = CharAttribute(bonus=2) - self.wisdom = CharAttribute(bonus=2) - self.charisma = CharAttribute(bonus=2) + self.strength = 2 + self.dexterity = 2 + self.constitution = 2 + self.intelligence = 2 + self.wisdom = 2 + self.charisma = 2 - self.armor = CharAttribute(bonus=1) # un-armored default + self.armor_bonus = 1 # un-armored default # physical attributes (only for rp purposes) - self.physique = roll_random_table('1d20', chargen_table['physique']) - self.face = roll_random_table(chargen_table['1d20', 'face']) - self.skin = roll_random_table(chargen_table['1d20', 'skin']) - self.hair = roll_random_table(chargen_table['1d20', 'hair']) - self.clothing = roll_random_table(chargen_table['1d20', 'clothing']) - self.virtue = roll_random_table(chargen_table['1d20', 'virtue']) - self.vice = roll_random_table(chargen_table['1d20', 'vice']) - self.background = roll_random_table(chargen_table['1d20', 'background']) - self.misfortune = roll_random_table(chargen_table['1d20', 'misfortune']) - self.alignment = roll_random_table(chargen_table['1d20', 'alignment']) + self.physique = dice.roll_random_table('1d20', chargen_table['physique']) + self.face = dice.roll_random_table('1d20', chargen_table['face']) + self.skin = dice.roll_random_table('1d20', chargen_table['skin']) + self.hair = dice.roll_random_table('1d20', chargen_table['hair']) + self.clothing = dice.roll_random_table('1d20', chargen_table['clothing']) + self.speech = dice.roll_random_table('1d20', chargen_table['speech']) + self.virtue = dice.roll_random_table('1d20', chargen_table['virtue']) + self.vice = dice.roll_random_table('1d20', chargen_table['vice']) + self.background = dice.roll_random_table('1d20', chargen_table['background']) + self.misfortune = dice.roll_random_table('1d20', chargen_table['misfortune']) + self.alignment = dice.roll_random_table('1d20', chargen_table['alignment']) # same for all self.exploration_speed = 120 self.combat_speed = 40 - self.hp = 0 + self.hp_max = 8 + self.hp = self.hp_max self.xp = 0 self.level = 1 # random equipment - self.armor = roll_random_table('1d20', chargen_table['armor']) + self.armor = dice.roll_random_table('1d20', chargen_table['armor']) - _helmet_and_shield = roll_random_table('1d20', chargen_table["helmets and shields"]) + _helmet_and_shield = dice.roll_random_table('1d20', chargen_table["helmets and shields"]) self.helmet = "helmet" if "helmet" in _helmet_and_shield else "none" self.shield = "shield" if "shield" in _helmet_and_shield else "none" - self.weapon = roll_random_table(chargen_table['1d20', "starting_weapon"]) + self.weapon = dice.roll_random_table(chargen_table['1d20', "starting_weapon"]) self.equipment = [ "ration", "ration", - roll_random_table(chargen_table['1d20', "dungeoning gear"]), - roll_random_table(chargen_table['1d20', "dungeoning gear"]), - roll_random_table(chargen_table['1d20', "general gear 1"]), - roll_random_table(chargen_table['1d20', "general gear 2"]), + dice.roll_random_table(chargen_table['1d20', "dungeoning gear"]), + dice.roll_random_table(chargen_table['1d20', "dungeoning gear"]), + dice.roll_random_table(chargen_table['1d20', "general gear 1"]), + dice.roll_random_table(chargen_table['1d20', "general gear 2"]), ] + def build_desc(self): + """ + Generate a backstory / description paragraph from random elements. + + """ + return ( + f"{self.background.title()}. Wears {self.clothing} clothes, and has {self.speech} " + f"speech. Has a {self.physique} physique, a {self.face} face, {self.skin} skin and " + f"{self.hair} hair. Is {self.virtue}, but {self.vice}. Has been {self.misfortune} in " + f"the past. Favors {self.alignment}." + ) + def adjust_attribute(self, source_attribute, target_attribute, value): """ Redistribute bonus from one attribute to another. The resulting values @@ -257,3 +425,175 @@ class CharacterGeneration: permanently. """ + character.key = self.name + character.strength = self.strength + character.dexterity = self.dexterity + character.constitution = self.constitution + character.intelligence = self.intelligence + character.wisdom = self.wisdom + character.charisma = self.charisma + + character.armor = self.armor_bonus + # character.exploration_speed = self.exploration_speed + # character.combat_speed = self.combat_speed + + character.hp = self.hp + character.level = self.level + character.xp = self.xp + + character.db.desc = self.build_desc() + + if self.weapon: + character.equipment.add(self.weapon) + character.equipment.wield(self.weapon) + if self.shield: + character.equipment.add(self.shield) + character.equipment.wield(self.shield) + if self.armor: + character.equipment.add(self.armor) + character.equipment.wear(self.armor) + if self.helmet: + character.equipment.add(self.helmet) + character.equipment.wear(self.helmet) + + +# character improvement + +class EvAdventureImprovement: + """ + Handle XP gains and level upgrades. Grouped in a class in order to + make it easier to override the mechanism. + + """ + xp_per_level = 1000 + amount_of_abilities_to_upgrade = 3 + max_ability_bonus = 10 # bonus +10, defense 20 + + @staticmethod + def add_xp(character, xp): + """ + Add new XP. + + Args: + character (Character): The character to improve. + xp (int): The amount of gained XP. + + Returns: + bool: If a new level was reached or not. + + Notes: + level 1 -> 2 = 1000 XP + level 2 -> 3 = 2000 XP etc + + """ + character.xp += xp + next_level_xp = character.level * xp_per_level + return character.xp >= next_level_xp + + @staticmethod + def level_up(character, *abilities): + """ + Perform the level-up action. + + Args: + character (Character): The entity to level-up. + *abilities (str): A set of abilities (like 'strength', 'dexterity' (normally 3) + to upgrade by 1. Max is usually +10. + Notes: + We block increases above a certain value, but we don't raise an error here, that + will need to be done earlier, when the user selects the ability to increase. + + """ + dice = EvAdventureRollEngine() + + character.level += 1 + for ability in set(abilities[:amount_of_abilities_to_upgrades]): + # limit to max amount allowed, each one unique + try: + # set at most to the max bonus + current_bonus = getattr(character, ability) + setattr(character, ability, min(max_ability_bonus, current_bonus + 1)) + except AttributeError: + pass + + new_hp_max = max(character.max_hpdice.roll(f"{character.level}d8")) + + +# character sheet visualization + +class EvAdventureCharacterSheet: + """ + Generate a character sheet. This is grouped in a class in order to make + it easier to override the look of the sheet. + + """ + + sheet = """ + +----------------------------------------------------------------------------+ + | Name: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + +----------------------------------------------------------------------------+ + | STR: x2xxxxx DEX: x3xxxxx CON: x4xxxxx WIS: x5xxxxx CHA: x6xxxxx | + +----------------------------------------------------------------------------+ + | HP: x7xxxxx XP: x8xxxxx Exploration speed: x9x Combat speed: xAx | + +----------------------------------------------------------------------------+ + | Desc: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + +----------------------------------------------------------------------------+ + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccc1ccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + +----------------------------------------------------------------------------+ + """ + + @staticmethod + def get(character): + """ + Generate a character sheet from the character's stats. + + """ + equipment = character.equipment.wielded + character.equipment.worn + character.carried + # divide into chunks of max 10 length (to go into two columns) + equipment_table = EvTable( + table=[equipment[i: i + 10] for i in range(0, len(equipment), 10)] + ) + form = EvForm({"FORMCHAR": 'x', "TABLECHAR": 'c', "SHEET": sheet}) + form.map( + cells={ + 1: character.key, + 2: f"+{character.strength}({character.strength + 10})", + 3: f"+{character.dexterity}({character.dexterity + 10})", + 4: f"+{character.constitution}({character.constitution + 10})", + 5: f"+{character.wisdom}({character.wisdom + 10})", + 6: f"+{character.charisma}({character.charisma + 10})", + 7: f"{character.hp}/{character.hp_max}", + 8: character.xp, + 9: character.exploration_speed, + 'A': character.combat_speed, + 'B': character.db.desc, + }, + tables={ + 1: equipment_table, + } + ) + return str(form) + + +# singletons + +# access sheet as rules.character_sheet.get(character) +character_sheet = CharacterSheet() +# access rolls e.g. with rules.dice.opposed_saving_throw(...) +dice = EvAdventureRollEngine() +# access improvement e.g. with rules.improvement.add_xp(character, xp) +improvement = EvAdventureImprovement() diff --git a/evennia/contrib/tutorials/evadventure/tests.py b/evennia/contrib/tutorials/evadventure/tests.py new file mode 100644 index 0000000000..52b0b1e279 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests.py @@ -0,0 +1,26 @@ +""" +Tests for EvAdventure. + +""" + +from evennia.utils import create +from evennia.utils.test_resources import BaseEvenniaTest +from .character import EvAdventureCharacter +from .objects import EvAdventureObject + +class EvAdventureMixin: + def setUp(self): + super().setUp() + self.character = create.create_object(EvAdventureCharacter, key="testchar") + self.helmet = create.create_object(EvAdventureObject, key="helmet", + attributes=[("wear_slot", "helmet")]) + self.armor = create.create_object(EvAdventureObject, key="armor", + attributes=[("wear_slot", "armor")]) + self.weapon = create.create_object(EvAdventureObject, key="weapon", + attributes=[("wield_slot", "weapon")]) + self.shield = create.create_object(EvAdventureObject, key="shield", + attributes=[("wield_slot", "shield")]) + +class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): + pass + diff --git a/evennia/contrib/tutorials/evadventure/utils.py b/evennia/contrib/tutorials/evadventure/utils.py index 13e145d108..fc7da8fb52 100644 --- a/evennia/contrib/tutorials/evadventure/utils.py +++ b/evennia/contrib/tutorials/evadventure/utils.py @@ -2,46 +2,5 @@ Various utilities. """ -from random import randint -def roll(roll_string, max_number=10): - """ - NOTE: In evennia/contribs/rpg/dice/ is a more powerful dice roller with - more features, such as modifiers, secret rolls etc. This is much simpler and only - gets a simple sum of normal rpg-dice. - - Args: - roll_string (str): A roll using standard rpg syntax, d, like - 1d6, 2d10 etc. Max die-size is 1000. - max_number (int): The max number of dice to roll. Defaults to 10, which is usually - more than enough. - - Returns: - int: The rolled result - sum of all dice rolled. - - Raises: - TypeError: If roll_string is not on the right format or otherwise doesn't validate. - - Notes: - Since we may see user input to this function, we make sure to validate the inputs (we - wouldn't bother much with that if it was just for developer use). - - """ - max_diesize = 1000 - roll_string = roll_string.lower() - if 'd' not in roll_string: - raise TypeError(f"Dice roll '{roll_string}' was not recognized. Must be `d`.") - number, diesize = roll_string.split('d', 1) - try: - number = int(number) - diesize = int(diesize) - except Exception: - raise TypeError(f"The number and dice-size of '{roll_string}' must be numerical.") - if 0 < number > max_number: - raise TypeError(f"Invalid number of dice rolled (must be between 1 and {max_number})") - if 0 < diesize > max_diesize: - raise TypeError(f"Invalid die-size used (must be between 1 and {max_diesize} sides)") - - # At this point we know we have valid input - roll and all dice together - return sum(randint(1, diesize) for _ in range(number)) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index cd629bd22a..46e0a61a14 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -872,13 +872,15 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): The `DefaultObject` hooks called (if `move_hooks=True`) are, in order: - 1. `self.at_pre_move(destination)` (if this returns False, move is aborted) - 2. `source_location.at_object_leave(self, destination)` - 3. `self.announce_move_from(destination)` - 4. (move happens here) - 5. `self.announce_move_to(source_location)` - 6. `destination.at_object_receive(self, source_location)` - 7. `self.at_post_move(source_location)` + 1. `self.at_pre_move(destination)` (abort if return False) + 2. `source_location.at_pre_object_leave(self, destination)` (abort if return False) + 3. `destination.at_pre_object_receive(self, source_location)` (abort if return False) + 4. `source_location.at_object_leave(self, destination)` + 5. `self.announce_move_from(destination)` + 6. (move happens here) + 7. `self.announce_move_to(source_location)` + 8. `destination.at_object_receive(self, source_location)` + 9. `self.at_post_move(source_location)` """ @@ -903,17 +905,33 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): if destination.destination and use_destination: # traverse exits destination = destination.destination - # Before the move, call eventual pre-commands. + + # Save the old location + source_location = self.location + + # Before the move, call pre-hooks if move_hooks: + # check if we are okay to move try: if not self.at_pre_move(destination, **kwargs): return False except Exception as err: logerr(errtxt.format(err="at_pre_move()"), err) return False - - # Save the old location - source_location = self.location + # check if source location lets us go + try: + if not source_location.at_pre_object_leave(self, destination, **kwargs): + return False + except Exception as err: + logerr(errtxt.format(err="at_pre_object_leave()"), err) + return False + # check if destination accepts us + try: + if not self.at_pre_object_receive(self, source_location, **kwargs): + return False + except Exception as err: + logerr(errtxt.format(err="at_pre_object_receive()"), err) + return False # Call hook on source location if move_hooks and source_location: @@ -1473,7 +1491,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): def at_pre_move(self, destination, **kwargs): """ Called just before starting to move this object to - destination. + destination. Return False to abort move. Args: destination (Object): The object we are moving to @@ -1481,14 +1499,54 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): overriding the call (unused by default). Returns: - shouldmove (bool): If we should move or not. + bool: If we should move or not. Notes: If this method returns False/None, the move is cancelled before it is even started. """ - # return has_perm(self, destination, "can_move") + return True + + def at_pre_object_leave(self, leaving_object, destination, **kwargs): + """ + Called just before this object is about lose an object that was + previously 'inside' it. Return False to abort move. + + Args: + leaving_object (Object): The object that is about to leave. + destination (Object): Where object is going to. + **kwargs (dict): Arbitrary, optional arguments for users + overriding the call (unused by default). + Returns: + bool: If `leaving_object` should be allowed to leave or not. + + Notes: If this method returns False, None, the move is canceled before + it even started. + + """ + return True + + def at_pre_object_receive(self, arriving_object, source_location, **kwargs): + """ + Called just before this object received another object. If this + method returns `False`, the move is aborted and the moved entity + remains where it was. + + Args: + arriving_object (Object): The object moved into this one + source_location (Object): Where `moved_object` came from. + Note that this could be `None`. + **kwargs (dict): Arbitrary, optional arguments for users + overriding the call (unused by default). + + Returns: + bool: If False, abort move and `moved_obj` remains where it was. + + Notes: If this method returns False, None, the move is canceled before + it even started. + + """ return True # deprecated alias diff --git a/evennia/utils/evform.py b/evennia/utils/evform.py index 7bbe7a4915..fa55e6b95b 100644 --- a/evennia/utils/evform.py +++ b/evennia/utils/evform.py @@ -61,7 +61,7 @@ Use as follows: # create a new form from the template form = EvForm("path/to/testform.py") - (MudForm can also take a dictionary holding + (EvForm can also take a dictionary holding the required keys FORMCHAR, TABLECHAR and FORM) # add data to each tagged form cell diff --git a/evennia/utils/funcparser.py b/evennia/utils/funcparser.py index e0ae1d3eb6..cde44fa113 100644 --- a/evennia/utils/funcparser.py +++ b/evennia/utils/funcparser.py @@ -56,6 +56,7 @@ from evennia.utils.utils import ( crop, justify, safe_convert_to_types, + int2str ) from evennia.utils import search from evennia.utils.verb_conjugation.conjugate import verb_actor_stance_components @@ -642,13 +643,45 @@ def funcparser_callable_eval(*args, **kwargs): def funcparser_callable_toint(*args, **kwargs): - """Usage: toint(43.0) -> 43""" + """Usage: $toint(43.0) -> 43""" inp = funcparser_callable_eval(*args, **kwargs) try: return int(inp) except TypeError: return inp +def funcparser_callable_int2str(*args, **kwargs): + """ + Usage: $int2str(1) -> 'one' etc, up to 12->twelve. + + Args: + number (int): The number. If not an int, will be converted. + + Uses the int2str utility function. + """ + if not args: + return "" + try: + number = int(args[0]) + except ValueError: + return args[0] + return int2str(number) + + +def funcparser_callable_an(*args, **kwargs): + """ + Usage: $an(thing) -> a thing + + Adds a/an depending on if the first letter of the given word is a consonant or not. + + """ + if not args: + return "" + item = str(args[0]) + if item and item[0] in "aeiouy": + return f"an {item}" + return f"a {item}" + def _apply_operation_two_elements(*args, operator="+", **kwargs): """ @@ -987,6 +1020,35 @@ def funcparser_callable_clr(*args, **kwargs): endclr = "|" + endclr if endclr else ("|n" if startclr else "") return f"{startclr}{text}{endclr}" +def funcparser_callable_pluralize(*args, **kwargs): + """ + FuncParser callable. Handles pluralization of a word. + + Args: + singular_word (str): The base (singular) word to optionally pluralize + number (int): The number of elements; if 1 (or 0), use `singular_word` as-is, + otherwise use plural form. + plural_word (str, optional): If given, this will be used if `number` + is greater than one. If not given, we simply add 's' to the end of + `singular_word'. + + Example: + - `$pluralize(thing, 2)` -> "things" + - `$pluralize(goose, 18, geese)` -> "geese" + + """ + if not args: + return "" + nargs = len(args) + if nargs > 2: + singular_word, number, plural_word = args[:3] + elif nargs > 1: + singular_word, number = args[:2] + plural_word = f"{singular_word}s" + else: + singular_word, number = args[0], 1 + return singular_word if abs(int(number)) in (0, 1) else plural_word + def funcparser_callable_search(*args, caller=None, access="control", **kwargs): """ @@ -1353,6 +1415,9 @@ FUNCPARSER_CALLABLES = { "justify_center": funcparser_callable_center_justify, "space": funcparser_callable_space, "clr": funcparser_callable_clr, + "pluralize": funcparser_callable_pluralize, + "int2str": funcparser_callable_int2str, + "an": funcparser_callable_an, } SEARCHING_CALLABLES = { diff --git a/evennia/utils/tests/test_funcparser.py b/evennia/utils/tests/test_funcparser.py index c62928ff53..4e01e34eca 100644 --- a/evennia/utils/tests/test_funcparser.py +++ b/evennia/utils/tests/test_funcparser.py @@ -391,6 +391,13 @@ class TestDefaultCallables(TestCase): ("Some $rjust(Hello, width=30)", "Some Hello"), ("Some $cjust(Hello, 30)", "Some Hello "), ("Some $eval('-'*20)Hello", "Some --------------------Hello"), + ("There $pluralize(is, 1, are) one $pluralize(goose, 1, geese) here.", + "There is one goose here."), + ("There $pluralize(is, 2, are) two $pluralize(goose, 2, geese) here.", + "There are two geese here."), + ("There is $int2str(1) murderer, but $int2str(12) suspects.", + "There is one murderer, but twelve suspects."), + ("There is $an(thing) here", "There is a thing here"), ] ) def test_other_callables(self, string, expected): diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index d603a93bd2..de2e0cb695 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -2711,3 +2711,26 @@ def run_in_main_thread(function_or_method, *args, **kwargs): return function_or_method(*args, **kwargs) else: return threads.blockingCallFromThread(reactor, function_or_method, *args, **kwargs) + + +_INT2STR_MAP_NOUN = {1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", + 7: "seven", 8: "eight", 9: "nine", 10: "ten", 11: "eleven", 12: "twelve"} +_INT2STR_MAP_ADJ = {1: "1st", 2: "2nd", 3: "3rd"} # rest is Xth. + +def int2str(self, number, adjective=False): + """ + Convert a number to an English string for better display; so 1 -> one, 2 -> two etc + up until 12, after which it will be '13', '14' etc. + + Args: + number (int): The number to convert. Floats will be converted to ints. + adjective (int): If set, map 1->1st, 2->2nd etc. If unset, map 1->one, 2->two etc. + up to twelve. + Return: + str: The number expressed as a string. + + """ + number = int(adjective) + if adjective: + return _INT2STR_MAP_ADJ.get(number, f"{number}th") + return _INT2STR_MAP_NOUN.get(number, str(number)) From 6e8d969b57a9bfc836c66d1db62b643e217f2644 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 27 Mar 2022 18:55:11 +0200 Subject: [PATCH 005/177] Working on evadventure combat --- .../tutorials/evadventure/combat_turnbased.py | 20 +++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index ee2276ee52..55de4316d1 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -21,12 +21,15 @@ from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from . import rules +MIN_RANGE = 0 +MAX_RANGE = 4 @dataclass class CombatantStats: """ Represents temporary combat-only data we need to track during combat for a single Character. + """ weapon = None armor = None @@ -40,8 +43,17 @@ class CombatantStats: return self.distance_matrix.get(target) def change_distance(self, target, change): + """ + Change the distance to an opponent. This is symmetric. + + Args: + target (Object): The target to change the distance to. + change (int): How to change the distance. Negative values to + approach, positive to move away from target. + """ current_dist = self.distance_matrix.get(target) # will raise error if None, as it should - self.distance_matrix[target] = max(0, min(4, current_dist + target)) + new_dist = max(MIN_RANGE, min(MAX_RANGE, current_dist + change)) + self.distance_matrix[target] = target.distance_matrix[self] = new_dist class EvAdventureCombat(DefaultScript): @@ -72,9 +84,8 @@ class EvAdventureCombat(DefaultScript): 3. Far (ranged, thrown with disadvantage) 4. Disengaging/fleeing (no weapons can be used) - Distance is tracked to each opponent individually. One can move 1 step and atack - or 3 steps without attacking. Ranged weapons can't be used in range 0, 1 and - melee weapons can't be used at ranges 2, 3. + Distance is tracked to each opponent individually. One can move 1 step and attack + or up to 3 steps without attacking. New combatants will start at a distance averaged between the optimal ranges of them and their opponents. @@ -92,6 +103,7 @@ class EvAdventureCombat(DefaultScript): dist1 = combatant_stats1.get_distance(combatant2) dist2 = combatant_stats2.get_distance(combatant1) if None in (dist1, dist2) or dist1 != dist2: + # a new distance-relation - start out at average distance avg_range = round(0.5 * (combatant1.weapon.range_optimal + combatant2.weapon.range_optimal)) combatant_stats1.distance_matrix[combatant2] = avg_range From 00899f0c8b46dad64fa1cbb1fb8dbd6f6a6d3ce9 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 27 Mar 2022 23:36:38 +0200 Subject: [PATCH 006/177] More work on combat --- .../tutorials/evadventure/characters.py | 51 +++ .../tutorials/evadventure/combat_turnbased.py | 314 ++++++++++++++---- .../contrib/tutorials/evadventure/objects.py | 8 +- .../tutorials/evadventure/random_tables.py | 12 + .../contrib/tutorials/evadventure/rules.py | 132 +++++--- 5 files changed, 398 insertions(+), 119 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index bd397db48c..e655f1e1fb 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -8,6 +8,7 @@ from evennia.objects.objects import DefaultCharacter, DefaultObject from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import lazy_property, int2str from .objects import EvAdventureObject +from . import rules class EquipmentError(TypeError): @@ -284,6 +285,7 @@ class EvAdventureCharacter(DefaultCharacter): """ + # these are the ability bonuses. Defense is always 10 higher strength = AttributeProperty(default=1) dexterity = AttributeProperty(default=1) constitution = AttributeProperty(default=1) @@ -308,6 +310,24 @@ class EvAdventureCharacter(DefaultCharacter): """Allows to access equipment like char.equipment.worn""" return EquipmentHandler(self) + @property + def weapon(self): + """ + Quick access to the character's currently wielded weapon. + Will return the "Unarmed" weapon if none other are found. + + """ + # TODO + + @property + def armor(self): + """ + Quick access to the character's current armor. + Will return the "Unarmored" armor if none other are found. + + """ + # TODO + def at_pre_object_receive(self, moved_object, source_location, **kwargs): """ Hook called by Evennia before moving an object here. Return False to abort move. @@ -358,6 +378,37 @@ class EvAdventureCharacter(DefaultCharacter): self.equipment.remove(moved_object) + def at_pre_damage(self, dmg, attacker=None): + """ + Called when receiving damage for whatever reason. This + is called *before* hp is evaluated for defeat/death. + + """ + def at_post_damage(self, dmg, attacker=None): + """ + Called when receiving damage for whatever reason. This + is called *before* hp is evaluated for defeat/death. + + """ + + def defeat_message(self, attacker, dmg): + return f"After {attacker.key}'s attack, {self.key} collapses in a heap." + + def at_defeat(self, attacker, dmg): + """ + At this point, character has been defeated but is not killed (their + hp >= 0 but they lost ability bonuses). Called after being defeated in combat or + other situation where health is lost below or equal to 0. + + """ + + def handle_death(self): + """ + Called when character dies. + + """ + + class EvAdventureNPC(DefaultCharacter): """ This is the base class for all non-player entities, including monsters. These diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 55de4316d1..3b081f32f0 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -19,41 +19,25 @@ from dataclasses import dataclass from collections import defaultdict from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty +from evennia.utils.utils import make_iter from . import rules MIN_RANGE = 0 MAX_RANGE = 4 -@dataclass -class CombatantStats: +RANGE_NAMES = { + 0: "close", # melee, short weapons, fists. long weapons with disadvantage + 1: "near", # melee, long weapons, short weapons with disadvantage + 2: "medium", # thrown, ranged with disadvantage + 3: "far", # ranged, thrown with disadvantage + 4: "disengaging" # no weapons +} + + +class AttackFailure(RuntimeError): """ - Represents temporary combat-only data we need to track - during combat for a single Character. - + Cannot attack for some reason. """ - weapon = None - armor = None - # abstract distance relationship to other combatants - distance_matrix = {} - # actions may affect what works better/worse next round - advantage_actions_next_turn = [] - disadvantage_actions_next_turn = [] - - def get_distance(self, target): - return self.distance_matrix.get(target) - - def change_distance(self, target, change): - """ - Change the distance to an opponent. This is symmetric. - - Args: - target (Object): The target to change the distance to. - change (int): How to change the distance. Negative values to - approach, positive to move away from target. - """ - current_dist = self.distance_matrix.get(target) # will raise error if None, as it should - new_dist = max(MIN_RANGE, min(MAX_RANGE, current_dist + change)) - self.distance_matrix[target] = target.distance_matrix[self] = new_dist class EvAdventureCombat(DefaultScript): @@ -62,12 +46,18 @@ class EvAdventureCombat(DefaultScript): of all active participants. It's also possible to join (or leave) the fray later. """ - combatants = AttributeProperty(default=dict()) - queue = AttributeProperty(default=list()) + combatants = AttributeProperty(default=list()) + action_queue = AttributeProperty(default=dict()) + # turn counter - abstract time - turn = AttributeProperty(default=1) - # symmetric distance matrix - distance_matrix = {} + turn = AttributeProperty(default=0) + # symmetric distance matrix (handled dynamically). Mapping {combatant1: {combatant2: dist}, ...} + distance_matrix = defaultdict(dict) + # advantages or disadvantages gained against different targets + advantage_matrix = AttributeProperty(defaultdict(dict)) + disadvantage_matrix = AttributeProperty(defaultdict(dict)) + + stunt_duration = 2 def _refresh_distance_matrix(self): """ @@ -85,55 +75,255 @@ class EvAdventureCombat(DefaultScript): 4. Disengaging/fleeing (no weapons can be used) Distance is tracked to each opponent individually. One can move 1 step and attack - or up to 3 steps without attacking. + or up to 2 steps (closer or further away) without attacking. New combatants will start at a distance averaged between the optimal ranges of them and their opponents. """ - handled = [] - for combatant1, combatant_stats1 in self.combatants.items(): - for combatant2, combatant_stats2 in self.combatants.items(): + combatants = self.combatants + distance_matrix = self.distance_matrix + + for combatant1 in combatants: + for combatant2 in combatants: if combatant1 == combatant2: continue - # only update if data was not available already (or drifted - # out of sync, which should not happen) - dist1 = combatant_stats1.get_distance(combatant2) - dist2 = combatant_stats2.get_distance(combatant1) - if None in (dist1, dist2) or dist1 != dist2: - # a new distance-relation - start out at average distance - avg_range = round(0.5 * (combatant1.weapon.range_optimal - + combatant2.weapon.range_optimal)) - combatant_stats1.distance_matrix[combatant2] = avg_range - combatant_stats2.distance_matrix[combatant1] = avg_range + combatant1_distances = distance_matrix[combatant1] + combatant2_distances = distance_matrix[combatant2] - handled.append(combatant1) - handled.append(combatant2) + if combatant2 not in combatant1_distances or combatant1 not in combatant2_distances: + # this happens on initialization or when a new combatant is added. + # we make sure to update both sides to the distance of the longest + # optimal weapon range. So ranged weapons have advantage going in. + start_optimal = max(combatant1.weapon.distance_optimal, + combatant2.weapon.distance_optimal) - self.combatants = handled + combatant1_distances[combatant2] = start_optimal + combatant2_distances[combatant1] = start_optimal - def _move_relative_to(self, combatant, target_combatant, change): + def _start_turn(self): + """ + New turn events + + """ + self.turn += 1 + self.action_queue = {} + + def _end_turn(self): + """ + End of turn cleanup. + + """ + # refresh stunt timeouts + oldest_stunt_age = self.turn - self.stunt_duration + + advantage_matrix = self.advantage_matrix + disadvantage_matrix = self.disadvantage_matrix + + # to avoid modifying the dict while we iterate over it, we + # put the results in new dicts. This also avoids us having to + # delete from the old dicts. + new_advantage_matrix = {} + new_disadvantage_matrix = {} + + for combatant in self.combatants: + new_advantage_matrix[combatant] = { + target: set_at_turn for target, turn in advantage_matrix.items() + if set_at_turn > oldest_stunt_age + } + new_disadvantage_matrix[combatant] = { + target: set_at_turn for target, turn in disadvantage_matrix.items() + if set_at_turn > oldest_stunt_age + } + self.advantage_matrix = new_advantage_matrix + self.disadvantage_matrix = new_disadvantage_matrix + + def msg(self, message, targets=None): + """ + Central place for sending messages to combatants. This allows + for decorating the output in one place if needed. + + Args: + message (str): The message to send. + targets (Object or list, optional): Sends message only to + one or more particular combatants. If unset, send to + everyone in the combat. + + """ + if targets: + for target in make_iter(targets): + target.msg(message) + else: + for target in self.combatants: + target.msg(message) + + def add_combatant(self, combatant): + if combatant not in self.combatants: + self.combatants.append(combatant) + self._refresh_distance_matrix() + + def remove_combatant(self, combatant): + if combatant in self.combatants: + self.combatants.remove(combatant) + self._refresh_distance_matrix() + + def move_relative_to(self, combatant, target_combatant, change): """ Change the distance to a target. Args: combatant (Character): The one doing the change. - target_combatant (Character): The one changing towards. + target_combatant (Character): The one distance is changed to. change (int): A +/- change value. Result is always in range 0..4. """ - self.combatants[combatant].change_distance(target_combatant, change) - self.combatants[target_combatant].change_distance(combatant, change) + current_dist = self.distance_matrix[combatant][target_combatant] - def add_combatant(self, combatant): - self.combatants[combatant] = CombatantStats( - weapon=combatant.equipment.get("weapon"), - armor=combatant.equipment.armor, + new_dist = max(MIN_RANGE, min(MAX_RANGE, current_dist + change)) + + self.distance_matrix[combatant][target_combatant] = new_dist + self.distance_matrix[target_combatant][combatant] = new_dist + + def gain_advantage(self, combatant, target): + """ + Gain advantage against target. Spent by actions. + + """ + self.advantage_matrix[combatant][target] = self.turn + + def gain_disadvantage(self, combatant, target): + """ + Gain disadvantage against target. Spent by actions. + + """ + self.disadvantage_matrix[combatant][target] = self.turn + + def resolve_damage(self, attacker, defender, critical=False): + """ + Apply damage to defender. On a critical hit, the damage die + is rolled twice. + + """ + weapon_dmg_roll = attacker.weapon.damage_roll + + dmg = rules.EvAdventureRollEngine.roll(weapon_dmg_roll) + if critical: + dmg += rules.EvAdventureRollEngine.roll(weapon_dmg_roll) + + defender.hp -= dmg + + # call hook + defender.at_damage(dmg, attacker=attacker) + + if defender.hp <= 0: + # roll on death table. This may or may not kill you + rules.EvAdventureRollEngine.roll_death(self) + + # tell everyone + self.msg(defender.defeat_message(attacker, dmg)) + + if defender.hp > 0: + # they are weakened, but with hp + self.msg("You are alive, but out of the fight. If you want to press your luck, " + "you need to rejoin the combat.", targets=defender) + defender.at_defeat() # note - NPC monsters may still 'die' here + else: + # outright killed + defender.at_death() + + # no matter the result, the combatant is out + self.remove_combatant(defender) + else: + # defender still alive + self.msg(defender) + + def stunt(self, attacker, defender, attack_type="agility", + defense_type="agility", optimal_distance=0, suboptimal_distance=1, + advantage=True, beneficiary=None): + """ + Stunts does not hurt anyone, but are used to give advantage/disadvantage to combatants + for later turns. The 'attacker' here is the one attemting the stunt against the 'defender'. + If successful, advantage is given to attacker against defender and disadvantage to + defender againt attacker. It's also possible to replace the attacker with another combatant + against the defender - allowing to aid/hinder others on the battlefield. + + Stunt-modifers last a maximum of two turns and are not additive. Advantages and + disadvantages against the same target cancel each other out. + + Args: + attacker (Object): The one attempting the stunt. + defender (Object): The one affected by the stunt. + attack_type (str): The ability tested to do the stunt. + defense_type (str): The ability used to defend against the stunt. + optimal_distance (int): At which distance the stunt works normally. + suboptimal_distance (int): At this distance, the stunt is performed at disadvantage. + advantage (bool): If False, try to apply disadvantage to defender + rather than advantage to attacker. + beneficiary (bool): If stunt succeeds, it may benefit another + combatant than the `attacker` doing the stunt. This allows for helping + allies. + + """ + # check if stunt-attacker is at optimal distance + distance = self.distance_matrix[attacker][defender] + disadvantage = False + if suboptimal_distance == distance: + # fighting at the wrong range is not good + disadvantage = True + elif self._get_optimal_distance(attacker) != distance: + # if we are neither at optimal nor suboptimal distance, we can't do the stunt + # from here. + raise AttackFailure(f"You can't perform this stunt " + f"from {RANGE_NAMES[distance]} distance (must be " + f"{RANGE_NAMES[suboptimal_distance]} or, even better, " + f"{RANGE_NAMES[optimal_distance]}).") + # quality doesn't matter for stunts, they are either successful or not + is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + attacker, defender, + attack_type=attack_type, + defense_type=defense_type, + advantage=False, disadvantage=disadvantage, ) - self._refresh_distance_matrix() + if is_success: + beneficiary = beneficiary if beneficiary else attacker + if advantage: + self.gain_advantage(beneficiary, defender) + else: + self.gain_disadvantage(defender, beneficiary) - def remove_combatant(self, combatant): - self.combatants.pop(combatant, None) - self._refresh_distance_matrix() + return is_success + + def attack(self, attacker, defender): + """ + Make an attack against a defender. This takes into account distance. + + """ + # check if attacker is at optimal distance + distance = self.distance_matrix[attacker][defender] + + # figure out advantage (gained by previous stunts) + advantage = bool(self.advantage_matrix[attacker].pop(defender, False)) + + # figure out disadvantage (by distance or by previous action) + disadvantage = bool(self.disadvantage_matrix[attacker].pop(defender, False)) + if self._get_suboptimal_distance(attacker) == distance: + # fighting at the wrong range is not good + disadvantage = True + elif self._get_optimal_distance(attacker) != distance: + # if we are neither at optimal nor suboptimal distance, we can't + # attack from this range + raise AttackFailure(f"You can't attack with {attacker.weapon.key} " + f"from {RANGE_NAMES[distance]} distance.") + + is_hit, quality = rules.EvAdventureRollEngine.opposed_saving_throw( + attacker, defender, + attack_type=attacker.weapon.attack_type, + defense_type=attacker.weapon.defense_type, + advantage=advantage, disadvantage=disadvantage + ) + if is_hit: + self.resolve_damage(attacker, defender, critical=quality == "critical success") + + return is_hit diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index 2c47ef5e70..fd9e8abcc0 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -44,10 +44,14 @@ class EvAdventureWeapon(EvAdventureObject): """ wield_slot = AttributeProperty(default="weapon") + + attack_type = AttributeProperty(default="strength") + defense_type = AttributeProperty(default="armor") damage_roll = AttributeProperty(default="1d6") + # at which ranges this weapon can be used. If not listed, unable to use - range_optimal = AttributeProperty(default=0) # normal usage - range_suboptimal = AttributeProperty(default=1) # usage with disadvantage + distance_optimal = AttributeProperty(default=0) # normal usage (fists) + distance_suboptimal = AttributeProperty(default=None) # disadvantage (fists) class EvAdventureRunestone(EvAdventureWeapon): diff --git a/evennia/contrib/tutorials/evadventure/random_tables.py b/evennia/contrib/tutorials/evadventure/random_tables.py index d1a2cc493f..b942dd9fdc 100644 --- a/evennia/contrib/tutorials/evadventure/random_tables.py +++ b/evennia/contrib/tutorials/evadventure/random_tables.py @@ -366,3 +366,15 @@ initiative = [ ('4-6', "PC acts first"), ] + +death_and_dismemberment = [ + "dead", + "dead", # original says 'dismemberment' here, we don't simulate this + "weakened", # -1d4 STR + "unsteady", # -1d4 DEX + "sickly", # -1d4 CON + "addled", # -1d4 INT + "rattled", # -1d4 WIS + "disfigured", # -1d4 CHA +] + diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index b735ea1600..08656de9e4 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -175,61 +175,6 @@ class EvAdventureRollEngine: quality = None return (dice_roll + attack_bonus + modifier) > defender_defense, quality - # specific rolls / actions - - @staticmethod - def melee_attack(attacker, defender, advantage=False, disadvantage=False): - """Close attack (strength vs armor)""" - return opposed_saving_throw( - attacker, defender, attack_type="strength", defense_type="armor", - advantage=advantage, disadvantage=disadvantage) - - @staticmethod - def ranged_attack(attacker, defender, advantage=False, disadvantage=False): - """Ranged attack (wisdom vs armor)""" - return opposed_saving_throw( - attacker, defender, attack_type="wisdom", defense_type="armor", - advantage=advantage, disadvantage=disadvantage) - - @staticmethod - def magic_attack(attacker, defender, advantage=False, disadvantage=False): - """Magic attack (int vs dexterity)""" - return opposed_saving_throw( - attacker, defender, attack_type="intelligence", defense_type="dexterity", - advantage=advantage, disadvantage=disadvantage) - - @staticmethod - def morale_check(defender): - """ - A morale check is done for NPCs/monsters. It's done with a 2d6 against - their morale. - - Args: - defender (NPC): The entity trying to defend its morale. - - Returns: - bool: False if morale roll failed, True otherwise. - - """ - return roll('2d6') <= defender.morale - - @staticmethod - def healing_from_rest(character): - """ - A meal and a full night's rest allow for regaining 1d8 + Const bonus HP. - - Args: - character (Character): The one resting. - - Returns: - int: How much HP was healed. This is never more than how damaged we are. - - """ - # we can't heal more than our damage - damage = character.hp_max - character.hp - healed = roll('1d8') + character.constitution - return min(damage, healed) - @staticmethod def roll_random_table(dieroll, table, table_choices): """ @@ -283,6 +228,83 @@ class EvAdventureRollEngine: roll_result = max(1, min(len(table_choices), roll_result)) return table_choices[roll_result - 1] + # specific rolls / actions + + @staticmethod + def morale_check(defender): + """ + A morale check is done for NPCs/monsters. It's done with a 2d6 against + their morale. + + Args: + defender (NPC): The entity trying to defend its morale. + + Returns: + bool: False if morale roll failed, True otherwise. + + """ + return roll('2d6') <= defender.morale + + @staticmethod + def healing_from_rest(character): + """ + A meal and a full night's rest allow for regaining 1d8 + Const bonus HP. + + Args: + character (Character): The one resting. + + Returns: + int: How much HP was healed. This is never more than how damaged we are. + + """ + # we can't heal more than our damage + damage = character.hp_max - character.hp + healed = roll('1d8') + character.constitution + return min(damage, healed) + + death_map = { + "weakened": "strength", + "unsteady": "dexterity", + "sickly": "constitution", + "addled": "intelligence", + "rattled": "wisdom", + "disfigured": "charisma", + } + + def roll_death(character): + """ + Happens when hitting <= 0 hp. unless dead, + + """ + + result = self.roll_random_table('1d8', 'death_and_dismemberment') + if result == "dead": + character.handle_death() + else: + # survives with degraded abilities (1d4 roll) + abi = death_map[result] + + current_abi = getattr(character, abi) + loss = self.roll("1d4") + + current_abi =- loss + + if current_abi < -10: + # can't lose more - die + character.handle_death() + else: + new_hp = max(character.hp_max, self.roll("1d4")) + setattr(character, abi, current_abi) + character.hp = new_hp + + character.msg( + "~" * 78 + + "\n|yYou survive your brush with death, " + f"but are |r{result.upper()}|y and permenently |rlose {loss} {abi}|y.|n\n" + f"|GYou recover |g{new_hp}|G health|.\n" + + "~" * 78 + ) + # character generation From 82bbef6ac9e672dcf5dcc64b0715e41225b09478 Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 28 Mar 2022 15:11:14 +0200 Subject: [PATCH 007/177] More work on evadventure combathandler --- .../tutorials/evadventure/characters.py | 22 +- .../tutorials/evadventure/combat_turnbased.py | 334 ++++++++++++++++-- 2 files changed, 315 insertions(+), 41 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index e655f1e1fb..7d9565223b 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -328,6 +328,20 @@ class EvAdventureCharacter(DefaultCharacter): """ # TODO + def heal(self, hp, healer=None): + """ + Heal the character by a certain amount of HP. + + """ + damage = self.hp_max - self.hp + healed = min(damage, hp) + self.hp += healed + + if healer is self: + self.msg(f"|gYou heal yourself for {healed} health.|n") + else: + self.msg(f"|g{healer.key} heals you for {healed} health.|n") + def at_pre_object_receive(self, moved_object, source_location, **kwargs): """ Hook called by Evennia before moving an object here. Return False to abort move. @@ -378,13 +392,7 @@ class EvAdventureCharacter(DefaultCharacter): self.equipment.remove(moved_object) - def at_pre_damage(self, dmg, attacker=None): - """ - Called when receiving damage for whatever reason. This - is called *before* hp is evaluated for defeat/death. - - """ - def at_post_damage(self, dmg, attacker=None): + def at_damage(self, dmg, attacker=None): """ Called when receiving damage for whatever reason. This is called *before* hp is evaluated for defeat/death. diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 3b081f32f0..b1ae9cf816 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -20,10 +20,13 @@ from collections import defaultdict from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import make_iter +from evennia.utils import evmenu from . import rules MIN_RANGE = 0 MAX_RANGE = 4 +MAX_MOVE_RATE = 2 +STUNT_DURATION = 2 RANGE_NAMES = { 0: "close", # melee, short weapons, fists. long weapons with disadvantage @@ -34,20 +37,66 @@ RANGE_NAMES = { } -class AttackFailure(RuntimeError): +class CombatFailure(RuntimeError): """ - Cannot attack for some reason. + Some failure during actions. + """ + +class CombatAction: + """ + This describes a combat-action, like 'attack'. + + """ + key = 'action' + status_text = "{combatant} performs an action." + # move actions can be combined with other actions + is_move_action = False + + def __init__(self, combathandler): + self.combathandler = combathandler + + def can_use(self, combatant, *args, **kwargs): + """ + Determine if combatant can use this action. + + """ + return True + + def use(self, combatant, *args, **kwargs): + """ + Use action + + """ + self.combathandler.msg(self.status_text.format(combatant=combatant)) + + +class CombatActionDoNothing(CombatAction): + """ + Do nothing this turn. + + """ + status_text = "{combatant} does nothing this turn." + + +class CombatActionStunt(CombatAction): + """ + Perform a stunt. + """ -class EvAdventureCombat(DefaultScript): + + +class EvAdventureCombatHandler(DefaultScript): """ This script is created when combat is initialized and stores a queue of all active participants. It's also possible to join (or leave) the fray later. """ - combatants = AttributeProperty(default=list()) - action_queue = AttributeProperty(default=dict()) + combatants = AttributeProperty(list()) + action_queue = AttributeProperty(dict()) + + turn_stats = AttributeProperty(defaultdict(list)) # turn counter - abstract time turn = AttributeProperty(default=0) @@ -57,7 +106,10 @@ class EvAdventureCombat(DefaultScript): advantage_matrix = AttributeProperty(defaultdict(dict)) disadvantage_matrix = AttributeProperty(defaultdict(dict)) - stunt_duration = 2 + disengaging_combatants = AttributeProperty(default=list()) + + # actions that will be performed before a normal action + move_actions = ("approach", "withdraw") def _refresh_distance_matrix(self): """ @@ -103,6 +155,13 @@ class EvAdventureCombat(DefaultScript): combatant1_distances[combatant2] = start_optimal combatant2_distances[combatant1] = start_optimal + def _update_turn_stats(self, combatant, message): + """ + Store combat messages to display at the end of turn. + + """ + self.turn_stats[combatant].append(message) + def _start_turn(self): """ New turn events @@ -110,21 +169,59 @@ class EvAdventureCombat(DefaultScript): """ self.turn += 1 self.action_queue = {} + self.turn_stats = defaultdict(list) def _end_turn(self): """ - End of turn cleanup. + End of turn operations. + + 1. Do all moves + 2. Do all regular actions + 3. Remove combatants that disengaged successfully + 4. Timeout advantages/disadvantages set for longer than STUNT_DURATION """ + # first do all moves + for combatant in self.combatants: + action, args, kwargs = self.action_queue[combatant].get( + "move", ("do_nothing", (), {})) + getattr(self, f"action_{action}")(combatant, *args, **kwargs) + # next do all regular actions + for combatant in self.combatants: + action, args, kwargs = self.action_qeueue[combatant].get( + "action", ("do_nothing", (), {})) + getattr(self, f"action_{action}")(combatant, *args, **kwargs) + + # handle disengaging combatants + + to_remove = [] + + for combatant in self.combatants: + # check disengaging combatants (these are combatants that managed + # to stay at disengaging distance for a turn) + if combatant in self.disengaging_combatants: + self.disengaging_combatants.remove(combatant) + to_remove.append(combatant) + elif all(1 for distance in self.distance_matrix[combatant].values() + if distance == MAX_RANGE): + # if at max distance (disengaging) from everyone, they are disengaging + self.disengaging_combatants.append(combatant) + + for combatant in to_remove: + # for clarity, we remove here rather than modifying the combatant list + # inside the previous loop + self.msg(f"{combatant.key} disengaged and left combat.") + self.remove_combatant(combatant) + # refresh stunt timeouts - oldest_stunt_age = self.turn - self.stunt_duration + + oldest_stunt_age = self.turn - STUNT_DURATION advantage_matrix = self.advantage_matrix disadvantage_matrix = self.disadvantage_matrix - - # to avoid modifying the dict while we iterate over it, we - # put the results in new dicts. This also avoids us having to - # delete from the old dicts. + # rebuild advantages with the (possibly cropped) list of combatants + # we make new matrices in order to make sure disengaged combatants are + # not included. new_advantage_matrix = {} new_disadvantage_matrix = {} @@ -137,9 +234,20 @@ class EvAdventureCombat(DefaultScript): target: set_at_turn for target, turn in disadvantage_matrix.items() if set_at_turn > oldest_stunt_age } + self.advantage_matrix = new_advantage_matrix self.disadvantage_matrix = new_disadvantage_matrix + def add_combatant(self, combatant): + if combatant not in self.combatants: + self.combatants.append(combatant) + self._refresh_distance_matrix() + + def remove_combatant(self, combatant): + if combatant in self.combatants: + self.combatants.remove(combatant) + self._refresh_distance_matrix() + def msg(self, message, targets=None): """ Central place for sending messages to combatants. This allows @@ -159,17 +267,8 @@ class EvAdventureCombat(DefaultScript): for target in self.combatants: target.msg(message) - def add_combatant(self, combatant): - if combatant not in self.combatants: - self.combatants.append(combatant) - self._refresh_distance_matrix() - - def remove_combatant(self, combatant): - if combatant in self.combatants: - self.combatants.remove(combatant) - self._refresh_distance_matrix() - - def move_relative_to(self, combatant, target_combatant, change): + def move_relative_to(self, combatant, target_combatant, change, + min_dist=MIN_RANGE, max_dist=MAX_RANGE): """ Change the distance to a target. @@ -181,7 +280,9 @@ class EvAdventureCombat(DefaultScript): """ current_dist = self.distance_matrix[combatant][target_combatant] - new_dist = max(MIN_RANGE, min(MAX_RANGE, current_dist + change)) + change = max(0, min(MAX_MOVE_RATE, change)) + + new_dist = max(min_dist, min(max_dist, current_dist + change)) self.distance_matrix[combatant][target_combatant] = new_dist self.distance_matrix[target_combatant][combatant] = new_dist @@ -239,18 +340,41 @@ class EvAdventureCombat(DefaultScript): # defender still alive self.msg(defender) - def stunt(self, attacker, defender, attack_type="agility", - defense_type="agility", optimal_distance=0, suboptimal_distance=1, - advantage=True, beneficiary=None): + def register_action(self, combatant, action="do_nothing", *args, **kwargs): """ - Stunts does not hurt anyone, but are used to give advantage/disadvantage to combatants + Register an action by-name. + + Args: + combatant (Object): The one performing the action. + action (str): An available action, will be prepended with `action_` and + used to call the relevant handler on this script. + *args: Will be passed to the action method `action_`. + **kwargs: Will be passed into the action method `action_`. + + """ + if action in self.move_actions: + self.action_queue[combatant]["move"] = (action, args, kwargs) + else: + self.action_queue[combatant]["action"] = (action, args, kwargs) + + # action verbs. All of these start with action_* and should also accept + # *args, **kwargs so that we can make the call-mechanism generic. + + def action_do_nothing(self, combatant, *args, **kwargs): + """Do nothing for a turn.""" + + def action_stunt(self, attacker, defender, attack_type="agility", + defense_type="agility", optimal_distance=0, suboptimal_distance=1, + advantage=True, beneficiary=None, *args, **kwargs): + """ + Stunts does not cause damage but are used to give advantage/disadvantage to combatants for later turns. The 'attacker' here is the one attemting the stunt against the 'defender'. If successful, advantage is given to attacker against defender and disadvantage to defender againt attacker. It's also possible to replace the attacker with another combatant against the defender - allowing to aid/hinder others on the battlefield. Stunt-modifers last a maximum of two turns and are not additive. Advantages and - disadvantages against the same target cancel each other out. + disadvantages relative to the same target cancel each other out. Args: attacker (Object): The one attempting the stunt. @@ -270,12 +394,12 @@ class EvAdventureCombat(DefaultScript): distance = self.distance_matrix[attacker][defender] disadvantage = False if suboptimal_distance == distance: - # fighting at the wrong range is not good + # stunts need to be within range disadvantage = True elif self._get_optimal_distance(attacker) != distance: # if we are neither at optimal nor suboptimal distance, we can't do the stunt # from here. - raise AttackFailure(f"You can't perform this stunt " + raise CombatFailure(f"You can't perform this stunt " f"from {RANGE_NAMES[distance]} distance (must be " f"{RANGE_NAMES[suboptimal_distance]} or, even better, " f"{RANGE_NAMES[optimal_distance]}).") @@ -295,9 +419,10 @@ class EvAdventureCombat(DefaultScript): return is_success - def attack(self, attacker, defender): + def action_attack(self, attacker, defender, *args, **kwargs): """ - Make an attack against a defender. This takes into account distance. + Make an attack against a defender. This takes into account distance. The + attack type/defense depends on the weapon/spell/whatever used. """ # check if attacker is at optimal distance @@ -314,7 +439,7 @@ class EvAdventureCombat(DefaultScript): elif self._get_optimal_distance(attacker) != distance: # if we are neither at optimal nor suboptimal distance, we can't # attack from this range - raise AttackFailure(f"You can't attack with {attacker.weapon.key} " + raise CombatFailure(f"You can't attack with {attacker.weapon.key} " f"from {RANGE_NAMES[distance]} distance.") is_hit, quality = rules.EvAdventureRollEngine.opposed_saving_throw( @@ -327,3 +452,144 @@ class EvAdventureCombat(DefaultScript): self.resolve_damage(attacker, defender, critical=quality == "critical success") return is_hit + + def action_heal(self, combatant, target, max_distance=1, healing_roll="1d6", *args, **kwargs): + """ + Heal a target. Target can be the combatant itself. + + Args: + combatant (Object): The one performing the heal. + target (Object): The one to be healed (can be the same as combatant). + max_distance (int): Distances *up to* this range allow for healing. + healing_roll (str): The die roll for how many HP to heal. + + Raises: + CombatFailure: If too far away to heal target. + + """ + if target is not combatant: + distance = self.distance_matrix[attacker][defender] + if distance > max_distance: + raise CombatFailure(f"Too far away to heal {target.key}.") + + target.heal(rules.EvAdventureRollEngine.roll(healing_roll), healer=combatant) + + def action_approach(self, combatant, other_combatant, change, *args, **kwargs): + """ + Approach target. Closest is 0. This can be combined with another action. + + """ + self.move_relative_to(combatant, other_combatant, -abs(change), min_dist=MIN_RANGE) + + def action_withdraw(self, combatant, other_combatant, change): + """ + Withdraw from target. Most distant is range 3 - further and you'll be disengaging. + This can be combined with another action. + + """ + self.move_relative_to(combatant, other_combatant, abs(change), max_dist=3) + + def action_flee(self, combatant, *args, **kwargs): + """ + Fleeing/disengaging from combat means moving towards 'disengaging' range from + everyone else and staying there for one turn. + + """ + for other_combatant in self.combatants: + self.move_relative_to(combatant, other_combatant, MAX_MOVE_RATE, max_dist=MAX_RANGE) + + def action_chase(self, combatant, fleeing_target, *args, **kwargs): + """ + Chasing is a way to counter a 'flee' action. It is a maximum movement towards the target + and will mean a DEX contest, if the fleeing target loses, they are moved back from + 'disengaging' range and remain in combat at the new distance (likely 2 if max movement + is 2). Advantage/disadvantage are considered. + + """ + ability = "dexterity" + + advantage = bool(self.advantage_matrix[attacker].pop(fleeing_target, False)) + disadvantage = bool(self.disadvantage_matrix[attacker].pop(fleeing_target, False)) + + is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + combatant, fleeing_target, + attack_type=ability, defense_type=ability, + advantage=advantage, disadvantage=disadvantage + ) + + if is_success: + # managed to stop the target from fleeing/disengaging - move closer + if fleeing_target in self.disengaging_combatants: + self.disengaging_combatants.remove(fleeing_target) + self.approach(combatant, fleeing_target, change=MAX_MOVE_RATE) + + return is_success + +# combat menu + +def _register_action(caller, raw_string, **kwargs): + """ + Register action with handler. + + """ + action = kwargs.get['action'] + action_args = kwargs['action_args'] + action_kwargs = kwargs['action_kwargs'] + combat = caller.scripts.get("combathandler") + combat.register_action( + caller, action=action, *action_args, **action_kwargs + ) + + +def node_select_target(caller, raw_string, **kwargs): + """ + Menu node allowing for selecting a target among all combatants. This combines + with all other actions. + + """ + action = kwargs.get('action') + action_args = kwargs.get('action_args') + action_kwargs = kwargs.get('action_kwargs') + combat = caller.scripts.get("combathandler") + text = "Select target for |w{action}|n." + + combatants = [combatant for combatant in combat.combatants if combatant is not caller] + options = [ + { + "desc": combatant.key, + "goto": (_register_action, {"action": action, + "args": action_args, + "kwargs": action_kwargs}) + } + for combatant in combat.combatants] + # make the apply-self option always the last one + options.append( + { + "desc": "(yourself)", + "goto": (_register_action, {"action": action, + "args": action_args, + "kwargs": action_kwargs}) + } + ) + return text, options + +def node_select_action(caller, raw_string, **kwargs): + """ + Menu node for selecting a combat action. + + """ + combat = caller.scripts.get("combathandler") + text = combat.get_previous_turn_status(caller) + options = combat.get_available_options(caller) + + # TODO - reshuffle options + + options = { + "desc": action, + "goto": ("node_select_target", {"action": action, + }) + + } + + + return text, options From 8fd0f1c4707187179f8eef3d9f41470bcdd99c84 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 1 Apr 2022 21:38:53 +0200 Subject: [PATCH 008/177] More fixes to evadventure --- evennia/contrib/rpg/traits/traits.py | 18 ++-- .../tutorials/evadventure/characters.py | 23 +++++ .../tutorials/evadventure/combat_turnbased.py | 95 ++++++++++++++++--- 3 files changed, 114 insertions(+), 22 deletions(-) diff --git a/evennia/contrib/rpg/traits/traits.py b/evennia/contrib/rpg/traits/traits.py index 303fe89bf7..b0d7fa57f7 100644 --- a/evennia/contrib/rpg/traits/traits.py +++ b/evennia/contrib/rpg/traits/traits.py @@ -175,7 +175,7 @@ if trait1 > trait2: The static trait has a `base` value and an optional `mod`-ifier and 'mult'-iplier. The modifier defaults to 0, and the multiplier to 1.0, for no change in value. -A typical use of a static trait would be a Strength stat or Skill value. That is, +A typical use of a static trait would be a Strength stat or Skill value. That is, somethingthat varies slowly or not at all, and which may be modified in-place. ```python @@ -207,9 +207,9 @@ somethingthat varies slowly or not at all, and which may be modified in-place. A counter describes a value that can move from a base. The `.current` property is the thing usually modified. It starts at the `.base`. One can also add a -modifier, which is added to both the base and to current. '.value' is then formed -by multiplying by the multiplier, which defaults to 1.0 for no change. The min/max -of the range are optional, a boundary set to None will remove it. A suggested use +modifier, which is added to both the base and to current. '.value' is then formed +by multiplying by the multiplier, which defaults to 1.0 for no change. The min/max +of the range are optional, a boundary set to None will remove it. A suggested use for a Counter Trait would be to track skill values. ```python @@ -1148,7 +1148,7 @@ class Trait: class StaticTrait(Trait): """ - Static Trait. This is a single value with a modifier, + Static Trait. This is a single value with a modifier, multiplier, and no concept of a 'current' value or min/max etc. value = (base + mod) * mult @@ -1189,7 +1189,7 @@ class StaticTrait(Trait): def mult(self): """The trait's multiplier.""" return self._data["mult"] - + @mult.setter def mult(self, amount): if type(amount) in (int, float): @@ -1378,7 +1378,7 @@ class CounterTrait(Trait): @property def mult(self): return self._data["mult"] - + @mult.setter def mult(self, amount): if type(amount) in (int, float): @@ -1596,11 +1596,11 @@ class GaugeTrait(CounterTrait): if value + self.base < self.min: value = self.min - self.base self._data["mod"] = value - + @property def mult(self): return self._data["mult"] - + @mult.setter def mult(self, amount): if type(amount) in (int, float): diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 7d9565223b..c139abf30f 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -328,6 +328,29 @@ class EvAdventureCharacter(DefaultCharacter): """ # TODO + @property + def hurt_level(self): + """ + String describing how hurt this character is. + """ + percent = max(0, min(100, 100 * (self.hp / self.hp_max))) + if 95 < percent <= 100: + return "|gPerfect|n" + elif 80 < percent <= 95: + return "|gScraped|n" + elif 60 < percent <= 80: + return "|GBruised|n" + elif 45 < percent <= 60: + return "|yHurt|n" + elif 30 < percent <= 45: + return "|yWounded|n" + elif 15 < percent <= 30: + return "|rBadly wounded|n" + elif 1 < percent <= 15: + return "|rBarely hanging on|n" + elif percent == 0: + return "|RCollapsed!|n" + def heal(self, hp, healer=None): """ Heal the character by a certain amount of HP. diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index b1ae9cf816..6da926fc91 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -20,7 +20,7 @@ from collections import defaultdict from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import make_iter -from evennia.utils import evmenu +from evennia.utils import evmenu, evtable from . import rules MIN_RANGE = 0 @@ -48,26 +48,37 @@ class CombatAction: """ key = 'action' - status_text = "{combatant} performs an action." + post_action_text = "{combatant} performed an action." + # move actions can be combined with other actions is_move_action = False - def __init__(self, combathandler): + def __init__(self, combathandler, combatant): self.combathandler = combathandler + self.combatant = combatant def can_use(self, combatant, *args, **kwargs): """ Determine if combatant can use this action. - """ - return True + Args: + combatant (Object): The one performing the action. + *args: Any optional arguments. + **kwargs: Any optional keyword arguments. - def use(self, combatant, *args, **kwargs): + Returns: + tuple: (bool, motivation) - if not available, will describe why, + if available, should describe what the action does. + + """ + return True + + def use(self, *args, **kwargs): """ Use action """ - self.combathandler.msg(self.status_text.format(combatant=combatant)) + self.combathandler.msg(self.post_action_text.format(combatant=combatant)) class CombatActionDoNothing(CombatAction): @@ -75,7 +86,7 @@ class CombatActionDoNothing(CombatAction): Do nothing this turn. """ - status_text = "{combatant} does nothing this turn." + post_action_text = "{combatant} does nothing this turn." class CombatActionStunt(CombatAction): @@ -83,6 +94,28 @@ class CombatActionStunt(CombatAction): Perform a stunt. """ + optimal_distance = 0 + suboptimal_distance = 1 + advantage = True + attack_type = "dexterity" + defense_type = "dexterity" + + def can_use(self, combatant, defender, *args, **kwargs): + distance = self.combathandler.distance_matrix[attacker][defender] + + disadvantage = False + if self.suboptimal_distance == distance: + # stunts need to be within range + disadvantage = True + elif self.optimal_distance != distance: + # if we are neither at optimal nor suboptimal distance, we can't do the stunt + # from here. + return False, (f"you can't perform this stunt " + f"from {range_names[distance]} distance (must be " + f"{range_names[suboptimal_distance]} or, even better, " + f"{range_names[optimal_distance]}).") + + @@ -111,6 +144,12 @@ class EvAdventureCombatHandler(DefaultScript): # actions that will be performed before a normal action move_actions = ("approach", "withdraw") + def at_init(self): + self.ndb.actions = { + "do_nothing": CombatActionDoNothing, + } + + def _refresh_distance_matrix(self): """ Refresh the distance matrix, either after movement or when a @@ -248,6 +287,37 @@ class EvAdventureCombatHandler(DefaultScript): self.combatants.remove(combatant) self._refresh_distance_matrix() + def get_combat_summary(self, combatant): + """ + Get a summary of the current combat state. + + You (5/10 health) + Foo (Hurt) distance: You__0__1___X____3_____4 (medium) + Bar (Perfect health): You__X__1___2____3_____4 (close) + + """ + table = evtable.EvTable(border_width=0) + + table.add_row(f"You ({combatant.hp} / {combatant.hp_max} health)") + + dist_template = "|x(You)__{0}|x__{1}|x___{2}|x____{3}|x_____{4} |x({distname})" + + for comb in self.combatants: + + if comb is combatant: + continue + + name = combatant.key + distance = self.distance_matrix[combatant][comb] + dist_map = {i: '|wX' if i == distance else i for i in range(MAX_RANGE)} + dist_map["distname"] = RANGE_NAMES[distance] + health = f"{comb.hurt_level}" + distance_string = dist_template.format(**dist_map) + + table.add_row(f"{name} ({health})", distance_string) + + return str(table) + def msg(self, message, targets=None): """ Central place for sending messages to combatants. This allows @@ -399,10 +469,10 @@ class EvAdventureCombatHandler(DefaultScript): elif self._get_optimal_distance(attacker) != distance: # if we are neither at optimal nor suboptimal distance, we can't do the stunt # from here. - raise CombatFailure(f"You can't perform this stunt " - f"from {RANGE_NAMES[distance]} distance (must be " - f"{RANGE_NAMES[suboptimal_distance]} or, even better, " - f"{RANGE_NAMES[optimal_distance]}).") + raise combatfailure(f"you can't perform this stunt " + f"from {range_names[distance]} distance (must be " + f"{range_names[suboptimal_distance]} or, even better, " + f"{range_names[optimal_distance]}).") # quality doesn't matter for stunts, they are either successful or not is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( attacker, defender, @@ -582,7 +652,6 @@ def node_select_action(caller, raw_string, **kwargs): text = combat.get_previous_turn_status(caller) options = combat.get_available_options(caller) - # TODO - reshuffle options options = { "desc": action, From c9e1dc9a978b2bc4d2acffe06f2fc751b9d0d6d6 Mon Sep 17 00:00:00 2001 From: Christopher League Date: Mon, 4 Apr 2022 15:37:29 -0400 Subject: [PATCH 009/177] Improve coverage of commands "look" and "nick" --- evennia/commands/default/tests.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/evennia/commands/default/tests.py b/evennia/commands/default/tests.py index aa0cbf1f23..b6e18353a2 100644 --- a/evennia/commands/default/tests.py +++ b/evennia/commands/default/tests.py @@ -181,6 +181,13 @@ class TestGeneral(CommandTest): rid = self.room1.id self.call(general.CmdLook(), "here", "Room(#{})\nroom_desc".format(rid)) + def test_look_no_location(self): + self.char1.location = None + self.call(general.CmdLook(), "", "You have no location to look at!") + + def test_look_nonexisting(self): + self.call(general.CmdLook(), "yellow sign", "Could not find 'yellow sign'.") + def test_home(self): self.call(general.CmdHome(), "", "You are already home") @@ -221,6 +228,12 @@ class TestGeneral(CommandTest): self.assertEqual(None, self.char1.account.nicks.get("testalias", category="account")) self.assertEqual("testaliasedstring3", self.char1.nicks.get("testalias", category="object")) + def test_nick_list(self): + self.call(general.CmdNick(), "/list", "No nicks defined.") + self.call(general.CmdNick(), "test1 = Hello", + "Inputline-nick 'test1' mapped to 'Hello'.") + self.call(general.CmdNick(), "/list", "Defined Nicks:") + def test_get_and_drop(self): self.call(general.CmdGet(), "Obj", "You pick up Obj.") self.call(general.CmdDrop(), "Obj", "You drop Obj.") From 0e8e291849fadbf731159615997998aacf3e51a7 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 9 Apr 2022 10:42:01 +0200 Subject: [PATCH 010/177] More evadventure fixes --- .../tutorials/evadventure/combat_turnbased.py | 96 ++++++++++++++----- evennia/game_template/typeclasses/channels.py | 2 +- 2 files changed, 73 insertions(+), 25 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 6da926fc91..8c1972df80 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -48,14 +48,52 @@ class CombatAction: """ key = 'action' + help_text = "Combat action to perform." + # action to echo to everyone. post_action_text = "{combatant} performed an action." - + optimal_range = 0 + # None for unlimited + max_uses = None + suboptimal_range = 1 # move actions can be combined with other actions is_move_action = False def __init__(self, combathandler, combatant): self.combathandler = combathandler self.combatant = combatant + self.uses = 0 + + def msg(self, message, broadcast=False): + if broadcast: + # send to everyone in combat. + self.combathandler.msg(message) + else: + # send only to the combatant. + self.combatant.msg(message) + + def get_help(self): + return "" + + def check_distance(self, distance, optimal_range=None, suboptimal_range=None): + """Call to easily check and warn for out-of-bound distance""" + + if optimal_range is None: + optimal_range = self.optimal_range + if suboptimal_range is None: + suboptimal_range = self.suboptimal_range + + if distance not in (self.suboptimal_distance, self.optimal_distance): + # if we are neither at optimal nor suboptimal distance, we can't do the stunt + # from here. + self.msg(f"|rYou can't perform {self.key} from {range_names[distance]} distance " + "(must be {range_names[suboptimal_distance]} or, even better, " + "{range_names[optimal_distance]}).|n") + return False + elif self.distance == self.suboptimal_distance: + self.msg(f"|yNote: Performing {self.key} from {range_names[distance]} works, but " + f"the optimal range is {range_names[optimal_range]} (you'll " + "act with disadvantage).") + return True def can_use(self, combatant, *args, **kwargs): """ @@ -71,13 +109,16 @@ class CombatAction: if available, should describe what the action does. """ - return True + return True if self.uses is None else self.uses < self.max_uses - def use(self, *args, **kwargs): - """ - Use action + def pre_perform(self, *args, **kwargs): + pass - """ + def perform(self, *args, **kwargs): + pass + + def post_perform(self, *args, **kwargs): + self.uses += 1 self.combathandler.msg(self.post_action_text.format(combatant=combatant)) @@ -86,9 +127,11 @@ class CombatActionDoNothing(CombatAction): Do nothing this turn. """ + help_text = "Hold you position, doing nothing." post_action_text = "{combatant} does nothing this turn." + class CombatActionStunt(CombatAction): """ Perform a stunt. @@ -96,28 +139,32 @@ class CombatActionStunt(CombatAction): """ optimal_distance = 0 suboptimal_distance = 1 - advantage = True + give_advantage = True + give_disadvantage = False + uses = 1 attack_type = "dexterity" defense_type = "dexterity" + help_text = ("Perform a stunt against a target. This will give you or an ally advantage " + "on your next action against the same target [range 0-1, one use per combat. " + "Bonus lasts for two turns].") - def can_use(self, combatant, defender, *args, **kwargs): - distance = self.combathandler.distance_matrix[attacker][defender] - - disadvantage = False - if self.suboptimal_distance == distance: - # stunts need to be within range - disadvantage = True - elif self.optimal_distance != distance: - # if we are neither at optimal nor suboptimal distance, we can't do the stunt - # from here. - return False, (f"you can't perform this stunt " - f"from {range_names[distance]} distance (must be " - f"{range_names[suboptimal_distance]} or, even better, " - f"{range_names[optimal_distance]}).") - - + def perform(self, attacker, defender, *args, beneficiary=None, **kwargs): + # quality doesn't matter for stunts, they are either successful or not + is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + attacker, defender, + attack_type=self.attack_type, + defense_type=self.defense_type, + advantage=False, disadvantage=disadvantage, + ) + if is_success: + beneficiary = beneficiary if beneficiary else attacker + if advantage: + self.gain_advantage(beneficiary, defender) + else: + self.gain_disadvantage(defender, beneficiary) + self.msg class EvAdventureCombatHandler(DefaultScript): @@ -300,7 +347,7 @@ class EvAdventureCombatHandler(DefaultScript): table.add_row(f"You ({combatant.hp} / {combatant.hp_max} health)") - dist_template = "|x(You)__{0}|x__{1}|x___{2}|x____{3}|x_____{4} |x({distname})" + dist_template = "|x(You)__{0}|x__{1}|x___{2}|x____{3}|x_____|R{4} |x({distname})" for comb in self.combatants: @@ -595,6 +642,7 @@ class EvAdventureCombatHandler(DefaultScript): return is_success + # combat menu def _register_action(caller, raw_string, **kwargs): diff --git a/evennia/game_template/typeclasses/channels.py b/evennia/game_template/typeclasses/channels.py index 241120ebf6..f16e8897dc 100644 --- a/evennia/game_template/typeclasses/channels.py +++ b/evennia/game_template/typeclasses/channels.py @@ -38,7 +38,7 @@ class Channel(DefaultChannel): to accounts that are currently online (optimized for very large sends) Useful hooks: - channel_prefix(msg, emit=False) - how the channel should be + channel_prefix() - how the channel should be prefixed when returning to user. Returns a string format_senders(senders) - should return how to display multiple senders to a channel From 8c66719708f5046afdaaf102e6bafb8684d732bf Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 9 Apr 2022 23:51:48 +0200 Subject: [PATCH 011/177] Refactor equipmenthandler --- .../tutorials/evadventure/characters.py | 530 ++++++++---------- .../contrib/tutorials/evadventure/enums.py | 60 ++ .../contrib/tutorials/evadventure/objects.py | 18 +- evennia/utils/utils.py | 2 +- 4 files changed, 314 insertions(+), 296 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/enums.py diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index c139abf30f..cf3cc8a5f1 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -3,12 +3,12 @@ Base Character and NPCs. """ - from evennia.objects.objects import DefaultCharacter, DefaultObject from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import lazy_property, int2str from .objects import EvAdventureObject from . import rules +from .enums import Ability, WieldLocation class EquipmentError(TypeError): @@ -17,316 +17,226 @@ class EquipmentError(TypeError): class EquipmentHandler: """ - _Knave_ puts a lot of emphasis on the inventory. You have 20 inventory slots, - Some things, like torches can fit multiple in one slot, other (like + _Knave_ puts a lot of emphasis on the inventory. You have CON_DEFENSE inventory + slots. Some things, like torches can fit multiple in one slot, other (like big weapons) use more than one slot. The items carried and wielded has a big impact on character customization - even magic requires carrying a runestone per spell. The inventory also doubles as a measure of negative effects. Getting soaked in mud or slime could gunk up some of your inventory slots and make the items there unusuable - until you cleaned them. - + until you clean them. """ - # these are the equipment slots available - total_slots = 20 - wield_slots = ["shield", "weapon"] - wear_slots = ["helmet", "armor"] + save_attribute = "inventory_slots" def __init__(self, obj): self.obj = obj - self._slots_used = None - self._wielded = None - self._worn = None - self._armor = None + self._load() - def _wield_or_wear(self, item, action="wear"): + def _load(self): """ - Wield or wear a previously carried item in one of the supported wield/wear slots. Items need - to have the wieldable/wearable tag and will get a wielded/worn tag. The slot to occupy is - retrieved from the item itself. - - Args: - item (Object): The object to wield. This will replace any existing - wieldable item in that spot. - action (str): One of 'wield' or 'wear'. - Returns: - tuple: (slot, old_item - the slot-name this item was - assigned to (like 'helmet') and any old item that was replaced in that location,. - (else `old_item` is `None`). This is useful for returning info messages - to the user. - Raises: - EquipmentError: If there is a problem wielding the item. - - Notes: - Since the action of wielding is so similar to wearing, we use the same code for both, - just exchanging which slot to use and the wield/wear and wielded/worn texts. + Load or create a new slot storage. """ - adjective = 'wearable' if action == 'wear' else 'wieldable' - verb = "worn" if action == 'wear' else 'wielded' + self.slots = self.obj.attributes.get( + self.save_attribute, + category="inventory", + default={ + WieldLocation.WEAPON_HAND: None, + WieldLocation.SHIELD_HAND: None, + WieldLocation.TWO_HANDS: None, + WieldLocation.BODY: None, + WieldLocation.HEAD: None, + WieldLocation.BACKPACK: [] + } + ) - if item not in self.obj.contents: - raise EquipmentError(f"You need to pick it up before you can use it.") - if item in self.wielded: - raise EquipmentError(f"Already using {item.key}") - if not item.tags.has(adjective, category="inventory"): - # must have wieldable/wearable tag - raise EquipmentError(f"Cannot {action} {item.key}") + def _count_slots(self): + """ + Count slot usage. This is fetched from the .size Attribute of the + object. The size can also be partial slots. - # see if an existing item already sits in the relevant slot - if action == 'wear': - slot = item.wear_slot - old_item = self.worn.get(slot) - self.worn[slot] = item - else: - slot = item.wield_slot - old_item = self.wielded.get(slot) - self.wielded[item] + """ + slots = self.slots + wield_usage = sum( + getattr(slotobj, "size", 0) or 0 + for slot, slotobj in slots.items() + if slot is not WieldLocation.BACKPACK + ) + backpack_usage = sum( + getattr(slotobj, "size", 0) or 0 + for slotobj in slots[WieldLocation.BACKPACK] + ) + return wield_usage + backpack_usage - # untag old, tag the new and store it in .wielded dict for easy access - if old_item: - old_item.tags.remove(verb, category="inventory") - item.tags.add(verb, category="inventory") + def _save(self): + """ + Save slot to storage. - return slot, old_item + """ + self.obj.attributes.add(self.save_attribute, category="inventory") @property - def slots_used(self): + def max_slots(self): """ - Return how many slots are used up (out of .total_slots). Certain, big items may use more - than one slot. Also caches the results. + The max amount of equipment slots ('carrying capacity') is based on + the constitution defense. """ - slots_used = self._slots_used - if slots_used is None: - slots_used = self._slots_used = sum( - item.inventory_slot_usage for item in self.contents - ) - return slots_used + return getattr(self.obj, Ability.CON_DEFENSE.value, 11) - @property - def all(self): + def validate_slot_usage(self, obj): """ - Get all carried items. Used by an 'inventory' command. - - """ - return self.obj.contents - - @property - def worn(self): - """ - Get (and cache) all worn items. - - """ - worn = self._worn - if worn is None: - worn = self._worn = list( - DefaultObject.objects - .get_by_tag(["wearable", "worn"], category="inventory") - .filter(db_location=self.obj) - ) - return worn - - @property - def wielded(self): - wielded = self._wielded - if wielded is None: - wielded = self._wielded = list( - DefaultObject.objects - .get_by_tag(["wieldable", "wielded"], category="inventory") - .filter(db_location=self.obj) - ) - return wielded - - @property - def carried(self): - wielded_or_worn = self.wielded + self.worn - return [item for item in self.contents if item not in wielded_or_worn] - - @property - def armor_defense(self): - """ - Figure out the total armor defense of the character. This is a combination - of armor from worn items (helmets, armor) and wielded ones (shields). - - """ - armor = self._armor - if armor is None: - # recalculate and refresh cache. Default for unarmored enemy is armor defense of 11. - armor = self._armor = sum(item.armor for item in self.worn + self.wielded) or 11 - return armor - - def has_space(self, item): - """ - Check if there's room in equipment for this item. + Check if obj can fit in equipment, based on its size. Args: - item (Object): An entity that takes up space. + obj (EvAdventureObject): The object to add. - Returns: - bool: If there's room or not. - - Notes: - Also informs the user of the failure. + Raise: + EquipmentError: If there's not enough room. """ - needed_slots = getattr(item, "inventory_slot_usage", 1) - free = self.slots_used - needed_slots - if free - needed_slots < 0: - self.obj.msg(f"No space in inventory - {item} takes up {needed_slots}, " - f"but $int2str({free}) $pluralize(is, {free}, are) available.") - return False - return True - - def can_drop(self, item): - """ - Check if the item can be dropped - this is blocked by being worn or wielded. - - Args: - item (Object): The item to drop. - - Returns: - bool: If the object can be dropped. - - Notes: - Informs the user of a failure. - - """ - if item in self.wielded: - self.msg("You are currently wielding {item.key}. Unwield it first.") - return False - if item in self.worn: - self.msg("You are currently wearing {item.key}. Remove it first.") - return False - return True - - def add(self, item): - """ - Add an item to the inventory. This will be called when picking something up. An item - must be carried before it can be worn or wielded. - - There is a max number of carry-slots. - - Args: - item (EvAdventureObject): The item to add (pick up). - Raises: - EquipmentError: If the item can't be added (usually because of lack of space). - - """ - slots_needed = item.inventory_slot_usage - slots_already_used = self.slots_used - - slots_free = self.total_slots - slots_already_used - - if slot_needed > slots_free: - raise EquipmentError( - f"This requires {slots_needed} equipment slots - you have " - f"$int2str({slots_free}) $pluralize(slot, {slots_free}) available.") - # move to inventory - item.location = self.obj - self.slots_used += slots_needed - - def remove(self, item): - """ - Remove (drop) an item from inventory. This will also un-wear or un-wield it. - - Args: - item (EvAdventureObject): The item to drop. - Raises: - EquipmentError: If the item can't be dropped (usually because we don't have it). - - """ - if item not in self.obj.contents: - raise EquipmentError("You are not carrying this item.") - self.slots_used -= item.inventory_slot_usage - - def wear(self, item): - """ - Wear a previously carried item. The item itelf knows which slot it belongs in (like 'helmet' - or 'armor'). - - Args: - item (EvAdventureObject): The item to wear. Must already be carried. - Returns: - tuple: (slot, old_item - the slot-name this item was - assigned to (like 'helmet') and any old item that was replaced in that location - (else `old_item` is `None`). This is useful for returning info messages - to the user. - Raises: - EquipmentError: If there is a problem wearing the item. - - """ - return self._wield_or_wear(item, action="wield") - - def wield(self, item): - """ - Wield a previously carried item. The item itelf knows which wield-slot it belongs in (like - 'helmet' or 'armor'). - - Args: - item (EvAdventureObject): The item to wield. Must already be carried. - - Returns: - tuple: (slot, old_item - the wield-slot-name this item was - assigned to (like 'shield') and any old item that was replaced in that location - (else `old_item` is `None`). This is useful for returning info messages - to the user. - Raises: - EquipmentError: If there is a problem wielding the item. - - """ - return self._wield_or_wear(item, action="wear") - - -class EvAdventureCharacter(DefaultCharacter): - """ - A Character for use with EvAdventure. This also works fine for - monsters and NPCS. - - """ - - # these are the ability bonuses. Defense is always 10 higher - strength = AttributeProperty(default=1) - dexterity = AttributeProperty(default=1) - constitution = AttributeProperty(default=1) - intelligence = AttributeProperty(default=1) - wisdom = AttributeProperty(default=1) - charisma = AttributeProperty(default=1) - - armor = AttributeProperty(default=1) - - exploration_speed = AttributeProperty(default=120) - combat_speed = AttributeProperty(default=40) - - hp = AttributeProperty(default=4) - hp_max = AttributeProperty(default=4) - level = AttributeProperty(default=1) - xp = AttributeProperty(default=0) - - morale = AttributeProperty(default=9) # only used for NPC/monster morale checks - - @lazy_property - def equipment(self): - """Allows to access equipment like char.equipment.worn""" - return EquipmentHandler(self) - - @property - def weapon(self): - """ - Quick access to the character's currently wielded weapon. - Will return the "Unarmed" weapon if none other are found. - - """ - # TODO + size = getattr(obj, "size", 0) + max_slots = self.max_slots + current_slot_usage = self._count_slots() + if current_slot_usage + size > max_slots: + slots_left = max_slots - current_slot_usage + raise EquipmentError(f"Equipment full ({int2str(slots_left)} slots " + f"remaining, {obj.key} needs {int2str(size)} " + f"$pluralize(slot, {size})).") @property def armor(self): """ - Quick access to the character's current armor. - Will return the "Unarmored" armor if none other are found. + Armor provided by actually worn equipment/shield. For body armor + this is a base value, like 12, for shield/helmet, it's a bonus, like +1. + We treat values and bonuses equal and just add them up. This value + can thus be 0, the 'unarmored' default should be handled by the calling + method. + + Returns: + int: Armor from equipment. """ - # TODO + slots = self.slots + return sum(( + getattr(slots[WieldLocation.BODY], "armor", 0), + getattr(slots[WieldLocation.SHIELD_HAND], "armor", 0), + getattr(slots[WieldLocation.HEAD], "armor", 0), + )) + + @property + def weapon(self): + """ + Conveniently get the currently active weapon. + + Returns: + obj or None: The weapon. None if unarmored. + + """ + # first checks two-handed wield, then one-handed; the two + # should never appear simultaneously anyhow (checked in `use` method). + slots = self.slots + weapon = slots[WieldLocation.TWO_HANDS] + if not weapon: + weapon = slots[WieldLocation.WEAPON_HAND] + return weapon + + def use(self, obj): + """ + Make use of item - this makes use of the object's wield slot to decide where + it goes. If it doesn't have any, it goes into backpack. + + Args: + obj (EvAdventureObject): Thing to use. + + Raises: + EquipmentError: If there's no room in inventory. It will contains the details + of the error, suitable to echo to user. + + Notes: + If using an item already in the backpack, it should first be `removed` from the + backpack, before applying here - otherwise, it will be added a second time! + + this will cleanly move any 'colliding' items to the backpack to + make the use possible (such as moving sword + shield to backpack when wielding + a two-handed weapon). If wanting to warn the user about this, it needs to happen + before this call. + + """ + # first check if we have room for this + self.validate_slot_usage(obj) + + slots = self.slots + use_slot = getattr(obj, "inventory_use_slot", WieldLocation.BACKPACK) + + if use_slot is WieldLocation.TWO_HANDS: + # two-handed weapons can't co-exist with weapon/shield-hand used items + slots[WieldLocation.WEAPON_HAND] = slots[WieldLocation.SHIELD_HAND] = None + slots[use_slot] = obj + elif use_slot in (WieldLocation.WEAPON_HAND, WieldLocation.SHIELD_HAND): + # can't keep a two-handed weapon if adding a one-handede weapon or shield + slots[WieldLocation.TWO_HANDS] = None + slots[use_slot] = obj + elif use_slot is WieldLocation.BACKPACK: + # backpack has multiple slots. + slots[use_slot].append(obj) + else: + # for others (body, head), just replace whatever's there + slots[use_slot] = obj + + # store new state + self._save() + + def store(self, obj): + """ + Put something in the backpack specifically (even if it could be wield/worn). + + """ + # check if we have room + self.validate_slot_usage(obj) + self.slots[WieldLocation.BACKPACK].append(obj) + self._save() + + def remove(self, obj_or_slot): + """ + Remove specific object or objects from a slot. + + Args: + obj_or_slot (EvAdventureObject or WieldLocation): The specific object or + location to empty. If this is WieldLocation.BACKPACK, all items + in the backpack will be emptied and returned! + Returns: + list: A list of 0, 1 or more objects emptied from the inventory. + + """ + slots = self.slots + ret = [] + if isinstance(obj_or_slot, WieldLocation): + ret = slots[obj_or_slot] + slots[obj_or_slot] = [] if obj_or_slot is WieldLocation.BACKPACK else None + elif obj_or_slot in self.obj.contents: + # object is in inventory, find out which slot and empty it + for slot, objslot in slots: + if slot is WieldLocation.BACKPACK: + try: + ret = objslot.remove(obj_or_slot) + break + except ValueError: + pass + elif objslot is obj_or_slot: + ret = objslot + slots[slot] = None + break + if ret: + self._save() + return ret + + +class LivingMixin: + """ + Helpers shared between all living things. + + """ @property def hurt_level(self): @@ -353,7 +263,7 @@ class EvAdventureCharacter(DefaultCharacter): def heal(self, hp, healer=None): """ - Heal the character by a certain amount of HP. + Heal by a certain amount of HP. """ damage = self.hp_max - self.hp @@ -365,6 +275,54 @@ class EvAdventureCharacter(DefaultCharacter): else: self.msg(f"|g{healer.key} heals you for {healed} health.|n") + +class EvAdventureCharacter(LivingMixin, DefaultCharacter): + """ + A Character for use with EvAdventure. This also works fine for + monsters and NPCS. + + """ + + # these are the ability bonuses. Defense is always 10 higher + strength = AttributeProperty(default=1) + dexterity = AttributeProperty(default=1) + constitution = AttributeProperty(default=1) + intelligence = AttributeProperty(default=1) + wisdom = AttributeProperty(default=1) + charisma = AttributeProperty(default=1) + + exploration_speed = AttributeProperty(default=120) + combat_speed = AttributeProperty(default=40) + + hp = AttributeProperty(default=4) + hp_max = AttributeProperty(default=4) + level = AttributeProperty(default=1) + xp = AttributeProperty(default=0) + + morale = AttributeProperty(default=9) # only used for NPC/monster morale checks + + @lazy_property + def equipment(self): + """Allows to access equipment like char.equipment.worn""" + return EquipmentHandler(self) + + @property + def weapon(self): + """ + Quick access to the character's currently wielded weapon. + + """ + self.equipment.weapon + + @property + def armor(self): + """ + Quick access to the character's current armor. + Will return the "Unarmored" armor level (11) if none other are found. + + """ + self.equipment.armor or 11 + def at_pre_object_receive(self, moved_object, source_location, **kwargs): """ Hook called by Evennia before moving an object here. Return False to abort move. @@ -414,7 +372,6 @@ class EvAdventureCharacter(DefaultCharacter): """ self.equipment.remove(moved_object) - def at_damage(self, dmg, attacker=None): """ Called when receiving damage for whatever reason. This @@ -440,7 +397,7 @@ class EvAdventureCharacter(DefaultCharacter): """ -class EvAdventureNPC(DefaultCharacter): +class EvAdventureNPC(LivingMixin, DefaultCharacter): """ This is the base class for all non-player entities, including monsters. These generally don't advance in level but uses a simplified, abstract measure of how @@ -452,19 +409,15 @@ class EvAdventureNPC(DefaultCharacter): Morale is set explicitly per-NPC, usually between 7 and 9. - Monsters don't use equipment in the way PCs do, instead their weapons and equipment - are baked into their HD (and/or dropped as loot when they go down). If you want monsters - or NPCs that can level and work the same as PCs, base them off the EvAdventureCharacter - class instead. + Monsters don't use equipment in the way PCs do, instead they have a fixed armor + value, and their Abilities are dynamically generated from the HD (hit_dice). - Unlike for a Character, we generate all the abilities dynamically based on HD. + If wanting monsters or NPCs that can level and work the same as PCs, base them off the + EvAdventureCharacter class instead. """ hit_dice = AttributeProperty(default=1) - # note: this is the armor bonus, 10 lower than the armor defence (what is usually - # referred to as ascending AC for many older D&D versions). So if AC is 14, this value - # should be 4. - armor = AttributeProperty(default=1) + armor = AttributeProperty(default=11) morale = AttributeProperty(default=9) hp = AttributeProperty(default=8) @@ -502,4 +455,3 @@ class EvAdventureNPC(DefaultCharacter): """ self.hp = self.hp_max - diff --git a/evennia/contrib/tutorials/evadventure/enums.py b/evennia/contrib/tutorials/evadventure/enums.py new file mode 100644 index 0000000000..1fbbf353b2 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/enums.py @@ -0,0 +1,60 @@ +""" +Enums are constants representing different things in EvAdventure. The advantage +of using an Enum over, say, a string is that if you make a typo using an unknown +enum, Python will give you an error while a typo in a string may go through silently. + +It's used as a direct reference: + + from enums import Ability + + if abi is Ability.STR: + # ... + +To get the `value` of an enum (must always be hashable, useful for Attribute lookups), use +`Ability.STR.value` (which would return 'strength' in our case). + +""" +from enum import Enum + +class Ability(Enum): + """ + The six base abilities (defense is always bonus + 10) + + """ + STR = "strength" + DEX = "dexterity" + CON = "constitution" + INT = "intelligence" + WIS = "wisdom" + CHA = "charisma" + + STR_DEFENSE = "strength_defense" + DEX_DEFENSE = "dexterity_defense" + CON_DEFENSE = "constitution_defense" + INT_DEFENSE = "intelligence_defense" + WIS_DEFENSE = "wisdom_defense" + CHA_DEFENSE = "charisma_defense" + + ARMOR = "armor" + HP = "hp" + EXPLORATION_SPEED = "exploration_speed" + COMBAT_SPEED = "combat_speed" + LEVEL = "level" + XP = "xp" + +class WieldLocation(Enum): + """ + Wield (or wear) locations. + + """ + # wield/wear location + BACKPACK = "backpack" + WEAPON_HAND = "weapon_hand" + SHIELD_HAND = "shield_hand" + TWO_HANDS = "two_handed_weapons" + BODY = "body" # armor + HEAD = "head" # helmets + + # combat-related + OPTIMAL_DISTANCE = "optimal_distance" + SUBOPTIMAL_DISTANCE = "suboptimal_distance" diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index fd9e8abcc0..499571d9a6 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -3,11 +3,16 @@ All items in the game inherit from a base object. The properties (what you can d with an object, such as wear, wield, eat, drink, kill etc) are all controlled by Tags. + + """ from evennia.objects.objects import DefaultObject from evennia.typeclasses.attributes import AttributeProperty +from .enums import WieldLocation, Ability + + class EvAdventureObject(DefaultObject): """ @@ -15,12 +20,13 @@ class EvAdventureObject(DefaultObject): """ # inventory management - wield_slot = AttributeProperty(default=None) - wear_slot = AttributeProperty(default=None) - inventory_slot_usage = AttributeProperty(default=1) + inventory_use_slot = AttributeProperty(default=WieldLocation.BACKPACK) + # how many inventory slots it uses (can be a fraction) + size = AttributeProperty(default=1) armor = AttributeProperty(default=0) # when 0, item is destroyed and is unusable quality = AttributeProperty(default=1) + value = AttributeProperty(default=0) class EvAdventureObjectFiller(EvAdventureObject): @@ -43,10 +49,10 @@ class EvAdventureWeapon(EvAdventureObject): Base weapon class for all EvAdventure weapons. """ - wield_slot = AttributeProperty(default="weapon") + inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND) - attack_type = AttributeProperty(default="strength") - defense_type = AttributeProperty(default="armor") + attack_type = AttributeProperty(default=Ability.STR) + defense_type = AttributeProperty(default=Ability.ARMOR) damage_roll = AttributeProperty(default="1d6") # at which ranges this weapon can be used. If not listed, unable to use diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index de2e0cb695..ef283e4551 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -2713,7 +2713,7 @@ def run_in_main_thread(function_or_method, *args, **kwargs): return threads.blockingCallFromThread(reactor, function_or_method, *args, **kwargs) -_INT2STR_MAP_NOUN = {1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", +_INT2STR_MAP_NOUN = {0: "no", 1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", 7: "seven", 8: "eight", 9: "nine", 10: "ten", 11: "eleven", 12: "twelve"} _INT2STR_MAP_ADJ = {1: "1st", 2: "2nd", 3: "3rd"} # rest is Xth. From 55cc2b73d391b5436de5f1a7594f3e2117be4d49 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 12 Apr 2022 20:02:22 +0200 Subject: [PATCH 012/177] Update rules --- .../contrib/tutorials/evadventure/rules.py | 105 ++++++++++-------- 1 file changed, 56 insertions(+), 49 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 08656de9e4..ffe6c236a3 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -23,9 +23,9 @@ This module presents several singletons to import """ from random import randint -from dataclasses import dataclass from evennia.utils.evform import EvForm from evennia.utils.evtable import EvTable +from .enums import Ability from .utils import roll from .random_tables import character_generation as chargen_table @@ -39,8 +39,7 @@ class EvAdventureRollEngine: """ - @staticmethod - def roll(roll_string, max_number=10): + def roll(self, roll_string, max_number=10): """ NOTE: In evennia/contribs/rpg/dice/ is a more powerful dice roller with more features, such as modifiers, secret rolls etc. This is much simpler and only @@ -82,8 +81,7 @@ class EvAdventureRollEngine: # At this point we know we have valid input - roll and all dice together return sum(randint(1, diesize) for _ in range(number)) - @staticmethod - def roll_with_advantage_or_disadvantage(advantage=False, disadvantage=False): + def roll_with_advantage_or_disadvantage(self, advantage=False, disadvantage=False): """ Base roll of d20, or 2d20, based on dis/advantage given. @@ -104,8 +102,7 @@ class EvAdventureRollEngine: else: return min(roll("1d20"), roll("1d20")) - @staticmethod - def saving_throw(character, bonus_type='strength', + def saving_throw(self, character, bonus_type=Ability.STR, advantage=False, disadvantage=False, modifier=0): """ A saving throw without a clear enemy to beat. In _Knave_ all unopposed saving @@ -113,7 +110,8 @@ class EvAdventureRollEngine: Args: character (Object): The one attempting to save themselves. - bonus (str): The ability bonus to apply, like strength or charisma. Minimum is 1. + bonus_type (enum.Ability): The ability bonus to apply, like strength or + charisma. advantage (bool): Roll 2d20 and use the bigger number. disadvantage (bool): Roll 2d20 and use the smaller number. modifier (int): An additional +/- modifier to the roll. @@ -130,7 +128,7 @@ class EvAdventureRollEngine: """ bonus = getattr(character, bonus_type, 1) - dice_roll = roll_with_advantage_or_disadvantage(advantage, disadvantage) + dice_roll = self.roll_with_advantage_or_disadvantage(advantage, disadvantage) if dice_roll == 1: quality = "critical failure" elif dice_roll == 20: @@ -139,9 +137,10 @@ class EvAdventureRollEngine: quality = None return (dice_roll + bonus + modifier) > 15, quality - @staticmethod - def opposed_saving_throw(attacker, defender, attack_type='strength', defense_type='armor', - advantage=False, disadvantage=False): + def opposed_saving_throw( + self, attacker, defender, + attack_type=Ability.STR, defense_type=Ability.ARMOR, + advantage=False, disadvantage=False, modifier=0): """ An saving throw that tries to beat an active opposing side. @@ -163,10 +162,10 @@ class EvAdventureRollEngine: Advantage and disadvantage cancel each other out. """ - attack_bonus = getattr(attacker, attack_type, 1) + attack_bonus = getattr(attacker, attack_type.value, 1) # defense is always bonus + 10 in Knave - defender_defense = getattr(defender, defense_type_type, 1) + 10 - dice_roll = roll_with_advantage_or_disadvantage(advantage, disadvantage) + defender_defense = getattr(defender, defense_type.value, 1) + 10 + dice_roll = self.roll_with_advantage_or_disadvantage(advantage, disadvantage) if dice_roll == 1: quality = "critical failure" elif dice_roll == 20: @@ -175,8 +174,7 @@ class EvAdventureRollEngine: quality = None return (dice_roll + attack_bonus + modifier) > defender_defense, quality - @staticmethod - def roll_random_table(dieroll, table, table_choices): + def roll_random_table(self, dieroll, table, table_choices): """ Make a roll on a random table. @@ -230,8 +228,7 @@ class EvAdventureRollEngine: # specific rolls / actions - @staticmethod - def morale_check(defender): + def morale_check(self, defender): """ A morale check is done for NPCs/monsters. It's done with a 2d6 against their morale. @@ -245,8 +242,19 @@ class EvAdventureRollEngine: """ return roll('2d6') <= defender.morale - @staticmethod - def healing_from_rest(character): + def heal(self, character, amount): + """ + Heal specific amount, but not more than our max. + + Args: + character (EvAdventureCharacter): The character to heal + amount (int): How many HP to heal. + + """ + damage = character.hp_max - character.hp + character.hp += min(damage, amount) + + def healing_from_rest(self, character): """ A meal and a full night's rest allow for regaining 1d8 + Const bonus HP. @@ -257,10 +265,7 @@ class EvAdventureRollEngine: int: How much HP was healed. This is never more than how damaged we are. """ - # we can't heal more than our damage - damage = character.hp_max - character.hp - healed = roll('1d8') + character.constitution - return min(damage, healed) + self.heal(character, roll('1d8') + character.constitution) death_map = { "weakened": "strength", @@ -271,7 +276,7 @@ class EvAdventureRollEngine: "disfigured": "charisma", } - def roll_death(character): + def roll_death(self, character): """ Happens when hitting <= 0 hp. unless dead, @@ -282,12 +287,12 @@ class EvAdventureRollEngine: character.handle_death() else: # survives with degraded abilities (1d4 roll) - abi = death_map[result] + abi = self.death_map[result] current_abi = getattr(character, abi) loss = self.roll("1d4") - current_abi =- loss + current_abi -= loss if current_abi < -10: # can't lose more - die @@ -312,7 +317,7 @@ class EvAdventureCharacterGeneration: """ This collects all the rules for generating a new character. An instance of this class can be used to track all the stats during generation and will be used to apply all the data to the - character at the end. This class instance can also be saved temporarily to make sure a user + character at the end. This class instance can also be saved on the menu to make sure a user is not losing their half-created character. Note: @@ -357,8 +362,6 @@ class EvAdventureCharacterGeneration: self.wisdom = 2 self.charisma = 2 - self.armor_bonus = 1 # un-armored default - # physical attributes (only for rp purposes) self.physique = dice.roll_random_table('1d20', chargen_table['physique']) self.face = dice.roll_random_table('1d20', chargen_table['face']) @@ -389,7 +392,7 @@ class EvAdventureCharacterGeneration: self.weapon = dice.roll_random_table(chargen_table['1d20', "starting_weapon"]) - self.equipment = [ + self.backpack = [ "ration", "ration", dice.roll_random_table(chargen_table['1d20', "dungeoning gear"]), @@ -416,7 +419,8 @@ class EvAdventureCharacterGeneration: must not be lower than +1 and not above +6. Args: - source_attribute (str): The name of the attribute to deduct bonus from, like 'strength' + source_attribute (enum.Ability): The name of the attribute to deduct bonus from, + like 'strength' target_attribute (str): The attribute to give the bonus to, like 'dexterity'. value (int): How much to change. This is always 1 for the current chargen. @@ -428,18 +432,18 @@ class EvAdventureCharacterGeneration: much input validation here, we do make sure we don't overcharge ourselves though. """ - # we use getattr() to fetch the CharaAttribute of e.g. the .strength property etc - source_current_bonus = getattr(self, source_attribute).bonus - target_current_bonus = getattr(self, target_attribute).bonus + # we use getattr() to fetch the Ability of e.g. the .strength property etc + source_current_bonus = getattr(self, source_attribute.value, 1) + target_current_bonus = getattr(self, target_attribute.value, 1) - if source_current_val - value < 1: + if source_current_bonus - value < 1: raise ValueError(f"You can't reduce the {source_attribute} bonus below +1.") - if target_current_val + value > 6: + if target_current_bonus + value > 6: raise ValueError(f"You can't increase the {target_attribute} bonus above +6.") # all is good, apply the change. - setattr(self, source_attribute, CharAttribute(bonus=source_current_val - value)) - setattr(self, target_attribute, CharAttribute(bonus=source_current_val + value)) + setattr(self, source_attribute, source_current_bonus - value) + setattr(self, target_attribute, source_current_bonus + value) def apply(self, character): """ @@ -465,18 +469,20 @@ class EvAdventureCharacterGeneration: character.db.desc = self.build_desc() + # TODO - spawn the actual equipment objects before adding them to equipment! + if self.weapon: - character.equipment.add(self.weapon) - character.equipment.wield(self.weapon) + character.equipment.use(self.weapon) if self.shield: - character.equipment.add(self.shield) - character.equipment.wield(self.shield) + character.equipment.use(self.shield) if self.armor: - character.equipment.add(self.armor) - character.equipment.wear(self.armor) + character.equipment.use(self.armor) if self.helmet: - character.equipment.add(self.helmet) - character.equipment.wear(self.helmet) + character.equipment.use(self.helmet) + + for item in self.backpack: + # TODO create here + character.equipment.store(item) # character improvement @@ -538,7 +544,8 @@ class EvAdventureImprovement: except AttributeError: pass - new_hp_max = max(character.max_hpdice.roll(f"{character.level}d8")) + character.hp_max = max(character.max_hp + 1, + EvAdventureRollEngine.roll(f"{character.level}d8")) # character sheet visualization From a25141d98466a7c9457676888c3f733520c047de Mon Sep 17 00:00:00 2001 From: KieranSmith-Res <93326079+KieranSmith-Res@users.noreply.github.com> Date: Mon, 9 May 2022 07:04:53 +0100 Subject: [PATCH 013/177] Update Links.md Add link to Designing Virtual Worlds PDF --- docs/source/Links.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/source/Links.md b/docs/source/Links.md index 21a73992ab..c50986ab01 100644 --- a/docs/source/Links.md +++ b/docs/source/Links.md @@ -124,6 +124,8 @@ when designing a virtual multiplayer world (Raph is known for *Ultima Online* am - Richard Bartle *Designing Virtual Worlds* ([amazon page](http://www.amazon.com/Designing-Virtual-Worlds-Richard-Bartle/dp/0131018167)) - Essential reading for the design of any persistent game world, written by the co-creator of the original game *MUD*. Published in 2003 but it's still as relevant now as when it came out. Covers everything you need to know and then some. + + When the rights to Designing Virtual Worlds returned to him, Richard Bartle made the PDF of his Designing Virtual Worlds freely available through his own website ([Richard Bartle](https://mud.co.uk/dvw/)). A direct link to the PDF can be found ([here](https://mud.co.uk/richard/DesigningVirtualWorlds.pdf)). - Zed A. Shaw *Learn Python the Hard way* ([homepage](https://learnpythonthehardway.org/)) - Despite the imposing name this book is for the absolute Python/programming beginner. One learns the language by gradually creating a small text game! It has been used by multiple users before moving on to From baf5964d9f4dd8a4ef8df9ae0700cc3b2be27c4e Mon Sep 17 00:00:00 2001 From: KieranSmith-Res <93326079+KieranSmith-Res@users.noreply.github.com> Date: Mon, 9 May 2022 07:05:42 +0100 Subject: [PATCH 014/177] Update Links.md Update website link to DVW --- docs/source/Links.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/Links.md b/docs/source/Links.md index c50986ab01..cbd29079bc 100644 --- a/docs/source/Links.md +++ b/docs/source/Links.md @@ -125,7 +125,7 @@ when designing a virtual multiplayer world (Raph is known for *Ultima Online* am world, written by the co-creator of the original game *MUD*. Published in 2003 but it's still as relevant now as when it came out. Covers everything you need to know and then some. - When the rights to Designing Virtual Worlds returned to him, Richard Bartle made the PDF of his Designing Virtual Worlds freely available through his own website ([Richard Bartle](https://mud.co.uk/dvw/)). A direct link to the PDF can be found ([here](https://mud.co.uk/richard/DesigningVirtualWorlds.pdf)). + When the rights to Designing Virtual Worlds returned to him, Richard Bartle made the PDF of his Designing Virtual Worlds freely available through his own website ([Designing Virtual Worlds](https://mud.co.uk/dvw/)). A direct link to the PDF can be found [here](https://mud.co.uk/richard/DesigningVirtualWorlds.pdf). - Zed A. Shaw *Learn Python the Hard way* ([homepage](https://learnpythonthehardway.org/)) - Despite the imposing name this book is for the absolute Python/programming beginner. One learns the language by gradually creating a small text game! It has been used by multiple users before moving on to From 9f5eaa6a2ecd856e3256b933fb58385e1cc5f3a0 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 24 May 2022 23:45:08 +0200 Subject: [PATCH 015/177] Start adding quest module --- .../tutorials/evadventure/combat_turnbased.py | 524 +++++++----------- .../contrib/tutorials/evadventure/quests.py | 121 ++++ 2 files changed, 315 insertions(+), 330 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/quests.py diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 8c1972df80..ed81eb6ab2 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -10,8 +10,11 @@ The combat is handled with a `Script` shared between all combatants; this tracks of combat and handles all timing elements. Unlike in base _Knave_, the MUD version's combat is simultaneous; everyone plans and executes -their turns simultaneously with minimum downtime. This version also includes a stricter -handling of optimal distances than base _Knave_ (this would be handled by the GM normally). +their turns simultaneously with minimum downtime. + +This version is simplified to not worry about things like optimal range etc. So a bow can be used +the same as a sword in battle. One could add a 1D range mechanism to add more strategy by requiring +optimizal positioning. """ @@ -21,21 +24,11 @@ from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import make_iter from evennia.utils import evmenu, evtable +from .enums import Ability from . import rules -MIN_RANGE = 0 -MAX_RANGE = 4 -MAX_MOVE_RATE = 2 STUNT_DURATION = 2 -RANGE_NAMES = { - 0: "close", # melee, short weapons, fists. long weapons with disadvantage - 1: "near", # melee, long weapons, short weapons with disadvantage - 2: "medium", # thrown, ranged with disadvantage - 3: "far", # ranged, thrown with disadvantage - 4: "disengaging" # no weapons -} - class CombatFailure(RuntimeError): """ @@ -44,19 +37,17 @@ class CombatFailure(RuntimeError): class CombatAction: """ - This describes a combat-action, like 'attack'. + This is the base of a combat-action, like 'attack' or defend. + Inherit from this to make new actions. """ key = 'action' help_text = "Combat action to perform." # action to echo to everyone. post_action_text = "{combatant} performed an action." - optimal_range = 0 - # None for unlimited - max_uses = None - suboptimal_range = 1 - # move actions can be combined with other actions - is_move_action = False + max_uses = None # None for unlimited + # in which order (highest first) to perform the action. If identical, use random order + priority = 0 def __init__(self, combathandler, combatant): self.combathandler = combathandler @@ -71,33 +62,13 @@ class CombatAction: # send only to the combatant. self.combatant.msg(message) - def get_help(self): - return "" - - def check_distance(self, distance, optimal_range=None, suboptimal_range=None): - """Call to easily check and warn for out-of-bound distance""" - - if optimal_range is None: - optimal_range = self.optimal_range - if suboptimal_range is None: - suboptimal_range = self.suboptimal_range - - if distance not in (self.suboptimal_distance, self.optimal_distance): - # if we are neither at optimal nor suboptimal distance, we can't do the stunt - # from here. - self.msg(f"|rYou can't perform {self.key} from {range_names[distance]} distance " - "(must be {range_names[suboptimal_distance]} or, even better, " - "{range_names[optimal_distance]}).|n") - return False - elif self.distance == self.suboptimal_distance: - self.msg(f"|yNote: Performing {self.key} from {range_names[distance]} works, but " - f"the optimal range is {range_names[optimal_range]} (you'll " - "act with disadvantage).") - return True + def get_help(self, *args, **kwargs): + return self.help_text def can_use(self, combatant, *args, **kwargs): """ - Determine if combatant can use this action. + Determine if combatant can use this action. In this implementation, + it fails if already use all of a usage-limited action. Args: combatant (Object): The one performing the action. @@ -111,13 +82,13 @@ class CombatAction: """ return True if self.uses is None else self.uses < self.max_uses - def pre_perform(self, *args, **kwargs): + def pre_use(self, *args, **kwargs): pass - def perform(self, *args, **kwargs): + def use(self, *args, **kwargs): pass - def post_perform(self, *args, **kwargs): + def post_use(self, *args, **kwargs): self.uses += 1 self.combathandler.msg(self.post_action_text.format(combatant=combatant)) @@ -134,21 +105,31 @@ class CombatActionDoNothing(CombatAction): class CombatActionStunt(CombatAction): """ - Perform a stunt. + Perform a stunt. A stunt grants an advantage to yours or another player for their next + action, or a disadvantage to yours or an enemy's next action. + + Note that while the check happens between the user and a target, another (the 'beneficiary' + could still gain the effect. This allows for boosting allies or making them better + defend against an enemy. + + Note: We only count a use if the stunt is successful; they will still spend their turn, but won't + spend a use unless they succeed. """ - optimal_distance = 0 - suboptimal_distance = 1 give_advantage = True give_disadvantage = False - uses = 1 - attack_type = "dexterity" - defense_type = "dexterity" + max_uses = 1 + priority = -1 + # how many turns the stunt's effect apply (that is, how quickly it must be used before the + # advantage/disadvantage is lost). + duration = 5 + attack_type = Ability.DEX + defense_type = Ability.DEX help_text = ("Perform a stunt against a target. This will give you or an ally advantage " "on your next action against the same target [range 0-1, one use per combat. " "Bonus lasts for two turns].") - def perform(self, attacker, defender, *args, beneficiary=None, **kwargs): + def use(self, attacker, defender, *args, beneficiary=None, **kwargs): # quality doesn't matter for stunts, they are either successful or not is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( @@ -160,11 +141,125 @@ class CombatActionStunt(CombatAction): if is_success: beneficiary = beneficiary if beneficiary else attacker if advantage: - self.gain_advantage(beneficiary, defender) + self.combathandler.gain_advantage(beneficiary, defender) else: - self.gain_disadvantage(defender, beneficiary) + self.combathandler.gain_disadvantage(defender, beneficiary) self.msg + # only spend a use after being successful + uses += 1 + + +class CombatActionAttack(CombatAction): + """ + A regular attack, using a wielded melee weapon. + + """ + key = "attack" + priority = 1 + + def use(self, attacker, defender, *args, **kwargs): + """ + Make an attack against a defender. + + """ + # figure out advantage (gained by previous stunts) + advantage = bool(self.combathandler.advantage_matrix[attacker].pop(defender, False)) + + # figure out disadvantage (by distance or by previous action) + disadvantage = bool(self.combathandler.disadvantage_matrix[attacker].pop(defender, False)) + + is_hit, quality = rules.EvAdventureRollEngine.opposed_saving_throw( + attacker, defender, + attack_type=attacker.weapon.attack_type, + defense_type=attacker.weapon.defense_type, + advantage=advantage, disadvantage=disadvantage + ) + if is_hit: + self.combathandler.resolve_damage(attacker, defender, + critical=quality == "critical success") + + # TODO messaging here + + +class CombatActionUseItem(CombatAction): + """ + Use an item in combat. This is meant for one-off or limited-use items, like potions, scrolls or + wands. We offload the usage checks and usability to the item's own hooks. It's generated dynamically + from the items in the character's inventory (you could also consider using items in the room this way). + + Each usable item results in one possible action. + + It relies on the combat_* hooks on the item: + combat_get_help + combat_can_use + combat_pre_use + combat_pre + combat_post_use + + """ + def get_help(self, item, *args): + return item.combat_get_help(*args) + + def can_use(self, item, combatant, *args, **kwargs): + return item.combat_can_use(combatant, self.combathandler, *args, **kwargs) + + def pre_use(self, item, *args, **kwargs): + item.combat_pre_use(*args, **kwargs) + + def use(self, item, combatant, target, *args, **kwargs): + item.combat_use(combatant, target, *args, **kwargs) + + def post_use(self, item, *args, **kwargs): + item.combat_post_use(*args, **kwargs) + + +class CombatActionFlee(CombatAction): + """ + Fleeing/disengaging from combat means doing nothing but 'running away' for two turn. Unless + someone attempts and succeeds in their 'chase' action, you will leave combat by fleeing at the + end of the second turn. + + """ + key = "flee" + priority = -1 + + def use(self, combatant, target, *args, **kwargs): + # it's safe to do this twice + self.combathandler.flee(combatant) + +class CombatActionChase(CombatAction): + + """ + Chasing is a way to counter a 'flee' action. It is a maximum movement towards the target + and will mean a DEX contest, if the fleeing target loses, they are moved back from + 'disengaging' range and remain in combat at the new distance (likely 2 if max movement + is 2). Advantage/disadvantage are considered. + + """ + key = "chase" + priority = -5 # checked last + + attack_type = Ability.DEX # or is it CON? + defense_type = Ability.DEX + + def use(self, combatant, fleeing_target, *args, **kwargs): + + advantage = bool(self.advantage_matrix[attacker].pop(fleeing_target, False)) + disadvantage = bool(self.disadvantage_matrix[attacker].pop(fleeing_target, False)) + + is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + combatant, fleeing_target, + attack_type=self.attack_type, defense_type=self.defense_type, + advantage=advantage, disadvantage=disadvantage + ) + + if is_success: + # managed to stop the target from fleeing/disengaging + self.combatant.unflee(fleeing_target) + else: + pass # they are getting away! + class EvAdventureCombatHandler(DefaultScript): @@ -180,13 +275,11 @@ class EvAdventureCombatHandler(DefaultScript): # turn counter - abstract time turn = AttributeProperty(default=0) - # symmetric distance matrix (handled dynamically). Mapping {combatant1: {combatant2: dist}, ...} - distance_matrix = defaultdict(dict) # advantages or disadvantages gained against different targets advantage_matrix = AttributeProperty(defaultdict(dict)) disadvantage_matrix = AttributeProperty(defaultdict(dict)) - disengaging_combatants = AttributeProperty(default=list()) + fleeing_combatants = AttributeProperty(default=list()) # actions that will be performed before a normal action move_actions = ("approach", "withdraw") @@ -197,50 +290,6 @@ class EvAdventureCombatHandler(DefaultScript): } - def _refresh_distance_matrix(self): - """ - Refresh the distance matrix, either after movement or when a - new combatant enters combat - everyone must have a symmetric - distance to every other combatant (that is, if you are 'near' an opponent, - they are also 'near' to you). - - Distances are abstract and divided into four steps: - - 0. Close (melee, short weapons, fists, long weapons with disadvantage) - 1. Near (melee, long weapons, short weapons with disadvantage) - 2. Medium (thrown, ranged with disadvantage) - 3. Far (ranged, thrown with disadvantage) - 4. Disengaging/fleeing (no weapons can be used) - - Distance is tracked to each opponent individually. One can move 1 step and attack - or up to 2 steps (closer or further away) without attacking. - - New combatants will start at a distance averaged between the optimal ranges - of them and their opponents. - - """ - combatants = self.combatants - distance_matrix = self.distance_matrix - - for combatant1 in combatants: - for combatant2 in combatants: - - if combatant1 == combatant2: - continue - - combatant1_distances = distance_matrix[combatant1] - combatant2_distances = distance_matrix[combatant2] - - if combatant2 not in combatant1_distances or combatant1 not in combatant2_distances: - # this happens on initialization or when a new combatant is added. - # we make sure to update both sides to the distance of the longest - # optimal weapon range. So ranged weapons have advantage going in. - start_optimal = max(combatant1.weapon.distance_optimal, - combatant2.weapon.distance_optimal) - - combatant1_distances[combatant2] = start_optimal - combatant2_distances[combatant1] = start_optimal - def _update_turn_stats(self, combatant, message): """ Store combat messages to display at the end of turn. @@ -261,22 +310,15 @@ class EvAdventureCombatHandler(DefaultScript): """ End of turn operations. - 1. Do all moves - 2. Do all regular actions - 3. Remove combatants that disengaged successfully - 4. Timeout advantages/disadvantages set for longer than STUNT_DURATION + 1. Do all regular actions + 2. Remove combatants that disengaged successfully + 3. Timeout advantages/disadvantages set for longer than STUNT_DURATION """ - # first do all moves + # do all actions for combatant in self.combatants: - action, args, kwargs = self.action_queue[combatant].get( - "move", ("do_nothing", (), {})) - getattr(self, f"action_{action}")(combatant, *args, **kwargs) - # next do all regular actions - for combatant in self.combatants: - action, args, kwargs = self.action_qeueue[combatant].get( - "action", ("do_nothing", (), {})) - getattr(self, f"action_{action}")(combatant, *args, **kwargs) + action, args, kwargs = self.action_queue[combatant] + action.use(combatant, *args, **kwargs) # handle disengaging combatants @@ -285,13 +327,8 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in self.combatants: # check disengaging combatants (these are combatants that managed # to stay at disengaging distance for a turn) - if combatant in self.disengaging_combatants: + if combatant in self.fleeing_combatants: self.disengaging_combatants.remove(combatant) - to_remove.append(combatant) - elif all(1 for distance in self.distance_matrix[combatant].values() - if distance == MAX_RANGE): - # if at max distance (disengaging) from everyone, they are disengaging - self.disengaging_combatants.append(combatant) for combatant in to_remove: # for clarity, we remove here rather than modifying the combatant list @@ -327,27 +364,29 @@ class EvAdventureCombatHandler(DefaultScript): def add_combatant(self, combatant): if combatant not in self.combatants: self.combatants.append(combatant) - self._refresh_distance_matrix() def remove_combatant(self, combatant): if combatant in self.combatants: self.combatants.remove(combatant) - self._refresh_distance_matrix() def get_combat_summary(self, combatant): """ - Get a summary of the current combat state. + Get a summary of the current combat state from the perspective of a + given combatant. You (5/10 health) - Foo (Hurt) distance: You__0__1___X____3_____4 (medium) - Bar (Perfect health): You__X__1___2____3_____4 (close) + Foo (Hurt) [Running away - use 'chase' to stop them!] + Bar (Perfect health) """ table = evtable.EvTable(border_width=0) - table.add_row(f"You ({combatant.hp} / {combatant.hp_max} health)") + # 'You' display + fleeing = "" + if combatant in self.fleeing_combatants: + fleeing = " You are running away! Use 'flee' again next turn." - dist_template = "|x(You)__{0}|x__{1}|x___{2}|x____{3}|x_____|R{4} |x({distname})" + table.add_row(f"You ({combatant.hp} / {combatant.hp_max} health){fleeing}") for comb in self.combatants: @@ -355,20 +394,19 @@ class EvAdventureCombatHandler(DefaultScript): continue name = combatant.key - distance = self.distance_matrix[combatant][comb] - dist_map = {i: '|wX' if i == distance else i for i in range(MAX_RANGE)} - dist_map["distname"] = RANGE_NAMES[distance] health = f"{comb.hurt_level}" - distance_string = dist_template.format(**dist_map) + fleeing = "" + if comb in self.fleeing_combatants: + fleeing = " [Running away! Use 'chase' to stop them!" - table.add_row(f"{name} ({health})", distance_string) + table.add_row(f"{name} ({health}){fleeing}") return str(table) def msg(self, message, targets=None): """ Central place for sending messages to combatants. This allows - for decorating the output in one place if needed. + for adding any combat-specific text-decoration in one place. Args: message (str): The message to send. @@ -384,26 +422,6 @@ class EvAdventureCombatHandler(DefaultScript): for target in self.combatants: target.msg(message) - def move_relative_to(self, combatant, target_combatant, change, - min_dist=MIN_RANGE, max_dist=MAX_RANGE): - """ - Change the distance to a target. - - Args: - combatant (Character): The one doing the change. - target_combatant (Character): The one distance is changed to. - change (int): A +/- change value. Result is always in range 0..4. - - """ - current_dist = self.distance_matrix[combatant][target_combatant] - - change = max(0, min(MAX_MOVE_RATE, change)) - - new_dist = max(min_dist, min(max_dist, current_dist + change)) - - self.distance_matrix[combatant][target_combatant] = new_dist - self.distance_matrix[target_combatant][combatant] = new_dist - def gain_advantage(self, combatant, target): """ Gain advantage against target. Spent by actions. @@ -418,6 +436,14 @@ class EvAdventureCombatHandler(DefaultScript): """ self.disadvantage_matrix[combatant][target] = self.turn + def flee(self, combatant): + if combatant not in self.fleeing_combatants: + self.fleeing_combatants.append(combatant) + + def unflee(self, combatant): + if combatant in self.fleeing_combatants: + self.fleeing_combatants.remove(combatant) + def resolve_damage(self, attacker, defender, critical=False): """ Apply damage to defender. On a critical hit, the damage die @@ -457,7 +483,7 @@ class EvAdventureCombatHandler(DefaultScript): # defender still alive self.msg(defender) - def register_action(self, combatant, action="do_nothing", *args, **kwargs): + def register_action(self, combatant, action=None, *args, **kwargs): """ Register an action by-name. @@ -465,186 +491,24 @@ class EvAdventureCombatHandler(DefaultScript): combatant (Object): The one performing the action. action (str): An available action, will be prepended with `action_` and used to call the relevant handler on this script. - *args: Will be passed to the action method `action_`. - **kwargs: Will be passed into the action method `action_`. """ - if action in self.move_actions: - self.action_queue[combatant]["move"] = (action, args, kwargs) - else: - self.action_queue[combatant]["action"] = (action, args, kwargs) - - # action verbs. All of these start with action_* and should also accept - # *args, **kwargs so that we can make the call-mechanism generic. - - def action_do_nothing(self, combatant, *args, **kwargs): - """Do nothing for a turn.""" - - def action_stunt(self, attacker, defender, attack_type="agility", - defense_type="agility", optimal_distance=0, suboptimal_distance=1, - advantage=True, beneficiary=None, *args, **kwargs): - """ - Stunts does not cause damage but are used to give advantage/disadvantage to combatants - for later turns. The 'attacker' here is the one attemting the stunt against the 'defender'. - If successful, advantage is given to attacker against defender and disadvantage to - defender againt attacker. It's also possible to replace the attacker with another combatant - against the defender - allowing to aid/hinder others on the battlefield. - - Stunt-modifers last a maximum of two turns and are not additive. Advantages and - disadvantages relative to the same target cancel each other out. - - Args: - attacker (Object): The one attempting the stunt. - defender (Object): The one affected by the stunt. - attack_type (str): The ability tested to do the stunt. - defense_type (str): The ability used to defend against the stunt. - optimal_distance (int): At which distance the stunt works normally. - suboptimal_distance (int): At this distance, the stunt is performed at disadvantage. - advantage (bool): If False, try to apply disadvantage to defender - rather than advantage to attacker. - beneficiary (bool): If stunt succeeds, it may benefit another - combatant than the `attacker` doing the stunt. This allows for helping - allies. - - """ - # check if stunt-attacker is at optimal distance - distance = self.distance_matrix[attacker][defender] - disadvantage = False - if suboptimal_distance == distance: - # stunts need to be within range - disadvantage = True - elif self._get_optimal_distance(attacker) != distance: - # if we are neither at optimal nor suboptimal distance, we can't do the stunt - # from here. - raise combatfailure(f"you can't perform this stunt " - f"from {range_names[distance]} distance (must be " - f"{range_names[suboptimal_distance]} or, even better, " - f"{range_names[optimal_distance]}).") - # quality doesn't matter for stunts, they are either successful or not - is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( - attacker, defender, - attack_type=attack_type, - defense_type=defense_type, - advantage=False, disadvantage=disadvantage, - ) - if is_success: - beneficiary = beneficiary if beneficiary else attacker - if advantage: - self.gain_advantage(beneficiary, defender) - else: - self.gain_disadvantage(defender, beneficiary) - - return is_success - - def action_attack(self, attacker, defender, *args, **kwargs): - """ - Make an attack against a defender. This takes into account distance. The - attack type/defense depends on the weapon/spell/whatever used. - - """ - # check if attacker is at optimal distance - distance = self.distance_matrix[attacker][defender] - - # figure out advantage (gained by previous stunts) - advantage = bool(self.advantage_matrix[attacker].pop(defender, False)) - - # figure out disadvantage (by distance or by previous action) - disadvantage = bool(self.disadvantage_matrix[attacker].pop(defender, False)) - if self._get_suboptimal_distance(attacker) == distance: - # fighting at the wrong range is not good - disadvantage = True - elif self._get_optimal_distance(attacker) != distance: - # if we are neither at optimal nor suboptimal distance, we can't - # attack from this range - raise CombatFailure(f"You can't attack with {attacker.weapon.key} " - f"from {RANGE_NAMES[distance]} distance.") - - is_hit, quality = rules.EvAdventureRollEngine.opposed_saving_throw( - attacker, defender, - attack_type=attacker.weapon.attack_type, - defense_type=attacker.weapon.defense_type, - advantage=advantage, disadvantage=disadvantage - ) - if is_hit: - self.resolve_damage(attacker, defender, critical=quality == "critical success") - - return is_hit - - def action_heal(self, combatant, target, max_distance=1, healing_roll="1d6", *args, **kwargs): - """ - Heal a target. Target can be the combatant itself. - - Args: - combatant (Object): The one performing the heal. - target (Object): The one to be healed (can be the same as combatant). - max_distance (int): Distances *up to* this range allow for healing. - healing_roll (str): The die roll for how many HP to heal. - - Raises: - CombatFailure: If too far away to heal target. - - """ - if target is not combatant: - distance = self.distance_matrix[attacker][defender] - if distance > max_distance: - raise CombatFailure(f"Too far away to heal {target.key}.") - - target.heal(rules.EvAdventureRollEngine.roll(healing_roll), healer=combatant) - - def action_approach(self, combatant, other_combatant, change, *args, **kwargs): - """ - Approach target. Closest is 0. This can be combined with another action. - - """ - self.move_relative_to(combatant, other_combatant, -abs(change), min_dist=MIN_RANGE) - - def action_withdraw(self, combatant, other_combatant, change): - """ - Withdraw from target. Most distant is range 3 - further and you'll be disengaging. - This can be combined with another action. - - """ - self.move_relative_to(combatant, other_combatant, abs(change), max_dist=3) - - def action_flee(self, combatant, *args, **kwargs): - """ - Fleeing/disengaging from combat means moving towards 'disengaging' range from - everyone else and staying there for one turn. - - """ - for other_combatant in self.combatants: - self.move_relative_to(combatant, other_combatant, MAX_MOVE_RATE, max_dist=MAX_RANGE) - - def action_chase(self, combatant, fleeing_target, *args, **kwargs): - """ - Chasing is a way to counter a 'flee' action. It is a maximum movement towards the target - and will mean a DEX contest, if the fleeing target loses, they are moved back from - 'disengaging' range and remain in combat at the new distance (likely 2 if max movement - is 2). Advantage/disadvantage are considered. - - """ - ability = "dexterity" - - advantage = bool(self.advantage_matrix[attacker].pop(fleeing_target, False)) - disadvantage = bool(self.disadvantage_matrix[attacker].pop(fleeing_target, False)) - - is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( - combatant, fleeing_target, - attack_type=ability, defense_type=ability, - advantage=advantage, disadvantage=disadvantage - ) - - if is_success: - # managed to stop the target from fleeing/disengaging - move closer - if fleeing_target in self.disengaging_combatants: - self.disengaging_combatants.remove(fleeing_target) - self.approach(combatant, fleeing_target, change=MAX_MOVE_RATE) - - return is_success + if not action: + action = CombatActionDoNothing + self.action_queue[combatant] = (action, args, kwargs) # combat menu +combat_script = """ + + + + +""" + + + def _register_action(caller, raw_string, **kwargs): """ Register action with handler. diff --git a/evennia/contrib/tutorials/evadventure/quests.py b/evennia/contrib/tutorials/evadventure/quests.py new file mode 100644 index 0000000000..0eefba39d1 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/quests.py @@ -0,0 +1,121 @@ +""" +A simple quest system for EvAdventure. + +A quest is represented by a quest-handler sitting as +.quest on a Character. Individual Quests are objects +that track the state and can have multiple steps, each +of which are checked off during the quest's progress. + +The player can use the quest handler to track the +progress of their quests. + +A quest ending can mean a reward or the start of +another quest. + +""" + + +class EvAdventureQuest: + """ + This represents a single questing unit of quest. + + Properties: + name (str): Main identifier for the quest. + category (str, optional): This + name must be globally unique. + steps (list): A list of strings, representing how many steps are + in the quest. The first step is always the beginning, when the quest is presented. + The last step is always the end of the quest. It is possible to abort the quest before + it ends - it then pauses after the last completed step. + + each step is represented by two methods on this object: + check_ and complete_ + + """ + # name + category must be globally unique. They are + # queried as name:category or just name, if category is empty. + name = "" + category = "" + # example: steps = ["start", "step1", "step2", "end"] + steps = [] + + def __init__(self): + step = 0 + + def check(): + pass + + + def progress(self, quester, *args, **kwargs): + """ + + """ + +class EvAdventureQuestHandler: + """ + This sits on the Character, as `.quests`. + + It's initiated using a lazy property on the Character: + + ``` + @lazy_property + def quests(self): + return EvAdventureQuestHandler(self) + ``` + + """ + quest_storage_attribute = "_quests" + quest_storage_attribute_category = "evadventure" + + def __init__(self, obj): + self.obj = obj + self.storage = obj.attributes.get( + self.quest_storage_attribute, + category=self.quest_storage_attribute_category, + default={} + ) + + def quest_storage_key(self, name, category): + return f"{name}:{category}" + + def has(self, quest_name, quest_category=""): + """ + Check if a given quest is registered with the Character. + + Args: + quest_name (str): The name of the quest to check for. + quest_category (str, optional): Quest category, if any. + + Returns: + bool: If the character is following this quest or not. + + """ + return bool(self.get(quest_name, quest_category)) + + def get(self, quest_name, quest_category=""): + """ + Get the quest stored on character, if any. + + Args: + quest_name (str): The name of the quest to check for. + quest_category (str, optional): Quest category, if any. + + Returns: + EvAdventureQuest or None: The quest stored, or None if + Character is not on this quest. + + """ + return self.storage.get(self.quest_key(quest_storage_name, quest_category)) + + def add(self, quest, autostart=True): + """ + Add a new quest + + Args: + quest (EvAdventureQuest): The quest to start. + autostart (bool, optional): If set, the quest will + start immediately. + + """ + + + From 2a33761a5782e5ff21b3f69a4f4e8b5533e7e232 Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 26 May 2022 16:23:11 +0200 Subject: [PATCH 016/177] Made unit tests for evadventure rules --- .../tutorials/evadventure/combat_turnbased.py | 39 ++- .../contrib/tutorials/evadventure/enums.py | 3 + .../tutorials/evadventure/random_tables.py | 10 +- .../contrib/tutorials/evadventure/rules.py | 138 ++++---- .../contrib/tutorials/evadventure/tests.py | 315 +++++++++++++++++- 5 files changed, 418 insertions(+), 87 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index ed81eb6ab2..4e7b890965 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -27,8 +27,6 @@ from evennia.utils import evmenu, evtable from .enums import Ability from . import rules -STUNT_DURATION = 2 - class CombatFailure(RuntimeError): """ @@ -152,7 +150,8 @@ class CombatActionStunt(CombatAction): class CombatActionAttack(CombatAction): """ - A regular attack, using a wielded melee weapon. + A regular attack, using a wielded weapon. Depending on weapon type, this will be a ranged or + melee attack. """ key = "attack" @@ -261,14 +260,26 @@ class CombatActionChase(CombatAction): pass # they are getting away! - class EvAdventureCombatHandler(DefaultScript): """ This script is created when combat is initialized and stores a queue of all active participants. It's also possible to join (or leave) the fray later. """ + # these will all be checked if they are available at a given time. + all_action_classes = [ + CombatActionDoNothing, + CombatActionChase, + CombatActionUseItem, + CombatActionStunt, + CombatActionAttack + ] + + # attributes + + # stores all combatants active in the combat combatants = AttributeProperty(list()) + combatant_actions = AttributeProperty(defaultdict(dict)) action_queue = AttributeProperty(dict()) turn_stats = AttributeProperty(defaultdict(list)) @@ -281,15 +292,10 @@ class EvAdventureCombatHandler(DefaultScript): fleeing_combatants = AttributeProperty(default=list()) + # actions that will be performed before a normal action move_actions = ("approach", "withdraw") - def at_init(self): - self.ndb.actions = { - "do_nothing": CombatActionDoNothing, - } - - def _update_turn_stats(self, combatant, message): """ Store combat messages to display at the end of turn. @@ -312,12 +318,16 @@ class EvAdventureCombatHandler(DefaultScript): 1. Do all regular actions 2. Remove combatants that disengaged successfully - 3. Timeout advantages/disadvantages set for longer than STUNT_DURATION + 3. Timeout advantages/disadvantages """ # do all actions for combatant in self.combatants: - action, args, kwargs = self.action_queue[combatant] + # read the current action type selected by the player + action_class, args, kwargs = self.action_queue[combatant] + # get the already initialized CombatAction instance (where state can be tracked) + action = self.combatant_actions[combatant][action_class] + # perform the action on the CombatAction instance action.use(combatant, *args, **kwargs) # handle disengaging combatants @@ -364,10 +374,13 @@ class EvAdventureCombatHandler(DefaultScript): def add_combatant(self, combatant): if combatant not in self.combatants: self.combatants.append(combatant) + for action_class in self.all_action_classes: + self.combatant_actions[combatant][action_class] = action_class(self, combatant) def remove_combatant(self, combatant): if combatant in self.combatants: self.combatants.remove(combatant) + self.combatant_actions[combatant][action_class].pop(None) def get_combat_summary(self, combatant): """ @@ -489,7 +502,7 @@ class EvAdventureCombatHandler(DefaultScript): Args: combatant (Object): The one performing the action. - action (str): An available action, will be prepended with `action_` and + action (CombatAction): An available action, will be prepended with `action_` and used to call the relevant handler on this script. """ diff --git a/evennia/contrib/tutorials/evadventure/enums.py b/evennia/contrib/tutorials/evadventure/enums.py index 1fbbf353b2..c6c24d7b97 100644 --- a/evennia/contrib/tutorials/evadventure/enums.py +++ b/evennia/contrib/tutorials/evadventure/enums.py @@ -42,6 +42,9 @@ class Ability(Enum): LEVEL = "level" XP = "xp" + CRITICAL_FAILURE = "critical_failure" + CRITICAL_SUCCESS = "critical_success" + class WieldLocation(Enum): """ Wield (or wear) locations. diff --git a/evennia/contrib/tutorials/evadventure/random_tables.py b/evennia/contrib/tutorials/evadventure/random_tables.py index b942dd9fdc..cac6566369 100644 --- a/evennia/contrib/tutorials/evadventure/random_tables.py +++ b/evennia/contrib/tutorials/evadventure/random_tables.py @@ -204,7 +204,7 @@ character_generation = { "student", "tracker", ], - "mifortuntes": [ + "misfortune": [ "abandoned", "addicted", "blackmailed", @@ -238,15 +238,15 @@ character_generation = { ('20', "chain"), ], "helmets and shields": [ - ('1-13', "no helmet"), + ('1-13', "no helmet or shield"), ('14-16', "helmet"), ('17-19', "shield"), ('20', "helmet and shield"), ], "starting weapon": [ # note: these are all d6 dmg weapons - ('1-7', "dagger", - '8-13', "club", - '14-20', "staff"), + ('1-7', "dagger"), + ('8-13', "club"), + ('14-20', "staff"), ], "dungeoning gear": [ "rope, 50ft", diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index ffe6c236a3..150458d035 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -26,8 +26,10 @@ from random import randint from evennia.utils.evform import EvForm from evennia.utils.evtable import EvTable from .enums import Ability -from .utils import roll -from .random_tables import character_generation as chargen_table +from .random_tables import ( + character_generation as chargen_table, + death_and_dismemberment as death_table +) # Basic rolls @@ -96,13 +98,13 @@ class EvAdventureRollEngine: """ if not (advantage or disadvantage) or (advantage and disadvantage): # normal roll - return roll("1d20") + return self.roll("1d20") elif advantage: - return max(roll("1d20"), roll("1d20")) + return max(self.roll("1d20"), self.roll("1d20")) else: - return min(roll("1d20"), roll("1d20")) + return min(self.roll("1d20"), self.roll("1d20")) - def saving_throw(self, character, bonus_type=Ability.STR, + def saving_throw(self, character, bonus_type=Ability.STR, target=15, advantage=False, disadvantage=False, modifier=0): """ A saving throw without a clear enemy to beat. In _Knave_ all unopposed saving @@ -112,9 +114,11 @@ class EvAdventureRollEngine: character (Object): The one attempting to save themselves. bonus_type (enum.Ability): The ability bonus to apply, like strength or charisma. - advantage (bool): Roll 2d20 and use the bigger number. - disadvantage (bool): Roll 2d20 and use the smaller number. - modifier (int): An additional +/- modifier to the roll. + target (int, optional): Used for opposed throws (in Knave any regular + saving through must always beat 15). + advantage (bool, optional): Roll 2d20 and use the bigger number. + disadvantage (bool, optional): Roll 2d20 and use the smaller number. + modifier (int, optional): An additional +/- modifier to the roll. Returns: tuple: (bool, str): If the save was passed or not. The second element is the @@ -127,15 +131,15 @@ class EvAdventureRollEngine: Trying to overcome the effects of poison, roll d20 + Constitution-bonus above 15. """ - bonus = getattr(character, bonus_type, 1) + bonus = getattr(character, bonus_type.value, 1) dice_roll = self.roll_with_advantage_or_disadvantage(advantage, disadvantage) if dice_roll == 1: - quality = "critical failure" + quality = Ability.CRITICAL_FAILURE elif dice_roll == 20: - quality = "critical success" + quality = Ability.CRITICAL_SUCCESS else: quality = None - return (dice_roll + bonus + modifier) > 15, quality + return (dice_roll + bonus + modifier) > target, quality def opposed_saving_throw( self, attacker, defender, @@ -162,19 +166,13 @@ class EvAdventureRollEngine: Advantage and disadvantage cancel each other out. """ - attack_bonus = getattr(attacker, attack_type.value, 1) - # defense is always bonus + 10 in Knave defender_defense = getattr(defender, defense_type.value, 1) + 10 - dice_roll = self.roll_with_advantage_or_disadvantage(advantage, disadvantage) - if dice_roll == 1: - quality = "critical failure" - elif dice_roll == 20: - quality = "critical success" - else: - quality = None - return (dice_roll + attack_bonus + modifier) > defender_defense, quality + return self.saving_throw(attacker, bonus_type=attack_type, + target=defender_defense, + advantage=advantage, disadvantage=disadvantage, + modifier=modifier) - def roll_random_table(self, dieroll, table, table_choices): + def roll_random_table(self, dieroll, table_choices): """ Make a roll on a random table. @@ -196,7 +194,9 @@ class EvAdventureRollEngine: If the roll is outside of the listing, the closest edge value is used. """ - roll_result = roll(dieroll) + roll_result = self.roll(dieroll) + if not table_choices: + return None if isinstance(table_choices[0], (tuple, list)): # tuple with range conditional, like ('1-5', "Blue") or ('10', "Purple") @@ -218,9 +218,9 @@ class EvAdventureRollEngine: # if we have no result, we are outside of the range, we pick the edge values. It is also # possible the range contains 'gaps', but that'd be an error in the random table itself. if roll_result > max_range: - return max_range + return table_choices[-1][1] else: - return min_range + return table_choices[0][1] else: # regular list - one line per value. roll_result = max(1, min(len(table_choices), roll_result)) @@ -240,7 +240,7 @@ class EvAdventureRollEngine: bool: False if morale roll failed, True otherwise. """ - return roll('2d6') <= defender.morale + return self.roll('2d6') <= defender.morale def heal(self, character, amount): """ @@ -254,7 +254,7 @@ class EvAdventureRollEngine: damage = character.hp_max - character.hp character.hp += min(damage, amount) - def healing_from_rest(self, character): + def heal_from_rest(self, character): """ A meal and a full night's rest allow for regaining 1d8 + Const bonus HP. @@ -265,7 +265,7 @@ class EvAdventureRollEngine: int: How much HP was healed. This is never more than how damaged we are. """ - self.heal(character, roll('1d8') + character.constitution) + self.heal(character, self.roll('1d8') + character.constitution) death_map = { "weakened": "strength", @@ -282,7 +282,7 @@ class EvAdventureRollEngine: """ - result = self.roll_random_table('1d8', 'death_and_dismemberment') + result = self.roll_random_table('1d8', death_table) if result == "dead": character.handle_death() else: @@ -298,6 +298,7 @@ class EvAdventureRollEngine: # can't lose more - die character.handle_death() else: + # refresh health, but get permanent ability loss new_hp = max(character.hp_max, self.roll("1d4")) setattr(character, abi, current_abi) character.hp = new_hp @@ -326,13 +327,11 @@ class EvAdventureCharacterGeneration: online players can (and usually will) just disconnect and reroll until they get values they are happy with. - So, in standard Knave, the character's attribute bonus is rolled randomly and will give a + In standard Knave, the character's attribute bonus is rolled randomly and will give a value 1-6; and there is no guarantee for 'equal' starting characters. Instead we homogenize the results to a flat +2 bonus and let people redistribute the points afterwards. This also allows us to show off some more advanced concepts in the - chargen menu, but you can also easily make it random like in base Knave by using the - (currently unused, but included) `roll_attribute_bonus` function above to get the bonus - instead of the flat +2. + chargen menu. In the same way, Knave uses a d8 roll to get the initial hit points. Instead we use a flat max of 8 HP to start, in order to give players a little more survivability. @@ -349,12 +348,12 @@ class EvAdventureCharacterGeneration: """ # for clarity we initialize the engine here rather than use the # global singleton at the end of the module - dice = EvAdventureRollEngine() + roll_engine = EvAdventureRollEngine() # name will likely be modified later - self.name = dice.roll_random_table('1d282', chargen_table['name']) + self.name = roll_engine.roll_random_table('1d282', chargen_table['name']) - # base attribute bonuses + # base attribute bonuses (flat +1 bonus) self.strength = 2 self.dexterity = 2 self.constitution = 2 @@ -363,17 +362,17 @@ class EvAdventureCharacterGeneration: self.charisma = 2 # physical attributes (only for rp purposes) - self.physique = dice.roll_random_table('1d20', chargen_table['physique']) - self.face = dice.roll_random_table('1d20', chargen_table['face']) - self.skin = dice.roll_random_table('1d20', chargen_table['skin']) - self.hair = dice.roll_random_table('1d20', chargen_table['hair']) - self.clothing = dice.roll_random_table('1d20', chargen_table['clothing']) - self.speech = dice.roll_random_table('1d20', chargen_table['speech']) - self.virtue = dice.roll_random_table('1d20', chargen_table['virtue']) - self.vice = dice.roll_random_table('1d20', chargen_table['vice']) - self.background = dice.roll_random_table('1d20', chargen_table['background']) - self.misfortune = dice.roll_random_table('1d20', chargen_table['misfortune']) - self.alignment = dice.roll_random_table('1d20', chargen_table['alignment']) + self.physique = roll_engine.roll_random_table('1d20', chargen_table['physique']) + self.face = roll_engine.roll_random_table('1d20', chargen_table['face']) + self.skin = roll_engine.roll_random_table('1d20', chargen_table['skin']) + self.hair = roll_engine.roll_random_table('1d20', chargen_table['hair']) + self.clothing = roll_engine.roll_random_table('1d20', chargen_table['clothing']) + self.speech = roll_engine.roll_random_table('1d20', chargen_table['speech']) + self.virtue = roll_engine.roll_random_table('1d20', chargen_table['virtue']) + self.vice = roll_engine.roll_random_table('1d20', chargen_table['vice']) + self.background = roll_engine.roll_random_table('1d20', chargen_table['background']) + self.misfortune = roll_engine.roll_random_table('1d20', chargen_table['misfortune']) + self.alignment = roll_engine.roll_random_table('1d20', chargen_table['alignment']) # same for all self.exploration_speed = 120 @@ -384,21 +383,22 @@ class EvAdventureCharacterGeneration: self.level = 1 # random equipment - self.armor = dice.roll_random_table('1d20', chargen_table['armor']) + self.armor = roll_engine.roll_random_table('1d20', chargen_table['armor']) - _helmet_and_shield = dice.roll_random_table('1d20', chargen_table["helmets and shields"]) + _helmet_and_shield = roll_engine.roll_random_table( + '1d20', chargen_table["helmets and shields"]) self.helmet = "helmet" if "helmet" in _helmet_and_shield else "none" self.shield = "shield" if "shield" in _helmet_and_shield else "none" - self.weapon = dice.roll_random_table(chargen_table['1d20', "starting_weapon"]) + self.weapon = roll_engine.roll_random_table('1d20', chargen_table["starting weapon"]) self.backpack = [ "ration", "ration", - dice.roll_random_table(chargen_table['1d20', "dungeoning gear"]), - dice.roll_random_table(chargen_table['1d20', "dungeoning gear"]), - dice.roll_random_table(chargen_table['1d20', "general gear 1"]), - dice.roll_random_table(chargen_table['1d20', "general gear 2"]), + roll_engine.roll_random_table('1d20', chargen_table["dungeoning gear"]), + roll_engine.roll_random_table('1d20', chargen_table["dungeoning gear"]), + roll_engine.roll_random_table('1d20', chargen_table["general gear 1"]), + roll_engine.roll_random_table('1d20', chargen_table["general gear 2"]), ] def build_desc(self): @@ -432,18 +432,21 @@ class EvAdventureCharacterGeneration: much input validation here, we do make sure we don't overcharge ourselves though. """ - # we use getattr() to fetch the Ability of e.g. the .strength property etc - source_current_bonus = getattr(self, source_attribute.value, 1) - target_current_bonus = getattr(self, target_attribute.value, 1) + if source_attribute == target_attribute: + return - if source_current_bonus - value < 1: + # we use getattr() to fetch the Ability of e.g. the .strength property etc + source_current = getattr(self, source_attribute.value, 1) + target_current = getattr(self, target_attribute.value, 1) + + if source_current - value < 1: raise ValueError(f"You can't reduce the {source_attribute} bonus below +1.") - if target_current_bonus + value > 6: + if target_current + value > 6: raise ValueError(f"You can't increase the {target_attribute} bonus above +6.") # all is good, apply the change. - setattr(self, source_attribute, source_current_bonus - value) - setattr(self, target_attribute, source_current_bonus + value) + setattr(self, source_attribute.value, source_current - value) + setattr(self, target_attribute.value, target_current + value) def apply(self, character): """ @@ -459,9 +462,8 @@ class EvAdventureCharacterGeneration: character.wisdom = self.wisdom character.charisma = self.charisma - character.armor = self.armor_bonus - # character.exploration_speed = self.exploration_speed - # character.combat_speed = self.combat_speed + character.weapon = self.weapon + character.armor = self.armor character.hp = self.hp character.level = self.level @@ -532,7 +534,7 @@ class EvAdventureImprovement: will need to be done earlier, when the user selects the ability to increase. """ - dice = EvAdventureRollEngine() + roll_engine = EvAdventureRollEngine() character.level += 1 for ability in set(abilities[:amount_of_abilities_to_upgrades]): @@ -621,7 +623,7 @@ class EvAdventureCharacterSheet: # singletons # access sheet as rules.character_sheet.get(character) -character_sheet = CharacterSheet() +character_sheet = EvAdventureCharacterSheet() # access rolls e.g. with rules.dice.opposed_saving_throw(...) dice = EvAdventureRollEngine() # access improvement e.g. with rules.improvement.add_xp(character, xp) diff --git a/evennia/contrib/tutorials/evadventure/tests.py b/evennia/contrib/tutorials/evadventure/tests.py index 52b0b1e279..33aed12289 100644 --- a/evennia/contrib/tutorials/evadventure/tests.py +++ b/evennia/contrib/tutorials/evadventure/tests.py @@ -3,10 +3,17 @@ Tests for EvAdventure. """ +from parameterized import parameterized +from unittest.mock import patch, MagicMock, call from evennia.utils import create from evennia.utils.test_resources import BaseEvenniaTest -from .character import EvAdventureCharacter +from .characters import EvAdventureCharacter from .objects import EvAdventureObject +from . import enums +from . import combat_turnbased +from . import rules +from . import random_tables + class EvAdventureMixin: def setUp(self): @@ -24,3 +31,309 @@ class EvAdventureMixin: class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): pass + +class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): + """ + Test the turn-based combat-handler implementation. + + """ + def setUp(self): + super().setUp() + self.combathandler = combat_turnbased.EvAdventureCombatHandler() + self.combathandler.add_combatant(self.character) + + def test_remove_combatant(self): + self.combathandler.remove_combatant(self.character) + + +class EvAdventureRollEngineTest(BaseEvenniaTest): + """ + Test the roll engine in the rules module. This is the core of any RPG. + + """ + def setUp(self): + super().setUp() + self.roll_engine = rules.EvAdventureRollEngine() + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_roll(self, mock_randint): + mock_randint.return_value = 8 + self.assertEqual(self.roll_engine.roll("1d6"), 8) + mock_randint.assert_called_with(1, 6) + + self.assertEqual(self.roll_engine.roll("2d8"), 2 * 8) + mock_randint.assert_called_with(1, 8) + + self.assertEqual(self.roll_engine.roll("4d12"), 4 * 8) + mock_randint.assert_called_with(1, 12) + + self.assertEqual(self.roll_engine.roll("8d100"), 8 * 8) + mock_randint.assert_called_with(1, 100) + + def test_roll_limits(self): + with self.assertRaises(TypeError): + self.roll_engine.roll('100d6', max_number=10) # too many die + with self.assertRaises(TypeError): + self.roll_engine.roll('100') # no d + with self.assertRaises(TypeError): + self.roll_engine.roll('dummy') # non-numerical + with self.assertRaises(TypeError): + self.roll_engine.roll('Ad4') # non-numerical + with self.assertRaises(TypeError): + self.roll_engine.roll('1d10000') # limit is d1000 + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_roll_with_advantage_disadvantage(self, mock_randint): + mock_randint.return_value = 9 + + # no advantage/disadvantage + self.assertEqual(self.roll_engine.roll_with_advantage_or_disadvantage(), 9) + mock_randint.assert_called_once() + mock_randint.reset_mock() + + # cancel each other out + self.assertEqual( + self.roll_engine.roll_with_advantage_or_disadvantage( + disadvantage=True, advantage=True), 9) + mock_randint.assert_called_once() + mock_randint.reset_mock() + + # run with advantage/disadvantage + self.assertEqual( + self.roll_engine.roll_with_advantage_or_disadvantage(advantage=True), 9) + mock_randint.assert_has_calls([call(1, 20), call(1, 20)]) + mock_randint.reset_mock() + + self.assertEqual( + self.roll_engine.roll_with_advantage_or_disadvantage(disadvantage=True), 9) + mock_randint.assert_has_calls([call(1, 20), call(1, 20)]) + mock_randint.reset_mock() + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_saving_throw(self, mock_randint): + mock_randint.return_value = 8 + + character = MagicMock() + character.strength = 2 + character.dexterity = 1 + + self.assertEqual( + self.roll_engine.saving_throw(character, bonus_type=enums.Ability.STR), + (False, None)) + self.assertEqual( + self.roll_engine.saving_throw(character, bonus_type=enums.Ability.DEX, modifier=1), + (False, None)) + self.assertEqual( + self.roll_engine.saving_throw( + character, + advantage=True, + bonus_type=enums.Ability.DEX, modifier=6), + (False, None)) + self.assertEqual( + self.roll_engine.saving_throw( + character, + disadvantage=True, + bonus_type=enums.Ability.DEX, modifier=7), + (True, None)) + + mock_randint.return_value = 1 + self.assertEqual( + self.roll_engine.saving_throw( + character, + disadvantage=True, + bonus_type=enums.Ability.STR, modifier=2), + (False, enums.Ability.CRITICAL_FAILURE)) + + mock_randint.return_value = 20 + self.assertEqual( + self.roll_engine.saving_throw( + character, + disadvantage=True, + bonus_type=enums.Ability.STR, modifier=2), + (True, enums.Ability.CRITICAL_SUCCESS)) + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_opposed_saving_throw(self, mock_randint): + mock_randint.return_value = 10 + + attacker, defender = MagicMock(), MagicMock() + attacker.strength = 1 + defender.armor = 2 + + self.assertEqual( + self.roll_engine.opposed_saving_throw( + attacker, defender, + attack_type=enums.Ability.STR, defense_type=enums.Ability.ARMOR + ), + (False, None) + ) + self.assertEqual( + self.roll_engine.opposed_saving_throw( + attacker, defender, + attack_type=enums.Ability.STR, defense_type=enums.Ability.ARMOR, + modifier=2 + ), + (True, None) + ) + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_roll_random_table(self, mock_randint): + mock_randint.return_value = 10 + + self.assertEqual( + self.roll_engine.roll_random_table( + "1d20", random_tables.character_generation['physique']), + "scrawny" + ) + self.assertEqual( + self.roll_engine.roll_random_table( + "1d20", random_tables.character_generation['vice']), + "irascible" + ) + self.assertEqual( + self.roll_engine.roll_random_table( + "1d20", random_tables.character_generation['alignment']), + "neutrality" + ) + self.assertEqual( + self.roll_engine.roll_random_table( + "1d20", random_tables.character_generation['helmets and shields']), + "no helmet or shield" + ) + # testing faulty rolls outside of the table ranges + mock_randint.return_value = 25 + self.assertEqual( + self.roll_engine.roll_random_table( + "1d20", random_tables.character_generation['helmets and shields']), + "helmet and shield" + ) + mock_randint.return_value = -10 + self.assertEqual( + self.roll_engine.roll_random_table( + "1d20", random_tables.character_generation['helmets and shields']), + "no helmet or shield" + ) + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_morale_check(self, mock_randint): + defender = MagicMock() + defender.morale = 12 + + mock_randint.return_value = 7 # 2d6 is rolled, so this will become 14 + self.assertEqual(self.roll_engine.morale_check(defender), False) + + mock_randint.return_value = 3 # 2d6 is rolled, so this will become 6 + self.assertEqual(self.roll_engine.morale_check(defender), True) + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_heal_from_rest(self, mock_randint): + character = MagicMock() + character.hp_max = 8 + character.hp = 1 + character.constitution = 1 + + mock_randint.return_value = 5 + self.roll_engine.heal_from_rest(character) + self.assertEqual(character.hp, 7) # hp + 1d8 + consititution bonus + mock_randint.assert_called_with(1, 8) # 1d8 + + self.roll_engine.heal_from_rest(character) + self.assertEqual(character.hp, 8) # can't have more than max hp + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def test_roll_death(self, mock_randint): + character = MagicMock() + character.strength = 13 + character.hp = 0 + character.hp_max = 8 + + # death + mock_randint.return_value = 1 + self.roll_engine.roll_death(character) + character.handle_death.assert_called() + # strength loss + mock_randint.return_value = 3 + self.roll_engine.roll_death(character) + self.assertEqual(character.strength, 10) + + +class EvAdventureCharacterGenerationTest(BaseEvenniaTest): + """ + Test the Character generator tracing object in the rule engine. + + """ + + @patch("evennia.contrib.tutorials.evadventure.rules.randint") + def setUp(self, mock_randint): + super().setUp() + mock_randint.return_value = 10 + self.chargen = rules.EvAdventureCharacterGeneration() + + def test_base_chargen(self): + self.assertEqual(self.chargen.strength, 2) + self.assertEqual(self.chargen.physique, "scrawny") + self.assertEqual(self.chargen.skin, "pockmarked") + self.assertEqual(self.chargen.hair, "greased") + self.assertEqual(self.chargen.clothing, "stained") + self.assertEqual(self.chargen.misfortune, "exiled") + self.assertEqual(self.chargen.armor, "gambeson") + self.assertEqual(self.chargen.shield, "shield") + self.assertEqual(self.chargen.backpack, ['ration', 'ration', 'waterskin', + 'waterskin', 'drill', 'twine']) + + def test_build_desc(self): + self.assertEqual( + self.chargen.build_desc(), + "Herbalist. Wears stained clothes, and has hoarse speech. Has a scrawny physique, " + "a broken face, pockmarked skin and greased hair. Is honest, but irascible. " + "Has been exiled in the past. Favors neutrality." + ) + + + @parameterized.expand([ + # source, target, value, new_source_val, new_target_val + (enums.Ability.CON, enums.Ability.STR, 1, 1, 3), + (enums.Ability.INT, enums.Ability.DEX, 1, 1, 3), + (enums.Ability.CHA, enums.Ability.CON, 1, 1, 3), + (enums.Ability.STR, enums.Ability.WIS, 1, 1, 3), + (enums.Ability.WIS, enums.Ability.CHA, 1, 1, 3), + (enums.Ability.DEX, enums.Ability.DEX, 1, 2, 2), + ]) + def test_adjust_attribute(self, source, target, value, new_source_val, new_target_val): + self.chargen.adjust_attribute(source, target, value) + self.assertEqual( + getattr(self.chargen, source.value), new_source_val, f"{source}->{target}") + self.assertEqual( + getattr(self.chargen, target.value), new_target_val, f"{source}->{target}") + + def test_adjust_consecutive(self): + # gradually shift all to STR (starts at 2) + self.chargen.adjust_attribute(enums.Ability.CON, enums.Ability.STR, 1) + self.chargen.adjust_attribute(enums.Ability.CHA, enums.Ability.STR, 1) + self.chargen.adjust_attribute(enums.Ability.DEX, enums.Ability.STR, 1) + self.chargen.adjust_attribute(enums.Ability.WIS, enums.Ability.STR, 1) + self.assertEqual(self.chargen.constitution, 1) + self.assertEqual(self.chargen.strength, 6) + + # max is 6 + with self.assertRaises(ValueError): + self.chargen.adjust_attribute(enums.Ability.INT, enums.Ability.STR, 1) + # minimum is 1 + with self.assertRaises(ValueError): + self.chargen.adjust_attribute(enums.Ability.DEX, enums.Ability.WIS, 1) + + # move all from str to wis + self.chargen.adjust_attribute(enums.Ability.STR, enums.Ability.WIS, 5) + + self.assertEqual(self.chargen.strength, 1) + self.assertEqual(self.chargen.wisdom, 6) + + def test_apply(self): + character = MagicMock() + + self.chargen.apply(character) + + self.assertTrue(character.db.desc.startswith("Herbalist")) + self.assertEqual(character.armor, "gambeson") + + character.equipment.store.assert_called() From e51df815fd30c20cb31693fe96681d6e889e84ee Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 27 May 2022 10:47:51 +0200 Subject: [PATCH 017/177] More testing --- evennia/contrib/tutorials/evadventure/characters.py | 1 + evennia/contrib/tutorials/evadventure/tests.py | 1 + 2 files changed, 2 insertions(+) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index cf3cc8a5f1..7aa20fa99b 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -25,6 +25,7 @@ class EquipmentHandler: The inventory also doubles as a measure of negative effects. Getting soaked in mud or slime could gunk up some of your inventory slots and make the items there unusuable until you clean them. + """ save_attribute = "inventory_slots" diff --git a/evennia/contrib/tutorials/evadventure/tests.py b/evennia/contrib/tutorials/evadventure/tests.py index 33aed12289..64bf30eb45 100644 --- a/evennia/contrib/tutorials/evadventure/tests.py +++ b/evennia/contrib/tutorials/evadventure/tests.py @@ -32,6 +32,7 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): pass + class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): """ Test the turn-based combat-handler implementation. From 246953a6a27fd11a3df388a7d1ab71b5639f9ea7 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 29 May 2022 13:40:42 +0200 Subject: [PATCH 018/177] Make more unit tests --- .../tutorials/evadventure/characters.py | 42 ++--- .../contrib/tutorials/evadventure/tests.py | 146 ++++++++++++++++-- 2 files changed, 160 insertions(+), 28 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 7aa20fa99b..d0f3d14333 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -74,7 +74,7 @@ class EquipmentHandler: Save slot to storage. """ - self.obj.attributes.add(self.save_attribute, category="inventory") + self.obj.attributes.add(self.save_attribute, self.slots, category="inventory") @property def max_slots(self): @@ -83,7 +83,7 @@ class EquipmentHandler: the constitution defense. """ - return getattr(self.obj, Ability.CON_DEFENSE.value, 11) + return getattr(self.obj, Ability.CON.value, 1) + 10 def validate_slot_usage(self, obj): """ @@ -101,9 +101,10 @@ class EquipmentHandler: current_slot_usage = self._count_slots() if current_slot_usage + size > max_slots: slots_left = max_slots - current_slot_usage - raise EquipmentError(f"Equipment full ({int2str(slots_left)} slots " - f"remaining, {obj.key} needs {int2str(size)} " + raise EquipmentError(f"Equipment full ($int2str({slots_left}) slots " + f"remaining, {obj.key} needs $int2str({size}) " f"$pluralize(slot, {size})).") + return True @property def armor(self): @@ -213,21 +214,26 @@ class EquipmentHandler: slots = self.slots ret = [] if isinstance(obj_or_slot, WieldLocation): - ret = slots[obj_or_slot] - slots[obj_or_slot] = [] if obj_or_slot is WieldLocation.BACKPACK else None - elif obj_or_slot in self.obj.contents: - # object is in inventory, find out which slot and empty it - for slot, objslot in slots: - if slot is WieldLocation.BACKPACK: - try: - ret = objslot.remove(obj_or_slot) - break - except ValueError: - pass - elif objslot is obj_or_slot: - ret = objslot + if obj_or_slot is WieldLocation.BACKPACK: + # empty entire backpack + ret.extend(slots[obj_or_slot]) + slots[obj_or_slot] = [] + else: + ret.append(slots[obj_or_slot]) + slots[obj_or_slot] = None + elif obj_or_slot in self.slots.values(): + # obj in use/wear slot + for slot, objslot in slots.items(): + if objslot is obj_or_slot: slots[slot] = None - break + ret.append(objslot) + elif obj_or_slot in slots[WieldLocation.BACKPACK]: + # obj in backpack slot + try: + slots[WieldLocation.BACKPACK].remove(obj_or_slot) + ret.append(obj_or_slot) + except ValueError: + pass if ret: self._save() return ret diff --git a/evennia/contrib/tutorials/evadventure/tests.py b/evennia/contrib/tutorials/evadventure/tests.py index 64bf30eb45..7043dd156c 100644 --- a/evennia/contrib/tutorials/evadventure/tests.py +++ b/evennia/contrib/tutorials/evadventure/tests.py @@ -7,7 +7,7 @@ from parameterized import parameterized from unittest.mock import patch, MagicMock, call from evennia.utils import create from evennia.utils.test_resources import BaseEvenniaTest -from .characters import EvAdventureCharacter +from .characters import EvAdventureCharacter, EquipmentHandler, EquipmentError from .objects import EvAdventureObject from . import enums from . import combat_turnbased @@ -19,18 +19,144 @@ class EvAdventureMixin: def setUp(self): super().setUp() self.character = create.create_object(EvAdventureCharacter, key="testchar") - self.helmet = create.create_object(EvAdventureObject, key="helmet", - attributes=[("wear_slot", "helmet")]) - self.armor = create.create_object(EvAdventureObject, key="armor", - attributes=[("wear_slot", "armor")]) - self.weapon = create.create_object(EvAdventureObject, key="weapon", - attributes=[("wield_slot", "weapon")]) - self.shield = create.create_object(EvAdventureObject, key="shield", - attributes=[("wield_slot", "shield")]) + self.helmet = create.create_object( + EvAdventureObject, key="helmet", + attributes=[("inventory_use_slot", enums.WieldLocation.HEAD)]) + self.shield = create.create_object( + EvAdventureObject, key="shield", + attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND)]) + self.armor = create.create_object( + EvAdventureObject, key="armor", + attributes=[("inventory_use_slot", enums.WieldLocation.BODY)]) + self.weapon = create.create_object( + EvAdventureObject, key="weapon", + attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)]) + self.big_weapon = create.create_object( + EvAdventureObject, key="big_weapon", + attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)]) + self.item = create.create_object(EvAdventureObject, key="backpack item") class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): - pass + """ + Test the equipment mechanism. + """ + def _get_empty_slots(self): + return { + enums.WieldLocation.BACKPACK: [], + enums.WieldLocation.WEAPON_HAND: None, + enums.WieldLocation.SHIELD_HAND: None, + enums.WieldLocation.TWO_HANDS: None, + enums.WieldLocation.BODY: None, + enums.WieldLocation.HEAD: None, + } + + def test_equipmenthandler_max_slots(self): + self.assertEqual(self.character.equipment.max_slots, 11) + + @parameterized.expand([ + # size, pass_validation? + (1, True), + (2, True), + (11, True), + (12, False), + (20, False), + (25, False) + ]) + def test_validate_slot_usage(self, size, is_ok): + obj = MagicMock() + obj.size = size + + if is_ok: + self.assertTrue(self.character.equipment.validate_slot_usage(obj)) + else: + with self.assertRaises(EquipmentError): + self.character.equipment.validate_slot_usage(obj) + + @parameterized.expand([ + # item, where + ("helmet", enums.WieldLocation.HEAD), + ("shield", enums.WieldLocation.SHIELD_HAND), + ("armor", enums.WieldLocation.BODY), + ("weapon", enums.WieldLocation.WEAPON_HAND), + ("big_weapon", enums.WieldLocation.TWO_HANDS), + ("item", enums.WieldLocation.BACKPACK), + ]) + def test_use(self, itemname, where): + self.assertEqual(self.character.equipment.slots, self._get_empty_slots()) + + obj = getattr(self, itemname) + self.character.equipment.use(obj) + # check that item ended up in the right place + if where is enums.WieldLocation.BACKPACK: + self.assertTrue(obj in self.character.equipment.slots[where]) + else: + self.assertEqual(self.character.equipment.slots[where], obj) + + def test_store(self): + self.character.equipment.store(self.weapon) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) + self.assertTrue( + self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK]) + + def test_two_handed_exclusive(self): + """Two-handed weapons can't be used together with weapon+shield""" + self.character.equipment.use(self.big_weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) + # equipping sword or shield removes two-hander + self.character.equipment.use(self.shield) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], None) + self.character.equipment.use(self.weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon) + # the two-hander removes the two weapons + self.character.equipment.use(self.big_weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) + + def test_remove__with_obj(self): + self.character.equipment.use(self.shield) + self.character.equipment.use(self.item) + self.character.equipment.store(self.weapon) + + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], + [self.item, self.weapon]) + + self.assertEqual(self.character.equipment.remove(self.shield), [self.shield]) + self.assertEqual(self.character.equipment.remove(self.item), [self.item]) + + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], + [self.weapon]) + + def test_remove__with_slot(self): + self.character.equipment.use(self.shield) + self.character.equipment.use(self.item) + self.character.equipment.store(self.helmet) + + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], + [self.item, self.helmet]) + + self.assertEqual(self.character.equipment.remove(enums.WieldLocation.SHIELD_HAND), + [self.shield]) + self.assertEqual(self.character.equipment.remove(enums.WieldLocation.BACKPACK), + [self.item, self.helmet]) + + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], []) class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): From 3b65ae7edbb5eb34805bb80774198b97c77fb48a Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 29 May 2022 13:43:43 +0200 Subject: [PATCH 019/177] Make more unit tests --- .../contrib/tutorials/evadventure/tests.py | 27 ++++++++++++++++--- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/tests.py b/evennia/contrib/tutorials/evadventure/tests.py index 7043dd156c..5344992876 100644 --- a/evennia/contrib/tutorials/evadventure/tests.py +++ b/evennia/contrib/tutorials/evadventure/tests.py @@ -21,13 +21,16 @@ class EvAdventureMixin: self.character = create.create_object(EvAdventureCharacter, key="testchar") self.helmet = create.create_object( EvAdventureObject, key="helmet", - attributes=[("inventory_use_slot", enums.WieldLocation.HEAD)]) + attributes=[("inventory_use_slot", enums.WieldLocation.HEAD), + ("armor", 1)]) self.shield = create.create_object( EvAdventureObject, key="shield", - attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND)]) + attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND), + ("armor", 1)]) self.armor = create.create_object( EvAdventureObject, key="armor", - attributes=[("inventory_use_slot", enums.WieldLocation.BODY)]) + attributes=[("inventory_use_slot", enums.WieldLocation.BODY), + ("armor", 11)]) self.weapon = create.create_object( EvAdventureObject, key="weapon", attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)]) @@ -113,6 +116,7 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): self.character.equipment.use(self.weapon) self.assertEqual( self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon) + # the two-hander removes the two weapons self.character.equipment.use(self.big_weapon) self.assertEqual( @@ -158,6 +162,19 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], []) + def test_properties(self): + self.character.equipment.use(self.armor) + self.assertEqual(self.character.equipment.armor, 11) + self.character.equipment.use(self.shield) + self.assertEqual(self.character.equipment.armor, 12) + self.character.equipment.use(self.helmet) + self.assertEqual(self.character.equipment.armor, 13) + + self.character.equipment.use(self.weapon) + self.assertEqual(self.character.equipment.weapon, self.weapon) + self.character.equipment.use(self.big_weapon) + self.assertEqual(self.character.equipment.weapon, self.big_weapon) + class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): """ @@ -166,8 +183,10 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): """ def setUp(self): super().setUp() - self.combathandler = combat_turnbased.EvAdventureCombatHandler() + self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create() + self.target = create.create_object(EvAdventureCharacter, key="testchar2") self.combathandler.add_combatant(self.character) + self.combathandler.add_combatant(self.target) def test_remove_combatant(self): self.combathandler.remove_combatant(self.character) From 056ce5b0da26b23ea9be48e7c97804caa1d2b214 Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 1 Jun 2022 22:03:56 +0200 Subject: [PATCH 020/177] Start unit tests for turn based combat --- .../tutorials/evadventure/combat_turnbased.py | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 4e7b890965..a3f00760f0 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -23,7 +23,7 @@ from collections import defaultdict from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import make_iter -from evennia.utils import evmenu, evtable +from evennia.utils import evmenu, evtable, dbserialize from .enums import Ability from . import rules @@ -60,6 +60,14 @@ class CombatAction: # send only to the combatant. self.combatant.msg(message) + def __serialize_dbobjs__(self): + self.combathandler = dbserialize.dbserialize(self.combathandler) + self.combatant = dbserialize.dbserialize(self.combatant) + + def __deserialize_dbobjs__(self): + self.combathandler = dbserialize.dbunserialize(self.combathandler) + self.combatant = dbserialize.dbunserialize(self.combatant) + def get_help(self, *args, **kwargs): return self.help_text @@ -380,7 +388,7 @@ class EvAdventureCombatHandler(DefaultScript): def remove_combatant(self, combatant): if combatant in self.combatants: self.combatants.remove(combatant) - self.combatant_actions[combatant][action_class].pop(None) + self.combatant_actions.pop(combatant, None) def get_combat_summary(self, combatant): """ From bdbac2cf0075886902aa432801074cddfb5ec5c1 Mon Sep 17 00:00:00 2001 From: Bruno Briante Date: Wed, 1 Jun 2022 22:29:12 -0300 Subject: [PATCH 021/177] fix google style URL on CODING_STYLE.md --- CODING_STYLE.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CODING_STYLE.md b/CODING_STYLE.md index 79b6a2c674..80e8ac595c 100644 --- a/CODING_STYLE.md +++ b/CODING_STYLE.md @@ -199,7 +199,7 @@ or in the chat. [pep8]: http://www.python.org/dev/peps/pep-0008 [pep8tool]: https://pypi.python.org/pypi/pep8 -[googlestyle]: http://www.sphinx-doc.org/en/stable/ext/example_google.html +[googlestyle]: https://www.sphinx-doc.org/en/master/usage/extensions/example_google.html [githubmarkdown]: https://help.github.com/articles/github-flavored-markdown/ [markdown-hilight]: https://help.github.com/articles/github-flavored-markdown/#syntax-highlighting [command-docstrings]: https://github.com/evennia/evennia/wiki/Using%20MUX%20As%20a%20Standard#documentation-policy From 7dc52316b99b14d22135acfe36fc622dc9354c53 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 5 Jun 2022 13:02:08 +0200 Subject: [PATCH 022/177] More evadventure tests --- .../tutorials/evadventure/combat_turnbased.py | 49 +++++++++++-------- .../contrib/tutorials/evadventure/tests.py | 30 +++++++++++- 2 files changed, 57 insertions(+), 22 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index a3f00760f0..5c093db54e 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -27,6 +27,8 @@ from evennia.utils import evmenu, evtable, dbserialize from .enums import Ability from . import rules +# for simplicity, we have a default duration for advantages/disadvantages + class CombatFailure(RuntimeError): """ @@ -108,7 +110,6 @@ class CombatActionDoNothing(CombatAction): post_action_text = "{combatant} does nothing this turn." - class CombatActionStunt(CombatAction): """ Perform a stunt. A stunt grants an advantage to yours or another player for their next @@ -126,9 +127,6 @@ class CombatActionStunt(CombatAction): give_disadvantage = False max_uses = 1 priority = -1 - # how many turns the stunt's effect apply (that is, how quickly it must be used before the - # advantage/disadvantage is lost). - duration = 5 attack_type = Ability.DEX defense_type = Ability.DEX help_text = ("Perform a stunt against a target. This will give you or an ally advantage " @@ -173,7 +171,7 @@ class CombatActionAttack(CombatAction): # figure out advantage (gained by previous stunts) advantage = bool(self.combathandler.advantage_matrix[attacker].pop(defender, False)) - # figure out disadvantage (by distance or by previous action) + # figure out disadvantage (gained by enemy stunts/actions) disadvantage = bool(self.combathandler.disadvantage_matrix[attacker].pop(defender, False)) is_hit, quality = rules.EvAdventureRollEngine.opposed_saving_throw( @@ -274,6 +272,10 @@ class EvAdventureCombatHandler(DefaultScript): of all active participants. It's also possible to join (or leave) the fray later. """ + + # we use the same duration for all stunts + stunt_duration = 3 + # these will all be checked if they are available at a given time. all_action_classes = [ CombatActionDoNothing, @@ -287,7 +289,6 @@ class EvAdventureCombatHandler(DefaultScript): # stores all combatants active in the combat combatants = AttributeProperty(list()) - combatant_actions = AttributeProperty(defaultdict(dict)) action_queue = AttributeProperty(dict()) turn_stats = AttributeProperty(defaultdict(list)) @@ -300,9 +301,19 @@ class EvAdventureCombatHandler(DefaultScript): fleeing_combatants = AttributeProperty(default=list()) + # how often this script ticks - the length of each turn (in seconds) + interval = 60 - # actions that will be performed before a normal action - move_actions = ("approach", "withdraw") + def at_repeat(self, **kwargs): + """ + Called every self.interval seconds. The main tick of the script. + + """ + if self.turn == 0: + self._start_turn() + else: + self._end_turn() + self._start_turn() def _update_turn_stats(self, combatant, message): """ @@ -332,9 +343,8 @@ class EvAdventureCombatHandler(DefaultScript): # do all actions for combatant in self.combatants: # read the current action type selected by the player - action_class, args, kwargs = self.action_queue[combatant] - # get the already initialized CombatAction instance (where state can be tracked) - action = self.combatant_actions[combatant][action_class] + action, args, kwargs = self.action_queue.get( + combatant, (CombatActionDoNothing(self, combatant), (), {})) # perform the action on the CombatAction instance action.use(combatant, *args, **kwargs) @@ -354,9 +364,10 @@ class EvAdventureCombatHandler(DefaultScript): self.msg(f"{combatant.key} disengaged and left combat.") self.remove_combatant(combatant) - # refresh stunt timeouts - - oldest_stunt_age = self.turn - STUNT_DURATION + # refresh stunt timeouts (note - self.stunt_duration is the same for + # all stunts; # for more complex use we could store the action and let action have a + # 'duration' property to use instead. + oldest_stunt_age = self.turn - self.stunt_duration advantage_matrix = self.advantage_matrix disadvantage_matrix = self.disadvantage_matrix @@ -382,13 +393,10 @@ class EvAdventureCombatHandler(DefaultScript): def add_combatant(self, combatant): if combatant not in self.combatants: self.combatants.append(combatant) - for action_class in self.all_action_classes: - self.combatant_actions[combatant][action_class] = action_class(self, combatant) def remove_combatant(self, combatant): if combatant in self.combatants: self.combatants.remove(combatant) - self.combatant_actions.pop(combatant, None) def get_combat_summary(self, combatant): """ @@ -504,19 +512,18 @@ class EvAdventureCombatHandler(DefaultScript): # defender still alive self.msg(defender) - def register_action(self, combatant, action=None, *args, **kwargs): + def register_action(self, action, combatant, *args, **kwargs): """ Register an action by-name. Args: combatant (Object): The one performing the action. - action (CombatAction): An available action, will be prepended with `action_` and - used to call the relevant handler on this script. + action (CombatAction): An available action class to use. """ if not action: action = CombatActionDoNothing - self.action_queue[combatant] = (action, args, kwargs) + self.action_queue[combatant] = (action(self, combatant), args, kwargs) # combat menu diff --git a/evennia/contrib/tutorials/evadventure/tests.py b/evennia/contrib/tutorials/evadventure/tests.py index 5344992876..04c71015b5 100644 --- a/evennia/contrib/tutorials/evadventure/tests.py +++ b/evennia/contrib/tutorials/evadventure/tests.py @@ -181,16 +181,44 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): Test the turn-based combat-handler implementation. """ + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased" + ".EvAdventureCombatHandler.interval", new=-1) def setUp(self): super().setUp() self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create() + self.combatant = self.character self.target = create.create_object(EvAdventureCharacter, key="testchar2") - self.combathandler.add_combatant(self.character) + self.combathandler.add_combatant(self.combatant) self.combathandler.add_combatant(self.target) def test_remove_combatant(self): self.combathandler.remove_combatant(self.character) + def test_start_turn(self): + self.combathandler._start_turn() + self.assertEqual(self.combathandler.turn, 1) + self.combathandler._start_turn() + self.assertEqual(self.combathandler.turn, 2) + + def test_end_of_turn__empty(self): + self.combathandler._end_turn() + + def test_register_and_run_action(self): + action = combat_turnbased.CombatActionAttack + action.use = MagicMock() + + self.combathandler.register_action(action, self.combatant) + self.combathandler._end_turn() + action.use.assert_called_once() + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_attack(self, mock_randint): + mock_randint = 8 + self.combathandler.register_action( + combat_turnbased.CombatActionAttack, + self.combatant, self.target) + self.combathandler._end_turn() + class EvAdventureRollEngineTest(BaseEvenniaTest): """ From a866cbcf3f6f4b46cdb545005923cc5a21a94c9e Mon Sep 17 00:00:00 2001 From: avalonhope <96471977+avalonhope@users.noreply.github.com> Date: Fri, 10 Jun 2022 12:18:44 +0100 Subject: [PATCH 023/177] Update link to discussion forum Old link pointed to Google groups; replaced with direct link to GitHub discussions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 73bb35181c..c58b35f5ec 100644 --- a/README.md +++ b/README.md @@ -76,6 +76,6 @@ Welcome! [coverlink]: https://coveralls.io/github/evennia/evennia?branch=master [introduction]: https://github.com/evennia/evennia/wiki/Evennia-Introduction [license]: https://github.com/evennia/evennia/wiki/Licensing -[group]: https://groups.google.com/forum/#!forum/evennia +[group]: https://github.com/evennia/evennia/discussions [chat]: http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb [wikimudpage]: http://en.wikipedia.org/wiki/MUD From 65ed25c8bacb742793fe3389e3cc2801f7b7dd68 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 12 Jun 2022 01:00:14 +0200 Subject: [PATCH 024/177] More updates to readme --- README.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 73bb35181c..9b32773135 100644 --- a/README.md +++ b/README.md @@ -60,22 +60,22 @@ introduction][introduction] to read. To learn how to get your hands on the code base, the [Getting started][gettingstarted] page is the way to go. Otherwise you could -browse the [Documentation][wiki] or why not come join the [Evennia +browse the [Documentation][docs] or why not come join the [Evennia Community forum][group] or join us in our [development chat][chat]. Welcome! -[homepage]: http://www.evennia.com -[gettingstarted]: http://github.com/evennia/evennia/wiki/Getting-Started -[wiki]: https://github.com/evennia/evennia/wiki +[homepage]: https://www.evennia.com +[gettingstarted]: https://www.evennia.com/docs/latest/Getting-Started.html +[docs]: https://www.evennia.com/docs/latest [screenshot]: https://user-images.githubusercontent.com/294267/30773728-ea45afb6-a076-11e7-8820-49be2168a6b8.png [logo]: https://github.com/evennia/evennia/blob/master/evennia/web/website/static/website/images/evennia_logo.png [unittestciimg]: https://github.com/evennia/evennia/workflows/test-suite/badge.svg [unittestcilink]: https://github.com/evennia/evennia/actions?query=workflow%3Atest-suite [coverimg]: https://coveralls.io/repos/github/evennia/evennia/badge.svg?branch=master [coverlink]: https://coveralls.io/github/evennia/evennia?branch=master -[introduction]: https://github.com/evennia/evennia/wiki/Evennia-Introduction -[license]: https://github.com/evennia/evennia/wiki/Licensing -[group]: https://groups.google.com/forum/#!forum/evennia -[chat]: http://webchat.freenode.net/?channels=evennia&uio=MT1mYWxzZSY5PXRydWUmMTE9MTk1JjEyPXRydWUbb +[introduction]: https://www.evennia.com/docs/latest/Evennia-Introduction.html +[license]: https://www.evennia.com/docs/latest/Licensing.html +[group]: https://github.com/evennia/evennia/discussions +[chat]: https://discord.gg/AJJpcRUhtF [wikimudpage]: http://en.wikipedia.org/wiki/MUD From 967ec536399e0de692f78c5f572b2bea5a36c403 Mon Sep 17 00:00:00 2001 From: "Cory F. Cohen" Date: Tue, 21 Jun 2022 21:07:11 -0400 Subject: [PATCH 025/177] Fix various typos in several files. All are in comments and docstrings, and none should be controversial in any way (e.g. British versus American spelling). --- evennia/accounts/accounts.py | 10 +++++----- evennia/commands/default/building.py | 6 +++--- evennia/commands/default/comms.py | 2 +- evennia/commands/default/help.py | 2 +- evennia/game_template/world/README.md | 2 +- evennia/game_template/world/prototypes.py | 4 ++-- evennia/server/sessionhandler.py | 4 ++-- evennia/utils/evmore.py | 4 ++-- evennia/utils/utils.py | 14 +++++++------- 9 files changed, 24 insertions(+), 24 deletions(-) diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index a6d9fbefd8..ae4839a792 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -660,7 +660,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): typeclass (str, optional): Typeclass to use for this character. If not given, use settings.BASE_CHARACTER_TYPECLASS. permissions (list, optional): If not given, use the account's permissions. - ip (str, optiona): The client IP creating this character. Will fall back to the + ip (str, optional): The client IP creating this character. Will fall back to the one stored for the account if not given. kwargs (any): Other kwargs will be used in the create_call. Returns: @@ -927,7 +927,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): kwargs (any): Other keyword arguments will be added to the found command object instance as variables before it executes. This is unused by default Evennia but may be - used to set flags and change operating paramaters for + used to set flags and change operating parameters for commands at run-time. """ @@ -1307,7 +1307,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): self._send_to_connect_channel(_("|G{key} connected|n").format(key=self.key)) if _MULTISESSION_MODE == 0: # in this mode we should have only one character available. We - # try to auto-connect to our last conneted object, if any + # try to auto-connect to our last connected object, if any try: self.puppet_object(session, self.db._last_puppet) except RuntimeError: @@ -1334,7 +1334,7 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): """ Called by the login process if a user account is targeted correctly but provided with an invalid password. By default it does nothing, - but exists to be overriden. + but exists to be overridden. Args: session (session): Session logging in. @@ -1574,7 +1574,7 @@ class DefaultGuest(DefaultAccount): Gets or creates a Guest account object. Keyword Args: - ip (str, optional): IP address of requestor; used for ban checking, + ip (str, optional): IP address of requester; used for ban checking, throttling and logging Returns: diff --git a/evennia/commands/default/building.py b/evennia/commands/default/building.py index 41ef42024d..52ea53e700 100644 --- a/evennia/commands/default/building.py +++ b/evennia/commands/default/building.py @@ -1061,7 +1061,7 @@ class CmdTunnel(COMMAND_DEFAULT_CLASS): exitname, backshort = self.directions[exitshort] backname = self.directions[backshort][0] - # if we recieved a typeclass for the exit, add it to the alias(short name) + # if we received a typeclass for the exit, add it to the alias(short name) if ":" in self.lhs: # limit to only the first : character exit_typeclass = ":" + self.lhs.split(":", 1)[-1] @@ -1647,7 +1647,7 @@ class CmdSetAttribute(ObjManipCommand): def split_nested_attr(self, attr): """ Yields tuples of (possible attr name, nested keys on that attr). - For performance, this is biased to the deepest match, but allows compatability + For performance, this is biased to the deepest match, but allows compatibility with older attrs that might have been named with `[]`'s. > list(split_nested_attr("nested['asdf'][0]")) @@ -3491,7 +3491,7 @@ class CmdSpawn(COMMAND_DEFAULT_CLASS): ) return try: - # we homogenize the protoype first, to be more lenient with free-form + # we homogenize the prototype first, to be more lenient with free-form protlib.validate_prototype(protlib.homogenize_prototype(prototype)) except RuntimeError as err: self.caller.msg(str(err)) diff --git a/evennia/commands/default/comms.py b/evennia/commands/default/comms.py index e6057cdc4b..4d6c53837a 100644 --- a/evennia/commands/default/comms.py +++ b/evennia/commands/default/comms.py @@ -1261,7 +1261,7 @@ class CmdRSS2Chan(COMMAND_DEFAULT_CLASS): class CmdGrapevine2Chan(COMMAND_DEFAULT_CLASS): """ - Link an Evennia channel to an exteral Grapevine channel + Link an Evennia channel to an external Grapevine channel Usage: grapevine2chan[/switches] = diff --git a/evennia/commands/default/help.py b/evennia/commands/default/help.py index 0cd74428c3..0d5b4eee5f 100644 --- a/evennia/commands/default/help.py +++ b/evennia/commands/default/help.py @@ -85,7 +85,7 @@ class CmdHelp(COMMAND_DEFAULT_CLASS): def format_help_entry(title, help_text, aliases=None, suggested=None): """ This visually formats the help entry. - This method can be overriden to customize the way a help + This method can be overridden to customize the way a help entry is displayed. Args: diff --git a/evennia/game_template/world/README.md b/evennia/game_template/world/README.md index 0f3862dad4..0e4a2fe18f 100644 --- a/evennia/game_template/world/README.md +++ b/evennia/game_template/world/README.md @@ -1,6 +1,6 @@ # world/ -This folder is meant as a miscellanous folder for all that other stuff +This folder is meant as a miscellaneous folder for all that other stuff related to the game. Code which are not commands or typeclasses go here, like custom economy systems, combat code, batch-files etc. diff --git a/evennia/game_template/world/prototypes.py b/evennia/game_template/world/prototypes.py index 04aba091f3..8a05ed5f6c 100644 --- a/evennia/game_template/world/prototypes.py +++ b/evennia/game_template/world/prototypes.py @@ -28,7 +28,7 @@ Possible keywords are: - `prototype_key` - the name of the prototype. This is required for db-prototypes, for module-prototypes, the global variable name of the dict is used instead - `prototype_parent` - string pointing to parent prototype if any. Prototype inherits - in a similar way as classes, with children overriding values in their partents. + in a similar way as classes, with children overriding values in their parents. - `key` - string, the main object identifier. - `typeclass` - string, if not set, will use `settings.BASE_OBJECT_TYPECLASS`. - `location` - this should be a valid object or #dbref. @@ -42,7 +42,7 @@ Possible keywords are: of the shorter forms, defaults are used for the rest. - `tags` - Tags, as a list of tuples `(tag,)`, `(tag, category)` or `(tag, category, data)`. - Any other keywords are interpreted as Attributes with no category or lock. - These will internally be added to `attrs` (eqivalent to `(attrname, value)`. + These will internally be added to `attrs` (equivalent to `(attrname, value)`. See the `spawn` command and `evennia.prototypes.spawner.spawn` for more info. diff --git a/evennia/server/sessionhandler.py b/evennia/server/sessionhandler.py index 9b78fc3378..5e407f65ca 100644 --- a/evennia/server/sessionhandler.py +++ b/evennia/server/sessionhandler.py @@ -58,7 +58,7 @@ SSHUTD = chr(7) # server shutdown SSYNC = chr(8) # server session sync SCONN = chr(11) # server portal connection (for bots) PCONNSYNC = chr(12) # portal post-syncing session -PDISCONNALL = chr(13) # portal session discnnect all +PDISCONNALL = chr(13) # portal session disconnect all SRELOAD = chr(14) # server reloading (have portal start a new server) SSTART = chr(15) # server start (portal must already be running anyway) PSHUTD = chr(16) # portal (+server) shutdown @@ -679,7 +679,7 @@ class ServerSessionHandler(SessionHandler): Get a unique list of connected and logged-in Accounts. Returns: - accounts (list): All conected Accounts (which may be fewer than the + accounts (list): All connected Accounts (which may be fewer than the amount of Sessions due to multi-playing). """ diff --git a/evennia/utils/evmore.py b/evennia/utils/evmore.py index 94b9689688..fc31555a20 100644 --- a/evennia/utils/evmore.py +++ b/evennia/utils/evmore.py @@ -173,7 +173,7 @@ class EvMore: justify (bool, optional): If set, auto-justify long lines. This must be turned off for fixed-width or formatted output, like tables. It's force-disabled if `inp` is an EvTable. - justify_kwargs (dict, optional): Keywords for the justifiy function. Used only + justify_kwargs (dict, optional): Keywords for the justify function. Used only if `justify` is True. If this is not set, default arguments will be used. exit_on_lastpage (bool, optional): If reaching the last page without the page being completely filled, exit pager immediately. If unset, @@ -518,7 +518,7 @@ class EvMore: def page_formatter(self, page): """ Page formatter. Every page passes through this method. Override - it to customize behvaior per-page. A common use is to generate a new + it to customize behavior per-page. A common use is to generate a new EvTable for every page (this is more efficient than to generate one huge EvTable across many pages and feed it into EvMore all at once). diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index 4aadc02768..7c2f2210e6 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -785,7 +785,7 @@ def latinify(string, default="?", pure_ascii=False): This is used as a last resort when normal encoding does not work. Arguments: - string (str): A string to convert to 'safe characters' convertable + string (str): A string to convert to 'safe characters' convertible to an latin-1 bytestring later. default (str, optional): Characters resisting mapping will be replaced with this character or string. The intent is to apply an encode operation @@ -1050,7 +1050,7 @@ def delay(timedelay, callback, *args, **kwargs): Keep in mind that persistent tasks arguments and callback should not use memory references. If persistent is set to True the delay function will return an int - which is the task's id itended for use with TASK_HANDLER's do_task + which is the task's id intended for use with TASK_HANDLER's do_task and remove methods. All persistent tasks whose time delays have passed will be called on server startup. @@ -1430,12 +1430,12 @@ def class_from_module(path, defaultpaths=None, fallback=None): defaultpaths (iterable, optional): If a direct import from `path` fails, try subsequent imports by prepending those paths to `path`. fallback (str): If all other attempts fail, use this path as a fallback. - This is intended as a last-resport. In the example of Evennia + This is intended as a last-resort. In the example of Evennia loading, this would be a path to a default parent class in the evennia repo itself. Returns: - class (Class): An uninstatiated class recovered from path. + class (Class): An uninstantiated class recovered from path. Raises: ImportError: If all loading failed. @@ -1574,7 +1574,7 @@ def string_partial_matching(alternatives, inp, ret_index=True): Matching is made from the start of each subword in each alternative. Case is not important. So e.g. "bi sh sw" or just "big" or "shiny" or "sw" will match "Big shiny sword". Scoring is - done to allow to separate by most common demoninator. You will get + done to allow to separate by most common denominator. You will get multiple matches returned if appropriate. Args: @@ -1647,7 +1647,7 @@ def format_table(table, extra_space=1): :: ftable = format_table([[...], [...], ...]) - for ir, row in enumarate(ftable): + for ir, row in enumerate(ftable): if ir == 0: # make first row white string += "\\\\n|w" + ""join(row) + "|n" @@ -2045,7 +2045,7 @@ def get_all_typeclasses(parent=None): typeclasses (dict): On the form {"typeclass.path": typeclass, ...} Notes: - This will dynamicall retrieve all abstract django models inheriting at any distance + This will dynamically retrieve all abstract django models inheriting at any distance from the TypedObject base (aka a Typeclass) so it will work fine with any custom classes being added. From c34d473143c31519594f6b29fa6537dfc4a4134e Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 3 Jul 2022 11:11:52 +0200 Subject: [PATCH 026/177] Set echo option, probably no effect --- evennia/server/portal/telnet.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/evennia/server/portal/telnet.py b/evennia/server/portal/telnet.py index 4d25696c50..5d764e34f7 100644 --- a/evennia/server/portal/telnet.py +++ b/evennia/server/portal/telnet.py @@ -226,6 +226,7 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, _BASE_SESSION_CLASS): or option == naws.NAWS or option == MCCP or option == mssp.MSSP + or option == ECHO or option == suppress_ga.SUPPRESS_GA ) @@ -236,6 +237,7 @@ class TelnetProtocol(Telnet, StatefulTelnetProtocol, _BASE_SESSION_CLASS): or option == naws.NAWS or option == MCCP or option == mssp.MSSP + or option == ECHO or option == suppress_ga.SUPPRESS_GA ) From 55856c5d60e1f2184b5425512f6a383141d3239c Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 3 Jul 2022 11:37:24 +0200 Subject: [PATCH 027/177] Refactor evadventure test structure --- .../tutorials/evadventure/combat_turnbased.py | 1 + .../tutorials/evadventure/tests/__init__.py | 0 .../tutorials/evadventure/tests/mixins.py | 38 ++ .../evadventure/tests/test_combat.py | 57 +++ .../{tests.py => tests/test_rules.py} | 360 +++++++----------- .../tutorials/evadventure/tests/tests.py | 18 + 6 files changed, 259 insertions(+), 215 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/tests/__init__.py create mode 100644 evennia/contrib/tutorials/evadventure/tests/mixins.py create mode 100644 evennia/contrib/tutorials/evadventure/tests/test_combat.py rename evennia/contrib/tutorials/evadventure/{tests.py => tests/test_rules.py} (84%) create mode 100644 evennia/contrib/tutorials/evadventure/tests/tests.py diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 5c093db54e..44845693fe 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -35,6 +35,7 @@ class CombatFailure(RuntimeError): Some failure during actions. """ + class CombatAction: """ This is the base of a combat-action, like 'attack' or defend. diff --git a/evennia/contrib/tutorials/evadventure/tests/__init__.py b/evennia/contrib/tutorials/evadventure/tests/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/evennia/contrib/tutorials/evadventure/tests/mixins.py b/evennia/contrib/tutorials/evadventure/tests/mixins.py new file mode 100644 index 0000000000..39e687c706 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/mixins.py @@ -0,0 +1,38 @@ +""" +Helpers for testing evadventure modules. + +""" + +from evennia.utils import create +from ..characters import EvAdventureCharacter +from ..objects import EvAdventureObject +from .. import enums + + +class EvAdventureMixin: + """ + Provides a set of pre-made characters. + + """ + def setUp(self): + super().setUp() + self.character = create.create_object(EvAdventureCharacter, key="testchar") + self.helmet = create.create_object( + EvAdventureObject, key="helmet", + attributes=[("inventory_use_slot", enums.WieldLocation.HEAD), + ("armor", 1)]) + self.shield = create.create_object( + EvAdventureObject, key="shield", + attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND), + ("armor", 1)]) + self.armor = create.create_object( + EvAdventureObject, key="armor", + attributes=[("inventory_use_slot", enums.WieldLocation.BODY), + ("armor", 11)]) + self.weapon = create.create_object( + EvAdventureObject, key="weapon", + attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)]) + self.big_weapon = create.create_object( + EvAdventureObject, key="big_weapon", + attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)]) + self.item = create.create_object(EvAdventureObject, key="backpack item") diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py new file mode 100644 index 0000000000..4629fd2063 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -0,0 +1,57 @@ +""" +Test EvAdventure combat. + +""" + +from unittest.mock import patch, MagicMock +from evennia.utils.test_resources import BaseEvenniaTest +from evennia.utils import create +from .mixins import EvAdventureMixin +from .. import combat_turnbased +from .. charactersd import EvAdventureCharacter + + +class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): + """ + Test the turn-based combat-handler implementation. + + """ + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased" + ".EvAdventureCombatHandler.interval", new=-1) + def setUp(self): + super().setUp() + self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create() + self.combatant = self.character + self.target = create.create_object(EvAdventureCharacter, key="testchar2") + self.combathandler.add_combatant(self.combatant) + self.combathandler.add_combatant(self.target) + + def test_remove_combatant(self): + self.combathandler.remove_combatant(self.character) + + def test_start_turn(self): + self.combathandler._start_turn() + self.assertEqual(self.combathandler.turn, 1) + self.combathandler._start_turn() + self.assertEqual(self.combathandler.turn, 2) + + def test_end_of_turn__empty(self): + self.combathandler._end_turn() + + def test_register_and_run_action(self): + action = combat_turnbased.CombatActionAttack + action.use = MagicMock() + + self.combathandler.register_action(action, self.combatant) + self.combathandler._end_turn() + action.use.assert_called_once() + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_attack(self, mock_randint): + mock_randint = 8 + self.combathandler.register_action( + combat_turnbased.CombatActionAttack, + self.combatant, self.target) + self.combathandler._end_turn() + + diff --git a/evennia/contrib/tutorials/evadventure/tests.py b/evennia/contrib/tutorials/evadventure/tests/test_rules.py similarity index 84% rename from evennia/contrib/tutorials/evadventure/tests.py rename to evennia/contrib/tutorials/evadventure/tests/test_rules.py index 04c71015b5..65dee75289 100644 --- a/evennia/contrib/tutorials/evadventure/tests.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_rules.py @@ -1,223 +1,17 @@ """ -Tests for EvAdventure. +Test the rules and chargen. """ -from parameterized import parameterized from unittest.mock import patch, MagicMock, call -from evennia.utils import create +from parameterized import parameterized from evennia.utils.test_resources import BaseEvenniaTest -from .characters import EvAdventureCharacter, EquipmentHandler, EquipmentError -from .objects import EvAdventureObject -from . import enums -from . import combat_turnbased -from . import rules -from . import random_tables - -class EvAdventureMixin: - def setUp(self): - super().setUp() - self.character = create.create_object(EvAdventureCharacter, key="testchar") - self.helmet = create.create_object( - EvAdventureObject, key="helmet", - attributes=[("inventory_use_slot", enums.WieldLocation.HEAD), - ("armor", 1)]) - self.shield = create.create_object( - EvAdventureObject, key="shield", - attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND), - ("armor", 1)]) - self.armor = create.create_object( - EvAdventureObject, key="armor", - attributes=[("inventory_use_slot", enums.WieldLocation.BODY), - ("armor", 11)]) - self.weapon = create.create_object( - EvAdventureObject, key="weapon", - attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)]) - self.big_weapon = create.create_object( - EvAdventureObject, key="big_weapon", - attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)]) - self.item = create.create_object(EvAdventureObject, key="backpack item") - -class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): - """ - Test the equipment mechanism. - - """ - def _get_empty_slots(self): - return { - enums.WieldLocation.BACKPACK: [], - enums.WieldLocation.WEAPON_HAND: None, - enums.WieldLocation.SHIELD_HAND: None, - enums.WieldLocation.TWO_HANDS: None, - enums.WieldLocation.BODY: None, - enums.WieldLocation.HEAD: None, - } - - def test_equipmenthandler_max_slots(self): - self.assertEqual(self.character.equipment.max_slots, 11) - - @parameterized.expand([ - # size, pass_validation? - (1, True), - (2, True), - (11, True), - (12, False), - (20, False), - (25, False) - ]) - def test_validate_slot_usage(self, size, is_ok): - obj = MagicMock() - obj.size = size - - if is_ok: - self.assertTrue(self.character.equipment.validate_slot_usage(obj)) - else: - with self.assertRaises(EquipmentError): - self.character.equipment.validate_slot_usage(obj) - - @parameterized.expand([ - # item, where - ("helmet", enums.WieldLocation.HEAD), - ("shield", enums.WieldLocation.SHIELD_HAND), - ("armor", enums.WieldLocation.BODY), - ("weapon", enums.WieldLocation.WEAPON_HAND), - ("big_weapon", enums.WieldLocation.TWO_HANDS), - ("item", enums.WieldLocation.BACKPACK), - ]) - def test_use(self, itemname, where): - self.assertEqual(self.character.equipment.slots, self._get_empty_slots()) - - obj = getattr(self, itemname) - self.character.equipment.use(obj) - # check that item ended up in the right place - if where is enums.WieldLocation.BACKPACK: - self.assertTrue(obj in self.character.equipment.slots[where]) - else: - self.assertEqual(self.character.equipment.slots[where], obj) - - def test_store(self): - self.character.equipment.store(self.weapon) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) - self.assertTrue( - self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK]) - - def test_two_handed_exclusive(self): - """Two-handed weapons can't be used together with weapon+shield""" - self.character.equipment.use(self.big_weapon) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) - # equipping sword or shield removes two-hander - self.character.equipment.use(self.shield) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], None) - self.character.equipment.use(self.weapon) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon) - - # the two-hander removes the two weapons - self.character.equipment.use(self.big_weapon) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) - - def test_remove__with_obj(self): - self.character.equipment.use(self.shield) - self.character.equipment.use(self.item) - self.character.equipment.store(self.weapon) - - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], - [self.item, self.weapon]) - - self.assertEqual(self.character.equipment.remove(self.shield), [self.shield]) - self.assertEqual(self.character.equipment.remove(self.item), [self.item]) - - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], - [self.weapon]) - - def test_remove__with_slot(self): - self.character.equipment.use(self.shield) - self.character.equipment.use(self.item) - self.character.equipment.store(self.helmet) - - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], - [self.item, self.helmet]) - - self.assertEqual(self.character.equipment.remove(enums.WieldLocation.SHIELD_HAND), - [self.shield]) - self.assertEqual(self.character.equipment.remove(enums.WieldLocation.BACKPACK), - [self.item, self.helmet]) - - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], []) - - def test_properties(self): - self.character.equipment.use(self.armor) - self.assertEqual(self.character.equipment.armor, 11) - self.character.equipment.use(self.shield) - self.assertEqual(self.character.equipment.armor, 12) - self.character.equipment.use(self.helmet) - self.assertEqual(self.character.equipment.armor, 13) - - self.character.equipment.use(self.weapon) - self.assertEqual(self.character.equipment.weapon, self.weapon) - self.character.equipment.use(self.big_weapon) - self.assertEqual(self.character.equipment.weapon, self.big_weapon) - - -class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): - """ - Test the turn-based combat-handler implementation. - - """ - @patch("evennia.contrib.tutorials.evadventure.combat_turnbased" - ".EvAdventureCombatHandler.interval", new=-1) - def setUp(self): - super().setUp() - self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create() - self.combatant = self.character - self.target = create.create_object(EvAdventureCharacter, key="testchar2") - self.combathandler.add_combatant(self.combatant) - self.combathandler.add_combatant(self.target) - - def test_remove_combatant(self): - self.combathandler.remove_combatant(self.character) - - def test_start_turn(self): - self.combathandler._start_turn() - self.assertEqual(self.combathandler.turn, 1) - self.combathandler._start_turn() - self.assertEqual(self.combathandler.turn, 2) - - def test_end_of_turn__empty(self): - self.combathandler._end_turn() - - def test_register_and_run_action(self): - action = combat_turnbased.CombatActionAttack - action.use = MagicMock() - - self.combathandler.register_action(action, self.combatant) - self.combathandler._end_turn() - action.use.assert_called_once() - - @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") - def test_attack(self, mock_randint): - mock_randint = 8 - self.combathandler.register_action( - combat_turnbased.CombatActionAttack, - self.combatant, self.target) - self.combathandler._end_turn() +from .mixins import EvAdventureMixin +from .. import rules +from .. import enums +from .. import random_tables +from .. import characters class EvAdventureRollEngineTest(BaseEvenniaTest): @@ -433,7 +227,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): class EvAdventureCharacterGenerationTest(BaseEvenniaTest): """ - Test the Character generator tracing object in the rule engine. + Test the Character generator in the rule engine. """ @@ -463,7 +257,6 @@ class EvAdventureCharacterGenerationTest(BaseEvenniaTest): "Has been exiled in the past. Favors neutrality." ) - @parameterized.expand([ # source, target, value, new_source_val, new_target_val (enums.Ability.CON, enums.Ability.STR, 1, 1, 3), @@ -511,3 +304,140 @@ class EvAdventureCharacterGenerationTest(BaseEvenniaTest): self.assertEqual(character.armor, "gambeson") character.equipment.store.assert_called() + + +class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): + """ + Test the equipment mechanism. + + """ + def _get_empty_slots(self): + return { + enums.WieldLocation.BACKPACK: [], + enums.WieldLocation.WEAPON_HAND: None, + enums.WieldLocation.SHIELD_HAND: None, + enums.WieldLocation.TWO_HANDS: None, + enums.WieldLocation.BODY: None, + enums.WieldLocation.HEAD: None, + } + + def test_equipmenthandler_max_slots(self): + self.assertEqual(self.character.equipment.max_slots, 11) + + @parameterized.expand([ + # size, pass_validation? + (1, True), + (2, True), + (11, True), + (12, False), + (20, False), + (25, False) + ]) + def test_validate_slot_usage(self, size, is_ok): + obj = MagicMock() + obj.size = size + + if is_ok: + self.assertTrue(self.character.equipment.validate_slot_usage(obj)) + else: + with self.assertRaises(characters.EquipmentError): + self.character.equipment.validate_slot_usage(obj) + + @parameterized.expand([ + # item, where + ("helmet", enums.WieldLocation.HEAD), + ("shield", enums.WieldLocation.SHIELD_HAND), + ("armor", enums.WieldLocation.BODY), + ("weapon", enums.WieldLocation.WEAPON_HAND), + ("big_weapon", enums.WieldLocation.TWO_HANDS), + ("item", enums.WieldLocation.BACKPACK), + ]) + def test_use(self, itemname, where): + self.assertEqual(self.character.equipment.slots, self._get_empty_slots()) + + obj = getattr(self, itemname) + self.character.equipment.use(obj) + # check that item ended up in the right place + if where is enums.WieldLocation.BACKPACK: + self.assertTrue(obj in self.character.equipment.slots[where]) + else: + self.assertEqual(self.character.equipment.slots[where], obj) + + def test_store(self): + self.character.equipment.store(self.weapon) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) + self.assertTrue( + self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK]) + + def test_two_handed_exclusive(self): + """Two-handed weapons can't be used together with weapon+shield""" + self.character.equipment.use(self.big_weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) + # equipping sword or shield removes two-hander + self.character.equipment.use(self.shield) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], None) + self.character.equipment.use(self.weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon) + + # the two-hander removes the two weapons + self.character.equipment.use(self.big_weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) + + def test_remove__with_obj(self): + self.character.equipment.use(self.shield) + self.character.equipment.use(self.item) + self.character.equipment.store(self.weapon) + + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], + [self.item, self.weapon]) + + self.assertEqual(self.character.equipment.remove(self.shield), [self.shield]) + self.assertEqual(self.character.equipment.remove(self.item), [self.item]) + + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], + [self.weapon]) + + def test_remove__with_slot(self): + self.character.equipment.use(self.shield) + self.character.equipment.use(self.item) + self.character.equipment.store(self.helmet) + + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], + [self.item, self.helmet]) + + self.assertEqual(self.character.equipment.remove(enums.WieldLocation.SHIELD_HAND), + [self.shield]) + self.assertEqual(self.character.equipment.remove(enums.WieldLocation.BACKPACK), + [self.item, self.helmet]) + + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], []) + + def test_properties(self): + self.character.equipment.use(self.armor) + self.assertEqual(self.character.equipment.armor, 11) + self.character.equipment.use(self.shield) + self.assertEqual(self.character.equipment.armor, 12) + self.character.equipment.use(self.helmet) + self.assertEqual(self.character.equipment.armor, 13) + + self.character.equipment.use(self.weapon) + self.assertEqual(self.character.equipment.weapon, self.weapon) + self.character.equipment.use(self.big_weapon) + self.assertEqual(self.character.equipment.weapon, self.big_weapon) diff --git a/evennia/contrib/tutorials/evadventure/tests/tests.py b/evennia/contrib/tutorials/evadventure/tests/tests.py new file mode 100644 index 0000000000..2be289d10c --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/tests.py @@ -0,0 +1,18 @@ +""" +Tests for EvAdventure. + +""" + +from unittest.mock import patch, MagicMock, call +from parameterized import parameterized +from evennia.utils import create +from evennia.utils.test_resources import BaseEvenniaTest +from .characters import EvAdventureCharacter, EquipmentHandler, EquipmentError +from .objects import EvAdventureObject +from . import enums +from . import combat_turnbased +from . import rules +from . import random_tables + + + From bc8ed94315bae80125ec204d60e69851e6b28f06 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 3 Jul 2022 11:40:26 +0200 Subject: [PATCH 028/177] Apply black to evadventure files --- .../tutorials/evadventure/characters.py | 29 +- .../tutorials/evadventure/combat_turnbased.py | 150 +++++--- .../contrib/tutorials/evadventure/enums.py | 4 + .../contrib/tutorials/evadventure/objects.py | 4 +- .../contrib/tutorials/evadventure/quests.py | 13 +- .../tutorials/evadventure/random_tables.py | 359 +++++++++++++++--- .../contrib/tutorials/evadventure/rules.py | 120 +++--- .../tutorials/evadventure/tests/mixins.py | 34 +- .../evadventure/tests/test_combat.py | 16 +- .../tutorials/evadventure/tests/test_rules.py | 246 ++++++------ .../tutorials/evadventure/tests/tests.py | 3 - .../contrib/tutorials/evadventure/utils.py | 2 - 12 files changed, 653 insertions(+), 327 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index d0f3d14333..3c2d4a5ea5 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -27,6 +27,7 @@ class EquipmentHandler: until you clean them. """ + save_attribute = "inventory_slots" def __init__(self, obj): @@ -47,8 +48,8 @@ class EquipmentHandler: WieldLocation.TWO_HANDS: None, WieldLocation.BODY: None, WieldLocation.HEAD: None, - WieldLocation.BACKPACK: [] - } + WieldLocation.BACKPACK: [], + }, ) def _count_slots(self): @@ -64,8 +65,7 @@ class EquipmentHandler: if slot is not WieldLocation.BACKPACK ) backpack_usage = sum( - getattr(slotobj, "size", 0) or 0 - for slotobj in slots[WieldLocation.BACKPACK] + getattr(slotobj, "size", 0) or 0 for slotobj in slots[WieldLocation.BACKPACK] ) return wield_usage + backpack_usage @@ -101,9 +101,11 @@ class EquipmentHandler: current_slot_usage = self._count_slots() if current_slot_usage + size > max_slots: slots_left = max_slots - current_slot_usage - raise EquipmentError(f"Equipment full ($int2str({slots_left}) slots " - f"remaining, {obj.key} needs $int2str({size}) " - f"$pluralize(slot, {size})).") + raise EquipmentError( + f"Equipment full ($int2str({slots_left}) slots " + f"remaining, {obj.key} needs $int2str({size}) " + f"$pluralize(slot, {size}))." + ) return True @property @@ -120,11 +122,13 @@ class EquipmentHandler: """ slots = self.slots - return sum(( - getattr(slots[WieldLocation.BODY], "armor", 0), - getattr(slots[WieldLocation.SHIELD_HAND], "armor", 0), - getattr(slots[WieldLocation.HEAD], "armor", 0), - )) + return sum( + ( + getattr(slots[WieldLocation.BODY], "armor", 0), + getattr(slots[WieldLocation.SHIELD_HAND], "armor", 0), + getattr(slots[WieldLocation.HEAD], "armor", 0), + ) + ) @property def weapon(self): @@ -423,6 +427,7 @@ class EvAdventureNPC(LivingMixin, DefaultCharacter): EvAdventureCharacter class instead. """ + hit_dice = AttributeProperty(default=1) armor = AttributeProperty(default=11) morale = AttributeProperty(default=9) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 44845693fe..1f9ed504ad 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -42,7 +42,8 @@ class CombatAction: Inherit from this to make new actions. """ - key = 'action' + + key = "action" help_text = "Combat action to perform." # action to echo to everyone. post_action_text = "{combatant} performed an action." @@ -107,6 +108,7 @@ class CombatActionDoNothing(CombatAction): Do nothing this turn. """ + help_text = "Hold you position, doing nothing." post_action_text = "{combatant} does nothing this turn." @@ -124,24 +126,29 @@ class CombatActionStunt(CombatAction): spend a use unless they succeed. """ + give_advantage = True give_disadvantage = False max_uses = 1 priority = -1 attack_type = Ability.DEX defense_type = Ability.DEX - help_text = ("Perform a stunt against a target. This will give you or an ally advantage " - "on your next action against the same target [range 0-1, one use per combat. " - "Bonus lasts for two turns].") + help_text = ( + "Perform a stunt against a target. This will give you or an ally advantage " + "on your next action against the same target [range 0-1, one use per combat. " + "Bonus lasts for two turns]." + ) def use(self, attacker, defender, *args, beneficiary=None, **kwargs): # quality doesn't matter for stunts, they are either successful or not - is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( - attacker, defender, + is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + attacker, + defender, attack_type=self.attack_type, defense_type=self.defense_type, - advantage=False, disadvantage=disadvantage, + advantage=False, + disadvantage=disadvantage, ) if is_success: beneficiary = beneficiary if beneficiary else attacker @@ -161,6 +168,7 @@ class CombatActionAttack(CombatAction): melee attack. """ + key = "attack" priority = 1 @@ -176,14 +184,17 @@ class CombatActionAttack(CombatAction): disadvantage = bool(self.combathandler.disadvantage_matrix[attacker].pop(defender, False)) is_hit, quality = rules.EvAdventureRollEngine.opposed_saving_throw( - attacker, defender, + attacker, + defender, attack_type=attacker.weapon.attack_type, defense_type=attacker.weapon.defense_type, - advantage=advantage, disadvantage=disadvantage + advantage=advantage, + disadvantage=disadvantage, ) if is_hit: - self.combathandler.resolve_damage(attacker, defender, - critical=quality == "critical success") + self.combathandler.resolve_damage( + attacker, defender, critical=quality == "critical success" + ) # TODO messaging here @@ -204,6 +215,7 @@ class CombatActionUseItem(CombatAction): combat_post_use """ + def get_help(self, item, *args): return item.combat_get_help(*args) @@ -227,6 +239,7 @@ class CombatActionFlee(CombatAction): end of the second turn. """ + key = "flee" priority = -1 @@ -234,37 +247,42 @@ class CombatActionFlee(CombatAction): # it's safe to do this twice self.combathandler.flee(combatant) + class CombatActionChase(CombatAction): - """ - Chasing is a way to counter a 'flee' action. It is a maximum movement towards the target - and will mean a DEX contest, if the fleeing target loses, they are moved back from - 'disengaging' range and remain in combat at the new distance (likely 2 if max movement - is 2). Advantage/disadvantage are considered. + """ + Chasing is a way to counter a 'flee' action. It is a maximum movement towards the target + and will mean a DEX contest, if the fleeing target loses, they are moved back from + 'disengaging' range and remain in combat at the new distance (likely 2 if max movement + is 2). Advantage/disadvantage are considered. - """ - key = "chase" - priority = -5 # checked last + """ - attack_type = Ability.DEX # or is it CON? - defense_type = Ability.DEX + key = "chase" + priority = -5 # checked last - def use(self, combatant, fleeing_target, *args, **kwargs): + attack_type = Ability.DEX # or is it CON? + defense_type = Ability.DEX - advantage = bool(self.advantage_matrix[attacker].pop(fleeing_target, False)) - disadvantage = bool(self.disadvantage_matrix[attacker].pop(fleeing_target, False)) + def use(self, combatant, fleeing_target, *args, **kwargs): - is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( - combatant, fleeing_target, - attack_type=self.attack_type, defense_type=self.defense_type, - advantage=advantage, disadvantage=disadvantage - ) + advantage = bool(self.advantage_matrix[attacker].pop(fleeing_target, False)) + disadvantage = bool(self.disadvantage_matrix[attacker].pop(fleeing_target, False)) - if is_success: - # managed to stop the target from fleeing/disengaging - self.combatant.unflee(fleeing_target) - else: - pass # they are getting away! + is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + combatant, + fleeing_target, + attack_type=self.attack_type, + defense_type=self.defense_type, + advantage=advantage, + disadvantage=disadvantage, + ) + + if is_success: + # managed to stop the target from fleeing/disengaging + self.combatant.unflee(fleeing_target) + else: + pass # they are getting away! class EvAdventureCombatHandler(DefaultScript): @@ -283,7 +301,7 @@ class EvAdventureCombatHandler(DefaultScript): CombatActionChase, CombatActionUseItem, CombatActionStunt, - CombatActionAttack + CombatActionAttack, ] # attributes @@ -345,7 +363,8 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in self.combatants: # read the current action type selected by the player action, args, kwargs = self.action_queue.get( - combatant, (CombatActionDoNothing(self, combatant), (), {})) + combatant, (CombatActionDoNothing(self, combatant), (), {}) + ) # perform the action on the CombatAction instance action.use(combatant, *args, **kwargs) @@ -380,11 +399,13 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in self.combatants: new_advantage_matrix[combatant] = { - target: set_at_turn for target, turn in advantage_matrix.items() + target: set_at_turn + for target, turn in advantage_matrix.items() if set_at_turn > oldest_stunt_age } new_disadvantage_matrix[combatant] = { - target: set_at_turn for target, turn in disadvantage_matrix.items() + target: set_at_turn + for target, turn in disadvantage_matrix.items() if set_at_turn > oldest_stunt_age } @@ -500,8 +521,11 @@ class EvAdventureCombatHandler(DefaultScript): if defender.hp > 0: # they are weakened, but with hp - self.msg("You are alive, but out of the fight. If you want to press your luck, " - "you need to rejoin the combat.", targets=defender) + self.msg( + "You are alive, but out of the fight. If you want to press your luck, " + "you need to rejoin the combat.", + targets=defender, + ) defender.at_defeat() # note - NPC monsters may still 'die' here else: # outright killed @@ -537,19 +561,16 @@ combat_script = """ """ - def _register_action(caller, raw_string, **kwargs): """ Register action with handler. """ - action = kwargs.get['action'] - action_args = kwargs['action_args'] - action_kwargs = kwargs['action_kwargs'] + action = kwargs.get["action"] + action_args = kwargs["action_args"] + action_kwargs = kwargs["action_kwargs"] combat = caller.scripts.get("combathandler") - combat.register_action( - caller, action=action, *action_args, **action_kwargs - ) + combat.register_action(caller, action=action, *action_args, **action_kwargs) def node_select_target(caller, raw_string, **kwargs): @@ -558,9 +579,9 @@ def node_select_target(caller, raw_string, **kwargs): with all other actions. """ - action = kwargs.get('action') - action_args = kwargs.get('action_args') - action_kwargs = kwargs.get('action_kwargs') + action = kwargs.get("action") + action_args = kwargs.get("action_args") + action_kwargs = kwargs.get("action_kwargs") combat = caller.scripts.get("combathandler") text = "Select target for |w{action}|n." @@ -568,22 +589,26 @@ def node_select_target(caller, raw_string, **kwargs): options = [ { "desc": combatant.key, - "goto": (_register_action, {"action": action, - "args": action_args, - "kwargs": action_kwargs}) + "goto": ( + _register_action, + {"action": action, "args": action_args, "kwargs": action_kwargs}, + ), } - for combatant in combat.combatants] + for combatant in combat.combatants + ] # make the apply-self option always the last one options.append( { "desc": "(yourself)", - "goto": (_register_action, {"action": action, - "args": action_args, - "kwargs": action_kwargs}) + "goto": ( + _register_action, + {"action": action, "args": action_args, "kwargs": action_kwargs}, + ), } ) return text, options + def node_select_action(caller, raw_string, **kwargs): """ Menu node for selecting a combat action. @@ -593,13 +618,14 @@ def node_select_action(caller, raw_string, **kwargs): text = combat.get_previous_turn_status(caller) options = combat.get_available_options(caller) - options = { "desc": action, - "goto": ("node_select_target", {"action": action, - }) - + "goto": ( + "node_select_target", + { + "action": action, + }, + ), } - return text, options diff --git a/evennia/contrib/tutorials/evadventure/enums.py b/evennia/contrib/tutorials/evadventure/enums.py index c6c24d7b97..8cd934fec1 100644 --- a/evennia/contrib/tutorials/evadventure/enums.py +++ b/evennia/contrib/tutorials/evadventure/enums.py @@ -16,11 +16,13 @@ To get the `value` of an enum (must always be hashable, useful for Attribute loo """ from enum import Enum + class Ability(Enum): """ The six base abilities (defense is always bonus + 10) """ + STR = "strength" DEX = "dexterity" CON = "constitution" @@ -45,11 +47,13 @@ class Ability(Enum): CRITICAL_FAILURE = "critical_failure" CRITICAL_SUCCESS = "critical_success" + class WieldLocation(Enum): """ Wield (or wear) locations. """ + # wield/wear location BACKPACK = "backpack" WEAPON_HAND = "weapon_hand" diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index 499571d9a6..b08ffe1e54 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -13,12 +13,12 @@ from evennia.typeclasses.attributes import AttributeProperty from .enums import WieldLocation, Ability - class EvAdventureObject(DefaultObject): """ Base in-game entity. """ + # inventory management inventory_use_slot = AttributeProperty(default=WieldLocation.BACKPACK) # how many inventory slots it uses (can be a fraction) @@ -41,6 +41,7 @@ class EvAdventureObjectFiller(EvAdventureObject): meaning it's unusable. """ + quality = AttributeProperty(default=0) @@ -49,6 +50,7 @@ class EvAdventureWeapon(EvAdventureObject): Base weapon class for all EvAdventure weapons. """ + inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND) attack_type = AttributeProperty(default=Ability.STR) diff --git a/evennia/contrib/tutorials/evadventure/quests.py b/evennia/contrib/tutorials/evadventure/quests.py index 0eefba39d1..54fcb52423 100644 --- a/evennia/contrib/tutorials/evadventure/quests.py +++ b/evennia/contrib/tutorials/evadventure/quests.py @@ -31,6 +31,7 @@ class EvAdventureQuest: check_ and complete_ """ + # name + category must be globally unique. They are # queried as name:category or just name, if category is empty. name = "" @@ -44,11 +45,9 @@ class EvAdventureQuest: def check(): pass - def progress(self, quester, *args, **kwargs): - """ + """ """ - """ class EvAdventureQuestHandler: """ @@ -63,15 +62,14 @@ class EvAdventureQuestHandler: ``` """ + quest_storage_attribute = "_quests" quest_storage_attribute_category = "evadventure" def __init__(self, obj): self.obj = obj self.storage = obj.attributes.get( - self.quest_storage_attribute, - category=self.quest_storage_attribute_category, - default={} + self.quest_storage_attribute, category=self.quest_storage_attribute_category, default={} ) def quest_storage_key(self, name, category): @@ -116,6 +114,3 @@ class EvAdventureQuestHandler: start immediately. """ - - - diff --git a/evennia/contrib/tutorials/evadventure/random_tables.py b/evennia/contrib/tutorials/evadventure/random_tables.py index cac6566369..12a81dd167 100644 --- a/evennia/contrib/tutorials/evadventure/random_tables.py +++ b/evennia/contrib/tutorials/evadventure/random_tables.py @@ -227,26 +227,26 @@ character_generation = { "suspected", ], "alignment": [ - ('1-5', "law"), - ('6-15', "neutrality"), - ('16-20', "chaos"), + ("1-5", "law"), + ("6-15", "neutrality"), + ("16-20", "chaos"), ], "armor": [ - ('1-3', "no armor"), - ('4-14', "gambeson"), - ('15-19', "brigandine"), - ('20', "chain"), + ("1-3", "no armor"), + ("4-14", "gambeson"), + ("15-19", "brigandine"), + ("20", "chain"), ], "helmets and shields": [ - ('1-13', "no helmet or shield"), - ('14-16', "helmet"), - ('17-19', "shield"), - ('20', "helmet and shield"), + ("1-13", "no helmet or shield"), + ("14-16", "helmet"), + ("17-19", "shield"), + ("20", "helmet and shield"), ], "starting weapon": [ # note: these are all d6 dmg weapons - ('1-7', "dagger"), - ('8-13', "club"), - ('14-20', "staff"), + ("1-7", "dagger"), + ("8-13", "club"), + ("14-20", "staff"), ], "dungeoning gear": [ "rope, 50ft", @@ -315,55 +315,303 @@ character_generation = { "small bell", ], "name": [ - "Abbo", "Adelaide", "Ellis", "Eleanor", "Lief", "Luanda", "Ablerus", "Agatha", - "Eneto", "Elizabeth", "Luke", "Lyra", "Acot", "Aleida", "Enio", "Elspeth", "Martin", - "Mabel", "Alexander", "Alexia", "Eral", "Emeline", "Merrick", "Maerwynn", "Almanzor", - "Alianor", "Erasmus", "Emma", "Mortimer", "Malkyn", "Althalos", "Aline", "Eustace", - "Emmony", "Ogden", "Margaret", "Ancelot", "Alma", "Everard", "Enna", "Oliver", "Margery", - "Asher", "Alys", "Faustus", "Enndolynn", "Orion", "Maria", "Aster", "Amabel", "Favian", - "Eve", "Oswald", "Marion", "Balan", "Amice", "Fendrel", "Evita", "Pelagon", "Matilda", - "Balthazar", "Anastas", "Finn", "Felice", "Pello", "Millicent", "Barat", "Angmar", - "Florian", "Fern", "Peyton", "Mirabelle", "Bartholomew", "Annabel", "Francis", "Floria", - "Philip", "Muriel", "Basil", "Arabella", "Frederick", "Fredegonde", "Poeas", "Nabarne", - "Benedict", "Ariana", "Gaidon", "Gillian", "Quinn", "Nell", "Berinon", "Ayleth", "Gavin", - "Gloriana", "Ralph", "Nesea", "Bertram", "Barberry", "Geoffrey", "Godeleva", "Randolph", - "Niree", "Beves", "Barsaba", "Gerard", "Godiva", "Reginald", "Odette", "Bilmer", - "Basilia", "Gervase", "Gunnilda", "Reynold", "Odila", "Blanko", "Beatrix", "Gilbert", - "Gussalen", "Richard", "Oria", "Bodo", "Benevolence", "Giles", "Gwendolynn", "Robert", - "Osanna", "Borin", "Bess", "Godfrey", "Hawise", "Robin", "Ostrythe", "Bryce", "Brangian", - "Gregory", "Helena", "Roger", "Ottilia", "Carac", "Brigida", "Gringoire", "Helewise", - "Ronald", "Panope", "Caspar", "Brunhild", "Gunthar", "Hester", "Rowan", "Paternain", - "Cassius", "Camilla", "Guy", "Hildegard", "Rulf", "Pechel", "Cedric", "Canace", "Gyras", - "Idony", "Sabin", "Pepper", "Cephalos", "Cecily", "Hadrian", "Isabella", "Sevrin", - "Petronilla", "Chadwick", "Cedany", "Hedelf", "Iseult", "Silas", "Phrowenia", "Charillos", - "Christina", "Hewelin", "Isolde", "Simon", "Poppy", "Charles", "Claramunda", "Hilderith", - "Jacquelyn", "Solomon", "Quenell", "Chermon", "Clarice", "Humbert", "Jasmine", "Stephen", - "Raisa", "Clement", "Clover", "Hyllus", "Jessamine", "Terrowin", "Reyna", "Clifton", - "Collette", "Ianto", "Josselyn", "Thomas", "Rixende", "Clovis", "Constance", "Ibykos", - "Juliana", "Tristan", "Rosamund", "Cyon", "Damaris", "Inigo", "Karitate", "Tybalt", - "Rose", "Dain", "Daphne", "Itylus", "Katelyn", "Ulric", "Ryia", "Dalmas", "Demona", - "James", "Katja", "Walter", "Sarah", "Danor", "Dimia", "Jasper", "Katrina", "Wander", - "Seraphina", "Destrian", "Dione", "Jiles", "Kaylein", "Warin", "Thea", "Domeka", - "Dorothea", "Joffridus", "Kinna", "Waverly", "Trillby", "Donald", "Douce", "Jordan", - "Krea", "Willahelm", "Wendel", "Doran", "Duraina", "Joris", "Kypris", "William", - "Wilberga", "Dumphey", "Dyota", "Josef", "Landerra", "Wimarc", "Winifred", "Eadmund", - "Eberhild", "Laurence", "Larraza", "Wystan", "Wofled", "Eckardus", "Edelot", "Leofrick", - "Linet", "Xalvador", "Wymarc", "Edward", "Edyva", "Letholdus", "Loreena", "Zane", "Ysmay", + "Abbo", + "Adelaide", + "Ellis", + "Eleanor", + "Lief", + "Luanda", + "Ablerus", + "Agatha", + "Eneto", + "Elizabeth", + "Luke", + "Lyra", + "Acot", + "Aleida", + "Enio", + "Elspeth", + "Martin", + "Mabel", + "Alexander", + "Alexia", + "Eral", + "Emeline", + "Merrick", + "Maerwynn", + "Almanzor", + "Alianor", + "Erasmus", + "Emma", + "Mortimer", + "Malkyn", + "Althalos", + "Aline", + "Eustace", + "Emmony", + "Ogden", + "Margaret", + "Ancelot", + "Alma", + "Everard", + "Enna", + "Oliver", + "Margery", + "Asher", + "Alys", + "Faustus", + "Enndolynn", + "Orion", + "Maria", + "Aster", + "Amabel", + "Favian", + "Eve", + "Oswald", + "Marion", + "Balan", + "Amice", + "Fendrel", + "Evita", + "Pelagon", + "Matilda", + "Balthazar", + "Anastas", + "Finn", + "Felice", + "Pello", + "Millicent", + "Barat", + "Angmar", + "Florian", + "Fern", + "Peyton", + "Mirabelle", + "Bartholomew", + "Annabel", + "Francis", + "Floria", + "Philip", + "Muriel", + "Basil", + "Arabella", + "Frederick", + "Fredegonde", + "Poeas", + "Nabarne", + "Benedict", + "Ariana", + "Gaidon", + "Gillian", + "Quinn", + "Nell", + "Berinon", + "Ayleth", + "Gavin", + "Gloriana", + "Ralph", + "Nesea", + "Bertram", + "Barberry", + "Geoffrey", + "Godeleva", + "Randolph", + "Niree", + "Beves", + "Barsaba", + "Gerard", + "Godiva", + "Reginald", + "Odette", + "Bilmer", + "Basilia", + "Gervase", + "Gunnilda", + "Reynold", + "Odila", + "Blanko", + "Beatrix", + "Gilbert", + "Gussalen", + "Richard", + "Oria", + "Bodo", + "Benevolence", + "Giles", + "Gwendolynn", + "Robert", + "Osanna", + "Borin", + "Bess", + "Godfrey", + "Hawise", + "Robin", + "Ostrythe", + "Bryce", + "Brangian", + "Gregory", + "Helena", + "Roger", + "Ottilia", + "Carac", + "Brigida", + "Gringoire", + "Helewise", + "Ronald", + "Panope", + "Caspar", + "Brunhild", + "Gunthar", + "Hester", + "Rowan", + "Paternain", + "Cassius", + "Camilla", + "Guy", + "Hildegard", + "Rulf", + "Pechel", + "Cedric", + "Canace", + "Gyras", + "Idony", + "Sabin", + "Pepper", + "Cephalos", + "Cecily", + "Hadrian", + "Isabella", + "Sevrin", + "Petronilla", + "Chadwick", + "Cedany", + "Hedelf", + "Iseult", + "Silas", + "Phrowenia", + "Charillos", + "Christina", + "Hewelin", + "Isolde", + "Simon", + "Poppy", + "Charles", + "Claramunda", + "Hilderith", + "Jacquelyn", + "Solomon", + "Quenell", + "Chermon", + "Clarice", + "Humbert", + "Jasmine", + "Stephen", + "Raisa", + "Clement", + "Clover", + "Hyllus", + "Jessamine", + "Terrowin", + "Reyna", + "Clifton", + "Collette", + "Ianto", + "Josselyn", + "Thomas", + "Rixende", + "Clovis", + "Constance", + "Ibykos", + "Juliana", + "Tristan", + "Rosamund", + "Cyon", + "Damaris", + "Inigo", + "Karitate", + "Tybalt", + "Rose", + "Dain", + "Daphne", + "Itylus", + "Katelyn", + "Ulric", + "Ryia", + "Dalmas", + "Demona", + "James", + "Katja", + "Walter", + "Sarah", + "Danor", + "Dimia", + "Jasper", + "Katrina", + "Wander", + "Seraphina", + "Destrian", + "Dione", + "Jiles", + "Kaylein", + "Warin", + "Thea", + "Domeka", + "Dorothea", + "Joffridus", + "Kinna", + "Waverly", + "Trillby", + "Donald", + "Douce", + "Jordan", + "Krea", + "Willahelm", + "Wendel", + "Doran", + "Duraina", + "Joris", + "Kypris", + "William", + "Wilberga", + "Dumphey", + "Dyota", + "Josef", + "Landerra", + "Wimarc", + "Winifred", + "Eadmund", + "Eberhild", + "Laurence", + "Larraza", + "Wystan", + "Wofled", + "Eckardus", + "Edelot", + "Leofrick", + "Linet", + "Xalvador", + "Wymarc", + "Edward", + "Edyva", + "Letholdus", + "Loreena", + "Zane", + "Ysmay", ], } reactions = [ - ('2', "Hostile"), - ('3-5', "Unfriendly"), - ('6-8', "Unsure"), - ('9-11', "Talkative"), - ('12', "Helpful"), + ("2", "Hostile"), + ("3-5", "Unfriendly"), + ("6-8", "Unsure"), + ("9-11", "Talkative"), + ("12", "Helpful"), ] initiative = [ - ('1-3', "Enemy acts first"), - ('4-6', "PC acts first"), + ("1-3", "Enemy acts first"), + ("4-6", "PC acts first"), ] @@ -377,4 +625,3 @@ death_and_dismemberment = [ "rattled", # -1d4 WIS "disfigured", # -1d4 CHA ] - diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 150458d035..595e572c06 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -28,12 +28,13 @@ from evennia.utils.evtable import EvTable from .enums import Ability from .random_tables import ( character_generation as chargen_table, - death_and_dismemberment as death_table + death_and_dismemberment as death_table, ) # Basic rolls + class EvAdventureRollEngine: """ This groups all dice rolls of EvAdventure. These could all have been normal functions, but we @@ -66,10 +67,11 @@ class EvAdventureRollEngine: """ max_diesize = 1000 roll_string = roll_string.lower() - if 'd' not in roll_string: - raise TypeError(f"Dice roll '{roll_string}' was not recognized. " - "Must be `d`.") - number, diesize = roll_string.split('d', 1) + if "d" not in roll_string: + raise TypeError( + f"Dice roll '{roll_string}' was not recognized. " "Must be `d`." + ) + number, diesize = roll_string.split("d", 1) try: number = int(number) diesize = int(diesize) @@ -104,8 +106,15 @@ class EvAdventureRollEngine: else: return min(self.roll("1d20"), self.roll("1d20")) - def saving_throw(self, character, bonus_type=Ability.STR, target=15, - advantage=False, disadvantage=False, modifier=0): + def saving_throw( + self, + character, + bonus_type=Ability.STR, + target=15, + advantage=False, + disadvantage=False, + modifier=0, + ): """ A saving throw without a clear enemy to beat. In _Knave_ all unopposed saving throws always tries to beat 15, so (d20 + bonus + modifier) > 15. @@ -142,9 +151,15 @@ class EvAdventureRollEngine: return (dice_roll + bonus + modifier) > target, quality def opposed_saving_throw( - self, attacker, defender, - attack_type=Ability.STR, defense_type=Ability.ARMOR, - advantage=False, disadvantage=False, modifier=0): + self, + attacker, + defender, + attack_type=Ability.STR, + defense_type=Ability.ARMOR, + advantage=False, + disadvantage=False, + modifier=0, + ): """ An saving throw that tries to beat an active opposing side. @@ -167,10 +182,14 @@ class EvAdventureRollEngine: """ defender_defense = getattr(defender, defense_type.value, 1) + 10 - return self.saving_throw(attacker, bonus_type=attack_type, - target=defender_defense, - advantage=advantage, disadvantage=disadvantage, - modifier=modifier) + return self.saving_throw( + attacker, + bonus_type=attack_type, + target=defender_defense, + advantage=advantage, + disadvantage=disadvantage, + modifier=modifier, + ) def roll_random_table(self, dieroll, table_choices): """ @@ -204,7 +223,7 @@ class EvAdventureRollEngine: min_range = 10**6 for (valrange, choice) in table_choices: - minval, *maxval = valrange.split('-', 1) + minval, *maxval = valrange.split("-", 1) minval = abs(int(minval)) maxval = abs(int(maxval[0]) if maxval else minval) @@ -240,7 +259,7 @@ class EvAdventureRollEngine: bool: False if morale roll failed, True otherwise. """ - return self.roll('2d6') <= defender.morale + return self.roll("2d6") <= defender.morale def heal(self, character, amount): """ @@ -265,7 +284,7 @@ class EvAdventureRollEngine: int: How much HP was healed. This is never more than how damaged we are. """ - self.heal(character, self.roll('1d8') + character.constitution) + self.heal(character, self.roll("1d8") + character.constitution) death_map = { "weakened": "strength", @@ -282,7 +301,7 @@ class EvAdventureRollEngine: """ - result = self.roll_random_table('1d8', death_table) + result = self.roll_random_table("1d8", death_table) if result == "dead": character.handle_death() else: @@ -304,16 +323,15 @@ class EvAdventureRollEngine: character.hp = new_hp character.msg( - "~" * 78 + - "\n|yYou survive your brush with death, " + "~" * 78 + "\n|yYou survive your brush with death, " f"but are |r{result.upper()}|y and permenently |rlose {loss} {abi}|y.|n\n" - f"|GYou recover |g{new_hp}|G health|.\n" - + "~" * 78 + f"|GYou recover |g{new_hp}|G health|.\n" + "~" * 78 ) # character generation + class EvAdventureCharacterGeneration: """ This collects all the rules for generating a new character. An instance of this class can be @@ -341,6 +359,7 @@ class EvAdventureCharacterGeneration: there is no GM to adjudicate a different choice). """ + def __init__(self): """ Initialize starting values @@ -351,7 +370,7 @@ class EvAdventureCharacterGeneration: roll_engine = EvAdventureRollEngine() # name will likely be modified later - self.name = roll_engine.roll_random_table('1d282', chargen_table['name']) + self.name = roll_engine.roll_random_table("1d282", chargen_table["name"]) # base attribute bonuses (flat +1 bonus) self.strength = 2 @@ -362,17 +381,17 @@ class EvAdventureCharacterGeneration: self.charisma = 2 # physical attributes (only for rp purposes) - self.physique = roll_engine.roll_random_table('1d20', chargen_table['physique']) - self.face = roll_engine.roll_random_table('1d20', chargen_table['face']) - self.skin = roll_engine.roll_random_table('1d20', chargen_table['skin']) - self.hair = roll_engine.roll_random_table('1d20', chargen_table['hair']) - self.clothing = roll_engine.roll_random_table('1d20', chargen_table['clothing']) - self.speech = roll_engine.roll_random_table('1d20', chargen_table['speech']) - self.virtue = roll_engine.roll_random_table('1d20', chargen_table['virtue']) - self.vice = roll_engine.roll_random_table('1d20', chargen_table['vice']) - self.background = roll_engine.roll_random_table('1d20', chargen_table['background']) - self.misfortune = roll_engine.roll_random_table('1d20', chargen_table['misfortune']) - self.alignment = roll_engine.roll_random_table('1d20', chargen_table['alignment']) + self.physique = roll_engine.roll_random_table("1d20", chargen_table["physique"]) + self.face = roll_engine.roll_random_table("1d20", chargen_table["face"]) + self.skin = roll_engine.roll_random_table("1d20", chargen_table["skin"]) + self.hair = roll_engine.roll_random_table("1d20", chargen_table["hair"]) + self.clothing = roll_engine.roll_random_table("1d20", chargen_table["clothing"]) + self.speech = roll_engine.roll_random_table("1d20", chargen_table["speech"]) + self.virtue = roll_engine.roll_random_table("1d20", chargen_table["virtue"]) + self.vice = roll_engine.roll_random_table("1d20", chargen_table["vice"]) + self.background = roll_engine.roll_random_table("1d20", chargen_table["background"]) + self.misfortune = roll_engine.roll_random_table("1d20", chargen_table["misfortune"]) + self.alignment = roll_engine.roll_random_table("1d20", chargen_table["alignment"]) # same for all self.exploration_speed = 120 @@ -383,22 +402,23 @@ class EvAdventureCharacterGeneration: self.level = 1 # random equipment - self.armor = roll_engine.roll_random_table('1d20', chargen_table['armor']) + self.armor = roll_engine.roll_random_table("1d20", chargen_table["armor"]) _helmet_and_shield = roll_engine.roll_random_table( - '1d20', chargen_table["helmets and shields"]) + "1d20", chargen_table["helmets and shields"] + ) self.helmet = "helmet" if "helmet" in _helmet_and_shield else "none" self.shield = "shield" if "shield" in _helmet_and_shield else "none" - self.weapon = roll_engine.roll_random_table('1d20', chargen_table["starting weapon"]) + self.weapon = roll_engine.roll_random_table("1d20", chargen_table["starting weapon"]) self.backpack = [ "ration", "ration", - roll_engine.roll_random_table('1d20', chargen_table["dungeoning gear"]), - roll_engine.roll_random_table('1d20', chargen_table["dungeoning gear"]), - roll_engine.roll_random_table('1d20', chargen_table["general gear 1"]), - roll_engine.roll_random_table('1d20', chargen_table["general gear 2"]), + roll_engine.roll_random_table("1d20", chargen_table["dungeoning gear"]), + roll_engine.roll_random_table("1d20", chargen_table["dungeoning gear"]), + roll_engine.roll_random_table("1d20", chargen_table["general gear 1"]), + roll_engine.roll_random_table("1d20", chargen_table["general gear 2"]), ] def build_desc(self): @@ -489,12 +509,14 @@ class EvAdventureCharacterGeneration: # character improvement + class EvAdventureImprovement: """ Handle XP gains and level upgrades. Grouped in a class in order to make it easier to override the mechanism. """ + xp_per_level = 1000 amount_of_abilities_to_upgrade = 3 max_ability_bonus = 10 # bonus +10, defense 20 @@ -546,12 +568,14 @@ class EvAdventureImprovement: except AttributeError: pass - character.hp_max = max(character.max_hp + 1, - EvAdventureRollEngine.roll(f"{character.level}d8")) + character.hp_max = max( + character.max_hp + 1, EvAdventureRollEngine.roll(f"{character.level}d8") + ) # character sheet visualization + class EvAdventureCharacterSheet: """ Generate a character sheet. This is grouped in a class in order to make @@ -596,9 +620,9 @@ class EvAdventureCharacterSheet: equipment = character.equipment.wielded + character.equipment.worn + character.carried # divide into chunks of max 10 length (to go into two columns) equipment_table = EvTable( - table=[equipment[i: i + 10] for i in range(0, len(equipment), 10)] + table=[equipment[i : i + 10] for i in range(0, len(equipment), 10)] ) - form = EvForm({"FORMCHAR": 'x', "TABLECHAR": 'c', "SHEET": sheet}) + form = EvForm({"FORMCHAR": "x", "TABLECHAR": "c", "SHEET": sheet}) form.map( cells={ 1: character.key, @@ -610,12 +634,12 @@ class EvAdventureCharacterSheet: 7: f"{character.hp}/{character.hp_max}", 8: character.xp, 9: character.exploration_speed, - 'A': character.combat_speed, - 'B': character.db.desc, + "A": character.combat_speed, + "B": character.db.desc, }, tables={ 1: equipment_table, - } + }, ) return str(form) diff --git a/evennia/contrib/tutorials/evadventure/tests/mixins.py b/evennia/contrib/tutorials/evadventure/tests/mixins.py index 39e687c706..04746a1734 100644 --- a/evennia/contrib/tutorials/evadventure/tests/mixins.py +++ b/evennia/contrib/tutorials/evadventure/tests/mixins.py @@ -14,25 +14,33 @@ class EvAdventureMixin: Provides a set of pre-made characters. """ + def setUp(self): super().setUp() self.character = create.create_object(EvAdventureCharacter, key="testchar") self.helmet = create.create_object( - EvAdventureObject, key="helmet", - attributes=[("inventory_use_slot", enums.WieldLocation.HEAD), - ("armor", 1)]) + EvAdventureObject, + key="helmet", + attributes=[("inventory_use_slot", enums.WieldLocation.HEAD), ("armor", 1)], + ) self.shield = create.create_object( - EvAdventureObject, key="shield", - attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND), - ("armor", 1)]) + EvAdventureObject, + key="shield", + attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND), ("armor", 1)], + ) self.armor = create.create_object( - EvAdventureObject, key="armor", - attributes=[("inventory_use_slot", enums.WieldLocation.BODY), - ("armor", 11)]) + EvAdventureObject, + key="armor", + attributes=[("inventory_use_slot", enums.WieldLocation.BODY), ("armor", 11)], + ) self.weapon = create.create_object( - EvAdventureObject, key="weapon", - attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)]) + EvAdventureObject, + key="weapon", + attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)], + ) self.big_weapon = create.create_object( - EvAdventureObject, key="big_weapon", - attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)]) + EvAdventureObject, + key="big_weapon", + attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)], + ) self.item = create.create_object(EvAdventureObject, key="backpack item") diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index 4629fd2063..abff04ff81 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -8,7 +8,7 @@ from evennia.utils.test_resources import BaseEvenniaTest from evennia.utils import create from .mixins import EvAdventureMixin from .. import combat_turnbased -from .. charactersd import EvAdventureCharacter +from ..charactersd import EvAdventureCharacter class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): @@ -16,8 +16,12 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): Test the turn-based combat-handler implementation. """ - @patch("evennia.contrib.tutorials.evadventure.combat_turnbased" - ".EvAdventureCombatHandler.interval", new=-1) + + @patch( + "evennia.contrib.tutorials.evadventure.combat_turnbased" + ".EvAdventureCombatHandler.interval", + new=-1, + ) def setUp(self): super().setUp() self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create() @@ -50,8 +54,6 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): def test_attack(self, mock_randint): mock_randint = 8 self.combathandler.register_action( - combat_turnbased.CombatActionAttack, - self.combatant, self.target) + combat_turnbased.CombatActionAttack, self.combatant, self.target + ) self.combathandler._end_turn() - - diff --git a/evennia/contrib/tutorials/evadventure/tests/test_rules.py b/evennia/contrib/tutorials/evadventure/tests/test_rules.py index 65dee75289..6db9781444 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_rules.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_rules.py @@ -19,6 +19,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): Test the roll engine in the rules module. This is the core of any RPG. """ + def setUp(self): super().setUp() self.roll_engine = rules.EvAdventureRollEngine() @@ -40,15 +41,15 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): def test_roll_limits(self): with self.assertRaises(TypeError): - self.roll_engine.roll('100d6', max_number=10) # too many die + self.roll_engine.roll("100d6", max_number=10) # too many die with self.assertRaises(TypeError): - self.roll_engine.roll('100') # no d + self.roll_engine.roll("100") # no d with self.assertRaises(TypeError): - self.roll_engine.roll('dummy') # non-numerical + self.roll_engine.roll("dummy") # non-numerical with self.assertRaises(TypeError): - self.roll_engine.roll('Ad4') # non-numerical + self.roll_engine.roll("Ad4") # non-numerical with self.assertRaises(TypeError): - self.roll_engine.roll('1d10000') # limit is d1000 + self.roll_engine.roll("1d10000") # limit is d1000 @patch("evennia.contrib.tutorials.evadventure.rules.randint") def test_roll_with_advantage_disadvantage(self, mock_randint): @@ -61,19 +62,18 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): # cancel each other out self.assertEqual( - self.roll_engine.roll_with_advantage_or_disadvantage( - disadvantage=True, advantage=True), 9) + self.roll_engine.roll_with_advantage_or_disadvantage(disadvantage=True, advantage=True), + 9, + ) mock_randint.assert_called_once() mock_randint.reset_mock() # run with advantage/disadvantage - self.assertEqual( - self.roll_engine.roll_with_advantage_or_disadvantage(advantage=True), 9) + self.assertEqual(self.roll_engine.roll_with_advantage_or_disadvantage(advantage=True), 9) mock_randint.assert_has_calls([call(1, 20), call(1, 20)]) mock_randint.reset_mock() - self.assertEqual( - self.roll_engine.roll_with_advantage_or_disadvantage(disadvantage=True), 9) + self.assertEqual(self.roll_engine.roll_with_advantage_or_disadvantage(disadvantage=True), 9) mock_randint.assert_has_calls([call(1, 20), call(1, 20)]) mock_randint.reset_mock() @@ -86,39 +86,40 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): character.dexterity = 1 self.assertEqual( - self.roll_engine.saving_throw(character, bonus_type=enums.Ability.STR), - (False, None)) + self.roll_engine.saving_throw(character, bonus_type=enums.Ability.STR), (False, None) + ) self.assertEqual( self.roll_engine.saving_throw(character, bonus_type=enums.Ability.DEX, modifier=1), - (False, None)) + (False, None), + ) self.assertEqual( self.roll_engine.saving_throw( - character, - advantage=True, - bonus_type=enums.Ability.DEX, modifier=6), - (False, None)) + character, advantage=True, bonus_type=enums.Ability.DEX, modifier=6 + ), + (False, None), + ) self.assertEqual( self.roll_engine.saving_throw( - character, - disadvantage=True, - bonus_type=enums.Ability.DEX, modifier=7), - (True, None)) + character, disadvantage=True, bonus_type=enums.Ability.DEX, modifier=7 + ), + (True, None), + ) mock_randint.return_value = 1 self.assertEqual( self.roll_engine.saving_throw( - character, - disadvantage=True, - bonus_type=enums.Ability.STR, modifier=2), - (False, enums.Ability.CRITICAL_FAILURE)) + character, disadvantage=True, bonus_type=enums.Ability.STR, modifier=2 + ), + (False, enums.Ability.CRITICAL_FAILURE), + ) mock_randint.return_value = 20 self.assertEqual( self.roll_engine.saving_throw( - character, - disadvantage=True, - bonus_type=enums.Ability.STR, modifier=2), - (True, enums.Ability.CRITICAL_SUCCESS)) + character, disadvantage=True, bonus_type=enums.Ability.STR, modifier=2 + ), + (True, enums.Ability.CRITICAL_SUCCESS), + ) @patch("evennia.contrib.tutorials.evadventure.rules.randint") def test_opposed_saving_throw(self, mock_randint): @@ -130,18 +131,19 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): self.assertEqual( self.roll_engine.opposed_saving_throw( - attacker, defender, - attack_type=enums.Ability.STR, defense_type=enums.Ability.ARMOR + attacker, defender, attack_type=enums.Ability.STR, defense_type=enums.Ability.ARMOR ), - (False, None) + (False, None), ) self.assertEqual( self.roll_engine.opposed_saving_throw( - attacker, defender, - attack_type=enums.Ability.STR, defense_type=enums.Ability.ARMOR, - modifier=2 + attacker, + defender, + attack_type=enums.Ability.STR, + defense_type=enums.Ability.ARMOR, + modifier=2, ), - (True, None) + (True, None), ) @patch("evennia.contrib.tutorials.evadventure.rules.randint") @@ -150,36 +152,40 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): self.assertEqual( self.roll_engine.roll_random_table( - "1d20", random_tables.character_generation['physique']), - "scrawny" + "1d20", random_tables.character_generation["physique"] + ), + "scrawny", + ) + self.assertEqual( + self.roll_engine.roll_random_table("1d20", random_tables.character_generation["vice"]), + "irascible", ) self.assertEqual( self.roll_engine.roll_random_table( - "1d20", random_tables.character_generation['vice']), - "irascible" + "1d20", random_tables.character_generation["alignment"] + ), + "neutrality", ) self.assertEqual( self.roll_engine.roll_random_table( - "1d20", random_tables.character_generation['alignment']), - "neutrality" - ) - self.assertEqual( - self.roll_engine.roll_random_table( - "1d20", random_tables.character_generation['helmets and shields']), - "no helmet or shield" + "1d20", random_tables.character_generation["helmets and shields"] + ), + "no helmet or shield", ) # testing faulty rolls outside of the table ranges mock_randint.return_value = 25 self.assertEqual( self.roll_engine.roll_random_table( - "1d20", random_tables.character_generation['helmets and shields']), - "helmet and shield" + "1d20", random_tables.character_generation["helmets and shields"] + ), + "helmet and shield", ) mock_randint.return_value = -10 self.assertEqual( self.roll_engine.roll_random_table( - "1d20", random_tables.character_generation['helmets and shields']), - "no helmet or shield" + "1d20", random_tables.character_generation["helmets and shields"] + ), + "no helmet or shield", ) @patch("evennia.contrib.tutorials.evadventure.rules.randint") @@ -202,11 +208,11 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): mock_randint.return_value = 5 self.roll_engine.heal_from_rest(character) - self.assertEqual(character.hp, 7) # hp + 1d8 + consititution bonus + self.assertEqual(character.hp, 7) # hp + 1d8 + consititution bonus mock_randint.assert_called_with(1, 8) # 1d8 self.roll_engine.heal_from_rest(character) - self.assertEqual(character.hp, 8) # can't have more than max hp + self.assertEqual(character.hp, 8) # can't have more than max hp @patch("evennia.contrib.tutorials.evadventure.rules.randint") def test_roll_death(self, mock_randint): @@ -246,32 +252,33 @@ class EvAdventureCharacterGenerationTest(BaseEvenniaTest): self.assertEqual(self.chargen.misfortune, "exiled") self.assertEqual(self.chargen.armor, "gambeson") self.assertEqual(self.chargen.shield, "shield") - self.assertEqual(self.chargen.backpack, ['ration', 'ration', 'waterskin', - 'waterskin', 'drill', 'twine']) + self.assertEqual( + self.chargen.backpack, ["ration", "ration", "waterskin", "waterskin", "drill", "twine"] + ) def test_build_desc(self): self.assertEqual( self.chargen.build_desc(), "Herbalist. Wears stained clothes, and has hoarse speech. Has a scrawny physique, " "a broken face, pockmarked skin and greased hair. Is honest, but irascible. " - "Has been exiled in the past. Favors neutrality." + "Has been exiled in the past. Favors neutrality.", ) - @parameterized.expand([ - # source, target, value, new_source_val, new_target_val - (enums.Ability.CON, enums.Ability.STR, 1, 1, 3), - (enums.Ability.INT, enums.Ability.DEX, 1, 1, 3), - (enums.Ability.CHA, enums.Ability.CON, 1, 1, 3), - (enums.Ability.STR, enums.Ability.WIS, 1, 1, 3), - (enums.Ability.WIS, enums.Ability.CHA, 1, 1, 3), - (enums.Ability.DEX, enums.Ability.DEX, 1, 2, 2), - ]) + @parameterized.expand( + [ + # source, target, value, new_source_val, new_target_val + (enums.Ability.CON, enums.Ability.STR, 1, 1, 3), + (enums.Ability.INT, enums.Ability.DEX, 1, 1, 3), + (enums.Ability.CHA, enums.Ability.CON, 1, 1, 3), + (enums.Ability.STR, enums.Ability.WIS, 1, 1, 3), + (enums.Ability.WIS, enums.Ability.CHA, 1, 1, 3), + (enums.Ability.DEX, enums.Ability.DEX, 1, 2, 2), + ] + ) def test_adjust_attribute(self, source, target, value, new_source_val, new_target_val): self.chargen.adjust_attribute(source, target, value) - self.assertEqual( - getattr(self.chargen, source.value), new_source_val, f"{source}->{target}") - self.assertEqual( - getattr(self.chargen, target.value), new_target_val, f"{source}->{target}") + self.assertEqual(getattr(self.chargen, source.value), new_source_val, f"{source}->{target}") + self.assertEqual(getattr(self.chargen, target.value), new_target_val, f"{source}->{target}") def test_adjust_consecutive(self): # gradually shift all to STR (starts at 2) @@ -311,6 +318,7 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): Test the equipment mechanism. """ + def _get_empty_slots(self): return { enums.WieldLocation.BACKPACK: [], @@ -324,15 +332,17 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): def test_equipmenthandler_max_slots(self): self.assertEqual(self.character.equipment.max_slots, 11) - @parameterized.expand([ - # size, pass_validation? - (1, True), - (2, True), - (11, True), - (12, False), - (20, False), - (25, False) - ]) + @parameterized.expand( + [ + # size, pass_validation? + (1, True), + (2, True), + (11, True), + (12, False), + (20, False), + (25, False), + ] + ) def test_validate_slot_usage(self, size, is_ok): obj = MagicMock() obj.size = size @@ -343,15 +353,17 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): with self.assertRaises(characters.EquipmentError): self.character.equipment.validate_slot_usage(obj) - @parameterized.expand([ - # item, where - ("helmet", enums.WieldLocation.HEAD), - ("shield", enums.WieldLocation.SHIELD_HAND), - ("armor", enums.WieldLocation.BODY), - ("weapon", enums.WieldLocation.WEAPON_HAND), - ("big_weapon", enums.WieldLocation.TWO_HANDS), - ("item", enums.WieldLocation.BACKPACK), - ]) + @parameterized.expand( + [ + # item, where + ("helmet", enums.WieldLocation.HEAD), + ("shield", enums.WieldLocation.SHIELD_HAND), + ("armor", enums.WieldLocation.BODY), + ("weapon", enums.WieldLocation.WEAPON_HAND), + ("big_weapon", enums.WieldLocation.TWO_HANDS), + ("item", enums.WieldLocation.BACKPACK), + ] + ) def test_use(self, itemname, where): self.assertEqual(self.character.equipment.slots, self._get_empty_slots()) @@ -366,32 +378,32 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): def test_store(self): self.character.equipment.store(self.weapon) self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) - self.assertTrue( - self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK]) + self.assertTrue(self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK]) def test_two_handed_exclusive(self): """Two-handed weapons can't be used together with weapon+shield""" self.character.equipment.use(self.big_weapon) self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon + ) # equipping sword or shield removes two-hander self.character.equipment.use(self.shield) self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], None) + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield + ) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], None) self.character.equipment.use(self.weapon) self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon) + self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], self.weapon + ) # the two-hander removes the two weapons self.character.equipment.use(self.big_weapon) self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) - self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) + self.character.equipment.slots[enums.WieldLocation.TWO_HANDS], self.big_weapon + ) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) def test_remove__with_obj(self): self.character.equipment.use(self.shield) @@ -399,16 +411,19 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): self.character.equipment.store(self.weapon) self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], - [self.item, self.weapon]) + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield + ) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.BACKPACK], [self.item, self.weapon] + ) self.assertEqual(self.character.equipment.remove(self.shield), [self.shield]) self.assertEqual(self.character.equipment.remove(self.item), [self.item]) self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], - [self.weapon]) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.BACKPACK], [self.weapon] + ) def test_remove__with_slot(self): self.character.equipment.use(self.shield) @@ -416,17 +431,20 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): self.character.equipment.store(self.helmet) self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield) - self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], - [self.item, self.helmet]) - - self.assertEqual(self.character.equipment.remove(enums.WieldLocation.SHIELD_HAND), - [self.shield]) - self.assertEqual(self.character.equipment.remove(enums.WieldLocation.BACKPACK), - [self.item, self.helmet]) + self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield + ) + self.assertEqual( + self.character.equipment.slots[enums.WieldLocation.BACKPACK], [self.item, self.helmet] + ) self.assertEqual( - self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) + self.character.equipment.remove(enums.WieldLocation.SHIELD_HAND), [self.shield] + ) + self.assertEqual( + self.character.equipment.remove(enums.WieldLocation.BACKPACK), [self.item, self.helmet] + ) + + self.assertEqual(self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], None) self.assertEqual(self.character.equipment.slots[enums.WieldLocation.BACKPACK], []) def test_properties(self): diff --git a/evennia/contrib/tutorials/evadventure/tests/tests.py b/evennia/contrib/tutorials/evadventure/tests/tests.py index 2be289d10c..5fb5a6fbaa 100644 --- a/evennia/contrib/tutorials/evadventure/tests/tests.py +++ b/evennia/contrib/tutorials/evadventure/tests/tests.py @@ -13,6 +13,3 @@ from . import enums from . import combat_turnbased from . import rules from . import random_tables - - - diff --git a/evennia/contrib/tutorials/evadventure/utils.py b/evennia/contrib/tutorials/evadventure/utils.py index fc7da8fb52..070f252ad5 100644 --- a/evennia/contrib/tutorials/evadventure/utils.py +++ b/evennia/contrib/tutorials/evadventure/utils.py @@ -2,5 +2,3 @@ Various utilities. """ - - From ca446a1ba24c0f4b8a72bb722d6e210613b9cf87 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 3 Jul 2022 12:38:06 +0200 Subject: [PATCH 029/177] More fixes to evadventure --- .../tutorials/evadventure/combat_turnbased.py | 1 - .../tutorials/evadventure/tests/test_combat.py | 4 ++-- .../contrib/tutorials/evadventure/tests/tests.py | 15 --------------- 3 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 evennia/contrib/tutorials/evadventure/tests/tests.py diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 1f9ed504ad..9edb8910b0 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -18,7 +18,6 @@ optimizal positioning. """ -from dataclasses import dataclass from collections import defaultdict from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index abff04ff81..9668cefedc 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -8,7 +8,7 @@ from evennia.utils.test_resources import BaseEvenniaTest from evennia.utils import create from .mixins import EvAdventureMixin from .. import combat_turnbased -from ..charactersd import EvAdventureCharacter +from ..characters import EvAdventureCharacter class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): @@ -52,7 +52,7 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") def test_attack(self, mock_randint): - mock_randint = 8 + mock_randint.return_value = 8 self.combathandler.register_action( combat_turnbased.CombatActionAttack, self.combatant, self.target ) diff --git a/evennia/contrib/tutorials/evadventure/tests/tests.py b/evennia/contrib/tutorials/evadventure/tests/tests.py deleted file mode 100644 index 5fb5a6fbaa..0000000000 --- a/evennia/contrib/tutorials/evadventure/tests/tests.py +++ /dev/null @@ -1,15 +0,0 @@ -""" -Tests for EvAdventure. - -""" - -from unittest.mock import patch, MagicMock, call -from parameterized import parameterized -from evennia.utils import create -from evennia.utils.test_resources import BaseEvenniaTest -from .characters import EvAdventureCharacter, EquipmentHandler, EquipmentError -from .objects import EvAdventureObject -from . import enums -from . import combat_turnbased -from . import rules -from . import random_tables From c5b62a6fc8b193aa03cc71794685fd4ba7970347 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 3 Jul 2022 22:12:23 +0200 Subject: [PATCH 030/177] Refactored turn based combat tutorial --- .../tutorials/evadventure/combat_turnbased.py | 772 ++++++++++++++---- .../evadventure/tests/test_combat.py | 28 +- evennia/scripts/taskhandler.py | 2 +- 3 files changed, 634 insertions(+), 168 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 9edb8910b0..62b7ffbc95 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -16,13 +16,95 @@ This version is simplified to not worry about things like optimal range etc. So the same as a sword in battle. One could add a 1D range mechanism to add more strategy by requiring optimizal positioning. +The combat is controlled through a menu: + +------------------- main menu +Combat + +You have 30 seconds to choose your next action. If you don't decide, you will hesitate and do +nothing. Available actions: + +1. [A]ttack/[C]ast spell at using your equipped weapon/spell +3. Make [S]tunt (gain/give advantage/disadvantage for future attacks) +4. S[W]ap weapon / spell rune +5. [U]se +6. [F]lee/disengage (takes two turns) +7. [B]lock from fleeing +8. [H]esitate/Do nothing + +You can also use say/emote between rounds. +As soon as all combatants have made their choice (or time out), the round will be resolved +simultaneusly. + +-------------------- attack/cast spell submenu + +Choose the target of your attack/spell: +0: Yourself 3: (wounded) +1: (hurt) +2: (unharmed) + +------------------- make stunt submenu + +Stunts are special actions that don't cause damage but grant advantage for you or +an ally for future attacks - or grant disadvantage to your enemy's future attacks. +The effects of stunts start to apply *next* round. The effect does not stack, can only +be used once and must be taken advantage of within 5 rounds. + +Choose stunt: +1: Trip (give disadvantage DEX) +2: Feint (get advantage DEX against target) +3: ... + +-------------------- make stunt target submenu + +Choose the target of your stunt: +0: Yourself 3: (wounded) +1: (hurt) +2: (unharmed) + +------------------- swap weapon or spell run + +Choose the item to wield. +1: +2: (two hands) +3: +4: ... + +------------------- use item + +Choose item to use. +1: Healing potion (+1d6 HP) +2: Magic pebble (gain advantage, 1 use) +3: Potion of glue (give disadvantage to target) + +------------------- Hesitate/Do nothing + +You hang back, passively defending. + +------------------- Disengage + +You retreat, getting ready to get out of combat. Use two times in a row to +leave combat. You flee last in a round. If anyone Blocks your retreat, this counter resets. + +------------------- Block Fleeing + +You move to block the escape route of an opponent. If you win a DEX challenge, +you'll negate the target's disengage action(s). + +Choose who to block: +1: +2: +3: ... + + """ +from datetime import datetime from collections import defaultdict from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import make_iter -from evennia.utils import evmenu, evtable, dbserialize +from evennia.utils import evtable, dbserialize, delay, evmenu from .enums import Ability from . import rules @@ -32,18 +114,29 @@ from . import rules class CombatFailure(RuntimeError): """ Some failure during actions. + """ class CombatAction: """ - This is the base of a combat-action, like 'attack' or defend. - Inherit from this to make new actions. + This is the base of a combat-action, like 'attack' Inherit from this to make new actions. + + Note: + We want to store initialized version of this objects in the CombatHandler (in order to track + usages, time limits etc), so we need to make sure we can serialize it into an Attribute. See + `Attribute` documentation for more about `__serialize_dbobjs__` and `__deserialize_dbobjs__`. """ - key = "action" + key = "Action" + desc = "Option text" + aliases = [] help_text = "Combat action to perform." + + # if no target is needed (always affect oneself) + no_target = False + # action to echo to everyone. post_action_text = "{combatant} performed an action." max_uses = None # None for unlimited @@ -64,23 +157,40 @@ class CombatAction: self.combatant.msg(message) def __serialize_dbobjs__(self): + """ + This is necessary in order to be able to store this entity in an Attribute. + We must make sure to tell Evennia how to serialize internally stored db-objects. + + The `__serialize_dbobjs__` and `__deserialize_dbobjs__` methods form a required pair. + + """ self.combathandler = dbserialize.dbserialize(self.combathandler) self.combatant = dbserialize.dbserialize(self.combatant) def __deserialize_dbobjs__(self): + """ + This is necessary in order to be able to store this entity in an Attribute. + We must make sure to tell Evennia how to deserialize internally stored db-objects. + + The `__serialize_dbobjs__` and `__deserialize_dbobjs__` methods form a required pair. + + """ self.combathandler = dbserialize.dbunserialize(self.combathandler) self.combatant = dbserialize.dbunserialize(self.combatant) def get_help(self, *args, **kwargs): + """ + Allows to customize help message on the fly. By default, just returns `.help_text`. + + """ return self.help_text - def can_use(self, combatant, *args, **kwargs): + def can_use(self, *args, **kwargs): """ Determine if combatant can use this action. In this implementation, - it fails if already use all of a usage-limited action. + it fails if already used up all of a usage-limited action. Args: - combatant (Object): The one performing the action. *args: Any optional arguments. **kwargs: Any optional keyword arguments. @@ -99,66 +209,7 @@ class CombatAction: def post_use(self, *args, **kwargs): self.uses += 1 - self.combathandler.msg(self.post_action_text.format(combatant=combatant)) - - -class CombatActionDoNothing(CombatAction): - """ - Do nothing this turn. - - """ - - help_text = "Hold you position, doing nothing." - post_action_text = "{combatant} does nothing this turn." - - -class CombatActionStunt(CombatAction): - """ - Perform a stunt. A stunt grants an advantage to yours or another player for their next - action, or a disadvantage to yours or an enemy's next action. - - Note that while the check happens between the user and a target, another (the 'beneficiary' - could still gain the effect. This allows for boosting allies or making them better - defend against an enemy. - - Note: We only count a use if the stunt is successful; they will still spend their turn, but won't - spend a use unless they succeed. - - """ - - give_advantage = True - give_disadvantage = False - max_uses = 1 - priority = -1 - attack_type = Ability.DEX - defense_type = Ability.DEX - help_text = ( - "Perform a stunt against a target. This will give you or an ally advantage " - "on your next action against the same target [range 0-1, one use per combat. " - "Bonus lasts for two turns]." - ) - - def use(self, attacker, defender, *args, beneficiary=None, **kwargs): - # quality doesn't matter for stunts, they are either successful or not - - is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( - attacker, - defender, - attack_type=self.attack_type, - defense_type=self.defense_type, - advantage=False, - disadvantage=disadvantage, - ) - if is_success: - beneficiary = beneficiary if beneficiary else attacker - if advantage: - self.combathandler.gain_advantage(beneficiary, defender) - else: - self.combathandler.gain_disadvantage(defender, beneficiary) - - self.msg - # only spend a use after being successful - uses += 1 + self.combathandler.msg(self.post_action_text.format(**kwargs)) class CombatActionAttack(CombatAction): @@ -168,14 +219,20 @@ class CombatActionAttack(CombatAction): """ - key = "attack" + key = "Attack or Cast" + desc = "[A]ttack/[C]ast spell at " + aliases = ("a", "c", "attack", "cast") + help_text = "Make an attack using your currently equipped weapon/spell rune" + priority = 1 - def use(self, attacker, defender, *args, **kwargs): + def use(self, defender, *args, **kwargs): """ Make an attack against a defender. """ + attacker = self.combatant + # figure out advantage (gained by previous stunts) advantage = bool(self.combathandler.advantage_matrix[attacker].pop(defender, False)) @@ -198,11 +255,70 @@ class CombatActionAttack(CombatAction): # TODO messaging here +class CombatActionStunt(CombatAction): + """ + Perform a stunt. A stunt grants an advantage to yours or another player for their next + action, or a disadvantage to yours or an enemy's next action. + + Note that while the check happens between the user and a target, another (the 'beneficiary' + could still gain the effect. This allows for boosting allies or making them better + defend against an enemy. + + Note: We only count a use if the stunt is successful; they will still spend their turn, but + won't spend a use unless they succeed. + + """ + + key = "Perform a Stunt" + desc = "Make [S]tunt against " + aliases = ("s", "stunt") + help_text = ( + "A stunt does not cause damage but grants/gives advantage/disadvantage to future " + "actions. The effect needs to be used up within 5 turns." + ) + + give_advantage = True + give_disadvantage = False + max_uses = 1 + priority = -1 + attack_type = Ability.DEX + defense_type = Ability.DEX + help_text = ( + "Perform a stunt against a target. This will give you an advantage or an enemy " + "disadvantage on your next action." + ) + + def use(self, defender, *args, **kwargs): + # quality doesn't matter for stunts, they are either successful or not + + attacker = self.combatant + advantage, disadvantage = False + + is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + attacker, + defender, + attack_type=self.attack_type, + defense_type=self.defense_type, + advantage=advantage, + disadvantage=disadvantage, + ) + if is_success: + if advantage: + self.combathandler.gain_advantage(attacker, defender) + else: + self.combathandler.gain_disadvantage(defender, attacker) + + self.msg + # only spend a use after being successful + self.uses += 1 + + class CombatActionUseItem(CombatAction): """ Use an item in combat. This is meant for one-off or limited-use items, like potions, scrolls or - wands. We offload the usage checks and usability to the item's own hooks. It's generated dynamically - from the items in the character's inventory (you could also consider using items in the room this way). + wands. We offload the usage checks and usability to the item's own hooks. It's generated + dynamically from the items in the character's inventory (you could also consider using items in + the room this way). Each usable item results in one possible action. @@ -214,59 +330,78 @@ class CombatActionUseItem(CombatAction): combat_post_use """ + key = "Use Item" + desc = "[U]se item" + aliases = ("u", "item", "use item") + help_text = "Use an item from your inventory." def get_help(self, item, *args): return item.combat_get_help(*args) - def can_use(self, item, combatant, *args, **kwargs): - return item.combat_can_use(combatant, self.combathandler, *args, **kwargs) + def can_use(self, item, *args, **kwargs): + return item.combat_can_use(self.combatant, self.combathandler, *args, **kwargs) def pre_use(self, item, *args, **kwargs): - item.combat_pre_use(*args, **kwargs) + item.combat_pre_use(self.combatant, *args, **kwargs) - def use(self, item, combatant, target, *args, **kwargs): - item.combat_use(combatant, target, *args, **kwargs) + def use(self, item, target, *args, **kwargs): + item.combat_use(self.combatant, target, *args, **kwargs) def post_use(self, item, *args, **kwargs): - item.combat_post_use(*args, **kwargs) + item.combat_post_use(self.combatant, *args, **kwargs) class CombatActionFlee(CombatAction): """ Fleeing/disengaging from combat means doing nothing but 'running away' for two turn. Unless - someone attempts and succeeds in their 'chase' action, you will leave combat by fleeing at the + someone attempts and succeeds in their 'block' action, you will leave combat by fleeing at the end of the second turn. """ - key = "flee" - priority = -1 + key = "Flee/Disengage" + desc = "[F]lee/disengage from combat (takes two turns)" + aliases = ("d", "disengage", "flee") - def use(self, combatant, target, *args, **kwargs): - # it's safe to do this twice - self.combathandler.flee(combatant) + # this only affects us + no_target = True + help_text = ( + "Disengage from combat. Use successfully two times in a row to leave combat at the " + "end of the second round. If someone Blocks you successfully, this counter is reset." + ) -class CombatActionChase(CombatAction): - - """ - Chasing is a way to counter a 'flee' action. It is a maximum movement towards the target - and will mean a DEX contest, if the fleeing target loses, they are moved back from - 'disengaging' range and remain in combat at the new distance (likely 2 if max movement - is 2). Advantage/disadvantage are considered. - - """ - - key = "chase" priority = -5 # checked last - attack_type = Ability.DEX # or is it CON? + def use(self, *args, **kwargs): + # it's safe to do this twice + self.combathandler.flee(self.combatant) + + +class CombatActionBlock(CombatAction): + + """ + Blocking is, in this context, a way to counter an enemy's 'Flee/Disengage' action. + + """ + + key = "Block" + desc = "[B]lock from fleeing" + aliases = ("b", "block", "chase") + help_text = ( + "Move to block a target from fleeing combat. If you succeed " + "in a DEX vs DEX challenge, they don't get away." + ) + + priority = -1 # must be checked BEFORE the flee action of the target! + + attack_type = Ability.DEX defense_type = Ability.DEX def use(self, combatant, fleeing_target, *args, **kwargs): - advantage = bool(self.advantage_matrix[attacker].pop(fleeing_target, False)) - disadvantage = bool(self.disadvantage_matrix[attacker].pop(fleeing_target, False)) + advantage = bool(self.advantage_matrix[combatant].pop(fleeing_target, False)) + disadvantage = bool(self.disadvantage_matrix[combatant].pop(fleeing_target, False)) is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( combatant, @@ -284,6 +419,23 @@ class CombatActionChase(CombatAction): pass # they are getting away! +class CombatActionDoNothing(CombatAction): + """ + Do nothing this turn. + + """ + + key = "Hesitate" + desc = "Do [N]othing/Hesitate" + aliases = ("n", "hesitate", "nothing", "do nothing") + help_text = "Hold you position, doing nothing." + + # affects noone else + no_target = True + + post_action_text = "{combatant} does nothing this turn." + + class EvAdventureCombatHandler(DefaultScript): """ This script is created when combat is initialized and stores a queue @@ -294,22 +446,27 @@ class EvAdventureCombatHandler(DefaultScript): # we use the same duration for all stunts stunt_duration = 3 - # these will all be checked if they are available at a given time. - all_action_classes = [ - CombatActionDoNothing, - CombatActionChase, - CombatActionUseItem, - CombatActionStunt, + # Default actions available to everyone + default_action_classes = [ CombatActionAttack, + CombatActionStunt, + CombatActionUseItem, + CombatActionFlee, + CombatActionBlock, + CombatActionDoNothing, ] # attributes # stores all combatants active in the combat combatants = AttributeProperty(list()) + # each combatant has its own set of actions that may or may not be available + # every round + combatant_actions = AttributeProperty(defaultdict(dict)) + action_queue = AttributeProperty(dict()) - turn_stats = AttributeProperty(defaultdict(list)) + turn_stats = AttributeProperty(dict()) # turn counter - abstract time turn = AttributeProperty(default=0) @@ -317,22 +474,35 @@ class EvAdventureCombatHandler(DefaultScript): advantage_matrix = AttributeProperty(defaultdict(dict)) disadvantage_matrix = AttributeProperty(defaultdict(dict)) - fleeing_combatants = AttributeProperty(default=list()) + fleeing_combatants = AttributeProperty(list()) - # how often this script ticks - the length of each turn (in seconds) - interval = 60 + _warn_time_task = None + + def at_script_creation(self): + + # how often this script ticks - the max length of each turn (in seconds) + self.interval = 60 def at_repeat(self, **kwargs): """ Called every self.interval seconds. The main tick of the script. """ + if self._warn_time_task: + self._warn_time_task.remove() + if self.turn == 0: self._start_turn() else: self._end_turn() self._start_turn() + def _reset_menu(self): + """ + Move menu to the action-selection node. + + """ + def _update_turn_stats(self, combatant, message): """ Store combat messages to display at the end of turn. @@ -340,6 +510,13 @@ class EvAdventureCombatHandler(DefaultScript): """ self.turn_stats[combatant].append(message) + def _warn_time(self, time_remaining): + """ + Send a warning message when time is about to run out. + + """ + self.msg(f"{time_remaining} seconds left in round!") + def _start_turn(self): """ New turn events @@ -349,6 +526,17 @@ class EvAdventureCombatHandler(DefaultScript): self.action_queue = {} self.turn_stats = defaultdict(list) + # start a timer to echo a warning to everyone 15 seconds before end of round + if self.interval >= 0: + # set -1 for unit tests + warning_time = 15 + self._warn_time_task = delay( + self.interval - warning_time, self._warn_time, warning_time) + + for combatant in self.combatants: + # cycle combat menu + combatant.ndb._evmenu.goto("node_select_action", "") + def _end_turn(self): """ End of turn operations. @@ -365,7 +553,7 @@ class EvAdventureCombatHandler(DefaultScript): combatant, (CombatActionDoNothing(self, combatant), (), {}) ) # perform the action on the CombatAction instance - action.use(combatant, *args, **kwargs) + action.use(*args, **kwargs) # handle disengaging combatants @@ -375,7 +563,7 @@ class EvAdventureCombatHandler(DefaultScript): # check disengaging combatants (these are combatants that managed # to stay at disengaging distance for a turn) if combatant in self.fleeing_combatants: - self.disengaging_combatants.remove(combatant) + self.fleeing_combatants.remove(combatant) for combatant in to_remove: # for clarity, we remove here rather than modifying the combatant list @@ -399,34 +587,118 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in self.combatants: new_advantage_matrix[combatant] = { target: set_at_turn - for target, turn in advantage_matrix.items() + for target, set_at_turn in advantage_matrix.items() if set_at_turn > oldest_stunt_age } new_disadvantage_matrix[combatant] = { target: set_at_turn - for target, turn in disadvantage_matrix.items() + for target, set_at_turn in disadvantage_matrix.items() if set_at_turn > oldest_stunt_age } self.advantage_matrix = new_advantage_matrix self.disadvantage_matrix = new_disadvantage_matrix - def add_combatant(self, combatant): + if len(self.combatants) == 1: + # only one combatant left - abort combat + self.stop_combat() + + def add_combatant(self, combatant, session=None): + """ + Add combatant to battle. + + Args: + combatant (Object): The combatant to add. + session (Session, optional): Session to use. + + Notes: + This adds them to the internal list and initiates + all possible actions. If the combatant as an Attribute list + `custom_combat_actions` containing `CombatAction` items, this + will injected and if the `.key` matches, will replace the + default action classes. + + """ if combatant not in self.combatants: self.combatants.append(combatant) + # allow custom character actions (not used by default) + custom_action_classes = combatant.db.custom_combat_actions or [] + + self.combatant_actions[combatant] = { + action_class.key: action_class(self, combatant) + for action_class in self.default_action_classes + custom_action_classes + } + + # start evmenu (menu node definitions at the end of this module) + + evmenu.EvMenu( + combatant, + { + "node_wait_start": node_wait_start, + "node_select_target": node_select_target, + "node_selct_action": node_select_action, + "node_wait_turn": node_wait_turn, + }, + startnode="node_wait_turn", + auto_quit=False, + persistent=True, + session=session, + ) + def remove_combatant(self, combatant): + """ + Remove combatant from battle. + + Args: + combatant (Object): The combatant to remove. + + """ if combatant in self.combatants: self.combatants.remove(combatant) + self.combatant_actions.pop(combatant, None) + combatant.ndb._evmenu.close_menu() + + def start_combat(self): + """ + Start the combat timer and get everyone going. + + """ + for combatant in self.combatants: + combatant.ndb._evmenu.goto("node_select_action", "") + self.start() # starts the script timer + self._start_turn() + + def stop_combat(self): + """ + This is used to stop the combat immediately. + + It can also be called from external systems, for example by + monster AI can do this when only allied players remain. + + """ + for combatant in self.combatants: + self.remove_combatant(combatant) def get_combat_summary(self, combatant): """ Get a summary of the current combat state from the perspective of a given combatant. - You (5/10 health) - Foo (Hurt) [Running away - use 'chase' to stop them!] - Bar (Perfect health) + Args: + combatant (Object): The combatant to get the summary for + + Returns: + str: The summary. + + Example: + + ``` + You (5/10 health) + Foo (Hurt) [Running away - use 'block' to stop them!] + Bar (Perfect health) + + ``` """ table = evtable.EvTable(border_width=0) @@ -447,7 +719,7 @@ class EvAdventureCombatHandler(DefaultScript): health = f"{comb.hurt_level}" fleeing = "" if comb in self.fleeing_combatants: - fleeing = " [Running away! Use 'chase' to stop them!" + fleeing = " [Running away! Use 'block' to stop them!" table.add_row(f"{name} ({health}){fleeing}") @@ -536,28 +808,54 @@ class EvAdventureCombatHandler(DefaultScript): # defender still alive self.msg(defender) - def register_action(self, action, combatant, *args, **kwargs): + def register_action(self, combatant, action_key, *args, **kwargs): """ - Register an action by-name. + Register an action based on its `.key`. Args: combatant (Object): The one performing the action. - action (CombatAction): An available action class to use. + action_key (str): The action to perform, by its `.key`. + *args: Arguments to pass to `action.use`. + **kwargs: Kwargs to pass to `action.use`. """ - if not action: - action = CombatActionDoNothing - self.action_queue[combatant] = (action(self, combatant), args, kwargs) + # get the instantiated action for this combatant + action = self.combatant_actions[combatant].get( + action_key, + CombatActionDoNothing(self, combatant) + ) + + # store the action in the queue + self.action_queue[combatant] = (action, args, kwargs) + + if len(self.action_queue) >= len(self.combatants): + # all combatants registered actions - force the script + # to cycle (will fire at_repeat) + self.force_repeat() + + def get_available_actions(self, combatant, *args, **kwargs): + """ + Get only the actions available to a combatant. + + Args: + combatant (Object): The combatant to get actions for. + *args: Passed to `action.can_use()` + **kwargs: Passed to `action.can_use()` + + Returns: + list: The initiated CombatAction instances available to the + combatant right now. + + Note: + We could filter this by `.can_use` return already here, but then it would just + be removed from the menu. Instead we return all and use `.can_use` in the menu + so we can include the option but gray it out. + + """ + return list(self.combatant_actions[combatant].values()) -# combat menu - -combat_script = """ - - - - -""" +# ------------ start combat menu definitions def _register_action(caller, raw_string, **kwargs): @@ -565,11 +863,16 @@ def _register_action(caller, raw_string, **kwargs): Register action with handler. """ - action = kwargs.get["action"] + action_key = kwargs.get["action_key"] action_args = kwargs["action_args"] action_kwargs = kwargs["action_kwargs"] - combat = caller.scripts.get("combathandler") - combat.register_action(caller, action=action, *action_args, **action_kwargs) + action_target = kwargs["action_target"] + combat_handler = caller._evmenu.combathandler + combat_handler.register_action( + caller, action_key, action_target, *action_args, **action_kwargs) + + # move into waiting + return "node_wait_turn" def node_select_target(caller, raw_string, **kwargs): @@ -578,36 +881,61 @@ def node_select_target(caller, raw_string, **kwargs): with all other actions. """ - action = kwargs.get("action") + action_key = kwargs.get("action_key") action_args = kwargs.get("action_args") action_kwargs = kwargs.get("action_kwargs") combat = caller.scripts.get("combathandler") - text = "Select target for |w{action}|n." + text = "Select target for |w{action_key}|n." - combatants = [combatant for combatant in combat.combatants if combatant is not caller] + # make the apply-self option always the first one, give it key 0 options = [ { - "desc": combatant.key, - "goto": ( - _register_action, - {"action": action, "args": action_args, "kwargs": action_kwargs}, - ), - } - for combatant in combat.combatants - ] - # make the apply-self option always the last one - options.append( - { + "key": "0", "desc": "(yourself)", "goto": ( _register_action, - {"action": action, "args": action_args, "kwargs": action_kwargs}, + { + "action_key": action_key, + "action_args": action_args, + "action_kwargs": action_kwargs, + "action_target": caller, + }, ), } - ) + ] + # filter out ourselves and then make options for everyone else + combatants = [combatant for combatant in combat.combatants if combatant is not caller] + for combatant in combatants: + # automatic menu numbering starts from 1 + options.append( + { + "desc": combatant.key, + "goto": ( + _register_action, + { + "action_key": action_key, + "action_args": action_args, + "action_kwargs": action_kwargs, + "action_target": combatant, + }, + ), + } + ) + return text, options +def _action_unavailable(caller, raw_string, **kwargs): + """ + Selecting an unavailable action. + + """ + action_key = kwargs.get["action_key"] + caller.msg(f"Action '{action_key}' is currently not available.") + # go back to previous node + return + + def node_select_action(caller, raw_string, **kwargs): """ Menu node for selecting a combat action. @@ -615,16 +943,142 @@ def node_select_action(caller, raw_string, **kwargs): """ combat = caller.scripts.get("combathandler") text = combat.get_previous_turn_status(caller) - options = combat.get_available_options(caller) - options = { - "desc": action, - "goto": ( - "node_select_target", - { - "action": action, - }, - ), - } + options = [] + for icount, action in enumerate(combat.get_available_actions(caller)): + # we handle counts manually so we can grey the entire line if action is unavailable. + key = str(icount + 1) + desc = action.desc + + if not action.can_use(): + # action is unavailable. Greyscale the option if not available and route to the + # _action_unavailable helper + key = f"|x{key}|n" + desc = f"|x{desc}|n" + + options.append( + { + "key": key, + "desc": desc, + "goto": ( + _action_unavailable, + { + "action_key": action.key + } + ) + } + ) + elif action.no_target: + # action is available, and requires no target. Redirect to register + # without going via the select-target node. + options.append( + { + "key": key, + "desc": desc, + "goto": ( + _register_action, + { + "action_key": action.key, + "action_args": (), + "action_kwargs": kwargs, + "action_target": None, + }, + ), + } + ) + else: + # action is available and requires a target, so we will select a target next. + options.append( + { + "key": key, + "desc": desc, + "goto": ( + "node_select_target", + { + "action_key": action.key, + "action_args": (), + "action_kwargs": kwargs, + }, + ), + } + ) return text, options + + +def node_wait_turn(caller, raw_string, **kwargs): + """ + Menu node routed to waiting for the round to end (for everyone to choose their actions). + + All menu actions route back to the same node. The CombatHandler will handle moving everyone back + to the `node_select_action` node when the next round starts. + + """ + text = "Waiting for other combatants ..." + + options = { + "key": "_default", + "desc": "(next round will start automatically)", + "goto": "node_wait_turn" + } + return text, options + + +def node_wait_start(caller, raw_string, **kwargs): + """ + Menu node entered when waiting for the combat to start. New players joining an existing + combat will end up here until the previous round is over, at which point the combat handler + will goto everyone to `node_select_action`. + + """ + text = "Waiting for combat round to start ..." + + options = { + "key": "_default", + "desc": "(combat will start automatically)", + "goto": "node_wait_start" + } + return text, options + + +# -------------- end of combat menu definitions + + +def join_combat(caller, *targets, combathandler=None, session=None): + """ + Join or create a new combat involving caller and at least one target, + + Args: + caller (Object): The one starting the combat. + *targets (Objects): Any other targets to pull into combat. At least one target + is required if `combathandler` is not given (a new combat must have at least + one opponent!). + + Keyword Args: + combathandler (EvAdventureCombatHandler): If not given, a new combat will be created and + at least one `*targets` argument must be provided. If given, caller will + join an existing combat. + session (Session, optional): A player session to use. This is useful for multisession modes. + + Returns: + EvAdventureCombatHandler: A created or existing combat handler. + + """ + created = False + if not combathandler: + if not targets: + raise CombatFailure("Must have an opponent to start combat.") + combathandler, _ = EvAdventureCombatHandler.create( + f"Combat_{datetime.utcnow()}", + autostart=False, # means we must use .start() to start the script + ) + created = True + + combathandler.add_combatant(caller, session=session) + for target in targets: + combathandler.add_combatant(target, session=session) + + if created: + combathandler.start_combat() + + return combathandler diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index 9668cefedc..195c6222a5 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -16,6 +16,7 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): Test the turn-based combat-handler implementation. """ + maxDiff = None @patch( "evennia.contrib.tutorials.evadventure.combat_turnbased" @@ -24,29 +25,40 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): ) def setUp(self): super().setUp() - self.combathandler = combat_turnbased.EvAdventureCombatHandler.objects.create() self.combatant = self.character self.target = create.create_object(EvAdventureCharacter, key="testchar2") - self.combathandler.add_combatant(self.combatant) - self.combathandler.add_combatant(self.target) + + # this already starts turn 1 + self.combathandler = combat_turnbased.join_combat(self.combatant, self.target) + + def tearDown(self): + self.combathandler.delete() def test_remove_combatant(self): self.combathandler.remove_combatant(self.character) def test_start_turn(self): - self.combathandler._start_turn() - self.assertEqual(self.combathandler.turn, 1) self.combathandler._start_turn() self.assertEqual(self.combathandler.turn, 2) + self.combathandler._start_turn() + self.assertEqual(self.combathandler.turn, 3) def test_end_of_turn__empty(self): self.combathandler._end_turn() def test_register_and_run_action(self): - action = combat_turnbased.CombatActionAttack + action_class = combat_turnbased.CombatActionAttack + action = self.combathandler.combatant_actions[self.combatant][action_class.key] + + self.combathandler.register_action(self.combatant, action.key) + + self.assertEqual( + self.combathandler.action_queue[self.combatant], + (action, (), {}) + ) + action.use = MagicMock() - self.combathandler.register_action(action, self.combatant) self.combathandler._end_turn() action.use.assert_called_once() @@ -54,6 +66,6 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): def test_attack(self, mock_randint): mock_randint.return_value = 8 self.combathandler.register_action( - combat_turnbased.CombatActionAttack, self.combatant, self.target + combat_turnbased.CombatActionAttack.key, self.combatant, self.target ) self.combathandler._end_turn() diff --git a/evennia/scripts/taskhandler.py b/evennia/scripts/taskhandler.py index 59cbeb12a5..d0401bedb1 100644 --- a/evennia/scripts/taskhandler.py +++ b/evennia/scripts/taskhandler.py @@ -337,7 +337,7 @@ class TaskHandler(object): Returns: TaskHandlerTask: An object to represent a task. - Reference evennia.scripts.taskhandler.TaskHandlerTask for complete details. + Reference `evennia.scripts.taskhandler.TaskHandlerTask` for complete details. """ # set the completion time From 19dc232b24c0c24e5170f6b5f3e29d47b589df6d Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 5 Jul 2022 18:52:46 +0200 Subject: [PATCH 031/177] Update bug-report-develop.md --- .github/ISSUE_TEMPLATE/bug-report-develop.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report-develop.md b/.github/ISSUE_TEMPLATE/bug-report-develop.md index 6bb020edbb..2bcdda7d65 100644 --- a/.github/ISSUE_TEMPLATE/bug-report-develop.md +++ b/.github/ISSUE_TEMPLATE/bug-report-develop.md @@ -8,7 +8,7 @@ assignees: '' --- #### Describe the bug -(This is for bugs in the develop-branch only. Make sure you test with the latest version.) + #### To Reproduce Steps to reproduce the behavior: @@ -18,10 +18,10 @@ Steps to reproduce the behavior: 4. See error #### Expected behavior -(Replace with a clear and concise description of what you expected to happen.) + #### Develop-branch commit -(The commit-hash. If unsure, run `evennia -v` or get the first few lines of the `about` command in-game.) + #### Additional context -(Replace with any other context about the problem, or ideas on how to solve.) + From 50bd4eadae82c60f016e47f8a86101071335e8d7 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 5 Jul 2022 18:54:50 +0200 Subject: [PATCH 032/177] Update bug-report.md --- .github/ISSUE_TEMPLATE/bug-report.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug-report.md b/.github/ISSUE_TEMPLATE/bug-report.md index e7d0990a31..472cf50abb 100644 --- a/.github/ISSUE_TEMPLATE/bug-report.md +++ b/.github/ISSUE_TEMPLATE/bug-report.md @@ -8,7 +8,7 @@ assignees: '' --- #### Describe the bug -(Replace with a clear and concise description of what the bug is.) + #### To Reproduce Steps to reproduce the behavior: @@ -18,10 +18,10 @@ Steps to reproduce the behavior: 4. See error #### Expected behavior -(Replace with a clear and concise description of what you expected to happen.) + #### Environment, Evennia version, OS etc -(Replace with info. If unsure, run `evennia -v` or get the first few lines of the `about` command in-game.) + #### Additional context -(Replace with any other context about the problem, or ideas on how to solve.) + From 64dcb675c5a534dc77c3efac89c71e8e8a75964f Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 5 Jul 2022 18:59:00 +0200 Subject: [PATCH 033/177] Update documentation-issue.md --- .github/ISSUE_TEMPLATE/documentation-issue.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/documentation-issue.md b/.github/ISSUE_TEMPLATE/documentation-issue.md index f72656ca20..d03d696e9e 100644 --- a/.github/ISSUE_TEMPLATE/documentation-issue.md +++ b/.github/ISSUE_TEMPLATE/documentation-issue.md @@ -7,11 +7,11 @@ assignees: '' --- -#### Existing page / new -(Link to existing documentation page or proposed name of new page) +#### Documentation page name and link + -#### Documentation issue -(Replace with the description of what the issue is or motivate a changes/additions) +#### Reason for issue + #### Suggested change -(Enter the suggested change here) + From 47371d7e020c781f1c58d7969ee0c2e80cd687b8 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 5 Jul 2022 19:02:41 +0200 Subject: [PATCH 034/177] Update feature-request.md --- .github/ISSUE_TEMPLATE/feature-request.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature-request.md b/.github/ISSUE_TEMPLATE/feature-request.md index 7dc702cfad..fe1022e728 100644 --- a/.github/ISSUE_TEMPLATE/feature-request.md +++ b/.github/ISSUE_TEMPLATE/feature-request.md @@ -8,13 +8,13 @@ assignees: '' --- #### Is your feature request related to a problem? Please describe. -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + #### Describe the solution you'd like -A clear and concise description of what you want to happen. + -#### Describe alternatives you've considered -A clear and concise description of any alternative solutions or features you've considered. +#### Alternatives you've considered + #### Additional context -Add any other context or screenshots about the feature request here. + From 4e2cd5e6a635218a8e2c0e810a446f9ffd8d51ac Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 11 Jul 2022 20:45:30 +0200 Subject: [PATCH 035/177] Add more parts of the turnbased combat tutorial --- .../tutorials/evadventure/characters.py | 84 +++++- .../tutorials/evadventure/combat_turnbased.py | 239 ++++++++++++++---- .../contrib/tutorials/evadventure/commands.py | 58 +++++ .../contrib/tutorials/evadventure/objects.py | 52 +++- .../contrib/tutorials/evadventure/rooms.py | 12 + .../tutorials/evadventure/tests/mixins.py | 5 +- evennia/scripts/scripthandler.py | 19 +- 7 files changed, 399 insertions(+), 70 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 3c2d4a5ea5..e3fdd0801c 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -19,7 +19,7 @@ class EquipmentHandler: """ _Knave_ puts a lot of emphasis on the inventory. You have CON_DEFENSE inventory slots. Some things, like torches can fit multiple in one slot, other (like - big weapons) use more than one slot. The items carried and wielded has a big impact + big weapons and armor) use more than one slot. The items carried and wielded has a big impact on character customization - even magic requires carrying a runestone per spell. The inventory also doubles as a measure of negative effects. Getting soaked in mud @@ -147,6 +147,43 @@ class EquipmentHandler: weapon = slots[WieldLocation.WEAPON_HAND] return weapon + def display_loadout(self): + """ + Get a visual representation of your current loadout. + + Returns: + str: The current loadout. + + """ + slots = self.slots + one_hand = None + weapon_str = "You are fighting with your bare fists" + shield_str = " and have no shield." + armor_str = "You wear no armor" + helmet_str = " and no helmet." + + two_hands = slots[WieldLocation.TWO_HANDS] + if two_hands: + weapon_str = f"You wield {two_hands} with both hands" + shield_str = f" (you can't hold a shield at the same time)." + else: + one_hands = slots[WieldLocation.WEAPON_HAND] + if one_hands: + weapon_str = f"You are wielding {one_hands} in one hand." + shield = slots[WieldLocation.SHIELD_HAND] + if shield: + shield_str = f"You have {shield} in your off hand." + + armor = slots[WieldLocation.BODY] + if armor: + armor_str = f"You are wearing {armor}" + + helmet = slots[WieldLocation.BODY] + if helmet: + helmet_str = f" and {helmet} on your head." + + return f"{weapon_str}{shield_str}\n{armor_str}{helmet_str}" + def use(self, obj): """ Make use of item - this makes use of the object's wield slot to decide where @@ -242,6 +279,51 @@ class EquipmentHandler: self._save() return ret + def get_wieldable_objects_from_backpack(self): + """ + Get all wieldable weapons (or spell runes) from backpack. This is useful in order to + have a list to select from when swapping your wielded loadout. + + Returns: + list: A list of objects with a suitable `inventory_use_slot`. We don't check + quality, so this may include broken items (we may want to visually show them + in the list after all). + + """ + return [obj for obj in slots[WieldLocation.BACKPACK] + if obj.inventory_use_slot in ( + WieldLocation.WEAPON_HAND, + WieldLocation.TWO_HANDS, + WieldLocation.SHIELD_HAND)] + + def get_wearable_objects_from_backpack(self): + """ + Get all wearable items (armor or helmets) from backpack. This is useful in order to + have a list to select from when swapping your worn loadout. + + Returns: + list: A list of objects with a suitable `inventory_use_slot`. We don't check + quality, so this may include broken items (we may want to visually show them + in the list after all). + + """ + return [obj for obj in slots[WieldLocation.BACKPACK] + if obj.inventory_use_slot in ( + WieldLocation.BODY, + WieldLocation.HEAD + )] + + def get_usable_objects_from_backpack(self): + """ + Get all 'usable' items (like potions) from backpack. This is useful for getting a + list to select from. + + Returns: + list: A list of objects that are usable. + + """ + return [obj for obj in slots[WieldLocation.BACKPACK] if obj.uses > 0] + class LivingMixin: """ diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 62b7ffbc95..81016b65bb 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -108,7 +108,9 @@ from evennia.utils import evtable, dbserialize, delay, evmenu from .enums import Ability from . import rules -# for simplicity, we have a default duration for advantages/disadvantages + +COMBAT_HANDLER_KEY = "evadventure_turnbased_combathandler" +COMBAT_HANDLER_INTERVAL = 60 class CombatFailure(RuntimeError): @@ -134,8 +136,9 @@ class CombatAction: aliases = [] help_text = "Combat action to perform." - # if no target is needed (always affect oneself) - no_target = False + # the next combat menu node to go to - this ties the combat action into the UI + # use None to do nothing (jump directly to registering the action) + next_menu_node = "node_select_target" # action to echo to everyone. post_action_text = "{combatant} performed an action." @@ -199,7 +202,7 @@ class CombatAction: if available, should describe what the action does. """ - return True if self.uses is None else self.uses < self.max_uses + return True if self.uses is None else self.uses < (self.max_uses or 0) def pre_use(self, *args, **kwargs): pass @@ -364,7 +367,7 @@ class CombatActionFlee(CombatAction): aliases = ("d", "disengage", "flee") # this only affects us - no_target = True + next_menu_node = "node_register_action" help_text = ( "Disengage from combat. Use successfully two times in a row to leave combat at the " @@ -419,6 +422,45 @@ class CombatActionBlock(CombatAction): pass # they are getting away! +class CombatActionSwapWieldedWeaponOrSpell(CombatAction): + """ + Swap Wielded weapon or spell. + + """ + key = "Swap weapon/rune/shield" + desc = "Swap currently wielded weapon, shield or spell-rune." + aliases = ("s", "swap", "draw", "swap weapon", "draw weapon", + "swap rune", "draw rune", "swap spell", "draw spell") + help_text = ("Draw a new weapon or spell-rune from your inventory, " + "replacing your current loadout") + + next_menu_node = "node_select_wield_from_inventory" + + post_action_text = "{combatant} switches weapons." + + def use(self, combatant, item, *args, **kwargs): + # this will make use of the item + combatant.inventory.use(item) + + +class CombatActionUseItem(CombatAction): + """ + Use an item from inventory. + + """ + key = "Use an item from backpack" + desc = "Use an item from your inventory." + aliases = ("u", "use", "use item") + help_text = "Choose an item from your inventory to use." + + next_menu_node = "node_select_use_item_from_inventory" + + post_action_text = "{combatant} used an item." + + def use(self, combatant, item, *args, **kwargs): + item.use(combatant, *args, **kwargs) + + class CombatActionDoNothing(CombatAction): """ Do nothing this turn. @@ -431,7 +473,7 @@ class CombatActionDoNothing(CombatAction): help_text = "Hold you position, doing nothing." # affects noone else - no_target = True + next_menu_node = "node_register_action" post_action_text = "{combatant} does nothing this turn." @@ -439,7 +481,9 @@ class CombatActionDoNothing(CombatAction): class EvAdventureCombatHandler(DefaultScript): """ This script is created when combat is initialized and stores a queue - of all active participants. It's also possible to join (or leave) the fray later. + of all active participants. + + It's also possible to join (or leave) the fray later. """ @@ -450,6 +494,7 @@ class EvAdventureCombatHandler(DefaultScript): default_action_classes = [ CombatActionAttack, CombatActionStunt, + CombatActionSwapWieldedWeaponOrSpell, CombatActionUseItem, CombatActionFlee, CombatActionBlock, @@ -481,7 +526,8 @@ class EvAdventureCombatHandler(DefaultScript): def at_script_creation(self): # how often this script ticks - the max length of each turn (in seconds) - self.interval = 60 + self.key = COMBAT_HANDLER_KEY + self.interval = COMBAT_HANDLER_INTERVAL def at_repeat(self, **kwargs): """ @@ -621,6 +667,7 @@ class EvAdventureCombatHandler(DefaultScript): """ if combatant not in self.combatants: self.combatants.append(combatant) + combatant.db.turnbased_combathandler = self # allow custom character actions (not used by default) custom_action_classes = combatant.db.custom_combat_actions or [] @@ -637,13 +684,14 @@ class EvAdventureCombatHandler(DefaultScript): { "node_wait_start": node_wait_start, "node_select_target": node_select_target, - "node_selct_action": node_select_action, + "node_select_action": node_select_action, "node_wait_turn": node_wait_turn, }, startnode="node_wait_turn", auto_quit=False, persistent=True, session=session, + combathandler=self # makes this available as combatant.ndb._evmenu.combathandler ) def remove_combatant(self, combatant): @@ -658,6 +706,7 @@ class EvAdventureCombatHandler(DefaultScript): self.combatants.remove(combatant) self.combatant_actions.pop(combatant, None) combatant.ndb._evmenu.close_menu() + del combatant.db.turnbased_combathandler def start_combat(self): """ @@ -866,7 +915,7 @@ def _register_action(caller, raw_string, **kwargs): action_key = kwargs.get["action_key"] action_args = kwargs["action_args"] action_kwargs = kwargs["action_kwargs"] - action_target = kwargs["action_target"] + action_target = kwargs.get("action_target") combat_handler = caller._evmenu.combathandler combat_handler.register_action( caller, action_key, action_target, *action_args, **action_kwargs) @@ -884,44 +933,128 @@ def node_select_target(caller, raw_string, **kwargs): action_key = kwargs.get("action_key") action_args = kwargs.get("action_args") action_kwargs = kwargs.get("action_kwargs") - combat = caller.scripts.get("combathandler") + combat = caller.ndb._evmenu.combathandler text = "Select target for |w{action_key}|n." # make the apply-self option always the first one, give it key 0 + kwargs["action_target"] = caller options = [ { "key": "0", "desc": "(yourself)", - "goto": ( - _register_action, - { - "action_key": action_key, - "action_args": action_args, - "action_kwargs": action_kwargs, - "action_target": caller, - }, - ), + "goto": (_register_action, kwargs) } ] # filter out ourselves and then make options for everyone else combatants = [combatant for combatant in combat.combatants if combatant is not caller] for combatant in combatants: # automatic menu numbering starts from 1 + kwargs["action_target"] = combatant options.append( { "desc": combatant.key, - "goto": ( - _register_action, - { - "action_key": action_key, - "action_args": action_args, - "action_kwargs": action_kwargs, - "action_target": combatant, - }, - ), + "goto": (_register_action, kwargs) } ) + # add ability to cancel + options.append( + { + "key": "_default", + "desc": "(No input to Abort and go back)", + "goto": "node_select_action" + } + ) + + return text, options + + +def _item_broken(caller, raw_string, **kwargs): + caller.msg("|rThis item is broken and unusable!|n") + return None # back to previous node + + +def node_select_wield_from_inventory(caller, raw_string, **kwargs): + """ + Menu node allowing for wielding item(s) from inventory. + + """ + combat = caller.ndb._evmenu.combathandler + loadout = caller.inventory.display_loadout() + text = (f"{loadout}\nSelect weapon, spell or shield to draw. It will swap out " + "anything already in the same hand (you can't change armor or helmet in combat).") + + # get a list of all suitable weapons/spells/shields + options = [] + for obj in caller.inventory.get_wieldable_objects_from_backpack(): + if obj.quality <= 0: + # object is broken + options.append( + { + "desc": f"|Rstr(obj)|n", + "goto": _item_broken, + } + ) + else: + # normally working item + kwargs['action_args'] = (obj,) + options.append( + { + "desc": str(obj), + "goto": (_register_action, kwargs) + } + ) + + # add ability to cancel + options.append( + { + "key": "_default", + "desc": "(No input to Abort and go back)", + "goto": "node_select_action" + } + ) + + return text, options + + +def node_select_use_item_from_inventory(caller, raw_string, **kwargs): + """ + Menu item allowing for using usable items (like potions) from inventory. + + """ + combat = caller.ndb._evmenu.combathandler + text = "Select an item to use." + + # get a list of all suitable weapons/spells/shields + options = [] + for obj in caller.inventory.get_usable_objects_from_backpack(): + if obj.quality <= 0: + # object is broken + options.append( + { + "desc": f"|Rstr(obj)|n", + "goto": _item_broken, + } + ) + else: + # normally working item + kwargs['action_args'] = (obj,) + options.append( + { + "desc": str(obj), + "goto": (_register_action, kwargs) + } + ) + + # add ability to cancel + options.append( + { + "key": "_default", + "desc": "(No input to Abort and go back)", + "goto": "node_select_action" + } + ) + return text, options @@ -941,8 +1074,8 @@ def node_select_action(caller, raw_string, **kwargs): Menu node for selecting a combat action. """ - combat = caller.scripts.get("combathandler") - text = combat.get_previous_turn_status(caller) + combat = caller.ndb._evmenu.combathandler + text = combat.get_combat_summary(caller) options = [] for icount, action in enumerate(combat.get_available_actions(caller)): @@ -968,9 +1101,9 @@ def node_select_action(caller, raw_string, **kwargs): ) } ) - elif action.no_target: - # action is available, and requires no target. Redirect to register - # without going via the select-target node. + elif action.next_menu_node is None: + # action is available, but needs no intermediary step. Redirect to register + # the action immediately options.append( { "key": key, @@ -987,13 +1120,13 @@ def node_select_action(caller, raw_string, **kwargs): } ) else: - # action is available and requires a target, so we will select a target next. + # action is available and next_menu_node is set to point to the next node we want options.append( { "key": key, "desc": desc, "goto": ( - "node_select_target", + action.next_menu_node, { "action_key": action.key, "action_args": (), @@ -1002,6 +1135,14 @@ def node_select_action(caller, raw_string, **kwargs): ), } ) + # add ability to cancel + options.append( + { + "key": "_default", + "desc": "(No input to Abort and go back)", + "goto": "node_select_action" + } + ) return text, options @@ -1044,9 +1185,12 @@ def node_wait_start(caller, raw_string, **kwargs): # -------------- end of combat menu definitions -def join_combat(caller, *targets, combathandler=None, session=None): +def join_combat(caller, *targets, session=None): """ - Join or create a new combat involving caller and at least one target, + Join or create a new combat involving caller and at least one target. The combat + is started on the current room location - this means there can only be one combat + in each room (this is not hardcoded in the combat per-se, but it makes sense for + this implementation). Args: caller (Object): The one starting the combat. @@ -1055,9 +1199,6 @@ def join_combat(caller, *targets, combathandler=None, session=None): one opponent!). Keyword Args: - combathandler (EvAdventureCombatHandler): If not given, a new combat will be created and - at least one `*targets` argument must be provided. If given, caller will - join an existing combat. session (Session, optional): A player session to use. This is useful for multisession modes. Returns: @@ -1065,15 +1206,19 @@ def join_combat(caller, *targets, combathandler=None, session=None): """ created = False + location = caller.location + if not location: + raise CombatFailure("Must have a location to start combat.") + + if not targets: + raise CombatFailure("Must have an opponent to start combat.") + + combathandler = location.scripts.get(COMBAT_HANDLER_KEY).first() if not combathandler: - if not targets: - raise CombatFailure("Must have an opponent to start combat.") - combathandler, _ = EvAdventureCombatHandler.create( - f"Combat_{datetime.utcnow()}", - autostart=False, # means we must use .start() to start the script - ) + combathandler = location.scripts.add(EvAdventureCombatHandler, autostart=False) created = True + # it's safe to add a combatant to the same combat more than once combathandler.add_combatant(caller, session=session) for target in targets: combathandler.add_combatant(target, session=session) diff --git a/evennia/contrib/tutorials/evadventure/commands.py b/evennia/contrib/tutorials/evadventure/commands.py index e69de29bb2..affde6daf6 100644 --- a/evennia/contrib/tutorials/evadventure/commands.py +++ b/evennia/contrib/tutorials/evadventure/commands.py @@ -0,0 +1,58 @@ +""" +EvAdventure commands and cmdsets. + + +""" + +from evennia import Command, default_cmds +from . combat_turnbased import join_combat + + +class EvAdventureCommand(Command): + """ + Base EvAdventure command. This is on the form + + command + + where whitespace around the argument(s) are stripped. + + """ + def parse(self): + self.args = self.args.strip() + + +class CmdAttackTurnBased(EvAdventureCommand): + """ + Attack a target or join an existing combat. + + Usage: + attack + attack , , ... + + If the target is involved in combat already, you'll join combat with + the first target you specify. Attacking multiple will draw them all into + combat. + + This will start/join turn-based, combat, where you have a limited + time to decide on your next action from a menu of options. + + """ + + def parse(self): + super().parse() + self.targets = [name.strip() for name in self.args.split(",")] + + def func(self): + + # find if + + target_objs = [] + for target in self.targets: + target_obj = self.caller.search(target) + if target_obj: + # show a warning but don't abort + continue + target_objs.append(target_obj) + + if target_objs: + join_combat(self.caller, *target_objs, session=self.session) diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index b08ffe1e54..f1f532c282 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -20,13 +20,16 @@ class EvAdventureObject(DefaultObject): """ # inventory management - inventory_use_slot = AttributeProperty(default=WieldLocation.BACKPACK) + inventory_use_slot = AttributeProperty(WieldLocation.BACKPACK) # how many inventory slots it uses (can be a fraction) - size = AttributeProperty(default=1) - armor = AttributeProperty(default=0) + size = AttributeProperty(1) + armor = AttributeProperty(0) + # items that are usable (like potions) have a value larger than 0. Wieldable items + # like weapons, armor etc are not 'usable' in this respect. + uses = AttributeProperty(0) # when 0, item is destroyed and is unusable - quality = AttributeProperty(default=1) - value = AttributeProperty(default=0) + quality = AttributeProperty(1) + value = AttributeProperty(0) class EvAdventureObjectFiller(EvAdventureObject): @@ -41,8 +44,30 @@ class EvAdventureObjectFiller(EvAdventureObject): meaning it's unusable. """ + quality = AttributeProperty(0) - quality = AttributeProperty(default=0) + +class EvAdventureConsumable(EvAdventureObject): + """ + Item that can be 'used up', like a potion or food. Weapons, armor etc does not + have a limited usage in this way. + + """ + inventory_use_slot = AttributeProperty(WieldLocation.BACKPACK) + size = AttributeProperty(0.25) + uses = AttributeProperty(1) + + def use(self, user, *args, **kwargs): + """ + Consume a 'use' of this item. Once it reaches 0 uses, it should normally + not be usable anymore and probably be deleted. + + Args: + user (Object): The one using the item. + *args, **kwargs: Extra arguments depending on the usage and item. + + """ + pass class EvAdventureWeapon(EvAdventureObject): @@ -53,13 +78,9 @@ class EvAdventureWeapon(EvAdventureObject): inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND) - attack_type = AttributeProperty(default=Ability.STR) - defense_type = AttributeProperty(default=Ability.ARMOR) - damage_roll = AttributeProperty(default="1d6") - - # at which ranges this weapon can be used. If not listed, unable to use - distance_optimal = AttributeProperty(default=0) # normal usage (fists) - distance_suboptimal = AttributeProperty(default=None) # disadvantage (fists) + attack_type = AttributeProperty(Ability.STR) + defense_type = AttributeProperty(Ability.ARMOR) + damage_roll = AttributeProperty("1d6") class EvAdventureRunestone(EvAdventureWeapon): @@ -70,3 +91,8 @@ class EvAdventureRunestone(EvAdventureWeapon): they are quite powerful (and scales with caster level). """ + inventory_use_slot = AttributeProperty(WieldLocation.TWO_HANDS) + + attack_type = AttributeProperty(Ability.INT) + defense_type = AttributeProperty(Ability.CON) + damage_roll = AttributeProperty("1d8") diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py index e69de29bb2..eeef8d1893 100644 --- a/evennia/contrib/tutorials/evadventure/rooms.py +++ b/evennia/contrib/tutorials/evadventure/rooms.py @@ -0,0 +1,12 @@ +""" +EvAdventure rooms. + + + +""" + +from evennia import DefaultRoom + + +class EvAdventureRoom(DefaultRoom): + pass diff --git a/evennia/contrib/tutorials/evadventure/tests/mixins.py b/evennia/contrib/tutorials/evadventure/tests/mixins.py index 04746a1734..7a23d27eb2 100644 --- a/evennia/contrib/tutorials/evadventure/tests/mixins.py +++ b/evennia/contrib/tutorials/evadventure/tests/mixins.py @@ -6,6 +6,7 @@ Helpers for testing evadventure modules. from evennia.utils import create from ..characters import EvAdventureCharacter from ..objects import EvAdventureObject +from ..rooms import EvAdventureRoom from .. import enums @@ -17,7 +18,9 @@ class EvAdventureMixin: def setUp(self): super().setUp() - self.character = create.create_object(EvAdventureCharacter, key="testchar") + self.location = create.create_object(EvAdventureRoom, key="testroom") + self.character = create.create_object(EvAdventureCharacter, key="testchar", + location=self.location) self.helmet = create.create_object( EvAdventureObject, key="helmet", diff --git a/evennia/scripts/scripthandler.py b/evennia/scripts/scripthandler.py index e5be10fdfd..905a1b952f 100644 --- a/evennia/scripts/scripthandler.py +++ b/evennia/scripts/scripthandler.py @@ -69,6 +69,9 @@ class ScriptHandler(object): in script definition and listings) autostart (bool, optional): Start the script upon adding it. + Returns: + Script: The newly created Script. + """ if self.obj.__dbclass__.__name__ == "AccountDB": # we add to an Account, not an Object @@ -76,21 +79,21 @@ class ScriptHandler(object): scriptclass, key=key, account=self.obj, autostart=autostart ) else: - # the normal - adding to an Object. We wait to autostart so we can differentiate + # adding to an Object. We wait to autostart so we can differentiate # a failing creation from a script that immediately starts/stops. script = create.create_script(scriptclass, key=key, obj=self.obj, autostart=False) if not script: - logger.log_err("Script %s failed to be created/started." % scriptclass) - return False + logger.log_err(f"Script {scriptclass} failed to be created.") + return None if autostart: script.start() if not script.id: # this can happen if the script has repeats=1 or calls stop() in at_repeat. logger.log_info( - "Script %s started and then immediately stopped; " - "it could probably be a normal function." % scriptclass + f"Script {scriptclass} started and then immediately stopped; " + "it could probably be a normal function." ) - return True + return script def start(self, key): """ @@ -118,10 +121,10 @@ class ScriptHandler(object): key (str): Search criterion, the script's key or dbref. Returns: - scripts (list): The found scripts matching `key`. + scripts (queryset): The found scripts matching `key`. """ - return list(ScriptDB.objects.get_all_scripts_on_obj(self.obj, key=key)) + return ScriptDB.objects.get_all_scripts_on_obj(self.obj, key=key) def delete(self, key=None): """ From 988d8d96f8dcf4b063be9274c1c11a3463488250 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 12 Jul 2022 10:11:25 +0200 Subject: [PATCH 036/177] Building techdemo world --- .../tutorials/evadventure/build_techdemo.py | 59 +++++++++++++++++++ .../{world_batchfile.py => build_world.py} | 0 evennia/contrib/tutorials/evadventure/npcs.py | 34 +++++++++++ 3 files changed, 93 insertions(+) create mode 100644 evennia/contrib/tutorials/evadventure/build_techdemo.py rename evennia/contrib/tutorials/evadventure/{world_batchfile.py => build_world.py} (100%) create mode 100644 evennia/contrib/tutorials/evadventure/npcs.py diff --git a/evennia/contrib/tutorials/evadventure/build_techdemo.py b/evennia/contrib/tutorials/evadventure/build_techdemo.py new file mode 100644 index 0000000000..eeca33a738 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/build_techdemo.py @@ -0,0 +1,59 @@ +""" +Evadventure Techdemo area + +This is is used for testing specific features without any story or overall gameplay + +While this looks like a Python module, it is meant to run with the `batchcode` processor in-game: + + batchcode evadventure.build_techdemo + +This will step through the #CODE blocks of this file to build the tech demo. For help with using +the batchcode processor, see the +[processor documentation](https://www.evennia.com/docs/latest/Components/Batch-Code-Processor.html). + +You can also build/rebuild individiaul #CODE blocks in the `batchcode/interactive` mode. + +""" + +#HEADER + +# this is loaded at the top of every #CODE block + +from evennia import create_object, search_object +from evennia import DefaultExit +from evennia.contrib.tutorials import evadventure +from evennia.contrib.tutorials.evadventure.objects import ( + EvAdventureObject, EvAdventureRunestone, EvAdventureRunestone, EvAdventureConsumable, + EvAdventureObjectFiller) +from evennia.contrib.tutorials.evadventure.rooms import EvAdventureRoom +from evennia.contrib.tutorials.evadventure.combat_turnbasedA import EvAdventureCombatHandler +from evennia.contrib.tutorials.evadventure import npcs + +#CODE + +# Hub room evtechdemo#00 +# for other test areas to link back to. Connects in turn back to Limbo. + +limbo = search_object("Limbo") +hub_room = create_object(EvAdventureRoom, key="Techdemo Hub", aliases=("evtechdemo#00",), + attributes=[("desc", "Central hub for EvAdventure tech demo.")]) +create_object(DefaultExit, key="EvAdventure Techdemo", aliases=("techdemo",), + location=limbo, destination=hub_room) +create_object(DefaultExit, key="Back to Limbo", aliases=("limbo", "back"), + location=hub_room, destination=limbo) + + +#CODE + +# A combat room evtechdemo#01 +# with a static enemy + +combat_room = create_object(EvAdventureRoom, key="Combat Arena", aliases=("evtechdemo#01",)) +combat_room_enemy = create_object(npcs.EvadventureMob, key="Training Dummy") + +# link to/back to hub +hub_room = search_object("evtechdemo#00") +create_object(DefaultExit, key="Back to Hub", aliases=("back", "hub"), + location=combat_room, destination=hub_room) +create_object(DefaultExit, key="combat test", aliases=("combat"), + location=combat_room, destination=hub_room) diff --git a/evennia/contrib/tutorials/evadventure/world_batchfile.py b/evennia/contrib/tutorials/evadventure/build_world.py similarity index 100% rename from evennia/contrib/tutorials/evadventure/world_batchfile.py rename to evennia/contrib/tutorials/evadventure/build_world.py diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py new file mode 100644 index 0000000000..008c8aa299 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -0,0 +1,34 @@ +""" +EvAdventure NPCs. This includes both friends and enemies, only separated by their AI. + +""" + +from .characters import EvAdventureCharacter + +class EvAdventureNPC(EvAdventureCharacter): + """ + Base typeclass for NPCs. They have the features of a Character except + they have tooling for AI and for acting as quest-gives and shop-keepers. + + """ + + +class EvAdventureShopKeeper(EvAdventureNPC): + """ + ShopKeeper NPC. + + """ + + +class EvAdventureQuestGiver(EvAdventureNPC): + """ + An NPC that acts as a dispenser of quests. + + """ + + +class EvadventureMob(EvAdventureNPC): + """ + Mob (mobile) NPC; this is usually an enemy. + + """ From 6426d6896db54182f96ab7bc8497bcd16680f075 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 12 Jul 2022 11:50:38 +0200 Subject: [PATCH 037/177] Allow optional space for # CODE/# HEADER etc batchcode processing blocks --- evennia/utils/batchprocessors.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/evennia/utils/batchprocessors.py b/evennia/utils/batchprocessors.py index 881ebb3360..1fc58e37c7 100644 --- a/evennia/utils/batchprocessors.py +++ b/evennia/utils/batchprocessors.py @@ -175,11 +175,11 @@ from django.conf import settings from evennia.utils import utils _ENCODINGS = settings.ENCODINGS -_RE_INSERT = re.compile(r"^\#INSERT (.*)$", re.MULTILINE) +_RE_INSERT = re.compile(r"^\#\s*?INSERT (.*)$", re.MULTILINE) _RE_CLEANBLOCK = re.compile(r"^\#.*?$|^\s*$", re.MULTILINE) _RE_CMD_SPLIT = re.compile(r"^\#.*?$", re.MULTILINE) _RE_CODE_OR_HEADER = re.compile( - r"((?:\A|^)#CODE|(?:/A|^)#HEADER|\A)(.*?)$(.*?)(?=^#CODE.*?$|^#HEADER.*?$|\Z)", + r"((?:\A|^)#\s*?CODE|(?:/A|^)#\s*?HEADER|\A)(.*?)$(.*?)(?=^#\s*?CODE.*?$|^#\s*?HEADER.*?$|\Z)", re.MULTILINE + re.DOTALL, ) @@ -366,16 +366,16 @@ class BatchCodeProcessor(object): headers = [] codes = [] for imatch, match in enumerate(list(_RE_CODE_OR_HEADER.finditer(text))): - mtype = match.group(1).strip() + mtype = match.group(1).strip().lstrip("#").strip() # we need to handle things differently at the start of the file if mtype: istart, iend = match.span(3) else: istart, iend = match.start(2), match.end(3) code = text[istart:iend] - if mtype == "#HEADER": + if mtype == "HEADER": headers.append(code) - else: # either #CODE or matching from start of file + else: # either CODE or matching from start of file codes.append(code) # join all headers together to one From 8c3fadd8a9310fa8dbe8892c00ad61fc2b699259 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 12 Jul 2022 11:51:05 +0200 Subject: [PATCH 038/177] More work on tech demo area --- CHANGELOG.md | 2 + evennia/commands/command.py | 10 +- .../contrib/tutorials/evadventure/__init__.py | 7 + .../tutorials/evadventure/build_techdemo.py | 70 +++++-- .../tutorials/evadventure/characters.py | 89 ++------ .../tutorials/evadventure/combat_turnbased.py | 197 ++++++++---------- .../contrib/tutorials/evadventure/commands.py | 19 +- evennia/contrib/tutorials/evadventure/npcs.py | 65 +++++- .../contrib/tutorials/evadventure/objects.py | 5 +- .../contrib/tutorials/evadventure/rules.py | 9 +- .../tutorials/evadventure/tests/mixins.py | 5 +- .../evadventure/tests/test_combat.py | 6 +- evennia/objects/objects.py | 13 +- evennia/objects/tests.py | 9 +- evennia/scripts/scripthandler.py | 5 +- evennia/scripts/scripts.py | 16 +- 16 files changed, 275 insertions(+), 252 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 11ba6f0975..6feaed180f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -172,6 +172,8 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 now return `None` instead of `.db.desc` if no sdesc is set; fallback in hook (inspectorCaracal) - Reworked text2html parser to avoid problems with stateful color tags (inspectorCaracal) - Simplified `EvMenu.options_formatter` hook to use `EvColumn` and f-strings (inspectorcaracal) +- Allow `# CODE`, `# HEADER` etc as well as `#CODE`/`#HEADER` in batchcode + files - this works better with black linting. ## Evennia 0.9.5 diff --git a/evennia/commands/command.py b/evennia/commands/command.py index 4c9c24d403..6a2a794201 100644 --- a/evennia/commands/command.py +++ b/evennia/commands/command.py @@ -4,19 +4,17 @@ The base Command class. All commands in Evennia inherit from the 'Command' class in this module. """ -import re -import math import inspect +import math +import re from django.conf import settings from django.urls import reverse from django.utils.text import slugify - from evennia.locks.lockhandler import LockHandler -from evennia.utils.utils import is_iter, fill, lazy_property, make_iter -from evennia.utils.evtable import EvTable from evennia.utils.ansi import ANSIString - +from evennia.utils.evtable import EvTable +from evennia.utils.utils import fill, is_iter, lazy_property, make_iter CMD_IGNORE_PREFIXES = settings.CMD_IGNORE_PREFIXES diff --git a/evennia/contrib/tutorials/evadventure/__init__.py b/evennia/contrib/tutorials/evadventure/__init__.py index e69de29bb2..9b9f13a136 100644 --- a/evennia/contrib/tutorials/evadventure/__init__.py +++ b/evennia/contrib/tutorials/evadventure/__init__.py @@ -0,0 +1,7 @@ +""" +EvAdventure - a complete game in Evennia. + +This is an implementation of, and reference code to, the game created in the +documentation's beginner tutorial. + +""" diff --git a/evennia/contrib/tutorials/evadventure/build_techdemo.py b/evennia/contrib/tutorials/evadventure/build_techdemo.py index eeca33a738..a05085e21f 100644 --- a/evennia/contrib/tutorials/evadventure/build_techdemo.py +++ b/evennia/contrib/tutorials/evadventure/build_techdemo.py @@ -15,45 +15,69 @@ You can also build/rebuild individiaul #CODE blocks in the `batchcode/interactiv """ -#HEADER +# HEADER # this is loaded at the top of every #CODE block -from evennia import create_object, search_object -from evennia import DefaultExit +from evennia import DefaultExit, create_object, search_object from evennia.contrib.tutorials import evadventure -from evennia.contrib.tutorials.evadventure.objects import ( - EvAdventureObject, EvAdventureRunestone, EvAdventureRunestone, EvAdventureConsumable, - EvAdventureObjectFiller) -from evennia.contrib.tutorials.evadventure.rooms import EvAdventureRoom -from evennia.contrib.tutorials.evadventure.combat_turnbasedA import EvAdventureCombatHandler from evennia.contrib.tutorials.evadventure import npcs +from evennia.contrib.tutorials.evadventure.combat_turnbased import EvAdventureCombatHandler +from evennia.contrib.tutorials.evadventure.objects import ( + EvAdventureConsumable, + EvAdventureObject, + EvAdventureObjectFiller, + EvAdventureRunestone, +) +from evennia.contrib.tutorials.evadventure.rooms import EvAdventureRoom -#CODE +# CODE # Hub room evtechdemo#00 # for other test areas to link back to. Connects in turn back to Limbo. -limbo = search_object("Limbo") -hub_room = create_object(EvAdventureRoom, key="Techdemo Hub", aliases=("evtechdemo#00",), - attributes=[("desc", "Central hub for EvAdventure tech demo.")]) -create_object(DefaultExit, key="EvAdventure Techdemo", aliases=("techdemo",), - location=limbo, destination=hub_room) -create_object(DefaultExit, key="Back to Limbo", aliases=("limbo", "back"), - location=hub_room, destination=limbo) +limbo = search_object("Limbo")[0] +hub_room = create_object( + EvAdventureRoom, + key="Techdemo Hub", + aliases=("evtechdemo#00",), + attributes=[("desc", "Central hub for EvAdventure tech demo.")], +) +create_object( + DefaultExit, + key="EvAdventure Techdemo", + aliases=("techdemo", "demo", "evadventure"), + location=limbo, + destination=hub_room, +) +create_object( + DefaultExit, + key="Back to Limbo", + aliases=("limbo", "back"), + location=hub_room, + destination=limbo, +) -#CODE +# CODE # A combat room evtechdemo#01 # with a static enemy combat_room = create_object(EvAdventureRoom, key="Combat Arena", aliases=("evtechdemo#01",)) -combat_room_enemy = create_object(npcs.EvadventureMob, key="Training Dummy") +combat_room_enemy = create_object( + npcs.EvadventureMob, key="Training Dummy", aliases=("dummy",), location=combat_room +) # link to/back to hub -hub_room = search_object("evtechdemo#00") -create_object(DefaultExit, key="Back to Hub", aliases=("back", "hub"), - location=combat_room, destination=hub_room) -create_object(DefaultExit, key="combat test", aliases=("combat"), - location=combat_room, destination=hub_room) +hub_room = search_object("evtechdemo#00")[0] +create_object( + DefaultExit, key="combat test", aliases=("combat",), location=hub_room, destination=combat_room +) +create_object( + DefaultExit, + key="Back to Hub", + aliases=("back", "hub"), + location=combat_room, + destination=hub_room, +) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index e3fdd0801c..36e3933c52 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -5,10 +5,11 @@ Base Character and NPCs. from evennia.objects.objects import DefaultCharacter, DefaultObject from evennia.typeclasses.attributes import AttributeProperty -from evennia.utils.utils import lazy_property, int2str -from .objects import EvAdventureObject +from evennia.utils.utils import int2str, lazy_property + from . import rules from .enums import Ability, WieldLocation +from .objects import EvAdventureObject class EquipmentError(TypeError): @@ -290,11 +291,12 @@ class EquipmentHandler: in the list after all). """ - return [obj for obj in slots[WieldLocation.BACKPACK] - if obj.inventory_use_slot in ( - WieldLocation.WEAPON_HAND, - WieldLocation.TWO_HANDS, - WieldLocation.SHIELD_HAND)] + return [ + obj + for obj in slots[WieldLocation.BACKPACK] + if obj.inventory_use_slot + in (WieldLocation.WEAPON_HAND, WieldLocation.TWO_HANDS, WieldLocation.SHIELD_HAND) + ] def get_wearable_objects_from_backpack(self): """ @@ -307,11 +309,11 @@ class EquipmentHandler: in the list after all). """ - return [obj for obj in slots[WieldLocation.BACKPACK] - if obj.inventory_use_slot in ( - WieldLocation.BODY, - WieldLocation.HEAD - )] + return [ + obj + for obj in slots[WieldLocation.BACKPACK] + if obj.inventory_use_slot in (WieldLocation.BODY, WieldLocation.HEAD) + ] def get_usable_objects_from_backpack(self): """ @@ -327,7 +329,7 @@ class EquipmentHandler: class LivingMixin: """ - Helpers shared between all living things. + Mixin class to use for all living things. """ @@ -488,64 +490,3 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): Called when character dies. """ - - -class EvAdventureNPC(LivingMixin, DefaultCharacter): - """ - This is the base class for all non-player entities, including monsters. These - generally don't advance in level but uses a simplified, abstract measure of how - dangerous or competent they are - the 'hit dice' (HD). - - HD indicates how much health they have and how hard they hit. In _Knave_, HD also - defaults to being the bonus for all abilities. HP is 4 x Hit die (this can then be - customized per-entity of course). - - Morale is set explicitly per-NPC, usually between 7 and 9. - - Monsters don't use equipment in the way PCs do, instead they have a fixed armor - value, and their Abilities are dynamically generated from the HD (hit_dice). - - If wanting monsters or NPCs that can level and work the same as PCs, base them off the - EvAdventureCharacter class instead. - - """ - - hit_dice = AttributeProperty(default=1) - armor = AttributeProperty(default=11) - morale = AttributeProperty(default=9) - hp = AttributeProperty(default=8) - - @property - def strength(self): - return self.hit_dice - - @property - def dexterity(self): - return self.hit_dice - - @property - def constitution(self): - return self.hit_dice - - @property - def intelligence(self): - return self.hit_dice - - @property - def wisdom(self): - return self.hit_dice - - @property - def charisma(self): - return self.hit_dice - - @property - def hp_max(self): - return self.hit_dice * 4 - - def at_object_creation(self): - """ - Start with max health. - - """ - self.hp = self.hp_max diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 81016b65bb..52eff1417a 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -99,15 +99,16 @@ Choose who to block: """ -from datetime import datetime from collections import defaultdict +from datetime import datetime + from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty +from evennia.utils import dbserialize, delay, evmenu, evtable from evennia.utils.utils import make_iter -from evennia.utils import evtable, dbserialize, delay, evmenu -from .enums import Ability -from . import rules +from . import rules +from .enums import Ability COMBAT_HANDLER_KEY = "evadventure_turnbased_combathandler" COMBAT_HANDLER_INTERVAL = 60 @@ -242,7 +243,7 @@ class CombatActionAttack(CombatAction): # figure out disadvantage (gained by enemy stunts/actions) disadvantage = bool(self.combathandler.disadvantage_matrix[attacker].pop(defender, False)) - is_hit, quality = rules.EvAdventureRollEngine.opposed_saving_throw( + is_hit, quality = rules.dice.opposed_saving_throw( attacker, defender, attack_type=attacker.weapon.attack_type, @@ -295,9 +296,9 @@ class CombatActionStunt(CombatAction): # quality doesn't matter for stunts, they are either successful or not attacker = self.combatant - advantage, disadvantage = False + advantage, disadvantage = False, False - is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + is_success, _ = rules.dice.opposed_saving_throw( attacker, defender, attack_type=self.attack_type, @@ -333,6 +334,7 @@ class CombatActionUseItem(CombatAction): combat_post_use """ + key = "Use Item" desc = "[U]se item" aliases = ("u", "item", "use item") @@ -406,7 +408,7 @@ class CombatActionBlock(CombatAction): advantage = bool(self.advantage_matrix[combatant].pop(fleeing_target, False)) disadvantage = bool(self.disadvantage_matrix[combatant].pop(fleeing_target, False)) - is_success, _ = rules.EvAdventureRollEngine.opposed_saving_throw( + is_success, _ = rules.dice.opposed_saving_throw( combatant, fleeing_target, attack_type=self.attack_type, @@ -427,12 +429,23 @@ class CombatActionSwapWieldedWeaponOrSpell(CombatAction): Swap Wielded weapon or spell. """ + key = "Swap weapon/rune/shield" desc = "Swap currently wielded weapon, shield or spell-rune." - aliases = ("s", "swap", "draw", "swap weapon", "draw weapon", - "swap rune", "draw rune", "swap spell", "draw spell") - help_text = ("Draw a new weapon or spell-rune from your inventory, " - "replacing your current loadout") + aliases = ( + "s", + "swap", + "draw", + "swap weapon", + "draw weapon", + "swap rune", + "draw rune", + "swap spell", + "draw spell", + ) + help_text = ( + "Draw a new weapon or spell-rune from your inventory, replacing your current loadout" + ) next_menu_node = "node_select_wield_from_inventory" @@ -448,6 +461,7 @@ class CombatActionUseItem(CombatAction): Use an item from inventory. """ + key = "Use an item from backpack" desc = "Use an item from your inventory." aliases = ("u", "use", "use item") @@ -543,6 +557,29 @@ class EvAdventureCombatHandler(DefaultScript): self._end_turn() self._start_turn() + def _init_menu(self, combatant, session=None): + """ + Make sure combatant is in the menu. This is safe to call on a combatant already in a menu. + + """ + if not combatant.ndb._evmenu: + # re-joining the menu is useful during testing + evmenu.EvMenu( + combatant, + { + "node_wait_start": node_wait_start, + "node_select_target": node_select_target, + "node_select_action": node_select_action, + "node_wait_turn": node_wait_turn, + }, + startnode="node_wait_turn", + auto_quit=True, + persistent=True, + cmdset_mergetype="Union", + session=session, + combathandler=self, # makes this available as combatant.ndb._evmenu.combathandler + ) + def _reset_menu(self): """ Move menu to the action-selection node. @@ -577,10 +614,12 @@ class EvAdventureCombatHandler(DefaultScript): # set -1 for unit tests warning_time = 15 self._warn_time_task = delay( - self.interval - warning_time, self._warn_time, warning_time) + self.interval - warning_time, self._warn_time, warning_time + ) for combatant in self.combatants: # cycle combat menu + self._init_menu(combatant) combatant.ndb._evmenu.goto("node_select_action", "") def _end_turn(self): @@ -633,12 +672,12 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in self.combatants: new_advantage_matrix[combatant] = { target: set_at_turn - for target, set_at_turn in advantage_matrix.items() + for target, set_at_turn in advantage_matrix[combatant].items() if set_at_turn > oldest_stunt_age } new_disadvantage_matrix[combatant] = { target: set_at_turn - for target, set_at_turn in disadvantage_matrix.items() + for target, set_at_turn in disadvantage_matrix[combatant].items() if set_at_turn > oldest_stunt_age } @@ -676,23 +715,7 @@ class EvAdventureCombatHandler(DefaultScript): action_class.key: action_class(self, combatant) for action_class in self.default_action_classes + custom_action_classes } - - # start evmenu (menu node definitions at the end of this module) - - evmenu.EvMenu( - combatant, - { - "node_wait_start": node_wait_start, - "node_select_target": node_select_target, - "node_select_action": node_select_action, - "node_wait_turn": node_wait_turn, - }, - startnode="node_wait_turn", - auto_quit=False, - persistent=True, - session=session, - combathandler=self # makes this available as combatant.ndb._evmenu.combathandler - ) + self._init_menu(combatant, session=session) def remove_combatant(self, combatant): """ @@ -823,9 +846,9 @@ class EvAdventureCombatHandler(DefaultScript): """ weapon_dmg_roll = attacker.weapon.damage_roll - dmg = rules.EvAdventureRollEngine.roll(weapon_dmg_roll) + dmg = rules.dice.roll(weapon_dmg_roll) if critical: - dmg += rules.EvAdventureRollEngine.roll(weapon_dmg_roll) + dmg += rules.dice.roll(weapon_dmg_roll) defender.hp -= dmg @@ -834,7 +857,7 @@ class EvAdventureCombatHandler(DefaultScript): if defender.hp <= 0: # roll on death table. This may or may not kill you - rules.EvAdventureRollEngine.roll_death(self) + rules.dice.roll_death(self) # tell everyone self.msg(defender.defeat_message(attacker, dmg)) @@ -870,8 +893,7 @@ class EvAdventureCombatHandler(DefaultScript): """ # get the instantiated action for this combatant action = self.combatant_actions[combatant].get( - action_key, - CombatActionDoNothing(self, combatant) + action_key, CombatActionDoNothing(self, combatant) ) # store the action in the queue @@ -912,13 +934,13 @@ def _register_action(caller, raw_string, **kwargs): Register action with handler. """ - action_key = kwargs.get["action_key"] + action_key = kwargs.pop("action_key") action_args = kwargs["action_args"] action_kwargs = kwargs["action_kwargs"] - action_target = kwargs.get("action_target") - combat_handler = caller._evmenu.combathandler - combat_handler.register_action( - caller, action_key, action_target, *action_args, **action_kwargs) + action_target = kwargs.pop("action_target", None) + combat_handler = caller.ndb._evmenu.combathandler + print("action_args", action_args, "action_kwargs", action_kwargs) + combat_handler.register_action(caller, action_key, action_target, *action_args, **action_kwargs) # move into waiting return "node_wait_turn" @@ -930,41 +952,22 @@ def node_select_target(caller, raw_string, **kwargs): with all other actions. """ - action_key = kwargs.get("action_key") - action_args = kwargs.get("action_args") - action_kwargs = kwargs.get("action_kwargs") combat = caller.ndb._evmenu.combathandler text = "Select target for |w{action_key}|n." # make the apply-self option always the first one, give it key 0 kwargs["action_target"] = caller - options = [ - { - "key": "0", - "desc": "(yourself)", - "goto": (_register_action, kwargs) - } - ] + options = [{"key": "0", "desc": "(yourself)", "goto": (_register_action, kwargs)}] # filter out ourselves and then make options for everyone else combatants = [combatant for combatant in combat.combatants if combatant is not caller] - for combatant in combatants: - # automatic menu numbering starts from 1 + for inum, combatant in enumerate(combatants): kwargs["action_target"] = combatant options.append( - { - "desc": combatant.key, - "goto": (_register_action, kwargs) - } + {"key": str(inum + 1), "desc": combatant.key, "goto": (_register_action, kwargs)} ) # add ability to cancel - options.append( - { - "key": "_default", - "desc": "(No input to Abort and go back)", - "goto": "node_select_action" - } - ) + options.append({"key": "_default", "goto": "node_select_action"}) return text, options @@ -981,8 +984,10 @@ def node_select_wield_from_inventory(caller, raw_string, **kwargs): """ combat = caller.ndb._evmenu.combathandler loadout = caller.inventory.display_loadout() - text = (f"{loadout}\nSelect weapon, spell or shield to draw. It will swap out " - "anything already in the same hand (you can't change armor or helmet in combat).") + text = ( + f"{loadout}\nSelect weapon, spell or shield to draw. It will swap out " + "anything already in the same hand (you can't change armor or helmet in combat)." + ) # get a list of all suitable weapons/spells/shields options = [] @@ -997,21 +1002,12 @@ def node_select_wield_from_inventory(caller, raw_string, **kwargs): ) else: # normally working item - kwargs['action_args'] = (obj,) - options.append( - { - "desc": str(obj), - "goto": (_register_action, kwargs) - } - ) + kwargs["action_args"] = (obj,) + options.append({"desc": str(obj), "goto": (_register_action, kwargs)}) # add ability to cancel options.append( - { - "key": "_default", - "desc": "(No input to Abort and go back)", - "goto": "node_select_action" - } + {"key": "_default", "desc": "(No input to Abort and go back)", "goto": "node_select_action"} ) return text, options @@ -1038,21 +1034,12 @@ def node_select_use_item_from_inventory(caller, raw_string, **kwargs): ) else: # normally working item - kwargs['action_args'] = (obj,) - options.append( - { - "desc": str(obj), - "goto": (_register_action, kwargs) - } - ) + kwargs["action_args"] = (obj,) + options.append({"desc": str(obj), "goto": (_register_action, kwargs)}) # add ability to cancel options.append( - { - "key": "_default", - "desc": "(No input to Abort and go back)", - "goto": "node_select_action" - } + {"key": "_default", "desc": "(No input to Abort and go back)", "goto": "node_select_action"} ) return text, options @@ -1063,8 +1050,8 @@ def _action_unavailable(caller, raw_string, **kwargs): Selecting an unavailable action. """ - action_key = kwargs.get["action_key"] - caller.msg(f"Action '{action_key}' is currently not available.") + action_key = kwargs["action_key"] + caller.msg(f"|rAction |w{action_key}|r is currently not available.|n") # go back to previous node return @@ -1093,12 +1080,7 @@ def node_select_action(caller, raw_string, **kwargs): { "key": key, "desc": desc, - "goto": ( - _action_unavailable, - { - "action_key": action.key - } - ) + "goto": (_action_unavailable, {"action_key": action.key}), } ) elif action.next_menu_node is None: @@ -1113,7 +1095,7 @@ def node_select_action(caller, raw_string, **kwargs): { "action_key": action.key, "action_args": (), - "action_kwargs": kwargs, + "action_kwargs": {}, "action_target": None, }, ), @@ -1130,7 +1112,8 @@ def node_select_action(caller, raw_string, **kwargs): { "action_key": action.key, "action_args": (), - "action_kwargs": kwargs, + "action_kwargs": {}, + "action_target": None, }, ), } @@ -1139,8 +1122,7 @@ def node_select_action(caller, raw_string, **kwargs): options.append( { "key": "_default", - "desc": "(No input to Abort and go back)", - "goto": "node_select_action" + "goto": "node_select_action", } ) @@ -1160,7 +1142,7 @@ def node_wait_turn(caller, raw_string, **kwargs): options = { "key": "_default", "desc": "(next round will start automatically)", - "goto": "node_wait_turn" + "goto": "node_wait_turn", } return text, options @@ -1177,7 +1159,7 @@ def node_wait_start(caller, raw_string, **kwargs): options = { "key": "_default", "desc": "(combat will start automatically)", - "goto": "node_wait_start" + "goto": "node_wait_start", } return text, options @@ -1218,10 +1200,13 @@ def join_combat(caller, *targets, session=None): combathandler = location.scripts.add(EvAdventureCombatHandler, autostart=False) created = True + if not hasattr(caller, "hp"): + raise CombatFailure("You have no hp and so can't attack anyone.") + # it's safe to add a combatant to the same combat more than once combathandler.add_combatant(caller, session=session) for target in targets: - combathandler.add_combatant(target, session=session) + combathandler.add_combatant(target) if created: combathandler.start_combat() diff --git a/evennia/contrib/tutorials/evadventure/commands.py b/evennia/contrib/tutorials/evadventure/commands.py index affde6daf6..8d0cdb4f04 100644 --- a/evennia/contrib/tutorials/evadventure/commands.py +++ b/evennia/contrib/tutorials/evadventure/commands.py @@ -1,11 +1,11 @@ """ -EvAdventure commands and cmdsets. - +nextEvAdventure commands and cmdsets. """ from evennia import Command, default_cmds -from . combat_turnbased import join_combat + +from .combat_turnbased import CombatFailure, join_combat class EvAdventureCommand(Command): @@ -17,6 +17,7 @@ class EvAdventureCommand(Command): where whitespace around the argument(s) are stripped. """ + def parse(self): self.args = self.args.strip() @@ -38,6 +39,9 @@ class CmdAttackTurnBased(EvAdventureCommand): """ + key = "attack" + aliases = ("hit",) + def parse(self): super().parse() self.targets = [name.strip() for name in self.args.split(",")] @@ -49,10 +53,15 @@ class CmdAttackTurnBased(EvAdventureCommand): target_objs = [] for target in self.targets: target_obj = self.caller.search(target) - if target_obj: + if not target_obj: # show a warning but don't abort continue target_objs.append(target_obj) if target_objs: - join_combat(self.caller, *target_objs, session=self.session) + try: + join_combat(self.caller, *target_objs, session=self.session) + except CombatFailure as err: + self.caller.msg(f"|r{err}|n") + else: + self.caller.msg("|rFound noone to attack.|n") diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index 008c8aa299..df4fcb63e6 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -3,15 +3,72 @@ EvAdventure NPCs. This includes both friends and enemies, only separated by thei """ -from .characters import EvAdventureCharacter +from evennia import DefaultCharacter +from evennia.typeclasses.attributes import AttributeProperty -class EvAdventureNPC(EvAdventureCharacter): +from .characters import LivingMixin + + +class EvAdventureNPC(LivingMixin, DefaultCharacter): """ - Base typeclass for NPCs. They have the features of a Character except - they have tooling for AI and for acting as quest-gives and shop-keepers. + This is the base class for all non-player entities, including monsters. These + generally don't advance in level but uses a simplified, abstract measure of how + dangerous or competent they are - the 'hit dice' (HD). + + HD indicates how much health they have and how hard they hit. In _Knave_, HD also + defaults to being the bonus for all abilities. HP is 4 x Hit die (this can then be + customized per-entity of course). + + Morale is set explicitly per-NPC, usually between 7 and 9. + + Monsters don't use equipment in the way PCs do, instead they have a fixed armor + value, and their Abilities are dynamically generated from the HD (hit_dice). + + If wanting monsters or NPCs that can level and work the same as PCs, base them off the + EvAdventureCharacter class instead. """ + hit_dice = AttributeProperty(default=1) + armor = AttributeProperty(default=11) + morale = AttributeProperty(default=9) + hp = AttributeProperty(default=8) + + @property + def strength(self): + return self.hit_dice + + @property + def dexterity(self): + return self.hit_dice + + @property + def constitution(self): + return self.hit_dice + + @property + def intelligence(self): + return self.hit_dice + + @property + def wisdom(self): + return self.hit_dice + + @property + def charisma(self): + return self.hit_dice + + @property + def hp_max(self): + return self.hit_dice * 4 + + def at_object_creation(self): + """ + Start with max health. + + """ + self.hp = self.hp_max + class EvAdventureShopKeeper(EvAdventureNPC): """ diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index f1f532c282..c35bbd0d90 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -10,7 +10,7 @@ Tags. from evennia.objects.objects import DefaultObject from evennia.typeclasses.attributes import AttributeProperty -from .enums import WieldLocation, Ability +from .enums import Ability, WieldLocation class EvAdventureObject(DefaultObject): @@ -44,6 +44,7 @@ class EvAdventureObjectFiller(EvAdventureObject): meaning it's unusable. """ + quality = AttributeProperty(0) @@ -53,6 +54,7 @@ class EvAdventureConsumable(EvAdventureObject): have a limited usage in this way. """ + inventory_use_slot = AttributeProperty(WieldLocation.BACKPACK) size = AttributeProperty(0.25) uses = AttributeProperty(1) @@ -91,6 +93,7 @@ class EvAdventureRunestone(EvAdventureWeapon): they are quite powerful (and scales with caster level). """ + inventory_use_slot = AttributeProperty(WieldLocation.TWO_HANDS) attack_type = AttributeProperty(Ability.INT) diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 595e572c06..1a4c06f612 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -23,14 +23,13 @@ This module presents several singletons to import """ from random import randint + from evennia.utils.evform import EvForm from evennia.utils.evtable import EvTable -from .enums import Ability -from .random_tables import ( - character_generation as chargen_table, - death_and_dismemberment as death_table, -) +from .enums import Ability +from .random_tables import character_generation as chargen_table +from .random_tables import death_and_dismemberment as death_table # Basic rolls diff --git a/evennia/contrib/tutorials/evadventure/tests/mixins.py b/evennia/contrib/tutorials/evadventure/tests/mixins.py index 7a23d27eb2..1bc4da2cde 100644 --- a/evennia/contrib/tutorials/evadventure/tests/mixins.py +++ b/evennia/contrib/tutorials/evadventure/tests/mixins.py @@ -19,8 +19,9 @@ class EvAdventureMixin: def setUp(self): super().setUp() self.location = create.create_object(EvAdventureRoom, key="testroom") - self.character = create.create_object(EvAdventureCharacter, key="testchar", - location=self.location) + self.character = create.create_object( + EvAdventureCharacter, key="testchar", location=self.location + ) self.helmet = create.create_object( EvAdventureObject, key="helmet", diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index 195c6222a5..bbba30890a 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -16,6 +16,7 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): Test the turn-based combat-handler implementation. """ + maxDiff = None @patch( @@ -52,10 +53,7 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): self.combathandler.register_action(self.combatant, action.key) - self.assertEqual( - self.combathandler.action_queue[self.combatant], - (action, (), {}) - ) + self.assertEqual(self.combathandler.action_queue[self.combatant], (action, (), {})) action.use = MagicMock() diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 89935982f7..9d7d6488db 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -13,7 +13,6 @@ from collections import defaultdict import inflect from django.conf import settings from django.utils.translation import gettext as _ - from evennia.commands import cmdset from evennia.commands.cmdsethandler import CmdSetHandler from evennia.objects.manager import ObjectManager @@ -22,15 +21,9 @@ from evennia.scripts.scripthandler import ScriptHandler from evennia.typeclasses.attributes import ModelAttributeBackend, NickHandler from evennia.typeclasses.models import TypeclassBase from evennia.utils import ansi, create, funcparser, logger, search -from evennia.utils.utils import ( - class_from_module, - is_iter, - lazy_property, - list_to_string, - make_iter, - to_str, - variable_from_module, -) +from evennia.utils.utils import (class_from_module, is_iter, lazy_property, + list_to_string, make_iter, to_str, + variable_from_module) _INFLECT = inflect.engine() _MULTISESSION_MODE = settings.MULTISESSION_MODE diff --git a/evennia/objects/tests.py b/evennia/objects/tests.py index a718d9b01b..012a9276a9 100644 --- a/evennia/objects/tests.py +++ b/evennia/objects/tests.py @@ -1,10 +1,11 @@ -from evennia.utils.test_resources import BaseEvenniaTest, EvenniaTestCase -from evennia import DefaultObject, DefaultCharacter, DefaultRoom, DefaultExit -from evennia.typeclasses.attributes import AttributeProperty -from evennia.typeclasses.tags import TagProperty, AliasProperty, PermissionProperty +from evennia import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom from evennia.objects.models import ObjectDB from evennia.objects.objects import DefaultObject +from evennia.typeclasses.attributes import AttributeProperty +from evennia.typeclasses.tags import (AliasProperty, PermissionProperty, + TagProperty) from evennia.utils import create +from evennia.utils.test_resources import BaseEvenniaTest, EvenniaTestCase class DefaultObjectTest(BaseEvenniaTest): diff --git a/evennia/scripts/scripthandler.py b/evennia/scripts/scripthandler.py index 905a1b952f..2c3e2fc78a 100644 --- a/evennia/scripts/scripthandler.py +++ b/evennia/scripts/scripthandler.py @@ -126,7 +126,7 @@ class ScriptHandler(object): """ return ScriptDB.objects.get_all_scripts_on_obj(self.obj, key=key) - def delete(self, key=None): + def remove(self, key=None): """ Forcibly delete a script from this object. @@ -149,7 +149,8 @@ class ScriptHandler(object): num += 1 return num - # alias to delete + # legacy aliases to remove + delete = remove stop = delete def all(self): diff --git a/evennia/scripts/scripts.py b/evennia/scripts/scripts.py index aac89ce719..7abd589c34 100644 --- a/evennia/scripts/scripts.py +++ b/evennia/scripts/scripts.py @@ -5,13 +5,13 @@ ability to run timers. """ +from django.utils.translation import gettext as _ +from evennia.scripts.manager import ScriptManager +from evennia.scripts.models import ScriptDB +from evennia.typeclasses.models import TypeclassBase +from evennia.utils import create, logger from twisted.internet.defer import Deferred, maybeDeferred from twisted.internet.task import LoopingCall -from django.utils.translation import gettext as _ -from evennia.typeclasses.models import TypeclassBase -from evennia.scripts.models import ScriptDB -from evennia.scripts.manager import ScriptManager -from evennia.utils import create, logger __all__ = ["DefaultScript", "DoNothing", "Store"] @@ -366,7 +366,11 @@ class ScriptBase(ScriptDB, metaclass=TypeclassBase): return # call hook - self.at_repeat() + try: + self.at_repeat() + except Exception: + logger.log_trace() + raise # check repeats if self.ndb._task: From 1729a1cfff9779ab8927d54d811c684f50a6222f Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 13 Jul 2022 23:59:41 +0200 Subject: [PATCH 039/177] Turnbased combat fixes --- .../tutorials/evadventure/combat_turnbased.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 52eff1417a..967015e947 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -203,7 +203,7 @@ class CombatAction: if available, should describe what the action does. """ - return True if self.uses is None else self.uses < (self.max_uses or 0) + return True if self.max_uses is None else self.uses < (self.max_uses or 0) def pre_use(self, *args, **kwargs): pass @@ -939,7 +939,6 @@ def _register_action(caller, raw_string, **kwargs): action_kwargs = kwargs["action_kwargs"] action_target = kwargs.pop("action_target", None) combat_handler = caller.ndb._evmenu.combathandler - print("action_args", action_args, "action_kwargs", action_kwargs) combat_handler.register_action(caller, action_key, action_target, *action_args, **action_kwargs) # move into waiting @@ -953,7 +952,8 @@ def node_select_target(caller, raw_string, **kwargs): """ combat = caller.ndb._evmenu.combathandler - text = "Select target for |w{action_key}|n." + action_key = kwargs["action_key"] + text = f"Select target for |w{action_key}|n." # make the apply-self option always the first one, give it key 0 kwargs["action_target"] = caller @@ -1078,7 +1078,7 @@ def node_select_action(caller, raw_string, **kwargs): options.append( { - "key": key, + "key": (key,) + tuple(action.aliases), "desc": desc, "goto": (_action_unavailable, {"action_key": action.key}), } @@ -1088,7 +1088,7 @@ def node_select_action(caller, raw_string, **kwargs): # the action immediately options.append( { - "key": key, + "key": (key,) + tuple(action.aliases), "desc": desc, "goto": ( _register_action, @@ -1105,7 +1105,7 @@ def node_select_action(caller, raw_string, **kwargs): # action is available and next_menu_node is set to point to the next node we want options.append( { - "key": key, + "key": (key,) + tuple(action.aliases), "desc": desc, "goto": ( action.next_menu_node, From 20019591818ec7a2239a73ed427c1e69dff48ec1 Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 14 Jul 2022 12:49:17 +0200 Subject: [PATCH 040/177] Add check for deserialization --- evennia/contrib/tutorials/evadventure/combat_turnbased.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 967015e947..ddb313c72d 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -179,8 +179,9 @@ class CombatAction: The `__serialize_dbobjs__` and `__deserialize_dbobjs__` methods form a required pair. """ - self.combathandler = dbserialize.dbunserialize(self.combathandler) - self.combatant = dbserialize.dbunserialize(self.combatant) + if isinstance(self.combathandler, bytes): + self.combathandler = dbserialize.dbunserialize(self.combathandler) + self.combatant = dbserialize.dbunserialize(self.combatant) def get_help(self, *args, **kwargs): """ From 02b991c2d53c8fee1e02a08960a8a13a7119008c Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 14 Jul 2022 20:29:09 +0200 Subject: [PATCH 041/177] First working attack in tutorial combat system --- .../tutorials/evadventure/characters.py | 55 ++-- .../tutorials/evadventure/combat_turnbased.py | 240 +++++++++++------- evennia/contrib/tutorials/evadventure/npcs.py | 8 + .../contrib/tutorials/evadventure/objects.py | 14 + .../contrib/tutorials/evadventure/rules.py | 44 +++- evennia/objects/objects.py | 28 +- 6 files changed, 260 insertions(+), 129 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 36e3933c52..2f0dce2bef 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -9,7 +9,7 @@ from evennia.utils.utils import int2str, lazy_property from . import rules from .enums import Ability, WieldLocation -from .objects import EvAdventureObject +from .objects import EvAdventureObject, WeaponEmptyHand class EquipmentError(TypeError): @@ -134,7 +134,7 @@ class EquipmentHandler: @property def weapon(self): """ - Conveniently get the currently active weapon. + Conveniently get the currently active weapon or rune stone. Returns: obj or None: The weapon. None if unarmored. @@ -146,6 +146,8 @@ class EquipmentHandler: weapon = slots[WieldLocation.TWO_HANDS] if not weapon: weapon = slots[WieldLocation.WEAPON_HAND] + if not weapon: + weapon = WeaponEmptyHand() return weapon def display_loadout(self): @@ -370,6 +372,13 @@ class LivingMixin: else: self.msg(f"|g{healer.key} heals you for {healed} health.|n") + def at_damage(self, damage, attacker=None): + """ + Called when attacked and taking damage. + + """ + pass + class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ @@ -401,23 +410,6 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """Allows to access equipment like char.equipment.worn""" return EquipmentHandler(self) - @property - def weapon(self): - """ - Quick access to the character's currently wielded weapon. - - """ - self.equipment.weapon - - @property - def armor(self): - """ - Quick access to the character's current armor. - Will return the "Unarmored" armor level (11) if none other are found. - - """ - self.equipment.armor or 11 - def at_pre_object_receive(self, moved_object, source_location, **kwargs): """ Hook called by Evennia before moving an object here. Return False to abort move. @@ -467,21 +459,25 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ self.equipment.remove(moved_object) - def at_damage(self, dmg, attacker=None): + def at_defeat(self): """ - Called when receiving damage for whatever reason. This - is called *before* hp is evaluated for defeat/death. + This happens when character drops <= 0 HP. For Characters, this means rolling on + the death table. """ + rules.dice.roll_death(self) + if hp <= 0: + # this means we rolled death on the table + self.handle_death() + else: + # still alive, but lost in some stats + self.location.msg_contents( + f"|y$You() $conj(stagger) back, weakened but still alive.|n", from_obj=self + ) def defeat_message(self, attacker, dmg): - return f"After {attacker.key}'s attack, {self.key} collapses in a heap." - - def at_defeat(self, attacker, dmg): """ - At this point, character has been defeated but is not killed (their - hp >= 0 but they lost ability bonuses). Called after being defeated in combat or - other situation where health is lost below or equal to 0. + Sent out to everyone in the location by the combathandler. """ @@ -490,3 +486,6 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): Called when character dies. """ + self.location.msg_contents( + f"|r$You() $conj(collapse) in a heap. No getting back from that.|n", from_obj=self + ) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index ddb313c72d..e310757d13 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -104,7 +104,7 @@ from datetime import datetime from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty -from evennia.utils import dbserialize, delay, evmenu, evtable +from evennia.utils import dbserialize, delay, evmenu, evtable, logger from evennia.utils.utils import make_iter from . import rules @@ -121,6 +121,11 @@ class CombatFailure(RuntimeError): """ +# ----------------------------------------------------------------------------------- +# Combat Actions +# ----------------------------------------------------------------------------------- + + class CombatAction: """ This is the base of a combat-action, like 'attack' Inherit from this to make new actions. @@ -141,8 +146,6 @@ class CombatAction: # use None to do nothing (jump directly to registering the action) next_menu_node = "node_select_target" - # action to echo to everyone. - post_action_text = "{combatant} performed an action." max_uses = None # None for unlimited # in which order (highest first) to perform the action. If identical, use random order priority = 0 @@ -153,12 +156,15 @@ class CombatAction: self.uses = 0 def msg(self, message, broadcast=False): - if broadcast: - # send to everyone in combat. - self.combathandler.msg(message) - else: - # send only to the combatant. - self.combatant.msg(message) + """ + Convenience route to the combathandler msg-sender mechanism. + + Args: + message (str): Message to send; use `$You()` and `$You(other.key)` + to refer to the combatant doing the action and other combatants, + respectively. + """ + self.combathandler.msg(message, combatant=self.combatant, broadcast=broadcast) def __serialize_dbobjs__(self): """ @@ -207,14 +213,26 @@ class CombatAction: return True if self.max_uses is None else self.uses < (self.max_uses or 0) def pre_use(self, *args, **kwargs): + """ + Called just before the main action. + + """ + pass def use(self, *args, **kwargs): + """ + Main activation of the action. This happens simultaneously to other actions. + + """ pass def post_use(self, *args, **kwargs): - self.uses += 1 - self.combathandler.msg(self.post_action_text.format(**kwargs)) + """ + Called just after the action has been taken. + + """ + pass class CombatActionAttack(CombatAction): @@ -237,27 +255,53 @@ class CombatActionAttack(CombatAction): """ attacker = self.combatant + weapon = self.combatant.equipment.weapon # figure out advantage (gained by previous stunts) advantage = bool(self.combathandler.advantage_matrix[attacker].pop(defender, False)) - # figure out disadvantage (gained by enemy stunts/actions) disadvantage = bool(self.combathandler.disadvantage_matrix[attacker].pop(defender, False)) - is_hit, quality = rules.dice.opposed_saving_throw( + is_hit, quality, txt = rules.dice.opposed_saving_throw( attacker, defender, - attack_type=attacker.weapon.attack_type, - defense_type=attacker.weapon.defense_type, + attack_type=weapon.attack_type, + defense_type=attacker.equipment.weapon.defense_type, advantage=advantage, disadvantage=disadvantage, ) + self.msg(f"$You() $conj(attack) $You({defender.key}) with {weapon.key}: {txt}") if is_hit: - self.combathandler.resolve_damage( - attacker, defender, critical=quality == "critical success" - ) + # enemy hit, calculate damage + weapon_dmg_roll = attacker.equipment.weapon.damage_roll - # TODO messaging here + dmg = rules.dice.roll(weapon_dmg_roll) + + if quality is Ability.CRITICAL_SUCCESS: + dmg += rules.dice.roll(weapon_dmg_roll) + message = ( + f" $You() |ycritically|n $conj(hit) $You({defender.key}) for |r{dmg}|n damage!" + ) + else: + message = f" $You() $conj(hit) $You({defender.key}) for |r{dmg}|n damage!" + self.msg(message) + + defender.hp -= dmg + + # call hook + defender.at_damage(dmg, attacker=attacker) + + # note that we mustn't remove anyone from combat yet, because this is + # happening simultaneously. So checking of the final hp + # and rolling of death etc happens in the combathandler at the end of the turn. + + else: + # a miss + message = f" $You() $conj(miss) $You({defender.key})." + if quality is Ability.CRITICAL_FAILURE: + attacker.equipment.weapon.quality -= 1 + message += ".. it's a |rcritical miss!|n, damaging the weapon." + self.msg(message) class CombatActionStunt(CombatAction): @@ -299,7 +343,7 @@ class CombatActionStunt(CombatAction): attacker = self.combatant advantage, disadvantage = False, False - is_success, _ = rules.dice.opposed_saving_throw( + is_success, _, txt = rules.dice.opposed_saving_throw( attacker, defender, attack_type=self.attack_type, @@ -307,13 +351,13 @@ class CombatActionStunt(CombatAction): advantage=advantage, disadvantage=disadvantage, ) + self.msg(f"$You() $conj(attempt) stunt on $You(defender.key). {txt}") if is_success: if advantage: self.combathandler.gain_advantage(attacker, defender) else: self.combathandler.gain_disadvantage(defender, attacker) - self.msg # only spend a use after being successful self.uses += 1 @@ -376,11 +420,14 @@ class CombatActionFlee(CombatAction): "Disengage from combat. Use successfully two times in a row to leave combat at the " "end of the second round. If someone Blocks you successfully, this counter is reset." ) - priority = -5 # checked last def use(self, *args, **kwargs): # it's safe to do this twice + self.msg( + "$You() retreats, and will leave combat next round unless someone successfully " + "blocks them." + ) self.combathandler.flee(self.combatant) @@ -409,7 +456,7 @@ class CombatActionBlock(CombatAction): advantage = bool(self.advantage_matrix[combatant].pop(fleeing_target, False)) disadvantage = bool(self.disadvantage_matrix[combatant].pop(fleeing_target, False)) - is_success, _ = rules.dice.opposed_saving_throw( + is_success, _, txt = rules.dice.opposed_saving_throw( combatant, fleeing_target, attack_type=self.attack_type, @@ -417,12 +464,14 @@ class CombatActionBlock(CombatAction): advantage=advantage, disadvantage=disadvantage, ) + self.msg(f"$You() tries to block the retreat of $You({fleeing_target.key}). {txt}") if is_success: # managed to stop the target from fleeing/disengaging self.combatant.unflee(fleeing_target) + self.msg("$You() blocks the retreat of $You({fleeing_target.key})") else: - pass # they are getting away! + self.msg("$You({fleeing_target.key}) dodges away from you $You()!") class CombatActionSwapWieldedWeaponOrSpell(CombatAction): @@ -450,8 +499,6 @@ class CombatActionSwapWieldedWeaponOrSpell(CombatAction): next_menu_node = "node_select_wield_from_inventory" - post_action_text = "{combatant} switches weapons." - def use(self, combatant, item, *args, **kwargs): # this will make use of the item combatant.inventory.use(item) @@ -470,10 +517,9 @@ class CombatActionUseItem(CombatAction): next_menu_node = "node_select_use_item_from_inventory" - post_action_text = "{combatant} used an item." - def use(self, combatant, item, *args, **kwargs): item.use(combatant, *args, **kwargs) + self.msg("$You() $conj(use) an item.") class CombatActionDoNothing(CombatAction): @@ -492,6 +538,14 @@ class CombatActionDoNothing(CombatAction): post_action_text = "{combatant} does nothing this turn." + def use(self, *args, **kwargs): + self.msg("$You() $conj(hesitate), accomplishing nothing.") + + +# ----------------------------------------------------------------------------------- +# Combat handler +# ----------------------------------------------------------------------------------- + class EvAdventureCombatHandler(DefaultScript): """ @@ -618,6 +672,8 @@ class EvAdventureCombatHandler(DefaultScript): self.interval - warning_time, self._warn_time, warning_time ) + self.msg(f"|y_______________________ start turn {self.turn} ___________________________|n") + for combatant in self.combatants: # cycle combat menu self._init_menu(combatant) @@ -628,10 +684,15 @@ class EvAdventureCombatHandler(DefaultScript): End of turn operations. 1. Do all regular actions + 2. Roll for any death events 2. Remove combatants that disengaged successfully 3. Timeout advantages/disadvantages """ + self.msg( + f"|y__________________ turn resolution (turn {self.turn}) ____________________|n\n" + ) + # do all actions for combatant in self.combatants: # read the current action type selected by the player @@ -639,7 +700,16 @@ class EvAdventureCombatHandler(DefaultScript): combatant, (CombatActionDoNothing(self, combatant), (), {}) ) # perform the action on the CombatAction instance - action.use(*args, **kwargs) + try: + action.pre_use(*args, **kwargs) + action.use(*args, **kwargs) + action.post_use(*args, **kwargs) + except Exception as err: + combatant.msg( + f"An error ({err}) occurred when performing this action.\n" + "Please report the problem to an admin." + ) + logger.log_trace() # handle disengaging combatants @@ -647,14 +717,37 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in self.combatants: # check disengaging combatants (these are combatants that managed - # to stay at disengaging distance for a turn) + # not get their escape blocked last turn if combatant in self.fleeing_combatants: self.fleeing_combatants.remove(combatant) + if combatant.hp <= 0: + # characters roll on the death table here, npcs usually just die + combatant.at_defeat() + + # tell everyone + self.msg(combatant.defeat_message(attacker, dmg), combatant=combatant) + + if defender.hp > 0: + # death roll didn't kill them - they are weakened, but with hp + self.msg( + "You are alive, but out of the fight. If you want to press your luck, " + "you need to rejoin the combat.", + combatant=combatant, + broadcast=False, + ) + defender.at_defeat() # note - NPC monsters may still 'die' here + else: + # outright killed + defender.at_death() + + # no matter the result, the combatant is out + to_remove.append(combatant) + for combatant in to_remove: # for clarity, we remove here rather than modifying the combatant list # inside the previous loop - self.msg(f"{combatant.key} disengaged and left combat.") + self.msg(f"|y$You() $conj(are) out of combat.|n", combatant=combatant) self.remove_combatant(combatant) # refresh stunt timeouts (note - self.stunt_duration is the same for @@ -788,7 +881,7 @@ class EvAdventureCombatHandler(DefaultScript): if comb is combatant: continue - name = combatant.key + name = comb.key health = f"{comb.hurt_level}" fleeing = "" if comb in self.fleeing_combatants: @@ -798,24 +891,37 @@ class EvAdventureCombatHandler(DefaultScript): return str(table) - def msg(self, message, targets=None): + def msg(self, message, combatant=None, broadcast=True): """ Central place for sending messages to combatants. This allows for adding any combat-specific text-decoration in one place. Args: message (str): The message to send. - targets (Object or list, optional): Sends message only to - one or more particular combatants. If unset, send to - everyone in the combat. + combatant (Object): The 'You' in the message, if any. + broadcast (bool): If `False`, `combatant` must be included and + will be the only one to see the message. If `True`, send to + everyone in the location. + + Notes: + If `combatant` is given, use `$You/you()` markup to create + a message that looks different depending on who sees it. Use + `$You(combatant_key)` to refer to other combatants. """ - if targets: - for target in make_iter(targets): - target.msg(message) - else: - for target in self.combatants: - target.msg(message) + location = self.obj + location_objs = location.contents + + exclude = [] + if not broadcast and combatant: + exclude = [obj for obj in location_objs if obj is not combatant] + + location.msg_contents( + message, + exclude=exclude, + from_obj=combatant, + mapping={locobj.key: locobj for locobj in location_objs}, + ) def gain_advantage(self, combatant, target): """ @@ -839,48 +945,6 @@ class EvAdventureCombatHandler(DefaultScript): if combatant in self.fleeing_combatants: self.fleeing_combatants.remove(combatant) - def resolve_damage(self, attacker, defender, critical=False): - """ - Apply damage to defender. On a critical hit, the damage die - is rolled twice. - - """ - weapon_dmg_roll = attacker.weapon.damage_roll - - dmg = rules.dice.roll(weapon_dmg_roll) - if critical: - dmg += rules.dice.roll(weapon_dmg_roll) - - defender.hp -= dmg - - # call hook - defender.at_damage(dmg, attacker=attacker) - - if defender.hp <= 0: - # roll on death table. This may or may not kill you - rules.dice.roll_death(self) - - # tell everyone - self.msg(defender.defeat_message(attacker, dmg)) - - if defender.hp > 0: - # they are weakened, but with hp - self.msg( - "You are alive, but out of the fight. If you want to press your luck, " - "you need to rejoin the combat.", - targets=defender, - ) - defender.at_defeat() # note - NPC monsters may still 'die' here - else: - # outright killed - defender.at_death() - - # no matter the result, the combatant is out - self.remove_combatant(defender) - else: - # defender still alive - self.msg(defender) - def register_action(self, combatant, action_key, *args, **kwargs): """ Register an action based on its `.key`. @@ -927,7 +991,9 @@ class EvAdventureCombatHandler(DefaultScript): return list(self.combatant_actions[combatant].values()) -# ------------ start combat menu definitions +# ----------------------------------------------------------------------------------- +# Combat Menu definitions +# ----------------------------------------------------------------------------------- def _register_action(caller, raw_string, **kwargs): @@ -1165,7 +1231,9 @@ def node_wait_start(caller, raw_string, **kwargs): return text, options -# -------------- end of combat menu definitions +# ----------------------------------------------------------------------------------- +# Access function +# ----------------------------------------------------------------------------------- def join_combat(caller, *targets, session=None): diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index df4fcb63e6..6b109187b5 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -69,6 +69,14 @@ class EvAdventureNPC(LivingMixin, DefaultCharacter): """ self.hp = self.hp_max + def ai_combat_next_action(self): + """ + The combat engine should ask this method in order to + get the next action the npc should perform in combat. + + """ + pass + class EvAdventureShopKeeper(EvAdventureNPC): """ diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index c35bbd0d90..3b9caf1d6c 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -85,6 +85,20 @@ class EvAdventureWeapon(EvAdventureObject): damage_roll = AttributeProperty("1d6") +class WeaponEmptyHand: + """ + This is used when you wield no weapons. We won't create any db-object for it. + + """ + + key = "Empty Fists" + inventory_use_slot = WieldLocation.WEAPON_HAND + attack_type = Ability.STR + defense_type = Ability.ARMOR + damage_roll = "1d4" + quality = 100000 # let's assume fists are always available ... + + class EvAdventureRunestone(EvAdventureWeapon): """ Base class for magic runestones. In _Knave_, every spell is represented by a rune stone diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 1a4c06f612..f9e6a05efe 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -81,7 +81,7 @@ class EvAdventureRollEngine: if 0 < diesize > max_diesize: raise TypeError(f"Invalid die-size used (must be between 1 and {max_diesize} sides)") - # At this point we know we have valid input - roll and all dice together + # At this point we know we have valid input - roll and add dice together return sum(randint(1, diesize) for _ in range(number)) def roll_with_advantage_or_disadvantage(self, advantage=False, disadvantage=False): @@ -98,7 +98,7 @@ class EvAdventureRollEngine: """ if not (advantage or disadvantage) or (advantage and disadvantage): - # normal roll + # normal roll, or advantage cancels disadvantage return self.roll("1d20") elif advantage: return max(self.roll("1d20"), self.roll("1d20")) @@ -129,9 +129,10 @@ class EvAdventureRollEngine: modifier (int, optional): An additional +/- modifier to the roll. Returns: - tuple: (bool, str): If the save was passed or not. The second element is the - quality of the roll - None (normal), "critical fail" and "critical success". - + tuple: A tuple `(bool, str, str)`. The bool indicates if the save was passed or not. + The second element is the quality of the roll - None (normal), + "critical fail" and "critical success". Last element is a text detailing + the roll, for display purposes. Notes: Advantage and disadvantage cancel each other out. @@ -147,7 +148,25 @@ class EvAdventureRollEngine: quality = Ability.CRITICAL_SUCCESS else: quality = None - return (dice_roll + bonus + modifier) > target, quality + result = dice_roll + bonus + modifier > target + + # determine text output + rolltxt = "d20 " + if advantage and disadvantage: + rolltxt = "d20 (advantage canceled by disadvantage)" + elif advantage: + rolltxt = "|g2d20|n (advantage: picking highest) " + elif disadvantage: + rolltxt = "|r2d20|n (disadvantage: picking lowest) " + bontxt = f"(+{bonus})" + modtxt = "" + if modifier: + modtxt = f" + {modifier}" if modifier > 0 else f" - {abs(modifier)}" + qualtxt = f" ({quality.value}!)" if quality else "" + + txt = f"{dice_roll} + {bonus_type.value}{bontxt}{modtxt} -> |w{result}{qualtxt}|n" + + return (dice_roll + bonus + modifier) > target, quality, txt def opposed_saving_throw( self, @@ -174,14 +193,16 @@ class EvAdventureRollEngine: modifier (int): An additional +/- modifier to the roll. Returns: - tuple: (bool, str): If the attack succeed or not. The second element is the - quality of the roll - None (normal), "critical fail" and "critical success". + tuple: (bool, str, str): If the attack succeed or not. The second element is the + quality of the roll - None (normal), "critical fail" and "critical success". Last + element is a text that summarizes the details of the roll. Notes: Advantage and disadvantage cancel each other out. """ - defender_defense = getattr(defender, defense_type.value, 1) + 10 - return self.saving_throw( + + defender_defense = getattr(defender, defense_type.value, 1) + result, quality, txt = self.saving_throw( attacker, bonus_type=attack_type, target=defender_defense, @@ -189,6 +210,9 @@ class EvAdventureRollEngine: disadvantage=disadvantage, modifier=modifier, ) + txt = f"Roll vs {defense_type.value}({defender_defense}):\n{txt}" + + return result, quality, txt def roll_random_table(self, dieroll, table_choices): """ diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 9d7d6488db..21853e42e0 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -21,9 +21,15 @@ from evennia.scripts.scripthandler import ScriptHandler from evennia.typeclasses.attributes import ModelAttributeBackend, NickHandler from evennia.typeclasses.models import TypeclassBase from evennia.utils import ansi, create, funcparser, logger, search -from evennia.utils.utils import (class_from_module, is_iter, lazy_property, - list_to_string, make_iter, to_str, - variable_from_module) +from evennia.utils.utils import ( + class_from_module, + is_iter, + lazy_property, + list_to_string, + make_iter, + to_str, + variable_from_module, +) _INFLECT = inflect.engine() _MULTISESSION_MODE = settings.MULTISESSION_MODE @@ -714,7 +720,15 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): for obj in contents: func(obj, **kwargs) - def msg_contents(self, text=None, exclude=None, from_obj=None, mapping=None, **kwargs): + def msg_contents( + self, + text=None, + exclude=None, + from_obj=None, + mapping=None, + raise_funcparse_errors=False, + **kwargs, + ): """ Emits a message to all objects inside this object. @@ -738,6 +752,10 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): in the `text` string. If `` doesn't have a `get_display_name` method, it will be returned as a string. If not set, a key `you` will be auto-added to point to `from_obj` if given, otherwise to `self`. + raise_funcparse_errors (bool, optional): If set, a failing `$func()` will + lead to an outright error. If unset (default), the failing `$func()` + will instead appear in output unparsed. + **kwargs: Keyword arguments will be passed on to `obj.msg()` for all messaged objects. @@ -802,7 +820,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): # actor-stance replacements inmessage = _MSG_CONTENTS_PARSER.parse( inmessage, - raise_errors=True, + raise_errors=raise_funcparse_errors, return_string=True, caller=you, receiver=receiver, From d91cf1e792930259819f059df7edd1cb9e67c499 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 15 Jul 2022 01:50:16 +0200 Subject: [PATCH 042/177] Started expanding docs about tutorial game --- docs/source/Coding/Changelog.md | 6 + docs/source/Contribs/Contrib-Evadventure.md | 36 ++ docs/source/Contribs/Contribs-Overview.md | 15 + .../Part2/Beginner-Tutorial-Part2-Intro.md | 2 - .../Part2/Planning-Some-Useful-Contribs.md | 244 ----------- .../Part2/Planning-The-Tutorial-Game.md | 405 ++++++++++-------- .../Dungeon_Merchant_Camp.jpg | Bin 0 -> 2452889 bytes docs/source/api/evennia.contrib.tutorials.md | 1 + .../tutorials/evadventure/characters.py | 13 +- 9 files changed, 288 insertions(+), 434 deletions(-) create mode 100644 docs/source/Contribs/Contrib-Evadventure.md delete mode 100644 docs/source/Howtos/Beginner-Tutorial/Part2/Planning-Some-Useful-Contribs.md create mode 100644 docs/source/_static/images/starting_tutorial/Dungeon_Merchant_Camp.jpg diff --git a/docs/source/Coding/Changelog.md b/docs/source/Coding/Changelog.md index be0527668a..6feaed180f 100644 --- a/docs/source/Coding/Changelog.md +++ b/docs/source/Coding/Changelog.md @@ -160,14 +160,20 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 - Attribute storage support defaultdics (Hendher) - Add ObjectParent mixin to default game folder template as an easy, ready-made way to override features on all ObjectDB-inheriting objects easily. + source location, mimicking behavior of `at_pre_move` hook - returning False will abort move. - Add `TagProperty`, `AliasProperty` and `PermissionProperty` to assign these data in a similar way to django fields. +- New `at_pre_object_receive(obj, source_location)` method on Objects. Called on + destination, mimicking behavior of `at_pre_move` hook - returning False will abort move. +- New `at_pre_object_leave(obj, destination)` method on Objects. Called on - The db pickle-serializer now checks for methods `__serialize_dbobjs__` and `__deserialize_dbobjs__` to allow custom packing/unpacking of nested dbobjs, to allow storing in Attribute. - Optimizations to rpsystem contrib performance. Breaking change: `.get_sdesc()` will now return `None` instead of `.db.desc` if no sdesc is set; fallback in hook (inspectorCaracal) - Reworked text2html parser to avoid problems with stateful color tags (inspectorCaracal) - Simplified `EvMenu.options_formatter` hook to use `EvColumn` and f-strings (inspectorcaracal) +- Allow `# CODE`, `# HEADER` etc as well as `#CODE`/`#HEADER` in batchcode + files - this works better with black linting. ## Evennia 0.9.5 diff --git a/docs/source/Contribs/Contrib-Evadventure.md b/docs/source/Contribs/Contrib-Evadventure.md new file mode 100644 index 0000000000..edadac1c39 --- /dev/null +++ b/docs/source/Contribs/Contrib-Evadventure.md @@ -0,0 +1,36 @@ +# EvAdventure + +Contrib by Griatch 2022 + +A complete example MUD using Evennia. This is the final result of what is +implemented if you follow the Getting-Started tutorial. It's recommended +that you follow the tutorial step by step and write your own code. But if +you prefer you can also pick apart or use this as a starting point for your +own game. + +## Features + +- Uses a MUD-version of the [Knave](https://rpggeek.com/rpg/50827/knave) old-school + fantasy ruleset by Ben Milton (classless and overall compatible with early + edition D&D), released under the Creative Commons Attribution (all uses, + including commercial are allowed + as long as attribution is given). +- Character creation using an editable character sheet +- Weapons, effects, healing and resting +- Two alternative combat systems (turn-based and twitch based) +- Magic (three spells) +- NPC/mobs with simple AI. +- Simple Quest system. +- Small game world. +- Coded using best Evennia practices, with unit tests. + + +## Installation + +TODO + + +---- + +This document page is generated from `evennia/contrib/tutorials/evadventure/README.md`. Changes to this +file will be overwritten, so edit that file rather than this one. diff --git a/docs/source/Contribs/Contribs-Overview.md b/docs/source/Contribs/Contribs-Overview.md index a8138acfd3..5b004972c3 100644 --- a/docs/source/Contribs/Contribs-Overview.md +++ b/docs/source/Contribs/Contribs-Overview.md @@ -537,6 +537,7 @@ tutorials are found here. Also the home of the Tutorial World demo adventure._ Contrib-Batchprocessor.md Contrib-Bodyfunctions.md +Contrib-Evadventure.md Contrib-Mirror.md Contrib-Red-Button.md Contrib-Talking-Npc.md @@ -567,6 +568,20 @@ character make small verbal observations at irregular intervals. +### Contrib: `evadventure` + +_Contrib by Griatch 2022_ + +A complete example MUD using Evennia. This is the final result of what is +implemented if you follow the Getting-Started tutorial. It's recommended +that you follow the tutorial step by step and write your own code. But if +you prefer you can also pick apart or use this as a starting point for your +own game. + +[Read the documentation](./Contrib-Evadventure.md) - [Browse the Code](evennia.contrib.tutorials.evadventure) + + + ### Contrib: `mirror` _Contribution by Griatch, 2017_ diff --git a/docs/source/Howtos/Beginner-Tutorial/Part2/Beginner-Tutorial-Part2-Intro.md b/docs/source/Howtos/Beginner-Tutorial/Part2/Beginner-Tutorial-Part2-Intro.md index ddb06b2e8f..fc14f46a71 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part2/Beginner-Tutorial-Part2-Intro.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part2/Beginner-Tutorial-Part2-Intro.md @@ -31,7 +31,6 @@ and "what to think about" when creating a multiplayer online text game. Planning-Where-Do-I-Begin.md Game-Planning.md -Planning-Some-Useful-Contribs.md Planning-The-Tutorial-Game.md ``` @@ -41,6 +40,5 @@ Planning-The-Tutorial-Game.md Planning-Where-Do-I-Begin.md Game-Planning.md -Planning-Some-Useful-Contribs.md Planning-The-Tutorial-Game.md ``` diff --git a/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-Some-Useful-Contribs.md b/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-Some-Useful-Contribs.md deleted file mode 100644 index d8f78d01bc..0000000000 --- a/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-Some-Useful-Contribs.md +++ /dev/null @@ -1,244 +0,0 @@ -# Planning the use of some useful contribs - -Evennia is deliberately bare-bones out of the box. The idea is that you should be as unrestricted as possible -in designing your game. This is why you can easily replace the few defaults we have and why we don't try to -prescribe any major game systems on you. - -That said, Evennia _does_ offer some more game-opinionated _optional_ stuff. These are referred to as _Contribs_ -and is an ever-growing treasure trove of code snippets, concepts and even full systems you can pick and choose -from to use, tweak or take inspiration from when you make your game. - -The [Contrib overview](../../../Contribs/Contribs-Overview.md) page gives the full list of the current roster of contributions. On -this page we will review a few contribs we will make use of for our game. We will do the actual installation -of them when we start coding in the next part of this tutorial series. While we will introduce them here, you -are wise to read their doc-strings yourself for the details. - -This is the things we know we need: - -- A barter system -- Character generation -- Some concept of wearing armor -- The ability to roll dice -- Rooms with awareness of day, night and season -- Roleplaying with short-descs, poses and emotes -- Quests -- Combat (with players and against monsters) - -## Barter contrib - -[source](../../../api/evennia.contrib.game_systems.barter.md) - -Reviewing this contrib suggests that it allows for safe trading between two parties. The basic principle -is that the parties puts up the stuff they want to sell and the system will guarantee that these systems are -exactly what is being offered. Both sides can modify their offers (bartering) until both mark themselves happy -with the deal. Only then the deal is sealed and the objects are exchanged automatically. Interestingly, this -works just fine for money too - just put coin objects on one side of the transaction. - - Sue > trade Tom: Hi, I have a necklace to sell; wanna trade for a healing potion? - Tom > trade Sue: Hm, I could use a necklace ... - - Sue > offer necklace: This necklace is really worth it. - Tom > evaluate necklace: - - Tom > offer ration: I don't have a healing potion, but I'll trade you an iron ration! - Sue > Hey, this is a nice necklace, I need more than a ration for it... - Tom > offer ration, 10gold: Ok, a ration and 10 gold as well. - Sue > accept: Ok, that sounds fair! - Tom > accept: Good! Nice doing business with you. - - -Arguably, in a small game you are just fine to just talk to people and use `give` to do the exchange. The -barter system guarantees trading safety if you don't trust your counterpart to try to give you the wrong thing or -to run away with your money. - -We will use the barter contrib as an optional feature for player-player bartering. More importantly we can -add it for NPC shopkeepers and expand it with a little AI, which allows them to potentially trade in other -things than boring gold coin. - -## Clothing contrib - -[source](../../../api/evennia.contrib.game_systems.clothing.md) - -This contrib provides a full system primarily aimed at wearing clothes, but it could also work for armor. You wear -an object in a particular location and this will then be reflected in your character's description. You can -also add roleplaying flavor: - - > wear helmet slightly askew on her head - look self - Username is wearing a helmet slightly askew on her head. - -By default there are no 'body locations' in this contrib, we will need to expand on it a little to make it useful -for things like armor. It's a good contrib to build from though, so that's what we'll do. - -## Dice contrib - -[source](../../../api/evennia.contrib.rpg.dice.md) - -The dice contrib presents a general dice roller to use in game. - - > roll 2d6 - Roll(s): 2 and 5. Total result is 7. - > roll 1d100 + 2 - Roll(s): 43. Total result is 47 - > roll 1d20 > 12 - Roll(s): 7. Total result is 7. This is a failure (by 5) - > roll/hidden 1d20 > 12 - Roll(s): 18. Total result is 17. This is a success (by 6). (not echoed) - -The contrib also has a python function for producing these results in-code. However, while -we will emulate rolls for our rule system, we'll do this as simply as possible with Python's `random` -module. - -So while this contrib is fun to have around for GMs or for players who want to get a random result -or play a game, we will not need it for the core of our game. - -## Extended room contrib - -[source](../../../api/evennia.contrib.grid.extended_room.md) - -This is a custom Room typeclass that changes its description based on time of day and season. - -For example, at night, in wintertime you could show the room as being dark and frost-covered while in daylight -at summer it could describe a flowering meadow. The description can also contain special markers, so -` ... ` would include text only visible at morning. - -The extended room also supports _details_, which are things to "look at" in the room without there having -to be a separate database object created for it. For example, a player in a church may do `look window` and -get a description of the windows without there needing to be an actual `window` object in the room. - -Adding all those extra descriptions can be a lot of work, so they are optional; if not given the room works -like a normal room. - -The contrib is simple to add and provides a lot of optional flexibility, so we'll add it to our -game, why not! - -## RP-System contrib - -[source](../../../api/evennia.contrib.rpg.rpsystem.md) - -This contrib adds a full roleplaying subsystem to your game. It gives every character a "short-description" -(sdesc) that is what people will see when first meeting them. Let's say Tom has an sdesc "A tall man" and -Sue has the sdesc "A muscular, blonde woman" - - Tom > look - Tom: ... You see: A muscular, blonde woman - Tom > emote /me smiles to /muscular. - Tom: Tom smiles to A muscular, blonde woman. - Sue: A tall man smiles to Sue. - Tom > emote Leaning forward, /me says, "Well hello, what's yer name?" - Tom: Leaning forward, Tom says, "Well hello..." - Sue: Leaning forward, A tall man says, "Well hello, what's yer name?" - Sue > emote /me grins. "I'm Angelica", she says. - Sue: Sue grins. "I'm Angelica", she says. - Tom: A muscular, blonde woman grins. "I'm Angelica", she says. - Tom > recog muscular Angelica - Tom > emote /me nods to /angelica: "I have a message for you ..." - Tom: Tom nods to Angelica: "I have a message for you ..." - Sue: A tall man nods to Sue: "I have a message for you ..." - -Above, Sue introduces herself as "Angelica" and Tom uses this info to `recoc` her as "Angelica" hereafter. He -could have `recoc`-ed her with whatever name he liked - it's only for his own benefit. There is no separate -`say`, the spoken words are embedded in the emotes in quotes `"..."`. - -The RPSystem module also includes options for `poses`, which help to establish your position in the room -when others look at you. - - Tom > pose stands by the bar, looking bored. - Sue > look - Sue: ... A tall man stands by the bar, looking bored. - -You can also wear a mask to hide your identity; your sdesc will then be changed to the sdesc of the mask, -like `a person with a mask`. - -The RPSystem gives a lot of roleplaying power out of the box, so we will add it. There is also a separate -[rplanguage](../../../api/evennia.contrib.rpg.rpsystem.md) module that integrates with the spoken words in your emotes and garbles them if you don't understand -the language spoken. In order to restrict the scope we will not include languages for the tutorial game. - - -## Talking NPC contrib - -[source](../../../api/evennia.contrib.tutorials.talking_npc.md) - -This exemplifies an NPC with a menu-driven dialogue tree. We will not use this contrib explicitly, but it's -good as inspiration for how we'll do quest-givers later. - -## Traits contrib - -[source](../../../api/evennia.contrib.rpg.traits.md) - -An issue with dealing with roleplaying attributes like strength, dexterity, or skills like hunting, sword etc -is how to keep track of the values in the moment. Your strength may temporarily be buffed by a strength-potion. -Your swordmanship may be worse because you are encumbered. And when you drink your health potion you must make -sure that those +20 health does not bring your health higher than its maximum. All this adds complexity. - -The _Traits_ contrib consists of several types of objects to help track and manage values like this. When -installed, the traits are accessed on a new handler `.traits`, for example - - > py self.traits.hp.value - 100 - > py self.traits.hp -= 20 # getting hurt - > py self.traits.hp.value - 80 - > py self.traits.hp.reset() # drink a potion - > py self.traits.hp.value - 100 - -A Trait is persistent (it uses an Attribute under the hood) and tracks changes, min/max and other things -automatically. They can also be added together in various mathematical operations. - -The contrib introduces three main Trait-classes - -- _Static_ traits for single values like str, dex, things that at most gets a modifier. -- _Counters_ is a value that never moves outside a given range, even with modifiers. For example a skill - that can at most get a maximum amount of buff. Counters can also easily be _timed_ so that they decrease - or increase with a certain rate per second. This could be good for a time-limited curse for example. -- _Gauge_ is like a fuel-gauge; it starts at a max value and then empties gradually. This is perfect for -things like health, stamina and the like. Gauges can also change with a rate, which works well for the -effects of slow poisons and healing both. - -``` -> py self.traits.hp.value -100 -> py self.traits.hp.rate = -1 # poisoned! -> py self.traits.hp.ratetarget = 50 # stop at 50 hp -# Wait 30s -> py self.traits.hp.value -70 -# Wait another 30s -> py self.traits.hp.value -50 # stopped at 50 -> py self.traits.hp.rate = 0 # no more poison -> py self.traits.hp.rate = 5 # healing magic! -# wait 5s -> pyself.traits.hp.value -75 -``` - -Traits will be very practical to use for our character sheets. - -## Turnbattle contrib - -[source](../../../api/evennia.contrib.game_systems.turnbattle.md) - -This contrib consists of several implementations of a turn-based combat system, divivided into complexity: - -- basic - initiative and turn order, attacks against defense values, damage. -- equip - considers weapons and armor, wielding and weapon accuracy. -- items - adds usable items with conditions and status effects -- magic - adds spellcasting system using MP. -- range - adds abstract positioning and 1D movement to differentiate between melee and ranged attacks. - -The turnbattle system is comprehensive, but it's meant as a base to start from rather than offer -a complete system. It's also not built with _Traits_ in mind, so we will need to adjust it for that. - -## Conclusions - -With some contribs selected, we have pieces to build from and don't have to write everything from scratch. -We will need Quests and will likely need to do a bunch of work on Combat to adapt the combat contrib -to our needs. - -We will now move into actually starting to implement our tutorial game -in the next part of this tutorial series. When doing this for yourself, remember to refer -back to your planning and adjust it as you learn what works and what does not. - - diff --git a/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md b/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md index b68200cf5c..76cfbcf607 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md @@ -1,49 +1,54 @@ # Planning our tutorial game -Using the general plan from last lesson we'll now establish what kind of game we want to create for this tutorial. +Using the general plan from last lesson we'll now establish what kind of game we want to create for this tutorial. We'll call it ... _EvAdventure_. Remembering that we need to keep the scope down, let's establish some parameters. -Note that for your own -game you don't _need_ to agree/adopt any of these. Many game-types need more or much less than this. -But this makes for good, instructive examples. -- To have something to refer to rather than just saying "our tutorial game" over and over, we'll - name it ... _EvAdventure_. -- We want EvAdventure be a small game we can play ourselves for fun, but which could in principle be expanded - to something more later. +- We want EvAdventure be a small game we can play ourselves for fun, but which could in principle be expanded to something more later. +- We want to have a clear game-loop, with clear goals. - Let's go with a fantasy theme, it's well understood. -- We'll use some existing, simple RPG system. +- We will use a small, existing tabletop RPG rule set ([Knave](https://www.drivethrurpg.com/product/250888/Knave), more info later) - We want to be able to create and customize a character of our own. -- We want the tools to roleplay with other players. -- We don't want to have to rely on a Game master to resolve things, but will rely on code for skill resolution - and combat. +- While not roleplay-focused, it should still be possible to socialize and to collaborate. +- We don't want to have to rely on a Game master to resolve things, but will rely on code for skill resolution and combat. - We want monsters to fight and NPCs we can talk to. So some sort of AI. -- We want to be able to buy and sell stuff, both with NPCs and other players. -- We want some sort of crafting system. -- We want some sort of quest system. +- We want some sort of quest system and merchants to buy stuff from. -Let's answer the questions from the previous lesson and discuss some of the possibilities. + +## Game concept + +With these points in mind, here's a quick blurb for our game: + +_Recently, the nearby village discovered that the old abandoned well contained a dark secret. The bottom of the well led to a previously undiscovered dungeon of ever shifting passages. No one knew why it was there or what its purpose was, but local rumors abound. The first adventurer that went down didn't come back. The second ... brought back a handful of glittering riches._ + +_Now the rush is on - there's a dungeon to explore and coin to earn. Knaves, cutthroats, adventurers and maybe even a hero or two are coming from all over the realm to challenge whatever lurks at the bottom of that well._ + +_Local merchants and opportunists have seen a chance for profit. A camp of tents has sprung up around the old well, providing food and drink, equipment, entertainment and rumors for a price. It's a festival to enjoy before paying the entrance fee for dropping down the well to find your fate among the shadows below ..._ + +Our game will consist of two main game modes - above ground and below. The player starts above ground and is expected to do 'expeditions' into the dark. The design goal is for them to be forced back up again when their health, equipment and luck is about to run out. +- Above, in the "dungeon festival", the player can restock and heal up, buy things and do a small set of quests. It's the only place where the characters can sleep and fully heal. They also need to spend coin here to gain XP and levels. This is a place for players to socialize and RP. There is no combat above ground except for an optional spot for non-lethal PvP. +- Below is the mysterious dungeon. This is a procedurally generated set of rooms. Players can collaborate if they go down the well together, they will not be able to run into each other otherwise (so this works as an instance). Each room generally presents some challenge (normally a battle). Pushing deeper is more dangerous but can grant greater rewards. While the rooms could in theory go on forever, there should be a boss encounter once a player reaches deep enough. + +Here's an overview of the topside camp for inspiration (quickly thrown together in the free version of [Inkarnate](https://inkarnate.com/)). We'll explore how to break this up into "rooms" (locations) when we get to creating the game world later. + +![Last Step Camp](../../../_static/images/starting_tutorial/Dungeon_Merchant_Camp.jpg) + +For the rest of this lesson we'll answer and reason around the specific questions posed in the previous [Game Planning](./Game-Planning.md) lesson. ## Administration ### Should your game rules be enforced by coded systems by human game masters? -Generally, the more work you expect human staffers/GMs to do, the less your code needs to work. To -support GMs you'd need to design commands to support GM-specific actions and the type of game-mastering -you want them to do. You may need to expand communication channels so you can easily -talk to groups people in private and split off gaming groups from each other. RPG rules could be as simple +Generally, the more work you expect human staffers/GMs to do, the less your code needs to work. To support GMs you'd need to design commands to support GM-specific actions and the type of game-mastering you want them to do. You may need to expand communication channels so you can easily talk to groups people in private and split off gaming groups from each other. RPG rules could be as simple as the GM sitting with the rule books and using a dice-roller for visibility. -GM:ing is work-intensive however, and even the most skilled and enthusiastic GM can't be awake all hours -of the day to serve an international player base. The computer never needs sleep, so having the ability for -players to "self-serve" their RP itch when no GMs are around is a good idea even for the most GM-heavy games. +GM:ing is work-intensive however, and even the most skilled and enthusiastic GM can't be awake all hours of the day to serve an international player base. The computer never needs sleep, so having the ability for players to "self-serve" their RP itch when no GMs are around is a good idea even for the most GM-heavy games. -On the other side of the spectrum are games with no GMs at all; all gameplay are driven either by the computer -or by the interactions between players. Such games still need an active staff, but nowhere as much active -involvement. Allowing for solo-play with the computer also allows players to have fun when the number of active +On the other side of the spectrum are games with no GMs at all; all gameplay are driven either by the computer or by the interactions between players. Such games still need an active staff, but nowhere as much active involvement. Allowing for solo-play with the computer also allows players to have fun when the number of active players is low. -We want EvAdventure to work entirely without depending on human GMs. That said, there'd be nothing -stopping a GM from stepping in and run an adventure for some players should they want to. +**EvAdventure Answer:** + +We want EvAdventure to work entirely without depending on human GMs. That said, there'd be nothing stopping a GM from stepping in and run an adventure for some players should they want to. ### What is the staff hierarchy in your game? Is vanilla Evennia roles enough or do you need something else? @@ -58,240 +63,271 @@ The default hierarchy is There is also the _superuser_, the "owner" of the game you create when you first set up your database. This user goes outside the regular hierarchy and should usually only. -We are okay with keeping this structure for our game. +**EvAdventure Answer** + +We are okay with keeping the default permission structure for our game. ### Should players be able to post out-of-characters on channels and via other means like bulletin-boards? Evennia's _Channels_ are by default only available between _Accounts_. That is, for players to communicate with each other. By default, the `public` channel is created for general discourse. -Channels are logged to a file and when you are coming back to the game you can view the history of a channel -in case you missed something. +Channels are logged to a file and when you are coming back to the game you can view the history of a channel in case you missed something. > public Hello world! [Public] MyName: Hello world! -But Channels can also be set up to work between Characters instead of Accounts. This would mean the channels -would have an in-game meaning: +But Channels can also be set up to work between Characters instead of Accounts. This would mean the channels would have an in-game meaning: - Members of a guild could be linked telepathically. - Survivors of the apocalypse can communicate over walkie-talkies. - Radio stations you can tune into or have to discover. -_Bulletin boards_ are a sort of in-game forum where posts are made publicly or privately. Contrary to a channel, -the messages are usually stored and are grouped into topics with replies. Evennia has no default bulletin-board -system. +_Bulletin boards_ are a sort of in-game forum where posts are made publicly or privately. Contrary to a channel, the messages are usually stored and are grouped into topics with replies. Evennia has no default bulletin-board system. -In EvAdventure we will just use the default inter-account channels. We will also not be implementing any -bulletin boards. +**EvAdventure Answer** + +In EvAdventure we will just use the default inter-account channels. We will also not be implementing any bulletin boards; instead the merchant NPCs will act as quest givers. ## Building ### How will the world be built? There are two main ways to handle this: -- Traditionally, from in-game with build-commands: This means builders creating content in their game - client. This has the advantage of not requiring Python skills nor server access. This can often be a quite - intuitive way to build since you are sort-of walking around in your creation as you build it. However, the - developer (you) must make sure to provide build-commands that are flexible enough for builders to be able to - create the content you want for your game. -- Externally (by batchcmds): Evennia's `batchcmd` takes a text file with Evennia Commands and executes them - in sequence. This allows the build process to be repeated and applied quickly to a new database during development. - It also allows builders to use proper text-editing tools rather than writing things line-by-line in their clients. - The drawback is that for their changes to go live they either need server access or they need to send their - batchcode to the game administrator so they can apply the changes. Or use version control. -- Externally (with batchcode or custom code): This is the "professional game development" approach. This gives the - builders maximum power by creating the content in Python using Evennia primitives. The `batchcode` processor - allows Evennia to apply and re-apply build-scripts that are raw Python modules. Again, this would require the - builder to have server access or to use version control to share their work with the rest of the development team. +- Traditionally, from in-game with build-commands: This means builders creating content in their game client. This has the advantage of not requiring Python skills nor server access. This can often be a quite intuitive way to build since you are sort-of walking around in your creation as you build it. However, the developer (you) must make sure to provide build-commands that are flexible enough for builders to be able to create the content you want for your game. +- Externally (by batchcmds): Evennia's `batchcmd` takes a text file with Evennia Commands and executes them in sequence. This allows the build process to be repeated and applied quickly to a new database during development. + It also allows builders to use proper text-editing tools rather than writing things line-by-line in their clients. The drawback is that for their changes to go live they either need server access or they need to send their batchcode to the game administrator so they can apply the changes. Or use version control. +- Externally (with batchcode or custom code): This is the "professional game development" approach. This gives the builders maximum power by creating the content in Python using Evennia primitives. The `batchcode` processor + allows Evennia to apply and re-apply build-scripts that are raw Python modules. Again, this would require the builder to have server access or to use version control to share their work with the rest of the development team. -In this tutorial, we will show examples of all these ways, but since we don't have a team of builders we'll -build the brunt of things using Evennia's Batchcode system. +**EvAdventure Answer** + +For EvAdventure, we will build the above-ground part of the game world using batch-scripts. The world below-ground we will build procedurally, using raw code. ### Can only privileged Builders create things or should regular players also have limited build-capability? -In some game styles, players have the ability to create objects and even script them. While giving regular users -the ability to create objects with in-built commands is easy and safe, actual code-creation (aka _softcode_ ) is -not something Evennia supports natively. Regular, untrusted users should never be allowed to execute raw Python -code (such as what you can do with the `py` command). You can -[read more about Evennia's stance on softcode here](../../../Concepts/Soft-Code.md). If you want users to do limited scripting, -it's suggested that this is accomplished by adding more powerful build-commands for them to use. +In some game styles, players have the ability to create objects and even script them. While giving regular users the ability to create objects with in-built commands is easy and safe, actual code-creation (aka _softcode_ ) is not something Evennia supports natively. -For our tutorial-game, we will only allow privileged builders to modify the world. The exception is crafting, -which we will limit to repairing broken items by combining them with other repair-related items. +Regular, untrusted users should never be allowed to execute raw Python +code (such as what you can do with the `py` command). You can +[read more about Evennia's stance on softcode here](../../../Concepts/Soft-Code.md). If you want users to do limited scripting, it's suggested that this is accomplished by adding more powerful build-commands for them to use. + +**EvAdventure Answer** + +For our tutorial-game, we will only allow privileged builders and admins to modify the world. ## Systems ### Do you base your game off an existing RPG system or make up your own? -We will make use of [Open Adventure](http://www.geekguild.com/openadventure/), a simple 'old school' RPG-system -that is available for free under the Creative Commons license. We'll only use a subset of the rules from -the blue "basic" book. For the sake of keeping down the length of this tutorial we will limit what features -we will include: +There is a plethora of options out there, and what you choose depends on the game you want. It can be tempting to grab a short free-form ruleset, but remember that the computer does not have any intuitiion or common sense to interpret the rules like a human GM could. Conversely, if you pick a very 'crunchy' game system, with detailed simulation of the real world, remember that you'll need to actually _code_ all those exceptions and tables yourself. + +For speediest development, what you want is a game with a _consolidated_ resolution mechanic - one you can code once and then use in a lot of situations. But you still want enough rules to help telling the computer how various situations should be resolved (combat is the most common system that needs such structure). + +**EvAdventure Answer** + +For this tutorial, we will make use of [Knave](https://www.drivethrurpg.com/product/250888/Knave), a very light [OSR](https://en.wikipedia.org/wiki/Old_School_Renaissance) ruleset by Ben Milton. It's only a few pages long but highly compatible with old-school D&D games. It's consolidates all rules around a few opposed d20 rolls and includes clear rules for combat, inventory, equipment and so on. Since _Knave_ is a tabletop RPG, we will have to do some minor changes here and there to fit it to the computer medium. + +_Knave_ is available under a Creative Commons Attributions 4.0 License, meaning it can be used for derivative work (even commercially). The above link allows you to purchase the PDF and supporting the author. Alternatively you can find unofficial fan releases of the rules [on this page](https://dungeonsandpossums.com/2020/04/some-great-knave-rpg-resources/). -- Only two 'archetypes' (classes) - Arcanist (wizard) and Warrior, these are examples of two different play - styles. -- Two races only (dwarves and elves), to show off how to implement races and race bonuses. -- No extra features of the races/archetypes such as foci and special feats. While these are good for fleshing - out a character, these will work the same as other bonuses and are thus not that instructive. -- We will add only a small number of items/weapons from the Open Adventure rulebook to show how it's done. ### What are the game mechanics? How do you decide if an action succeeds or fails? -Open Adventure's conflict resolution is based on adding a trait (such as Strength) with a random number in -order to beat a target. We will emulate this in code. +This follows from the RPG system decided upon in the previous question. -Having a "skill" means getting a bonus to that roll for a more narrow action. -Since the computer will need to know exactly what those skills are, we will add them more explicitly than -in the rules, but we will only add the minimum to show off the functionality we need. +**EvAdventure Answer** + +_Knave_ gives every character a set of six traditional stats: Strength, Intelligence, Dexterity, Constitution, Intelligence, Wisdom and Charisma. Each has a value from +1 to +10. To find its "Defense" value, you add 10. + + You have Strength +1. Your Strength-Defense is 10 + 1 = 11 + +To make a check, say an arm-wrestling challenge you roll a twenty-sided die (d20) and add your stat. You have to roll higher than the opponents defense for that stat. + + I have Strength +1, my opponent has a Strength of +2. To beat them in arm wrestling I must roll d20 + 1 and hope to get higher than 12, which is their Strength defense (10 + 2). + +If you attack someone you do the same, except you roll against their `Armor` defense. If you rolled higher, you roll for how much damage you do (depends on your weapon). +You can have _advantage_ or _disadvantage_ on a roll. This means rolling 2d20 and picking highest or lowest value. + +In Knave, combat is turn-based. In our implementation we'll also play turn-based, but we'll resolve everything _simultaneously_. This changes _Knave_'s feel quite a bit, but is a case where the computer can do things not practical to do when playing around a table. + +There are also a few tables we'll need to implement. For example, if you lose all health, there's a one-in-six chance you'll die outright. We'll keep this perma-death aspect, but make it very easy to start a new character and jump back in. + +> In this tutorial we will not add opportunities to make use of all of the character stats, making some, like strength, intelligence and dexterity more useful than others. In a full game, one would want to expand so a user can utilize all of their character's strengths. ### Does the flow of time matter in your game - does night and day change? What about seasons? Most commonly, game-time runs faster than real-world time. There are a few advantages with this: -- Unlike in a single-player game, you can't fast-forward time in a multiplayer game if you are waiting for - something, like NPC shops opening. +- Unlike in a single-player game, you can't fast-forward time in a multiplayer game if you are waiting for something, like NPC shops opening. - Healing and other things that we know takes time will go faster while still being reasonably 'realistic'. -The main drawback is for games with slower roleplay pace. While you are having a thoughtful roleplaying scene -over dinner, the game world reports that two days have passed. Having a slower game time than real-time is -a less common, but possible solution for such games. +The main drawback is for games with slower roleplay pace. While you are having a thoughtful roleplaying scene over dinner, the game world reports that two days have passed. Having a slower game time than real-time is a less common, but possible solution for such games. -It is however _not_ recommended to let game-time exactly equal the speed of real time. The reason for this -is that people will join your game from all around the world, and they will often only be able to play at -particular times of their day. With a game-time drifting relative real-time, everyone will eventually be -able to experience both day and night in the game. +It is however _not_ recommended to let game-time exactly equal the speed of real time. The reason for this is that people will join your game from all around the world, and they will often only be able to play at particular times of their day. With a game-time drifting relative real-time, everyone will eventually be able to experience both day and night in the game. -For this tutorial-game we will go with Evennia's default, which is that the game-time runs two times faster -than real time. +**EvAdventure Answer** + +The passage of time will have no impact on our particular game example, so we'll go with Evennia's default, which is that the game-time runs two times faster than real time. ### Do you want changing, global weather or should weather just be set manually in roleplay? -A weather system is a good example of a game-global system that affects a subset of game entities -(outdoor rooms). We will not be doing any advanced weather simulation, but we'll show how to do -random weather changes happening across the game world. +A weather system is a good example of a game-global system that affects a subset of game entities (outdoor rooms). + +**EvAdventure Answer** + +We'll not change the weather, but will add some random messages to echo through +the game world at random intervals just to show the principle. ### Do you want a coded world-economy or just a simple barter system? Or no formal economy at all? +This is a big question and depends on how deep and interconnected the virtual transactions are that are happening in the game. Shop prices could rice and drop due to supply and demand, supply chains could involve crafting and production. One also could consider adding money sinks and manipulate the in-game market to combat inflation. -We will allow for money and barter/trade between NPCs/Players and Player/Player, but will not care about -inflation. A real economic simulation could do things like modify shop prices based on supply and demand. -We will not go down that rabbit hole. +The [Barter](../../../Contribs/Contrib-Barter.md) contrib provides a full interface for trading with another player in a safe way. + +**EvAdventure Answer** + +We will not deal with any of this complexity. We will allow for players to buy from npc sellers and players will be able to trade using the normal `give` command. ### Do you have concepts like reputation and influence? -These are useful things for a more social-interaction heavy game. We will not include them for this -tutorial however. +These are useful things for a more social-interaction heavy game. + +**EvAdventure Answer** + +We will not include them for this tutorial. Adding the Barter contrib is simple though. ### Will your characters be known by their name or only by their physical appearance? -This is a common thing in RP-heavy games. Others will only see you as "The tall woman" until you -introduce yourself and they 'recognize' you with a name. Linked to this is the concept of more complex -emoting and posing. +This is a common thing in RP-heavy games. Others will only see you as "The tall woman" until you introduce yourself and they 'recognize' you with a name. Linked to this is the concept of more complex emoting and posing. -Adding such a system from scratch is complex and way beyond the scope of this tutorial. However, -there is an existing Evennia contrib that adds all of this functionality and more, so we will -include that and explain briefly how it works. +Implementing such a system is not trivial, but the [RPsystem](../../../Contribs/Contrib-RPSystem.md) Evennia contrib offers a ready system with everything needed for free emoting, recognizing people by their appearance and more. + +**EvAdventure Answer** + +We will not use any special RP systems for this tutorial. Adding the RPSystem contrib is a good extra expansion though! ## Rooms ### Is a simple room description enough or should the description be able to change? -Changing room descriptions for day and night, winder and summer is actually quite easy to do, but looks -very impressive. We happen to know there is also a contrib that helps with this, so we'll show how to -include that. +Changing room descriptions for day and night, winder and summer is actually quite easy to do, but looks very impressive. We happen to know there is also a contrib that helps with this, so we'll show how to include that. + +There is an [Extended Room](../../../Contribs/Contrib-Extended-Room.md) contrib that adds a Room type that is aware of the time-of-day as well as seasonal variations. + +**EvAdventure Answer** + +We will stick to a normal room in this tutorial and let the world be in a perpetual daylight. Making Rooms into ExtendedRooms is not hard though. ### Should the room have different statuses? -We will have different weather in outdoor rooms, but this will not have any gameplay effect - bow strings -will not get wet and fireballs will not fizzle if it rains. +One could picture weather making outdoor rooms wet, cold or burnt. In rain, bow strings could get wet and fireballs fizz out. In a hot room, characters could require drinking more water, or even take damage if not finding shelter. + +**EvAdventure Answer** + +For the above-ground we need to be able to disable combat all rooms except for the PvP location. We also need to consider how to auto-generate the rooms under ground. So we probably will need some statuses to control that. + +Since each room under ground should present some sort of challenge, we may need a few different room types different from the above-ground Rooms. ### Can objects be hidden in the room? Can a person hide in the room? +This ties into if you have hide/stealth mechanics. Maybe you could evesdrop or attack out of hiding. + +**EvAdventure Answer** + We will not model hiding and stealth. This will be a game of honorable face-to-face conflict. ## Objects ### How numerous are your objects? Do you want large loot-lists or are objects just role playing props? -Since we are not going for a pure freeform RPG here, we will want objects with properties, like weapons -and potions and such. Monsters should drop loot even though our list of objects will not be huge. +This also depends on the type of game. In a pure freeform RPG, most objects may be 'imaginary' and just appearing in fiction. If the game is more coded, you want objects with properties that the computer can measure, track and calculate. In many roleplaying-heavy games, you find a mixture of the two, with players imagining items for roleplaying scenes, but only using 'real' objects to resolve conflicts. + +**EvAdventure Answer** + +We will want objects with properties, like weapons and potions and such. Monsters should drop loot even though our list of objects will not be huge in this example game. ### Is each coin a separate object or do you just store a bank account value? -Since we will use bartering, placing coin objects on one side of the barter makes for a simple way to -handle payments. So we will use coins as-objects. +The advantage of having multiple items is that it can be more immersive. The drawback is that it's also very fiddly to deal with individual coins, especially if you have to deal with different currencies. -### Do multiple similar objects form stacks and how are those stacks handled in that case? +**EvAdventure Answer** -Since we'll use coins, it's practical to have them and other items stack together. While Evennia does not -do this natively, we will make use of a contrib for this. +_Knave_ uses the "copper" as the base coin and so will we. Knave considers the weight of coin and one inventory "slot" can hold 100 coins. So we'll implement a "coin item" to represent many coins. + +### Do multiple similar objects form stack and how are those stacks handled in that case? + +If you drop two identical apples on the ground, Evennia will default to show this in the room as "two apples", but this is just a visual effect - there are still two apple-objects in the room. One could picture instead merging the two into a single object "X nr of apples" when you drop the apples. + +**EvAdventure Answer** + +We will keep Evennia's default. ### Does an object have weight or volume (so you cannot carry an infinite amount of them)? -Limiting carrying weight is one way to stop players from hoarding. It also makes it more important -for players to pick only the equipment they need. Carrying limits can easily come across as -annoying to players though, so one needs to be careful with it. +Limiting carrying weight is one way to stop players from hoarding. It also makes it more important for players to pick only the equipment they need. Carrying limits can easily come across as annoying to players though, so one needs to be careful with it. -Open Adventure rules include weight limits, so we will include them. +**EvAdventure Answer** + +_Knave_ limits your inventory to `Constitution + 10` "slots", where most items take up one slot and some large things, like armor, uses two. Small items (like rings) can fit 2-10 per slot and you can fit 100 coins in a slot. This is an important game mechanic to limit players from hoarding. Especially since you need coin to level up. ### Can objects be broken? Can they be repaired? -Item breakage is very useful for a game economy; breaking weapons adds tactical considerations (if it's not -too common, then it becomes annoying) and repairing things gives work for crafting players. +Item breakage is very useful for a game economy; breaking weapons adds tactical considerations (if it's not too common, then it becomes annoying) and repairing things gives work for crafting players. -We wanted a crafting system, so this is what we will limit it to - repairing items using some sort -of raw materials. +**EvAdventure Answer** + +In _Knave_, items will break if you make a critical failure on using them (rolls a native 1 on d20). This means they lose a level of `quality` and once at 0, it's unusable. We will not allow players to repair, but we could allow merchants to repair items for a fee. ### Can you fight with a chair or a flower or must you use a special 'weapon' kind of thing? Traditionally, only 'weapons' could be used to fight with. In the past this was a useful -simplification, but with Python classes and inheritance, it's not actually more work to just -let all items in game work as a weapon in a pinch. +simplification, but with Python classes and inheritance, it's not actually more work to just let all items in game work as a weapon in a pinch. -So for our game we will let a character use any item they want as a weapon. The difference will -be that non-weapon items will do less damage and also break and become unusable much quicker. +**EvAdventure Answer** + + Since _Knave_ deals with weapon lists and positions where items can be wielded, we will have a separate "Weapon" class for everything you can use for fighting. So, you won't be able to fight with a chair (unless we make it a weapon-inherited chair). ### Will characters be able to craft new objects? -Crafting is a common feature in multiplayer games. In code it usually means using a skill-check -to combine base ingredients from a fixed recipe in order to create a new item. The classic -example is to combine _leather straps_, a _hilt_, a _pommel_ and a _blade_ to make a new _sword_. -A full-fledged crafting system could require multiple levels of crafting, including having to mine -for ore or cut down trees for wood. +Crafting is a common feature in multiplayer games. In code it usually means using a skill-check to combine base ingredients from a fixed recipe in order to create a new item. The classic example is to combine _leather straps_, a _hilt_, a _pommel_ and a _blade_ to make a new _sword_. -In our case we will limit our crafting to repairing broken items. To show how it's done, we will require -extra items (a recipe) in order to facilitate the repairs. +A full-fledged crafting system could require multiple levels of crafting, including having to mine for ore or cut down trees for wood. + +Evennia's [Crafting](../../../Contribs/Contrib-Crafting.md) contrib adds a full crafting system to any game. It's based on [Tags](../../../Components/Tags.md), meaning that pretty much any object can be made usable for crafting, even used in an unexpected way. + +**EvAdventure Answer** + +In our case we will not add any crafting in order to limit the scope of our game. Maybe NPCs will be able to repair items - for a cost? ### Should mobs/NPCs have some sort of AI? -A rule of adding Artificial Intelligence is that with today's technology you should not hope to fool -anyone with it anytime soon. Unless you have a side-gig as an AI researcher, users will likely -not notice any practical difference between a simple state-machine and you spending a lot of time learning +As a rule, you should not hope to fool anyone into thinking your AI is actually intelligent. The best you will be able to do is to give interesting results and unless you have a side-gig as an AI researcher, users will likely not notice any practical difference between a simple state-machine and you spending a lot of time learning how to train a neural net. -For this tutorial, we will show how to add a simple state-machine for monsters. NPCs will only be -shop-keepers and quest-gives so they won't need any real AI to speak of. +**EvAdventure Answer** + +For this tutorial, we will show how to add a simple state-machine AI for monsters. NPCs will only be shop-keepers and quest-gives so they won't need any real AI to speak of. ### Are NPCs and mobs different entities? How do they differ? -"Mobs" or "mobiles" are things that move around. This is traditionally monsters you can fight with, but could -also be city guards or the baker going to chat with the neighbor. Back in the day, they were often fundamentally -different these days it's often easier to just make NPCs and mobs essentially the same thing. +"Mobs" or "mobiles" are things that move around. This is traditionally monsters you can fight with, but could also be city guards or the baker going to chat with the neighbor. Back in the day, they were often fundamentally different these days it's often easier to just make NPCs and mobs essentially the same thing. -In EvAdventure, both Monsters and NPCs will be the same type of thing; A monster could give you a quest -and an NPC might fight you as a mob as well as trade with you. +**EvAdventure Answer** + +In EvAdventure, Monsters and NPCs do very different things, so they will be different classes, sharing some code where possible. ### _Should there be NPCs giving quests? If so, how do you track Quest status? -We will design a simple quest system to track the status of ongoing quests. +Quests are a staple of many classic RPGs. + +**EvAdventure Answer** + +We will design a simple quest system with some simple conditions for success, like carrying the right item or items back to the quest giver. ## Characters ### Can players have more than one Character active at a time or are they allowed to multi-play? -Since Evennia differentiates between `Sessions` (the client-connection to the game), `Accounts` -and `Character`s, it natively supports multi-play. This is controlled by the `MULTISESSION_MODE` -setting, which has a value from `0` (default) to `3`. +Since Evennia differentiates between `Sessions` (the client-connection to the game), `Accounts` and `Character`s, it natively supports multi-play. This is controlled by the `MULTISESSION_MODE` setting, which has a value from `0` (default) to `3`. - `0`- One Character per Account and one Session per Account. This means that if you login to the same account from another client you'll be disconnected from the first. When creating a new account, a Character @@ -306,31 +342,33 @@ setting, which has a value from `0` (default) to `3`. - `3` - Multiple Characters per Account, Multiple Sessions per Character. This is like mode 2, except players can control each Character from multiple clients, seeing the same output from each Character. -We will go with a multi-role game, so we will use `MULTISESSION_MODE=3` for this tutorial. +**EvAdventure Answer** + +Due to the nature of _Knave_, characters are squishy and probably short-lived. So it makes little sense to keep a stable of them. We'll use use mode 0 or 1. ### How does the character-generation work? There are a few common ways to do character generation: -- Rooms. This is the traditional way. Each room's description tells you what command to use to modify - your character. When you are done you move to the next room. Only use this if you have another reason for - using a room, like having a training dummy to test skills on, for example. -- A Menu. The Evennia _EvMenu_ system allows you to code very flexible in-game menus without needing to walk - between rooms. You can both have a step-by-step menu (a 'wizard') or allow the user to jump between the +- Rooms. This is the traditional way. Each room's description tells you what command to use to modify your character. When you are done you move to the next room. Only use this if you have another reason for using a room, like having a training dummy to test skills on, for example. +- A Menu. The Evennia _EvMenu_ system allows you to code very flexible in-game menus without needing to walk between rooms. You can both have a step-by-step menu (a 'wizard') or allow the user to jump between the steps as they please. This tends to be a lot easier for newcomers to understand since it doesn't require using custom commands they will likely never use again after this. -- Questions. A fun way to build a character is to answer a series of questions. This is usually implemented - with a sequential menu. +- Questions. A fun way to build a character is to answer a series of questions. This is usually implemented with a sequential menu. -For the tutorial we will use a menu to let the user modify each section of their character sheet in any order -until they are happy. +**EvAdventure Answer** + + Knave randomizes almost aspects of the Character generation. We'll use a menu to let the player add their name and sex as well as do the minor re-assignment of stats allowed by the rules. ### How do you implement different "classes" or "races"? -The way classes and races work in most RPGs (as well as in OpenAdventure) is that they act as static 'templates' -that inform which bonuses and special abilities you have. This means that all we need to store on the -Character is _which_ class and _which_ race they have; the actual logic can sit in Python code and just -be looked up when we need it. +The way classes and races work in most RPGs is that they act as static 'templates' that inform which bonuses and special abilities you have. Much of this only comes into play during character generation or when leveling up. + +Often all we need to store on the Character is _which_ class and _which_ race they have; the actual logic can sit in Python code and just be looked up when we need it. + +**EvAdventure Answer** + +There are no races and no classes in _Knave_. Every character is a human. ### If a Character can hide in a room, what skill will decide if they are detected? @@ -342,14 +380,15 @@ Hiding means a few things. find the person (probably based on skill checks). - The room will also need to be involved, maybe with some modifier as to how easy it is to hide in the room. -We will _not_ be including a hide-mechanic in EvAdventure though. +**EvAdventure Answer** + +We will not be including a hide-mechanic in EvAdventure. ### What does the skill tree look like? Can a Character gain experience to improve? By killing enemies? Solving quests? By roleplaying? Gaining experience points (XP) and improving one's character is a staple of roleplaying games. There are many ways to implement this: -- Gaining XP from kills is very common; it's easy to let a monster be 'worth' a certain number of XP and it's - easy to tell when you should gain it. +- Gaining XP from kills is very common; it's easy to let a monster be 'worth' a certain number of XP and it's easy to tell when you should gain it. - Gaining XP from quests is the same - each quest is 'worth' XP and you get them when completing the test. - Gaining XP from roleplay is harder to define. Different games have tried a lot of different ways to do this: - XP from being online - just being online gains you XP. This inflates player numbers but many players may @@ -361,20 +400,20 @@ ways to implement this: - XP from fails - you only gain XP when failing rolls. - XP from other players - other players can award you XP for good RP. -For EvAdventure we will use Open Adventure's rules for XP, which will be driven by kills and quest successes. +**EvAdventure Answer** + + We will use an alternative rule in _Knave_, where Characters gain XP by spending coins they carry back from their adventures. The above-ground merchants will allow you to spend your coins and exchange them for XP 1:1. Each level costs 1000 coins. Every level you have `1d8 * new level` (minimum what you had before + 1) HP, and can raise 3 different ability scores by 1 (max +10). There are no skills in _Knave_, but the principle of increasing them would be the same. ### May player-characters attack each other (PvP)? -Deciding this affects the style of your entire game. PvP makes for exciting gameplay but it opens a whole new -can of worms when it comes to "fairness". Players will usually accept dying to an overpowered NPC dragon. They -will not be as accepting if they perceive another player is perceived as being overpowered. PvP means that you -have to be very careful to balance the game - all characters does not have to be exactly equal but they should -all be viable to play a fun game with. PvP does not only mean combat though. Players can compete in all sorts of ways, including gaining influence in -a political game or gaining market share when selling their crafted merchandise. +Deciding this affects the style of your entire game. PvP makes for exciting gameplay but it opens a whole new can of worms when it comes to "fairness". Players will usually accept dying to an overpowered NPC dragon. They will not be as accepting if they perceive another player as being overpowered. PvP means that you +have to be very careful to balance the game - all characters does not have to be exactly equal but they should all be viable to play a fun game with. -For the EvAdventure we will support both Player-vs-environment combat and turn-based PvP. We will allow players -to barter with each other (so potentially scam others?) but that's the extent of it. We will focus on showing -off techniques and will not focus on making a balanced game. +PvP does not only mean combat though. Players can compete in all sorts of ways, including gaining influence in a political game or gaining market share when selling their crafted merchandise. + +**EvAdventure Answer** + + We will allow PvP only in one place - a special Dueling location where players can play-fight each other for training and prestige, but not actually get killed. Otherwise no PvP will be allowed. Note that without a full Barter system in place (just regular `give`, it makes it theoretically easier for players to scam one another. ### What are the penalties of defeat? Permanent death? Quick respawn? Time in prison? @@ -392,8 +431,7 @@ Perma-death means that once your character dies, it's gone and you have to make Perma-death comes with some severe disadvantages however. -- It's impopular. Many players will just not play a game where they risk losing their beloved character - just like that. +- It's impopular. Many players will just not play a game where they risk losing their beloved character just like that. - Many players say they like the _idea_ of permadeath except when it could happen to them. - It can limit roleplaying freedom and make people refuse to take any risks. - It may make players even more reluctant to play conflict-driving 'bad guys'. @@ -403,23 +441,20 @@ Perma-death comes with some severe disadvantages however. For these reasons, it's very common to do hybrid systems. Some tried variations: - NPCs cannot kill you, only other players can. -- Death is permanent, but it's difficult to actually die - you are much more likely to end up being severely -hurt/incapacitated. +- Death is permanent, but it's difficult to actually die - you are much more likely to end up being severely hurt/incapacitated. - You can pre-pay 'insurance' to magically/technologically avoid actually dying. Only if don't have insurance will you die permanently. - Death just means harsh penalties, not actual death. - When you die you can fight your way back to life from some sort of afterlife. - You'll only die permanently if you as a player explicitly allows it. -For our tutorial-game we will not be messing with perma-death; instead your defeat will mean you will re-spawn -back at your home location with a fraction of your health. +**EvAdventure Answer** + +In _Knave_, when you hit 0 HP, you roll on a death table, with a 1/6 chance of immediate death (otherwise you lose points in a random stat). We will offer an "Insurance" that allows you to resurrect if you carry enough coin on you when you die. If not, you are perma-dead and have to create a new character (which is easy and quick since it's mostly randomized). ## Conclusions -Going through the questions has helped us get a little bit more of a feel for the game we want to do. There are -many other things we could ask ourselves, but if we can cover these points we will be a good way towards a complete, +Going through the questions has helped us get a little bit more of a feel for the game we want to do. There are many, many other things we could ask ourselves, but if we can cover these points we will be a good way towards a complete, playable game! -Before starting to code in earnest a good coder should always do an inventory of all the stuff they _don't_ need -to code themselves. So in the next lesson we will check out what help we have from Evennia's _contribs_. - +In the last of these planning lessons we'll sketch out how these ideas will map to Evennia. \ No newline at end of file diff --git a/docs/source/_static/images/starting_tutorial/Dungeon_Merchant_Camp.jpg b/docs/source/_static/images/starting_tutorial/Dungeon_Merchant_Camp.jpg new file mode 100644 index 0000000000000000000000000000000000000000..10f9088d4d06108afc77a72ef39f57944f6ec4f8 GIT binary patch literal 2452889 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�);r6BCe}=lfzll68 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 z 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%0A-usyUMrj-k;AT}z_ZEW6~zd6h_3b-$BI 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

^SLWkx1^~evV0?};tDZhwyJ^?Sbv~Yj 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%0A8B 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

ZF(%|Awj9Eu{Q<>_nTgF7lbb;FVn`X|p?}tCcxO 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

mFXdiPR8WdwQ9L=+d5@~Ji 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 z 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�{Y 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%0A(S6UN}`eAJP)fQ4Y5c?U!spYPe<7gu4k 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�r_pnR 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�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≺o|Kswd-rMdHNcQkL*r1RDN~_gwN@U}3wRrFtwvx*5fZG3y+?Z2 zz4*f{H|p1-7$!V$*WQ#h2VPe36SNGc{Xm`lY zv8N{``Ca_ln-Z}R1uYju1*DJa?Y)S!AD;@bq85Kzv%j=r7>rJ8Tjq`r_q;!m-X8xw8#_@lR;JX*DMRG*?)T$EEa88;WxPV zDkpl%O3Ig0R|Oo)rpPvHepPa@w^-!a=@9|z80&@P(@!ElipLzYIdS_Bbscd>saIy2po5{GzCRJ>A$y8M5C+VVf&VJ$J`~c>f)nUn)Y($}Ha}CTmT$ z@km5zLUFpGDER|B(6J&#N9ti3VTh4pM%(a$qkFjTkE{S{e($j!dtQ&pmNh(>E4uAJ z_P-`w)4{E2ZrTXO-6j-W12m3{2im>Wy;m9BlcvZ3T;rslWTQ(o2ly*Z%kR@~YZ29FOQg~tTudg(o!pr*^P2E@FW8{nC zBgd^G`8$UpsHgyMdiQG){45N|*}>g$Jxe*L*!-8@&7V9IcbpyA-*O2>p_3!CA9s1P zTNrx6Ep~%!jdw#_55-PwBLxSzLum_NW{2=lnA%-*j%C0X;G9pB{v+n20H2bp4y^ZI z`*ri*umVC>wU$|mMo& zt6JA=|BQQn4c%=)pzDRs)(WtvtYQGVILI3 zcwRUiAs!|&tICNk8Y#Ek3rR=9&vt`>uC(rkw2FC)gjtl<>fsYux=U@3f^QiN77G0_ zZJg%e2dT@9^{;v0o~;?_Sn|49JGjW&(*5FrRIqDDlidqB=h4R>U!H9u!Ik%{qS#IO z#6dE1PWj2x`$JNyqcswm5gB1h(+A2TIM16VZC?UtL_}&g0Xn{ti;r%s@hH>``>_W| zS!j1E$t4H2DeTmrY8eoCc8_G_`U_<=BqJ|lj9-pKc-ztJI|hO$za_1T7i0J`N>s@D zbVUYSmYMgdl(~E3Bm;_zIERcjL%4;=9FBx7#d*S=Zde2##<8)Y*9mi+-VN1HhqaF*j58m`Di_LTe!m5Bnif3J{pc( zrRZI{@9}(zjQ+8uz~v&Iu*o0)SQ~P0+c5d1G0XWSIch z+%R>#E*M~%VIv$IAVI%0lqdaO`ZDnwS+u*Ht9@^BNSdK~qG6^K0bq&h33Z#_;VB^c zREQ^6?bPWiBw;lz&fYA)xYX}{q*8C|1=8A+DNdP#m4m-;X3c>Yx@OHHo~Du*-cx9l zHI9rTfPUWNx?pNf>X4No0+YLaW<$KOmAkzGe64!R5blPNOI_KE*Y%{wnv`MkFx}Og zNt$-)7iZKe&DAVq z(eQDV9rZNsb7!57B^~8ZY*`f7S9^Qomt&lFhxR&j!%iW?*g_Y5IKMIOF0i?LV6p;< ziFh$Vsj4E2%s3$kncoYCvuO`$+2O5^u-bITu`EQtxl+(+1UuUKr~70{eB#bnjYY@x z_f3UxtLe*fRB(hqH@jhSgfiIznc5wqJWd3ef`@}bOiQ!zFDk<7FVQWdulxJCBf}f@ zilXbl!u8e@+Y22e3%r|sB~I8E&X!03ohzkk;Wsm@+_+dfW|b}d(T$c3@AP`_W!{ov zBfSovZoKZHW8-_9+{AsoD`}6TGNpi8W8QtksgN({NW6p^dIy zBWG81f-sgN?lMqlxU;XiXs2?4DbkK=MzI?R>75u$*qk^vGb1Q=Pp$d z+eJD@Y9!yh zZ4$t1IW80a8eu8=NMDHK*VQH@*kaBnPDS9WHrLoHcVxcEtb{))lv87?r9pD68k}r2 z1wVJgld{wTQy{)=VH)O-!81F9^!;a?o~KX_kQtUb>cV8^AVA+1)3s&Yn0dvF!3C?D zf4dc2VsVEH*Om=#{TZg`-UmkJo(dZHwwyutmr3t|6l_zX_o@KekZq`J8^cvfNuc88 zDl0TriDn>$IE^wOLbN%{x|yDOv?xWI3v?Rib3M~t{vHXaR57`{>f2`Xa@01mohT8@ zo88_}6}eu7-t-5c9)hV?qtCG|<;2eFu~=mQP=L&5epqogYVP3S+xT^%{?)th*Ab%H zCEcd>##g76}L_*UrQ=)9}{vdpu}aE~zOvR!#AMAsDn?PG!6#_}e0F_!K;+Rc=| z187-{5qromTENB`Lzh@}hsABoSs0)346W34WFrTtXP@3+S02MPVZEKgZ5PoPW`7P0Rc1|%U79Ids)0}`mJXkW`?&PVO($h}YoDiY@5u@Hbt9#X&lBZ(Q zk>a^e?l3Hn0SPw2ifpRFE=jMgz-wq*;Ra%C75M9gE#7$NWJi^nz`3Rj-~uhnxxOpr zrPA+79J(V|5m+fFGFN03#d3G2)27edxjkd<8lfQNQ?+qmJ3D>}?fN@C%ksA=6K)4s z?3OF!qI0(q-tok&T9j+w!>cKPpxtyJ1{D zN3s@@kQoIdxOPJ6#fH@$zz7O$E$tbb7}=!3m-a4$O`P;h^FOP#!?G_2f5zEPVZUvZ z9XP@3iFu^3WD{SLJgD7NedQJvQRc+#lUWyqO%*g=Avp3S+CJDyd3uik-;EA%| zs%=hy=PF4Hgd7N9_2l&g9Ap}+O04@%-gz|?^(gb!NB^4C(Mk>6)@T#Cl}nDBb{95+ z+KtGG7~0_=YmJ|t0h7|)_*=r7u4Os)XZ##34*SVkf22Ju`?y1fNG`aX8|Y2{q}}f&D#D74cjdf>KK%3 zd&G=*Bc(vEL#%Q7+5dEZ6adv6bJWhTLPc?DAGhn)GH~{M<*`LXZ-cn-kpHL*o7=`4 zD)(ZXr~Jcp&92AgenaNGFF|4fbKV)-7i(Yrai6%Eo=x>ddCA^8oIF>5kiVVuCc~4Zgqyn_L!wtmL>|LB7d1P5~VK#TRl#Yzs0jQ;@(gs+(1>QN15w_R1e3V zecFC?CSjZ4Sa=9NTl-VxHMj24e^Nm44(eTN`VrAfZ#&UbBL9MdqiSZo{vBzH{>OswOtBa4zT0 z-C#M`uWp=3&YqyREDeOm_P82e4M&Yj9lQy0Euc&Ez5}#6gu40^se3Ck%bmATbUf>B zHG!*eUvn#IYu=L4;LKRuM1wcYL*^pqJFrh0@X;I}nC>-&q~TfFjkZ}NS+_=XN<<`QG#TK@90qa4qM{>|n}EY?i^pLR(06Ujc9)gX~B zRF3K63H_%}<7E+Xd||1hs;(^BV_GE_r*>1M5RyQ?G-nDE7yW!I*Tru*+p^FHL=x&)81mvG0bWAdfeow26`p$zEsY> zAkaL#_qxSq$S!b4>7WE#AP~y^D+BeIEU}7;RHGL=Jlh_H!@}gF_t!qOsRsqW;E}x7 zkoxDvY@#>h+ibKA&t{dJy>eSj7vi*5)s~DYsJWSxO=9i z3y#Qy$ANZx!($)oJKQb~mR8D!!m!Ynf*2Ng^j&p9dvB z_`L7YrracgdovWp)=oX|xa&ee0s~lK`AjJ=OYQ7n#*1wxu5xo|_=-1)=AdYf zj6OZ$9jwU|eD$m5S!==#+e}&?ddG}achlpa|S_h}|+LG;So+j+8B7 zt;>8ooD?tv&86C7RD_WT&!6v$dXzO3XVy#ft)vWgcv}|;cP`VD3q;!h1bK8m6~4Fb zA7B&a`$V5yQE8s@krOjca&&4btis}vbTe&WO;+XiA<33V9j`;h;sfWaWR>b2(GD$Oq?=v=5uO_Lc`Jmq`l z{&rNl6Qmp0sW%ZweYAT2`#f%;3E_SLs)%+6Hs z#U0NdhQY!G$EDvuH@IHk@4l_vs}iO5bnqlZW;axLd=m!A%ltrz8;3qgs@p{VIX9%* zJI{{(5@uLL+&u{6a}$_CZ7H+|iprLC0C_2FU2@fmut9zL#|ps%Xu@2cU4 zT+Wy?!0fjrwR$~DLUKd%=`wrN@Z(%O6K!^c|6Om8|2L;-khMy4PAT!waH-WfM@(U< zk_ehkKPK+i+Q5_yR#ZvMWspjI9=q;EMrum?ufx>1q$aOfZ{5pO6{f0i3c5e)uVK7@ zxF!G@A8%teIAA*)3N)B`)_G6fR@I#9+e{0$SeSu;WO-CsRRd%;Qd3{Ep8$DC5`ot$(8WqOpi$-b*7jB%iK^3>uGM*_BiD zjt$_Ofc6%GLiIKE6)<-PS6;|`39OX-sK86;y#re4b|NOs=E8L3*XtYSHl~dd7RJeG z?UYR78j1xIrl3g>#R{RO;WDuwxoie8i~5`ON}`d7+XigE|9A3PKcbdPPwxJsp3t@m zv1L$+rwn3gdM`1j_Cl+tJ)&=wp_8Z7{n01}j`(gLuO5Z9JbIRK8CHx@HMWqhW%Kwb zrys^;`KH=0|3qum*K7nl|Y^OD%Idn?y_b3x0q~D2ss`4!li~$Lt9|&grw(>}U{?jfTw2L+6k? z0N#uX%*gaDD^Ih#mmXBF9TSqs=Kbbf4%p{1A8SnayxM!xi$j^eRFg%nGOp=~q+T;j z-dI#4Hxn?WbJcQfD)KbNeR4taw?&gvE6e*oypcDO*%VIrqDR1~axfjE%>DC# z-r}J4bbhoEJ`>j$qsl{O$7{tm+A;BMCHq5YYskDT4>oB)m-i7l9Z!F)D;rcbvkD}9 ze3${sFdC}QPAi}>_BPmSLj6-hZyEfg16nz6W4lBFhVDq(`2JH_-@_|5ihVh-m73oe zU~eX=z3Z_C&NHOM=a<1nHYito0l_ZnXy2u2wxM#7m+sa8BE#V|>*yT@&dQvJKl|vk zt-@0EWys^25;=~)iM9Bex84k3edT8$*g|sjUyaE;uGtyKKPhz$y>vy?KgT~he&-(B@{l}Sti{sY;DU%vS_rh?Q))VuiY4ZeuP;27RS}vCyQ4QZAF~8N@ zAyZGtXaV7nmSHR~pxlYJ|KGdW+V`5@%T=+McaftxS__?W$ z$!wpwcg0XBQ=2(`zD>cBc*Lg2XeIrJ0A5^3P_%t^=)W0-S`hx%KoA4DAw%b+(rkl0 zK1ZceCwp=uVhZ9YnyKjZa1~f9JEq-PjZ_C{7kD-n(Xr z!)W`*6Hz|i724-DSPH*OLF8T6{z=)|dbtc(j2!>O)i~KKPNXzV?T=&A4<3jW_VJi1 zQ+SDuex7h=jeUF4C95*?-PzeWfuR@}DWF|JNQq;r7$#<5B;nn_`P!H!-Vu1axD-t3 ztiG^2p@e5vCCW?-GfKY@ICiXfXHyJ4WJPA8+|U~dpJYB=fvmtz4sg0r@iDWOpZcZf zAba4gd98S3{c*~&(Zy=lB2>CH@54l1=r6GzgdbWZFRSi7-3YpGNJ-xYZx+I6D_LT7%1CnOr_pEHB1@w_WLp`oQPvki)miV1~5HP1T|y|Ud-@Q* z70E3f9PX4yLSjI>U!P)M(lrYaphFNtx7kV&bJmg{(3H!5RP*ybU-()4^K$`@Sfj&R zzOOMkQP*+=<5Ih*(cjIYy{69Q^Jp!GsO(H0Z3P|c#kNt5rBKVfnAvjkrxdiVSWRqK z?~}Gkuab8QIiVU>=X1zpG3;0v6k~Wki|^~S<3QuTo%7Fz$(Fm@is7^DV(plIA>^)E z5$(ZmKj}I>EX^uS^ajFFMSteH_@YvWw_{$YeR@mmiKUmJ@e21?^2`Jby z%6Q)P;gYM}vxt03HVB!Oh-qCyPc0KuyCPU8tDcLvBNUzXFYbM1efwnf9}n-WrgGKh zj|#IiH+4iZUZg>@r^rb$<252Dqf)xDp6L2-ENr%WteED)3F8wku0Xs&n?Z{Rr-)x4#mMA&Vdr&)QXUY(<1})d(0yrCU-^fcjN603=86iD z!V0E*_n$PS70I)``D-&!u22nt2j{f48|Vdkeu3$aHkfAyk~0nUA059;6giKfEFmPx z#x3|JL>Vwd?R&LRL%V!u1c#P4{X+1k5spi#Mdg(5(lRBvH#34RyM%?qwphSYtC}YF zvyzl(Mq*25R|KsQ^+?ssfHjaK(L_ib;q?MEw zDS-hZ3IYNGk|R_kCydSkN;lGy6X~vv(MU^oZRF?}Y~+A}@AG^AfgQ)Q`+lDLy07az zKWAt(2!wlOoR>3Mj%pk&5l1u}$gQ0CRTB&%V7^X(^Qe=lx!6@9jhjH1A4At?l(maIKXl z#W(*(sIuF}_p=+r!VBB&=NI-g&r3|5OKech`}Jr0z(Uax6vF-J{Kn7_LRyLbq{WAQbRcZ(Vo)`SmdB-)= z^8sql@b|81z5JqyDN6MnUw8NMBM}k}o~4zsMG7WMlrDipdMwo+`z*7SKtWTBXcf)i za(d>?zlWb9Uf&7+_E$$su)cVx=3QezodI2@W`c78g?bW%=R`ZEu@`}Wxb$=^RY|XV zsS5{kjL@w*+!^C16zF z*j7VMjMnR;L1W3rgv1i+a(5EI9EYCO}XH@SqxN>%XE&Vd4V8edT zc7ZVqjp>l`qi>!}P_0fMh(W7I*1_s>HE+j#66Lu){P*pZAgq;PB=}vKYT1XB`Qm?M zB6Y{rwiw!#(VV&U`sT?eZ)vBleT`pEB!y_5LJlc(ObW*4ISXqic`8xXA~z8jW&2D& z+uA8TK2=Wlag~?bZj@n7I@|`&6V68iQ0McWd*6!o%C@=+Z-(D z!OXty-$}fG_uM`tyxr`#Q*Pfwqwzn(f+N5kwIZ@a?5o9v(kJS1n=Zu>)}NM}?S}d& zA?jeus>Z;5!-e)a_{yT0GAGTT{)U_(Qm7xr#)1EO&QoN~li=A(TLzsk-4hZ_Uo&0g z-S^v1LhTEAYqz&)%Q(6u?S54CfJ$`w+oVpdd$#&+s3M;LC|G;XVj;1KBo(IcG%0VZ zOgGk~$@i*oL!ae_~r?XOYTgEERcC;p5QFz;QEiOrKFWo^~1aN{HGD~uKScKP%qH9 zmdCxtPX$fsC|Ll@uYa^UfsiwH;7?s{I2uK+MQ3JSu4JdAKM~nWJ-wX%-!IH{=<0?P z1cwE&no@saolnH%jHAy!;HqMnKb!#_IWHg((rzRALple-%k_@o6 zGd`_(K=xhq;q=Gm=!Tq%Izb{So>l%FJ;p8N&pi=n8+h@*hdj8E z8h?H;L2=z=&fW_xnPh=5Po^_4g9Cg0yMZs29CpvsY__<(M??WFD5$RDEX*AzZ^3+t zc758Bq30$I@#)Q>oqah>)#pLM0VnQ^c)ET5^afRgDzHV*_hSSN*0&)#)#i3m?p2?A z6_(8TTTdYYt{Fy2HZK}kc}YC<9_Pm)S%>C}ZI>n2Rb3NEaRbAEs;RZvNG%~jn(nSg zQ8d=q!CtA;xG3Vbu=s^~l_gz9L2rV$@2Sc^GJpTYGWjBg`pu;k&5RQ{|F%Wi3Sn0p zS8M9ucB%|XCm8?Cg%_8=nO(pAiEg-}-GWa=oz-jt_ncafO!w&JpOIp3HRbU!PI=>+_h*HX(#y?Aux(5G$=RW%tiQGiK=abo zyvWMGC7S5wotD<=p0IV!)gU(usaJ4qkf<%$AnZhRyLvrj z#-2Ri)=!RzAAjd_8t z9uTYT0mh|cz`0OaUkv22;`>=E-1xEuK%--6C_If<4Gp(KR(eza7tqeW@EX`{z84i2 zmYOWmn#qMjAUR{Ee1?Y5-K}!leg9ID0KvB<#}3pVjK7LL;cEj1Fryj|^`=#asRdYn z^bvl=>wStqiBc$Mi7)&@tly|NwL_C( z!19UuJu|p}lG!J!*E*4*&$c`ep$w(FjH;+b?VJVD2LXFMu%ogZes8%+u%Tv6B+TqFF`6LIjV|bf0(a0?-WR^EcxNN*_XoupgWe60QtaTiST0BhBq6b{x$X>)nz!X@%H)M5~pm;HU-_$m!AVuDRE6=1p~9H_Y+T9^cgjwy8PY6 zBL=o$-HGm{LJNFWpJso5{SiYq4Myx_{W2GHdy&FVoa703$mH2fXSqvkb}m4kYJE0k zdPxCB^NRU`wTo`bn?{|fMkSs})!?c8gNWaH0ErMANL2QLR7EpUj^_-U>9OsGs-Nq&Jb9o5p0p?Ex{fj3i zgojVVWUrYkWH|AB%KWfiCPd%+HIOo(V`*AQqE&Yn`hAfOm_O|YE&eCmLJQ+0_UCOX z+~$b=8`_?tP~#sg;RzKI`*E5gB?IYq_J)m%q5jJfSj@pX$Oqrln(cZ0Y8fQwoiR6X zKoi8IjKX_#%To};@f}!oB4>};jp`=E7|F$L$y7`)dcD!jE7jfsmlq(l$du&zM)b(! z4&fQdKIV@Vo#_1t2VWsn_G0)ln$AW!9jcT~tSKd8R^Xk~E?5N|=ZX~(wL;M(OP^{{ zUJ&4l6XL2-HGXf!N0v7D*}g)yP*;^K(qMJnaZcwP>r5!6sx}cS4Y-AzaUqd|&nb z3yH1eCavM3_iOP{Y1^lyVQI$&rV@L}xP#cpqgEDTMdx(uJ(9snvrm^fy#q|!qHqqT zPH5VyFb76e&g3Ysu`M>f&pM*3&mYy28b!N2X;(5P*GIc1Je;;hy}-w!$)<|ht}DOg z6Q)|8`;96fT4S!*w#<=_?T$!}Cl7hw{={PcblHrTAC+r%a@DhRrX#~2V!!zDxl;gn5Eh1&`g zSNF_~X4Kijy8X}qy2@`*{8*a-`A-!! z%FolV5weP)h1;jY)Xl?aX$BLwx{8EoOJ5oh=^~tU_J;p$k~yJq2^#4ju{b-7?dhZm zG~TQHL#%J&b7N^RD_q%Y-b;6k2Wu|5dPJe*AbZcvqz8eH7$66@JDg3BaOMt6u$RqR zBZ!>*xU6dtvu%j|CNFw54!?ICdu!XBn!bK{|CX({d5}GjJNL-OAw{hQ<&`77#@dH+ zgp73)v$L?ab#I<7790N~OIdnIbPr-(9VQ=@=k^`&X}fgd`POPN!7ih^yNRZB=!eR`1ZmVZyFzsE}y#e+WF6l{qYkfx?D(;EJk4Dz(ukve$WZ)Pi+T$9!X*qy?&NlO&$yeXjqLp`@oDU zYm(w)vZrmtq?q?x6h)@2V7QHsnZTqG(MaBYA75->fh1=qq-b=D;z_EH?S2SCr!tz0XL5gxI@@wyi z{DYZoKL-3sf^}(UT4<<59Ws*D_NZUl!c&XEhk6NCX-DGpHI4=WNt(cyn!=S)HW z$aV&WA-IuqV~k^C zT;WON3Qzx3jAdi}thrjG}A(%&M zrdt>A1x(EgExpCrKZ$r0#}OiN?Vjs;i&VHvl=*$Eo^g?Y09TalNDPH@j@fwE=E!3D zyGQgB|6Rq#__&xe>xx8psFYE)<+}ROOc+MDhM~I6rm=r?;-x=KOa-Ix?YZ z%Cq`R{MVE*WbVx>_#atm?Ta}%-n`@2(Ip?Eo@8f=L`nR_hU!Exa|Nu^a9~+quTyZ# zIlplkrm*NK3QOE@7tX;tft1uQzB=|LXntyXu<>|`Xy-n6il0f`G~8@qAzoKt@vNov zXf~D7M16jJF$@=fv}G3cyVRF~$};wW+3w|yCOmtHMePK~0dPhkD49QVj_yfA&vDwC z?kc+v9Us~#Z=UV1oQ5~~VpnbjXWNX$-rb};0W+uCW7(j43O)*#5~Ybau~lLygN(M5 zw!af0BxQLb)^vQ=Ei&ogH}6oxb3oSrnnoMGV{F0i!g*j92bYzSxTJi;zJ!M2pgXr$^B{6PQm@O7e#)&rG- znX^_wC${QA_;EbVg1T8Z&Amn4V9SF}b=~3drGl{Z4iAG94~~hQh9D2?4u%zbvRXKFm7P1f z(+;I_#*Z_FDjcBpDOzJ7xnkQB860s)$g1UXm%JB{$Sc$Xk&M;T@TadJy7Bp(NwaL< zD?GjTFfy2hw&hLxWQx|xb>89TEWaIcQZ2}}obBx#u1Hlkcpy_}x=TM+C^W1|%EeYP zI!Do?NKrl~b+@bMJj@FCVKFa-=DerE0P#6$RbQ5sS+!YM8vACjL_S?rh zte<6LX%;cUEV_{hnG z(SBR*UFC6np!6b#J!PBBacqz^s)fKC;QFADsH^uMJ4T-Ef5{}`z<;q(6?kPhXm-Mu zf=Y_LlPOs&n{^9F!&1q!tvydpxy;5=MwUQv)X)6wd@&GzA~CBaAeN@ROmcSreS6W% z^C5Mj2uKS0%g)iiU3*1Nb9e}Ui5&e$rtK1Ye0)GxY1Y=56C%#7kt*g%31~8@{jsqR zh~I3`-J$mDm&sGpY#x`Wa+*>#IvqJCi9{e*O)2y9!rwXYw$$Mfs-f}!GdxUpcI=jM z8nSG=C7-)O4`I=pHf@&&6GH3;o_!uD|*iXDPVp)x%p|cU9`Se zSE?wisNdprhS=;Vk4jZRV~wG)Nh4?c%hIyUq-yB-Uco zCR~c)M0^%{<;u_iu9IJYOj!C@Bzpqte?@fh#j-y%H2V3mwRNgV5h_tzbW*`F2L?W) z{oY%lou2i6Ms(Ws9wIRFaoGLkMLN%T^GAvf?UVjk#UdN~s~-*uYr)>{MTg{Kn1p*0 zh~SghI($kH$Oykc{T#coe3Gkx)%|Ukq5uWFH|4Qbo{vBW>UTz$9t<|T5Gl>RShPvs zO`ckK{V-2UsjcI)Usa@oN~I?yK&rX7Q)^tRyLEc*o7Z}xQClz$=vj^ynq~#WraL}f zHcr4hv+j+;o?vOHJBlvh@5h2GGJ)<@ySVI0uBM1Ul!OW=MEn8sg}`DB2Apm#GwiV^ zELU7Ku95L9zJ1_?CX^{x{^{gV#kH*(c=a6Bg2{G@nSX-Q|DtJH?x~twl5-6vV&jhd zV@Q0|8^P99SN&H#V;e|R=*vdn^^Enwr1fVUAM%TryvF0ym-LGYJwbL1_bGZpj-kXf zp}e3E#X-=wj;PfrZ( zSfu{Ci#uw>oJPK$n5A5JwcPUM^_quER0g(1H>A#-BCP#YIbZGAr0ZGMl?bD8z$!Si zXV)I6j;IMS1;3SYJy#5C>j-y~fTV4^2X^{uruY3PHJs#Mi=7o($Eo!x_LQ*qvn4oo%Nc6(`s&qDV<(~I^$8jY;Ek~RlbUq2)oB3s);gpfk z|uBy&!VPR{-{7$Pq`~4mH=fJ(bB-(6WxuuS>I1*!6 z&U-c_uVV6*Y^AV5MQSNSh~?o1C7%$|{p?h%!^(|UkGDqQHFB8Vrk06yugV=&ZA-xH z%L>J&1~@)z_Kq{p_~bZ~IvvFcshLk#%bdka))Q*kufwb+vG~PQ_7FD<2e^oE%*S6{v@ylV#5=;9`kgwxJ59PYX_=R^e6m-mTDpZOU z0t`PtR`w_7#=l!n$eV;4kfaG_CBHH9u>{TznUm1Mj^|}btLNIDJnXo)--17FYYME0 zy<=s0eTJ{m(aJkE_v$r^hyU4&VrM3i*Ab+`_CN-?+i{C+B|}zC_~V^O+f+xX+gyy) zn2Itt%O)i%VaE3vUsry|Pr^pF^xj8=I^-w8+k`l_8C|KRx|oKt^e4F{#O2I7HERd_ zHfb{ciyLuYuP(`&2!10yu2rKsEtX_voPwNPWfLMAVd1yIlsI)QWL=f2k@1D=^vfk9)3ipSf8`HRy|8c9!obf7}3AdwRenl*n&KQGiuxzEG=`Pe#pQ( z4FtFJ3V3pB`Ng7YK_V*!ZOsB$kzkUB3;j=2!=a%vUh#HYX7gY!+Mdu<@uG!2Fc_&iVf!=Ql}pwY?t!O z;f_&PgYco<{<#Xj$?2Cg>Yu5{^*AJBDfD+W?QEF!Z0d(^jr5IYD)^K%?J;sP zu2!39>m99*MRbVeG47jS8_CNnk?mV{TW6*$=IIuw0jABISrKH`JNDD$qDQ z{MwK~x5-aCI!9z**(W{ZT^ih#$^V|`>3xX32~ZGd2Z5*|Xz(!q?YSkVVYQ2c}~ zj2s=859qU++k?DwBu!!@HVkBnWrp9!%wT3`(t{3Me?An{Mwh^<3R%d=SqyNVg52+f znP(UFTfwLN?%rjwd5CCPtqGW1zMX!&Wbc!?I2kXSVwL|`tIR2l5nK9+mL>0Yqrfqt zddoqm*uiAOPY1XwXa>~(d0jCI65fUI775KpF*%gUbTO*#w@&t70rlKW1yeJGr6!MO z_~pn^e`GVC>n4tSz={Kw4WBniGHWa-8&;wTvdyaa1(ToHD`NsPeyV9r597(A@>06; zo{k1ft#13cKHLAX2|%Xgz?}s~c*Fwdgdm6)Ki+}5dO|G0>PItCLf!&!uI%9NMk2y_ z=0aTXfo|37&7_zlP@nu*E;xEOMfn`H+FBNKd#S$U#cpzGy)8lOk3Xd~UOCVHmuG|4 zJyT-XJ{}&4AVNXiHmqe(`|`4tYj;dQ`~>yCw6wX)C4%ncB0Zz<$~8>}Z^^7oCg>jI zSgOSQzdN?$8fq8v^Luf5w=(lI>30lAjue=YEnj>^%xk@b)-tZ}_&~bDI+&^PU4p%W zu7O$nJga+8s*u=E+jxFPAUzz@8yq0 zfQA8~Zor-&C%{(h>uX<89~Zwcf^I}e${WjJi!q`K9(#g8PH|0#=C(hlj2x6S+3kEt zD3a?7KHVg{GFS7W9%6di!jk~3uXRVV`-vIPh?QmKI25tg7=j)6VMZA?LudKo2JQ3Q zFZbgi8_oms%L2yc|KS=A%`04}^yy1^2N{Z5T0k{~me5~Bi1HvMmT zJ&gE8kL zC0J9bW!y7o#=Eeqwc zzL%He`VXyen(OwcK+91iwN$rzTGP4MCMtd|HSOu@lgF`ZGvFJaLLBc>07+4SgL#Yx z5`(@{zQt!fOL$|h`YSD!#ETfxh_TmIhtaM*SwagLkh9`(rHLwg$;dw1UO zU{qxEK|NT#h&h`vc0_Sd!j)W*2v} z7hvNWnXdX!+#%R1l}mpq;P#JuE}8wO?wO0_mPnQ&;~rs+2)~67_61#MoO{r3Wowkfn^Qn{>!vPF)Uw{9U1~BdedazhzWC^p`PG(zw-ox%jxs>y7k; zM{+|epLmP=89aoLMM)WeWjZSCNxn14UEQSXjw|v0TC1<(TB8Q~{dU8ond{os#PJb9 zr%|5rKDD6boN5CjSJeI01$CAO7MBI8p=*C4C3=}D}f}ZNu$*Jkxk)2?%P}qA8x%gc)VU+WOSj< z{afK}JKpNLk)XgtQNOf6g#zacNeXX`?TKuX#_x9~z}{cNuNa9dD^r=k)pB>^;sxn- z(*y^>Jlgg6bLAlGoSl6sHKqvs$+<2w;#-HC^M^DScR3Jy=tM!FW|_L4k1%|C;6RIN z2bdBk+b~HM|7TQ2y3udp#nxN4uFogikH(F>+9x4v0GnWmQ|2o|GU|C z`@T_J*8(o5BU13xJ=GPKY0F8(Ll4nbKc1|6@*~ZJoh-zWh33HK-s6d{LY67-LT>X8 zB5KxDx?(`0XJ7X3X7%qe4(;^SeLdkuGuz*hEaQ*~EmJ8k8apa; zK9DsWK-JdizdGo(0sZMR(z|7FQ;SZfJnQ~biNQww$=roVf_%;cst>={*n|D!6{wCG z|K~>(dZ05AU0e7-vnf_}LR_72zc#My-RD>1*SRfqzGz2x?)@iCHyoT7*rVnYJc(|A z_(JU^cl*1n=nnb$X?Ag^knJHcHD8V$13W3sAZ!&MQ&tLAm5On*_dYpbc5>b|=97HG z$W19gMkbK56q7Svgj-g&bKHm+<8xk^*DpQfRda7p8S#5MbreR&Ge*+;6=^+@v5oFd zyE*XmH%Hfi#ro4n-G(dtp>iebjx*i~3A%yJ2(4)dZehV%xbPS{t1sQcO@a_1SUCM= zrJXzr62Fi~mt0{Xqkbd7xQE3ilCj$z`F9E4nDHRu@I}`Bz5}(R!oG25&0#lpKy2`& z7U!}FCG&5SZ4y{6A}JDhS5i7@YV4Roqd4lPKn%aS;j;&reowzHt1;9dQ?FoH8R}xy zI$q`bPhx0z=fS5+aVQ-#pWL|iX=cN$aIRY3WT{_}Cv#^OJ06+T{jEVGIiUcIIg^x> zu}WW6{Ib=doUKfr|M1$du6erEBNI)2zo|W~5(ivHc>eJmad8EO1LIYeh9k!HQj{tu zS~$z&0rJx_KE*guKh^eTX?1|4WuU13oM-PNj+TwkIxV@ON>~$4yZLxjYF@Y*Azq-Y zBmZ>NO(X)2nC@i14O1TVug<~y2OI+;qAgv!b4!F&+<#7t$s=B($sQk+$&%V0KR~P+ zpr>;Z@h#>c3H1xr5?Lwx%&ZCxjr~VF4e)&9f>6IFb~3Pr8T|a^aqwlpoT4w)XLCgM zOO+pmcfrtsm(ubftwIH0;R4-+OrFd#%mnLOq?OP9?i&6-lPNbbtQI4&e5bvYItRb9 zNQA46?x)$V2E6?ng7);h27l@j;COrK2=5sR%2tNg6x_8#RolCP5u|2CwT$$ZF0j^Y z>+*C635sofuze*1OrCxb+!_r5SI@ki{MTo%S3b*Cul{`drakFvl(2yRaU^R*n{E!% z`&b^7+Hgzr@qzS)cH!nQIRV}_42U6tuE=!DJ(y(r>k$}Do(fF>?9(#trKw$tl;j#p z)r)1wDBmBUo??X_4UE6d<>Luk6!v7G(r~cVxEQq?RXu^^M`}j#4GGyD%ZFb^Hj(@P zf;|I{31J=-!7mA$nyg{{Ct#3PgVShypGQ5MO6U(&CFTX=T;nw|e9xa178w7^imI@x zimf>|Djs5<4yaIBsnJq%*0}qGm3Ks`Vxo#+-H3$wLrh>Y_S&6`BtxJxf?K!avilAZ1 zx)n?ZHKGFr*HczZ$3+Xl)QZ`pB>qM(5v?W_rk@rjH|Kl;>Bz; z6EwRzQ2mv{_eBbMF4FtU-ykCbCH6)Z;}}eVt*me>Ir3&J+!KZGs`kX1VqW(B8rF&C zH4`Y188{%7JSkA3@sQ=YFxpPPLRC57xcs6wsTDd7u_X{$&*Ksw0TEf9`}9%Zht~It zKFd39yDYN5ha7HK$9(D?+(V(V7JsPe8(1fLmgr4L>_lo8<{kZK`orR-k7G0$8S7H@ z^=k%P_kZYpA2vRA{E-Ljy5@z}>_m@I0Cac1)e>C6;#q^`?umsNmG@f~h3oz?zLiDfwHqHkY6V}$OE6X0Oa9dtv^Xev%a|s@9tX}|-$es~=No=fv9o~Va zZwl3&KstF%WA+yVSFo_>tsHy3citWxz*YpxeqtfZObJ1{DbG>-swHLK0=z8^ZhW%a z!y#AVB!-cz8zkEiAjlNz;pJ0C0wE^izLrNpAwG{%hHnTfaf;ut=BnWS7{iD?G<*+q#HIJf$(w9qbyNVtqJ zs*ohnP?fGR36q9Ru|4rLO_W|_zG0gE-9V?{@xddXSQ*B5)qPbleDapu`B_>A9Q?zk z!@Y}vi!3etFm_@(kWst%kR*DUnvdBw@UukFI|IF#{-VX&k6Eflv*xhs$7e4(61wmD z>kd}KTBZB9KUa=5+ComeEEqeC;1Heh*jd@A@&$!JL{W1d*y-#G)1IJ6gzX z`jq`bquU?R)vv5*6C>W-%NE6%H;HCU_m3C-9P9nS%|54ygUGqN*Or(Lxk)>Fv8Vnc zqm!T(m4D)ywb6m52|;N5r!pZdJ}6^OVb~pKF8EH&iSLz?thMx`N1QAc3O>PlYblB! z?E6$z4_#Z|tO9Z153>hm)jPzDO-w;|D|ypmMpd6)-RVX$bB;%qm;3Mris%n*4^6^m z#$>;r)PFfUZGvy_v~?};ez1J7=})ocy^v4;pdj7;xtG6Bu~}R6H~`q?3!i^s8@$=h`E2@>q0}|o@7~^3TmP*kYGx{|nNG#4n z6TcBGv{DtYf1wPn;4xf^JPp6<_76awm^7q*{xv5q51VX~!+PaJ_2 zN%K!?Dy{7-7w8nk9nr<^&P&3VaS8^L4*SQ{JUg0)+11Io$10Z#XCPF0*pxy2Zc~0R zzlXde0Z2cT89)oivM1$%Rk))VQunWuQSDggkx zP5lHQZ_AFBxi9;KCU92`&$5oo4Jzw_%AX?Xnhn(@xs(%ePTNU;BZ9nOLX5hn^e27LiXLg>T(`UEK03?lu)%n!h zvOP!X`;AY@qq2OQ<>q0xcoL;^5zh-E+9%BmeQ$hIS3G}wUuLM=X z9#<`xaW&z1&=I7}ai>p%d)-Ajn6FHKLr>)U72CqRs(iGQuZ3-CE&Zyg7L?`DlNOuN z_JkjI-wwL;KkMqSc5eaX75cjEqaGv8miVdZ?zD~edD<0Cy%D#4MspK@Ci-R0Ki@Y+ zt=e|}G3sKBD?5VRw2ck)f;j;+Q8L}Ww2e(~%8IzesGT0vPY1RuvBnmJLgwc&)f(sp zcliwbX3&%AcW>-oENpr7_Q(63kgA9Gvc3`Zswz9w zv?DaS(HN~1^T|D57!aAK9ks@jBe3N^42IQ$*?_ua=;|(h?)1UVA|+xIjW(CqBl%## zJM(HE^lzCcLEQ`KD&IbdSs}gkxPSO#phnXYCs3P-h$jJpy-+h)_$m&n^$& z{(jp-c8GFx2z^Ab1A(eE8fD_f^HyAe(jGl%TceVF=bn?Ux>i=}y1LIYPG5spd-?{- zeDjKbyc7|JWFB59O5KRp666Yy_?#@nAV+KBlri<_odff;pv%PidUFBfLYcXS#8z#} zp^U%?U@5LYYMwut-I>;Ewcu@sQ?1(DO=ClH^1*5g%#-M$c5@IH+=>a@bsdBI8)t0v zuJLDFxMb1M5iupIXw@){k>1>9-7wf~?@*a~Z~b_3JIAN&K~fHc#6!tbl&)EB8R1~4 z<}lry$5pFsY$POt`p~?C*@j;8yz^kW%)hgNHEP@xFgnSM;)PWJdMR90X%k)z;j^A#E64F<`*)<3|cR;jP8qt zpj+M4YUj5X;ht-q6+Fu(%Eq~gqGD=kjhcKY`G~Qow6)p>IXAm`nCy4m9&SE}@?DKt z;|p%T9qgIy1Wo}O3xIQPkyNmQ=D`0}X0|DR7m2q|PFlW{?bg>(mFP27=Nea{DqX4! zAMEFMuzIN)hQq`{|Cne>g+9L{?Z?J8Rp!-)SffwMdDMO1{*7uVB){Du8WbgPha8xq+r5At>HS&!B`@-H}SvkG!>Q6<-D`Sy;11^R> zq_-bu$6bC}m<2;LQr$%375ykt8+u&3+P3_S_A*Pd*$Z-|a#M(rj zE~|d+UDpq`7jxAoKN4%#RG}WD2iqx&3$W{W4w3@i8bEqb)Atx9bjk}OA`ZZt8CwTU z24e5}UC5%FCTW!*kKQgwKU%JS>CQgpM@_KQ?{J*X&VFG>5GCSE0x=kiDXcq~j$-i9-F#HU06v|b) z5h&WOyD_^)x9~0W`M2AbV=_61y*9(${+PvOXuCqN7ytr}ZO;@M^G9=dl?x%F`4{-U z8gKJ00QO4PXS=FW${}Bal^$mlqWfkS1QQM{+FK+h0E$nH!abO;Z;AQ#xarobp&k8t z{%NT(P=xW?PZ17-5EXLi&zj3WL=Q5+rlo>>Fz-j?-ePU)#}u`2D@sYYq3Vn7VqO{kp_y5X-s8aKBL@ z3(NLjA`B|4;^hj}{Y&in-s?;pa~6v)jeV&a``9uO5%%sISf$bFOS$m~49)r=b9Adg zxKT25`BJ4LDmi|3TP75}C#)|tUQ#{>5Xjvx_nVNJMhAcD6s6py^x+28^)@0O>ya%r z_xaHpcak;wN*hxyr{+zP9LpLL^dBUr$J;UmH!(#y_l;1^(I9>$5En0!x^$wjkl^4{ zJ8%`WY};VOFhAEi{?TfPq5S@ZwgEXu)poaNwak{)#n*fNH*_#)Bjso()>41o{wqKc zgH&H0Dfhj*(t(OM+ibtOI$#FNGRMvZqx9X*TG8c3+8dcYlD}gf033N_(?n3MyYnJH z>rgGMy5KY&$VsZuqR>#Zb86Vz>k*`Tx_ky8)md&Nu{ANWmNEMCTJFBm4*3Q6a==p5=-MtGJz zX3*tQIz5%dw0ybZUrUm;v!!hJZC}9d8mYKXKUaS)3*dgt8}zhJAcnkse4nMcw8!%q zWCo)K=}INf5j!VRo>a@qQuE#}FH;D=ecpTUU^p`IZ#icZB!dFYpM;03j5oxqC@ z;mI?j)`;-_xLKBa9ewYXHtL!H`>ha9?U#&dahI+G)})4jzEU1Td$Cv7%zO{OuP zBreLBuW*Qd^eF`}yie6_eAAf2b}dhu+mbq@$DmT`4i6@>n=%L$Lp1+ z@e`Q)p+!0kD(Y@a(VsiCG+vp?Ts^uPyGa_hY+!V{oGlVZy*sUX!Kg%)+D#mPi?o;d zYaIH$YjGfa!WU9Ntygapb5BQKS`|?=m}vGc9`p(()Z#zsqf?r+=fBxjAL$xqf>-f;^r7}pO!36mDuI3 z8-EwR(SH@eyXn7?X$htqyx)K8w=HCPeeE;EhF+B6{MR@XxEHDQB|c0VGLF-p5fnV8 zLG@Et-n3-rQCKUu6dztO?432-&~2=m1#d~YqtkjIP^zgPVJ-7c-eSytbp6tOooZ<* zO1lc=5Xl9$kt5WYUN%_tAK3#+XI#UI^#%J}`HK%p!@5*S;$9A@GO%Zgxm7gJn7BHx z1q1@Qh|Rp(C*5gy61HZXW%i|jZY$9oo4_Km7VaBxD6C zGnkZe?u0xDF8oIZ2Z+8tVmnVFb98u9c4+OGkn>Se)mqS-t>6+!w&_Tjo5jZA)B1iT zSp(Se@X5_TgK3VvXCq z)%obp<#5xWy!g2g>25c<-^=z#gXh}YO!4>BS+z;akoo>jxvgd6s4%l zA%iZnJ19b4ZFZ5CCDi^CYrcIe0z)=Ob4+)XDB99TUK3qdq%)C>S#l^TBFT?m@q5ya zYfXS;v2tWU?VhP_Mt>?J_ZN8XRjq$yLZ$!64x|!H4ELUV*eJq#?qbDPy=cN)SZmNg zA83-K1SzpY_cQL5fyBtqK}@dfhl^J}fKu~RVsE+Xe&-v*rV_T2cSov%LatB0J`VZp z27%XH7W((Mu9*O#yVf(MAiGzat*nWtw2%}hFGtunP)SJ=Xwd9=a#}`4bwPcrv#Y85 zxy{i&@=gAXtLYcOZkfMuZ1AT2PI-@%aGY=|caw+4Wr|~!ebx%&!7cxZjrsyU=k$rl z9IoNQD`v&zeX1QM?xQr))VVQV9FiFV8%nqk`e4^mFb@E-m{i$~H(R)CCemNlR3huA z5SZjFNd0jmCtdfVLX^m5Rp~^1u3t)US6{AXY!}*XJ>^Anz@sP>)7L{I+YxrdO0j=r zppu3RX6rH?@hm1yRVgb!HDcD$wx7rZ)L5@F{r!aX#XCv-`cq+=tysIU9F4F3QWk_e zZn-J$cAhFa={gff{TiBkwg^ga&SehNP82GBmETkxU6l4opwPjCDYGSX$^nMYSPi3aKqAT9a7CkU#HiNNCnR;DTR@erV|HDjq z`kE@AyOiRxl$N7;JH>2)Q77O*dSG1D2)}@|r?@YEt_$~H3mVb%pME1QF>9>)n$-9L zNMp)WY4>T?>O@a>0>DYgx!}n;O-$4OUiO{-^jL-7y1*+r5E|{b;nrw&bBzS-J#-2erfNL!_gaZ0jJI54Np=TE zPc1{O*1o;d*Vx!lJJ^OQ2YI{Z6pcr8$fUEbXD`W#b?qZ*;;>I5t+g%1q!)bHVU4_~A+^oB(!$9`9^5`yaEhoe$SZvc77byV13 zS6RVHiI!Zaow#+K4gIckglR57=`b&+c7uo}W|lOi+IXv@gATX?EdR z*IsG^?d?}m@wP?O;D0yk>t{S1C+WLOOvmb@w-2a)xx+};Zf=}lcrne~zzX;wZXPRL zQVN{aXAG-pfj6a2?Cg?&@a9uoca_1l;SoW~=}?E_|A`2%z*|+YY35v`$1o9Z!TV|wA8f7ew#y=N+`ZwnZfpo@iVE38EwyqD{wE4j@GrEjU&%SCEOtIAMd<2 zPB^iI*s^BFKP7&?RM{roJda4KfGAGtE48XQ3y@W17e+d@cfV8T!>NU1RKmS5+USrhGTH`qS^BU8DZKKJ>LbW|=&=#xb@DhhQRD%{h} z371`!S+;{QL#nltK>aAvC%?)ln|n0*7g2Q;gko3%qs@>FH&b}tXJeAXlI;ZW|GRya zNa+-*Qk^Q1T-2nReJ!N;`wBEHL+$X}b7VDMX{3~(YqD)N+Z1v06N+Ztis(|e*E`vZ zAK{Eteu59HCtz~;#t%Y4AiHc`6b3Nwm(%uwGu{4ZXR5q#F-`dr7r4i{ydc;iPZN3b z3<%D^w%6x2+yVvOWg^L^2SM>m7(0Ugw`#Bz<&qzS8ULU&hmu3toq1&q+Rf)e$Vw^; z`4y5&l5875I6RYA_)QSDy{fp3gMm>4R0e1+I64{xaCR3Ksf1$8pNyLG^$6^%aU43~ z7B`KjrAFz%U*-&(CtwjtPA=}3QO8Avqp+YiHDYaX3N}QV)kEf8hLLI)*4NexfKFdR z?zu11=@x%M*HDvQ;bMgGvVQo>Eha3i@q-Hbgv%R5$n(F6gYLG;DA8#1tYClo2YggS zJ%YC}bbQ>JKCw~Ue!a5@q|SmCT<13z;B&%x>vCJ%wnCo})7Ii2s+J9}yx^UXzJ?KY z=AwgOf=GVL>?WbR<*#acBb4uuwC~VDAo$a++3`FeB!{g{0K0pmSV_9M&I21^0SmLe z5A%BTRc8@$m!i(z+i9$plRb6!S{qxXGqN#1JcUuasH>X7)A@rqeg86*(SnYQh%Wue zMTP2dgiIxH3F@?yxWJFubZm%vdKL8j%F>{K@j5#yFU7%vMX%7Pr6CigdLA}XWa$yo zYg`YjGNZ>!u{6V8dbj?!hOsO94G%O9W zom*HqaViQg`tGyY5V`5D7`$9ixziXbG38z1g4tKfN*no;o&^~)2|mtADROIkNuV>~ zI*@X*cQG&GZ{#ae)V2l*bM>&s$J}s&m)>NWV1#V}htvqZzLv(FfP{80A9XL^91`@8 z&#aizplbqBGp=0*{p(d1%xZ?~)4|vZ>SUcgKn=PMoM#Y38_Ap;3tE5W$M}(jBuJtx;Nc zgTcAjp;wN*vK*(Fh-E|xMJ%Bnt3Ngpl>M>(+!A}!hZXLPy)v{9l!~ka4O_-|TWd%7 zf8F$vy}(;5+F8jyb6=zl|oTSfF)w)Yvc^L;4oVmRH* z*T9cEcWX8S%#~r~iN$-NR`XzOGkkBCq&za^x7Dt6ptlt=$=###0sU2?J&dyVIm#$b zAdceJLH+6}Y75d?xV!2pJUUfH4mLXM;9x=f?KYP*A;HstZSJhT4)rI$l%vtOsv+;k zI~GIMMT`z(7Y+{$40k?;My#@Xsx>ix3@GrYLciv6a(VDyyxjd)yI*Y`dBZtc))QNJ zO-lQB;(sCN@RT?St;bSp6}->CF{)Qqwy|vb>KW*RP8G49-)tYYO!2g! z_k}-ajHe!86%vt_e1gw!jp5WjR*%%+3-i~n17u<$`gQQp=P3L^%`%nkZu{6si?tcU z0WGjJgIAr!+(@py$|uK0Tdc5L+w9Ugpd-4J+NpGqJE-GT4KU6aM`>ji$ns%+5x*&X&J-Fdp#1qf#HE7D&@h2}$6TbR2)C33{( zXDcmFtcFktOhfCMfv)rPIwil+{2$pTdqqcfLzfdJuD8VN70;NK(O8JmingwnAk8f+ ztAUKTy!SY^sh=x91*xUk5gcBfaq!hOpC@L<;YDTz=B56i#c7giT!=|p_Ir~^gev>I z3{xNz>o@OtY(Je*(hCO%CDYG4f{9sKtS&nr`%BoA3{}-}Jzw2_50=lmj9J;dEvpj# zHS^@w=aeV(WOs0|(p5YozmMhu{kAbNu}*&0X2nxl+W9X#I>uZnNkqO)pOM&#t9nH& z&j(rpx3Qp|<2Q?H^9`M6@$s$Co*bi<)PjT5L6HL>J{DzTAwBxk=kk^M9iERMyhxni z#la8ZLS%DMkm|j5rWxNE(4HCUc!aFq+OI@>!V%) z3=HU|MW%sP+1_3yly`=?&@zI*pHajY1)UQZ=&WJ{CZ>8DH$Y)ocK*U5PFJsqJ~{t2 zMgS(H%H379reK9}6Fkx46+D`Pt$95Z${j7@L&IxjO5qn$@v zqJ&@tB@Ii!_l*`E#=cwGHFN8K2pp#;FigWi5C5^t7&^M+EHyQE?t-J_x|BR@(r{s6 zW~dCW)9L3)A3m=xpXK#x6CQ*~F{^Uh+{CUek6Qz&$oY3!A~TMwJ_mu~um z@&B!zR7Gd;SQR9FtgBJu$wP0Cq&+lZkbgW1T!zW-7g|L*RS|9bG{u9w)zuG|RO3%m zj=>j|*4trs$4_Y@5M16xz3&qX-vIw7CTZghA^l}?qoMc#W= zorBP9Hg$UAEkZZejhoIZ+%XGPCVHGTP=`U<9<$mT3`yiibOUv5XL^k>i?S+8D*v z6wzsH3%+9%zUW-JfoF~a7$h#-da4B(v{+BtG$IS&`kIu`&?IsH+|e-7JDXhLRIC3+ z^yp=kUNpk~fr<=tjMQ&Yy`nljg=PBwwsOsYr)0T@1T)5`x%&(Jre5*w(bH4fUB>Hi zj5i6YwK1pJ=SZ@vC!mQ)P8Mel$|REsDK;BkDi2VIyo;yQZI9Fk5tQ5szwXw&5!(E9 zOOu-nRP`+H6fq#6wGBFRL%N;irFFzHWL)gMTGkCcYnLCXs{l)b6DMv21p&dg{97pM z>*}KxxrNj*HxYkd>a1fH_r8Wpb=hRh8@vad z?C;CHeTdTXFqdWjz}{(HERS}Z^S9>oC`Crqn2uVz!Iw>b*sSd z94eS!fY!Hu*FHTXK_c%31+_uc+=1^k?Jv7^5`F9yGtNbLiVL)o*$|0==Z$&EVszlr z`U=!CXD~zp&)!o~zGd#!%hT4MMTVZg*|54wW7ceMqwy4pD*tY-e1X^fCcQ+HF>rHW z0Xv|;LhC(f=%8p$UPNv7kif%yJ(2Hx)v-US2uO# zhA3ISC=LZ*eIQ=u5jEbXSt6TcFwCOz&KGaQ_cIRc;!`v)6H1@fe|vIUR>+j?M5shC zMf0d==aNHcd#ZbC9pHbYqHI5b6b_wImO>?UV&9}OS^dw1h5X z{0{kjvFX9Xou%O&sFG7qto7W>(#VWyPmjS54d%7AZSaPoN2!(={WybnS%Xr;tFLE| zuG)eO~m~d4-N&bM{7LFTG3(7vfiA0XX2}^4@WuM` zh_8pdQJtbIHsu$BsqyKc7*~#SN<1|j=I2sMi3(x(pB+UOH9v=S(g$YsMMIe@$UDxH ze0~N;cOu0Ni+Pvr!!bp=OVb@F`_&6&S}?lnW5hS$GA2B4a{mgnq8ktl7;Ix&&;Dv< z&9k2Q%R8o9X7Mr1bv#)>!C%F_-&ZK<<-k^jc73T|sMVuFVlPDu)LmGR&~%-r{N(Cg z3(-FhoYrYI+6nv$C6fwalB;JErCL(Ipbqm9B?wv;wY9LQRs5*a^_I9z#yI>!)7jr> zRVR%hT^jFcAnC;8r22p>&l}Y_8Pi)0Kugi_!V$AI4Ue!Unl3 z=-T>=Y0o=ui`e5kmaK1Ajv9F!T=gJ?syQpxz{k9i6o7%kFK z-MqiEKIykd8l%{NI=fs)%m4H@M@rP zq?z*>JH2!&!C8o1gu6`}bSB znNjZ1RojF?km5eYRm_JPRis7I*R!R*YXyGqI;*c!$SZ-uk;^foq!f1oaZUXf|T^+UWw7=mFDl1S!p zTHpy$sGAKEvC%6?<3)X5#1hv!m06~L;bbC(gxu=2E2*BM;YDHOEfKt2PCuGrqdrf@ z-P@i%@+0?>>+P4yNtD{Gs?aNzMtn$msC&?zzS|dKgdHLzm>6xH08CH)VMO%C~}?D!bPG zsjx3FlGdD6**%sQ{mRJ%=luNf$0OFLte;k{(?(3Crp>Ecp`2RU! zsaL;o+U0mAqgU^jGvCh`P@#f*2m+KBl=PX!+NU~Jtvzcl23G)?hvB((*(5JW=<_RW z{qKg`OfqSmqMo9{P$`bp-crGnKJ4B2%>>MXp55K4qbltmX zmA=eTO)BM1R0b2Z@u(gsi;9y?@EUnaL+o1B_YCT)pu0%U`X(kii5`2g`lw&N>%*VC z7-wm?k8N*!e=Pfia)ndtqVu@3&lWEsn7-1^L>JCmS6+B%yGryTQ|20V!3y|>>B~&F)JOCb=_>TrT6!J%cT` z_KU-Dn=zFw^0{F^imO|^1{iR zd){;mIp)YSr;00LkyHB(C#s+}j1y;bD|5+iB#9BjxgD%Jtj^>0*WMyhG_>dQb8q)5 zd0PLQzat*=>6iPco-Z)o>0If7z=UUdInPqv`Qu@v@jmJyINEIDIX*Xh-8}WMTWou{ z$mW6P4^j-vL`zWHV{$k0k$a4I*)Xkom#OUsOH+lYVyB^b)`OtU@60+={vpcl0-Uw3 zc)s*N?j$;oWAevpMqm{Y4H%S_fTQ-S9?e_{4wP`^=a5^2GF}n~*W;`LdC^Em_r|{E6i(G&icjEkd zSg2imk6m?8it`G0iZr%mrwZNghUyzG8ak1Z5{>xCb8_YmU2&(rG)mIBlp3OUNvJuZ z{%?Nmh1Y=U?LxZVhDW{vC-0jDGzFJJQJCL{Tw@6G>&#;891*C4!tJM4dW?12m$(KF zcs@T$(PLq3JTHFQtsOi3NwY`S$G*s@+`l+88d>U6wE{YHj||@PUlhZuL`b5jTv;>0 zunl)lt=1@EC!KWiKdFKdLm&DczhsM(X5>-~AJuyz{7_Bjbv#ef>^_K#Df=zB23+QEhD|k=06-P zk-U;+l7Ofqxx;8>GJHx=%tsjNiIr|~Wy#>}(O@ z5Kb>YOvx&6N(m~MH;`=qpzc^@x%U%<0nfRnTvLn%H+I>|;Nrvmf^{{Y;dNtld4{k1 zGbE|x?;aPllNJ2(`a^F)7e7&luoV>UTeCDaDCd_&0=80eMhKySGZ`t|r3D0vE-RI| zD`@fdNB@oZVrOhkP?jz{(c^)P4UghSX+`jqsD?{ zUZjD3pWdE%Tbeh_A$1~5mUp{HPfLmYY~!H*aK1jf(sz`^ik;nDDd|+1&6#^e3@iYb zzr`q$KM@Dpa#C5bzdkfME~Zl|57YUbQuxrp;qVXlzH%~96{x9nP z01demj;3AtR}p6T6wUof^tGc_J9y zdg~XgPO-YP((>HJr-3Q)6K{G!tY$XXd96HcVNQ5UG2Rc)uREAzmV*H~1lGNGFPIR8 zSYAp&cyWBuC)zGmq0f*7O7)FaZWq42RHr9^RM8i1Z`TY)e9XN&p^QGAQ8?UDYl~%hxuM5IT~hWHC$Zsi}-kv_?}d6RNf|)^Og(Zhx2np2g{$S zRA+Io?j`{_N$~b!kChiKsVNBT+|i!PJ*nnZPMT1DaPOLaSJgf6*Hy<%+@@9ha(7lO zY2Iu4E5bOaQlDeao=voGhgI@N-k;Y9pFf;=L*iFVYN?aqOvcfb1mN4st7!ttSRlbb zm#^7rEw{auotg+fCP200?-IXSMft8N{6xHYRu2&Tv9Xu*JoSGSHMvRoCr=(aC2ab1 zi`xAR#+j{~P47(4ow8Fl9*mkmXuJjsNmICcopTme^Ol1VZ8dH5SX=u$!*K?;`&-HW z20M*~6a{H{6EfhN1-80=N@Y@cF9`DN9F*?Qz8t75{8njA)Ni)+`&&Hnd!#qG2>fML zNsYVNFJYaF-s#K(l!&C$651+Jkl4QF>N(O}8MKjSE5&XsYkU6%pbp(vk4cCNNx0Iz zRi*S3ijD=Dx4fc{z!S$N=_YDSN#qEmYai)&Dvv>f*-E3n_5$7;vK z4XW2R8ham+DUv(GAhP%~BT`&~a>{y#o(@R@bLe`ipk&0(YQx&0#L8CS6imJV&y0@6 z+eiX;?Mdqp=+Q)*{L8loS+IIJC8pqPn$AFyL1u0zVLLD(ePR!l$%*|i%bd=4Edh&M z$eMDMezgMfWCDQBT4G~LS&51Kyu5;M_gB3E-PY4#HZ;I2u#?s2%D5DQrQ5IAA2#y{ zXAkIlLGK0nM-iiMyQ21Ttho+e=c~GQ^b5bW%?G74>E18XZbAh(V*0y|581(?ySjBG zqwf@Qegbm*miy>wQ0U(r2j{Zmbg9wiF;Xn(q<=is78V%k2U74BE=*0u4w<2L6dSLX z(ys^L+UY;_?`J9+_dp-}4YQf0QfXMUO?&POao5#P2C&{oW_vY5zt?%)S^@mILdFeNmSjVbX+bnSzMfl}Hx_7F$SS!+H)y6ihdrGKT&q z(p&iMpjVdcONbk_rJ~X1$2Z6L^lTx)b*sT6xuWYFWnpmYz>>}6JA76~$X-$=Xo0J} zk;Z{L=)AkW$l%e#w|qR||6Q54Y1|3VuShtC*AUAN%|fWwIPc6jhu$880GVScqTUhx z15382m2V-Zu*@KZ!W0j}_FkwZ(_3@#KEt1V6$v#q{YPNE=Uw*R44v<*lM2zU`=*Td->*o5 zCY!&p?f!I+X>sq=zsyyxuE?&SLnQ36M#Ro(q>+H{E9}g+@+Fc}%ev^r{C+3$2L8jhtJHzf)bMZ)8*A}Rg1dCKvFMO4iW2T+HY6u7I@hw-g@78 zekN^sM&r$-z-DE9Gq_Hui(NBpWLu=w(=+rzwdKbPz_Dg3MjaaDF$2{nd7c$ZDN64X zgSE`eTmZTY7a-r$#y?Bd6kUh3%4ro>#(3S5Z#N7?6&ON;&pubq|qhg`|6CulaeVW2nL|sTuGxg19xlZpWY^trUDyY7vFPk!H7LKOf_ZMS?p& z-{aq}r#*oD8Sgf`Wm{yeOx9Fsv^54>^Z`o#b7~9C3JU=AmGa)Js$!p$ql?%x7jmSHN$uO^+uBSjqjDmG@_7A7F$=dw*6W<-)~7qX z6InTlVab3f^X#PBWJau+W@z5`?ht_BH+B&V!+0TvMa(#Ie|zg-6d9jUAd816>=Bh z_6JVdG2TyhVpG=#^?0`s${W6S$V<;DW<|vb-uVPIYk(c;ouws$bUBwt>!6;w;Vq+) z$`8SVy^Rl?Rz)LF)I}&yT32N%9BL-OVz#_5LBmBdiLJCieE3OXMM9~-aAeOqhf^5D zyz8;DXhGPY@xMM{0tWsc3Sn48X7sl_re-VKk&oPMhyLmCgo$>U=v3qh7H|&GR+w{~ z-aI!gDCEj z_iaaA3o@kG9nVX-iHM7sl=HDvX6geGM65;gGT;4rR-tDhM}<;bJ_{BIya;8&<1AgeL3VZCVv9Fz5qOKhgW(!H!Vj)Ly-bE1tDTDJoSX zU&h`UzrPJFGHF!LW6o=88a^98<4#>xy{SQSB0BAlOAkUtZ!ny2rV{*vt{h=vw4HZg zF;TVCmJNYx-0S`Y-qdcCVUli1Wj3D@T6|KP^QO_^_(MWx{m6G8h^^)vP%kX zgK{lQY=%@8b^rS86r95R>e({1?X-&N5n99TeWAO>qLobMlhlbnkOu0n*LsIme^WVq zOdhe!Y^6>&mNIrv9TGlUtRH<(J7~PBjrm9RSF6LzP#uX*-XiIYCZ8i4Tna-R#~Wq< z0{}Y%l&IFa%SeD!ww{SQkq>xuqND>#oB;qC*4YH{H$R+ixGV6IA#-s#BAVIc@b2u% zz<^^{^_h993Cgu&;Kt=t_sC*IfmOa&b8h9ZI|-uWur2RCl@Se{J}~8Y&Xisd9UQb(@DhEukQt6Q&NHv^m-o1ksK$SXIY1)OsQ-NcxLTDs7hD| zvoG9MmamG`_C_wzoXxUb?@w)M8HV=?z3|P79WvttEtSl3RjlM3{GHpg*~Zp`BZTAj zgzs4oALS)nO=-RpU*Ps0ruPhi*FW2rlIoIGbJkZ*^S;mj z{aGASRWo4E>}$wK;C4{L7@RE?#EVBQ_I(RHHpyR_D>!a?K(v)aKPR13-1&vK{h zQXY*zj>2XHq&7(G(7`K6DZ$de=^knvUSg#DlHG!;5rrWSR&;?KR#I8=PLaYe*oUV7 z-egdU|I!{&s>wLdGRbnVM;E5X=4yhOJ45O5*I5?<39wF(r>{(kgU8zp?*kS2BOcA> zoe<$Cu<#F+d4U#0?Go^9ixVni!S;J^b&d<_p$?T!>zqEe@-{9lvz>bId zQy;1m1%u@xzj&Abcl4Pz%iGB99N|bY;~M9wlX|hBJnkaZwQv9XJk9Ed%1FzU>5Cm- zgR;spC5rz|dBEVqoJLVtXCA;W8mtI(ym&ZB7vMYnXFS&JwbR6+bepc=O50+(zrVb# z4JTaqYExPB|Iw_hGCrD#Rq~>NoORlUc^uM2%_ny~(FehllZ(#@5>F6%sdRH`p6f#7m6C@2Mdd zdO)`P#))(DS#IPPtctW%u#0Bx+Y>H~XXCucTwi zFFKp_Zx48WSkZ{cy}U80T>olwGGQqH+~4`#6zeQ^eM8(T=5HbkFN|L^8~oO{4l67r zOw$pdT~=9`5mzN#d|p|UJ2We7C)c_Y%+deqNiaAW9H+@H+1-$+nht?+B{r8Etxs== zpN+>uS9qLL1DoUK1~U^j)~+1{OtV6$HSOdEDP5?-3p^!rJ>qo}=T&(Yev)>en~xSU z#*Wv&B-_kRWO_S}D>mlX=8ABTL4zc7i+oICFBtZk{obA`QP}1hHpML{qg(n(GS4IF zL7ziwe=bKCLwVB)6Gotl++?dGv^gh5@V$p9#-T| zmm+WI>`_!^6OwW$y!iNCW9#w%zD!ciO@=7#S}Q60ANtEC&jzYavzbeeS^v+BT@oj( zFJa9|T5s6LMis(h3%C>Zu$~co;XUi$FiXx)wLM)G%ty7_R56{az{%{{C${VucraIx zZ^4YdcL^J~5{4YS`5_QmV{pzY8(yQ|SH3Fv7NHbUvW2#tfAv8>+r_t(8jjYh%-IYD z{v7a^dWNWVSD#)}`_i+i&$NWRbS!cC8#J}RiZ`4;6PPTKU8r}mA$kx-(3;b$Z4H+s zvrs$$kYJ(Mv!MT6F6RB2B=4l>uWA|eu?P+3^y1L;H2AxR4~Iy!^;G5l zP)l*1uRSQ>-dNpDye#QA!O(8=$jh}j!cp3zQjq18@2K^NtD5U!FGm&%`3>a=icEaIPjEqp7nXo=GX@d7G2)>i6x>rb|kEzau`9%SjuxRisqzu zZG~J$zRM|QHd3)3@QP2}!=a)w9Gh`x9ZT+$QoN3d7}gIlK|fEAk8QK~N(Zyoa_BRo zLTE@^K5DS?W!Kq7)hu6a3r57B^Q2hDDOc4{dcTy|Cd5!_h>~bVj`@pHSYkVa10VGG zQVsl};XGbMVB;4#`0i~z&TtE8nUrZspatl$^^eu7lY9nIbH1tIbah^#MUE+W_UjOa z4lBL9HBY+CT=7i}+(G81?g!{L3ICg_Lco?}h)r+i0@zKR;|i>Zg6=D^0-Us=*nLr=ppDJjmkf=7|fHJDZT=YPDj~N^CTmwD_?wSXGZ{%9#=v_>(0B# zn=ohiH5!1Rcs#-W@A*xLXqi@R^QOT-k>!FbUytKWKe1-5P5MZX3ZUIQS--0ItQ2sa z)8nqZN^>6AM0(>E19PqYf=amN2Wm^?ax|(ex4nSdFTu8hJ=0^Z%)o6cr|%FFBce{^ zDe3DI&c;SBw^VlF!ILl4dNwhak5@=3ufOJg#cH)WO;HiZ4>&+}oV zyp!o;aTQ7IOf3vUI)tz3bTQKgy<`JZ7=-M8WzQV>cCN1lcR?q)q;aSXZZiZt=L5yw1htFFeKMO-QTb|$boWTUXB zHabB}$MIGtcCjW?Kd);Kye>k&h7@cw$*-qhO5R;i zqemx;8=G?e##qM_&obIBWbc`V9T=6vHVbxuk6<)k-24D+b4k$OnVG0sZ09RnftaIj7)g&#|iA=s6W)^j-cNjltIV_a_MKH!F) zWxr}=+#ldu=JJvB>b|YJ8O!beI+}a))8wZ)%mX4j2Jv@TV>h=N*R7{qy97m7!KtM0 z3FCEnM^$e{>T=o;<27)xXW_g@eplW3mG!aLO^dHCHLei)q-Cb zz2EFv9gwk?D}f;2&3S!7{Q03Z1M%B7Ppcx|Ds$K=4W)}b%@x-o?<7Qnar_u|N>d-i zL_*P!j4vv=Hj+ySd)Z)JD({uq8ws#^Cu!E7lVArUFYDyM@UX^)OzY>5e3`c$07NmuU6MFmP`N0T<5XS?pI|lsY|_DR?CU&yL{ zkGgKiS__!ug*rK2a+s1+C|T}GKd>(cQfC;;)R!$Lr8=?--TIiU-22w;At)&19^_WRQyd6-`7Rf7`YV;9UI+^#t=E-Cd zNQDOGh)?@=>J-Vd(=S};-q;@~yTDfUYUV2`(7D`b=xOz7!SUgaj;lV6h;!Y^8o`xV zmiy?0uVK2%E~$qV#MJavkR{{4o?gSTHEvFCEJ|@TCU0Hpko>ao{8VH7T}>68{^A0s z#ZJy`WyYy@lm5Cidi7JM!b+r#nkx`xBd{{1d;= z3!0C5_Zij(m#AlS-R*wcxa=0Yka*N%RQVe&Y;@fyx&1y4_-Q(mr9PdAW0L#axbSTM z&-Z+KO#1dC%1jXGq_9-BOvla3YGl1kOhT`py~}$uH#dhH9^0T1wSWy4M)_nLD`AL^k6j)4wOq^ znMs`OSImJA#&rxz#9SAg6`h}qZDzA7cee|2Eg)Rhb{FXXk*VX&!w&A8|F|KraK2oy zLMd2KFaLG=Ew$`$?gv6=vkqRNKj)rE4`tdm(7d=n16c)B*`zjSk)Txr1BO*u8TZ)HTmv% zc@@&dBw!}uM22e;Hj4Dj^cyzQA`0$}ZNO&C5jp0ln>4t z278bEo_YgmQeS(N`?yz0)X_XXw(T8C9DJ@O(oHW0OnH1Nb*L_;v;C24gOlURg1At; z6ObVjfqW9gs@Q0(>hc@vEI#P7;sfcS3L~SPS;JS=4Eki{`^}e_9rRy70UXj2Y%v9f zYU+I#+AAE{Ynh{WwJX4*200S6kr7zaZDhTRU0?*UGJGI-P3|Q_srFer&#n*)#2GJh}rpD z%F0b&jUAhEre_@{c`af}pB$|JY>+#U05%v53S!!WTa}pe@bDVLa4zF*S@_`>lBq%Y z@gOvCWr6()`mSq>WZH1}9H9LUQRvmgLZOIH0LtTL7XcYBN>$#U>F#fRd_uIE35Fl~ zDKk%BDXj@ZZ8NoT_|{29DPPE@THLCaUARG^obspTPa$GJ2kn=G)yap(THiqn1$~KG zB@Q*9-rNT;2xC4`#mZ6yPQ}&DO5fLNFY>O%%pr%l$LmhHeU3&^ut5*HTY9Ys^}Iyg zq_ku_ixm9{=<)?e30Cq`O-DHX+L5=-k7=kKp#4h5^3`awM!x?nI?-QoQ`C>msI;I6cJS9EL}24^UyM3oj`ttgRS1E{XQaYPVcSgS zEcfoV{@nmfF=f%E$+P7Qx|>?0zI4h#@FV&}WkkcIs3**ic$a<~lk52SDwXk3qKb#A>-IdXh(AARQFa8}j!WT7MuqEWts zf90??N2OqmX`HX32w_$`5Q<|DPil)7w^})9S0VpCMcQxcr z@s$ex@JmT;%NJlciWwp1E{n>w!lB~1CScgfYD=9lhGwC>ta)dsC-e_hY~mS_kYXbCIHb@=6CD^%TrNaRXFO45HZ zCi|f$fkhN`Akh}@pI@7#Z9N_^tb|Lqu|iA7h!VQQ!8~H1ZNnsqO{oXRW%uMarZy&8 zM0OV@)*glfoSnM6#H)pC+6DByKAKM~zicXdWJjqd-0P{*CaB<2{C7Ng`&Fsh9LlqK z#|wi4Yjk4Ul1KvzF_1DVo~Z=-MBG(yCFQHm(N79cM2lJCj?Po@$Ki7EEBmGZK`As(TUcxWt^ijT8Wr-^-Ty9t>lMAygU#3~a>cVuy#+ONAAZE4qydSbp4BvU zxL^LkYGP$-2-We9X?=$q}pL_>B+9x z=?PjK82CG|_v*Mfg7<|TsZV`v-D}&R9}{NPpe&A*(^TO6LE2SMoke<_9zNtP2PrjV zG9}5?o1qau!?v@-2FmSI?=>`AXa6ewvoN|d`#hpLX&2gAvg7CA^KH9-iPXdbOD{5U zfvUKTbX@exHRcml43e3ogK(0r`R$yc=w-WTD~#~g7Q)Z9erpnapdrm_u0b9MDOS5a zv#BdOxmdbz-$`$L$=mpY9cHhmGq z|GXYKWpRk14-eL4VSVKs4lWI1T*f@}FlzIIFWyHvnv4Z?PNSGiw}B=Zdd){-PW@TX z!ds^$+|6-XyRW+|YOEx2DaR#qy&NfQIZEzt-AkkcRqT!wjx+Rqzhir_Hu`}Zop;Fs zS&H&`3e8gwSc;AuNj-fpS=7dcyGP*bzQM`o86#k)PxGVyK_@DED?faEN!02m%=O`K z;yt}*j2<1@J1(*tDFA-*(gNn~qswjUIUt$3j}6+(W)}eMG6|j(*c(u${<%A;o7I2B zZtB|Ib@6`W@$&(6|^oQ)li39$UmrL7U*GIFJ z3U5-n0ror9K2h@|X7mHA_of-13s!S;sj2+!Ba6+PXZ=;249wgidbd9oY`Ig|kj(!P ze!Dil-K?GG)zjLVdr9apa`B!$tD;S2Y&k}^);p9y-1cFWnX69$+pIiT!%gb zIY-L%IHr^$S2HA2bt;|5#q}%({(>*23#aNSXE7RA)9owo_L#$MxYV$BskK zX*{@mBLlSn)n)444$^6EHr}n8M_=s|PgSBu=gtUeIGLW&Ing!dUKI74X(Yuo!rjhu zg_GAQ2(F}{32&%wM8wIhhKG!KPh2003gWyed>(aunQCq9pLwt^=s zVV=?5;@g8HxXQa>se#tIizkwXhIN19q@k)orgP{ZySd7*P(-IwRX|gDvH+LS}lsA zHX&5aAXKd&q{FEF*|nldtOzxd*r{E6B*fl(CT0lwxDRX zjKw6${+XxU=FB$ecUh$%Mw;rZv@Vs~J3(c&^RTNF&Rxr-`Q27MF7*a7ON{J{ zB=&bLSXJgXNV&`D&L!%2h$G!Y2LF$c{~9>iOZ^nHLaKmW8Z&Z4D@)M>n}QqNK~?iE z$^uj|%ae?-@UKmLjpWPc@y&`hSeW!E&h=q>rqAck^XX}zD_^hk3B_YmC88Wo9K}t! z9fr-ZdUXMrGL}`g%`;4Rcc{|BxkNMk?kHMM>m@-NX(7Wc$ibI7vB*Fae}4)3$K?9a zHvhHNIMFnY7?fFq5C9}BtfY!8sGF>rJdVfbjPW+(u0esf5oD$pgEGNtR-}$Jwg^>0 zh`0F-?*f~R`jm{N*Q>i8k-tNXGM65FW(=`kxF)68Tr|I-E#I}@jN;Ejm+$X4eM?SM zJ+3Do)uP<|;LN0>XuIHim$Xl}xOrPf>25?FJ~6o`$fBk4nOcYn@jg`aS)*!q4+qsR*nhOn5sPvDL0^`kem&PGHVTDb5xqwbljqEp~2&<^$H-w+j?}qeRBHLV9vi-v*W<`FlH(&NAUz(2Z{>|=_{Jz#96L)y- zwM=5aK@Dtb0d(I+SZ+vE<=}F;`O|?;bmNodV6RYQ`1@s%V(~YH-IJSO&N|>(mku)kWiW(`;C0@2N6q&vL-&=#ePy)qcDQIgFOc zX=nOABSIEHU@8^~HM)9sk4GHS#ZaNH3+&Nfmbdrymu(j=XW8?@9&lSYR)f^d5OqVM z^%Faj+x2S-LV{3y5LI4i`(|BPA*qboeAL8UL1=h!!9Q3n7>74cYjafprZSss-ST$l zrqtDU+SWUL!6x!yOAmgx7b~D|o9!%iEtR{iH=<8Ci}&iKS}p{jPbrHeS>EuY*}G7o zxkzO>gk_IsE+nGG?D;EE122YBcju2q!;&SnQ>NcosM|5|p7a?GwNq}oObXtznMR%t z#0D(23^k^(C}%&<#08r8H(XyB`xuA;;WyCc{FIl zoE2*JGE=V2=rf?c3C_LfT0{r1ZzWy*(i>7M+|`HK%D~Rl`8+7aD0+sgvJCAUI*~(g z3q{pTbP)B6>9TE48GB~ejIaXb; z=>xK(k*>kQ~wTqOroD|@p@299g%-6Q5ZkG{KeQqTNG&ub+NWP`8A;b^jL48p(jK0;=$b4)_5;R#QaS5)nE8N$tx-TwsJpAD-})dsZ73#T5-Ts2aI+HDcSKS+4Qydn1>@>dtv~A zJhjdXv~Az-(Yc`y)dqLmWS_NrGAQ|J-M2wmYI@bH^a=nDpEQ{kum7W?JD4_a0~kR( zc7jgC8kB-%rq>CD@!eEQ+OfiP{AR+NL&=hwFu<^uX*uPR3`oYRoyf=eIXbvM0VbDz zKQTV3XJ0K2U051l&^9k#&5s>IJJ>Q!t{01^=UG7azsTLNi4n7pdVXZZ?S#nPEVlCx z9G!Kp(#BX$w_jk?j?|_~{~qj5P@xHFYy_*Z!a(&W82mPd5xn@sYa z#&YrbQTlyYh^5-p$v?W?x*=e~Q%!F5&Q2T2`XH3COl; z$+_7{_jvWk3~0yWL%IO(`YS<>-1D)r32p18;(SA+{#()2goic5KWkED_L+5GQD+f8 z&9d?Ov8pD3`lO4yo4i#`5z;-7ufl+B*=pyre{>=<87hjtwT9h|m>*<=%QJc^=L2UD zt*6xFsEI5~w05Dr`Vwg0l1sGDly5|Afz}qxY-Q(QNHa$v3!c|2Sb^9%oqinAgu7hr zuUzW4+t~ht(s(vhpRe)ITD)S&!T7=MmO?pHj?A{LL6&O9v7&rdiDw!mT56$X(pEzt z(3NXEs=aWJE4%I_$@EtpVZ6^3_Qq8=ZyB1lYU-A#YTeT}sgR6z-sC+K;*qA9pJ&=3 z+$6xTg-v0j*J%$FW7>*@}4VaF6Klwu}yCr z+x$mK^m$Ed{nL9Zo-=P9^q z^gf=Z;$#uZ7=H|S8Bijcz$4Gj#q#kwJ^P$_=ScT6g{Q1+j4Yg9X1dsefzsUA@^t(W z8n|){BPJ-z-m`jn1s`r)PanT*1J*_45?So=sNCvG+)(+WDAEb*Zx1&1%$&fz=jKge zU08dfbDWYG4Q=!_VB(*EDgp^<{g#{(RYm=O9)$5P#{5re$~>C7kuuL-uXK_XpCURo zOSw$jlkvDrFntpu&4kT0s@W2i1-xLzvzq`Tn~i(Dy8?Z&mDlW)JrKEdN4nH0Y>qstp9Mw0W#Lsa&of9)WcvXST zi>t$D3J9nJDYhfUzr)?QkwkRtL44F zSMW}7`0BrzFe&NS$+TrG(IJJ&`M|MeDLWXL0Yg-r(k0DbZ9<0A+A5rzI|#o6zjbWy zxdlyP4B42uOW~al@|=)3iXLvTC-E>bLMo{*N#^0UuQHaQubc(y`O`8GRb$erWco~3 z_FnyRcYnDwiDXz-gH!XOe4!%pK|!fE?^D4;F=kB;#G(8QROGDA4h*cSo6YejG<9V#)zCKvQZ$X9x== zxCMT1-qGf^2-9>5NdBb>pi4mzZvgYNluY@f7STmI zj>@u&>Q_0I*C7;jJfq>%#AzKw{?CQP6%Sc+kg8iYMccglSp|Yi^h|%(Akp<$_1Af# z+T736qdXL(aL)F7(w{)u)1)jq-=oA7K6?kMftp%3DA^=R@Qdb8YksKb3DUjn?!N0O zFOj@d768G0A)Scd4i^a(F-8gNjpW@gST~L`^0m+BGHfcDini(#DEt<4RMQ)*C0*-N zjWJ5uS{x671)Lqinyr1t&IG8gP@SAM_^lyjZn2~EUmHgmu!tSL#OVxO`BAIT4A$02 zp>Y4%CsCSzB{-K@FNR5S_jF}Qdtufx{)Tb_0Rh_U&ghhC>u#!cPS&byZnPJze|YSS zfF&r47Fm~yc{_u>Ut#+Y50&{zn%Et2PFO zJQ!AHTHNKabeo|gImbLAY=>}DGCF9y?9>T}-%DFud5q&q8H+{eY$8sMS1o+Lt8}03 z6}^rHXz@umuf;d8CIBs))++Ohn3j$J0p0MC9Yd!m&cmgWx_buW-CZ^7kdyY^(XK`r z{E^n&?6wd|w1bVPcK=L9Y#I^MIH^7H zWXfTu+)acb4}YWgZ{DxX=KNp5&Pk#0Kzio{Xcy?Zgb7;TrpfMkzo$nWWr-TMnq((0 z3ZukW*vD0EMg#dz1J20geY3#}eu&-$7sP+@xRoXZb8fd0uOT#vY@A|{jMa5rR}ta; z&Y)pnMQ#QSTbRrqOA}lEfqRKq^Z+RshkjBvSIJTQm{ULAL6}Sq!u%pSL8ofyuhr)7 z-!!92q`PhIx={J2sd*>UamJqI*v zj_$U_r%tuXg{mT>=9YZ3D((EU5!!VZ-@?aQpOOy(9AGw2T9~0H4F4#unfWYbmvvo>KbG4GcKk1HB<)AOSRg+u|Rg38RFHtb)P6lzuS*Z z=|&|};^RcHsD2X-wM>7MV^No=Ok<54gURO;!|X137TrtH`Qy_%$DEEA@WKJBk2ve+q5S^#Doq+1)MqO&qO5?2tZD!r{LEJq_PI@G31UE4na zxy2hC`pXT%SN8CRBX*H(xG}?9|`^ zmi4&V-T4|Ueq^=DC7*iMEWQSq&)F$I#zn7C(K}j9JzSMViz!;UmC~aGvB!zSLstge zQVg1ADa&4?ncvX;v#zDy07T{3RJUW|#*St@sH!pNSO+&#wk4nutp8T?aelQ3Xb1oZ zxC#gDg11@S!XxFL?3?d`ZGT8mO)b)bV~Q38xI3)_PGb@Q>*gPxr0J!CJbq#?*wg$k zlqb!q@`5Z5QZ(#cyKg)~$8^{+tPODeqYEs&t8Zkk8I{lc+&8lp+5;A!u}qm^lGJvJ zr--t*i|LD-vU#nuCLFP&Wzp^JwIYAlBVb3!Um_qEb97~ewY65r=#Ul&!vW45c!M%M zQi9@yW>5=@_uxF!&Gjt4y1LQ2^_ssS1?Vq#cg6FAn?68G{?Spz6j~S`=ve$9OsWS> zKjv`AdUYqdYgsuyWiyJ!DkUCZ=oQ;G>=Ua#EcBJDXTkFxr;n=H3T@&&3S5sXYR3xY zrVB;L+JGwckHuvAS|rA&|0|eXNTUrZsI2r=LM|0wO|}i6)WdI!vn;X&=9y02PUjjLMU!6%SzU&E!K^8v6DPphINWpndatcH0KJbk&q*R&*xrg@dRg>p}cEC4Wk z%bP*R58cmXj3cND4)}{F`G_wJ)!@QCl-JJP0QXtsisKZN0fS58f+JwNOl@qU-L<@{ z^#ez?Gbhy*(k4sLb{&>ydsSKic@`Q)2KmkRkLtkNwA`uba$g6t6r4NK9ExWQ(8GPWVHfjQ#RrOlVH}AV_M1d2PGgW?ainJS|vSYVx~s zRu9dX+dxBZk`#XuqE1sr!i$}yPfhCpz_t(YdbT}}Q(WCMBS*1k295}uDccDx z2q*qRW&a|W*8HP@EEaO;x3K8phUXSqlHCV8me>OW;3=EIPR{_@!bOiEP%+8I3_bt* z30CcuR^B6LwA$$cYp3Pkg5T{34w%m;m9Hdr&YI{K0mfzN8}p7mwSHW|I_w@EAyaRe zx#0%>g#ezRsRIGoMcUhnX+tuSnTfCWD>L-u@ivQBH;@73WabpRVe7`3{|>adIzFyT z&6BvyyWd~6>~2~iQd}i!-~!GYEsV30Z-Tu4M`yX5v6);N2|;|2f)!5nv2>)^ANeJE zP6d|%mWvI=ZU=lQ9T|8Z-O)8)3zZ7+cXYl7ke!VFyVZcrFh2>gJwo=RuyNR|I;pW- zeM7`6>v~Kywzp`2%4}4AZSUd8(}Zac6Qc1dtEBj^w>wP_*YOYxzSUlLNKEW{{P8HO z7tOjzTku-3bb*Ae5B8rbix|~e!KJ+Nrd$%V8F*fM2QXfe`v~2i(s!$5VTliKvzt~- zt<`LOuh#c zv$5IkkteFw0%&7|k-g8rtu?qfp|8Dt>u3TK>6R_@woWBvz!<3A_DEf;2m)KMsagn% zHE&TY4;6y@R_(vCo(frTCAo=YP3EZmz$5$W}V_zqs@p>krLB#>R%r z7nvj4YtHJK-t`;7X;iuO3Ds{4v3|#z@R`YX*x|BkI55h3bwKtaz3fKMteXBj1#v$( zeLkP;dx3Ov=X(xX+48KfrL7O6cC-aUDm2t%MRP<#2%{KbkC}T7WL9J$rqFi<6bSAk zPAF%>PV7t&WrZtQhBh*STLYiZoLzGm(YRZ@Ops(usgEcOV|||X)$Nz>y*Cuju^NZ& z6(sasrfGF5-YV+Ww|{ivI2YP;XS`|StK(ttsvizMFBZEt1wpo6aA!=T4km*#6B$Oa zfRu{!b_KhDgfuyCG_Cl#t!h~H;YJ{>Z`1tO8l1nXrmhw*E#_(k5hSRsR^N-CHNF@C zO?kH&zYBaI@ui7_){53pMZuCEtEeAa5pJZ-JGUY+7lXvZ==c-6U@uR(-G=y+z{4qWkb=HsUhyGytP=`r*N$o zXVb)NbseVkaNU?sMYG?;Tc^ zsyffWWqKfc4GA9=_0&8eX*1CW?1)A^7$MuD&2&Ll>NXGbg2f0fT|Qm&j};Oki?G*Icyh_c~=OEqV^r;ifHiwSS)OwXXN1gRV#+%%ER+}@X(fW zT8pNw<0B>-t;KW&?1vCxMQCNdHaORCZe81*B~TMDCfOC{NXxf)*=j|U68u$e`b?-p z+?wS&#H_4x+E`gh)*$mcU*bXC<&cG5Jv3Vf8<&&DQaySdhCKk`N0 zaO@aHPucC@sbKn53~=` zx(K3el}t$;Xy4Vz0r_)c0u9IPaqSTE&hd=xu@~_14TOa?XxxIZcD9=3jPdXcX=VDT zjwi6;CmNr)2T%e%Zx4JNIa65h89cNsN4>{yF^%1Ec|L9Kb4aT*(VOu_VO@%6@P+dyEPoSm76|=e!R1vS> zZmVB@2$dXhJbQeaW%t~qm-MV)=!A)kd`CEhMe<0E7UIRl774zd=ontLE15a0R^SGx!e4jH2$d3zE}5I15Y<45dB4KB-AY>s)-!G=fOM2zd~q@1x}U{8fNUGl7i9Y0cE{!TG$%?B zhie)=z&)NI>Z02lWRDJ>NVhV|ce#4=T!l08yiwMgtF1m)43;Hsr6NM_os3?<&W_7J zz}Mzcp({9hY|eb+YW%K2Y<1sTD@bCn+04!)@PhD%s+Dk&u=LU<#?Luhxe1&V5wFa0 z9$NqduhRlzi`;%QyWO(kn*&td9kpShGD{EtO%2z;&aGv(hz8%Elr)Vhw;&iTSCH>8 zJxxn>@my#;j010_pM9a=kK$;ybwPwwKsCHHnbR6u0@&BrAXh2gV~74Wh+< z=`pV?Y;>B{KGXRCy5hdbNWjQ1G(0e8abV||`K4n>?A-{rjVh{E>Qif0<7&DA8J-yc zCYhq+F5ma7lELlhEP+K#4hQBpt!1Ph#H%*jWM>~s`*=Yt$8&}vnz#L6F*d9u!94PR z-K+W|h(R81TfOg<_oVgE{8#o^H7@<5)%W=#UHM?H-|XAB^i9s2#&bq#qv}`F`+227|f>i zkM2q@r!eUXQqS3k^Fd5tR@yd&ZndiH0 z<|`I&C%M8GCvLwgnG55w4Ux9dWZN@gGdfP2zpm1egf zCv{Vnh^I_>_Uj2YS2m2|_X zfOH_T;QGWk8oZS-q?i!uF`cOTnvCtF4QM@YMtpV|(eQdtQtw13tAs6n*^O?#lyv z1TOYLozn^Hu4Mv5{;P?}DeTJ>SUI8m-U7BKmE0oLT6>0?K6PCj}{PJ>L zM;SWYgkvBl{2Eh?cToCnn(A4Wt20W2ArC1yb^HPDzl~?>ihXe<0tsacd;>4?ABRtT zeD!|cX4E+9j~!CS;`@x4#lSs%izqXzy#7O6)GTWV-I{rzT)PtcnK{ZeezjGmbnE@? zH#gt@4QW}u_SYK4c(oRK~%Rn4cVg}=HA z)rUa)>wyj6rRW=7&whoURLyeGtu*P%{4qiq<>R4Uhc|@iLt^>}hm4xtqjP|bz%yAV z-$d?P?`kHQtNR+cO%m@~EZ1~GiLZt2KP+mR`2*B?hmBD5JySy?o}NC4pi)rkVC#KP z7}Pm-(IG|m;Y@>q`<>DkG}P&DX~}zm8&+mBv#9=?2PK1PqNA%nDW2WKs&_WAGg2e= zgJ7uU?ZVtK4abWFU;lfa*w1$+KhGqvaeXvdtSvW6Q8oLOa^mB;uTsKW_lLSOZ6K5} zWotWzG?11XV9%KF!9E!jUgdcBZHI}zF(8>N^Rdc<=`7Bg-&8BN(?!vsZJVvLuA_Lq z-io?!=W5+s=KynNt$fC`a;GNNA~8SaliT`}#g8?;PfaEa%7apiKRj9B6;V0X8ba+X zjYvF{WhIFt?z{xu3WjT6c{KpRzE76OdVX1cAdu2~)W{a4BSEv8t$WKEB_na0#xw4v(uyOry%hp_nj8n97&r)25zX01)gjig1NFNCDlIzcj|Ms<|*Z8mcJT0^~hyk zX*uMmf#(yqVsl)QmM;F$r8hNzJ|sEI^4{wc>)&q)ANKnVR5M1Kg|i1JyFZ8FMM(Rc zQ7)$q5Aflor-iMGVsnr~4xjZh!OXvDk!Kkcs86jWUZ+qwd%)*Lf%x~j10%gp8ohLY zOSURz$e05afV{k(^^t9usvrp#h7yxs4q!M@pP!06e=G61L-0FL9tG|DI})EE8XKaf-jl43J^| zG8tJ6Rd<1f;hTBr$;pYD!a;@p4Ru60c%Tp(MC!Ck9BOc;-i2zDXqb#`C}-?1 z)bW?(&;nm`Xzt9UcPgwytG*Ns!(7tZr2jMkC_#_6}quks9mn7 zcAM52v7grla6Ev^6H1|0pPJ~&dx9QzMIx8eGOCnEJWG8HSPj_XeI@Qw^BHA$s~m&^$Vln(~KHGIm%&T2-C?f;H>&~>sjKA52Vz!%hdOwOXP zCt`8vv~Ea%Nztz3DLgFiOqO&8U@WMg54tW***#S1`CCnW$MCLIrnSK(O8(~k7@tKn z#IngwC_0&cXC&o9GybW;Ee=EzE^^z3eNc!BL^P!Zvt}b_4W5Sgugvy;r2z)Y4Qsd& z^RCgv5*k<`KNP-NLlIMXj!_ zSi1ahbj4mkf&G)Narp5f)9pzE(#6UO*Dm8aTnNnUpVV%{FAtWrtPdDpY4YUnb$e<6 z9LPaLBV|Jrp&uwRxsxt+I@~6s8Tz)h+=i{hp zJ1hCrepwHC*59k@XnV;j9X#R#BS8nEpts0;3%IR{#ULw7fy7OkIwsh-+1qvbpih5P zb8p7SFh|gdwWspKSBql5lIf6lvbk{zMa83l6N4l-gm-d~ z_fh?qq}Upa{G!^DF??10QDMd9C(-@iHEz^SXtB^o1DP#eUd>uKdha1f&t99G1?E&l z4ef*5L)DyXavF6j0ZHJu+8%Qe9$FLPYRfydep>F}Po)?(~2G!O3c>$OBt+cZOw`0PK~MDQdH$v z?oecXebSqvIpwYf(NaqrZRP!d<6|P*t8L9OA8hHQf5oO|*86IeAoVE6y2dPxs|~iU zybf6GgQGH9;W9$*2G49RqOVu(VH>-(?POlxM};TAOU7INay%;y-CewvpNmUWRK)~u zQB~aZ2=n1bJr<3>hYy34#=dpR#H_Gnuo^d;S*17cMr{7+4EwIXeu{(RmV#F--_eeQ z?&a~3RF#WvSao3=GT87yFHnual48(|<@Ar_(ysry`z}uYXMJ`0{hC@d7_hK*ouo5S zbWJLqzSsWQi0G4+=k>E>>{>`pf>|MF7T(V$1VHNnEcbFNorEB_0Rq#b*}-|1h&Z%Y z0pqA)>Go>Z&F;Vce=FVDPb|U|u3i>0yP0Cm_tmI6$=`fd?;iR<4|sI4*#rh~q>9l< zT76MlVh|^sH{9TwB`B?h`jV_)SWLNTb#BwazGVM%*-R$fN#b*7@B1}mqY{{&FL2ww zM1H(O#LwX5*dGw!vg-uRM?DS-lDIYvk!?9{r!m1kx42<##^bSWIwUy!@#9fe_sQg! z@y|z0qf`EVM0K%bYcJZxdgW=_MVz z?=%aAi}?UU9Dfg|L3|UnkG5m%KKDF-Z;|NzS-NwPGzP6iyagOHLy00 zYofHZWpqO@Y@TW*!M@JJQc3wz#P^TRV}s|~EO&00Uos@7_QP4NJih}2&l}!>A6v3k zS}c7!Mm}cUez^YW+Z+OY1)VXF$>y{=Odj~xCiZwzMk$T6y*-;6u6!+ zJk%km=4ngTqX9iJ*}CD2FfC0e6>)Zl2G(B)L;PA>>Y^;yGyK0_$x!`K_jr21t;o7t zHMmpkq33g~)N_&27wb{S$W=;=zLkV)xggrV5+v4u86?72H&LrCFb0bE3tF__ta!HH8oxmU{GLodTv z&R)Y}0G{C?LXfbFCkvCtgNMQP9ay$oD&b>`4t|N6>+=8OORNB zU)?fY7>+XY_c#^6@9MM>yjJP~JhqGf=q{hV{!M;1)FkW*=#28+7Vj}=s7$1`f7w3R z48r=Pry5;<6OqPQo%xa7k5?uT@-zgfESbvkr7#&+Zcz)+RQ<*Q1 zGBQIo7!n_ds0M1I4uiz33=ApkyEPw)x`@p8NIlyTrbeJSY+0@ppeVyx4ayaVx;KBdjf()zQj*9C6_=9+*=O8zgaHL910ylBh{ZC=?(x2{w?oJuuqrkd?5M1 z^^btJRk2gwT4H#IYmkzEA(>Zi*dehZ`coy0V(y3F;A~lZ!Q9r+E{{-cQ!Sw*_UD+` zN_nwdihE@*$*M(wUb3lQN3$@%wC9=iZ7-W^x9^|lsAvO3R}N@(j*)&IoqVLpIX?vT zIaG;~UaD0(3+ZfAY~kBr zt{Fa)amybou@a;9tpeXBe2KZ(>3ddkjivI_M>VC>8Oa6~{HITP*v7<4+aCfql%)D) z^giKffM?I_Wi7j6*O|M6yDW2PLMj9$!-_F>;~oxo3d?GEyZAu-&E~gB{cjeb$bvlC zI*)QBa2pl7coUTK9HM4TnVwVoYJ2C5#&$tmI~Se5uhf5QF$TJ6b7z@}fA1BrxXHdU zQ_7O{HFxlTO6RJQaT-6IlR@*Ihc4sY-8&mpn`5(?$?=3Ino0?!mE0mWwz$pdW)P4}%`+3F(N-PF*oikK=t>>Zbhw6WDxB^>|m{As7IO@MwjtQAdb1tH!=h(-)g09#zzB+Z&s#ES z)Ti&2#UNC}m*t0~#)Bb)#}$SZ+_SyF=Gz_39hyP%0ZS)xEM_q!ayos2Wv2y=!0Mn4 z{ydHo-cY}HJqW0Vp7~n}?EE)r8mTdlV+P@SSk9M9p=}W!v$fA}_N3Cqgee!FV+*)Zhfyo&O1(R3M{<&vrBWI5g2t=aN%t@a3TVzuEPBW0Pv% zJ*BD1_(N`+vEW=Am%m*7D<_)EYuD)ht|pPul-B3PKZFZT?wRX?dH=5X0(T%O*l-yf zyGxx!>n$!`RtWD~idXLICgG|I94m8s(a${;ICU*c(b2}JTc>V&Ga){B;Uh))b;T#I zViD9Hro3Q#GH-oa>h-X{G}M493l+nk2?Z?nxz5tmNQ5(?r;I99kZ{phNz&w3(p25+ zh)=&>+({t1t}68D-;0#e`SEw~Tg;-;fve7`402<-kI%@ga_l5;p)(SCV}bGB{K!Cr zFId8eYz^2VzmeWd5a^vS8DhKJ{n^p)Z`2<-KE49IU{SC zh6&rFO^+&YBkr6eX|oTPJbXEFPd*=&Uz(q&MU)N{o?R{g88>Cy7s@n_Br9TeRRfff zlp%gm zN;fcp@c8m`3~54xB|F(LWaBywKc^n9b^aZ$)Z@wF!4}hol%{H;?=A1E+q0*R)4glq zQZ#AN;>9wE|D#DUyDiW_boAo6#k!yQDZk$^usQhdSL(ZZno7=#ikrsKkQ)_6^D8Oi z%O<@796T!aWv<^Vfm-D@x4`;@R@$C0Q8{R-T-)6)aOB!7MY5+g10L1%m|#rR-xyWe z-GVe3Olx1DmSoJBTTPPD&Ogqys#5n(d(0C%#IB8L^Q)~5*LSL=T`c?K{hfJ0y0gkw z76j>)uM&c8KPAok>VXMez=H$lc!11(v#+sQFH>G)e{b{>S>g6IJVtN+(fNi1Zhlpb zx=$2w7C^z=HVkT9`@BFxr^ruKOJu>_u@R#v`Cyy*{9gRYT`f1}PUoxj@8Mgb1$Qv{ z1Q(RQx1*Os_&MA;3^%xB_XS(Fbving{nj&&bx1jyqs;DUMW5^AKZmIGwSdIzl|Du( z0GcAYxEsOCi;^xN>#ctEy>4zkw2)w*anviXp!sCnr|ZNk!pLOlV{mU3>$=HOYVW?( z12uHKA|P)k=K-wwwJJ9xAeW47=_xt`k|jEa`wCl8kn$GI2}Y48xnCa@>t1G?g_vq~ z{<+hjY3iKtO>1Yrz22H^?U35p$Mb;Fh;YHwbw2&tcjrL51mVO!Xf77-4znh~*02hHgd8W^^^t8qEZu=fYSCbO75K7vs*Yz!>d~J1H zs(8cY*lQ?vx<=R%>Xzgc`=n}E6Jp;9nbOoqBD8Cznwn-rdzxT%QQJWQ$758F2R>e7 ze+R4HZBYGAY>2A$G%NVmU?>c1`?3;CZpTL3qwD0@Ml;kR_%Stbali~aUvg-IUxzN( zPEZb7)5_aL3F?@kTTm_m_um&qcHlEW+LlV_T`hA*VGT`cQv}gzilwbqUs#UKDD^nT zeH%G^s=_j%zeS>M3$^hw%D4f!+Wa|vu&3FXw=#2GNb1T}k$EPtbW6!v&6Bi`^n`O( z+ssyZTH3&Gy+5-$S0d7OJ~$&4lQ?Wvx3^dE!#pg8GcnnrEFTkmv4iv_V9B=^7TcTX z)3l;4^qACZ>cg+rrw(+-nFS11H3%eMyI!8C|I7gG>$sc5gK(SJB`FsJ+*0a=z(KsZ zFoug~P_~?R!#<3FE!T`MLtEv_GR|{-rjIN4_+rl{gSxCa?BOy@p?iNnus>I#&zy6H zDnzu+2{D*(ztM#>%3)}Rkwc)tu;khP#KL`-u9v6`qT3oCSbw1Q3ggX&_NoA zIAddKEoa_HGXg1=2C6ga7$suUIlK2Hy32FYJiA{`&mc&B# z&ZP9cm)hbs4!?FL&@*YchMi=Cx}J~y2Jjq_XkyhfC#vMR^#UZ-xhF5%pQxKiT89~y>)_Nd7yOPPI@(IY z!krmLb%8}iU9PAg+fmea%T$(@=dNB8+MYz)oZ{u#2eiYHZP?5WvdZojo;*1h(a}cn zU(nrTuSR+6k}3hs*Wa*O#f~S7wWaPq&eGxtBle2y@!P{TvK0Q@WQRC&unOHKTUhm* zWNV0OtaE(ok}hX+$R{LWn}rH{X?lUe>ZP*$T=QvTUCmw6zLPnd(XIh+^Gw)4W z8;`*)AY{P8m-L4a!adns&~E20t@gA-Y!=)gCRzF=`&aGNvHCj{YE_yS?yl4Ng3EA3 zqj4%S8GY0@-9^Rw2YJ7gDX5z`U7*13Mzo7SBAoAM=-T=t>i97jc*I{EbAyIlDAXL` zmWnKebXsGG+n#0BzNF=;$5ze>Mrz{g_pd^*ci4LAicZ?1>-~p69`WRGJEqu0e{98P zJuqoR$u2%AgiY7V5;BNWoSd<#R5L^n66dGI#e>0~*hZ(76AmXg}4eypUTh z=5qdUMNB=>Czi`hwsHdy{r0N>`o}AdI1R{WuGTgaLExp^O{@1I5@{=A?q)*IItWQe z9wOe>-FLNT;o^GQmK!68#-#e_g|s^#BuDh6e`a`^1_7J;yVj4v8x63Fo0p0pw-&MC z;0tAns~)UHRZQ)kFB21Fv4uw*6RvIa#y+Jj%3Q(JCI8AvsPKpTPvq%`HgB{yFvUYv z;+9b1CVYSt9S<{CeUbj7sw%T%)8Tqg@7~25%Nz)S=++r2&s4)ifHXQduxxeNLG{1y z<6TA569c6$o$Q$>tIrB782|idMOV2bEYFzK@#X^8YTUU1svVAt#;(uqtH~ji#e|Cp zfldGDM!$J(L8Zz-_bmGgL3L3q<5$`*jnT7T`E>ng-Et7lcgyS;lv(qx_;&1rtH)oV z$_X#Qb^$1hm(E`NssFRuObT$>q5Hs+_4(P)_g=)P<0q>Mq5l3SJic$S*G?@GXaCqR z0BJjBiwT4aAW%9~Ip6b>)Yr~iT^yG*6-@_ZdPTIG+-!dv|FM(x8k-zGlPGXG zg_roa`v&@ql9&#J1P7_+_{suGHm{6|+=iXIT@LP~{O4>~A@t$uG% z`PjiRRPOtj-yi+kB{p0wP{H# zZD{;#p7gySe*lng^5Nye+B^<}cBq;4OT5_gOA49B%?8%p1x4Lvp4!iJ<7(tJtR|qA z61A$e5+&nJK5S3J%F32|^*A$E?k!JCQ&UoN;mVw#NamiDdt1)jIS_G?DdIMF z?i3WojkzaIRHT>R`v-V%$N^uj`@YW4`T5YHZ8m6H-wrue+-JVk#EDnft5IF9#RSdj z6vFwaR~qpGa^UN0)sBY0U!|XpRZo}a%RET#|Miz)(#P~}_>`hC*NY4^RD?4COxAn9 z68=4RL!x@egdF4CXVN?}>nmbbJz8-nb_V6)b*k%(Sm&wIqIIACsn9H9240NMSAoho zQ!-Wc+_x^>1phOI+|f!a&4nG8T~^*4oOvas&?Bah>Q^wUD@ROGd^|gqUgPU%+CJ7E z8a)`d6lWC^%~Nh-Fazf56855Yqcpa26!hLhQDIhvgomp*O?xW&0 z`=IeDQ#s$+WR)7;JyPn`%A~=jZ3iyzlKV$B{{3B{;nM-rtmsaa z0D(1`ffklR)U%#e<|gHDYp2lKNX|Atdw77@@bdAAkI9=V$$(tPpft_6%0!{DKvh5C zLi#3dfYTA{;UTx?B+eVic9CyA)9f$9nCWx%CDdMDW`VtP+Gm#}ONv9K$cVhU$|;9n zX1_`LYaF^b_BhvUA3oMgH~$w^a@&aW6P-RK_Fw{3b6dUM+V0k1U(Y&cnnr0Ri(#X^ zX!?0_&F}yUVQ5~OMFjL~@B4nqvM)5J(E_Z{z!%X36#l-iw@hb-J3>^A6sedLU6CC@ zbg{uoLSx>u$TFqXUxn2XbB5Ydw>Dyr-Oa*-9lwp04 z#-Qz&&9EjdA?PpM#7d{AV$~-n^couh%jt^?Y`!bj=vmd8WYa1bdJGmhqgjl9?bCl) z{xk`XBLw#>aM+D~``YieOWVVHJu?WioXWIi>E{&uv7tarK-%8c-bN7blGKwP0FT5V zRi1~c(MEk!UgB^5q4dE={s2`KW z7w-1Pz*DXn&<@`&^HIrBCB5l<0M%lW@XzUnb%Jlj!NHr_S}vgwmWeHzZ&?D5E^03+ zQoPc?H9YVMYhFQzMpd~sa>i^>E%wGUTW1U0+2D?mb*AQ^> z{K!9nvgp2&hE?zKOa2g6p2#JQ77`p9e)=1FSdU?9Y<2~YI`=5l788E$)913L(?JBP zBW6U5OU3QSh_3skE%%ZvZ|MgD^2-+~b(pJ#6TbSpCkW%!YnYE-6Yw=9ok_y`6?brU$Q}q!p^CK=6X|^znvA-IAA{ z#`(Dh1V=C0Yz|-InsKucFg-Ipl|<5G)_i=2#3r4ZtlX#*YR}C<^&3-qKphillBBFvH3O-%R%WxBkqOT2;vyljLCU;e|l0UtCDt{!$Edkl)U8 zcXxMjr++`p>bHZg$i&n}euTGYjyADL457pcw;`vqsO5EnitRpi!MaO)&xE<;W(|Zg;E&VSjDRZTmk=1BnDXIYw({ownB>++Wa75r0xR^<=lvkSv+CsLr;< zHY-?Df5w9uB%H?l@s}MiHUWD3F-FV7*?bGe=~Atxtk+BLV4K5xXjC2u_IH6UOrox+pqgQ z_Ybgi>ilzT+`P$~b*vb#m!hd!V6EffPGrSpJf|?q)?I$9nLrH&5wFq_(^q1@!`MVu zje2Lz(C=Wk*K+Sf{4(!2vT7gh>&5O#iiIQy>pS{p2x2wfk~O30Qg6~#`Np#VsFX1_ zZFC%e!g6pQqWN0wIwg`L?`rUQO%qtdqIdDPzY zEX9G8W5RqJ-mZK({U{=|0^UQIY+Z^McQiwk?EBvm`K{n>0!kfF5lZ26BtW}0a4v0V z4UPz2$w5A4&IxeeAg>gP%BG@~P$^K?QireTLQY9ZRMux(!uy-Od$>YVfKPKQB}A$Q zd=soZI!$e$)z~^tz5G3>mw?MzOkZpqGXJ1HuwW^Fc~|zYNXOfW<}X zAsX>*>)uG^X!IOagW?!ygt7$6ujs0srxWWv#68Nmc!dH-Rrz}(&J0p!W@o1%3P(j9 zkm8M~;9(npPAE!la&`Vel|iH0qG9#uVbIg=iw?1|0oK6-0D>vL`Ey=kMVF?Jzm9QUM5PtZ zs@)?2#GdBKoM)0&jujemDu!v7fYw(W^!I)*&;~5ecp^KcZaMqI+L^A=&5x(KRh7P> zLrt}3rg`qPmhT;XrW&8-N%{Hv!Bwp3V96vAoYdCNc7@s$g7GiI1Jl-sl+20!QrsWY z2i5;~I4Rf->=N`gg4Ifcz$^N2pIHMXln zapiXzM>}m>7oXLoKl^=P^J5xpLOfPf1k~YgHZAu3WvHENLGz3!eK}RUL3%I$cu+3D zE!vMUl4=TH*szdB!rRr{B)2PSI*#~i>5^`~vvXt4_erYS1r+4i-Y3&IPu3fpli+jAlk#ZZ6fXjenfc*r`|S&ls&HME+;TVl>cTA&&=G z28qC%y(+bNF^6o)+&pc#tRkVPXv1AFnW2BRQXa0YrmmNcY4Vbmu@`JaGCj#uP%>1 zisp{Bk1kg&j1MDU)Fft5RTueqX8PO+J;a6y-&ox<;naLz$jYyMH?iiY3e)q;-KGJV z$MB1CbCC^m5!=B6zMrx>u?oK-kXE0acGd0p|1E-1FtYCY$ak|mUSIOXBm~HXwU`bG(frcqxT}bN4p6@zK z%DW`M^A_IWUC>zvE8lL8uU!}6%Hn@##)#iG2k;u^nI~tbOG)*o!pxVDEMC7yM`~Ee zEaQ!Sh*`6#wWGrG2l9k3?hny2y0aRIH&faP3K%PECUv8iHJ`rKk5Xm9FbNc!wN?(@ zCSUmgvDsKy&0_FjlJ_%B?)$jfH8`x)8B4!-si)uLMw_IU&=$|x&V6zv0V^2Y;?LhP z6+A%sM!H|Q7#phdaT+|XFy2HY9-h7MdJ)j3%f+Fq8894D;n@t+p$&c~Gf$SwwZT{j zM|nAyJLgu0(V9}4{*Q`4%3DB_5&K#~Hxf1dm%(Lv&FAr&Nvq?Y!~%8?;I78fx8)I{ zORVmt@oxO4C|62~G~+KvAY6`g8=J)qr}H*T#(V%#=t!HJfzQY=l4izyv={W<*v?{o zectP_w3kF(v%S8xro`q1CH~eQvf};MQtU@NKS+otnams?0Md3Rz@)NLAAmLO7WFdy zGxc+$gbE8FL63;Wsd()BSz&Ln9?bW-PAv!(CQH(poDK?!s6Zf5hwQE`?113q4I0sg zQ7ekAW6d2US5%T~fq0oAyTReQ$haQ#h;YSmuj5QtYGVK>*Dku33nocj3?66^B_DlR ztdQ+iXmBi(P4+7ywkGlNe^~8|D-nOPPS=MPKI7@Evut=H1kCUZc9hLeA1g%;+O0}O z@m&t)qMF9EFLtsT>HJ&sa=v8*-OjPqGh_Px*21bkp~s54wV52N7KT7xO zE`2JoO$pd^JZ1$s+b^0> zg?Oc>inosZeHY|AMBn4=boe)?eI2jvIY$)EzTCJxZT(jKXYuu4Wj{HlHms#2d0(eI z>OKa^H~eLgpN@0nEI*8#_NK|>x4ocGcl7XXl2QwpD-U!3EX6r}p^_=4=^xvkh6^dJ z&LRvfQ<9X>5wtseH>g&A^o{&=Z7(mB3wDG~zO+VRGTbtmeDUEC6AI7W)Bcp~4EmcV zNIOmlg_jk?;8H<5jkTMR`nQ3@r@zmRJLWi=R7t-azMuK8amG2n=*s!?>51#xRJ%5o zUH0rOo=*^y#Ww?!HH3UOvl)os6raj3xft zHg@EEiIl2gZ9lAyqur*;leLa&^Gk)oI4%3^zgy`VT)W}NG0Ti65BmLOAWkN*>PWXL zS_ni`=wzpb>?uQS4uiujKkD z#!wt4n4J9QBv>yZv3k5r*Czehiu(jrUl^)bpjOsyxW)#!Ee9652XfX6{{BiJ=Sz4s zx1T*y)gwV&jMznQL={iP{2MODg(dg8`9rBp1iL3c*1&;i(le_Z<1M4^|TkGx(D!@zM1*M zGNebXbY%5*ARR_s49=UEaD&~CN z^dnteYCPECySrsi|6C2cqk?O`HvbPL*vUNpKnfxEc%Y@=#qtjo;!JE z_>I(&NlRUAueXl)NPY2 zeOUGe)t4K!<2lIK0bO9e@4ILje&ePyvcoi4-}v*C9(&sQgR67(%Wp2!i8UsKJyHTy zb)2a}aIF4YFt4C^*YgwH_?Q^SB%tZU%LJ{ zC)nd0J**fseAm!$q6!d}HIRer&|s`#cxPTgBq{xgr1_i7SsZv;~=wtLOn;ZEAhkAOkmz>Z*SbOI+P7$6|N2*>Td}ALA}Kbq4-W^ z()6r22mp2}Uj_It!)~PS)OQ$EjB`vrOKomYwyrY zEVgep3?;&<%x&zeWp9~>{(H5M?*WgPrGwfnhay~|X(PqqSgL1-pIvlexzrHyezPH1 zWc4^yO>Z}nG#4fhh@7RD)LlT$IQuY_tv1Z&jzIji!PkE|eEJCxd!+s4v-{_l^Z*G< z_<&5zNSV?ZYIPiSDtn+NEOt4=c1G|JGU!V9l{LQ;ChyWL(#3m!tX%4Vi_XnK;FIaH z*2Ks0ZU625N_cbSME@4Efu-_JwQ-@zt@VP|VN}|67FN#Jnd6*+4cwcGUlgzlXWlrN zS2Ah?;E0zv_#~RS&OCcELT9V20!zx4q&>3>1M>cjK^V#E39Rm1qb&D#(D?CC>XX9N zqfas*OyVkoMm>?^bdj&DM6fB7gG#2!k+s#^2 zu^K~c4QF|se3(TIkHpq{qK7E|qW2`1)(45GQ_lp0gUnflq)0}J(q5U?A zv^?=(Cfg&iXCrjH^?5(oBw5eZ&$nMN*p)VRtn#62flJvAn`K#-w!Ext*W5vzTrjnJ zs#1;);XZi$n4{nBK%C3%%S^lHMu1LrYh%Hb586fuH~jmY;XG3=$W)ucxNG`y3_3cx zKx)O?MGkATPtNrEsNKyef6u8}!mNh+EM{AWo>8)n*HIP{5^{2+>D9I}dXQ(8I}N(r z6@=Pmgwuzl4FZn9=wAnC(OQ!=ls{2?l)Sm@m2=d_dZ9fApk9h`5_>JyBY%*FLK^YWUi8@Q{mQsoLq6hDUl}w#m3(j&y6KP6pMF5X}hIA&J{|I)# zHUfTl#eNp5`)7*cL91;P{_?ZD^xtD_uHNsg*tlh`MvG)>xF3#^v4+#>4vz606frsr z+&|A<)MLB|*xNCzv=K;%_+R3CqaPq-t9W->zO%8ib&cfD#fj?kXN#mtx@Iy{j=#%J zT{v=ar!~^1@H(42Mcc!gxWfto?N*#;*13iL=uYLevzxid;4g#9uND2Adn6JlEIr1S zM~@Fy9?pnOoNB$QlX8g)yN)!#JbFV8As?e9>1S$zv7hau+PTQWCa_B&LFz1(obcsr z4ZeXu_)dhM0Ptt!7(v1>Dt$K|k{aloR*a)&d@_!9KDnkq|zA^X{K%P+MiW z!4t0)i+%2-i2uS9mh})%(-;UtjucBPS3zUt5+SmB4%!R7hClmSuS7hu*=6o!7p4@F z0fuD7*quOTlms?R0wx#4KR(ytQJjuAiDuuwDw>`qE9wemzbFvSzUbcfq2YZYXX!o! zIBPkIIXLj9RVpKRB!Og+E>m8yUGIv83Sheiua%DO8IKWg>>$U^4Z$_z=+Yxy9KQZ$wzo|^Zwqn;N!Yq_;4*3r5ZwG@fVP)#8~47bYQDuBm#LofUj`Y{njp?;8xSeK;f=3sQiU(9)tqa9b=O*5 zg>Kjlh?nv)Ciw3@Zi#5U(qk)#dQ_FOMA%jq@+y_3@q;-p4!Z=oc*v&}LMoON=pv`p zZ=dVD-u_H_(w=>qAkE<>!lo}F@3pMs(Sl^!P3)$hTU6z0tp!Fsd1TG4+|0$jteyd{ zoA=H>{%;!jo>4GpnPbDc)=5{o%Sd0=O@X+Cbn*^LUYO%HzZtB{cTYX1B~~FV>A`L7 z#x2?V($55Qz87t`le67JZ3JT4^v%2;Y43|H{g|2B<4kdo-8(y~rz|eyMYRaEQcUNW zBN_-%O{Via?~F%bH4f(oAVg8IMG`bgX0PWqP&}8V+ia1^rucoDUi44fG?6>znk=lS zt-i4|>CB51u5+ZpWPg0(M~ z#C2Y#wXrcE4JW!?4phv+q3^#}dON!*iv7dzs;Wss^C|LyHZY3gA7V0E03Vrb_emaSs$ z&1C<>-aM}0(NkD_lPLLFhlXg)u0tAfcS>^vnb?^tw7V^7t>pIOM~5HN(mSk;1pDX4 z$A9i6y*W2!#{XQD$r$y5TI(rwgRFX-*v2+C^54`}9Wib$?#?ZguEK8|wqCU~?-%*# zrEa_F1(of*v!1owYOXQDGf=g}VeFt+fAZ;hFW@miAa6ONu+t>o3kE6l#3gpP$mNzn z{UL)7&KEc0Rd8C(4de3k*upQWmNea|!@0t05q(Lu@-ZU%-OE4ri^-WMVB@l1g+klM z>kmtmv3N@BQTBOii%6j7=%IvD8y_3hc-O~xG*AS7UxTT3v>@#!Xra*25Qb&^sN8qE z@h6AU(34XdD=8cKATvRPnX|W7!)1eo#*-HuzSp)sLfP5{9$luSlQ!UN>#g@S9#DGP zW+it`<0M>bbb;5w{c6NaAS02}!lHd6!Zh``AfGsJvVz=H-igZ4zlBh;1#5b)uudia zh|iPAhSp{(9DP?A0Y2M-Us%m-{d5q-)!up=jY;I5q29Jw3$&oy-@#WMo8rG8jkCRd z88~j7rlvvaP~ZQvE#==_8-l?i)P>5)N9fKL)mFE{M~Z{*gg@t9D#t)^N;Sy|W# zJ!llBeDdOY;+ZDh?*kM1c|LIadGLY|@S)OM)sIg?5S+$K&+ZtsI<+*Yy6w>3X}7E7 z<+oNNH@6nUcA+_~T^nLHcbFrDMF$Qzj?<4`#B z`??r*YCoT-4)xSx7M^Y#;1_KBup7kpi0Xy;(a=Pwph}}9qa~KZ(i&{y3!)uj#*Ns` z?OEye8qL8Of(y@22X~ui$vU2kY$j^Gs&&U(mCf*95b0NxM!Ix$D`#Fp<#cWy_A`%3 zj|4U93RcroHK!ylX4TEdoC#eX931GltJY%v;p3gSg8A%-vsZ*r+3P8}ihLSo?c9BL z8eIYeYcaiW1WE2rM?bGBxiw`mZ|~}Tn@~+R%hC;_eY^I#TU1-Ga$gLM*UF3%PQ6CriomPE z?r~WJl!?6zZ30NX${M@)IKFm&$m7eYiIi+xcdC4}zQ*XIk(uIIn#rUUYtj$bBXy>u zB%B1F&hF6{FbOT&HL7(F@?~{YDCO?TS7b&NR(0a+)AT$a+nx49i1M54!tH~GMyt_B zZ|1~&6k8#DMB6}-0$)QS&K!3j#j0Bzl-tMDtYYzNDda)4V4c=~kzBx`_do`2GPiVl zUo#lX_R#uN4&#p~g-4=t*c(Rov^r}67<%H)VxbwP)jZ<5fc;*Rq)zuNu;Xd{fkLTA z9qumRe#Y6(??TV!KlOG6l~Z)DJ-c^pZZ<$uXT9HZu6QOP+Axk@g!l1034Oqncyqm# z1p~MXQR#^<4E2c?r|CL4#^`m;-hbhA>%V@b>1%&{0IFSNG?0y(`)#3a@eW+!;Dr0o z=tI@v@W-YAc*&FhEwJ3XSkfxWxvT)sxIiS)KaWb1w0j0almtE{1_l<(UeMN&Lv5!{ zt-+p&K2a5X&&L}4FL0r;CZ^+Q)fl36%uqFUE#LeOi}%ipNM*^Mk7gHoIC^+LzzY<>Wv)^UI5KR2AkWdB%bWenV@BXt?*~eeE_Vje8#w3ji2ly>xv9q-K4vfA-0pxKfDd)oQq-vu|ClXEag7XzU0&iGpL%c@2aqlO$Hay6SbpnTCclFU`C#oy*`0r?lp|N!02Ze zg!7I^smzMB*RM^_84(Nowr#XfEHGEvUG3u1iL&^_FoD=0T3?Sq5sZ?gVZV-BKdIP+ zsEI<$D0~Lh7BG(W%oml2e3ypWyyk-X>dUZw#9rIXWvZpm#}(Vr)y^Vx|5SJs?tV&7!SDwDi^g`P zyu7-j-)I2%`pXCE+>mFE z;B?yJLQn!;?IPn3nC}74QSgEqliG#~oZtKZet`b<{DSPO%UXho7iw&MRGgo^P4Z2T zXnL7=({ANa%96g00SzmhtT{-B1#z?=lmP@_5u{MLP1(UeEC?{$iGJZLWv z?TBm8KJcEM;>(<69~GnrJib9xx(;q$sYYn25nmm1@yETae-ONqs!VEi9ylqn6Z%DC zE7Z7>QctQ+R3`&FP)!^k=%ZV<|C`JgH9vX-E~RbmSxjlJpFLF^48>GeJHLg8hcx?7 za1WVnPR<@L*Po7S zce0R`p3mcxa3eJ2YGfPw$~qs%A@fzp90%106)2zegiu)fd$Wm&^h<7{=0xbFY46iP zfg;1_Z`=~z0m3#Nr))x;d=qZXmn#T!JT;3nQ5$1%R#u6TNlD3TWXE!dRXT&+psB<8 zr^|NMeL91#iwzAJtiSwmE|xBUw%(1%=Zo3$k_cwwebB@yf7m&`7UbA){|lE3TH5k< z+~|M#Ic>^)pXzP|i_+7m|2V3>$UXPD_zdK3%%7d3k~{uLCNv@%<2Y?st-n=tcv`L? z|MthKE!hwweCXZe1tX2mKnXb1AHM3jt{}$E%)AaIVX{bUWI~|2-+7i)lw^G8y{QH7 z2e}6*jdyYd^4e^8M(@-@&K|-tEUbEG-b(PCfaAi*@)od5>mmz`5218N&%@1uj%r^K> zN6j9jy{P+GeUhd5q20+DtBuj=<@SAN9v-}(KBRO_MJDF83COkP2Ugc&SHpuV{B-N# zSn-ZVt_wDR2BQDiIMKIH;8t$h!%jFxB9N=l*ZKv1o2u<_l`V}pSgI%P@x8B#aXigGB>BkbOE~oWr~Q7P&5ik~dAQfH!BS*I0j7wWh6WH76Ok z4RXEQ+W#D03;Q{=H+VQL_S4Vi=35%}X}W}YcV?zxO492XgE&jflJ4^vv_nvm4Of;U z%LXY&RQ;a!R6yev@`M+RpzL=Bv;M~H+#Gb6uYlYHf#dfeoZNStn>MaJ&vDrEsp6{B zyrIb8w`Nnklz|Xe2RIfGE#T=J9!q3j?KkQ2=lX0NEjP)r&K~Ox!0^LCn~o}devOCY ze48e?8Cg4suGozv`ZPSo$QXCy4GD!m%EjFgVwzbW9g*u~08BR5;Xh_`&D5-mOUpep2Lqc5jeBHu6q{kMj^4_{2N$ zF}2pBo642F{J3pt3}IcC6#FNv-qt%^E=y;mamMnn%3Q(kQ-@B=qfF$bEXz^TAlD?A zjRbQnRTWL~F(j)6->W0DMI6+$Bv`s|E*FU(O!*}TPb_8rr&h2mlmCZ_*Ief3W5_wj zdzz$5abj8mEFvy#rEw#eJ^d$v4WtSpp#Ee9b?7UGu!SXy;u!I7#h8T`IKJBKTBwdy!bbR9ViotP+1^eVzSZtht-vgre-_ z=|a9OQwjT|2~z3I@Y4v|kX#+S<_SxixOe+SnTEu)dMgPzg^)%qb$5@_L=5B~h0MwM z^8;u1KQTJjIyaF*E?lRcY|IWY55ahdq}6M+_`O65^MbX5V^-CeK2ipMEX8D9llGUv zUN_6`(dT|%DnFXmZv%)anvVJ4^J<6GLMRt7myi-)3Khq7ZtTmyKR2*3l)h`(EzT=8 zu7?@xevo0fMlW^k8akwkIWM4)D7{Jx?%uKO>)s zf)e^MCxta!4_we(lUjb5x7lC9c76?75tp{Od=jfL)84RVXfVU;xu_^`v!I&w`}CkU z7MoAly6vZ1WgfgUNHvzp?+X&X3ue80{Q527y``{2(^GQ0H@{$N3NA)T`$-r{aOYG{7q?<#i-bg`pJOKY<`62!4Xr+K) zCA?{;22fED#urtM9^}Xo`=O|rDfUhA?Q~DwyVNQ-+V)QRQppkX*M(Gt0STF{%040` z^5y7urLmB9Kczv3i zeR&Ym0{ZTp1?7Xq0evpF`BBcb~lI^mV-*wAC&5EtpX1X5d6D1^ITDiTP={_;iX>S>nf6901UWo3r z>Xs-vUPZ4|Ejh~1FWC)9w1V?4n1O~#H3WGMs^Y@%?PoA=Pad_w0Qu?ca_Q*nl8Yhl z2UPsY))gA}2g&STN8Oj8);lgfqbnLr9J)-p#2TWW1T&KE8Kpd=<4f@u+mC4MBf*@3 zc6j0DA7>^runsg*9n;iTiMx_x?7d^Z;(g6B}Q>R797Ym9A54VL8rNcPY!4q8GdBk&*RLM$QsI_OOAIC+Ek~V{qDA|f8FT6_3ZR&jqqJUr@9Kxq!p^)@lw${mphdT zC;}tPgI&?PoZSHDU%mks-jEcd>-dHwXho7T#HD7&# z&0(&6z+VO*3kQ6v1V~-QOrFJ^c4zz>uH4#d6!r)IF4Igf*S9I3=2uw`G6eB_{+6kl zl|}L7(#}FXMQP-AAH3e$o~*XrlV!nP zw5cq45F`VZYjo)$OT|Iy&X5&@SO)|h7z?(clS{v68=Siu9N!=Z4sI#}8%8P?_vJ5H z1Q@>QW~BGmb~Vq|3!da6%QQ3aMBjwvJ6y!FY2r1X{tw>p^5T+ed=c@*8SoCoKevM0 zAO#DQa{b{HWM?8>{~>%VimIQkBMzvR6i6b8`h9+OHY`(`)TFOcBlLSzgSR2%?B%!@ zQ-;VsTW|Uuct7yO$#Q!uha*VJNkWf)S)3&CWIpce$RYELBM3ahi-9EcAe;%`AugzC z%BNhev)*HHQr;oGEm3JQ*IF`lVcE$FOcct`-7vI+mrY+*#Imlc6++Kf3Tn0x!?|UV z+PnclLYW(yz#r4PMe;TD<_HgX^=lHccIC^{TQ{o$rN2#3BD;g{j7U{tq;8p0B0Hb9 zuNdImGzR4}(l`PW02|n3eZx2MPPa6g>)R7C4AQX7eXm9>&5ExopPENHWkVz-B@_RH4YGZ_XPH*f{A7{J*Ff$2kz4l}nGJn;KV!j+oE(<>c3m-Ul&jq;VK!xh@|h zvQ9tqQ}cdrvxBqYo79}5laS_nfr+PE^wW1>=E1)YF)n;hA_h>ewRwl=aO|Uk5JM^wymVI9&SXMmmRu1b(wR{oT%C9|0bBd0+ zXB}AqY3j>$Xf1~1=mT>}UP}6h15jFY(S*$)iAUy?MB8{g!&EtUFgx3@E=0Ey>Rq=U z<5Sycx%6Yi3wYBPYaV3N$;liU_{3de22(|UsSx5K&0+$Ma|RILQ;+D(`>{KI*F(G% zDUX|2q{+VsS^%&!>A9FfonGP(8UtFdQ8H)O+24+P(y@PumhbR>h+CY6hMm&T+K?LJ zT%aS5cMg)xYSMFHN}LUg2rNDJN303wlQ2c99OB=CIn z;an^9Jn&G-9<}W+x5CIp?=2)Xt5M2cwYFB{598T@BLI(cdYm1A<=Z1a8_N^Pd;196 zC?3eKaRCSOL^DH9C3E0q5DigmCVoASyvz87R`6xA<3Q9f)X4Nuy|sN-beFD3KJ;)8 zfG(^Zat#X;UY$t>Zom&`gY1~2P6NyCrTtExSZaCfOK8tbkKm%+33AcQC9OK*-q4B7 zP(>;gPT)Mq{~%lLXk(I9t+g_9U|{W%`|94w{uJ1oPI8D8jS>3qk^7R|T${m2rux9p zBlxL*13k*1E-NN%UX4Ry($B=t3znH;TlBEB-$-vyb2)EbPDU*OquuUSXd#54f=+gE zga)1^p6-|%YvUZf9ygKwc?ZchZKl}FyOb%=_|A5q6)n+OqVm;ai}Ng6&U{3RtYk96 zAU9YyvMjP>`~B&ye2pyB#FJu3+9~v$uwCI6kES*m4y@}G)u?Ym68l3?2>2B_4c&(vZXGE4Q=loig7UbIYi)kzn!i6*9{`ZAT#E<{H+HL6wZ#wA1D$ zEc2re^{ekUktSMk&Zk;OX{aJ>6jHcnE6;x-n8XCvXo;v4o9ynHAnnRzGuzNffS9va zlnnL6@a`}4dISo*m*c$Wf2?d-Z_NADN%G+bq>fY6aM>_h)L{U}0PFFU{Xy2+o^xK# zZ6u?y81FU+p`)OG{^YN5TD8Z_Rh8l+uZ8W9C_m? z+3H}4%RFjbjfMUxy!IRvkzRbBJKMvksFF^l60%~O%=>NbxD|2oqD!4+ve@CH!XwvG z*02gq#dSryX7>MP}U?mvUt2K=#vr~r?!S+)4T45-Q&im%bc)P=YZw`D+Q zkZuP}o;(!#m*HxBZvMhqKw`C9Z3CUad3gq;Ho>Pjx7zIluFCnUfkzA@geBp;1 zi8mno>uHK?Dw-&y)$n<0B`XPDop;Fl;{L9$26U)AUGa^B<50N91K-9@&eWYKH`~WH zGaMwGq#H)+dlujncIj{q$QY)xQt{QX&uuNknx9feW&_~^RbgoEIcI_*YlAhy9eR`? zmMb<}70!KjkLRwuJ*AMeun-_s<-23eD~b#6A=Yd__1PbM^_#1UU=}&o^Opw6{*Ju; zZi!2l{_t>Q;%G8j*kPZgYJMkRz)erQ?Q3zdPJ?^@(g$bDLDk%4Z4T4aDZ21+S9gBV zxgj!IUW$F)0|fMNr@wzgStZ01nqKE^x;)$$z7$ndQ0{*cVa(?=5LmsC6VMUNLYCjV z`POC7)lKND1*rW&*a={-y*f^W!*ch-fKhg)041Dc6P2qt`nF|EQfiAdQUerTz^J16 znX9Mhfu#`UlMSoy-p>XeABqT}wlp}uHLvKo8w$5_o>%(oXYD4=JH^u1(uh?Rd3yfBEq%q;al-&lrNNg-oLY^#kB|>H6+0WQ zG|w|%2b+L81+;c^V?<)cHwx*58t~S`zOnA+g}syRKayq z24ESgZTdH?z$qtMd|-Py;{^=J7i z&scK0Q;q?TS|ogB7t-q4A_MhE!*?xxWmY;&Bh+QPK*rPFdd!(c>_W+IAO(ick#&pB z!Mz=nrqQtV*ZIuO#g(M(9k;SUzEnHW*O`V{n1(zq8ZKCQH}Yf49UD5n#Y|HN#0Hx4 zoTDeH$|W{0P_mO6K94UjroI07METdR<(8?4y=)Uz6{F4t<$s+@^;OPKr}x|`nV#>* z!*yGx@~%?vk%jVNkxj8ANz{k5;{s^<5hv$#6IQj(lvuyuZ>L_iBU`Ti>b~iiU1@Fn z)U&SkL6h_yj#flJS@^6o$yWoww5}pg%M+WWyxZ?g+XMC0KBG98@TnO}GBDdZXmB!4B7ZN^*ExMaasxoR1fz8c#=Jr(=Vh{#aV z7KGKsAJpVzT%V7cK5zH!?e;DIu7t9+NRdR$s0N+)dj^$R5(|G*dFCtrb*o{%v058j zJlUi2!tMK?sKssl5BiK1wh3LmxE%0?fVq+ZvS5VIiQ=(v6u+QaHkHMeM20)g64{H`TmoP*A~p{FM4S?FU{UPK?dqnERNK zy)sb4Ho9F;(s5zzo=y`AXqA{Gk>qEx0=%=CD>Lh8ae>`^c+uu{=_5m^A-BgQn^q_k_cu zs;~Y~$W05+;9%cdg!!FLG*Q;FaTgobRA$5A>#TpA$o-o*SkiRne&oa;Cd}-n7aaL@ zY)EF7D+FZ(O2TU5p>qTKyPrEq?t|SbFM>s;{kQAOdKb?1dw1-eZ^ov^e-wCFZy9Xq zZ`y9qfiq4?8ege4$x&qV3^t)&r4ZosghV&so*dvdMancFj~%jn%5>;{CtARWmmqZ< z`ABmPbgl~MUA2=rWf2_%egRGGpbtHkzncx04!w7u-UaYc40nBN7dvPi4SbWtwgf8$ z-Hn{`8-M(MXt@9S^7UTasVUB$(%|(Sf&fN4(=4Rw$SfQU)E_h1TJcnMgfC?0InJ}= zsH_UIQT7b%wQ|MlkB)_s<)63!)3Q)>RHvq4NqGa$*8vGmg(W8f{0EgTNUWeg-F-{9 znI3xP=s30DrT*M*oa(NN9@;kZ*0!L$$$s~s@4qW7dooZ%r{xMt`D-bB6%sJ0jX1DNkh!IQL2I ztb6M;lzjrNdk_HEBoBcR7k`_S$6L!tdtJyhL!XD_M>z zK^jCQxOO~N!1|sCE$PZ)a3Wi`^`#NH#H$voFd*qna26@c`Spu1CE<0EGwvX#pm;&J{L^D@-fLs?= z)RghE4!v=g_i)dQD(Or9;b~Ps9R{&HZt3!H^G7GZA@Hl<7RDf#_G6}71^e39K~_&W zDh$|!`adU0}9oF!4CTR$&cI zw2}pxcdrC~Uf}wWNK$=vg%Qtt(0uwK?$k>)%P2O{Xr@ww+a?f1@qx_V!VBkhS>LXi zyOMDOk`&oyY*D9RX(m8m$) z`tmp1SLRuGeU+oeiu}$=I>BQssfUPf9_pYR3jg7i586|Zg6WVXi$$|A<{Y+hXu zkK(@4rCiN@i0z+H7mStG`jUpo){BhE+8(=n>56CipLNi`I%uY$*$K+p29}qWGbN?| zbrv9yzt#J0z&V7(Far0CdELABotNu}`h?=can<5D()tDV8}%-4hsfotbWCbw6)M&} zPAt;K4dYyA85vxJfN`PqJsvsRmc^tVJa2j+!adty^QX{wGh?@<_$na5VFswXZ2fTa zBKlw&om#$W?jHX%{B3mTF!ixN>5QRWHv3R5z$+t;Hg;)Guru1p2@Y z8$C3hM%;b>^oFlL$J&XFfb$&PC}uMB|6*Ny3r@KM$vqW{-!#!uNG0&*s;Xv|j%s3kJfO?bWmVh2Gm6a|jYlN_zd< zz*r8ooNA_hxV`V+z1o`1mD*Vq>apqU`KqXF!bVS?zyWH@+_>N&yML2#Ni?mv_CGRh zQhqz%??X{TuF;x7Cn7^raEMc3W89wCynk~}X!&VXMvQu#rdS!jC{V?#+E00>XG!kB zEnh0zcLhTa0)bOO+jpldK-ynTEo*PwHI92yE1oC@-t=UtuQ75|D=ycVuc`oDqZLfm zssQPFDC=JngqKpyE4aD4!=`wu>Xki~OAS0{>i=K3ZaXj0Jnlr^_jzi)HPP!g4w|XT zsmW;3y)vaL{BPr*#HTg42xq7l=c!kx_EipN>DO7xb;2yEmy)Pl6dz8-nY&>7_n%yz zzi(+mz{Vo~o-4InkA~P-s~oq87%lrPHT>{%T<+-PiK{OaD4A5pLB9G#;j6{`5IlAp z9+|-cKLk5UkSysnj#zCMTpvqOC9SqQsdRrVALs?+3t0P#Yd&OZ>JdpF$n)FjlMZ;J zlR7N9jTmdJvwE0Rq7Zt^(#(PCBo(ZZO|SeYB0XwDsb6VM8P{`$CO$bhskH>dW|y_g zEUWijxxd`iuc;-TpNhJLyfyRcT-Us|d-1D8ReSF|PYv)Qk>@~=bt3!I7D5@mtih7@m;7pbQyV&YcVF@lUzuEaJ3@5U-~K_SNUJC-CmWJ_D@VRZ zd_dcxPbnBt80c9;NwiM zPJ@Ofq*>Z$3Eru=PjaCSTWUUq4K*4Fb|l;W{7=g!Gx~N|V2*(4FCqu}`(6TK-*5W7 z+ACqIy7K9i0Awvo=Bo6nF)%THfY4F6aa2(YoLd-Wjn6nVU+e--5SLx<)oju8V@XzoWj`B2=4d zl03htodWTuvKm?{`?VHvFUpdy9qE?fB547NyVF}8lFPKai`DXO7GJ$EKDA8v)wIiza(@IcrBE8n5 zlWY_yfHfM`rn&;7^+T^96Z*5M6GE8$dfrX|L0$#oPx#~F%ryN^*P0KD-qs5F&-F;s z5Rzh%p8v>pM_kLSwji5O5zF~(jq0c2dpDQHDPFoNtzlcsobA@i3x}(3)J<1s(Pk%M zdIdjK4bJ8T5TB)0hdR&pT$ce!1hLZ+qQV{j$&e!jO;Ao}l+ZDfenHzmFi>fJZy$f1 zN&K#25bP~qQCiB5D;h0wMsR4~#QG1C8g7`TdW5l?B(>^Cqy+eKWgM!QMti7m@mL)j z6&*quWJN$-zVb`$Heb(N6?E)3PwM@zr6lPY>U~`;DoC1b=zHFbGe@FG*wmxPz)S!z zPdfTp<+m&TlEJ$K?{>wRIa!IzBJa1r#qx>Q7Jq-!?IZ8GRJBxL(arBsS16eoz&+55 z$mis!jt=*-RY2ptD>`YcRSOhzD@d?y9LRHk>B~U0NMd65N{%G6hrwzo@&&hx8h^1H zXGucUT-h)$?o{+v#24-ul~5d^G|nyOaWyB*ZZ{>$%CvkutnUCteW@~*sp+pY4ra25 zPau5z!ViN}oH^RWb!-B&=SweQ4j#H{iF%sild|z|NV9+)6Syw5UQ33K2^w5PcL_aI zh^$1uo?e=v1R2F?w%#3h+u`WX5ks1!uSE>Ml3_A5LIxMiw6*ZLeYTh>3pl|MGK-Pv zMA55T?RX=2`^M*!`)xE;eIXY~+3a6BbPA-#X-9+HZt;cS0OI(;>heLENG9h7Gp_;2 zi4_cOQ&LqjLbVF=2 z7XPP1{D__!zV&fLRLFE#LpV%mZ|>C7xURKvZa&|cr>v_Be}s+t*e2%+33<8&u3WMp z1v$*QWHB{Ga^^-(xNH_pMG5ta@p%o%BE4%LRs*8f(-^RoRk?Y&sDEVgDfzSuowl$< z0IMSJmGX2Y5V9&C2fOQ(_k>o(hBB>9Wb}h$0*zTL0|!`osPX}yXdbwC)gp>x*z<&s zt}~F=-8ayzb>C8*@d?KXWAB+FbHf3#tQ_NF5e#2F~F|3*(XJ)NL6E5W;YVlxMI)}sFFuZuVcj9=XF@oVcaseRpd^v%lDLF_gb#L zdG&^{fzRkG!&krhYCT5~lGnP{nOwAqobfZ4s*!U&hwS&g7p^B$sZDt>3Ux4xv`l_K zwM1@(lbmed&pmHW&+<9ecG8uwqxQZQo&XT(eWQSY`GPe$|&_=N?4(XcfO57ZRCdlHdd#^_m<2}C3d4c*0+ObNgj1~ zT0ioO`ECpaky8ay%Jb>?n#-=Saq35miUx#F=2b$WDks@5#v6WB13=$L?+=PBy-bRr zBTH3+C)$?vjaS;`5+~}q%Sv<4=eyYj+UjQ9>M51FTc)}p@^3$ln0Q$)XrxCJICAx` zJKQny`_;uGnJ)dbEUv3WLt`p2!CONR2T^qGvtlVJ1NHwSLjaORqCe(4N$%P&yQ_UxO^?4tZSJN6PTl5;1nBzbzIh9dnzpDGlBJA-U^nIQF9 z@+uDaRVEc>u1wKa(t%Y{*`V=hAxRce0A0NZGnJLkgi2PU%Z_kgEsjW>0qKW#V| zZrl5Na~6aI3tb5AX1EXUbJI=iTFG2TN_>L~K9*4wwAx&HkaD_>>%9PG|7~h%`j%ls zw|SquFDy;w-7T9$GS>R0BK`4Vnf9|k>`IQs_N~$NwN52z1E!~w5 zh*6FuTgDgOkLF*y3HJA9{YO{oo~E{}M)jI?`NL4L(i3Gj{kl|0d%!W<^lp+rJ}JKA zDM7k>&ZnV#Gs||z*Xp^R@9m=+qfc?)u~Fy?IKv(igf9zHp1}tR8SwMR1c*2$U(2O-*^l*n$BrFbjkK; zO265uzrs4t)ze?z&$XxTM!5x%tAe|wvoo*C>m1?QGsU!2AAK((*6rVVY zFKs=Zvs~0IS)hB3TlEO5sd&L<KGsDuc=4Jdxc{p-$7p{4~UenCz93T6125 zPhA=KxE@MQI>b=!2;b$-M++|L?0lV((~nQl2FaM;>H9st`~7c1<@i=EKHitS&@uSt zKrSiL6jz?S=CO-~dl#Xr5-;xNCgn(ythEzY00IO{9iC+zRq+zrZVW~=&OB|=9-muO z;)cFi$$S|79|uLE3_WgqWgvU~XaAViZ2z1u7_oe<{fu6446{rf4-JiG%oD&zmPtpU zdh(bjo}uQuE=WNI5A1H53iXJ{XBN=r->Ew+eYz^y)$6Azb01Z7ztfo~#PLk#DmSm+ zuUs@=$f!EA|H|^f0gk60P{EQl9(hwg9Q8QeNlVB-(tCe*;nT0V6s?>WtjSYoH-m2m z!v{(x?wBdA|6C_sflDIb$GG=CW0eiALU^H4FGe zs^h)#z?;15l3-hf2G#v8`B~Sj22!$aT&o=Q&4s~2vnQ6mreR0DzAcr*zC5{y%yy9E z{-lqrpA*#l9XNnl0|3V8@&!95PWU-BmVZKOXS3fQ(DBjzW(F^e%kXy=Mfhcu#JVP|LP2p^ywM}2& zMe5W1j<*--(p?(-C0q5-h=t&%A925|xp)#(bOsNq(#~pV$?e?hTB!~j&_oG96GD5< zVevfUAR~eeb-0c8OE*DB=2&pppOVvLQOm!pN*ob@HSHV4{zQhw*aXOi4P+@t^B^H(Ldi9t2Q3sj~Wqyr3jBrdFZyB3(Pve}?;i5p7AQa?%PD&wJg9n|wQ838M zcHV^er5w(>?MfsluA3E_`t&D2yHSzsonDPuUr%I4NfoGZ>{Kh5(pRLBRPulR&@qtM zPOjm_F%=O2;xwzBKB3goyris3c4YbXBX)n?Jy&U`Fl}?duE^xa1jf&?HzR~K<(YSS zXZXAAPnB<&zQokMAWY(boY%a z{^Ynp1milX941Z-Zdp2un7L#a*VI`$ou&@{y&~lhO%}|0(TA5n0>6dQw5dV`_pYnb z{JHw$zykh_9gUb;tnNwnb{gXd(9%siQ6R`v%bG_cN%hk^(n>Sw+Yg@VvwvimYW-M| zq9n+|c91YO_gRA}z_eKoQWoa4E(XZcaFgSNZcUi{InIyuQonh@OB)`(uY)qXMdJ&oNjWkSSR$>u2Ns6}OXhIz)-JLa~ zfZUuk3e!r^#PTwZHpN1p{D>QSR4{TQ>s74Mi`P{n%^H+ana2ZtowMM67IxSQGCGtT zsN%ocPCoGJh{$`z4AEISB=(P6Xqw~Hvow|*5z$;7eG3kcBhAc=O@qdqdl%&k)`SVX z=sqMB;iwB!XVQbCnq73d@JXWE=p8O6XxmLmQWQAaGv#e>4o$v^J=_*#SnH>M?YQc= zydWQ*piApD0$meQ)yx6Zd&aIONvtx>O*r=h=Ne(EzM+VI6sQtz|(V>Q;^e<{P6B!og(d!SDQDV-PX|%jfClNq!Si?rK9_Bi}>I` zH@1QLCitQc-WwuB2>tE{)1IMc|Ej&qeolGdq(v|}d+p6_>GPt>h>5O4VfW;w(G zV!JQ>yT`=Jss$!jGR z&?&E2(Pr*^qV5Ke?$!Lfs_7+yYa8%LQO3`t%bf93 z2$x^a%2^oDzLd}*;m!nBWSYs(nlj5yI-X2VG50TrSoC)@erw}4dXm%c8{)CzW0W}H z*c4yR6g&082J<}P^$@-A;J%{0Ue{6Ko=lh8kMN+lY+Z2dcCf(%EoNz!#PU`TUoA^- z7vfF>c5!tS+-ixPCG?~9@RWUZF1X4+&Q>(Bt1AtETPWsLrP9~3u-#%}t@&a@TM56^ zxEBV7Us_M5i5NYL&u8>RM%OPvCX?UaV+?O!1D9*c63Z#+`^M3I5>(kBy8s zUn=XEKC2F7((Y?dzOcioGU`YB6vqUx8JOKg7kz1);g|z@$ItqOHD%u9AahkF zJkGDbL+k4pO@4&l=?P~sPF6$FRFg`skGpcN?JLSS)^YKzzp+uOI$K4XjUoXL@r@3gS@wLc&5-+;*@6P-e?TmY`} zUvJev>ta7uS&_c?VgG%ug{5YLLPZaLq) zzJwmk!#&v;J9rLI>hmaeQDo^L7_0*BI4Lrc3bdGgkWLEjHEKB-Wt^gN3NfenX=N5s zA7A2gSbekBk#^txM{FIiXXrSI*021iCo41z=urY7XoawncJWXTs9bi9!`(lEnMP{* zN?fySF#>gzCGX7f;@c9}UmYQCfwO`d&6|jc1m8lm78*!t~O%GXSf9WMjo2#`|g49I_S{gY$SDHS`}TYM33Z-&$%m1j#+G z@&-Qzo3MLBoF(2^+s{zv?(^r>-!G%6Gtn|hUw?gku85&4pgc{CRU#jQe|=MxDz`|p znmzXa{jUUktv_s)Va2F3CJ+tNFVILY;qRs4Ozz0n`I$oBmWB`lwIW3NdEyY7(hsASIM_Y1FJWoE*6;)z5j**!w@spavc7uHV{=Eh|B%vqbjM1_i@SF5tOwv>HRY&NbAVFhpnE zJiJfe=|LMbG|V$nL7X<+yp+tJkE-_jGvCr2i#2Jy6AO?d>c$aBaEiml)NNt`qc z`!hyV>uDyHb}o|zlPg?h-dp&QjQgEV(4zxK%vsb~IqzUG)F5JlCrqN61`~`hZa_)Q z&-|S78MMt9s_mcegdR#0Ba9Nt;qN_du4kpd+YA9!?G zl81Fq;u5yH8ZaeGGDvEjAzkai>M zKFMxaNS3V07}h>i<+%5Ue8V&C-ujbT@TOzhyV|y9HIMbLRT&^$-5jygV=!aw&jRKN z&sYHyf4hFeB?jbQoxH~qx;q+*7d9a-9Mt=WsCtyEJG{Sy40@l4RI% zcBt@B`k_N6)Xk}X^u*;7YA${41|4^TF$xGuQh+4$S{I`Rr&y@p7vtPY0* z;;`%KO){}ZYD@kytOosSFo#$Vjds_6WKW3daCM;pTSd8@+*T*}Sw)EBI6L)qR+~!M zX5Ci6MsIapXD@_}^Po_X{{VBE*7*JCm!>L&v#}N^+#D8Ztdjag*Zg1`Pku2V;XI$b zVf<<%^BJh>BW^pA}8NJ|&dO7OswDoSKjW7p5|?D}kgT2%+E3w9yv(%?+E(G}PzX5n#R^Wqrl7-K>x31VEO5Z>`V$cWaGl zu$qHWS72m=$yOFZUl5Tte|f50)a|NP+`@V6c>+nx zz-uM7eXP6Tld%*WesI)3XB|^%3z0jWe~YqRa)rLAnt3h!OreVnj1^^KAp}&>+pcm= zJ0$ zT1)&p-$62~K&1bXZAyMUz{fUktED z4~E(>6#WpNQ*jr1n98c)Ii*oI9lGVa-4u4TuuuCQ~e0Spu09W*Zm~ zqLGU!STn$$bw_+2KP-KBsF34Meugidw1>dym(>y2nOFGPj*ek+k8xp@x4BvZ*WPs6 zm#Jc(L;>y_nd!rq%C0j`(yiwN&s$jKr-?rgWzGy1Y4Cad=**IdCd*xmI z2$f#zwW5-5Po*=mq9W}YIwF^X8;$=gK2S2Rq+63L%R#+u*@m*;i0jIGikHfEbaz}0 z{6`ku>72gvx(WUC(Dg?i=B%^nuqa*Fe0kJmj9+E7E+ADqZvw0I*!oJP3C~@y@}eF< zLn42+mwXLUfX{}OsES;3%Xrh}_W#^xlXFz<=uvC1u0H9l_DlAX1| zIhG5dNSECaem=dLvp?jG5y*Fu7vqDcaqbJC9Ge@dFLQLNY>V$ePhQL zrZiaU-Ym2MT~@8DYngVpnc5XzZmJhqiwZr*S-CxTJ$J=C+UlCkWEUjZtsIqft!nE8 z+v(Oew>3vuOwyKL)iba51a{u(w zVix>Sx|E$)r-w>w4S~~T25%MnBZZ*PD+32UR_oLR3Ak61NTn2DE2tj_s0Bq4cQIz)HQYva0(n2jE@&1z29i%%&;sp+(1uZ57Nmyor! zf%#(;G1d7LrbPUPF8I{>4EOijzzIyhqtzL{|G-%?d(6h<;eH83TG1#wCyv2LGU7~Q6wy3 zQf=Jp>hA=r!__X*f1M&f!Cei}JRx}mJ-Au~y$rohSK3RumOk3)PPfq)HaHNNr!meo zp8d-Za(fy&s?wJ(668jC=FAAS|HFC_WkxP}z|3?Tsvw6|tqPmg5v z++M8IuTn0RoyKA3Mib!h-cI|L)(QYV>)s+j%0qCbW7kvq&c}dpXaHLwQ zv<=yr_?Y_;Vrh|RC*mSCuJZ6XcG=v&@H&HC+lN)#Eaoyg6y+W|u}7T#yJ!)voBp4x zpO=1TeKbbJF|>5SVfB)q*uM2-aVbcKXMox#PVT|uF?p1y`E zOhuiVS;fFn@AH!84Va$zd~m^9ODi(f-TLvKj?RG6w2kVf4APt2gY51JLiu6mz9h#^Y?~?%n?8fx$Fu+nm0Ub`c#(^h$n=S5 z<-(4+?p#w-6KT3>a9owsN+UZoYI>Oy$6pksQI~OmgIyOv?H>Xh5e+Q};;+U_VHhb* zScrdrJEwF-z_v92pw0na6ul)O#So7XkqUXQ$j5Xzt_Y}g#p1kd@!8?)GPpKX)m&Q12qfuweUXl+qXS!OE>HLgbrg|P~1!^7K?b31R?+o_+v#kajalC>i&VFaR$D3{uFQ= zZ^9|!S7BK<{G*83$x~5&<``n|_UD9mVDm;6g**TC^POuQ{+4uFx;=-0sWi>3x>)py zwt4@ot!2Q)MIc0+$Zb0vIz^P+M8)Z=*Xh!zfEjk7>Qg`k!9w%kQs=$B)t08F9g-8E zq*{}A+oy*n3T(GPr1RT$r!IVJHCoh@zj?91Xr6|=_{P23;3b3LSQz%G$)7^v?~#&7 zuy~rudKn2zmA9>;%zJxR-xQIgqgh^XcOc6{0(<_t2+(#N_B7S#=fjkX~A{ ze>$Jxi7Ms2)%XBtaoS3SAUTDMd%vW-4T(n3xzpgiAOBN!cPb?SV0=Z64~_JOF;ElU zxVzW$v#DP*L*Pj`oZlCFf9Z>z)2B!2M+J3&s}D|I9C2(6SF;lm73?%?>)J0B+G~#B5ffWpmQ$O&F33dU zT$)_EqwH!YBgq?LEHaFJ&_IzL7m}g8a}AK3*xj4Tah-8O$SRThVR}QDniv}c7Jq*X z{oyi4+BBpu9bbR@DVz2t-B^8G>EK&vADd!Xv0vm;U|dD=X@vp!uZ4+Honkm`p4`+K zP?-&U&1jsxYkVemS_JhtmCpuso=jcGDJn4`%-d@N(xFuoRibsl@a2cucg5se0+Ka?Ec?D-Q_Y4hrG^?5w5kokY5&>;WIy0SCI_ z-p=mF?MiQ3gT*Ma6O2+xM&pm-n5sJ{ zIfW6)-)lBsWVm8HsP1VIm;^J-+5NFx%s(>9zDGHmapi(HixeyW>)E2*y<#L8Qu5u; zWCioto6Y~>YCUNP!A&0%meT8yb6QQonAmHhzZUZqPyeh|!R{A33rgY-1eZc9_5EXk z){EtLt9<-@qaM)h!5*ialky?$?Eu1ghWw`Bs?m_W%vQ3$fMFS zhTm?Nfcw^%_Qq!T!hfG$WsMHgrKT7*4@jOJmnv5=kXvT_4RG;HQJ1aso7YbFnb2;> zoW`nd+_bx%xpDq66!$JXNpmjI$msISqDVjMH0F_?FE%txBG?`x+@@MQzX;4Wp4}K} z?SEkTk=?%%FKaAUDD-{Ss2mmR8<58n9K4*%h`kpdWb|(4!agHrF{mD-|5+(B<^HXw zkA1zi!J9u1`gL#UDsce&93Dz=ee}Bj@oql`aewOiyk#5jm z?>${gO~2S}nuSw-qXa&kH+bvMBy}(@u}!1W4`*0Y-xB+{0$eo8t}pE|$T82xUoG2j z@@u6)nQC+&DNL=C>yijz@5BR6{SWT-?J-;k8fZo7q9x{;8GDGFs7Eio?4L0++4mdB z48b%H4->gYYJtjMx%?27R%Ilkv}B)+6PClFVG}tFS3i{}^ew}f{y2NM$hpU^v{QO< z{S|GB?@zf^tL$;~=pOsY#kHc;U>%SmRfp2qt)-y1;wyF`MdvU2%Z{9I?A~6RUcSXZ ziMoH>wGgv*E1%;NJD#6RUGy{`D#G33(USFnIfoHJ!Y$LuCw(Q|i!{HckMZAO)Ykuk;B}NLe&g>+?a;bZ2sC z==Vi`kLdZek>orz&%5Bh0_zu}_Vh1^c$d^`W~TTS_?=NkuO1@hz{+{Ya~J6j$@*rz zLjlrqur904$d9btE^n~+&wZ3{?+;)M0v+6R3VApsRKKSgEF~(&i^%+F zS-DUsIITlXe`Y4+%tu&zFpzz*Z5Lf!piz%Ze1>StTDN>Y?Y=M28@LY< z46NCpKSODHY$P()pQL?F|Wh)rfGX-eR1=-sh$falFl5srmQu z2P(0E8K}i(U#q3UELuIipmEeSpb%UE+D>2MXmCsdrL1tbPu>obohp+_CeJM?vGw>3 zWLZy*XluQAIT39z{@1isQdQ0jlJXE6gJDu-Qd@@ztprEchbK(?cX@xADe~PMn_EVgzJ>e@w z*Ujy{2SF+OQ5jwRrV%ett;X7LAOe!1Q)uHGIO|T}^r!9_)^JQ*->@={dpqOKzP*M{ z7gPFgVCsb)!DPdXD2lBSOPROdjDMlp;M=PB=fLDM`jYL04RSS~UyN-0MbbKlfDcEE zpIe;1p@Yh?J?Tlu`rA4p!rW^Qgw%qz`(@e%z3eHeCSOgt&jm|SQ26ouY(1<;);}as zRgC?F3Hq0|*N)R3zDt&cO&E4TRwA;V>gw2j1-iLXd zAFkPksF`q+(0-Av1!{%WW$vU>Bz!LR?5;OVl0ng$r^tssRPmEo1z+as&xWocu6?V@ z3BN6ld9jaQ8O!0KuavNGeuIMt(|cFGPC@Nrs2({-91cR-(|682B~`os!Noxg zijrL7;=f?`gM<(4uv`gYEQU_B`-n|UeR+eUxc_Z_>Zg@buM{q8Xu^q z0m%QLCTL@iV+n2GZiZlSk4#-WuVfC+qTK627M3n8rhRQEey&}O!HJ>YP`!OG@~A^s z7L8X)dXT{?!F}&*WpskhAL5k>B0NiU_yEqIGbKGEH!%ggffb~}XrbDaN_!|V39NAk zzq&>kZvxIq)sbbzj|Npzw$5a)aRhzYM&82~e0l}mh!pHOyy``uy1b;4caJ=B?&CVx zHF@8$Bi|}<=e9w)8VmFZ*0%6wYu$yEQTPx^-MwAJjcLQ-xF#^ivpH$v0Zl_Q1^k{B zT&PJ*wQ^#`DhaHdM~_cTTNaKXQjgbTVlFu2?#!h5y9m<04O6E78@4t!Sm1h91+V|> zHR@yABu^QUq`<4Fldy9hn#>f0t!v|kH8qBcR>Qa4Hkl698v{~W!Tpo;3w>zmmHNsm*HH1<)-|IDxmonH+R`K%A>RT}r zbb#J2xb@p6=iPDjz)=7&jf)OvhZB1F!~)^v9>SE|Xcw6F8)Uno8wwkaL>0HxFs zq&Ao|2Se=iVp#NUSFqDOqLw1Pb}1^ygmKA8B?U zJ#)u!I4}<0bF#PB8wUJY0nY-)B)Nt@H=)>v?tE--yC@p{$#^z%7_!f~{j-}|XW-uT z`u6u@9tQaMA$a6)XXl$C(0K3f{HqP8u~q)OD4x_Yoxs$*U%3sMyJHplG5z4TbCz#r z#A*1O2b;2qW`IM!{l8ToMvFZsw@lzXxQ(OTUFv-*7xwsWPdzn5^NDPOn#nzG#B?0! zJgaD6PR`KD(=f-?8+|Z)UEIyA7I3y_+MXm^KWq0U-I+6wVz3`31K7-X1ucvTWUKxp z85$Yj23xhh5i(8^C|(8Qg;%6Wu6AcEg!^bkJti`#(mC&0?4YY#}AyOo(#nYurfVQijSGCE=PVN0=XPT7$`;!^u>cPQMq zpD0L3#e@1=7*fCcg<}zkIB0e!m6Lg4Mq}11&o9p#6aDp=yPuaX7}6SM@E%&IWU5Gy zSelZ8p0p{&bz#FSu-wbk%N>xOacTpSVm3<-+$DJqLv}SQZJGF5c5X#@dx@tRm^9Z2 z&|3Dlk%P9EEtcr9fl}E_vAaJW|~{R%sblLOO?d@DT%t> zdBHW#v>xW_Yfg#FVt5cSkXI@D|M6JPoII~opj$k|wo$}Wj+RJ2EbS1;t8lfB*p!kh2lb^NA?D8Q@9;w4*jAuAp=oj6_~g zs#E&Wn?7mhaH;apJCo4vg1P|j$3mn44WG8cZ(!E-b_;SExoo8i%89vPnRA5 zbj`K7$Ox$M+>uL8v8Y(z-+hk*f9quKc)FA29@VgD*NvZZx#%_CcFj8f&oXhlkPpFZ zBp5OFfC(wtsGh#EZM&jVl^p!J_-pbZ<`eKm%TfvF1$O5`C(3apR}I~lwbzi-Shq0f z&l-=DVSDAyk<#>3Xz8QL%&JF9zRq}EYKn)6HoqjIoHjj+G1L(@yR$OqoaNrj=KC@o zyGndqMjhcUn4%T)9+jmQ`9SEov3;_`Qqs`J0_II^yWSx6ZytlXHJ&!Sezh5|S^k~1oWZv6VVK5F>=lkCsn1Za zg4c5Ke4Yp>L-I=P`zQ5+a1?&j`WbibpO^i0rwT_bVyj0uZn1SO+`$fD)!J>5Q*h>08mpeNKVLmv^RcOHab@Q5Vs z2Ob;VlqFj>nV$Gvigh+jeD>B0hv91Tin4b+? zOgD6%5|dZ8AC%4PlOm?I>pqUMjUd;#spx8WWXM)I zk2faU%ni4v2l#?P$9Jn~*L0ukC^F-dB7pAx745JX%$vH|{4MI+8R@)1dkycCSB(!X zIehJvc#$C@Asf`n9prFH-Nn}F&0G@jYVq^aAIRW?l3x_mY<}Xu0ubGMV(#>Q20H0S zy8(FxaOEwR)aOl~(iR@8{FnT(V)~GbP0_X^5Xdc7=|P?DhSpFp-zkBQ#mNd%Cw1_K z42H;MbcH?=Zj&z2sJhZp6q?NFVtkx{H=XStIUIHS8-ZytG@&BL0&j|^p2|uy+T;5t z6C8)t(=C=Do2iGB+jBb}rA@5>7UB@BwzCiLsHB%o0qxobV=J2ge z4IE>%BQ3ME$5Xr8YDU9?@M$cm(Ot#SP@pHOg){UMDtnX1o~qD|(2##S7~yajgnYN- zDF$y8DSy3Q`$zT=!Yngv&*^i_#zjE{D<(ddvyA_RGk-o5eW2DUPY?-ib<& z$Sim6=S8OPL^&UOrOZ~fNYs$#HFUg_US<4T?#&i%hye}lNNjXpZ<=YCAvupDi>Agc-eyWS4 z?$_rB(osMy&z94&m7NztC;YQ!mE<=Cdt_fE)!(tD`)K;`y~mcdVGSWiAUIdHF~$50 zb=A98;dG=#>3rcBc@?+{kV2>f7_MeW-j?u_V+5f z{|G(2r3G86Ju@+Cj4Nt63#6CnAH?Wyd~Sd+_As7`YOh3JwY$u=VF<4p)g?!V-{6_K zUd?fG6@0Nzay`mg>z#l{YipV`E}(sk+cO~J%c(w27q|2Yp^jDN&ZpYW!Or%+V9NRn zndH~DmEBDz#ak6V3WgQv|89Mx}oFiq!{IxV4G%MJsrVkklSkJ{HR`v^Q%C|b` zCV&bRxjIKZVhb%xmi^U#&ugMC@%5kV$buI~G&UQKP1&F3n{ZYzs}AW~lx^A1EE$`h zlLjqk-}gUsNF5k$^di}YSJ-&H=M@;ciO%PrTa|g6wT>0v z(sE$B?e9Q6ueonv?A(e`cRRIwDL(0~8=l8LF6n@pUWaK;1)Ar7 zcgQYs@?=-w*|wr|&6wVnBDat8HM{EC6Ow__<8DS0^RFGl_ZW=7KZvIYtMnK=|N5S) z2ktM_5I}nxXN;@Zw_WHs+Q7}-(m;psYm>NxI?`X+|&I$`hg?W&-7dOqy#+dHTn0v zkFf4EprFfMKlz$QX|@&nH06Q_M%mb@3hnJhee(Vm@{r@8O2CMBJXPP=>6mv+NRIt{ zWsgT6eI@U%7|zLGwkcP%ScKB_yJY)yWS2@L!&xiD^p8C526 zl1|=QFDj4!k=2ku%WE*C0BlETMuRiOBq_dNk8NV&lk@Mbh6nrhXk$yTX4`~Y)f)t< zKb;9Nhh32F5C#6M1V)O5iwA1JR$7JYp_d+i7oJ^O5e`oS8#}L#N|X!z6Q#cD^_wdk zn}AC4Ol@N!siSnDCC!t~F{v79Uj->jtLN#)0hP%+J{bdNXV!-YDJDv_9=?>CS@47% zg;t6`MdNNosk>YLzHbU|AmA1Zp#YtIJqoe%|flB+kw4?vX z%pQieYS74sdbXR3LUK~T-SEv8YPc$og7fVDkpXK2eUx?W zKIweby^YUZYJxIJ3ffX+M?XH>i1SrdY*?iDbGVJo`D-vP`Qqu+%>}D1t=nh!_Doo^ z&JW19!dj-*bhKHr_LAG`o7(C+8=AA;DGtrdTyOd|@pyZ+ke@eZj7#>8ThA+{dAWb^ zNt{iP0e~APg8G8#%f+a=CQLu5jRPef_-t z0EM_N{PLWu`9?tU4N6YC*A8-+ft8i$@2mW?Szzg{nIB7Z`iA8tX+$5uT0WT?i4RB` zNQ!4I?VqYk?Y$I__RgmAR_1yOH+AQ+f3=xeV05>*<^6ZgN5pCQ8%Ogs!v6evBE02Z zV@5){I1{z7Jy1 zO%7?Fj(*Tgs!x(MCqHVEWjdP1#>dj{x~6CPiyPV+;cZVx9PHcGXx{Bx#ycIXCAJ6% zB;ICtqNXD#d`>;})>o>^qhX)Be{!Q|*BB>#`bR*Q(N~>0s5_;4|I5p2$N(L?9sBzN zA-H&;TJWX_Y;R`P?P!Dv=No}RkDx`h^rw|{#Y99 zzj0$GEr_3o`mh3ElTnbynueXeC_F`Ot|6*bSP9_q(Z615B z0Xj;BmR{sS`)uNtXbSMqYKWvEcA&sz)dJnT_7zaBQDz3q!74o%@v0*;R1DlNhd&i2 zR!%GvZi(GNlnyo=D;UjAvx`3c*sqoMU?WN-Yh!&zry69{@gTKn{QWVZgoWm3eaSRv z>i|`6>}LW$u@F@@Zr|L?SZx*!T8iX+GP5~Jcu}$=_=6xbEzXnbOkd#fl$}mO2Gwj$ zpY%H%x2rnE0bL6%$L-27aF2?q^nVnzS50QX;hhc z$LQWjNrEg8$sa3Rc37Ny^yD6Fowt|yuPj&VuasMm%-0=xcAO?9ZHq$|q&p|_{nAQx zL6;pOX*Gc-J7<5Vh%sGu-8dWakgUfeGGMeiV)cK`1NJtoK>-?-n3Sj9TXq)F4Z9Wo zZ@yL{=hYLKjThJ>bT!{Fg(X2IGwy!K6L_}ay{n`7D6nPUr^sA1d-6=hyu?gIT`bau zTB9+iJ#~i6kS=rm2ocA2X5#G5a;BBEZsj$JrD9WiI!z)7Y>z(9n<*Va?QW%K{~!_S z?>x@J1b>gZKHqqEjgDsv5jE;*DG*Z=6aKwIN5yHlW!(w!6!vHmlqT!jQZq8*sQRF6 z8B4CbkB}GCB;QMR9?a-8B4>z<=^cM+9)T`rqhQnRd@G{{2Gddt@2N}%KtKHXSxOyL zT%4;#C*{&5X+D49b^Fdf)ca;>(###0zW!mock(STP}HyU>L3IhH-M?tJ#}0oARglT zv2DvqF;WZ0&YcVp;a;Y3h^(H1N*6Z8rNP1mZf-gvQE!Q!uk@>Dv5l6q@apS=dNQ9* z^dS24Y0*1b2T99T1}0eR2nVl~E0&d7oI2dc59FHlI%U+G7WKsOxf|2bo%c49Z1guG z6H@Kd!Xe+{%yCZr9f5tmtl+e?G;$T5C~qnNp1qOG(4KwA>QS1B%($Z4?>>EW8V#Ed zM4tF2kh!<&@W^I%IbcrHvwVGWu-5#Qi`&HZ?C@+WB>J(1%{<};r~f&o(>Ke-@{$p0 zA_t}aJ7?B^voRyZx>t0D1$;*>{+@2Ij)N==p-`0i1=097xO1+G>1}$?e12Wk_|V;e znUBVb+eT?)W!^4!v=4aHvvRAqu)XUDPwQZf;(qhu%sFRc)^M4n_wX#5J1^5gpV&R8 zJ`*Y;i(D-Gt?HD4tP%sY;S$<=d`oOzrmk~adho;~o#t>WmyFvOdGELkF82)W)IS!! zq`kPK1}OH4se*4H+m*-r69q<%^(j#cohGyW)pqJ1+!t+cj^-lgpbK2R){gwyih@Q7 z&KZuiZ7!2%OJ>hrZsnQlGzl^hZl}qYQcK3M7`r=e#C*JD=qrQl`jpO_4zWs_)j#z( zGye$_6l}Cr@%t&7HNS{b7@}&PE<&?&IUIeQ+EmQ-Uf(-cp#EmfmbvG{#gEo+a(uI3 zk7lD?Iz|$+1bennruoSTNUC`vL+s=tvwI$YucgwiP<#Glb>0Jw`tm%9t>KtAi5IZW z_J-hGKC8AaJXtuaKJf_0j(9natm*$b!)hxsQliCy@xLmhGPnoIiu!kR2r*2TdWz%Qar_uFjkW4xNn3OwMXZn9h?{-#$M$2K(+g zTy%9D&2m0D;&w&`4Vrj>{6WQN*S7$6D9?ram&e(v-PUe9UXra^bH#HBfgpjH(#V^Q zksRtXH=bz45Soi^&brY5D0~}W4t9AZJOxDM3~1v&q7Tke747hmQO{tz-6)%~MrxB`v$ugXs+@7X`HVmjn8SY?XdUjkJ}*h^DAHZ1}KP=6flq+bahe<${M^Q9l|DkRsA*XxmF>D6074?l;44X?m+nz3ud}RV zwQ+ovjb&wY_vdV4)@Sx-9N#)k$zKDchx`|QaA}A+jwad)YV_|9H>@LTPv<;nTWoX6 z`Za~E{XwHn>!m{_!4CtmStFQ%v{iBHojfLNQdp3t$U5+rYN)t-9{msV1r2t+`HQ1u zG2$FMUGCR4!TzB3`mJRlgEHL%Cd>Jmjw~G%n#;-{s^Yzij&W97t7RL1c70@tt^aDkQ9j{H@4hPR#?A8+}PsJ?le^f5a;U`XR|(vPUNh_RU!q9#P1`uDKe+ZUqlJ zt{fl7BoAduiU)Kzc;NnULxZfHG?HbLB9GBPA$U75c%L!IpaP%rsIGnzuCWJZJy;ii z4B9W~&vCl-=v_{l8+hFlKl7Jr@HpKu81@2ggl+>yykk@ zSQ=cmRFdIr?$rFgdhBIUdAbNJ{=u^w8ypwhEzhNFUoq(4G4oR0#YvP(8_+D7aAtX{ zN~k*VA=iinos!!)lvMhq&*?UEhtq#fSi7sjNTgNjVGgA!A*ZQ7aP6XL0g!(xQN$3HGIBLkp! zS4&mt$Rol+bYfOl>(+VQuznd!nX-kA02qAEmB)2om7L9sSz`7PzYU@8`T5ti!pU2j z(n<+o>*2KY&%NBQ=eIdlcM3qlRqecB%y;8-Uq=An; z)S1Wp`w-Mwo4N3AsX=$U&J|~n3I2&+A*6J9w$CDoJ`=7O2L@EHU5$P zmXve1-SyYmX^m^rgS87Hi@|`t71Cn2vExL=;`y?6h?TU6)cne{mc!C$P*RZ!N05Io zO=%=acw5jD!dKlfBKBIG&sO*DV4~Pt2GKK9gbKrs1Bs7MQ8pMd}aoQR43S zvt{&QYBBW}%C6%Ntqa)8S=}K_X%=)-P2QA1!`NGGv5qarCHyWFXT+M z5&0=aXs*H30VA_LS9?8Sz&tH#P_*7=PE0nDS7x9Jrt{?0y_Bip$wT`l=Mvs8}^ z&-dgMHIBH0GAz?%W!KgJT4e{&nQniz(zX?3wqhpIK&weBgPC+{oy0Vc0RK^_kicF- z_hUBRZ)==L2FaJ<<9bkwNvjCDd1C2+uX*^RI4lF}gOqI84jDqN3w2y7^#Vlibs}p+vFeJ2HNbhSo=e_IUWg`ZgTuk^) z5~EF@7TX9l{mLN~UO`0sjpQnmmYLFFU@nq zCH}evL;z&Trs;!$41B&EI=#jZe3nQ3`ndkSpV>lqCX-71$r?K{Z%Mf5+E4qi zk@hG(nqU`e15YbVZ0qNw_&FXT4yhK88YzbMyq*a?zY^ceQ|oRd2lexzmmZ|fJd^lR zpn4*Sz7N@3p}}dhT4nMYcWV}{q->{>?cfsa0fvjuTLzbstd;PpoA5xxa&^$Fo!aTA z(|G-dI`cM#gF8RB?Y?%#zjM?i0P=^jsWT9nNoLd_{0gc*M=UAXIde3 zRqmR@ny0@vNX)rJl8Y7g$ScgDjkpD^$Ovmy0d~6V$PTGuHVH&ge|y*5JnJ5lb+Cb+ z>}+kf`}%Hr;vDWNWgDuIJJ_2a{S2aN*qm>LC3e;lVWeoV`<00dPkOO?^7?dqR;v?m z6>MP{i&`BF;h3yCIlOC$dcQMn-h1uaSzgWE1-YG|GvS8{;sztA;{i^ENIE)T;a}$> zwaK7et?UY$`gx#r-o4Pg4a40R^+OmOFjksFx?Pc!(q7HTcXhZLbR}QMlxV^a3~FYU=mUYo@%#VX z8<5IPavBd|cMV}jiinqVBKs4nmIyl1ihiVZ1J0pi0DFG@SmB>Z!^^< zJ@3%O@=cNziOlvY?~WCjX~zru&>)!6cdEdfQv@q;rR9S8g@SJ8|HJZmr=@jA%G&%7 ztlo$bR13C940#-kfuLM~I{di$pt==dau>`x6IQCq(+itAd?qd~a;%Ivd_zg(>j44rZ&bwd$WT*x=8>6FXwHXdM(Vg$18s8d};dwc?oxO%!8ZaU%>3vj)T1I zgqgG4i!i3`S~u`^y{(D$wku%nC9UzX+_j^}#J%H9a%$2_3aMlM{^!T?>X_jSC2~;` zL3TETpNaD^mQ=A43^Yg&tOx`LYCrdnnt4cGcwK)so6sVva<~hAre{UMN>r+UT0dp# z9d>L*1`(jhhbAwzayIoea&BT5{8N-qdYDBIl-fqZ-Fa)=!(!D?o7!2$+>4?ju8I*v z#HDuM@k!YSlc^sgUlR{D^-^`~>Zio^$G(lKm|BoXLYXg2!DW&)lkH9zE*eOb)-*u? zBe>^Q32w;;~3NxvNyPRZ4#EY_d zQ`EevmBomY$B%`J0UpXAL$~T+M}xR<-fBc~hyeZ%eipz;PMRSPeJa4ROtJt{@B#Tj zwz3qzUmbh~iu*NP(y^M>2p0YoAd_~spgHm)$K_qF`qJ2uz!~f`Z1flA=<-fmz6b<8 z7?2+eH?0=m7ZX$IF8@c-SAw;)BeKo3F3(}*Ywi=@>#)m4oFwgYJ$U65Sk~><<duspZ7d(R-^}Z3r_Wh%r^d()Kn_C;nsD<>FLBGKp>(M-ytJm8Bx2v#uR*G6U+RZQ}Gg}Yo#h3~U?Yo()EW{nB z4gEW-H8(hf_aIL6(Y=oIN1?g0_Oq#b4&PoHF|<@7`ansK%$Hm{S^jr7qH~&9#$S^V z0{UR5o*X^*n3q9lL0x_m)%AUQ;91WYjKipbe4N>^li7KS0C=5|Z(C>S@v3hiH`AT2 zlr@s{;st3a`JxJbZBBOO*57>#nX|D9-~y?kVxK~M$-(B!q!=I3SC)BN%G_*JNDbs_ z(;R!XW$H5o?=pA@(^Nr2%Py24?Qdgp$=%?d^ypY4DptrE>#}yg<9{ z(`|Un<|)HjgA43ttLa{7XA}#D3Vb*vRrDv)VNM~EM?K)_jt;wBcQs<&5>i$ebMnD?5>e~Qmv>G7q)0M>T|)AXkp5% zVSD83Jy54_Y|_W`fUaB1ehx{S#vf2N@WK~o(OasXT4rzvlz)V**CBA|Dx7>Xd3^sRhahw5N@=2GiwsN~kRhV5^9; z@uN8gD3@bI@x1h}(6x3RPt!HkNRuwjOG1|EX`E)nsVmXA;}6a?s?ObMb&0^2Cyh_2 z0A12X!U9XSkOLT$aPW)5aJ1lW$@?D$KhJd8Ugp`P>qTg&$%`ITAFc&y3+gs3i49hh z#+F#%T$K3QAo(9=Fj9G=J>LZFaRyacb>;qdTadxPAp5RNkGe_@?(~14b9|L~s4=v18?f zN?n#OQ43G?oB@uUq3gg&2o zXeG}m(@4#{u`(^%%4sd5Go-$`QOwv{6D}Ru^l5(UvMQy)!;7z3Y}jN&gyW4o;zOXx z&O{C1VKweZKJ}}NB4VFI%K*FnwYt=>zO5GSnN=+Au;b1>E|paE+ub;uwio%`!{N~%-zUo`-&a&&M2sIRK&^C#YbPz^DMGM z58S^N$2^_?9;r{RbsjRIHxCUNV=bv6&q+!mPquoBGnAT0aJeLQNQ$ViB~pc}@yjAZ zwmR-%g2k(bP)E2-<2}Z?*8@`bGLtvJ%c_|PzwQhF{`16Wna@bEg0K3r!~1ajIm4p| z5mnV44QK))2zzrv!^>ee$q$S`19V z<;X$UAt1O^j8ED96t{zJ1Uvkw&h$774D0OGqr9cqumgv9Ef2| z^{>H)^#sgBNjGM-f=gv(X-S=n?KGVHRfr6u;*xi0h-|k)$26(w*76l#PRw>1EC%)> zrS4n#cFTZ|Q>=u=3@(!eEr^gC{Sp#~*=t@H(1#(E}$g^qAt zc*y2jAD$JZDLyn0nUoPX3zC{>XIhQRe}oUXTs4~#1?1LjCzJ;luIeK<|54ajru2Im z0-}uL($u_dgT!(4qydHb^Dizaj;h6?AE3)zcqh=0DL<8-NTwZ6V{ypw z01|(+L!~56mH;Ht&N~|Tk`ukgO!p?XCc|s*?Hz3$NGo%hOa`fXGFDY2yzweeNAQe?Nb=^S=jGW z3B6$0a9|nmj2aL$NVQ3|2Gt&!YKI8PB|0lgZhRx}{17+sMZJ>*6=EfcNeySwje6qJ z{=DKsB#(D8@yN*7G*n6dT9d@fZVeXuU7HCd=`6#(75!2%4WGCfRbdif%iD981CZ4& z&NuBI5Y=sE*WLLPc~GNro8XHb?6-+bLAR3q8h1%5O7~q`gZwGb^SToZ&ga#P?oETBi(7||SIyL1(u3jt>qPI7Xccha*4<3vwE&3~@k+tF4mNtdXL z93wd-JV}*B&uD-bQMG~1F$ow*gE}61z*GTeD^Sz%}C|Sy9uz-`PR- zwc7X0Yn*{!?bGz14O`hr{+e8gT*`M}D9T^>NMq#?5l-f1PD0W_2P!V(u(%%G1T{zl zhJZBQUfZ81R(57_F{9@|o$T#-t1obe5s$lS+b#6C@^5_Sc1Y-{s|R?2dnx`}%FJK0 znSi){-JM8y17a#a2`IWSV2i4Xs1Y(^fH5M`>J1@QXV2iWEy?LFc3Gp+v@FabRVlF@ z|H*B}bhHM}zSjs!y4&h@v>w=2G4f`AJ-nMQag$S{Cx>SBxGKfZc{9H?YFB|{4@7f3 znsgG>bg3*|BhZ+!GtjRLF2NN(+}s%}(00yE#iqKDWIB zu$Nn9XK?+k9ekehJCn?vO#b}{;?E7;t`GJW6+6^w>_}(JZ*W>aD`WAUv~r|oiGUbvoOC7I^|?A_83hV%bWjE+WWr$9 zHg~9wt0{OsJ++7xR2~hZ*)6$KI{H8SIH}v}Hs>h!=vQlPU);;rGP1J1IC9_<=5-cu zbGzE0!MU(aQuAlFt*f#ywdB}Ws}YdXt$C-1mTV-#hg*;96>=YN7*F2Jdt(jxo}BwW z^-%t;F6GpkvHk>yH^W*oetZe;v~PjQXTdiOs&L>`V;bnF@%DqN@luK$w*(p{_SajV zzj^==Ett3CdtJF)J2c??ye79Q_7CiCUAPS1U;*t%0vtd>xK=7fSq;m1*TtIP3pMjg zcpZk(nHWqBt8Btx>?!a8q|Ra?BU)~j+Dw+9xJn}=KVR|R@EeM6Ri5s@rttm6AZw3^pb~J4XIXm zhngK$#|+Ww#0tL>AjfSb95->U3?vJO+bL@PcEOs-7@TBriJBJS@ zE-+3p*iNTQ!aUm6*ts-BouO&p!QFzH=XOUBqmZ14j>6CLDUrRIreM|Ow2`MB3ipWF zo%Cdv4h{E|R7J;o!t>e`7HMUfgV!L(*W3*A}AU)mZ)(IY^ zDaT^&GCFy4IDyrSFcQ5BQ&!bXc7;lldr+0W|JxBSzD5cr#{GnPF-*kQXOBOss|ybf zABk9d8oiXT>`=6+-)WDIw_IrD%291d>a*d5j0~74Y(}g{k?4s`z13%657oRT%-e{f zboK+21nnY97aE!5EFxQE9ii=3sNoLbW55Z#rhe~4I$R{_KQdGr1Oceeb}9t%;1W8% zG__*O^3JVVul&yZUBJmjNz6ANZeG}jHOSq3zGjk!VU(ng8uEO^)|!@Laaci6c6&Nh zmS5W%)ptl0^sH%`V1g66BkJw}&#m1tZ&_-!{Scn~gnXSc{_^oA4?IMvZeG{!>140+ zgSh~xdA%w$YwxV9xCvt+8jIGr_#^nO4qpCGLSBUR^U&5BBPdd!!94xdlhZ?_8v=txWQZ%R}KI(pu zlkTOOE+#JUcAmH#NUkAb&pCO5f!*eV;U4X3r4UDC|2PUVt2VjLq!m~)BE;)9gM9Fr zNBoK3TQj}i*FJG~h6xsgTTe2F=j2#~1(?BtXIf7zETc7)?|Jlc(qcVA!P2|HyYoBd zj$vi4{0AID>%H}Y%q%D>H#b#Cj&JoJU0Js19Lvd%nzLe@L?mFIt6rw15bvdnY^Swd zS-7F26C`Z0!^-j1xNb21ehSriL;SPnZImKQNj;vltngjU%Hk#Qzp^cP8nn3XL&%0yd^)J2SoS7CJ8DX)x0ndGCj8iMgtii_~|2HkJB)xLA zuR{h@UIuEt3rcHGHkZqxd;g5Z8#Len)m2`(BV2904!ZD8VS?C<3L9jp7v+!} z{n-I~9#?%Bl?e{Y4hpUPdDpjYE%fh)=bxv7ndn5^b+QK^M*TQ!C<3p}UT$gm@bDsH z3dXxuEOuMHv&0kO#6W|nUL@Zie%eN_hQvZTUVwyp`FHx-`ziM{20YIhU|N#B(h8bF zyH-oN2iX^mM)N1NC$|Q}f*5?36F9-IY{Cq1jP+6g6YR#fy4N=y;y<<3URaq?$SoYx z4=e&ldRdZSNh$HH;l8O&rMmeuYl=l>NP+-k@mb>~IK9-94_TVlr8{8%;rm4ri#+wO zp&Pt$ z*ScZO=M>p@t3zeknDvN{n|f`n$H>c;O5VxwjS!ZQQI*HorU5z@v0A=^3hctctO53P zcfR=idHpkT8(8w6&r@R56t$~~ruSvRNf>jv_-ghnBfQPUzQ^D?D%W3b&YiqnjSG5G zp3Mflvoi{V6shBUrgtI9{PE`VF6k+n2p0vJBQL5W!<^77EzUQ37~AJxjR3|>@#HE= zeHYip-J0*)fV8<&RSBPOQV9cX_uZ%dbkI4za*4}0%>d*unvzMB+{XC>=woyi58b7$LpRK~tMBSu39K<&*u;fgzV zbgpVWMt(<+WIFq+CWr*-l;8ozIN4A89#RQTI)IsjL$Up)Im_Pbj1a9S$Jd@meF)g( zp_H#Nxn)3S!o~`T%&}?BF!Jkc^(ZJd|5&dyxa_wt2v(`VjNT`R<0uoVe3GbKYk_4D zO%10`euwLVB~8$bAv2bjN0vTotf%#3?4Cusu61GYML2Vmd+H(hlC@PwxX}n-cBLF- zh*STu#L#|ixgyv?9ryH;wKLYb-^mjk?D3$VH|!73s7AcQIrf!1W&HE_E`{N(Zd=fF z!%Co{OqTmDxC)-|v$c`c0$XD?;9&~YxW!06MGsP)FZ!VZYD)eWi(Pn^%c1dVi%;O|| zlzTi3fKvKlm~t&BC-0has|ml$OG6$ijZ$8C(+Zw>qUvb{=k5xSomSE&bVPk}qaJ&f z@4`Eq@63|5JMxdh^oV?fW3u6i=@nE=HWw>u+5PF9M>ky~Fsme%4hH*E=9fXB7AcCL zU4Q8Im(;ZsdDZRg*~EK>G$I&9|Rkqs5uqujw<+OeieYR%1?- zFI0X09&$*rTbo+E^0@sgp4azc(tNp8239T?@OR^6LGeljgF6-6FV0!;xT(czQl(iP z>QeM&TIwqMTg|DKaCFsjbKBBA(MFSx*(pDp!c?*qh&*mHL1m*^xG8w_7= zIuXB1YY}CEQ*QQGw`Cr#hv0Zp;0e`WowgmbX{oTYbohj{ef?x{#@?|eT_&gMHq2Yi zjN@m1o4tSV8H_JS_BM)z|7hdIqoU2%cL+WUYQo>9&&>vQ&G+{&QNwrpmD@us$X7_| z`4Iu$$bfqcip&z$V;QNiOQ}$hIQPvfbxEr)C5d-a$`>(gRq6*j2*dH>(2dRBMl=R^ zaUR*aN~^st6eU>(DI`(*wRKH#2DY$tA{~5{mSpHO_e$+Fzgik01P$vuIwO%98V*^Q zjq8^_!xwW56Ks;V_;VBMko{SU2`-geHghv)XXj^UxWxfcLgxCB;tk`~0&53nC1o#S z_U$T~hm|I*8FTIoZNON@A3(1*EO8)Cy0|f;@nLU`OD~h-ntzYWF5<`fV~bqTlH_W< z`#%az+)Y-Uu6P2A^hgP8#SC6i!H+!TPw1NTzKUMEt)yv$5;H=)(_KH6*uzLIkx{Xn zH0+puJ5U72lo;fN0pfrj!jUcaA>7oM#u<>cv7 zQQlauZCNls*R%X_;yeKZSk3K{gpztXX|Wi{u65L#eDzqadJ9zhO>n2sAJOHh$g?N2->&HTGGkyG}!4hB2D(=Sg%QW=F`IoHU#eZh{JPy@$}9 zF{Er7WBHqKOap$6dGy%^GI`>SSlCqKY%93WHPQzX(d?{lh8CGGB<}Y;CFFI*=RCKr z(&kf;OcY2S%bk*U9n9?4%*mNmLG%5A*ST0;$$!xG*Nm;%=iXjQHy_6O>P}jA9$f9i zQSO5sLFDf#)FsFQZ?4&`K~nai-nub zPx6+Wy=8E3yPm}yGN@jsf4|7Y*G1FVR|C!@EbBNi6x(Z8S2|*@I=gbd?X_$nTtBx{Xe4Uv@zr->b$}Z>DE>=BM*tt> z+nTnInlkJ>dPvg9c14Uh&F=9oQw7H3-jdaw(>qeDANV5dxZ18>h8hbt?LDSjNPpjg zMu3$#l#JxnM%5*(LxN>4mewBp;fpA{b0n`TK61RYZnslIUa43~l=#+>-V6hLeg7gy z2httvar)G|>Mq;4?A6Vb-Ukh}0}L?H<2nM&@bl3p?_s`b=`LQEp?0(1i&QD@M4N-}=WzO~3YRfvQ3i^rzA$f^iUaeKEmPr6mM z@4jwnO8EBD-4U#IUij!~DxlTiw#g9}my#mpp3tuql~QSTQNgFfg2hXc_>Rp-7v2r- z=#bMB1w5rn_i}w!8qOq5JzICl744kc(AhXS#6j2X5f{)r0d=Nhu(X;-+dvLiUtd~o zs!bL*O?mHfPy*^7sviyae}pzHYw#w&mcOn)_UB8|0{&r?AhwBWMFKA~{gkizJmi>Q z(d1BovsBB{k{zpf@8EzCXmThdJh;d+sm70WpHj>3S9*A#)TKzCy@AV>Cd3vJyM@vp z2d$Wqj2904f@6&Vp$m(}n;34_yqoy4d$lX07A7q=5$2Wp#XycO6j=TDXrXrLvtNEU zsjpver-=|vuw&#QKS!L;#=i%1tqi36ky5>DZn}MbUS}qij#{ken(OcH%3&~Pe*40? zuC?CYOn6UNroVB@=r1o?-sZN83Hg^4P|Q02T$ewK{D0OQ?Qg;*KjiEc_W9S_kevv< zU)MW@xuVm>AFLxw3r@ai3Z+RU>G_|4@b8-8S0d*9h|3?W*Ppa~^5*}UQm5z&eDyiZ zAa+6woUawldv4P;bgZ;QPLE}|B{}|GxF>8UnGs%!qEbs|R-LZ#I;q@g^h3roZh}f& zm=q%Vzt?v_`Dbot;iA+~A?yBW-1F78)*s@=r;)v#6&__J3(wP7rQoru$^K&@@IgIE zA0**sio7^tioIPkGR=acyT7hsIII*hp{Z!z=YTfoM_t^qC#Ds_G%i z(T`OGVZuyZgYbKT-fa39kP&CST%3NJwad|os_Xb+V`J!waOV`-f~W$ zVb+M&2kI*vu;uZ$WU2s}I zeot7!OSoGMjx~;hPQPZgAnr8osd#ySq~299Z8UQ;R`|%tvxSD1$MN;$Z#c=P_55DOrQ_C?t-)MN z1cScD-1X63Ac1k% zjC53O9_h-k@l(HxlfC_Ii#~D^2WT7+0Tt)+EPEWhY?%+Z0t90@?zt zK((2oTE8i&&?+c)uW#rE?-!+Z2dGo}N9!w_8lNuUXc{2b^XY;fT8a^ri5W10d@RW3*^AY+I_LDijEM}>8Z1L& z9|@n-?|;8Kkc|t8{dKWzs!plKA=~o60RETSk~+TCjOK z;J3|q-+qU%e!~b|>%`|a@wz*vkSUiTFd6%xBsr@7+6P=2bAA5(KEdvdNXmz^<*>Td z#}4;yGh8NpuX!cu87WqS?~+W65Y)O21Fv3kv4)J2Zh-z#prB_(Z4rPBr>fm#wCvnS zAKDRc^fwGi9ropU_x9|5a}t|d(v5qBt}@((w76aNs;erwl&Ux%-0dMWf}Qh2El3}B z>j(+3x|Vlu^gjZGb@R9#A`?NFdd-P6^K@i7H1{9H?@N)`>`2bs%O&!dAxfSs{XiMR z1d^c6%7zvL6{?}djVTvkDs{ntF2OGjAw~&NkDm>)`PQxF^g0YNmcl_5HwMr+KFmaJ~7slcOR-CBT)Op%eH^ zI7;VCa0mb{Y7(k;-FH3Opaus^6lC4uYOlgsnHSm5kn!<%;V_2qo1Ta3O8v(##|zsEi^QIxdvwYa@-X)W>cqJ%YnP^!aRfsSf%TVdhT>@4_dljN1Sjm-L zV5Qx-Y=eBE_IXY_>yPuTlHrM3rcL!zg-wab*A{{77xlj@(%b$~RC9N@U<8IXY~u|l z-SYc78R{*9Ij{a}oZ3GW1GlffC#khVr0d3`L_)r(CX-T+BPTsp z9;dt~v%lIEU1^WC4kKg1$#z8+WcIg%%-fcz9-&F7eyeX~!*7l}AvP|7MbLf)Z*uXI z3Kikagm?*(pyT3F>7w$a1qnRdJLOP%^$bD&Q%i@NDg+IV&GeRgjsFTWo?ORg7tp#6 z(6aSqC5Cy@C4j5;p%|M$FOM~1-X)#?3K2o9tE%8UxT{|>o!Hf{kkDBJ^}L-H=PcUg z^OgpiGGd8gGpw^);>@Hx6>?Ai+m z7>N(E(XAwSB~N%iAxcQ_>kFZt64{53#MzugS4$l(y2qpKCwVak}QDc?+D@m*frfS z_p!>{WDEeGWe13U|IzRWBpdQt(h5#ZQGMACXu zZB~;9LEN23PE3-nsx6F54oBqW16|R{Z1EWUBxBZGEnJo!@B;`^?l0w^KdEe4*nijR zlm@Bk3!%r7qFVewLO5VR|FAk3Cy21s$Z1p&9rngZ&RzOK3g=OgB*9D{p}|RUHSd2b1piZm_ove z8ezIi645^p(ctIQMNq<5eFyn|ggk)8kZ$7yaZwQh`Mtg}9v;pZ3|AZFT=q@({asWi zlf=s6lYV2>KapO~m`|6+xt|YQTZ;?2 z5P*5xVe4UUPD{C*7#xH7FiXs|ik9Q0*l^j)KPs%)n!o!#TKP-!x}eRX7t`sLCs@OE zJ+mC%JAtc#WhGOmin)r`ZPQ(t;IpigXNFS_WvBij*DPUV;hhKdNN|akT$2KL_A3?F zZnbbLTy6;FHQu-UKE2eg$o0%xDv&5X@P%G_n3yticqPuY&2`e#9v{rSE>}E(oy&Pb zqwn0c0#c<8lETdtz<>chRASy0(7o(R=m>&o2>UHD++RO`dQBP*cZ{q0jK+7qY~Qst?RV zOLnV9n#rlgrOf-Gis&6UbLF~oX?Yw0+NC%TJC=Q^2%=}tx;Rm0ih zy11!YPRb1@ox-x7cGnS0!^Ig<*D!R<5NJ;xoAGtDS(n?+dHQApqs=aKzjAu3Unm_g zIx*@x1!nh#GQY#l#=jpYu&jV~Rj)at+|CsWrtVz%!q%WQdCpM$slkZhsrE+SgwK-X zxQlFE-LFGYC~DLYozTmu_^8|@OAS#GyN&d*h=BOg{64=y?lcCMY|w5mwUEt zvHt+c_VB~skOw=o+a6B!12zuFC0X`9IYIG0vz>arGSUDoIpd>s1cSSID$oeCk9_sd zj$&OAJ!bd?e=hu9eDT6gy$`yma<_PaC(Shd+Ca?sHY)eKO#bkqX6J)DxH-ST?rEP~ zh9*>S2UnrpQ!*G`279_a2|GY<+zH4Ve~GF*xt7(8hE;v0KldbE-Z$d7a5*iq>F*x= zB-wuH|~c87e335(<^v-IvTB1p~)^IQ#v; zi*=3un8GdYw*YjaRl4;%=&D13{QC8cM~_{|{7EF#1m+`mokE`17f%a$%QZNERI+0{ zf(4_ZzXIvgdODslr}n1UO6)CLO_JYY2UYFv!yX1Hp)#%MNv;!&U zBD@xzfY_Mo8Bpk&D>wq3<>S3X%>DSUUT!QKeanG!e-M`M-?(Y2t37!hc&!qm>Q+o+ zp6ZWk3NDGy9+qHW*zj&r+Y?(&j8(i{gNI!HZHkQ9_>F9tXi>PkJiC&(&Q(xPNt^QZ zEmlFgikA=;J5YU;U*P2H*bKacO7R8)%KA^1!!LQF>lSbL(RR~!TM%3^n!5g_JG?J4 z7ftpaQ5YL`=Du;yJzcXSEKr$icIySGTMUpVGXv1Knr}+fsD}6#T{Z$HJLKOj4=?Tg z``ubwhhu2lLV>BLCpFzDt_;*{uV4Ibh!sS1mcD};+|{3rQD^%?VxM+7IY9v?)M~%j zEmWke!m2NI+20#P!s< z7jaix*43}QI|Qw)LC`O?1hw(x9$txfw+qdQ6Nm%A+3WF?_y(pCcZ=NHkxm=`k?DbS ziKgt+sn;DEYM!{rvm8PQUUa!vZ@YHb%A0$*4mx`o`r7@~0%UY7;--!}x@B)U!t+tF z!H?AGrh@z279#Fj9wCfga+Em_Bn}mq-@B+@6igntKI6&pSO~Z1@jnEbY6X-dUz$$? zE?JIyvub_plL%^^ITU{(Ob(ABgur6W!RY)#AOX1gY#^VUtu6 z7m=wx;%EWHFrf@O^O2j(%mYy6(0Ch>Y}M68#CnJD6vp6)|VFFKCC zQB%SeNxby!RElk|tka8Lx7! zI(auBK#vrwf2n3i0eU^UX&IQdX6RX&+0N;f>Bv*-2(}sZ8?v_9mrz@zx2y~K4pCuG zeVkh1D62p!`dsNXDfvhXDe$e~QwX~XL{OWt=aa`-l85@?wNv0pNn}pysr+bfJ1g|%^b|WOKme>5q7b)Y2s0|_$u5)5@MX-9}l*LbC zF+jv!v2g$EF!c11+KYE<#??PX35O9 zL^mTrV{P}NhLu!jFOv8ENGhu0V)bd+Yp+2iJn(N=h1K$4Ki_>k(9E_NA-`%JmfF>QEgnsKP z&zZJI1af`uG}Ztgv>tx4@z%5OZRtGU5+~MC=gsdM99y9B1Yz;v^&!=5=l$xmmqol9 z`%b~C!DA$)S^^Aj_r6<}K8okbTZQn%?0%L*MQKsUuYgC?PS;@(H8W}Jv6aw}UFDpq zvthxcTR~wRMs4gkyD)!Wg)D*drug}PBX;!uR6L5iWAUb-OcAv^DAeqkd|oe$L2>=c zjf^tg_2s~2_$Bt-8l-d)-k*fezWDy^cCb%V?!(*$`7ih$pTW>G4Fzp!_40!t>dypU z>?kXtz1s&M{Jn6dw}87#GArNlGODf?X}8w@>`BGfg3`VX{#e>~Ieg#@;#H1#g*NPc zK0?7#ja-p(PM#A66}Ms(d;*1|NOu~T;bBYj-5ls!`uqnm(vJl2RqAeo?(v1JUU2@W zJcgcc(bPdS+f(Bj#cYiRY1MNaWx@1gitMCW(%p363}-X$yw?-#fzBTm4MN0sinXr) za%p#tx_^XQ>u=OEzN>!WtOZCeaZq$nAnq^M9`6L2n0~HxR#-~JTjX3*OE;3AO}EJ% zONtVtfyAzK+NUf3-Jm0QcAXnH8Nt0^iGtk6K4w~DKdWw7W#2*_$t38={{B%0ENa?m zANGegveLbg_?>L*8#@Ozf=J@0OF*EK9b>ny$7PN#;4`3X7rT0H2!I$V-6{Rby94S( z02w35$r5m&V%8ZY-g9GBjvRCD3HFRn{V-Ksb~j}^GnFV?h?eL}7Id{jAetMGN9T5P z+a7fbA>Po?PrJ~90^O*t-5O8jRt33BfZ&OK&_8ypY zfh2OhHPM4H1U=@fj+G?7@W(B8>INmMO=X!*30;8F>W@i?O{@*?VBekJ6WMiQ-iORP zwOK4I91l!ruiG~r-vdJmgE7d?&$&#%+z}2zKflG)Hr6dS5E>rst>qdR&(V!`yW*Y> zb^UFHEQzY{=Zs|G*L?4PUEG{+>J;(}LPvJKPqx?ZKhkvWiV7iLH>*`?GSys6)C=A3 z(Tx*d*kD^<-51{lX?=7Eq4R1LBPpy*D{XL;&y#-jo2dw<(+o_++m0ad{N(+^ z*UxyDw7e3B+?!*r-1SqN*FC)@r6J{4;A@d5U2Bsa)3G@t=J0zLr)pmzZ*i7q$TP3> z^d@MOSHJN!(cx~?@hM?2keLb!#g46tLg(Ra>=3rKzZZAt^%<4cBi>K{ zV$NXm8e!;u!e+G53F7p06{5a0MpH8u(WgxD73G!qKBE79(Wbg37x zDzP`FTsp5~f1?L^7+-e!>&$IupY5OdifBaXi~8KN8IppV`=)N=Xq?Z~7;0bGn_s`! zUwNN_eDU4fwL z*fnj6vzYndxmfj%tU&&`+V2Lgf2c|>fe(PGbhMKY3D2Sr&uc=@miHNNkQW0p4Ej}R zcQuV5c~=3Dw}d3zZU^(@u$7!wlbSe+?wpSfBqjW5#AyBY#tJm)Sxu$gdzuYjIb(`E zPI;MlbCpN(B|2t2*UqD@s~>A`TG9qo9VL``ky;W*g`;w5rxe-9P#S@!E4+P`d2DZ` zDa@ey+sAYP1F=zw5zNG!q-E9>FE)OhJiV+;-Fj5zp^>rnwXCU7CP$U(fT`coaW!|9N(QZCt8$Idi<`oQo68zNx6zn=KG|L?mGx>)Udst@{{&YrKQ zj<4ld+Uu!S{vRX+eSOG=Ti1G(3ncJO8IkX>o7(f?8lN2E^$e9=;o-xDfI&~r~4KQC@-?V*BQ0+$bLKsy@66;S+5Xsh=k26u z0zfQB66E=;Ru(pRk_hS|*J>DHDKT>v3rL=G=XqnMI? zTFf#v;p$JO6NC$|)}s>%2>zY;xSB1xHAgs3JMqks^4X)9-J>?KW5`hU%;0*q!gu($ zGGTIbGIQQVxM&8Nl+7Uy_S}bYnl((2Po(-PI8saf<=&74`SoAIhG_j|Yy9uR`!Dy+ zMOHkdczZ=M36pm&54?^EL|<1er~o9zHZx`Mtb-iTyL|e4E(l zmx0y&_x?qKhb$|$KbPIBTv{(VYYTNs7Q779?kL3v2!)rMn_4d3iRe-pdv20B8!p=U zkK3DjGLDZw$e&>2{7fZZwbJz?Q;6Cz@j#Ocs2;B670b`M3SOJsUim-el~2>-@S$(i ztwj=AJ$r%}kX~y=QUz=>bqVl40r#3q6>^XfV4F#a3YIztINbi0iEZh za}Tl)$go;M);>S+GdkA6E2K59!dw-^_G-;ae%NF(St%V2n*5D2mhP(XxG|c+JId8P zT~Ig~8<%>J+a!Kf0&Xmjl43GRIg21rbMy&6FeL;p0}?;rEy8_j{mjhU;&?-C!c$pa zZ}8HtJKuQwaPSXI^=*zo;G2IT5Bx=!&U1@eIF?lJW!JQV2 z_+{dYOZ!MLylSH^MPuUMH)cNzMKnZz(g^=#toV}CAc33R%Pe_pW3Qq$z#Z5&YPelY zver#bE9qZmh0tP0*(}L_e9o0v=;JIF%?ygT76lCdCnRN!j;IX%Ka`K}O~AT@Ipt@j zzL+fBdk|=@Cb8VbT|ezK&rp<@4G~8Jy8~Q$4#KP)1B-!C!d_Pu5#cUXu)^2d&y5U$ zH7_XSzZg$g2UlzB#bi0|WbQy+mP$Ekx0=}=ZyMIrPk9{|IT>k~43wKWQS!YRxvy6k z7kYoUgYFn5@-$Df$m`0aSKn75c;pah8Oi=~qUCn!R+Dfy_?13+;OXeA{A@+-Z;vR` z{RJ5cSI@9e{vr3S5Qk2`@9S#iW{9e#ke^zeKC()4hZwuaAS}y#Gnmf7f^X_oiwkW} zq^7+W5|yM|{H^f0i>)-LT$|C#%9_qoTSP&)dPk?yGq8&dET>`)Mo(O;?p)#oLw`1sC$N(LwTV zer7L_q}AL4l?OjL%Cb&-$J9V~MhLi|V;*x0o3|gY0B#rP7zXw5#lM?YQh;##vKLf2 z&G@)$24Px-Kn?KR-uiQ0pjj&dEnj19#y0Ys4)e|@l%eWouT~(Ft%)t2O|(a=LYq!ISS-L% z#leT;9@+Q>#f1@a1ud|E29UnzvjCwI*MYMn!P3`DX5OF754ha>Im1lsGqltai&v6c z5kP?}(z|sh`@WDH2zazFNdVRMl=yn4PANi>1s_o>j8q~ewe{lvkw&k zs!}4<+YO2E(QR8V+;|Tre`n-DV9bFaxmGOGX{pbA1tlTF4@Hm*0^36&505~kH+54p z8WVMRp~gT@&>e>4-U@~cuE3bG)UR@CJlUR>u_HwSK2}#vF2Gj0dE@DU`MlnOS7%Br z0r3-}M4~5n7R)&twhnzk>z&&8^F``D~TljTi zghz}4PJHuWa%^o=lkbe9noIrIcD!_lV`J({4jV;oURT+vQqT2HWYZexMAYE zP_eY^>xrjtbb5&0&WdcfPmsiv8t2h!Z$dwxZ?oX(aq zL`plu2jk0SD$jY+JZuhIG`UfUXVy9Ys`%N(l9BG_)EiX|&HS?`tta=GSf%6H;8-YQXWq>ObPsVBggA)1(TkUFE?JX)=Dz*S#*ADi}6ck8yD^+4Ed@x zqj6B+8g9LF;)2D%^vZ%xLJ-yCexbjMFONK7 zU8U$KEBZB+9=#ag-C&ixg<(9WX(Ld(YqrS0P}yaMlS>RvYRj;`ZBJQfa;J^w^{n z>Ek{k=DO7}QwL+f==6++E#1Z6nwuw39UPu6v-TA;fU;aTbi&s%&Yp8o#M^)R(D9j} zHPDhzw=Z?DSzSUjP;8>WqT4%oN)5eRxZe4piqMY^$6swLhO<$+#61yc5U)07Ui`xwo+v>4)OFB197u?=P zpDX}dawEq+OG6cgvb-u3fQ$QrfmZ{&8$st+5`@FEXx#NMvP+4eDbVgP`u(0Tr&%3A z7ZW(^t?=@nn{j9-Biug>8=f1SH=oWOVP7c|)EKTA2|=EAta3cc91MPCN2nqpyn88B zD=RHA5Y|>fiMc1n#H}e3lk*DU=rM$9AW53J%$|gx<<8z+r;?<$07fa;MM?m{44e39 zOOw4CyG-ve4G3;5>v`sxWfquKx?omUtm@B}mprjPRBv(--+Z)yl*fa^+#j1DnGXt5 z&Yu35&%a1c7k|~bl1TvXJ9=CVR5A*Y_2Szw^9rb23|2%^9JhSuGMhp-nhTKx~To;g9ft$~t_*6-4lWCbPCw~Pubx7>`77BHagf1U(2pW$-g z^VHh$9rVZs*1e(uI2w&@OZsKc_p`mC{ni&O`{g|UlV?^6A9Wh9*Xs&ki>R8f$4i<5 z|CE>eL)BdWDi&s<_(#r|gZCo|zFo1H9M_>PbZ}PjE^}Kg-}|&tR%|E965Q^JqdILEpFBZ)ejKFBREhYZD;8C}-C6^pB9B(d)tl>*teuSfh+6 zYW7>TwyAErBc-eKEbMS2N-Urk)OzT3Rc3lR<5R2ht;`hFCHKzKz7o=GHte`vJwd1% zIt#3x*uYC>U1?+uKD5|TRTM!pa06jr+RsQ1PA}W zq^q8zWBHy#ur!XLODVekvONY8$m~cTu>2idFl}SPj1isrG{7SIq(lg*#vVutDiFlDbXW6Z&q-L8OY zvAen~eLYT!FFbvw)y=?2?!~*ULt8{GNIh2z$uMqt2m~1L>42{`8j7pDdShzs4kKXt zhGQ>c&0BvXC+K%{_WEryGIz`(l|+D0Q8+2wJawhCAfjkNTtVjpUOOt6KB0H!?Qs3_27!$BvPC`IA3n=-oV0Fu;rdHB9?Fvc~>N z(><6KY{$s>GO3Z~t_iJH3QmjA?)aSHhuQg2S|K;lcsphvX)O zD~s!LGg(E&HzOsM(g>5q#mvr693WW2$vvld%{$b2HEQKTz8{;Bu4Dz_SC~Q3NTtVA zU)_n!R9nnWk6n6w6h!yq^~<QlHF`Erx^3}gNBVbK<(6|xM0Bz` zPb1QA`N5{}15$q#-&is#XUZAL0d{dX6!6UNp#NJ4?K!&o??$URu3~T`T}vk~UqZcj z@>hLrtI3*FDSQL%q8W0Q1-?R*2$=tMnlcHnTY?6bY-JW^>RA?7`>@`3&7|WM4QVC{ zBCmHg`>e8}yCNzC-Vd{sm1G?H%+7AR4fuTtyvf+bDvqg?Yp21 z!4e>SLbByeh!jYN!3hwLMlYgS>YC__EuL{vg;ttC8vD(^oZf1G-!FPUP^r=yey4sr zB%^yxRL;V#9c*RHh!&UJk1CwewRY*8x#^`dgn$Q_P3V+J+8h4mb%zrOL42 zQ6-u*%$ZrE7kMX}mY(zx`63mYHUz4+e$zn7@K^LL<8vFjffT-2(Zc;E5Pr`aTcY7r zUO`4qg-YnIsL^O-WL;n$8)9zKd!O#mDu&xPu61Q#RTZ1~+UBcS$V+%Uj}jb#n1Y>$ zbP+3!sYY@H(ld9pE!)VL0b$`JF(STdhn===LS8IL28D=!ji`rl=f8cG;Ud@e$V$EY zZ!B-WHHAEm%AYA!LtLb)a5{QF2z@PVGt;GC7S*Ae&0bRvGfR~t$w5^KO7D=k!`Krb z-^7uKBSpARh+x;~`bTv;wM+JwX<>!9&L2-Ml@Ga6WN| zcfu-x{#$;Do!75S+PFw)jpKqHDS%?q-R5w!a0bCL4Kt4m`#a$)tha9VX&Ctyi(en$y?2%3gwk-(z~7$%pw{blpkG zZBWcMaCa3F^k=JET=nuB{nP%S1pw}v@=Nx+bGGZqU4CbgMK=6}b|AKWL&W0DF;=f{ zw4gD9{i&%J+jP=3we0mzFSGdD?=?kz*Mb*ke{rr=1ud8dY^YPh%Fo~h|$be*lCj%UjUJXTQ z|7g5a%wXU6N7d~k=)!myThV|4^|<&F#Lxo{Lsz2TbK#b~dzfJ63|A62(YY~5dOpWk zc?uH;Oq<2Xd=p427iMx!*7nfhk%5E7yH)EoRhBD#P7eGsg6XV0OYUCp2idwe*?z6V z18Xb>)2d_1yQZhI`w!NB*{mmQvIfiSTX>brtZ;*Oje_n>BnTf83rK2xWVIQk=5l!Z zvpT3o`$A$EJhVulDXvHeFv8n==~#7GV<|azs6^eywKKNEPA+4Q6Sl8u zZ~VGr@pSs*XQ5hD`Q}F8k!w2utsKY4md-o3&<5d-g!LBZbj9nR*$4ef&A;RrtSd2(R3#P7gRXol& zJ%oF510sx3kXn7W#rz$X?{}z%Cm&tY(93bbJRp}~bm}s@W5WIMo2<7gj_CxXpVKHF zv|zwfcN|7D z=R!+Bl8={!a3ygP()lqMs~2e8tI20EHuDjNkMBP}nvYD%>3fhpo-HE&qlhh2dpkH} zy3gmfu%FC311D3>V7tm?ZK&@?a2b)EFyn&f=%h!Fz*zvb=+e5$ydM|J`p2p7!$^(4 z1>UYbQELt6$@xMp(5sPi$PS%3^_+*rWaFx{jM_JX?ovm`x5v`&YGsrpp!aCO?(75$ z;4&m+nGP>aXg0YZsomJG4wB8? z&*(GL&z}Mco!p04N;vLkVosV85u5#?k6dpbRr$>avI^y3?1qKH{5@R-ToDiU1f37K zA3)^?-N`D~VV9yhY3^`enOy~CgXYj7t%<$2vhj;8^@XRHoIvT+hZ>anOKtRXKfM(K zyO~j&b41PjkbIz{AGzR~!m(l#q??su4^0TmPL0X5jH=9U#~-A_9A=n7 z96~#6^Si7+asTJ(6vW>#;f#&gI!@&c1;s) z!=%Kslq;wbi5R?5giRHP_y}b?X>4?psIS=2%jQ~Ou$7zqIGk)|8VcwvR#0a%c{pPi z8B@3X7)}1TIqgI)26=y^ZvcJ9=7rMvM$3iqMy7&nLqvk*YN6t5=0fJ;4C?O^E}VK3 zEzrGIV@z)b*i)kYI`HCX1`+jV;H|hjrkeUkD;6G3Mk|~p7R?NCGhGV$S3Kr8`#Fe# zpu`o+x2%w5vxT?OJHHX6%4_VJh)D@^x=fZZ1@S}exXUS&!7pqzGSW=14w-(X*8Sg& zr@y`xleN$xFI#_38P+QnydLE=oD~j!z5sj&dHRSQqC|EIsm^%GL6vk`$xe2EVw9ss zR&iBO7@YYxnL__C`CRt2o4Ihz@p%5xbs_nSGY>K%bROCj9WQ_>Ce`{sX7Ie?jE= z_dASwHERv)&aKy8QG_2f9NQv?EHai1Z-J`9{!f!ve6XJj919h(PBbK4`3~tJ0blJttKLahH2=B*V}qU z(Y5s^sJ_^MXk`$i>XUP3J$J1NBv_*L5=!}fl}N=N;;0VhDm=7pe}7sZbtTuajOa_0 z7g+)C!CCwAi65s=p-=jk*rthW`9g^jIiY-Df8v?)%R%#G8nLg`e}lIO0$p8@w6+&5 zRNJp%22hD*TM$WL6V}y`{fbQ;#H%0xV{xniyAVgc2@kH`5ykM`H9#~`b?j8o@=>x029z+W9Se}tRM zZW&(U4Q-0++L)g@L_N>M@4LhKIs28+k27M$aV?yplVFQIfg-oguVnwb!LefA2d80q4|E6nz)YEX)qZE z6~7qGyxTaMp=(CVtMKT}6fJ=Bi68j=bc=DhT0zg+5QZb7jWgjMC(mdEhg8f7&ZLBK z#}nf=v1y^kvzlc*A$~1onmMujX~H{5_P%|n85k;db`*@r@pjR%L#Pbo`SwO*ZepTr zaKnhrd77yn@3pQqj#CK}r|P!ipAh?6Kzbd>g?;|LWafT$S^%ofGrJz^#sxk!sx8lI zjI&!f@W@P`Yl*07KtvcsEHP3Iuz_a(Xj3@_7`)2<=zpL%;CuIb;Kszk+J86Hkl$*L zt54w?JH08t%J?&;-)LF8mU!n(O!$COdk?QRs5##a5rnOyJbse!OTFZW5zSy;Bz!Nrd+5mTQVj;pLJFJ1O6jOay6bQiO% zaf2x`I=7twA)$3wf+{cTe+Q|!eqq?Tp}XJXJ@dU>?cJMMf?hy=FBG49X^bjD(GPtJ zqzsYLXlS&!+ov2ey5sT4&XdW(SCI~%8;NCno~2v&d%~4|V`<_5GZjoSEb~(@R%I`e z-L>f^s>xJORY?fa4_)8ZM!CK~Txrc*?(B9Mobl@qW~1gtw`ISY?as%}xpM!O%(gH` z+lADTVZVnWCZz_m!-l>K^SEB9!fK4;s%&^GndsBJQh@oJrm75rWUjb;E$G7x$^2;U zvgX8zvZs}|FDd#gFE#*YWppHMuLPJ{FB+Af+IXYkte;rX6Cqn^ zUZAt0Q%1IP#wVsov_D%Ua^vN;l%9IuKYWp_&z%_a%ah;ypY99Y!CzKDwLAFihgaD` z%(?F2hHnN(D+3i_>=CzV8HZH^*(+@E9OUvK&CCggDV6ooT&B;4X>(7!kH6dr|Fdsi zGqj^2s^?Rm1MR36=W?3l~{ zJHpRJBFm26`hrr~`{BQ8w z#Qi&M^6eBN0tFGXAtkXl?AWET?$g}U4V5ue=sLc?R#A0d@8$Jq3BLn#7$x((^s1n#5w>9qcJVEu(tUt zK^ppGtk(C0M;|EucH@8zY~OY*)w(Xyj4hw7M?<-#_m(DtL)Pf{4SonyJ-zS_vVv^~ zEGJp@$Gy{{)%lkv%BH!|MUo}*_!dRVng<2n z&wH(L0}~PU!xF`jCFvT4zaNV%Ty*t@JZf=V!^3GZ4mjNhCkqY`*OA@S4$K0rBmv5pY*PL^GzH4t7u-sBk(J z5a-ta?SX$z{{`pUS(|Tr{8OcQI@AXh<_6g%dPnwfhuqsZwdfXGh_i4pB35hW=Zp2uTN%jxEnVPMqT-ni}|0b#^~)dxhDMlRG?QhqjsdYLU^ypKvV<<8ddwI z4u=n?DCQLN^~2nLG2OZQzG`J3-4k`khY1etHS95V^jJobuVkmM-^Ft+?r-@gRICa| zOb{;7XbiTy^2;PucP>9(^5=^{epHHWgNmNvs<+y}#kbSpSL73->o&M1u&P~*k6_LX z$gaACT`5LR<=((6MTy5#e1djc+;2_n3bvnXueTkyYZ|MvkAD{ZvNd+2-i?ikOOS=v zmT9pE!p=|ebEW!mF|%(F9M&v;elmrBJvJ;_rlFfCu0*l9zLQuX&v5m2^l{REH|`&H z=e!d%BPYkWLgm;z4SJ^2xvGLqBx;`B8^IXitp72f7fd$(Nbih~RyLVR)FG+OR0d!Tq<21jC-B=ehj}qGHh&?;*wZoR&n})HkyFCn z6>vi8pOE!%L^nyx`!nugB`{okLJ-99q=o-p7FitrQOisRB_KeA>1a*CT4Hx~{I6AP zzYp#61U>$sA!?tS7^V2a4cH&^PjR&#vK@V=p^iL^ViBjH%f8|G+2iSks7@O7&DZ8Nf3f_w}) z>ueAUNX|zk#t-9@yR-^Dn03P7;#!isU2WoFd(&;KlS=g`fk2I2lJdKdiy(51(11Y< zyGm^COF;TbbO|A)(g7fT=5uKWEk<8hZnc;PWkza9&>aNPOa5@loAaAAt)D)Ly}B7F zF_PryxCTg6-{qrCPFnufsVbZ6OP|Hv8+j(}I*t8^*xbVbj(dU>nOm}Tm!m>8`qv~9 zAEDJfZQ1AkGTfG2-fG96TMYINIJk{>NO4wI6QuH}sTV*?-0fd=&Z1mXv?uo=DFV+5 z;>i$O?W3m06rnpxltSJvAkq^cg(W*9j-yvI$M94^NpGTOW)_hZq^J%%a8YMMrhWM3 zW0PDt_Iy4i^I9qVI5QPD5o?^vm3bV0s&h%!cK!a;eI*R9ig&M*WOyQxs6 zj%;g7u0t%TS@*PWIA6Zfl};~!J-WzrIK)(*p9>Lc(jD9326#oe}8~vsoWyH zXfo|-ZTp;UJuxFwG&tg~?vb6HuCL79&`@)w)q}K9nwkzEj@$?A^-T%D5wBY=tQ3Rg z$6cJAY{`)~@i?F?6Z&#t$L%^d(8~SH4Djqrq@H?#jqa4Qi{JqCnw>KD>%2ilwxQ6T zpK;84+^$g{qGy!Dw&|Eq82F6l!(ofW>afwyr91eG_%1mhtt3clDto7sHx#eVIpItc z@R}2{7hN#d@g`qjjiuDS0nMY1gYrMFui@5-m(a74v*CUuQfaIHJ6?Z~eNx|EFCxgA zyQVdg!|r;2oV*85n?{W~vZY6ROpFezOp2>l1?y1)LWXXuw^BX7Vt2uVvG$RQHyxSV z<61QB#D~qU9%_PbIlNmeys|5{0dre|7vtXO{nhv?J@SDf)H7beOtFHiV|uunFPlEc z()QX*@t>(ScEZ)!_v__pVObfp~=Qh|B91QT>EZ}fGAhlExJhw4%gJAfvL(;uXR)1WnaCWMjHY^%VQGg46Ktn@L^a$EhB{7NR15 zMAKg_`Q)!RRy)92cE^L^<(n^&d@L^#R6Y3nF_|(EEIi-&xcN}rgJ^Y2yDS7^LGV?K zv4srbDMr6yw2E-MJC}YOqFiPnkr=Btcem2#C~R$j>y6}^dG^=h!mZ)Lo@NB{A;<;0EfWkC@v0K zqHajg3O1-56mSsfUcOz=F?R@dkvHlTPkvp+-8tyX@QExs=8)o45{oPlsC`&qF(~3B zxU?@7D4Djb0Eq%MHY)9%;sZvFaUXq`C>olp@nV(8r*8u)xa%}2HEf#hSc|S|+|K^8 z!itsdQW#ig&PF(6*W2ow4wuKYb#)upgZWws*cFb5^k5b|^*7h&zwywy!;-20QFI>e zY<_(h*I$RKRcgs@XLexqMfBbip6Pn^yLKkM(h#;v4)x0^ z`nJD7&#c)x>_Z)6%PPI=`Raf(TIRDysKN5CD-UI zaBq)aJ=m*VQG2+!k)uf2(;jmSRuyk}F5;`pmi7mlPon&dL^KuqD4|bwu$Hz{L|L#* zxPtH4t-rjT^Ote-%A2qwd`@pWRk)NzU}9%DXZwV7JHw{Y=4=^;CG(Bt;9JRR7!8j^ zit~qr!rKCmm!7KK&2=Q~pY` z=xyt6d}8w6b8U)h2hpf}VP6Ewd_;E5JEQ^I1^}xY${=adSNWM_Uciy%%&*5xzbO}8*{0?lEe##b z#S6J9<8)!Te0a^`3)ng#VMw@0GnA7Ec|XwTcy*;e4zuB;nsbwTmvd&c*vFM%QTE1u ztJUzq9{DFSZbayfYiw~gt_{Y&-;g_YV*ZaLhOT(er9rOkDIr6jV6>D*)LH4Vo5)=5 z*(UVz_&yDS%<}%LA6l!SfA)+H^C`P{ydXt!|SiA z{E$V)D{s31ToDD><>nrM3cHDN`m8<=?)Mhij(^F^@bYsU6_q)=R8RO&+Ul`n^`jIH zH?yG3ycy7(&FP{?d2K?%=(WW4mn&gBIq`9G~MZ7@&k+A-Pxh-Wzh*+~N#$;_Tq^4u@ zhCWcK7q*oATev1c*JCeGm7yziY1byA6+v)whyNw?E%R6Vt2dhO_g+C1FF zF6Khio^bOIy$ha7R^vyDZMA)5 zFP`HtIYZTq;0q&!_fGY2Qk)1|4Kdo{+Y=Fxyz57XKU{W2R?<(dqBWRjc5Uqo891;_u+{>5lCNJ?t@hw4bWH2|Q zqgQH=gJ8J8VGrZ^59<#do@tpbt$&qv{H&}hPPc4a>e}qG2!7XYa5Xd`!|&Uv%6>D} z_e+i9%AdHB;!xUA;jG(7fwMO&dSgptk6yN6%m<&d)vJ%J?Yq*fP?;u|DC~vDN-URs zcFOc3Sn5^N8GBsyyBz}{py7r7e3o>b%SRn*h|?V6uaN{s^j$O-I~Grmlv){h)wmFhnRbLE-jafrQr%6iFdl;ZJOPYsDbU#zFufqxOSCWf9Xl=iKh{HV3Zxr_<1MEtNXH?==iQ9@#w>bfm}E zXT4c;mj>~N>|z$QD3uD!%CItjHmhCFjOS>=)!jl0`4YVP6ucy>nK;#jhYJ{)E)|3~ zk!h5&!KY2c*{S;`ig&=)!ZxtWv~by<%kF!1d7x}$y#kvjH+Lofag8{o(Kt*RZ8`z- zhp1wsg)ImOziNvGP8nAHBl$9=W%$ZFgudlDjx)|2#ZgnStt!xbkeqy)-k8IpRmtNe z@S-Ee>@C{>yf~4=YWhfv-Vw8{+53P}X#uj;%5s^I%rh}Iya~d#dN0GImb)3m%csxB z#VTrA4+osyH+`zsh>T8jUzg`B@WTX}gK^?PR+{bwuo|Ci2E($MO|OOXTHUw2eAt;l z9~I&CGF^S&#>fDr5lT06uer}$%?z$Q>C(PkocoXdPDdQ{)dau&}YNH5BwrIc2 z@x3+uFOPrRzLe~`extXzV;-IIZO31O`cJA0+5^{~J7`+~Qt((iT#lTMs7wHz_hV`0 zYoBIXDJ_smJ2qiNL`3av8?{jep#8HpYeWao2VlaaV7=6$Y3Es~D+)tS!}qMi3inpu zoX?*}oKv+@&}-#7o5}J2{1K|wG>&6DTClo?56w$ee^Cv_;x{|TK0B5GjZ&r$jx%2dg353J_}<^iM3(J;|c zr1~VBh8Gca9dIp^+bqyyu~PqbWa3J=qRZdi*TFF${31Hjd(LWB)hRt3F+oNnApP7| z-U_N@m8TI-0ho?2(-{fqP_8|HhU##grOqv;JO58=|Pb!Re8Oxwq3RA z*Ii>@usi=oyO9|eDRT&m9&pb`qg>ecK&KtfI)sf6VCXvd+ z9uL{2J#N;QGT+~Z<*B8pxq%_-qgSuPSwjWKk6TqS<$2y!fxppdwI>a@l97@>Q=Oj)VIaGbmXrJ@d@hbHNapfs`WTx`RQBnmvhk zfiNnNUN$cjli>b+r^NkjgZZjekpI=*g#XM(QL(Sw_32D2mhe(=x`bwj$YOUNTj9xx zSPlZZ2b&o#F9w(wA4ha>&S>Ludf5Z?>R7@NOGDyjKSG)#9&M@8HMP8-t(+a_N~K9_ z%81F5l>4L$hIQoG^JcwTd$pdmJCJMmk0kMYE`&*g`9XaH0KNYpqC+J7_6Dq4yw5YK zO|~7qb8Om_0m7@cR#<{wvaG!I>A9op&&@^6(&DkSnqz0bMBQ_gN-Mur!E^YMU9n}T z>|TDAuy~N6kazmjQfOoPv1)dTQEY*deVI_O$1c;>alPBf2$<@2Z$zEk4tR;u#`D&U z%E%S}CnC{xPx+NoOh@(agn&nL`l#i2r}&m>8%)E?uYJt(74X!!LfO$yeR`3S>;zzX z=9?-(rI`*J@hn%rW#b{GL9kFPrB_&}UWExue&J-g+pH@ey!pC}06B{2Rhzk7PVE$~ zJgJGcQBLhDFia#C`)N=6W{(C*5_CZ41sA6C~(j}4br4lHX>$-nj?-IdSxdx}QDFU~ocqXx?o zO4k;0iu(xK%c))L`rQGq2)MHz^BWFS%AVGbiBR?0IekC9T?ZbT-oMF-qwm91lu=D< zTs1y|;e2C*mD)J>f~=x0q8JruZu%1qU&EiKRxG|41KIo|aYW5m8_D86)OKbo)s7ZI zh6<(Vw08-BUjXz!6ZSv2lSo-LGi$dFd z?jH%-AAX6zx4(q0j9v>l^0KF(B;PLN8DL(6M?$S$KD5@PX}4ZZ{dNJQO@DzhQaJxx zi*c@PK>N)#2bujNLBIKI=c7X8mZQ@>dMSMxJY4l1LwNIF2wC=clm}%oCrF;c1v@vk zjdj_DK77|yDJ;x+eAT{Dm(*)=Iq|WQXYjO=o>=p6cijJ01%Nj0b+er(#Hmvz+ZOj< z%LT#Q$Yq!eJIist1Pgh2z<(;*Rxg@=#&Z8>h;W4XU_5Vtzs^KN3b_4(K2T;uFHzn_ zQ>ZWEG@idP%|E)Op3G~>My4+>aQljK*V=UBNU3nX>X7Xmf&SZ;OMWfMn-*><#x5sa zd8O8Nb9PAv(i6M)sr!fpwya~sY{h&(ia_r^>B%-?w zs~mrCt1~wgt6gA28>K8V$ExsJGsRV8_2-8rvdhlH%Mr zY@^|u+9Hb3{$m%i0 z3cAb}4ew%l_gI5?8(I&~z*bn$)hP1POuD?ateGD8Q5Y@RU{&D0fBaqSn6Oi<&)HyM z3pV&UzpoTJ-M*PK2%fHB{BEQqU2wj5w!Y+$Ls&`8!Xk1W=$@RcD5N%2jJV{w5^Ev2F5A*v=}!3l?(3#> z(n*be(_9Pw)Ga5qFaT1wPA?MdV76(6EZ{=NvxQm&pI^o+-2kUA;dH;(KNc(W^DN{H zhVK`jj&uvk?9&j6dQiJv9SlWPgl!8&zk0GeNW(&n^I=kX@JyGFq5P&T`SY=2K+di} z?~S?YR%`?G{>(-mvY@8s_wr+6-t%MLGWD)RnSzE|PFa6>LtKDT&_H#EL{pyIp3*a( z+esPV2A=Qs_@mwHh+p#8`A`h>?&LQ9@@9qllnIGQSUXiyUBLFe#P{@I@OnGY2MbCA zciuujc9uV54;`9eo3wUU5bT%>0vrNwS|2RuN@HogTW4Q|gR(DaJdO7LejuNVx98eFb>mo+q3aY zt6(cYyYI}7v~Wm7JeGZew{RjfnQsSdrO^AUpM|&vBX12q|9d+s0q-2|Gq6rAb5TFh zgU-xS3W&%W=3Fw&DcR0ZYvhkB@PnT3IpLwtolm76m5zM3mUXlz9f_GQmGXK;^Pc3A zt+%1_?=jllQcY5Di2&ho@>zwfjTIv9a|8&zFT~T{dL(IR+4=Y3Ypu z5pkY?`+4N=UZZVxPO^ zXW{&JQ9c`KY=2ZrLaU(WS# zbd>TpC2S)py*XU7m#n|>(#6-7!tX`G%JM3#w}=*OIX4TNsP>?-{T<52#vxl_6C7+_ z9N(?@xw3gNA*Z;|iaVWtg0r6edj+U;Ei~c%EzLabxwL zDO+d)*lGWOzVAYn!%hu?48H;2WyL=g7h} zd+5%Y3(Iq+j{@`4%v^y>)E>fX5;7ILPK&^QBvKn*n9V-QyX@%#1pTgikQ$mTeCZF+ zqN@$JWX|g{IEy{?lf8G-~@THWe*qdOn2pvw-mN94h44c34_jzP21+hyta8$hpHmiUmqt7c82qh zuVx>P&2@nacA79H#Kdo>PCQ2^$tx!Q;$NL7_u8NTezOit%5FQfQae8-dU(4De|qF% zp+o+ANYsu0b@*NC$P4;5D4x3~cdfDl6d2VtPSDoFqlX7rJdZzS<8V66F-x0Io@v)5 z(G;psgv(ke<0K4+28<)puK{8y4^kX*LI(4)$;5}wPnB75&XLj))DX~AXFHRv>+H*M zh?JWR*+FBDeKAbj-JXnXV-Bh9uAt=_Sx?V3z1!uy@XOxKtc>Ltkz9=qsX!0Gi@4Y8 z*zb;*V?JuIH3Z(vjQWWB#ZDU8TcThFO2m+(~PyCBC(+ z4Hjm{8GRgbUqqA^lFZjhsIuDJR^b0*WpT5~WUo~C#i--ph{7OTYkLU!?cKIV&hE8a z*gearuBv#u&C=|uYw^jsMF7FEcr!OAYWcvl7KEKq9;8QgxA9<#U$h*382GHc(D*=W zX_{>%e|J`yHoC zBLr%o)pJ!36^W1{>L~|ihfm8f2;~H{H%j8fDp6n!{q|&=Jh0|OMTsoLCC>poetZS3 zl+J>C50vfuRKy`tDJ>D$FAj8ab)t2e5V?yLW^QKYrHmev52(C4yL_bFtwYt$F);T!wmQuIm~GsdNk1&hXUQSm`sV8*TQ- zsnIP2*4P{<=dfrtUFznJk58QuzyH$%<;Cqv6ip^TC|?1$7ed;@Et=Dn8fl)}aym&& zPPc@(d%^?jaF}zZv6grutZB}52lBgX%*SIb$dJ#lL{gb+sd2LZi(p_l-^BTUWpini#+SW2mSbZbcU@8r}zictxzP z)mFrKXah;bG3zY~D^`p5XXh=_3i$r|C{BebQ=2rlk@2K;TaGL>3-5;XDE5A_`>yd; zd0WXqYm&y(W{sg8`OcY7SiD8&7_!e4_*}-oxogw6n2=}!A(oCdHnto}@3PD;;jqM> zi*t9iv{a>=X493YvgX>qS0s=B4yh%x0Aj>%#311jvkk1o+W`zwR*?vo9znX|=g%Jw zdEX(v-tCs6MdI|g`p|Nq6voX4y)7h(!TAko^#L1MzUD3_HYaLciuUDmU8-FWLN6{T z{J5EBIBlRPquSQ$pxNlYxz~qxrdZ6c!oqS};_NcnhfDWT?j5e^{6I8gWXy88${vel zZ;?0ZkPwYN?Awza17&Ur`2lu<0>VX7fm5dmglJrdWvC3^rNAK3UK5`1~FR%~Z z`)1V2-I$!XtG*~z=e|SbMZNguiu`?PiIqe~eM6HmM0?@<^yS4{4zrXY+EqOO1njbV zTCl&Bv*`OPwJQwJXRsV*yK)b?(oRF<_;^|(VUW^y;9)2OqTZp9hmSz#{Re7#lR=)7{GFF$8#AqcxUy#h`fllEg-)3#C0N4SNFTk-qiLrq;>`0 z_8)Dre5HJ^89Oddzbvb8QFH{Qe2d~j?tLh07{%0V7;FfZRPu7%YUkj#Y>tmb+faKC zO-ID%;16lGMQhUoC*HJ?IT4-uS0gQhPk(|WJ~q)GZ(h#?D5>Z_AFa94F0lf;plpi8 zT9?CAR&$R4=8$OFLn%`20SS@!XWXRxKMvaJ<4d#*rQC*2j#U7T+QiIpsYzRI*_!VS zPip54XX+q=5VWjfEDzh4A<@dtZcg&nXEwGMpp#GvPHoLUNH~6qs0~aoUi*%2F%O%K zz#Hm)e#`q{)GJo^?Ir*Ep=#2^o*#f_`-WxWk=Cg6XYsa&wpDYkuXgV{qV?c9Y6=gw zG$fSYhY9zWC}Nxk|16YUv^P7{!h=PTCCIh*KUcZL;SJZaCyUM1tDgsA8FsiZ{jRAT zY6q&aGBvq1T+pkA2>;qs-`Ky0GyIRuH`z22dzLxaO)?VFCr8TCuivQ(Kk2forRmo5 zUib3Ug4IYt0NF{GBbJ1_c;cbnda~jEl>$RSu`8CU0l_c}{uJ|EWHyx6<1vZ$K2OF+ zyRnFbHrev9q!N(mP~)P_X8ZQdtz!%2wyc+IB?Cye#Ra0Ngd!Xe`usXgWc^^TrYuw* z**+Pn6;Qxlg3-(_W*Z$5F;FsS_U*;$vw!rE|HYqSTfX$Os?@7!m*KC~rXN~&c7dZU zcAYtgbg2p#F*CK#(=a)1xNCC_%mZDgoM{pIE*)=%iR7PUKz#7aBAOPZ>N%^v<&6@B z_DjWlVPX@FBY9+nw~x;Hy_V3f=$}gQUgOZ1oZ9cm-6N~8NmX0Mv~}iiL8ES>C-}wk zMa|ar2)ZV+y&*Ox)OQ)W=_&JZOxb~V1Bq$juiTNdVS! zlJ7VWTr&Bn=O{4aWm_G-C-ao48TpSSA$xX;SZ7cugPZIMVFq(BaNgMq3g~tx)kriS z)!a|BgU>Gn!F=B;Uk2?_JJ{TSQwmr@I9A!%OMD}z!r8Cn#zj41AY-cr*rx8SQ1{3&^2#1KI* z<6Az7p!q(tuxZZdu3A*#j{>e$kbX3C^i{qq+-mrQe8F(Uuqkr*;CL=1@ylOi69RdC zCH(i?*7iioyi7!>%mLoWAz08JiE!uE4Mc>*@70L;NOUPs=E^*X@z+OgnSKmVNUIv;WpCo7C@!iEWQ8skou(Nr9#*M>kV-$ zK7r;|6S+akYMEWEJl<{v_-?-k>$T#kk3z#jT$k=N22?Y zAhe`&$FK5)m738NNHg2_J7!V!md$o~;|f zKKxO{3g@?|CKt--s{n_(w5Ev9^^ zwpt^tIOG!7yEJdJawYR$V6d-BCg;p4(QnOj^LHMgs)$kC{q}S^-U#S4nYjGLzdsN3 zd3ciH6nSqAZQPg}!Phe1X_zFf;0Q9PhaOblFpMd46(`E8HE>PtMy!ml>mO3|wmh(? z#JuC9cjWWNk`!I40(O296EsAqw(Vwud&D^L12H^7e>Sv^Y3czu-*wn(1-VF1`z4!n z)siQJ=FDhZn8yE+SS8@O6! z^jZJWy*Sx-3Y$NDQ-m)9;(ggB+YAPcOT1C&*2^>PC}0vddCAVUCuz^ud9Z-CX8bJoWTuWzQ}(x)z0lSi{^1q-$_?^C@qh z`6$1@p=dL8S|r<2()(vM0j%jOk|3y7NnN;O53evR-s40+m12|F4oC4qs}lNDkiFW$ zz2U`$A2uS(j76dcb2?$$%-K`mRmKc^r}Cd|jEz*@FUHvkqS)V}!5RM~4&YwFv&QN} z=grKWZ7&$hBiMqos|0JpVaFmpy9gM3n7lhg7=DPM^ui4wxxle*&B}bmPniOS|h)TCt+di$G1b@D$ zmks1`-BGJf9Hm*LMWAa9p^oKZO?lTLDBGK2QukB|d>@euK@uv3e%p|&zkEVu6A)Qw z*eztvSLpy__?r|NfdGMHWvAv^Wrfdc^;tT=zg9dsniyQAF?sQc^&%a@Hlgq#QBI5K zETY(5uPYoAYnzaEvV!V#;!PuI?r-*nkCL`!wcdn(`GHJVcczKlEb-xknEO;d*QxkmLMPVMkM z2`~V+NDD?ByWuzPx7%-ubn22Q0lvOZ>g^M*+y48nYa`(6JVD8 zhy2xWb|E?+Kys+XJep4t)d3GRm1uBU0g1_Oplv^=Xa2bk$1?G|9M6b0z;rESPB6fx zbW@dE9!F^=agdsmyA^ISnIfDk zU4>H@(Q0}3k1tIC4L57#3R4F$%)5D@B2w{iK`q$8>UYwMjbY_#LVa)HorBb!nFFfv zt`XOUUC_Jw^j-e{l)jVQ*p=uh0+CG36G6AgeOpbo#vv4Ivb=-n<5t$f40PL$M2HTZ${;fO4xX#l6^Nt*MlfYDL!vo^L3f zR)p8&Z&N+zfg3&}xnQ|)PRQI;mtikJC_O!9Ngi*jm{+@hb9>h1LUR%-Rv=qk-BsKz z(tt5DAJqNyyDyrj_gC$mBkKvbfvT2vYRpcwe8(&wumFFAJ2I#Qxx6!SmCZ?~oqdbNuwD=+H>C6uq`tNwB%MS&~Cz+I)7iPABInx&PBB4~EH06j6tQ?`>QjL&n z<<4q)2~Hehy^cKPEgZC{wTHhLcuxLAaQ$``X(Tn9W#m^}`BXEZ=jJ;u>A>Ovj6d)+ z3;=)onqYRR>w?}ax=$I~!I_8^8VCD}M`MLEHI_V?4WB$QYxq*nUUu|pr>e~U-E9s_ zE> z^o;~MEm}4*_}JK3{#uo8UbV~o3GtMbN%N@}?(I{04iD-r2zQgT*+DmhpmNnEe+vpw zZozb0m>S(NXqnD#ILz+^ak5>!*>>kZD;~CivZ*hLJVj;I>E3_+JW9nhuCOYl;_1wl2U29v{=nDY$mA7KhTH-hDqVG7rR&rQoCkuBqDk`@ij4s zxq{pJgr@2aN)*KWw7CQM^M0ph^t1U?uOj(Wk>}h2{oVj7he~vzpyqQ+xw|1fN|2fJ z(&KjbHmyeRXS*LaSiR9!>v5>$+A2T|Ku`8SJzL7{STz0q+Fe#vK%=K7jt73_?RCa!5ciaOA@LLhj}n%yk)K z6I)DSO*>k)d@U3~*HbeX;ka_G^n4V4NE#z8;E5m~BSwK90sa!_wP{dP;7_!6T2gmu zu3|D{kK8P|Yp`u(3t0t0N&ld%=Z~D?UMqa4itz1h2X7#^zy6QJSPc_V8Pl=_v*-0) z@wN!EceC!1v*FKJy2%pn@oWezxm0LxyrQoW-#=lOjW|J16R$=p)kK582{9l8`Q}$_ zz>&g|^JCM&gGgSxu&I$RdQr>pW4`7>d{#7k#GA6!Ymi*1ZmdXCJqM{3@G+DKg(@-o zi597O{N8Fds2f=2{VnB7r@V`sU#@oSzQd%9Ej89PoAHeKNON)4N0s<*;%p|Cs4`)W z&?EUHmtm707TJpBc;~2{M_{+fZ#ZEqu;knmh$sK>Kaw%|ns1%<3R%S9!t?+y(dw^W z)P>>!70rt7=c0#D==&oXm$}%MeW^Bjw(O*XqBziE+%Zh!m#P51FwGeU8Hok8OqJ+{ z{M^kY0Gw6o?`CV=uZH^Q%zJtH+PZg~7c$;T%0a&Sh+7HUttal!7E=PINs}<8LI=FB z!2x6Bz9(YAW5f`HFaY!f7nW7>Jo@6EZWT|yL;H|?_l}qsDI0KR%^~)Wgoo+PopkdZ z;$l$w-KE>qq%!yRVo_^?Z}Q5yVll7^&^S9(-f^0&k`h79*Tzz9`X)HjyJgU%|K{m7 zpxW*3&hfN}a#xh6t9R;gg#U#(GOKssRCzwkGeqMEc-A$w$VNBeiJMHg2uSHqh^ZuKUU85CRNv=I0L94$FYD9;2!gR}vDojA;Tt>L3IWhq4 z@G1R|<)Hta072O~PbJF<;PmZxJ7m-9Dev9SLmq2(Q1+<Jkl@Ee?^GYu{oWyDx(ps1MaWR3SFOH_Mvp3s21Q>2- z#|u}%_-G?cT77izOY8zM8qg<$$w3{f0vO2@3SCzKlruq-j6Y~R4Eh=E=TG78%yk5# zfS2Qs>l+TaE){sZhx9cJrh8GNUojTX-nMmk5vO`=lM@Ud?L9*{?1+zdvA5vtyxfTr z&C2*T=iz}hJ^h!B*D~>cTv3b#mD4s`pNL{=2{Bg&LkPWF*E-78ImruA;}g94EGF7E zb~*oO)Vzc)-MPR9c9HFrGo1KaMHP{iw$?Z&U{5VD^!_nt6M|icw_1G%N|krobw}0f z=wM_9^6i^0i>Xh7=2UO$UyZVx8{ASVg3TV+vboK@Fo=k$7;JB(?r7Ctp^iM>e@FmM z8DZLZu2kaT%2LiHwmeVvm>m;|6LZehhy|@bU(;fYBIQ^P>honp%*fRBu3G_3OY;Mk zPLkvAJ|h2bbh>kuf*{o3YDft-+Z`8xlzl!tW8BaH#Fi@5s0!AaNtKZ}^T?j>CAVVc~yV;;P3$(Y4iyM2Hbvy-?^Yp_8W7x zTdpB@&6ymVn_ti=4AEyx8c3uSDgHt8LB5ZPQ=U+N8<_sl{(Q5!Nw;T#XV(c9(ro4D zv{kZcdBZjrDuAzum3C)8zD$G+>NG^qLF7Ps)>}T7b?jq3vZJ9bL7$DOsHo)32m2%| z^H%s3h@Iw|He>DYnu&RAZaIG089ZZ@Bif&uW~=a4dc=c`MXEOOt;unl2$w(vf?c23 z=Db?yY8?26>IU*eXX*6a?x&JtWj~?uPHh@jJp|pZ%VDJ+P;bc65-hIaggQ}sccoHt z#n}+MJTzQP+&5ynCl@K~ej<{^cm*E@eM2PqFxn?~F|8DO+kPCR$urAxDdV3ELyjTO z*~ULk%rqa|>(Xwh<#>z%o@*6D$pbxMZ>SOx^hn)9Jk=5jDG8N?(FdpvEWnV=1@6o+ zp;YL8@ZZStTI_NGptn$R++%;|ik%$}4U#F#u(9rSpJuAiIf@+Ya!w*Kd`65yh)ZW_VVbQWp`5Z#HEXFhnf>2N<$4tBN{{Lm%+~6z~I*5#v5?i$uY6YS?z5c z%}vrK4bktw=sJ9h{y4KDdEiLU&JE<7;N7^XAWl?m^K6OT$*dI~p~4S&iQ-*#N=VUl*| zG-!@B!Z?c6{W`KJ5%KOxJCdS^=_R?XoVEiw)C-Degs(UraSgb$B@r=O(qRsIjp!B) zNV$z$AuDF~AIb753~o{S<7vC9N{ zw&F^hE$y*^RVU*+MXItYTkxXQT*rm2tE-0xPm>7D z@GC7sScz-wCBMbw6*JCA?SubuuC3T&Xr9=UT%P_k3$6P~x>{z;9q_kN3SFzyo4R1F zQg_~R6!FT@9%gc9{t0@Tz{fcwzEXM-Q`bg)pqgB*|8;Adb{nEH6un#it(Lpx4&Ou~ zl~0NHe0A9mD$=<&-rt$rLZ7_XtX$CMZWq{_V9#13SFO|93wL~bkJ`g4xl2_7=?g*` zoUi!6aBouA-yo!CSae_1{>vG;r9?sW!yp@nT4w&o9FU{8xENboHK>S)yXM=Hs(0H* z!87+#v`NFhh4M|_$bznX(Zu95L!dKG6;ZN@5>J9jUuzZtvd5p$>ARA!>OV{@=u%E{ z;8#tZ^40kZC7E~B5*-kQd0f_^b+UT3c29iewlPGND@gx1stOEAr7#}=Dh6=RbLYNz7|zE{R=+&aV)@$CgSlg66m7&OfZ`;-3v zD*YX~MVOo&{MSiU!m0!AypE`IaODLKjJG%Q6G#0CuAJgG7+aPWwS)D(Lgq>0izQbE zf>de|x%WM0MGe=aGmFGRE6E=_E3r#HU}K|y90qvsH!wd+tdh+1tgtx*YFG$HZ-H77 zDh|ti@9(ZP5equ16$7Hhr3I)8WGiozQ56fPYhv8!XcN4De(z)R?Muvcn0HYy3HV;v zcw;sfcF8mZ2UAxT6YhknEWc>S7iJ?lA4(@?6+LfeL2FQ;xhoSac}9jSGEy^-kiywA zhc$8halMC=S>Ib(5XW2To7YnG!0~pC-))b#u_EIzW!9A<=4~X)yW$eU_#PTKbqu|i zyRAd3|5OJq+Ce5_XZ);AkTt6A(~NQ0pSvRLmY8C7Mnl0;Z2Fj6;pUmG>e~GLh=y$k z$``VIfKh*&2)+-h6;)$|6+)mTlspB2Nj4z_BGH2JZLUX8Xm&(h(0N=k|!s z%7X{d?kg3BxAtv-t~ROo6=7(rxkt_$1hHzp2`}7b!-qIfOKwG1LvT^Na z!t1pNaqcJ@bCcG3{OSzGxv?RcWp;$)ZQ9h`0ESdhvc{MuWP~J>w0@f4zo7C+< zxI<^JyeVx9nA-w8mCb(o^7M!BFnZ85o_UeLX_5kA{p4XlGJRLXo=nO(HwZtCm(_CM+> zggG2xLpaN~CV;73tf1fECTZ5w8Ku~pJ2l41Z-TOHCoI)(go8>D4G+(s439u&gZ`1A zY|pkaWoA-()`*D_@&gL1CataI}c!=07xnfj7(B4lsTRbqZiLMAcB z6Je{|F5mYWA>$?lF&ON6&imK*=~ixb4!H(t;iks}*j&tGnIm*GTb>`z&?A&KY^G}Ngci#POOs2(6_Y{1U``#xr!EzM2m(s`X;f*S5 z2EBakcWDail(&BdA23Op=wag9Gi^+9@_NK47Q6Zz_BThYXCx99PCEYL*mwB{+SKvW2GS@xc@3529j(%d0^ePnhngwk&FoEc*^*gb3LP{ zjl0ON=;7oHexQyVd zF6j3`*P+F1_T08QFv_wXe@YgryTVC}z0x|+9E!>Jcj+IO7SPy1i;jllW;F6sMW04- z2axjfOkosFpMJJj77Ts5unAp2LWCRV^S0(j4;_TEwiVF}H{{=@zJYjW=t4EWTg~!XBhN+~ zIRD!QC6`^zzH|oWnHMe^)HS1Y7BY;QTV3gYG~Vdn8(>IxudPgbFJl#5_s2tYs{6<^ zYp;gyTaF{$I5GsgUPQ6Ns2*9NH41*4wV3B_bCa#QidN?Ty2U}?j3-RCXvoH;g_U%3 zJU-w7c;h%98a!B0;&!EMMa8~}p>wtS@Wz3$KyIINwqunba#!vF-HM^Om8JmntWJMl zUKl6A^ySDjBjd>Z#!;N+ihjH$s3Z{5IlK6A3F9{u(9JOBde%POIqS}BfVCQ6qI4E; zEp(-MgY)9lZ=Ih9s!Kddh%)p01@5Q4(c{S>HHf(9%rqVGul3zd!O+Xi* zoBkoLeiI>ep~gkkPSk3ac&JWY7M3K(BJRKH5&`imQ1q5%TIra>eZ zqCGFKZ8Sr*pUQ=e7#ck4q}d37$_&R|S2|R)+8^YP{E<9YI~{1588-feTNsgQ`GJZ# z_}g-uVF1Y5tlRFZ*1*@A<;coTlbO-v!FrkZBlYcg8AjgnHha5xG0{XgDXFz+k;xD} zCso-5`Lgf96`i^JikNzUG8`-M@*6RJO_`q$oubv}7Ssr9&Yw~N?zkHk#>9sRTlJ-D z@MqfDibgu}+?@C#=aCNOXqo;7QFTj)pV1=zU@!xZ&WrK?at=IxW^bHdYM()wdN`t;86WxY8-96J+xop@nUenHp`Y17DAGcz}Szlr_yJn?pzs5{DtnQ^={*R*baA&)3qqt60MVGzW zTD5C$irPi(O;Ix<_8u)oYu1V_ReMBguaK%$)C@xGsJ#+1h&*rJe<9bE@9#eMea`0$ z>yuZv%}e-snsae#k0q!*~vU%r(+`ZkgR4${foS zt!`l(RC?ib5lPxTjRQii!M>wyFv+$82Nu(oxSkthr zo2!~U$HJB$-cx`$?TWOr?uq2y&Xo>)ws^g>0#h_A+MCp>rUS|II{7+rR;A5n7xFZ_ z7Q~{6r?Rw@QiZJAQfiei3VZcg%(4P5^YdcnmHBzu_r`a)$G8lQk>cW+VDl3@YUXV8 zrln4_qav)L%AQnOg}9oJjBVYS@R^;bO!$|lpt7klDcqDK+S3;(*dAvsrX`L2Yg^oD=J~~^bpEF@P{*~SK0GD+Ox3S>6YmCgj?(`f!9bJ1j zWjD(JVF+?Fk-q+XqrmO;se>Nlf3fXiD@jTkQ(;cHz}5LMqg1#qJ%O9e?#sz;C!>AT z@4*G=RGPr;d+SLz!5$qiyN4geUt8tI+GS3eI}Mg4p94=UcaRrhDMl0-Qi-MeX7aU% zKk97)04C*Tz_FP{Nm}__O9Fy9k|H!iZ-{twx2Pm`s zN0z~Q|f*ktUu;692TX2NuJR{o;cmt9ov$Q4t z#BMAJKIcxg&}vaneuL&>`FfXA#-_&Wp1ilEsZR!Ww|XK_v|Fvl#G=DO3aQ&(7eS80a(EH~er;p2hids`uiHS?lZ*5q zjt4)yNx1H6*eN^0N3wFWAd?o8vKM!DUDg!rrt9hUyv8h5-71Wb` z%nev4xz}8;pWQ&!Qj)?8L7$Jp#5(5<3D-1t{eZo`nNV5~q_s0rb%*N3uzvhNH;SG@ zVx(%@bX-)Rn!h^X&7I7w8(r_qqob4gSNV-0O}SQ!h~5)y7jkD%kTsnhGkd2L+Q<;p zGkkM?@adZ{=t~V-`r*WB)XR{d`rG~-J$a}d9ClL zbXBp*sJ0^DM1H}L(wiWvY@V+|u`plhTaLnY*rINkwh1RJkaWLATOo`;td^Jd1%SZgY;{FHTKxSZwlTh~RO>DwF> z5}Rd?1-g<2hYM^6iBul@?QIu1Yp@$ZEvsjB5n&d^Rzb*KJDM<=8?NGz`wT17aITlV zW-X#`c8@J|1YCcsXvLdP=y4d?m9C0pzjYG-apA}_W2Ikzlx8Da9zOQhR{%l(spcO_ zOvkS#KcM3{VKHD9^)pX-`tg84ie6nyV@CD1sUq!o(F4bY;`c7YKN*x>1z!DVt8O3C zmDmj+g<0U{Am_BS!2J&hSZi^03OOg!OsdppC`ck_J;M}r3ba`0SI$ESW_P69e63NKQ3VOOo$T@fw zrU?i(TPV!|{%Fj3tD;{l8qIfPwnV7B*g+pFoB6rEIXBdaN~4)?mEmV3d3oZY?YK+92p`_%8?_u z{;uwogx{re*B+Q=W1046^dmj=9e;q(&5IeCFlg6*WalGc0Uy#5e(tPdGRJgVkwsam zlLrzC22EDi?#Dw&r{`gK$8!+og!Xt)+em(>l`Y&L1_PmR%hf%A*x%WkRP*+Hp!e&s zkoQstSAv0tg6z*yzmdT({xa1S%J2{Olp6i6#yD-PZ30hf&5{!>dXk}I0f|bFf)v+& zTRO!YG=MrxaXgESw59Tc`a1dM0z=fMshe46+&ld9&&yOjJb|@}Q_9^WK>F#{L{vp> zpu_VAD(&Kphm>le>?DRW}h0?%{_YS`&|Idw`I3V4_1~C2DENW!uX_f*$Zy zR{q(Nr8+BRB|xQ*PnMRC(Vb4Fylj18#=LKqkZ}G=^ui9>B&O)^ zQnszkRPE}kdn;kTxaYzLNXPoQK&gk314T`(B+8179{4%Ogh{cX`o9;U$(SwRQcyRQZ$`O zQ5tX7-CVu0eCL8xD%o6juVo@k68uARt>6>4P89RMBwC9E7U3av4bE`X1FwELnXIPD zgLhUf^YsUFJL`DHwbHUwG%<2!v)fh*FSS26(q)9A`*1Npbcib zj#El5?6J8#@rq2Y^+BtLFt|q5NTnn!DE>KkT5@oGfa2??`)}n&7jEiLB}Z_K0_^LK zVwp*ps7S=jz&4A>H~XD+gUWbdN2f3#FeI?<)E^et*xQUurTVKry4LfmCsO*T#N57c zhBHn5cGSY-K&jh-v^e}<6F1CyIB2ZwnyZB%a^`2RN}j3u!#cMs9!JcX$IGqmTI0Lc z)LUnO=>B7^LiCz)v}nS>@x6g)^+l8G1VFuvOYy$-*$7pojrE54KITwGJj}#vaC_^ zXQWx&HDGp_vf*Lt;uUHo{iFVS?~5+6Ck)O{Kv&C`hLJ^Q+3rHdl~%+5k!b~rzZn0X z(93?yydONdv^A+lo+r61Qq${6|*O zkcv-TJ!{7LFK)NG?v-J|HCbm9L&J~AI5?!qpU196se9)$Z4Y}VVcG;?;sSnVMf)$0 zrAi!?_!myt;|_rso5)}79tm>u*7yg{)$?DyzO=q)9QzE?epl}v*^#cAn|7w@AxvtQ z+u?g>!Z8WnHL3rXv_RVIxva@0-)FA=l_jd?oOKi&Z~)_jJ0CJXjXn}93pJuVmLXO5KgPGbvcSc96!Xj~6VwjOId$rMdJd!KmUF)>&q zG2{$3f=d=M09Z*PcrGDM8GSXf2mn!#%>}D6*LW3)rs+dF<%4ri4=T&lsLM%{a9_=1 z>qW-r$!`WJkA0XQh7~8Ss`aTEue2~cIyOgLXTE>)6&5E>3Q_#+~l+M^5 zu8Pc4yp6vqvLx_DuOj+Dlx}-|>$s`f%Pts+Gi_l$B=kHeP?^y`$w_m7Pu-j?E~Rr= zY1KjEXC`Y~(GPv~lW-fD<1w4y@b<*esx-6=^KTlRU}!_T?+3392VuuB+zD$bH0WJA z)T2LH-#j}$W!I!W+$*)wyzP^eEVFNyHC^e?U{i!wlVRYs9F7DrdB|QGM*71CS@GjT5VoMmPVGE&VH`wYlx$gI19mbj4cr4Ff`Cw9hgo%$=exQSnFvOcq`A?pORf!AaAkLiwJM7{ z1~BZ^wl>pI#O_q-Q_l3rr54ZL9Y9*zZ^ndKk+`DA^F4xf0T-WX|E-Bon}{pAuz&Tf zEb4b(x(#o^-EDHS_lzCTyr|`DN+ILD420>4nmlgXGpJfHh()EFFDN@+S90_@iSg-8 zMi#nNX={YN-(=N=?57r?xoSjpLAOS{8q|&cCfnt$Um(ywM7|En(>6&DJLl<4LkX(x zg3wj)<%SiPYuCHwL+Zq)`c{?Cjyq}wTYq3&H|I9YtUdLdnF;l5+;%jD^Y7wUq`E-)3^rzt-MeM{rQpa zDYlMlANA!V1)uX97ybtm*9FT= zL5Svk)}pD$t?*k3GD?r#BLv$gm{oA<5dX(`kR^CY@@I z`d3tnjQg$cL)RudTqU?FS2yD&K1}J`;sGG+ZEmXIDa%Fq($I)yxDrEG3t} zhBSFQ@;0A{56Zk$UN{=2%hH*0Znf%2QW2Fes$69A-ZW{mVRJHX8~L{DyEQYOZtsku zN0~WW)$sO*?{FySiKC0{b6AZlGMNJeG0dUY8iw$r$okrp%eS=0ryHcgk?N90B_`sNpilDb zYt=yAJy`8#1_NglTCkTh+qzEvC2Q~oqTDx83H6Gaw**`+fGK76Q__{!z0;`3)QUP3 za@3)sR1MABt@y?Y#+6}yoyb$4Uc}JyVvJujrPtefY*=z!yv8Hf!U6ruPs4ODg3dsd zqg}fh=Zx#08wPjxR6mV}ePp5Lzg&L)%l?Q^R`Al|Wob)9ImEO&W32T*vJb+uhnSRj z&PgKwHu3qSyu#{?RrX0gykG{il^T8Yi3sDV+$C)ZS_cx3^2NEL^I6JEuY~d3c+2?w zgEJ*%@szp$$S`BkhqX;Om(}GbBOuCp%X#*ZW|@Nd^wwd0e!6@2(J_bzUzwRFZOnw zISUZ`NebyveZR5HIL4N7R3lIqw52X;`mQ^Zs05qtMq&9>#^I?%gH8Y z)bxIGj&J4MuOD)9<*D~Pq=bq&G&S3jy zSljuv(y@;x3PyeOg=|+GgWO46aI5{W!B@c%?E#wpywff-t-+ibi(y;4#s8V^* zhRy0qJYpC^$~C(zC+{GU~Qmlb@c~QvoL{HjIs->uDjW5Dw5YlqfZHX1j zdic3EzG>jg$@!G{g(1ruo|g203+D27-=k;aFNt?Da2D}3%?S-BE^17ABsPJ@Dmf`k z_;kCA2|v6lOpC8Ij?-!(bs)>eV0t1tlTUr)N$Yf}1;NNGffJ~Zc;P(<<_*)|H)Yt&Y5_f+ zjl5ir@Hj0g?}2J`4=}J|8~NtUOIs<>o1So-CVa8U8OcMSZmlyhwiuHb0tLnW3IV2^ zIn6U?6X>hV`yxx#oW*<`6+B3A%37a@12|mr!@T^Ezg6nLuIE^2Y*ECyq9U?MN1rCI zPm$Riw%Dj+`!pQ9G0)+4N6Y1oNzP9_J^n)$y&I0bD(K}Ai671?#4g4X7)>rA=Dv3?2YI)cYU z+cUQ@q~SpS6X~~O<85e%Xm++VPn<^X3$p7KM5`mv4+l0VXuCOuE_C*9-I5Qa9hTA0 z8M2DB%Ii}f;`i;u1;!F7f*<$9OQ1l#~iqkV~GkSfX>Xqv`U}?f|7)SW+>SYnYk73`MN4 zU9TR-U6Lmf1Oee*&1{UZC*P5K{~FOKX@^@MgRR#%ibyrD1HLsgq-BJ6x!l|qij>|Y zJ8~Zehp@HP;EVfhX&^n9o`|9#)wN>0lOUp@X^agYP985H@NnO_en!66XT0*Sj^Zi9 z{5Pr)Mi<)EgKZT2X$xQ#5y z(!}lBL64mhb*NZ2f$r%>ki%UtDUVe{Ya}5>@?fy(0F^i}=FQ;M_lB1OArEp1{joQL z%Ru@x6c$6KZ3WgIOJ8u+`*#0dcEWCl3FWR3WTUmQi|uttc?GVf^^2egP{T6fpkF`x z-s?%pe&C|_)m>0B>|?}ah71y!(>NL7y?ltYVmme`)mX!Zo#rDou3ur5;v!h_V!!JD zq>okLTQD?0UVKX$;2q=cqLKY8mKgS-YAURLtI>2X z%V`#$XiEP?a*Z1ex^#ghkj8LEe3k}X$mwYH4=Xp{J{Z6h&6B$Mi1>s35@`3L?om%! zPLQ=yz24?T#M24C&Pe54iz38~gs#*+U9kolO|ezCr3-;G z#9AtXqjjW9aPNc?D7kyBPpGT$73lW{e@ZUqGn`-T6q6lH!nX*{|ns z)pi`bWG{|Z#-z~V%e!;q;>1VHR?mu7L;oW?NzmCh>y4I;P}+<`KffMvJ|g;u7MfD< zoda{5m+0YfD+2?Nc-h56v;^p}Tl%)`(<@$*h+$n_c`8;oG>%goenspd0&t3^|8E-Fb__Zrfiyun%S~K|VT5O;Y z>rH_ZH9rzXXpNiMi)OnYMI9}?c4}>Jy`eZVux4XBpJ#9X54o_j->7v^*64KC24tFl zorby5%Y$yKYL#IP(iZL53pVQ?tbx-O2POGieK~A0_mfN54Gpz;8`dAw4BGSzSd*3> z(>@m+ikR_=3fOQ9zt#n;au}ATkiO1Q=3xp6cKAgM;tRSqyM7Bo8Ad5LzgzFFLi=<2 zaDMP(W5jzQwh;+?uxXMv7)`W*ZFN!qZf{Gkn4Y3vSW3VmP94|e-ws^camL)?mra|t z3K}qj>F8utMe;)$Cg(oU#n}5lZJu15TX4^f>AKgu*NuJ=_uay?<-tE#MyLK?rFTB{ zE-SQ-^c;K>!1q5tiu>lA-m^UN$S){=P-RugXZcLlt00cHc6j_)1S;Jy*0gV=*IcmC zoK!Xi)B}De5eC4uvJu%zhVIi7BWkll%_K_Bh@o5pMGfX_-rv^xR>=7{>2>GZGe}B) zYh8NR({8q>N?caqXB34oO{4OmMuX|>QIW}1NJitnh*G1_i&qpd=wC*uTi5A4ok6ULz_1V|*KH zeRHsGxh0azz~cj@38=T9J|VP6lS+rdWqR$i?Xo`T%&I0DuuRx!s;upGFaoLGwHL|t zt{O`{gPq7(ITBM+ELRH?4}NXsJdlmZk*v!m#d9Q!uOAvCC)FiN`5PQ4-%@UGY>_k2 zZfQ6NPjhje$^?IJohlXU7N^5n1=QqDGtPap=^@X){bW9GmE_N|bFV0!!Ybm!Z`7v(4DNazgfB9@*)*WH5XH^ z*-z;is;$QZwoL;X#s?t=e{m=K490Fke+enqPy#D9!45H{-5)MEHbvPf%BQQW40E^!&0f3+yK zKmS;J-$Iu~&`nlvBHv?wqP7}kv|Tx(cTIy7o^|XC;Z9v$)E*>I)DRSLtBsA*O%xuR z@%%akRGP<$BC*3i8h_HU*&b0m`&NdaTKh{C(%K~KUS-%3zqDf`JnsSoo@Yt`QyL_~ z0X^q+;lCm-qf&8@W4pI~7@1n?0TMKy8h`|5{2s(IaJ)>ed@n1e0WE z1wn)KU=?`iqx>mH; zl3QWm%5M&@CTbS;=FQyC((H0kx_>jA3_9|cKScs4p*pts7!U>nCYjmbVw^rm;qp8Ka=SBGBf8=0d6D%je}Rb3UM3bh9T!230m-`UKKrV3w$JP1KS5(Xyv4H_dj zU8atN6La;xVh*X@LwF8P@)%|tkA^=cl00>O-!ujXo_)K=>D?D%!DWem`^G&?|B|4) z4HW_r`y(0PV(eew-q;;E{TTGyTxW=z?``74CXvAkmD2tTirm*k^Hf=u#Filq@z$}I zee!|=`dtU;^Y)1QsJa46pm=yXR_7g#<}<0XLGrM_y)bWW&L75LyNHkMQIUi<)lbNe zd|{DfdZyAlFLKoEeO|99B^UdIHldj5k>CE){AN!(Sf$^_-?7K;mx3d^b9O=8YdtNZ zd|Hkm>S`Gi4aVm^Y@b&?_0!OrTbis=yH0P|_}QUOy|q!Z`(f;BB+!+9KN}r(20=P? z+^4yL4hr6=!^I%JoGp$8^_j|P0poAJ`nxPkXDC^yxP6RkbACeqxxmt&Yu_3=Jp9AP z<`6GOrKPr5D2JmP=&OX<;){C)C5G`?20825ntdk2RO6}ri`9+PuZ$l!GO%^o2?*C2 zua@)KVb|OGO9H3Pl%jKMY@a1qnRRu*asEx6)t2~xITNN!&g*%GTMr+^OQzkG%l85d zja16Z7nfFcTrI+CyWaHYMRcYVGyl#)IL7S)msTq4G%_H0+li~dK}L!_J}$azafW9CP!CC?-;<@Y#0S1NTLbzzx*(s<_V=AOCD z^p3Wh*n@1l%tZ4I=N67=9uQQf_x73J#_nn$i#ul6T!l`v9R1It>5R!ANU@aTHW^MB zU}jIUe(OWboR9#!mW%rUE9*UZ)k>a3|HFHD$NmZH?Mq@)k)6Al)VuBU#uw<>lvi+s z-($wth8j!T`A;_AC2qZ|GzHfs7&J{EoFRSO+O+DE%Zu>=?9}};*zL1(Sq~p(K{Nfl z_bEe*^~x_kwEh{CUx^a=#&79gNAtubJkYlEw`g-YDdO3n(MOu)ErYUpiR`4PQhl~s zprmDHIOPiKBY79x9RY%zzweJe)}^j?<1|}U=8l(2?S>DJIOaCbA{W?=^31`7NtH7n}>Es}f%g;13c@#;p-&-612LR;p z$4Jc(KU_8y<}`=4ESWGyMd|77g*xW@+7^mQ2BicmwA;N=bn-oRS@VRr0dT5)Ga<(4 z-qfv-`GLTSrJ<+2CiS=7IqZbpfUTVAgNzu2?w=~XU?(Z@&h;O5*n^D;t^RXGFkYsT z@H+DLg1ZRXDw`@RZ>40)|E9~g!*8;BghC727WTtW}d^Lp3*Xc;nUZ?H4yhIQG zF3Rf`xbJGH4(a(`1@iYAh)Fl49b2SL?=OfwP*jcG&KH(H-A++r@3x5GZmQHB_*d{B z*>gBk2B>a1h!T_Bi5uu!VxJ*6t=POk{qk9`iFEA?ST9afyWRg@{aK^K>%4@UL5guK z41@-%RC}KLv{u!n2&)V9nOFv^w47%|5uRhEyr+Z8(EvA%`h0?KT4q6`t=u2OKQ{&h zG_P=v44jJ${ww?U?52wMFW9j6#fB4~cTZK)?*jBG2BT(?o0J| z-N%PxH{@IePUo{A=A^T5Fh%^GjMx^k8;utL@C72tM+|w`8v49Qp4JkdWF4T>*>ZJu zB2h~3{MQamxpvS}9L7)LID8NC>0h?NIsFBrlS>3Svo+jq9XwWJ{C2>lY-=WMx;y38 zGk1q?u5n$ag~2^@zxrVRSn@~aDJgi&im|b94{R@;{)`?iuCmq&Jqwcmp4I^=NGGfO zBmYpu&L&p_{6kCPX_}dwJ+p>t$rUG4_*Q*rBIr$c4?Z2~AB+nt59e)6Q6E3Koh-+{ zFK77mp!U-048xwk(VW@R;MPim=OEmCIP}q-`qtwop;w`- z>KFy9!S>d68t)s?B(-3@2BU+T`C2{+n~^xNaBN8h7Ux6ceSJk|o`elTRAb}a_fALn z7=`yd1Wr0!g(o?@iS_cYfYU2xRnwC!n;-W4ymtkTOLzf}+>mnj7fUjjl=H9RO{4Sj z=z7M5woux4*1z$@a14*)F%zn0vpFb-#AR>{wF^GU=Nbpnevu<9`(mq8Vks z>S#9emmIBn%EidB6vly>PoUiAS3yM}F}g~sIl7;H(EcRnKs2f|^nO*M{-l>lsVRlx z06lckRkm-V$(Jofpij6soNd7P%d3fb=>DRTYcNnl zqix>Tz4`u+mxSe|_c#6zy)1jWqi;HvN_uh{_nPH}FqlpA`e{r&faZ}ddFI(X1=P0x z;NE{^+ckz}Me4NnoS0Mj$bFgjw7KI)V^726kRWbk+0PE}+0~xDWHsxL3xo?J-?!g1 z(o6St35tYpb&H(osx~f!FQ0j-nNdNgu8NFeU&Yb_L-7UrWxt5zpy^L?!ncp(8n+MmYyuM_I5N-U)?&&ieYa(jj*8O?J3$q zw|36%QZ%3{Rb-?GJ{sMi?0A_-PesCzL6=K;l?C-)9{bCM&I3UjlQocYsUFMrfwM?7 zB2uECe>9_UhfYF?AWZzv$;q*s@jJybDpk2#{-gQs zMsD?6_~KOveURPia&!dmGCut^ZY=6{h|OW2`M%;bU2#zlfA&MTcVoZnk5q#|5hE7O z#HTOfFVR8q{%*W%T-vm}L;YQ!q`LFerXm(`Is@nDn})HV2Uc6)fZg(v=ycBE0HC&H zz&FRoB3!ayY6NY>Uh%W$Vtz(BOH6uf!w)FOx6Hr`6Hn1?p*zSi64$8LvZ{bl!f{8!^5 z_=}W(n^_eWrkTpYK9f8j@X#xzg>LVa0-Y;W4IRG(BP2oN1BvF?*_v5k2{3u49Y6N1 zSL``s&x6eKpFsms!wT%G{rxM!3R~_ewFD9Y^A0T@`cz7ChV<9qv=scBtuTU!I!Oq> zJ2TV&j(NBtGzflS=T}R8x=_PVC({?=-PkPOoU5pe8|Wpiro+serV9J#F>D=9B|G4a zA>l7e+<@JF3uW}glC^-3?7?HO`Oin@e5XB5hMi1i8)J$MRrZ3XrtsoNUO*FX!zVRI$@Dnr_+jy z?wp#lnc0x%BlZP~ya|80A5Pi<=RPqXwT^xcO1+8XWnuJXv@opwI+ZOQf^Sy^5k zp_i$IVLSH(P=W&LSu9LX&~+MKkTS4F7Q`nqOYXxZQ*&0M4U)HRWJK1lD%Uu1Oc(2l zsblVm=Rk|Tenz;~*$E~t`&WaDH`I}~gRcDMcFO|qYw8Dp9%Mm+fzCI~`>Io28|}vZ zZ|9j5fM9g|)r=03QGxRhW_GXF6{|^g)?%}Rg&Xaz30KsZq2s~&v_2=~VNF&h38b-x zwvG%Wwb8bx0cZR4vmC1@C8{A$Evv*ghb^3%611dr*5?;MR|)t3BcnghZ7nZyZ!v;H zG$&3v$vDxeaYltmKcD4h`ww;(J1|?&jPoL?F?1?GL&UqfbPp_vwuJyWO*__@lE2St zK=4aX36aSiZvW@YMNUl>`wI7m_*!#iWXXPRX$jcEEy(Y846=6<*WEs94dx$LLX-L5 zVApIGDD`Ef;h0hvEy+sau9}s@CVzq7W)XrLd}&*L`>^b;NgQx*^5E->^ywB!MbMdh zrusyZY*MqE#_Fz(Aw}(rsYa;m6L-k_pmdk)#Xeut{95BWmI_p3qpakth`EB3F+CXog4|#g2|hqMU66UtV-uM^Bse1qf5v0>rUnrpvxo zSSyFFKw>NvO3xE(x$6O%Wz)4KPDrRzRwiE+Ok@SeOf8#Iw^}3qGsmhoa(D<@@gG@C znBM#aYnvxiA&)32CmN?WY72V8rHlcRM{&~u7E|qv+gZ7D23XhR|-&eUW zviPbf@0BdA2RZccFxuPcYdpFyE=*;arVEciF^w z`GX_wHLaR6n@_Ey94868G7?aO<>5?AQTc7-eU3zzz|C<7IQ(~cgEf3+QYlSA;I>t1 zdEiAu61G2ThK=dE+*&)$MrYMV8NHy{&Uj(e#PGqpKg27P-$ADOJxZr{wFi0T z(~H1GyluJSatlmYpn{7UuVt}y9>lS@FWx4wF}}Z+W+B*Xn!v2f``|Cf zyRk9*7KFz&U~SXD*eBdyq1`n3@nU8Y zx@(@K+^9)n)sm_(bq)H0rn#5Is~WQ1qTwxmRDF|%jJ!vh#AE;GP)%VY`!k~h_V>v9 zwA_k6uLVvFh2$gZV6i`tM6rl@@Hje^HLG{Tlm3au&xH5SXM39&P93aTxAPqk2AH8t zI;+n*rNYzyk^PeP%A~ax-%;S=+a>kGYfPVCvR2u+W*NR&_h)=n3+?dqsgU`#6NgYy z;6D!WFTqToDdtL)4s*?pp-%jnYzk_=u@@>m92L^8stbh2G#}hz7=Dmkk}^DdHnOsE zO}`M#pwlCkreC+J0bx)$5N)qi-yO?ekwirzGp;gCCa0Kh=iJDc=@FCZx!eS@9%A4-p(UIk3Y zmt5&K&3!rNj;bX(n+s6$bx9i5?#(0AC$|HC1njq@)~)?VMzh1D8`nb$0WS!QTj2{l zpr>CzOaFc;Ydvx_S(RQ;sj84>AirBK3}xz?$+MIQwL~38_JpR074xz6*VtBR+3wF* zwdkb)*u9Bkve!!uk+tQCv;xc;X^$T7NU;HX9aQ>FOm2%8`H;O2UbwL(hRxTAiDB~g z^Ed38cWWuS)Teahci@q*(qOyVMZhYr0!fIT3EXubEWS%9j4gfxjp>t^2R+5h>5`J! zmh&1wP5|vOg%tZY_UG}ED{pSGdPTU1oMmD&Hb0>C&O_Xm*J~Fg+2m**NQxE%OU|0l z+%Nr?NZomxFajN5^(Wr`N+*c&EC#z&eGOZUWWq%S?+PxpYR#2j@L=x@QFMfgBAD@w zxrGY|ZJc}-8xUINjW{?a_JyefKN@NA-A^IgIa=P5{Wb~Rx4Z?lQ1kY!(7B2O zAEpQiUy_^$f=b&35y3gDHG}<*7k(OQZdI~*{7&qyu1*W}v_rV-rPDQ|9<}1?TVGAy zAEcPOhP}uQ080pJGH(l;luru@df9U7()5kCV_6_9)$jWUIBx7OWjU>gsJn+h=$6&F}lx6J^`lBw+6D z&T+d73B0@7nPJN~eQNW>u&s4E8A1GVXY4YS#6hE7)DiQ`HIw@(lfK>{L=eNqY{s5+ z+MZi?(VbluloLX(v&LFC>i&BBKcdB*J{Noxje*L&X_$Nlub+t+6-*%nUsqqh=s5Z+ zJ03O=LH=-ez}Ro;VJ8te0n6$&TXt=+Khx!&CkCPJxQoW<u$AxY2Z_UmAYb#^QIL9M&A-#LQN-3W<|NeHBnzeTHqW2Kh$%gh9=8rl3ls z{LpS3#P)5~SWclH@M~4G7(s)stqk9zf;|N%c!R1J<}S=4ou-ve)byKE8J+aq=;mc3 zsqy@M{XMpYtZp9iTHaN`s1TRA2JaN2f*$R)!caLvD8iHq<|B7ug zow%Xg*h4=RQK;^XATc`zELRYraFy#qgCu#H=kl zmi36hf>npq0u(vn(>8wdKPTtaX#dtejkBlJbnt+jTG?PFSxa)S2x- zC>)b}@6o^|Z$=xXN9$W!15QNX=XX|zVk`qREG!W)8W*Mz&fLY*)9?^s(}>+3f|x#e zh;F5d_U>Xc1i855rPMgdYIgP>oB3PA1qdh(TI)@vyayc;(3|vzbHS(B#ZbmnQ3mgy0jqB^%ko8PiMwupm+Rs%83Q(QYF|BhJ%bibQO6 zY#2YOCY|$b+)Q;!5=b}cE33Dfw*0$^m4ClDEG7K8{UN#SXjiX*#pB<HISIye0LB{@1Qfr|=4DUm*|x z?80?%;r%({C)VS&qR;|~DtpgXQWGC)GBEH!CVbtH6i11t9hl;G4uQ<) z9M^7$)Jvt6MPBhSGJ@3jhbRVzM&$ksaT@bXPCccqZam-d8Cy9c1MH74i)wXZCI30W z;yi;_y?|11l4Dw4#3`_bAec)TT--9*IFEY5Ql7m5$R5@BF8bsMms-dxZ=*R`k+-y5 zELyJBZWhk^AKBgDz?3lNz?vZPzWca~4|wMdxt9^H36ST?>mSLY$_sPkPeuaYdry>R z8v)u0qxo;?r=7EmNz_HDm9rQhA$i82(wc)J>{MzW*FUE(Ac0l$kG=)))G_W35$TxI zN;UWV&)cmAy0r->ir&}BepFKWcn;jW2?F^bOBjkzLm7f4(zIBdOgW7*-w*Lb7=QFp z58B)dih^p-ol@#(_EUwOC^E%JPYzWJf_O)-_L&hmrvY{45WMA!vwpXKlb$sjU*=vA z4?j@HsHTH&^S@&B@Lq<7nP{JMW@MQNUhYO7DK?O+gJ^WSeiHmhpXa|3j~CS><8aNC zGM;QpK)oSd&K{?_wJ1S#^P!7L){&#;dkF1lxGX9BiY zau#ow_yx{W#(3JB;_wCyI{RqEp!#5o7;7demPf}yI(Umk|v#=Wv72(iX=NiX_UVkluyl9qYR}F zt!Y98M0_WXMLrH=UAt0xIEN2VdhAB8BIhbB4r1J?R#-3Cio53e_q!_d7{1IEpDbdR zhAT8M6V$1(9q||&^=<^L>{{C0nj@x+UCwTCPUYgj%+17!eb>+)Z#&vd(_Bx1DsyR+ znL@&9e|pjUj*(SRi%F~0o>+j8KJC8^b0IT7pgc*!KH4Tq#QkR4YgbQN{UebO&ZFCY zWm{eKiP!}ndgUD;k3O+J^a-aiY{%)=&^S2(y+NzR-fsT2HtZ(}LqTx4vf8lg0PN`2 zCc&)4d=T5Pk7nI!of1EMXsuec4FQk_ZW5kUosw-^JVo_J?%-9;(bz4U-AfX&Hbapc zqD4fuk;?lDrV$WgifzBYKNV%QtpPZ$5}&T!g7gc&4`jmxNr0LnOXn$JrxKX=m>mUu zquZU0{<6Z9_-t#pEcytZ+@5_D`&O>A#-+T{$+`9FU)hu@ zbAl$<>jLL!Vux92RKmNq!xfR_hfT>SHLQPzY(y#)AKDwxuoHp~yZk`fY3)|0JV`7V zeQPW0QH;@l0ze1AO3ddiyUX3ZEJxoUJT9!RcY-{`dfi8v%>8W^vvS9JO)uGMma*xU zRwPo(kNTZgHSBHvyZ?SqL)o18neEFiQe=~L{0f=%8(&Y#V1mtj4v0)=uD^GUc3utV z@TVm1$bQt}HwPbyHiT852bxm23z!&xYY*t~6JA3KaUd;+dW^4Rhsi+F^2@!`wZp2t zl?iSI)}~$TGZM~72`Y6RZ+l1a-}lNE>JHX6YC}hb9Sr^T)OA?dWJ*5o96GVIN0DsX z>4#w?)ZdnrZ&~bPZ7qmF7^yoJO?8&CYDYi281!R6x%1fJV^8BJg4jMxz53iw$!Msq zw&t;;zk;vcG(oFkd22@41MB`s_q)0KmC29ACHS`F-v-Ngq0M}JgEdaEdZikwuh!7q zH6~wKgRBh32|9vRzx=57SZlrri=a|Ikke2Qm-O?L5V*5RNUhU;} zUE8(qeV_ZB^PwonRQQjKF%cIa&HxTXEitlduyluN|7%;qcHDKBtv9>8WKR=&I zo_%R^TCt$6V!*|&6Ir8e5%^Kk@5xyHBuZ(x!N+Zrfgw|gvIU0htBu*!=X$y801Fq7 z)?S?sCq!o-xWN4D$QopJh;79B@vV3}!)h(Q=!JjS9plB;IQrH4Hp{I=lXU{rI~7*? z_p)?k>2*zp4m7Q%URX>r=ekU(VSBiwdsJ_2-}4K1%Gs`W$PdzUvqQMF;4E=e+qdv{ z$lixWG@%EyQAwMW71?cuqz2;{vI_P_+t(GeuI81}F%!e%6?|)66@a7_L$`hS0c;?{ z>ezd)$KoFG9=_LPqS>ngGwXm|QccEq>ADr029sOSeX7rVG`C`SS|I<}CEN13kUXo$ zvUMx~YQk_CyX)KY%~Mag;$<*d>_~v_>(URek=hdY5ZokZHHp9qY*4 z=`WgjI$`oL31u+>`iLVRk>rDIt3f2mdi2fDQlv%*ZV8f#6h1_vBNaY$mz$V&eB_n> zc#Db59W@C+38YGvNc2x9%T%CB2uyyRoQ$LzFaMw=POME~jxEUws`m<9Y{VMZxVG#i zs{M3iut`-nCKz%v5r{Ds9eT}ixVI8Y-9sx2gs1XZa5BOAk`Sdx4 z?afAS9Xo!<;$zi9lc-h;k`W^KA6eG$l~=TC8Ald&?;MH`$JKVsbf;g0ALWcsUxOC* z3@I|c$k+x`Gm~>k_qdoF*mQY0Dd~?DX}Xyd?Yd5NO_vFp-t6KDs}Kgb2tLK1^g64> z+1Xgr2QE)-uB)%}BrF`tN}kSoK0doLq_%qPRclbD<4S8YTu84A*^MHA@c27{O)&6@^8!$9Ni6tY$j$5A%a<_ z)|*<})8@~{a_h0(o0-pqkBw_^!$W`Kl>J4fj$y{*Av{vGJx(XdMfBLKtECf-i9;)E zpZT==@9Vzw&^%`P0+rcDOzqk}O>~qPd!V=A2?$EctNiU%_?9lNJuy0LX(;B_1#hbd zxc_V6WgO1%V9aNAzKvw@!qg&jO&vYGZL?S$eqS0{x71s*lsFBOv2=la$hU2wAhu~FNnydL0laufBRf5X-54=B{ zq`|pyZ4zhbshf`t#JA{W*yk8{_s?~z5vzlUOSsZw_CX6VhZ8wDKx@d-@>8W_4)3d@ zD53;x{N(dAn*S9fA0Zd*w|fqbyZnOvZb#hAoR!#sz=rb@M4X{y8xvN{q9 zX%&X+j=S@(d4Zum*~?%3o>hkX*(%PiSl^nFklxqnt4h;Uu)^1Zw9^YrNVJ(z&g$Op ze$@DfyR~l?O<{osQ_1X4D@1-1bwqZ;$)m_r)|B8&Z@Z*#wmJJ={Sa&ctQ((}yaU)J z!O3vQgP3ZP>^N>>mL;Z=ZnS;U2Bki1G~ANd8qqSkuP%&`!CkKzG_15pbpq~= z3t0l5VTTbZB$9R@L#^t<_tEEf?m``??Bv-DQJu`ZtgoYr^jr4h0Txv6+;`;=?5m`t z5NBw3xubjyM&UbkxuKC#t(uuTpUS<{dt?A)>51UFA-PYJi z=cFP=Z@{mIl_se?0%La1lj`|?#3W5up5}0<*ms}p9?ev4$mr|Od(Y>bS$rpQo5Fb~ zUfuZr0THU%HBb28xchRM$*lil!>2RJ&Z;|QN%v=F zl~1=oDz3}yhX)xL??)E_AmPF!F;JJa%bbFQy?b?dV+jmzw!~4b95$8D&%w0UR7hh# zd)89ko#`#rqT1>puc}|O^I?kZkEPe@>jMLSPy9mA$fJclP|(()7TN<;@-|hT1jD+Q zaP8D3YH#oqLUyBwEzDcZ^6yMxL8TS%l)UJ*@weeY4%*LQh8{*#eHk7eR9V+#1&wAq>}FLp?S&i4AJynSN!Zp-sD! zJocuyXkqC1(mUvx?~37|P{prWEbv>uo3~60bvcg%SQ=GzU2ucKPALfan(M|GEeI4C zs*^TtUXuSA4qn#|0b=tj4r$J}cDFk@F)1D_Kc=Cy&{DjUbz0n)N#(o$2Dk*YWWGI` z>+^0Nc?ET7_+)%u8%y%JUpG-0Ydk{D-58=Svo&w-%q;a#As>J=+-w+cd`$l%Gro}m zbPU(j03ebbvWee>z8VuEt5?9BOW1Ct==iYkbP7 zZF4EndD=VstyaAK-{#N{%?ymAds27(&txl7+(;u=(@Y+0KBYn^z#lU=IKbG z$@1H8{xeiLy%K#am9CQq8PRBE%5d?411a4TbVKWy!f*n_)82pP^6cMuPsdYq4D;0H zY<9aOLTaLBo?WbSnO5Esd)+=}wxH=nT2Ai!$K6pGA?e3I1v!z*B`2R_1jHgorzdah z)`tLQCh9oft;#hN^{$~ZJMUf(i>aj41!A4(qXYBOG~>J#gOt!!_NB~mkX>rQ(oo+v zHtKZh)gX?b$uB6cfqm)r!1G|(lxV!}L=NnmmCod4Ztv>d;6luj8c7EZ_v6EU8p$XX zL4#~=0kvfxre6u682OcZCoORaF4eOeHi4aO;Hhr_hDH4FUZ*SUXhX{=AbX;sa>UC57 z%P-4_JEh zjqHfSPJfZGX*r*bni3xw@R|@MRk9m9h!_mzsC^XolpJhpLHF`Lq4awzJ-k9!BF);U zmlP{m>SQ2)WQ1m5xBxL(pv7Cwkln41Rf=XfQ;|97D3+>Gtba8~Rx3APclvUzy75{+ z>iiQ2M1iL?5I$|=gXCCW%|PK*YdVpnpmdtgdCsFTM$Wd|jjJALfG5W~vqR48Zn{jP zCcw)Q0$3&jTAk2#Dclv%^PlAm+4Vj5w`L!sY2-_4H%odPpBjC347et6+$zRgl+O~< z6rx@a6q>#j2igbfG}dnwUeE+Kbbus{MbfukYW?Evy)v9bYb7QZ<@F=B7_uaibG5HH z58nd+O``1S;&o)gzYWg(N7l0NY=n^ut?nRJ;TjyAp@R^#yi=EL8!%rmHF8sn)UT7j zs*Zgv7$MHxp{_o#olZ%tfJA~XlqQdv$qzVS*^Ej`9c2?Hq z>UnKfX(>H9*OYsUyPrnk&o>-WT=)_d5I z2tQ7^25!OC0#?!Q%VmNc2@P+WM6Nab_~FGBMa$U#mLkN}kZh~IY_dpQDxnIH%{Nf} zV2Vp8(_;#d&KYGvDFLK_1F$3AO(T)Ay)nP)@YUF1FtFXwz`)gfVYjiyJ2n&H8du4V zVbu-ST4(x6<7wLp5*c*HH`{m%IMmD}N4pGKL5J6E7-E@K1G`vZP@S^4`iWL%%Jcw}g1;G{f{H<4fOB9C_l zZ-%aI@=#Ec9x~?>T_ZJYQx zb@MFP!B~YU@2F*_)LYwksq>I98ZoBOT|ZWOWxAH4Df<&0*J_Aa4d$XX)`Cms^L`D$ z7f*{Lg_*wr8KJE8H)0jAk++i@0TVjdjmCqiPKV(z2DR0=IlX>Q2G~vO?fBd4Bvatw z+hqA%(e01%O<+usm%(!Q8! zot1}alj&zO<50fzUMAj;mXVu7JjIemrH;B*S{!$}@N|+ViDL<22(P&1WYrMxzhSO0 zYa6|Kn}2s*;z6@RJ70IKewFf;9J`5(G+jrp!>X%EU#;#cs+(XwqJht`vC6+uov8Wj zzsii0j4O{+P+nuwb&l>`bbtPLVW3xiyYHlVg!k8WFnA1XE^Nkob|wY_Utb6DSnw! zgFd`-x&S1N!BuIZgbynYZ6t=c$F80rURGzAVo#@&y}8~x9V=|2cfB;666pWD;SdY{ zb4%-V#gZD&oQ1)#dg%g$c^S&wANb4>^D7xkZ5j!66=vtMdkNO({iNVOh^{v#*)11kJSw$47LoaF!Lrk0SVE|ZbdUU zP;6|60fM>#kHWFcsN?AKUD{D9$lZ7i@o)ye5t*k>a-0+jQr6^uDMxYwhDD(QLOdMy zE&53<1}z4}kjjX31&uD2SDhnK)i4hdN+320uCT^RHvyR7sZCh3zBWwY?YRBN!j-+> z*(E^K+=-*rCZWfrYr@5|wsM@9o4z@F%*pug>a3t35mmAPVo0ze(CW1f_T4kxOcgb_ z!)C|40!7(T8dB?MFIFELKX~K@w)%UcvJUod&r`)Q28s)-7)_k|no5N)D`ghufeOC& z_+&VLuR$1@#`OszT2v~7+duX+=%9EQW}1968~I3Kp0rXI?ZGQ4MFJY|)X|tX&!_MP zlF{XzG@NK92@ss*sj>eb54<5>NjT&y0FuFac__HOhc$qxH|lmC=U+r;UF{If-}fU8 zTSgK{aaIhu5y_9XVrED3jX!Fp`$iPEXIac2SZ(3!iY??hjH*`NI_&p&=fpVJp&mus zAidCVRW72W$ko&PG`s{ZpI`_|AFnouZ%ucsyBVCQNwFn?v>>Y%kq5>XB!eFN>Ct1% z?A+d%BL~Omb~-=i_3t$~`?W8F!-G<^fBLL`3T{>p4m>!}Cg(k^_O58EEBYl3@B_!+ zXtADG;|p+)N&SmjSmlzUJwFCny`S*^jebL0QkJT~TMQ4LF$ZXa;%_V>t0p@{at zwi_ zcidRxbzHbzs#TBsUZtEI@6U2^WtaAR?5~Cn{9O-oH9z&72b;yKS!jm4YHQ^#_{{?8 zZ#dV4?R0P)vH6Ot3J{Hk_})&ImIxCw;}6OBFq7f#_hX@EgQ!rl-;~m~OPu{aMRoLu z=M(acn-dy6y%#}tU}R2d^c+sP!4mgsZFdhyd!r|z{nS2GFJ9QtAYwC_UZyLY9hFLz z57X!33^l%ni~nX;5n)Nn6SQxJuG7w{5B zqId&8elMMW%k2{E!j>=geF60$uKm>U%gY&e{)xoNLc+n+#8gvL8M68MQAIDxjEKP~ zq=d-xmF+CCdcA_y8A-^=96Be9^{k2*8*u&!9*u44G>p~$u{YVR7gUrF)o%1I^S&8u zNoj`jtb-XfaYfyqYk<^_y0Z=!7`VrbaYb9YChYpJTHlZ_@ix+w zL8nMZ%3*0hL#cHURas+}>k}I0M+3K<7S6)~JCDLR*c)Ry`dJyV(3XzQ7Zz&Q)m!|7 z_RJ(B={vHWpLaoBom+DX{60cTycysVCuAE68C1a3VzAAJU0z-8TzsX515ejI^sWo{ zW53*9QmZo z;{J`p44h(p`7yq%BiY+8V-?Bx`TGunVsgrSSmVpkmU#0`#dW^(+x5V|^b=A2FRh$i z3k;Vs6PlARb|5^JWrYh8KtH1FuHQ2VnS=3vWZz%ixw5UMF*n`g;HVc9#5BK6?0)0^ zj@bn8oo%g+;;%Cvwk5)pRN7c=Fa;=U=;n9*=jXSBV4D(ob$|xaIY`C*6K(hO^z!v> zfY1Jlh3Bj7)x>z8Smfw;=|)Sj=$K--Q!=U~f@qC7>2B=s*+pT&n z)Iy~z?S)fpvxHakLK7m2P3yY7(v*9&pkQF0nH$PoN9;3q5)t?`I&9F|+W^yA;*?#@ zN9=CvzPZ$4{jqh=zs;O(BgYN#5uAlYB>9tzi|#VM5$g5*7Xle?EEX)-1YRCcIl`+RPPk&JbEGfcVd0w`6O?f+Mwq>T1TggisAQl z@4VodaQ(wx51(7qQ@fRhFKmQGLLt&SdNfaL3I=y+WO(S=R*^J)hW`z2o2bkkBT3 zYN;h=X!m#Pb9xkp+2(QW_|B)!J1QEuJLBbf{jBmRMWWC2r;L^u0f{74Om8Coc=#2? z?lCM>2}A&XG|D4QYlvwx#i0oQSA?%#{)cME-%u8hJd1Su27kkc{%*=^u4}pyw+*mU zs8DyGlKpR1zO-GHj;%L{Z%_(|4`Kl^1Lwc^@)9034#~24U!tRI5Ur&mNJWqJUMLHqVdyG#j$7JwJ zYLT_KwB3V8~Bo;5JJcnxQBE$gO%BE+ajLJk#bWs7b33KD*|( zx$WCaP$nZeyj6sUU`J1O2ULm=k=9>*%e1D%i=WIX1SQw$cH5L-FxI3D{m3U`y`Hau z+mxtJkrKGL5vBvueEC8AS|gRWwg$01OuBiVar7j*US+P74+Fc1LX*&YUmgqhVkpzk zXDCzcDlkS2Xd7NHHc#PXMMR%1>MNp-XHtt?k^;6wgyt*AGb83A_pRP>U3YqG+X=9a>Kv_oSq+X z!NO5ySFX@qqj=zPu(j~#w=D&o^wKtx#o2x@23@#pZesR7Ct)Z^l=FwoKJ z^ayA3JSe8}ov!wJk}a~vM5*54@kULmWb$9w=uqT6J(Z|PcLgP9{iGUMF0E}F8(;dM zi#LPU1x6RFFzb`Aiv&S|1WoqD^jzCT$DfO4rrPILY|-|fz2sI@#F1?y%)f{;ePw9l z!@8gIspGpkNXzR@Xa}i9y+VdUR=ebvyp&bR|C|nlx1tZIle~|C1GEP4^GG`E%{=>b zD2?&I1Y_20KC>~Q)#Uaq$m!=K|7j=4QN_X3Mn`no_BC%BD$gXE^5cYrm5rsZzrUE+ zqjz6RN#<-)6n#l^D$CnYGMIv^sj5!%-MV(eH0tzv-lpjj#5!`b(}81&(G%C={PHE& zXt2n82L}Y>lx0KX^w}x;n$A^F=&SGWxc`JePnG6BCG~}hZmPM}DeLBz2t%>*1R)ws zH`-#WB5d^BabqGHEjVvv(w(byk@BWvY_XR&rRXmaL_BOLQ~xt{E+xUxFmpN(8JR=d zaUNCIVRalxeGObHFKJL#KGmUp+CqfC{|78pZk!#NJ3tfjR(IUqhD)?*<$B4 z>4gRFYr8XdB`ge}UvMrNZ)GMX_o`>=$bcSwdn;K`(29n5eDlnAF?}@ty{(ft<*KC+ zmLVGk|D@2|D2%QxqDSY+m%R8~npZc_1a{HNmSIZM^I_E$$&zQht6=*%7p;(;qKfN9mSP3RJ$bFrI~(bQ*_L`dXiRn`M<{DPMf5Z`Y5e%HupDy9;vEg@qS) zo3+p=7{eMJBO%uC|H!VT@$a_Rl*$n=8bdnuvFDX*W`Ei`NU7-qdoTX_@EB z(b`GkUvPnPN$ih&D?kRx`fqh2YVzpm%9ES={w5c)TFOP?@n$pT&{ue)1c1)3Oe zp^a>cH21g3ew+Ssdg%9LK9aext_~BEjn$qIR#Ex6i1$8J(NH^tD_F;Us6g_6@1UxV zUFVc$W|Fs?ZWAf_oIh1Fa{~O3qsDvC(u2R-;{&Ajnns>G{F;JFIRE`XE83Rn#C(-A zV%{0CI#|j-W2T?Cht2!ex|?9Jl(OZdSYR=S_gS~9IdTAduFNHBxKO4V7-G7V0W%El>|zkW~P5SkDnOpKD^>!D;^K_c8;Fk3~V~l+1Vz1^9zLO z+%|x%1~4I!r~iWT3$c2+zetyQkvUX9&Q)!>*0&z%hmIxYho z2|p>b4v=m)|Kr{(Kf~6rfn+}yMM*u-M2>v-w|hljm~(A$W7Cu-(v!88$9Kb(?&btd zH7<9RW3SLRE%6w5dHKovoWL07Y(5hBPYM1JpAA~{XgC>R1|Fy>>(tm;w;jx)MmBS< zz6#|wPS!+j);@xOS?;}vSiCzmJ7@dA`+LJ>O|>enspK=zwkY>O~ig z%uMGK99Skz@B-f_8nLxjy0Ex*Uj9-=5$U6tGe;! zX_8z#E*Z$>j(E+y#M*1VIkalN6=%w3ple0wvo9iCUsMn8`WTiL4Sg?K6pN&OXMxc| zC2G^y{0^8q+6-FA7Om?R?_}a)2ZmYEk7q8F$Nq{>u)nz?pu(D}swQ(@W3ut@p>7m; zb3(!LfmHlTkQAPc|NT1Ss(l00Tp4kDJTbEzYrb=H4zQ9-xEh=x$U&S+E_aR(!EoSc zK6Ye(>{z8AM%V=t zZoTY$x>>Z!?JfORZCtyL6#NugJ-a7f+$@FlQJWOWg1{|S2ciMOy`b>!W-y&=F{NwT zyX`yh7$25%tZQkd#3nsf{Xeou`G)?)-|lNm@ewy@ARqAs-skr|_0msW-56%%>KJz0rJ>#6oVlBti@43HNF_q;U zfL0xqFpx2p~rcZsE@N6Ze%(vodlxr6|uTU zwUY`yfzT+>vTsElP`8x>u2hQ`#l@~r$LvE{2bxybtBYXh!bt?CyBvM*p=Cj|zL9ct zfb_GU%~yWDp~332-n*iPpPJoUE4@+a3)h*)_kH;I<)rNX%~&Ycj1p)__qW`g-hVlrc84UaPIs}gr{{>)RZ$oj$RQ^MCICZRS|P# za^$c?ppIEvs0#iNpFh8qU~B;eLoUpWh)%>?pcLcnjt2DouByEWMLM8$R&7%96z&;0 zp#(m14m6$MB8R#+jx3u8 zi_3`t+id;=QYXO80zb{Pm%|1!+iBBU)1&9UCW=_kP+@bqSCL1)6-HeY=V>{3)@$`e z%9|4l0b?A;{XWw(=ed{{pT?MVjbK$=Zomk4wenNo@8t2bYRJar1?O4kMXSDZ52L17 z8)a0q$Am({Do4fb=r_lh6^Cz2(8ZyanYi@J=KiS643+S#mCVHnIcgTz^hHPGPmcRo zTw}|0+xQ_;eB|=HLY|ics-JeOP0iN;yb&>ajy(t?sXSM~Jq2#Ww1Rp6-Y$ArX1rU{ zHT^?59hIov3l4#)Ghm(L$3^?H^R`nHlMK|E(yBax$y6>wG*6{sd{&e8u8d7hrX{tPrm)ok%r1t`8Qp&qrKI>>O=hwI605? zw!&t#QK}a$ewI*468iU_W3!be(7=aq2tLn>FH(YFv4%)v3>Eh!3GoLHE9`z)H$csD zrIT!_YJ&fo{W?W0z{*6E9zdu<9bZRr^e?ifAbNL9`Qkd5R193ei#(oaq>snGujQJs z$59vJW%Kl-mW^e5+@tX<^-ZTRxa4vi?1P(uNL_u|`xb&-hPXv5}eqwn55< zRmb!G@4b5i+#AXPZ-&YpHROzYS3eued}q>&*kYd2a5*7E9!d`s-I`7oApMi{(nsgtVcJ%&A6LuO|_{NNsC&0hkH!c5P)0duE zs<_T$PzGIO?kJ zKIvn*S4-w+)b$Hq>dg3K=lpZGccPoDcJk7u0&;Qh1mIoH-w$tISQsxw&1>v!#G~U5 z;v6JLidBlGlFL~vB**y(7>4;jcidT3OnqklYBlGl0}x3(T8T9OVrbg|j4bA%Yce(e zR#cDV#US!^pWcfKs+Ij+u_L>y|BdE<3M%lKu`TK1$vjOBlE?jh8!M-1^1F{iJVh#( zbyt~ytj9%e>qGB))G#2qNXg6RsXrTH{#i#HxAVIwaKiJWn!(2NixK;Y;30q-m{5HJR^oyWL@12WO*C z{16uvFUoQ@{P@&O#!^(YaB=;p@4{sMa4OSiAN@76ObPR8BPN{>eY9D1suCg`8ZIwZ z-n*`Se{t6v(v?lttx$n3Tr_{n*0>#fuyH&+XC**?crd8__qxA2@1ez; zQIoxkC&Q!Sp0`M}-mhJRvg2>dp&%Qhy8G@x@tklNO9kzs82NcDp}cKXdt}vDtdoUe zB)s|ax@Wx_82xqhGqRk5TkYoyvEPHKw^Xcl0uP)~6#tQxN0jf5#AnHYtmh%QO{y15 zE-#PYW$G1hrC={^=sedEDXacf-B>Zz7VK$4pEywfyHqV_mZ3Kw?h={dVKggsTakHo z0Y$&}Ri3TCQeR=vDyn9zN0>-6i*+;QwTw&w3g<2ILHfMeA%9Tw*=9Jqm>bA1bG#&k zd#|+ zm`fpba>M+g6|R)N@{FEIL!W(%V5o7~bjhUKp;s|q#9Gj_bCLZTKXP6|D3|BqEm>Fa zB+}VTr(emt?65#W&NioCL}!46-e}%I*8hI|>$wiocKY@9YRW@{&4TOsv*ZkLk*55i zFW^79<43KalcvEF?=MbSh8~|XH)y8 zv~rzUH=g=kXWZos1I*VV#O}a;0P}G^L!$_zW^r`AFYq8gr~KPRU5c;v?;8m}iHt?t zUYl~)Ma-pv$IQ`%NfGmvVaK}fS+0Vtn#spWc`47rB_%?onAxkjzqLLfl=RS9g)Ggv z(CN-pejbSSMv4VlaD}nQWG2UHxVZ+%WIrT3+L-A26s=UbrSE`zIyK)}qy)$zpckG0yPBTwm+e17BTuRs8Ewh$*GZ zG!NDkm_F?0P&;~I+ZgaoOyk64x>PXdaBTc8B704)OaXA-&%YHkM9Z3?)098o1eOS@ z42%_hsQVoW`8va2+AhRi^rSbaOm1Vh*d1xtDgHZcX^}eB6YP>R`}eW@XL0I8VgNQ-xz*Q=|UlF)_T8zvnf$Z&we# zVQCc_gL@XjxIe4eJp-KY0^11J_2~h~t#H>q5DGg>A#_Lib(8UAd@R&_C|ju|=)5 z*>_sLo~w8&+c>YOB`6#_+cxWYUWBvgiX`2&0m9ShSeibUBHn^LN7;nSnI~U@(w9`^ z4~8FHZ+N1*VHZKzH0wO`C_SM|V-rA0PH(zXFQ!!#hlpF%6ww&cft?1;{;y>+Rf)-s zI46w?==f6hwam5MqK~B~AYoZ?-K)((o6J7W9A5$9a4?QZqv%cXrziaf95MGvKkbqE z>g?4{Io*nOZgmKc&)ZK=(GSCPnYvdjWun1WJC#BFHW|krN4;YeD0;k zV6hJ3XS)DZ%$9$rf5;MpfA~{Uy`3LpEw%-proNO{B{{9a$D}aqcp^W~ z_^@eqB3t&L5#6Y87*$GAP>0w@2HRr(BV+Ir+2dqJH&M;U(!v~4x}+F%|22w_D}rns z*n)NF^q#8>gz%LN`4#-MzEpS^PZJS!s&!;AzgM!=pf;d;-t-4Z4Pb^_;f1lo)R7$I zq)j4HUd3Tm(7r;~xE>T4ERZiK-v6i75cDM>z}br)?_`x`>m}l8u?sbQwsAh@J7R@= zwU1=Xz4}mrzJBep z$(_K6kWiaq?vi{n4Q~>kp(db1Io{Sk^?T6|Q}@L^9(J?80T(s$y`&b$kW5su;$Fpc3`dTDZWU%VFFrq-yJ0O zY#KSIb$NH;x$X_O6hwV3(YeOCN+)vL$FER);RPbJw+*Xf5ivue>{zX$$SRWVVDU3j zjnj26B%j6f>+#d6Kc;Gmi(mNSj;g`-zKoF*F9~;@MudBAnY3|R8aqt`1^jJezc(&- z$A)Y8xINA*`YfbkFogz1OELUKe6fxq|E`gpXvK&0Yw2nru$2jJYD!@XeEsv^a}9}& z|3~K3MrXQ%5Vs&(TGq75caXi4u=8>5XJuP@UVk{&)mhOQ_7Bvz@`2kf5W0rq-9OrF zk}K0I+D9*3ru^~d%_zXD-xqn_Y-VWa3^h#pLtep1{;Qqi>{KSpJE^i_$hFr>KqHwY z>4pc1UtT$i{)M{;l2@>Ta{K@Y*f}~_8U=bQBhIn(h@D+(n3eKv1f%x!dG%h z$`ZP+5u>O6Q9v3$KKQp#&6ykB{Mmn!lG8Mumh>&ZYtX@FRb7I$W+UW)fciJ()xv*G zg85}6&vqAEWa$k;L^RSJ|8C3EuTd@E!Fyl#B5u`SuN*lZzBXC}R8cH$9Ei#l#sHgY zUhm4@7IZvCh%vKBhaAYYh?9f~t*T!Qd9A$*%hea%*RdG#PV<*|FP_@86%^yn`BO&* z@0g5+XRS&1DTl-2$?Y;LD8Cu@y8u)ag+G;O{#!)OUa^%ipJnve4FPKzvWw?9@3(tg zC>mub!BE1>KbJm4Q627WiOPkYO6+34ZX_lrTa>KX>T!jZ*i6QQ_~k9I9!s-Nc@~d? za(wKPI+NvBfh7ykAd@TJRM7+O%MWmr;*ovZF)L8kuBR*x8GZsuW&cWnRC zS6`KRkf{-MH22db@VE)9Md6Tc5b`;-L=Q4Ibpf3NWc!ue!~&_p+(G%iN;sdMbkgse zwO!b=%(yjcb+61G&WIu*#W(&pP$dY8FXE*?xjRD<5JXOKk83QCLZ?c*l!!hWy#N^m zOY?1C`2X4W8j1Gfz_fLVn ztua!bWz$=!hUf#F*l=FY6Of?SfUArH@3lUfy?Kup!%h4l6^nepOed{_U$FBs9U8N% z3%^_Aw&zCIzW+MFjho+6nP-}N#>f3&Dn>onG)zcuGVm9?L=>7Q3zENd@HpS| zmAI*sLB5`YD~yr;U+>|M)KfY*00vKB6>~!Qq-Dn5LV{Uu^L{TM(;YizRPvDP;BaA0 zLY9J;@xk0Bg7-}fAC(j%yS6f36uWGUGn?rp7z-9)TQl!-m}!bT3sQ;jYAgqgW^YZoW#zAJs0OL84#LEn z;3e-MB41D5<jpF0* zXhcAKaa@12OXNl2|HJur64Y|^s_O7V*o~2*!FE4uu%VVvgqrRNQ|-+ng%?^{H~8eG zd7z>HfUqHsof#&;vQtExcXF@)I-_d&+N%o7Z@>^~JQ# zyAN>-Ci8=qS!N%6k`ke0whfHrYi~-4Gt^;fMd!KWryi|Yy^d#whvSewLOxjlJqO$)01S1Ww1%Zz7^LSQ+NhkGgh2LD@ z`g$&kpRXS<*Cn=pp|%KK^J9$>_O*Llk=+$P{i>yr@51y%Om(Wmex_-Za0d$sB)-NQ zuAoBvWO_?r{-4K*Tzl0!7+395s%XUz*~7^%ow`UCVP>_*26YlJjyg^qr;y;vuyQKSe`ETn3yo_GJiZ8S>f-5fri-@4&Dbq!T) z%{GCdt|TDH$_L?VT&kdzt%_rBi_Lg92DRAV1TdqI!-2;bQV|EsS~6#b)kx;$`Q(i3 zb}SUak)`_wK|cEbTfMPb=>I0qmMcv zz$a(g_;*mbgrXY}=E(zLu>aUL!XJ+hBxWdH$MQCNr>e*-92bAd-?kE4XN+lOg})td z7GBS$b?~kWkhfY@1Usy8KE%gQ(2nFS|3^09LmH|#>k_2mqz?Uk&555w)C9%;InNrh zn#w=LF00jM6KTvu9FF$y{YR#Ftp&&1mE%4Kmhbyge9#CmkeRJ9tie4lp^iXqk6`eV z$dE4~%S4~AQ9?X2j^3#cHA>MkkT4D=6EhLjQ#lAe!MAYzT1uw@ppu2iu1C2&ii#+1 zj@h?qa0ki)?JaKaVTyu9p4Ckh#Q#U8JvDtL{p)-6!b<~Xr9QUcpTEgyJPybbEQ*}Z z?UWI`BF4N(zvU?;9^rSptqSE}pSEXF`Rd?e#Xo47x~A=WHXB?4We($*=yKCuMRC~E z3Q9&l>YjXaDQ5gWZg8|$ZrMzHhr9Y_O+5Jf$F^qY3tHWQVgdSuO>Je;ekw8V>1(0E z$=Z`i89wY1-($($fH91`*5oVobdXH^niRi_0osbslRB19I*d7E;QVXCa=j!z+M@`w ze;ncy!lc=5mhYnKC!>|hGk0elsUJV{OS%dG#1P&P-UkJIuomRZ)j?a{=#3(CV7JXI zsg#D1xmP*+>_pRkx>%J|_x6NPknBTe<~_U&ZJ9JuMf*5wW4AZIII~uX-6lOLd<+F= z*D^mvLsy4*x4hCd$9ju<&+8|LRj<`9V@Txghm_ZZV8;v<@p$>7u11bxr$7gn&l&Gj zp&68SoK>`uvfvZ82%Sy)eRoz3IZbXtDHDyIJhGk?G6K~yez;ud$=j0Tjkjk%q|TPj zkY_bLr7xHoRud;3p@;REhw9l~9eLaa5{=VF>_>MHB9kIKEu6=XIJ8ng>D?8*jsd@i zAj4yaUjj9G^^FLGL_oO-lkbKX9hx@^g$(Z2ECj;+4d zX;Sa3dZ}Hw>-lcQ0pWk+i_1QvYmC#$vqyPRByG>_Lu^Ta2IYMU<3?#deqO`*|Hx=% zRuB+;3I^i>(mLq+o$OGPUBdwwahESgz$1o=oMjdjwNCN^SZANrOKxY*>(@-Gs9g_Y zf#DW422Cr%$`CRZRj1{30|}7s$*N@+-yiL!rJ6N=<^&8Zh^r^#rG<{2YZ-4&Qn_l84hkL z&Y7oM(339Wbqa%zSQ?y^OWgnptuQHki`UJ3_A5+qAZ^?v^-wJo%sV^O`I^AC`JXa{cBMRl`(_eII ziXtRz;@MY69^aS(YhprI4|LyWbb=I;OV<7}K&mXdo9_ur1_~~zrA`V2ALCui^C%0G zjJ`fApd50l9lKfD!|p>zvie?TQumPDoPNBxth$a@3~(8&MW+c8*pqA!>-h`Ds$5@P zt>ntVnzmQ~9^lxaJK%h&<@wNRwZx_3ap8*=fx3eIL)6rzN$d2PoP$CB+GLIVNiR_x zXOIQ9%L9Jj9FUol3##W6Xs1)D6&?WUwkz)qnAxB2YD& z>&0b|71`sr-F8uZ1?EwCvi*-p>r9OSYHa?ObWzTgNg+PAyY1`dyZesRR@kBKHiI z;{0uiB!ZS{Pli|0T1$K<0_bh*%P9Z6^4|=m#;Yy9ZmTOS(eI3?tUC;GD={t5K>AQH zc5OzqP4G#grhaLgw&*pq&XvUV*%x`6hIb6j56NJXx4ds^_O_p=rC~D9wVQORSGGHo z*O>tL>R~_(7N_ItZ1+*OYtm1eloszZIQ;h@&qvNvS&&K*RqL5KaxBuZ_%}okn}P&= zJ6>mb(G=-^Yv|6git&%%m~#7`MX%O4Sx+mZF-5>B@QJ*{kZ#!`NjLNJS%yw(`R~g_ zOjgFV9N1gI%WZJ;R(B(x1u36cf@-Cl8Y#Ab5BS@KdlJ8&>7V-cy?6L&W4CbGL*}^# zM#3+3?FHHu_*-^oEoaMy zAfaQ*Dz>qAAy8NNG1Ewumk>@H-Xggn-+=b@GBaSU0}1j=Cr$aEsh@O~YB3JzZ)p_^wY+~`VSNi~$z6}?% zx>My`Y4!BE=%-W@7O8+-)l`H*Q|HOtQPFxbr7_Awsn9vcXV2cknEeAWU-l;&K6x|` z(R@eVqgO*-`eu{$tw9I5Q_k!&eh&K%QMaKdJzA5uuht;UA>PxVJ|M$XVf|dHxy~d* zV%S3-FX;s8zXn8HUsaY_GObVOz$O>GlighoT)suq&!Q2tS2P;~hZJazt*VB6e>KlM>@?2QOzA)}NA4JrwPwbaWvQqex zG_@McRH&+ovCQXy@TPsxJk;M z!hM!VvOAv3}O09Ks2_Jr_pl zbbA?ApQrBL9Q%f~Ud55QcyHnzxzkM0#%RvmjV`i+u9L*uBITKtQInEs(GvRiRjD&y z5K-(2GC#ElLk%cMRfvao-w*q>bsWNu{v%*_Ynt3{=pqZz0hp{0)B` z@}MNZ#t_YwB&$?|QXo60n&U&f&l+oL@?}?HkHr2l(ZK&=X2jn$rY^fkd}LWSbX_eq z!AagQbhT`~Nu7pHb#?Fz^fXt~%asnV4UT7$F`s)`4+8<(lq9I@0JM2OVg(pRbO)KD zgPxwFg@H_}N~OqL!`*|!nm#Xt?vWfX#{C5J-FHaLTtTlrR7K-gW7PWovXY79XeC?V z)26ZJV@Y;2sK1lGiyT=S;HC@>hPFA|Biwa!u!-xoC&Vg9nS2(*sha9`Pa9A0Ugi@% zK!sVa7P$cn&zi{TI|k!u;kEfIdx5~1quKPdc-6Mx3Jk7`wI)vsglWJUqCeg0|2c90 zzMZ9YqS6l_HE~X}T*O;pIW*?;|D_?pKX0NF46RfKn|xE~JOf$5Y&&;u-^zWRc+ZtX zOE>)~`No5xNV86d-ki+r;t&z^9VTldz70aP+sTyaB4>i=q2Z=HqXVmn4;cw5D`&ZR zAdGw@Svxy3RJUngkH@r08P~XF`ro>qN$7gT-uQ*Pgh$fTM267(UKlCIdTqNtpI`ll zBWh19$^2Ll#r6^Y{^|3|7MskSgl`Sl_GWcyNJ5p4L8@kpY9L-Qyq1R||8jeZ&As`A zjnvHudGiIw9kX5oVp_>ZllGim=@7Tr@}-96C|eIksI4*D=6R-AhG(4g(`OyC2sZk8 z1nt51E2gv(=4853)-HqGBfw%e>h1(-0w9M%yvxfWcn0vW?v3JO2YZF~2Z65w=myLp z_U9`Sfn@EQOa>@ChSU_gu zWLJ&==vd)~YV1eZNNuu+#y<4spZA;S-iFoz=KTtyRfu?@j>)%-3FniJl0&FY_F{2; zcCY7M&W2BgV3wuKui&QI8QL>u#Cj-;p%LBmYVarr>st6d2nZsYtoGvLc|pm-KmJt= zemMaghu>qzALrF}bTfxwK$*OLL0WNuP0yKAPRtL{;Kjl$HFUyMK+bvcMW%Fuyj=-C zOsq!dsum|!yswgX=CtA9Um7Ei$!W~spY<2g^c0;8FIu6Pw9jfVCpC!*9J~OK1jNnn z>&+aABAR`SP1P2?{@)TOXSdC$A{1A8hVxo8U!osHw^qaRM@?!9#DGO<+|6)>!*qox zJGU)EFul8C3tFOI&Qd$(W3c9j24J$ymdwK5iek@`cx>am=!RrRRN}aU4zHMeQra=vYE)-x&QXSu9e8y*wUY-{>9{o2)C(0aOG^ej}SKfX?3 zMd9{-bAkBs*vYKEL`_WOtr~G4t1P(+6SS7qnd}(_CfN)&{h1+EIiN+U_cS=b%@uqc zGN#2=X?o?+Z`0VD(ntR#LIFLDk)ouI$yOm9y%e=R5dc%?yH`G{Ygdm*RHNShKzDP2 z4;s{TbTNJ4Taf^ysWr0BH-Wng97c_&2_K|>U@3XF@1<`-8GUeO8ukAUa0LQOzIhD*EH+?CtKOEvKHhDCSWv9B*DEinGJbY+UKAW;mw5PPg-Kv~*~+0M-#U5w zX6#HS(am0i$E9LqFDSai)oUt7#rPFmwnecjxav7?A-AZ{GSq!(44<)eVGNkhjoeoOtxiRNFU^^E@!l$eoTxmrX?4^>e;QRSt} zyiB24_I_yTFhJb)GW7K}z-HDpq_;IdgKXdn(c+qUjnU57OH8St6Z_~odzkk@Ab!}-L$1kG1fUCm&35(@|1F^B>SBqmNL7yG zYYKIx)Fd|IK-c2#d9A#St50)U2r8>}9uL*kR1OaO5MK@_Y^9;TY5zsS372Evj_-14 zkjQaupJtF$D&X~hx*0d@Ra^MI*j0ru^NhjqsB0=a+JXG&2aFNQGtLEYtBKnuFwNBu zk&kmWq z8cy&Z;H&IfIj>Qh`FLDH_!?!+PQGB;TZe+%ij0Ga2mHnF;-;wV5qHPPY6qQxw79YZ zjFIl)d6^$JEs!Py zy3093sj24hIf!rLce!G6Hrij?F{SWvUO&^vhYr1VxZ|OwqdDCe;g)>$p(Q>aUVH|E z`0ylmgzVzV#t{VVR^y+Lp8rkX#6X1@$(@wtZTA_u5}fT2Yl5O&XcNEukHER@wKk@; zw!i9&Z*-SOt7y*0{8Xo9d>_b?qkJ=RrrWENAWrHoI%?V$pD&=P_ck*r^G|UWv*Bp- zas$3DL05119n>Uv5oaA*P1-GWZS{2^En!u;;;=6%&}RQD`QuCf@OqgN7sO-SaXc-Io4^5$-#2;PrinaPGX^=+r`M{o%>o-sZH4Y_ zr{Tl~V=CzthB4yh=dKDp*G(8+3n%J$?+Q)7;h*oMamRO=5DBUudX3^`ao?tx?QWC< z@Pindo_uH6r!#6M9oRwL+ey`zTqD-2JP-0K6NJ%X^yN zs*CB$`@p&(p%?CB*DPfob39cXQO0i5E=q6&zqqUd@-UaP?M9?KC!?dIuh(R;HOo4- z27rN*GCHx{?#TQ)U_1rfuze{kIawHRf%tD7wRNs4V7)blbEB;y&E~r#CRXCrjxE|) zimrhjtblbA`Hw)<>suxlOaQx=?S~}Ejg@LG?_U!;h>|dGgH+FS4D5DdN@)61)ri}F z1O=-ha(`$#8DRM6Lm_OXZ{`z2Y;pFc)mM27J3dlNo#23$d@U1vVSI|WFPTLB<(S}@ z$+0ZD187HfbM*>gXOw4E|u37B!-L;H#vLV@0<$GK&gJJn9loei5J~@*s zT|B)d^{GuO2LXbA&B--ihGAW=A~ROF zBBLLit=8qurFLLb*Iy>YJ6`v^KyE?!r1?c%U_N0f0cta2GY}(I9;LE=fgD>p&mRk} z79v0*qCCu_F5W)Xn-4(?*(QY+;oH8QG;sq)X#N^dxznVXKyjzWAC2!n`j-TjKt~B1 zHOek#Z0Roj6BYlm&t^up*fB7)0`q?acKfD*3TuTy*LyHS3dAxB#|3p{^>LLJCke{U zy6lbI`jz!msNfCM)&^rX0-yNCMrSOeV%S+Jv)j6SdnwOGW00uPXBg*dzE_f_6Lbt8 zam!_?lMWicZYNXWs}mKb5EbdvTCn~+Ec8eyvQ#Drwl*_O4+_*>?2ionkH8RTuWLL( z7y;64PJM0SX#Iod{xJQf;MfG)(;(&*EO>WV@I`t!_?d`Qe}GiEy9REiNQn~|yz!d$11gjV}C&+?iXWrfk=Fw2`o*1NZF6e0DzBo{Z zj*$JzWx&C|+ODhY3RFyk_k505gZ^nv#W-rV(Q^FL-a}ec`(w8}@q2e03L4YwQ#g9usI=tVTKnRQCd$MA^LlGU z1nlL_MYYh+gfh)bhoZ!^C@Dd%E0LY9M8GrB8wnGD&rkF4Zh-6ywy(gTyXbo_|5=-r z4K3Jq22QZJXZ{fADxD7hrp4D0Q4<^-#Erq(sZXS_)l?-5oL+AeZZ)g68(jLGy&`fVWjdZuUl z>GaB8NmcmFQIOH1ey`nhyZKy>`v?4@RA68xobcAri7V!o7woLPi#K~kQ>Sp|BW1)U zzn=o^0-rRtKie7+{$=~?^XrEgIhUPUVpL$gNvGjzSxItLk67{$B~;C`aXHk@BmAK} zy%X?hn)dv~kJ7mYCK(?K=2^S=5n{)IptfFB8N_IcC#SKZXM%OpM7@4|hqU{0IOtaR z|B#HviKc#K$L`@?MspA~gxg9F-WnV2uPLnbt<9rSUS}%<`T8+JcJVfE?ebseM05UVV z%BgiAqCt)ai*OQFF5N~Bc7F@5czz(5O>EWpJfVk;>g+{{E@|&93e3J_Y5+4eH^n`n zzFsAni%g1D<=g}pxr$tQV((R8qv4ufW57l5LAzln;oV}ZAj#-A&Ax~wx}+4&AU)}|Z4SnzFPit8V zrX5N;i7tECc@JHZ*(6Gh6T7kN?cTXlxt22!qavOcYvZxE z5r1-7qG(~{VYFklJ^pSN{|w(*+rx7Vt%evF2WNdpWWXlZE4>KB&K>#wp;2G3$H=;L zP@b5xS5e2*t^T6|-{O2d#6Ei%7Qq0yjj&+0`i9ZD1V|TOC3Rc=ke5Y=$9`v~uDub9 z&hp)QW^zS+77A>}RaQ8A1#`TJ{1?WJrkcRZijXW&tOPAM|H=1mcu=A$TcjwP7AT5-RC|*97srFnY%0#ZBi5|< z!*lKo%?H0UlQT@59zPYCz4$BnsDrPF;LL0o$Ru$ri(XaeiWH*xE97)E-SIMTu960YPhq4>6G#P0@$YcfL|zTF zTNX*fudbvOUdMQZ@L%xhxBHLIp1@T}&K^lw#*cyDXF<0w^MWm|JHiL=avzMn9tSq+ zgob4P*ljROy0JLf&Zi&dFZ$Ew#1X6iRWT%Co#=#`I(t_)}GV`^sdJTCFo=I*;koP{1++w4N=Yd86!@Y4B`nd9>4ka;MIP@DerV* zV2|u?S*JD~hFc~~q*g#Nbs{3|E*Mq5%J>6(i9obe1s-0@<#=T%1 z*UBoXC<8x@VlWd2ISH56?B|FwG7;O~zV;Si=;uoGaKyePaN8&@qv}j`xoiLUcsrDn zStv?0>jQpIi?u1Vd=8MW3iROHzVXFHcvaDlZGHX9`-1MrCy%P@YZ%MC4ZRarq07Zp zzHgwtt=ACDQtW)!4KcDrP1>I zCL37!`+&vg>FpFOt;l~f^nHbdlDVaxT|g3D(JbG~

    ?lqAP)Byw_BHfU%H@(-N0K~=_Z=j@Ig|>B1iw!s2Ov&v#yazJ~R*)@irx zhU&Li*I-^vyOJb-KbqededoD$qu*fsk(ShB^lzu4cu4ifvgUNlv6w}+>^ z6;BN@4OZ?&0Y#dTdOs}rA(5^-?V0EVogx+K3cjMBi+qpAkF(ef4`f-FP0lyxLG63n z$rH^vlOuUHysDM{a~Cb=6A_1mF@M9q(tn};i*WvrfNcJ3&~#FwyuI;*m&ZqjmoG)` zUAA7Z^^H1v+t1|&m3QI4N7-{<%kZccx^AlZ4sWaXHPE3C6yd#FA}?M0E{N}0gEE5)6!N@VUP zszi0Jq!>@ARGDB9DwDV6=;Lo{0ns;ompHmPC_~o^7nrmKWZhBLfiTx;h07eGkoBCh zS_HJJ@{i7m!V_Uxyv{par7Sw5vt_6SYY*}X0)vJ?DfTT&gs~ZF&;vxhCYWUf8VtS$ zLMp<>!=ySvN@yTxy^Bh-#?)MmXow{sZT$z042St)lUXD2>H zv!Q5d08Aao9ypkM$!zPyiM;1SyQNHdyRfs|vrSu}llMDyE65T(dzELQlBow#)pye@ z3wGZs!Kt)kKRXL!J+N$=%rD&^DaVqXBxSNqi@q(0S7k30iKVS&eu!92sVb!gfPe#{&eDl@#3$rJEqo0f1^*`AZ0P+oJlE9em1cy%cX#wFPGX%#vS#F3Dv59V|m)WW7!mvO1pT8j#1iV>P{~P*3`sZlzl$S*H*rBMiO@ByXIpbg#Vd<@4sNo>!Ku=i2GsJf|t%25YMKO;73`7SSPKD z@UkB7{|Lyt$N@C54R~!o!dzKUczPeVsJ=a5&b-JrQWl@}W;EQ^nch5cRv59YDw}fD zl#Ba?|7_u|@r`D(eUuYGw{W_v{(@g;3Oc4F%GENNBW}zJhlzxDm~`(kAJS-P8;U_K zDX>l@;!T+AdP}&uz)c~Z0YK1pVVrgS6)Q|A8>J6}k{!tRazw^W;D0P+}Wub1UyDlI14^yYBe4Tjj)OXdJFkad6&nprJ zKZ8c=`j3QU;Ld;x09P}`tp|7+8zq+lL!^8(pQtG@LvXW(;X@U$ zDdC>Cxz93Ocoe0WaUnbLwqahhykW!zY(X`*-Vn_%5CA@t{iH~m;XsOeUxP~5=kN)c zCw@X-CnrC$P7`~6OuB#_Gga?&`9t%mX%Uw~b0<#Kr$e42+HZRq=_honROSpQ+!HLb zaAtmw`i^RSK+1N>j91^OopKqb2C=+E-5m8YbE27B3inJu179Dw;qkL2a~zHh@BJH| z5o|=rQ)?)_H=AmqGQlju%s+eNdZ9_v+eBUGyfM~3Bf#(N?yvA4L1hQdNPCXnuy^={ zyY+n6$;N;;HuxP{B8o4oKZqq>wA~5FaWdBEPMflS zYpVD9E4WW-9)ZFi<@#^#XwJRr#6KX-W{NjCN6`%MDv+XdeV&hkT(}+NM;IM8W!+r8 zM}bT$4u+q>aGa?)r^xjE)X@fdNPqTWliSAtc}LzDYYB+-SY{mJmq5TO>8UQg(CnhH zaoi&`qals7W$XoSqNviZX(DBI^!Fu^gbFcyH;HI&7d?E<@v8OAoKz`UtjA2oTn% zyXv%}&^qt4Sk@5V6UJ~lq~G19bw}&N?s^UDMNda*keBfXmRwQAl$LN#;9EXNS3`Yl z-^q^Q$y_ywZ+MC3!^VX?9=fSIb%)< z>EVi~y*0G|=bb}walb4y-ZC~%NdJ>R^-kFZq%DTQ0}dWU86Q^S_Z%tP()tv&*F-0m zS`ApX6Ne8c#|dt?G9{?wAXt{Te@>2)H}UveBV*M;N7&1ajxhgh{R*H%U6qmqg9*lO z1~Q5&prI{ZDN715xhoU1jFxcsK3Rme-N?Nsd&n%%^26-CyRt<5Ys3~`3*2l6G2gL- zFVI)%3hS%`l9pUf7NC zzUNHR9A>gCV=CQIrxe_9kdb6~7zDh$d4rADo)1x~a*-DWX?9J@$`vlHpcIYo_3zxX z@>|XOqTwV32^X&Xz8WqnqBh}?z?v5O@swq9{oOiuPH zCnGb>k6j%7hU4CYuTleyhR7xDuYI3gTJ%b1EygaSD`!i_Y>)8N4a2Qsc9$dQ;jIGj z4lF9iEDqA~PaBB~EKW#&4zSxm*Jv=Cx-nM$XxPM@8VaPw|AsFe-~?C90}!eJq5vEH zIHLBp?<;2AHyH)bh3Xe`aqO+t#<_>&hjsBrE*nU8@^f68i8jWZ}dLY^|ze%e`?ev@_RDwZE2YA zvCaD=1HoT*uy3y5ig;QQ$hG}#FE_8bD)_2AWU|sbbBN_>K+O)4rJs}`yxSE0{+hRK ze`q61za{BmLQ|#?>xZ{gl1xNYmy$+yi}FMZ>-w1^*TK1J9>RreO!_?V zvdSc0ye;QD95)U8EPwefl~f_o$s{oZLd^BfTWwj)HG2b{);A_mdrh)Visj0P&R##; zAbl3FiX%4-HB?RwRp>EEjA*3D)SP_ql8XrSCeLvD*D4v8tYK}HdPbQ8`?1?Kv&P2j zL2TqYY20V5KibCh51Jzi6I=FdiV;Bx4lCwj(MDpJB*zVCL4 z3Np5{(<2+>SNTT#>%qqE)SdS3GSRc^e~@YNHkb><+L{05rzo7Jo+0zzbAW;#-cjmX*fXUI=3yf~gp zD!j~?`1d|)fsU`7fXIz^WIgZZ#`LvEIi9D~48?_ub!8t~rPg%hu3k4SUon$7`6EB_ zi*7*nO)@$lQ6fe5UeLL*&5Um)d`u@NutgMV~Pyva|Z$4}}m`6;he zORyr4=auSM{6&WCh%_3hE*Up)!AO{NVAiRpRqY zKcf-BVbuh#;pZxC-2Gyd^q${+W*VB>cDqc0V~^)6R9m30KTsR zc$2r2@VvC$tTDdGBEZr4U7af!JYw}WUg&#|?7Ea+JZBSyf&I^fY&1}vR+5>W) zEGJys>H_FS9=oyjifGb}TPHA{S?Xt@Nh$3XY&W!r{Ic4+D7uRn&FNOi9q0dGJ8o3N z#(z3lFrxEgzT;T{NK}wAm}w-yy&rBeR1N=7_swEkm=Wx6$X*%U!beXz*ZSt?zw}$nKHRHG#|OL z+*U;?|2QBQP{l)JTVxAU=E(KZH&dVZ4g3*P5d z&xjj7JH)V@UU^#xa94thgPH@C$>gkuzO?JF=kBe6?uay@&ADZktes&EPiCqrb~b94 z((0rjF*M#|HHck5X#tR@dxg1KXyy@Wy4Cx2=Z6{DYGm3cO%VusHR5?L-z771-5(mv zYUi9=*vO{NaQ)*c1BXYZNf_aJ5vU+NDi!P3gEu260!(*p9Uo+N?NQYTe6MoOzNjAt zvP#o2v!Ovr=N*PUemHugSDMoENCUj$7lJ)&777#sY=)1xb4>ut3Cwe^Mw`Dh_nyARl&5y7NGovS}NP02jkd(A)?1WKcn(8#vRk$1e*D35%(@eOB zEPf{I8)~kbu?YLt<2BgdFnO!*Tevddb22J|%fNWwTt&U_y^*jD%CMmX&o)%JJTS>* zAeKBXOzlzs#@RH>-<%5@jBYLPIU4P(;$S$JmFQO><(%U;8sUegyb&I=EyC+5lFz6v z0^OW{S1(2x1!Git@UOc(VE|k2b>dKSJs!(Z)IFv9Jm)j`Ews>!E^>@!IZcprTY6jaiuB6$S2g{KdBza_hHtl(?BhDu_v<8t1V>e~Jrlt8kTF znHV|@7r>}Yc&@zrK3*qfo!VgHxeajXb4H%~Ph-qE<~Wb5XK%Vxh zT-R3n*I=9GF+E?k9rj$w7CwQ<{=Un%S&R;Ow)eyHef!_k=DQS|Ff+9Qkx#7JPG6F2 z+dn~XCOgk~4_AX*N?iG9{3-T+2FjX}yFK}jz|>%+QMSV5AZg7g^n33sroe&QhKitU z(du_4Soa%I%T=S%ko{Z@{3st!$k1=3n~xjGG=4UBqKJ1CQ~i%%T7GJl`agoKxNK!Z znTjJXONxtv-&hfSbQthwPdNg?>eOh+WBlw?x;T(IH@C#aVEEbY$e${Pq$q)dQ#`b= zi$BR~1xLZBxQVd)=%f^M*#I2V)alYVzo=8$1=R4mMy* zvj{0h$nTSN)A^wP6sZ+$quLV%8JvJ5C*K0j46sf&8u)Sp6=iwUu5M$6p3p>-{)3)C z#rN?n8~?MUMHp9r&H8GTZ@%@7noF-r zG=mKB>oZ<+&6i2ES+e)XQNjT%C01v_eGYAhPXJh?6sE=(OkBY*O zO2FJgRBO!Fa|TU%0K@Vg?B{N4dzQbvejQg%Y!qUf{Isq`hV>(D~{4K+bP}YzQ zqvO{$JR^vM9VJxaAHJ~zt z@w@7tN;VRuX(8K8Jz52arKy1?E>9IEDV97>7`@#BBV5wNL!ZNT`NBdq5RS`ISv~<; z#&&NRR2?<03*5t5c`A3xPd$G;j@qsp|he9Eq>ACqEt9$FMROgWYJE8OZ2WNy=2uih>_+{Ima*C z-KIEz^|(i#XId5Je={U6QP3$t~cd zF&<5%TbJ8y!P=Vg8yy}c+SD4VR2a+N8uzJQB88LqSmp8K3EKWJOZncBn7T!S(!32O zaxYb`8Ne`1uF~koY_eE#i#$12x3BA22(Qyx6wDVw@6`C(?xeo}8SGe;*`wuaW@>t6 zWQ*ZM;H4*OW>yMI7!_>7P!^sQKO4~(D9mu;TolKOG z&#t?U*!xE+<3)5DTu6fb>CQ-jitmXE-b!sv7tMPmV-;5eNPTp2Oh`zpWg?&81wYSB zzk;(SThGU%{V%Ms$kUKHeZ)@2x{>Qb;J=4qDNzA@$`5kl)wIOhj{SoXBO|8yjPaSf zcZJv|Xp5dcmIqndGv|;O&Js9!G)G^|4>3(=GYci&emd4{uP{C3M1Qsys^jnWv5mp$ zv)w!6Qm4|Y9q$>N*%d_gLj`2OnfC`s)JpL%(MLx&F;PbngsnVTUjqU)_@D$yAs za+12$z&rNV3SU$M&#=1gx#GIvVaqy8d?)LCJ4>}A`K{DRW_}5Y&O~1)Kl-8gC4F{N z>TCGiq(>b{UV_2WpWt~BOWt-KapKU)6qxSDB=PjLPrN9&?F!7I$eF4VfBW{X952(S z4e^+iXACf0KOFdRb7 zi9h9e*G5s-+o}E=7WKUxrPW)uPW`$3yi9uAdO-2gAQ)4qPO=-gcbbw(RLZ+usU}F) z);5J<`&d7Q6UKVsXKYO;$;m$7r$wtEk8!v_-!b(2FI&;t+&^m`D{;`)yp=a%Pw?Ee z%_!0-(GXK_kQ1F-7IVQ*Wq-}+Oo2op(YJ<=QUW*9=h6)EbEY56=;Pwah%~KPzMXE4 z3PS}{FVELE3cNmR$j(xu1m2o*FL;8h%Tdn!wQuL$l-ZEe<%$Iwi)+#SIsi|thZ4zaPeSD@_$?{TTT>EYHi&8RZ2f$VhYnBliaEE>0*c#58Q z{Wgdz>H>dknK}4_lv+O{%m+t{o2s_b5lp@lXmq2ZJAZ5Cxt=f4!$Ru1)!y0k2E5RcXl)FBptRF?HYj7UmXeoR z`DCjKxohQ-(%ae`V~Y#gcb`F@O3jId*-uE%ipC!bY;VgcKjAx`*E^FP?0*L@lOrNx zTi6lX*R4{6%E5e0TK!v2E#vTxyA&=o@|`M63Vs2>;%5;$V<+FOJ$40jIWATY= zl0+3^=TMO)F^;ER2H__P2CfssNs!*v`fhCG+AWS$Q(ZkA&lp?ve?}*PC}dL#$97~1 zl>hzsAgq+i5VNaHFhJPLOPa?sE|`i}I-fUOoWTk}a%J9Umxg!IvVg6g@&)X^;@s~k zUn|o1wdp3Y;=KYPC2X>T+t{wTTa7*N-> z(UDLh_2GJAeV~W8Tr3zwfj!pygH{IeAA(o4QfC!%MV~$-mkRkhSXMy?2S~2nHp+;7 z->uYpiM;Udge?aNn?VZY)Ntb~_yJ8(pZ|XZF0*{lwgqG=@1oK?Kf38ft>h-_{VHhK zp%zKtd6h(b6z%Tnh^4|_qGK{Xx)HwrFN|)olj|KMK;HCYO?$YVINqUM$*;nh^?AYL z#4DZAR9i+j+6&Guk97?<&PJ1ULreQBci8diT#UZI9m-!;)Ov`ADo}c+LqRYE6;nibNH>a~DI(NIYPo_6j zRk0RFjy6x(`Ie1CKRyL?cw4hk!+7dc^k0{E4_G?5J3Pusbb8s8{!tyS^k{DQG=Qp4 zW~?p!4q+7H;_c^pxDmk_Keo(foo;9Es$IrFb$H+_1^d+E_);9Mhd0=rc!0ybW;xQ> zyPH^F>hjA2M*F}`f$?j}q^h32e2EprE&-QNoss_tXALIzjC``sEt2h1Hs5a? z##72{+2T8KO9>0-9SznQxmMZ>JW&9sOPrq5v0_^qZu@-dva>&u<6!17-hbFI*fLL{ z_0d3+lYu)|d#-b0r?~mhOrLwt8&K)w?cI|GXHwTu4;47wQFF08I1Dr~0{aX>hr(e> z{7d<6;akOFhR1}SdSw%Apcj9peqU)h^h#@W6fNz+MQQM1q`<~-qzeC06sE;Cn&rw4 zvam_ddy58dOF@Vs5Ng+vq z*Eh>rpzg4HIj5@jU9IYt!bsaD;P%FFF6i3MOsk#YiMFRf%dklZ?<|D9y}5q&Wpk+X z#vSWBU%@nBkip!W$r`9+xt%Y?mt^gE@E3vTL>f#S)Sy;uu9x^1TW_vHFxN?79=_4% z>bj^9b8eSSH|}%pWS={~7cAFzc+jd}j^H*0@deg_TH?-aVgRO(1e{HjGOXu(Laj05 zN8tjz-Y%U|-j|X$7f>h3U+WcW{<9@zMsf|er84Tlx$3FRst*L97$KJL7_A1`HmR~1$kO((a@cp9E-Jbw1x*4JdWDUctgMpY!!)OvBuc{GN&T%{ zCV6u+!c|(8LHUoO)~n1t7RM@U3T(F(I2RAC-jG5`&#qzl(o+ddRAQoF8w%}j2=&g+ zCQbDlm0s}^04|mUG^!Aa`<*;61_>t>-R(y(UQi(MB=vC_-x>H{NaaVg;I^ zoH2^54)RM}PjntI1&$-xs(PF%1KkN|SsW-FD1viN_8p%5tLY%I4$|CTHCAUDB}br? zace#0bqS9@Y}{#xZK=sm8$MCxPi8}FwfM?4U_d@;<{#XQUb|S(GOubipt|Eterx*3 z2e;L#J8geAO}nq~uv6vFzQrcx*2CVTl1<~5+V+nG%lA!85#H?ifa#XKakCwl{ESf= z?pMTw9g_(g-c3vps(T2?gAbP#z*vfh)E8#aYJ+lf8YuSUpKE|UT<+wr^) z)Yg)HhJ-&192^AFJSb6DebUEPHC60b1RCy$aJUgvaBS?Q#ZsY&%bE41U*xH=C!QK-+ac7 z|AgE`;4~ei_!A2gX{(W`>#WAVV!nhIL#}JhrtAI1<3Aoi#neszw0?~<;uM5}wElXJ z*@#vHc(o4msnY#2kC_S?B3$`atd%@|695!ZL6hxGtyDo=BdC78RFipjg zX1g`^L*zKP?BTR*&RN5F4(+jTqW!9Ndp;Nn=9#jFHsk9MIGA-?uIr#ma13|hfhQSa zwfOVxfnvdiDaDz@%PB;s`KHzqCty$gnl$0W8R>X#L5R+BugB6m>-$TEf=4}Kp2Ia| zdh7{Xvkd_rUGUdd`R%zW+hJEGO`EDr^20evWlx?})SyiI(#*Rz)X8FjjyPyAlZNcdp0QYrC6#jf&Q$~d>R=?Gx{3N*Iek@{0X+6`j z*IyHn_kP%e$5*|4hPwoWYf^kMBn9IJU-hU0!WN zmbG^L-OE~Jd&0yEv=p?`bYiDU!K(XHGz(t|<+)kaR%0|vza}-Yc`!!$l>GIk^nNl_ z^$o)|a5F=v{fMP?f0n!~Va^WUzgzdOUWIe~M?kb~^{eKK1sSHoy>m5eU~zhJg~{+E zD^>DA=Zp9+oG;W=FuyQ6chz|;gRs8_c^1setGg4Eugfmt*=E}LDQod0caDvdKndZf z3vszQg#7vYq`)O2NiI3>2&4@M!@G-yE@~gEnP^T!)an++g6s>{xNtg6cfMF5tX)mb z(6L9hcs~D3T43*W3v}yQO>VtGdgl!n${|tPIL*J~>PrJ+YNny~ zmbPlIqNrUpVw4mi#40gLjGC#KiM=;Lq)(o|Ag}z8PwqYUobz7QInbc6{V@=5myI{`@3h=fs zX3?i#3Iy){eDJpUhOo&kRTfT>h^2&TwtdHpnw5bIOP|Ze#vJ#xb|~7UNLUXfla}aO z+%^+&wO3Q298N#|6w7k(km%@|Y+N~8KSHPWD{<^Ps_<)+&F4^tWCD>7X)}0PY3Ox> z#jCEJ+Z)(e=ubZ!s;I7Dc;Y#u5Fv9c7H~!hCU?pU#H)vREaqVe! zIx+sDUYkD7Uom(3O|lT!%3f6aT<|`@E)*9|xbXP~)8=iS))83zo;JsZr9r+eVBKd> z6RhQNjhnHDxO4@do^VHW3)`xw#t@M+lAjFfqMu=?F$b#cqZ;p?u z8aA}ZU9An_Rtzrf87GX|+;s7_CR6P?ee1jRfxOU9Qi?5Z^UuqP(#;vm48pl;R>N8k z4mtB%!zm*`MpOSX&aB_V%#Q72PitzFDy!@B9YXgR8 zI{7rCpuWc20*>WRop>&+7P9A}i~9veLKn#U-TPot8_j23cjs`wLwVT;qEvj(E-lEn zEo58eI(&C*+rP8dJk2&GojmHtn%fhM%hq$ynpcGtJt2Se{QY_BSU^?IUv~Aq8xU{q zT~q(96o1)%FK_?k9ESvzUg$RCT%?|2dUSH_8AV#GeAODEz$%Xr{{?c>XNA*?+WY@a z?QuJwwJLx|dshJBeClf{$e{k~NI_L-L$~rV*_?v+$cYve_X@V(`vfP_1pI8t5o7jn zVH54#Uzt!Jr~*9YPH(-R3jZkU{bz9uDhH(k!_GMzopuN8ULNdW=f}wmkSMSH+-|IB zqZH^$44+Y&pG16>U6LdU@8^=yI$idX!D;i~q^|%tq3FEW%pRmjylb&bvtJF<_vgK9 za_&5E{v#hYTA0!jSj9FUzGua_IRnY^BfE;b_5QXqZ)|Vn(j|d&}Rp zOX-GnX;Q&vuT1dnvMrzG&b7A28$zUiJ^;;Mwkc(#9{qi55;1VTff<_XNL^QXn9vuY zn6swy5tOUU(S2R3K}2Up)l!ri_9e8e0(^nbmZxU0s4WLS*@_4{>w`-ha-? z5`yVo=hikYL)x=i-99q+Ub=TIe}kFtBcl)1_D%<6;NklL+w{+y-m!0HxcqyIAO&mxtjoR=FS zR8=~@3ltBtc4f-ik-t>mn8Fsd?>EGBhr8g~2btwKsiFNsdDpdkKlHMi&#c)rJncfi zA#H6C03+w697`+Jrc&#Mt%hsb7}gpH|6NS7?Bj%V9-1%Z zsisB#$!RjTQs6%B`!#rxSqgpbOk)R_niI8p7p(5a(^BXPLT(@sP@Au7gLMT;@4E6lAH zLv3^ImB^b3VEyPH#W-N0lX9c@7jlF|_yngP>Lc!QA8nYqC1+&Hl|N~FfkROLSp zbMU{svY9ytte=wI*T*v>*7153>pNfN(8jAkx;g0*E4mNicrEAwwKb&F zcHYA-y!(u@A^hf+ah~VsDXY>{j@F5qbaF~=s2K1S(4+JBFPP$eeG#|N274*b6w6UK ztG`(EJkQh`z?Gf1q4%~>XLVdqNF3L#w{L!)&`a;f#5O2f8%K7D+-e#>DV|yn=m}-w zSEw~}cKI7+bayZ?F^n3wBRn%3t0Ic1YhF0La$FUljn3s8GmWr#lS=$Wq1T<-3klmtJSL3{2)al| z2qHdtjS1AaN645dlbiibdRA=)NGpX^Q|L9XCgR@y<`#=RrgqX?u$#`CIzv<5}HWF4YsR~EoF6EW>caU${EGs290H#2G3TDinTo&JP+&Z zNv$a}3v}-9f}HwP#KAh&+0$X}VBgY~AI?k3@{@ONaHwpFcfmaK@*?DuYqtK_bdaTs zn^(Sfo{yV(UUd9k3uANkstAwX#np&DP-ZuFl35*KK{2th_D^q26f8-jzE0-xKCKoV zQM<;tt~Sc0bRn{AUk}(}MHW#rW;J$KNs(6H?Hyjk-^Nl5z*#aqbc1 zx6zR9=pPzak1JIu-Siv48m?rT3;-opQnf+qaw&7-Z) zof1EOmXQswuB^P;E;rvB$o&G?n4|0_JX4B11QQ}&*x!2+3&JYTnoW^jvJd5`a|KFd ziQb_5`bf^^1P}jpq+n#eKK!)ZM#*bRQ`;HZFq`?ahsrg}z+#8@*KL8>x+>aA?;}}Y zG$^CL)3&`V!^4Mf0rG1{Nf{TKkOZ+BEurVE3o<*sU9czI{%U}mEBl5EMXyiD-7WN{ zfTP3e!t#jFv+nU|I%x#~e(3x^3dtjK%xwwxx0=LA4E{hwF=2XawJj|_IJ-5-vwT)a zUrA5VxdJ5D8l94(2rzQ^h-dh1drlO)v8~4xBtdg30oUS(5zbjum2C8jep#8v_-L)- z+yVe?hzLK4Q_$}l8>n7yVYPem=Vpj{KKyk;0{tCpk?#MTwPhJTv#e}=J|FqEmIlIB z*~&dXhAam)gK>#Dp>wC3!7l{@xko%dYaMldw-M46z>XIGG>YWUTMoIJ7cza?E3lwj zjHxUZn65S$fX#>*q+A+3^>iKIcKW!5LYRNDZedHCofRy9_3T}b7UydL%5v$8vs)%0 zx*WZQ{P0s1miY1tsa$RK&bABR20Y?^ zc>gL-wm=E4$I;h_F!WRi-!@`{U)eFww7oO^lla+4Rs1m0-W=8ZX>)+_{Kw*X1`=AF z;zi&`A843Vbdg~tx>?qKlPVYF&!7qG*gsvnwC@UW(kt0uIot?*fZdYVDCbviiq=aj z_t|JUOU;~BA-@dQsib$EiUckCEgQnk^|t2O`b&mNz3IxRZq21IMNAg(+dK8hR0y(IG zmTVSC>OB+*&eQ{G_NKa&0Ii$jaXxC)liGgeV4$1g?5J zf()w?i&-_qTaL8P--fFdspR{YSgl_K#=MzWA_Ep|Ag=C%*@7zW_wSZt@22EFG$<24 zJP~l@kM&udB>tliDsgAL=UkyZ!8}f4_0rp`w6Yp^h-wPG>?T*H|Kq7c{+~S&uwYp_H*G*H9Ug zv8w*Di}-Weahs5CKY^Q&zMcHrk`QvH@THNwZZ*Oj2xa70k zApb05!ZiCBL&juZ>g;MSPYt!fX{9oKhHu{_H5|!DG5tAph)Svn={dWo`nsLZJy9@E zFJTHfxvWA%nP>+PLbXn>nhUkYs-;RYl@&MwL=V41ihuAGwYxe&DjQ?{c2sw~s^K$o zTzaAl`q^G$dBN@BK&NmW3tf+4Xjh!OclD+Zx_F`A$(!XgqA3>-A1@tuCO3Gd&5=DS zV!*>OpwL-Hl!cDx@8LR>Cf#h{Gyg08Zf5qRnCR+;e2?A{t1vef^AP?SXE#UkfMb6+ zjNFG$DqF5Ovl7*n)Dq1StDN@N@UAgw>-nOzPC5wq5sOIypzdYiPOy==PxTG5kEPB- z%?usEKmY+_y`0)G(i~tuP-sPQT`Kgj<{<1f!gI)VCc$@d&f#vuEl6t z&V=bE#6`u-6_!-`hs9))Gxm5+00?<@h1pxZFe{a0Jeu{5F>bku~ zCdwh>$vwB+=E6T~B;@v`^4(>9%2L7L;;q^rAa{STR1A3N7hmvVHM9I%_e>o*os_R< z%9`Dsty3MNq)+r12(LO1qs$qwG zKlFEdt5K#s%%3}O)d%&+4ZQy;v$K^p)n0EIaRHPtw>d{c#HX zxopNbiOe;xfO(icrt+yCE_X@&i#LdSk`Ju+ms43N5#!l%I&k5i_^&Ss+1Plgqd5NV@5vz~F*t z^ECauap539=c(-NOB9w=>jkygKt#M_jwAsgTk~z4!{1R=0I2g{SN;4PAag6zrE(bi zf$YatNtjib&cVVbqWcf4;E?1rq#pSfS+Cn5AG{=9b-g3(J-vLN^cC2ynnjj{qjZJ* zm=aHDuXkOS z3_tIasCV(tw|ckN(x+e|1Bcr+^qa@vbK?AJ-M6%}l3ZhyfsynTEWl#=rO}V$x$j((M9jJ9F7$hDC`TCcj6?y8WnP(n- z+!io-Dsjh7Y~8bAbK>UFd4v16jc&|Zl>7>{j?=? zXdFm2vR8jnNWnUMt~f7AwkdqZOqq(Qj_A+8lNyYa;5+(;$bkAwB&WzgU$*^*Y+8^i z#&kk-@69E*R8C;FPmg2R#~GII%S)vp&+?_?yyLBQjgYQwLGGAtJC;f6;CeM+6h6br z1?2?UlmAEIhv~<=>^GHV9=J>v#P_8JMe1;|wUWBWr8oRRUTl43W6p;bH3`&L;|G3)A>bAmhg$IBPBo4%hZ zwn1cD-8~No$RzqfT8jZ>a6a??kbQH-k{5#=QSV^mK&1Qgx>u-R$xA+NbRt6{qK4M# zW2c(vuS?!Ni(_1jpTLZ7<-UD)TI~iN&smC^ej~4h5}pl^>)Oc} zkmuXyIREAqdxYzbnhH{c$h4S{puP{EXH5e;nFi_D4f!294X8~z{iS?36q0wXYZQgB zLtd@PBz!kpm|A0s@X#5lJwL#u+_9Q<_nzGf;0vwRnb1mj;(6$JL-5<>zFtI9T;Bjw zwcfN?_i_|3SkHw3DQat5K0QUSTNbWRJNTH$;>PNdo#V896)$phqGbQ9`-OA7tnI${ zcP6;;&j*^dyXPk&6FI9@aaER$(?4Dp*CO5}A6nDbaet54HBM>G_yn3`kj!f(__HLm zveXQf@TA~@w})1Hz*3*i8`B&<*zaas>pQddRJUW1NT%y(y}~s2$xHmB=qil8gM(0S zVFMGSa}U0&1v3g2HG$p_p3irN+@kO$-)K68U7j!$F|L45N!im;F#Ts9Uiy6-l$|4g z6Bb!|_M%VcMJIsp&-?G zEcBe!$;8PzLx}s>KsVp->C!ly=c6*e{zt`74w>^WY7e6H^H0lHJCv&ow(PD9;x-p@ z1^tSpD+rj&&`kxg7!}EB5OWSsK*-K%mP7e8Pr!5Vo93i!-nTdU-`$2_Z7|zml&bCg zJnwv4jX~jWPwWGiT`Df`RB(@gRg}WS^;EE1-B?&65bjFu`}nLGc^qUXq?zi|QF@q^Wx_ik$P$4al@bQ*3f-SLOm5I%8{n) zdB&0TNH3java(RsHL}rZ(7H!$&T|%RdwHT{G2xwG5-vn;Rk0CG zzCWzpM`%umMjtOc;%HiXPpN!?>G39a&w9n_(;kXmUH(1&d7Ss8CIr$WqW_Nqr68J( zPvTt($~CE<)X%zmzVSd!0v_Y#T_2%YB)$5sf!)tnYi@nF{Wzd(1FKtB28?ZG@jeLb z35khYJD`k_2GD?19)UHMx-MRpjh&f)e8O#Rq-~P?x=P4Nj-PeMzEqPky2wr<(O$x= zeFJ!8{jlNL9)safn;61(lnA-hC)$l$jgV<4&=SIf5rYpuz+nuFxkOE`GO&34kVKK| z>#wHs%b89MCO49*9DiopJ)9^cvZ-L^=LQd&5b8XLooOxu?}I9QL^|$Dvy0vTBq`;+ zmp?T}3a2}gB^tcwUE0?5+;2!yApf`O^sAMABOh(~eF@@j5YagCTXASZ)%@@rxa0R~ z(4cDCDniUw0b(z?Hy79gssH~U^bR+UCE6cAYeNX^wx_T0cg4V4zUp1r%+ztn#xK)k zYxGZapSxUZ+xmc$6u>!KRR$V0U z2xnbfGKB0)!!RJ24jhEW%?VocWJ3K+Vlp|Jm^$a5F-Sx`67L1o(`z&WXh+yRMK(f@ z!uwJ_4fqh5h34`v{giHy%QT|=fmqq4ya>8>uvZs`i#Ix4(FhcnNcraJFV7p?Zw#Mt zbJNN1*bDU3>EsI__N2zol>zuJQwPpB%`$(^$ZN~SGiw{AKMPc@2zY@#d}bEXR~=z) z&JlfqNAfepASW)?@FRVN00L|=5CxfD>n@}}2HdhHJ|p$FASNUFgRfxT%P3N$(mgb( zY9!iAafmz-P9Dogdw(j8G&B@PtsG=Rd%1+*7_s8~vbMI4!op);;NI4n4{TO{_2eC? zSAlH7a>PWWaUujx)2!KD1Ob`}MYRLLX zVZ0zPN|2Pn!b4GV13e#bD=92;kUuuSwa}Q! zn4wthB;~%|(#Ty_DQk{|;FFQIiW%~RS6-5q&^97dDt*UpEhQ*LGqTg{nOjz)@r;d4 zilWY>C}gD}l%Qk|*PMG3jI4h1+Yiiz?qRoC1L@-SXZ$~k@by{#;cXh34y!RBwwfDvE5M8^qi!)8@2|{Pdxwi=gYNKH2P3~WHFp*{ z1g{kJC;I5BeLuMQgr4!Q6=k+wTY19uHN+UQWa2)fI9*NbW&@03cJsn%lle1;o*=b> z=q4VI8OSAT9yT?tUnWx^^jXN-wv@OCz95IiHbi5NVlzH%>5AQ}?!%av)fGR#;i`d+Oi#Jyia+$sq+fm^pY;}Iu!=`h-*z+XN_?;MY6R3C{UI@K<_Od&-CFPZ{EAs zaEhAlZ9#;$P*9=X6j9u%%)md)g)}umESC!Pz5GXU=|pR{mTh$w2vEtYRP$}5<+=#{ z2wYmJ@xC3trRmgLo^hgJdqXt`_50%mgYRj|ML_xAp>2OWtHTl{87Z=kl{fg~LSLD=%vdcrq3so|e%0`u*7?Nr;-a7$R1OR9_1$(#m zeh>|cJs!j*HD3milNmPNwsG=81)*g%?*L3;lBGc-&yjz^OpDdUqE9R*Jf?iCnN}<$ zBz``s5)%B${rSI&3M$jGB@ttVXBh{qoG(1aGD;dWHr)uG5i@%~+3>Ucwh zd{JQLY%rHNc|J9DbfuWDk#!kNkk#I&B~O52bej<}x^vu` z3M?PnpG<#ATQh`PI=;g5+&w)!*Ip@qT#wqNjK35%S>DhyCj7vT&VZ#QpjjrSrkWss z+vJ%=xC-Ma(ZK6R5I?@*L;R6xYb(3y@u;m7#>l!=;`SGM2^G%h`I3Fgo2wo7@ia5? zy(`9Dj_bB=Gn2{>_om6@%9Afv4XI~<$kK4#7g+|F*NsDYJG{->r=CW+rs<@)4a^SM($#`P+v%9$qH^V z^J0F@(8OKGW`;hKvj_0I^XpD5jVBK#@Ijvto-PFLp^#QqJT@c(5BFbCuVS*awdI7w zx62Zszw95V2yPT`93Y}k$X?b+{Pm4YJIVvQT;3H}x~~__XWn{M>Mp}wF3A=_??gKC zw2|f@eja|uq-;_Sm760vyaC@WIBU2}zHdYh^HOh+14vRbKEdHK@}8s+c5i<; z7jI9qK)jP|9j>YUJfI@%A`#g(*P4`~3^jcd`|{ha&EipVMuFm^;RFB2W^&cW5>6JXgOzo1;d-EhAm@N+g@82K7^{ z1&ot5aZO^tX}i|Ab#CVk?9Fj_#%1_rTr>B0I~&n@igZ1wN*!@ftc?d=TTg6s`Rn%7 z%kM9f!IuLW(=wFcqxm2sdDfxe-~vnC*mr5CDm&&i7qU}VaLjYLvXr*t6fEU0a>qTt zbRWvatN`n7Z8JuEel7A>ZQ zB!WShuf_-{y_^Hy1gaG~xg)Mg z;g2%rf)>ndkCIhfS$bG!vz}GyNR6imt^{1>V%l~SZO!j&rd00&T}D1y#Y7*2B@M?~ zbxRlA0va<$%=R{&k4Lv=Vs%jeE-ge{(3v`%6Y^cKl>d&QG*TVAQLDG zx)RGKM-O6BT78%3qYB~X#3zOId#E{ko!W`x^>33(awc=`7ef>AZ=#*m1s$IzK7UMx zvGP~k*sdGwpw4->);I_fkeVy4kDrDqc5r)|qAM;R?tAGIA}a`DU1xT3`@=CMgt65L z@?m4%?La=#S29^wrR(~+<)cHNP|VWw;67vRcrq7w%s_WBi*|o${=10MidyO zPmn@?!iWhwtTll2EB5x9-&t3F{L0V68GUx|lzYp~1JIS`jWY1&pHAY$F^>%cqf5o}|-S)KC_;i+b3&D71db+cOk#oh4LL^?O|au1fCmogcnQpQh7{pLWMvR+Bq!=-cSCJ zul;U^1`eRonRJHR0UU9b-#@3#eq4TSzRjud(=x*D=gFHQ%lnMV+4%Sts2D$W5Xqb!$NTn2DSK-`0&LjhwTY1xVv7v~D38m3X1R`HX0n&UXB)>G8 z;ZZP@FO!RFnGxCuUa@-Y3uoXRh+q4_^-4E z+@uT*_7={PwR_VGlxT+ltOV9WEj%qZLwho6N-O_17QB2iHUZ{aTtmmVmJb-saeZ=T zjD=r$F1-q8=rs07Dp}7$A~M-IEI!R>UhD~xLbSz*WR;;N16v{Re0EN^KxQ}OEUuN8 z!F{A^E8rp`;d_wIH89TW7Pfz_lTigSL>5L1(vOdLVEnWO1z;A-52V!>ou$-VD`8h9_O)x&nb@7YUQ-`y?ia=+ap5Q8Qeqpv}RntqjmRxWl_m3jr9|hqmRBG$8 zrGV$)gwN#XDEty^W-F?vpxY$XqD3yF(jwV{*oW6foioOhvNOu{{pK{rUs)%7VCw0e zv2aaUd%jROoae++I(YEF`|WRJ^CVHVcjUj(-4l*Gyq7N)rbiu~Y>?_8&9?VbglmGC zn%8)JGY{xLIkPl+U{WoqsrB~UeZ%-Z+h`MmNQ_n|MTuu7Avum7hwHu(kDFsq?4kLx zsxKz}E#{}zOq({ik;J_Yf+o;E;v~SZe0A3;W;M5Y4GYd_PaLI&EQKi~<_cB>Z( z>j+0c)^+W23x)k=Q=bJrj(M{hljs?5KX zv~ZbP%AuVi4}dYkez`5>VAleNyCrFw!tGA_9Y>SwZF$NrOSS8-%9l?S0k@wQYd_2w znjFr4^QW!eYJPJ;W%g<_@x{1uj-d_or@Mh8){p%!GF4>P(?a=ED!iPmo1?|%AR(>D zhWzAg{RG#CHH0*be(QnY#yCfl=vua8WA3W8m!(5Z&_v6`N`{rU9GIaqgff25AB1UY zPqDP*pN8C=cg^-%4}SwQN>(Ui7M%&slPn#naG{S03CQvdz`jkl^LY0x%c$vn+~YWi z*hvH8v@IluCzbA#o;8Hc-Rvw7DU*9u0Y056emIE8B$*c$p6|$=)(8f<%gbxqbiB#z zBbzC+FwDrPvc8u1sXL^x4x}YHWwm7bcX2Z3*%z+96xbX_(JceIY0IJO+X27-o7}7x}31@xXCM&iJSHC)ZQ+tF>E(}D0VY{h+^J@hXtM0D_{E(j8G4iZ%vclr&VdJC zTRHT4GU-a9vnGd3rwH}FOtY!EvvUco?}OOSpEQ)cH-%ELN0Odd zq8m9}(7@8okf@TF!P>8PZlYI(Q)M5=6ai#wdmOBrKUEIUY`}RW;pV#Uvgk%#LWf$u zBkWJj2}mxW!dhCq0xnh)>MnC{b{LtoTG@DSu8*_7ea?jZhS8&U8`dT=k}sb5GYwU> z%ss|psphr3;)eO-V#!(>+5E%gW10}xCg9<&q-L5!Rpf{(#?lz{3O(g9Su71Llq!9?Yg2w$yg-z!Q7H`-jr?Ib99L%1FUk|QgFND`vkynIxzQ&H;c5m=^`W8O(x>HnJU;FyP#wf)F?`DYwEYnC z(v{0zZ8n*0e5$AA&Td(oLinJ&cR)JuYr>6)4afqSR>2q&6cVq%(yEz24N_aBs^y$_ z_-H$?%Ik}By=86uwl`-*k=6;{-cU&}K&enoD2X_f0H`}b-tJPPI$0^p&|T-4z_Tga znU3VPR!_b>H(sYfl%Bw5nE1h(UCTrS-#YWFpajzWz58}^8v?H7_A?p>zmj+goIIVu z)3gJLe#?uWBho+ZA3(nh8^uV4uU@vLxFmR1e&R>VKEb&{p5u!5L(?=WkSlJ zE?M{JMR=U2OsSjDZ@~UbtCT#hoS3f3!iIc|TLD4DOT zeFdY=^}27-ulx<3jJK@!=jU>QR0-C*CVJkyF%ZB0OUzx9vAPvtZLL2SAm=Ud#Z?{g zrm|YWOjOMahVD zV~T#`m~FA`nTV4IUK?{QdSW}|u%qU75bQP_Dwt3^&2CoV`$vhzE4X5AzVnSzximfX z=D|(%b82nS6TUxx`-RO}DJjRA1a%lUHLiF8gLyhSLT#AUlp9wW@VN+k`k=yYJH(FrS%0lJ^V7MgW|54~ify4e zd-}VCsMUtJp^P@PZsh_`4^KiIwbnNulY81XQvbg5JvZa}Ql(>7~eAgp_3DiCv=8~nrbMdR2I&FBy)o4dj3-KW7O9@gP8OHF;PVXB(gr^b~N83sk2dA4{m@}t7O&n;i$_@p!@I;}ru0)#;A z$+vL&Yqp#B`Wf|bPxZds8Z)NRu+Q?oTa+ue=GMQhV2X#bISTT2NXq^6uP{YfshFRv zsIXk+twwg)H>T`VfF1C(+{SG{Diy4fq-X&~HlX6xQH-lseQyf$hIf5fjJLcqE9D7s zuK+>mU|lwbJ*y+zf@j)ur`=}>d6LCSwicl#vt@-Mg%VR`h!q{|PO##s3K=g4ao*32 z^O!n4vIcftMj?}_)!ecuu;R0^&&3~KT3!qOOK&G`pXXLviIu_>+V`EP)C)Jf^F|QC`*eW$hpMZDG7r%#UDz`j&%3TfaK5i zU^Q$P3c{$z?~=}5v=B1bOSkFUR}HyhD#X5SSCQ(>X&>G6LFo7h3t8pCv0g zry>_Y?R2!gF~ho1cJ6gFmUnjKW!$Hvh?^5bjdN7Xs*n3s#X>D1aA~TcIV{6r)i;!i zkHHNu>4ms%vzi|({wv=vkCk5X-j%YQFbbcC?P}IqZkZ_Z=$8{|mD(-%dbZ zvwUMsg+d>;kLNx8Exlw?B#5*_UsnC2@C>le-W~1H$i?nmju;Sc*^)GqJkq8KflH!= zOSR3K&F%}gl7@lceXBmOalqC%WOI$C z)PT02?>_(TkmW8J+Ip&zFfMH^qR@*ERSxVjo}Y90_Mzd9Y)SGjEt`7rSI@Ni*j}@@ zdsMS$cI_W{7T4UzjB*oBFFz$-dpq=Hu zrq4Dr+kzVn)oa!@iq~}KET4XfIvW|Sl(v8^XDTK8T=bv$EpdgksPp?rr0DlG5V;9B z-+gWzCKk}k{vt#)YEk6wZfLF^zt+8lO@-Msk+zh4?|0GKuR+-vDVeN~`+qU5J3M0z z3kYXN&j+;no0-{WnY17M>U9!yo>dg|2{6~OQfz7S4+r>#QQ|l{7`IaV!zYDIhNYl4maIn?_f1tTJIr{?A#OB=|D z*9BNM)i|MB=cD4{8m+GVJtcW(rs1kedK&8utX{*g=WYzK-JH(y>j*ET8}XtF2{(%26RJ+=9ldjK0?cKujIIZhJ%ttn8^*oS#?> zNw8o>4cT}o`glqN7xVk7?+S4>6yl##G9r(E$i~I7igGF;cl4@%-=frD&OD#mt@-vd znj`feh2Co6*}`dWTbQ)ECBPwbl{7PWOnX;EsLzg3az6M%r3iF6Q(OUfq-MiB z($UnSFpK=mz{5kAYM|AG;_eIHKPoZ@W<_{1kx6~ktu=sbrmapjT__yjoR^^_0J|Q{)v@(?Ht9G>C@1d!(k_?KyHd_ijj*9 zGs=1q=7OoGf@0r+`l#`Yn#;Pq4>&R-H6>a{(Bs|+j*zD5r=D#QiMqv;7o6zbfAd

    9#RHX=ASZ}P=O{d{=|lmlY*&@TJU6Ki4pVg^k>wd3w?a{t9cXIGUTCd0|58nimWrPNk5Hg6TAcurx`2kMX znvfb&H4xThT9>U@P5L9A8m*I_=+yk{*AHhgw;Y8nQ`4uz%HXpq4uyzX(R}~#avNu! z1kJ!q#@P>FZ5r22*5u@FGUT0AzuQr5W#9FkLJ6z$-l~U`t*xCA8MaK*%?SRN+HDPa zuV(rWT5OY~s>La;aZho0_N+@#v2JAU*+UOzmGj-I=8r2BJJfmxDiyx6(`oawH%#Ta zU)fyh?{>>neD{>Jo-M0stl~k#GcCB2NS>NBO&c>g#4ZL8u?84n_JRt1X1rMq>8a=L z7IN?{o7H63$#TcF07boHT;fEz{0_&m%5^{jFpW1ot{ zDEKE&womM`vQ@v)J1trB+@`R_M5^jaJqezUZI zA-aNp3|M0DgfQolg>>F+Z~VzoA=022{6;+e2@G33&&>S|uyxx2SCBE2ZsHB=4;L-O z31zR2UZFGE(L}uFfx&;l$8DO=4c!h23BO?F3H*(>u!;fL9cu9QcX@rf|2`!i{<@Io z;x(>dYx`179=>0qWlDF}n?!bs&c!S8ofgmHq}n*t;gb!@+`U+>DaRD8v7VV;d%u@I z81qZnXUp^@F-5mK%vZ>_tGv~*cW3_NBPT%iZr)5MMs60gB3hkn%)=#!6A*Zj+51{= zl|aF7$G|d}YIjF&-nx?XpPXst?ecr^O9k|Ia|z}JKd=Q72z{3Y-5yRaa?iQNESeKX` zlJdBpVg>gs`DW%UHSN2x6US}Fs0hv}=ShG;o3)+@8;g1H?hlkCZLXtf^0TF&--@v_ zm}*x|CQiMeUXhXoU4C+$Y^t5k;-%7>RIY9{mYCLjOuv0z5fpNP(rE=hd0Yd+x~GY7 zXy3)5pKVW)Oi)KxR@PJqSJlA{+yp}Ag0IrcY^ZeHMKh`B{;!^|#j`ax zu3zJ?5n2uwaNK`j^aac@le2p^xxsh|c%G-b$r@{rX`TTCS^CX2%o4mvchAWw<3dWJ zFV28vBd{?rf*B)C;BA&MGFZ0J$9Rk}W}2D_Kd>&!G(o8$+?6Op)&y9*XaUPb^3t@)Xitko;DIjzT`YbqxwZ$yg_dcgiaj?Tib>Gu8N_!x+a zh)9=8Dc#Kw5fBkj8b&BcGe+lNN;lHd4;^D5F*=m)8Vndcx;Jvb*z?=>_b+U(&wXF_ zb>8Qky^qMlI!ZsOG&TR!pc4Z#j+>{bqnmF4r;gqK$hOk1(B;y!EsAf4L`2U0vMxfI zdWf%g==|E2&k-fDm?@7ow@$l`@%8EqA@Q%!gOsn471)y+fLK&Qib_aWzuFLmH#7?&%c@KxP01XZ&|?L0P!C#k+3SkT7+{< zAQ!!esq9+$sfJ)JW*(*X=b8-O2t7#nM+0#7LKH<)C5^;L|Fg@>z zsNc0euWB@KY*rwrgM|36wV7~Wue%HbxshAkYPlc4r+iwnBmTtlG#-8gK#g%s$J-`G z@qti#!6{i!c3xdeZmpf zZzVo+RjX;`KeB)JnzzCazgkt|)P5*4RzD_-R;`#zodyV*Dx*Sui}AZLwA;hkq^ z^+A$+`+*Eg76e&bPLi18vQ5La0NOkte_6MlCv(p~>Uset+$Np@=;Q0XHs&kXkN?3& zg$*NRr8;;MpHH0nCwYQ|!p}4fZ#V}2Bg>6i8Qm?bJzZ#yl})}-q&sS*{su8DX64mX zL1ZqfGGH1SM0&VsgH@|#OAezY$vA0Qr{egohRAjDqdK(5HUps%MOqZF-LbF=X9D?( zHXCtH`O zJX5oDaoIwxVCY4f+GKIk{ynW0v71A}7sHwZt#Da!Q$vcxNL8eZF<~q;g#8pFW z`)|jaDOVe0GGu<3-vw&u$q)W#6g;ec?B;=E-sW;MIscLA;2xKioBFsdO{~VD9E(Lv zHJ*3%4hP!Y(pG?B8dDh_@qR9NRuXXSo0Ixj!hv8xaiIlwU4>FXq){G6KbEM{{J=y}_jlhiA5?03;>}6Gh^G%GGOf}rk_3PT>6lB)l zkx*NdvvePe6|1YcrfE%^spd0bd;GXAV#hk=K5Dq?a@$tGh)*PrJP}DYHJ|>dj}e|JmX%>(Dy;o zBui~S2?iuMwBpRtqA_s_%Ie7cmWh9>LwacbaPqx|B)Sh;w)j*=4}8_qGmo8H?s%Ij zTbKFq>H=dMR40xH`76Z6P@CZ$-f!0Cy!sxH`Q1}s;mPzdqqAsT?X$wu)b(+=PzAUN zAC5CXf5x$!X!IXe9tfO)>n!MX9?t)i{6Xv||EI%gu%c$Rar?k}*DBhea$dC|BgN;o}H~ zp=#K*5`+^c^`|40_#B^3iinjB?Tgq4KaWGIw?wW*`A4pEIDHXWRn?+mV1)^?jQ*ZG z2R#ySlKtd8?VPCUHvDC}NxQFunUrSzj3}gB3VDmmsg`W>UhRpS)Ul*k?^NP(c-2|z zTzGX>HH#G6j4X z!eEO#E6PNU@)}wgI4lLQ1GB|T!p^~&u7G>7?ppXCwv~8qwcO97RwVDoO+~xU`3>tI zG4Km6cfGij{Jk#BmJI+xGr0As}Xi1hpz*C~V@@CpJ@2 ztbjw*`*olEqzfJB%m;$E*k2hqmFk22T?tKp)sAuNr<|(0z74a=;u-K7hBIPB5U*f z1o~9%cdo2|{hmw|5P^diL6j>$Og0_6o8m8YN-a$+#1?QyR*qBM0Ef7(_|T0wt`i5p zjvxTb-cz6O-XJA$fGifCuSwsv!y$T;Kk#fw{I}%ey&jS(=e0rfIK_y4O#J7`d_4iK0kpND1;%Kz z-+6lN^B7KA2Cd^AmkLdZ0?bQmfk|I@P_$Po-d6S;Fkj^kF{x{qor5otz9oF1qC`#e=TwbAvJCBYBcGca0Mza z+~b5Qaf5b&T!U$dHu;=5UaJW1ple~dv_!?deB({{9mI4}ojz0TC6X8S$p!#lS+5D; zb@y~eU2T+PIJc8<4k6kxHL3I38ZTL18<)iDAxFt8`k=Gb)uRItyT&xcxX9PrWVFP6 zeT1^(MmVP}inuT2jfsuT*nO4Zs;R< zn$~zaqgiCz*c&{s3}1esH%)h6=qy&-jKr9&p%0P!7-mQ40`WgG;_OU9eCOA4xt`n? z8EXYH+y02&64G=Ly!0@5^~X%?Of=xtyeZlYpLrld9GZwHK;}teJGAvz#~$3pUuMYa zW69I0N_W3^YkqZ{xL`OKodUEh;zA)0)!DVo_Li8jnPu_$`K(VVjiNw?E0-v{=G# zeeOE$)14H*5jpZyKZ^~V?4%(J-tS$z33MEdVfM?>`llw_eX3QleEUj2r=-w9mw8@5 zb$<9{#H%xVY{Er)d!iUZN}n}AZlVx;cYi0Gp4K1lbAL~iyg0A=JpgpAK9T7arOCzw zek44^N0YROxrXx<>{vWRyI93`WtozoGQ}}viLhcJb$66KLSc3|f@Byf=w^nbe>|y; zAXHb!8D2dMb!YN1IprH!6kwid;0stp1bP9KBahK@Ta>7-$v{G)<48{#7fjs@W`1ti zbfaa4HnaC8awBT&vnN*^16it@Tpq=XwV0|Tg)X)mukqYbP3r99cf7D`-#Shyglu76 zl=;9de`*UR72!*|MI!3~#pqQL?{J|9`>5E4 zE_r@xEzTgd%);+frZoHBk6Tf7n~6=KCiZY`;3_9;zB+b&l#vsPpw?>SG%`Mj)=LWqd5jRB9aJHY_3q)fUbbcD;z{eIU zmqT5;tM)mqf8bit5o)rM+wCW!k(}p!XL;@mY2Vz@)N&lrbXwUgL1QCd##n2Q`m_xE z3ke({m69k*%+S--Gmdw8-=X%!YJD)8fZOLS^r5N7zYvv4d3DEPWk7*v9^pNNQGrg63*ORUorN z^)H0t!-DPR5T^+>mdpobKSiyXT@`)RSzH`(3-=hm;3}nO6}=1+_u9)G0=_j_KP-L+ zF$@6b%^EpSabEa&s5nwCJjA*F~n@tr|>qqf0s;iM@WI>y#8e5E*zrPQe+l zZ}`~y%)wnZ?qd2svOhiE@ohnM@v~ zqTgrFKYSu0?rbEw{}ZdeRq~>1t=zVCDsjWrJ9@%xJHy@+wKu|~vc$7aLOL0V^aK&y zW(tn#BepL}Ua6eq8jkvirJFq!+i|5>xxzX$7>- zGGp-7P;d~Z_e!tXQ+#3@UUW9!u%z4iDE=uy5{uXh;dho-@W;{gQSW%gHJB`h=64nJ zdGnQabL;II_untqpko(3tz3|_jtmp%%?}Z(fzqb=2SUHgaB&<2Fs~?#?GKgs1Q|he z{V~kitiUdidr5hruIdZ5AwFAC+7ousTX9}nS@99wwy-E(CAU}2-rkFjm*(@3o?%zn z>DW+Wq(256nNfJOvgc?_w|RAGR_ylXI92qXxvJ%Zl`URvhwXyblij>VM#ST5p(xeZkEoHYQh$}b`;x8=%5C0_T|qy_!URqD|M z;vV*xGz*qh^afumL+cEGI@Jw`W_ z?f5z0f*nb}2&BglocFp**kW$!&v5zk#Jg@idf6j!M&F*el@tZ~K1!wKZ8R%;EdiFB z9eBI7B@}rUK~TfpHo$eKVs`*6>1L;9ALJ}*)LcS9N-xP}TsS#?1UGyazDuh5C^$21 z7pG~xf-Nl`tUKqE`X7^4zz1^BRRv`YtagkJO6b83I<&jFBSQRu$;#tP3RUvw2bJGW zTqqQj`jiqdwgkcI-zk1V7qNWY)0H{RdqpuN>gs0f6-&2qlpQ@c%w1mf8VV_KZ4`|Y zm1mj?n&@{AS6TH*1IIl839Lxily*oL@NKGF@bL2UIPO@oERg+hWL4aP&5e-fE0c)L zTpnSOM3JBYBT$qtvOlCot@r)ih^^ZjGJPM`!o;XzN`?&`w?Q)&hz=?y!ZCANv)e5DK@{Fe<{Lb z(8<6_RNF;|yU!xWiH6Zl4Wf!_r`a&5XtLExC>A2Lmi`RA4Ez(#Df)hhwY9~C!sA=- zxT>&wLeiBA;89)#jCc3*xqIBz>0*^C+lUMk@eW>sH0M6^A#U|b=CJ$AwNPv{)dZ`h z6kUrYbE_VY|Gp)UdY;hu5BZ%3TYXzb1WAj1)5Dy&8-K?wu#)<~yX)I44RJ&!yJo2{ zxQF^#wpBO#6M?gbnGeC$9rMmQqi^C4sAZxB-;>{RN$2#eN*uu&7k!v!)hl@5Ww_mx znsG)r8{f?0fpVJOkie5JQ6KPMHm@#MoD`;R&5`yeKy$_lvgY zFn04Z&zO0Vn}LINZF{_V%#M2L9GieYZhm#`Sk-C>2t;3Cy!2^lud?wNj(PDCr!)=%oBgDX=l$8VE9$s z3C6n@Oxv?2M8DU-=UUip*m*@;Sj?v&h?Jq8FSmN+BBg#2Ii~dIMwzq!csS|7_NVwB zoD?kS@aWP*jzg6?wj!VhvmW&o<)ISS!IbyE}w$(U)k)=cR%mbX}k;HRAcvQH3jiV=Y-0-BlX)NHYA5$S+N2#!oRjEa-bXYpEiCmpZj4B#t*XXL$CsV3 zX`UU=wtBs!nP8XurS&;GUKzXGwfw;DLdg4G4pA}#xgNFNkiIbp-N+@JR6V4Q?@`~Y z-Wn8(3@ukHG|_a*u;?5k^9k(SMOoc6zsrV~L`b@K@!!Ky9_Fw7EF36^#C0J!QQF1;K z)%T+m+}t;O-JwGk+!>{Nz1!!n)m7ETnc^c3&R|0_wxN`%G4o(&L1+2JstxE6??%_( zGe9UtH?-0hRfM4cwSvIzPfa!Q_=Q88IX3nGBa<$QF1}<*IQfNkIVUB2IoRns_^G!~ zNx)Ojy=Y8In^GLpuTYH>c;`cc8CjY&4JAbgmkKz^51L%(h6OY79B@0pxxE`<8% z_-on#obT(R=BJM8?Ulv(rXQGi+P3ptX1vxUJJl{lDJ|(JO*$_HukJk4=`mkoQdgmg z&D6_K%kp7j^n|jS?@rhooF~~m(cs#cPU#Nnl9DQ^PRND|Z0LF}XK_ldlyw3N4OEZejTAw+>R(BU&)G7O}G`sy(D#@rAa( z2*}S{&HY)9^-$je_{09Elz5#K@4TUb$4N!@6AOFIn(IkDY(w`E+=GFK+Dq#C;o840 z%D-B?6sr^m%CU-G9WSfIpnEFRy^H3^o_jQ06M?oDO$dS}Y2; zT}V2D^luND>ET36rYZyi8US=j`Z?*?WtYZ=PN4pzwsY8rGnv$i<|K8x zR<(+309sufk3rBGLbp>pj{E(_RN1l$PhS|S=g46w%^#Mj7Hs@|lDg$t@mmNvT4f{U z&}WO#vAreHKQ-ymGpH>J>j`wmns6_Y)(vqN@I1yYz1PPdq-5W}L@leRAe}1nGh{Gf z8ojfijd(AzwWRq&RCTwWwtn7vQ>B;n++IVfENqv85 z%a6OPs9|1EP#m~tza9szCRL(3*epD{_PF62i}kDa6ZW#DSu=Vu{Ur{lmMr|e2%dfX z4gzz&Y`neTRizX5Li)OYrzkx6tZ6lEb8~@TcXsiiqak{-_fmH+jt>>;=WfD!_U}#$ zH6MC_<|c!~85Hqc%gv!^)-{k6+lyZMohXH9yjB^_;AWO(5c{m-@T7$=vuSE>{{7E^ zlAS!bWi^}AP@sI4A5mg$db9Mfw_L5VFW_-5>u9DmzaiaQAlJ865mP9wyIvYEt-=Qs zD)pkl)i+|3&j$*1zjX|y^4oONC@YBGRd-*_j1|4l#F(Gc_ZcdA-_rE=*x{cMhib^~ zn1}oEfTUh4me35ELSeP(GrvB6kt1kLcKYXviB>PYMGGxv=4Aa#wL$EiAlov;wFfZU zeJm@x3J^n`6>m5RcF33M>B1b6@H>KITEaVT)g2mfDWS{*47fcLoiSBu!|Ud>3J z?;DdVv8SCv9y>YOlB4%7QGmw($e6ZbRRkD4UW*PH-REDIq7dVIH}W7|vRvrGiWD;% z)gWEwr4aGfG>oeRUBThl6hqy82#>4b%yiY2;VDaA<$bXAb#+nk)6|)rp+?iS!t`na zlAhT(1$xSMHpY|ZQo`E@!hl|)`7Xa8YM=Ih3$<-Z-Me@MI~h2hVFEe2vzW3>jN7}Y z6yHv6u-~MjUCQNyR#IKi-=q@v^zDZTG{h(gpAFFJjXcOxFI&2Pl&2;MGvL07*S9(xC2BfPs zEy#b!Rh{Uak~dNV9it-|sSw&ZTh>l;9+iF)xe-E@r$fvF2D6c0>mneDm(j9=E&2r( zhlsB_B(0q7>4U87K|jNgN)IrN=`J?%%M?6INuY_3tGVwY&Fctr31d0~vr5U*N_hEs z*27q&23YF<9(f8Flcml9Y|L6LNXmr6iEV(hUB(Xt+!VcNK6VGyVT}kUDxeMp=7HBR z-WdTIv)RdFYjWyf)z<0v7PXqRqiO8fR{U1rbP_*EJae@yDGpJl^@_?sAZm;k=KpmY z8$On2o+fF;wOY{|-U^SjUTaCdLvGWbA>o11U5FyXmzmLK z9`$Wh$^sr6(V@r=$qVF`N8nHU!)gnkK)1eRFHp4+b;zC2CWb8cYar@oOHr=;rYKwi1cy$Xa^gE?4iDb)8Z{ z$F#Oye|UIJw}K>d_*n8MIx$?RG2BNav(|@J%kxd`_Jt0tcA-3v%?uk4%0st)uFgzw zvlpYHYP}%1%9}UFFHBt>r^d645vkPsz0(d?{F`g0>XNOuR-;yfHjDNR{Sm|+xA(r@ zz{`~OrG)h7`NK*dPEs1>88UHm-%q~5d*5%l%VWwKN89an9*3%D(qDbSu{4Iol_|Gy5eMIg~}DQ;!wLITQFIQ3TuY$qua_H_n-%!I#e698vaS!ew{@G<1i{Z9b(f zOI-M}PLC;Y#_?jiWA$kLbUsPgr-IW~=jjJNphA5Mv3+fa)e@=Nj6KLHDb{?9D0Y

    YUh2 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

    xsr#WPPieItU|9LHO| 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 hW0chK?Y@UKc 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�ZHPzM#%kJ_dg}o}r9n~jF8M*`(E>w#mPeg} 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%0AojhRHJCm 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⪚ic@CY$;;*EeePydO3hWN!?>^Od!-^Gm*^-yo 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≪?$-loS4if{&w^b$-G^2F`%xyO1?7ZsJJW+otk5L{{h$cEI;-<+bAqM zH$q=bR&Lz3k~WWpGSbtllBlNY;>2uqzJhjDWtx?m4m_u7r#h~adw70|XdbkU>auPg z53ez}?(a0~(b-{(1hIOxJbkoGz73?Rojm0o&~f%+iax5OVxZ?=_;TI@zGSX^*NAtEPb{0Qf3rgPbDPl7WCiI5? zK|7Tw)#u!gW=`u$nbcyYVIz%fEWpkRojSZ z$b+4@Kt6E_TOyiwwC?cmSJdQsGdE$z*eAyGeU7gQI#IITCO<0LYc&$z9>MikOPDw@ z2*8$g7EJiK&lKv79tM9Y3`UD$1tUYTJH}?+KfYA*$Ck$r)Gv5D#j{Im4d3ed=u>8D z&J$ywpS7W#=Av`T31N5gao}LHRkE=h@8RxdyY3HQBfbGW-c^D5DXI{KCq1#ir{Lus ztsP;`VVD>t3*nm|2{(^0*Ncev$vtXN~f>*IK-Zo4wB zF=zJ07qxF=3we22U4i<~A&YNb!D_za&gd#rW=D?*G%ep<#8VqZ*Q9bry{?DEnM}ve z97I_XQFkeq->9+iSG@o7ghH-%y{yQ6NhSyEELjQc#*BQ=!z8DO%FBKV^-&_sV)Le9#m4r@ z=bNh+?*(~(+jh@B0I1Nu`>MqIlRkM46y-UYx$2mk9CO8FIAxJwJaN=KVNqbbm;9^j z7jo2u+g0bHV0jnj?Mk*QkwJaW?-rP@P;Co;ZZHN-g* zPS}%V*>vpcHxmjJKEIUsG~jS6{Jvf1o1eFAY|ut=Dtil8CyifH`Q_rG+9xy(GPy#9 z?=9WUpnjpxT(0dm?D19jNVo2uCHI-yBbD0=CLGn}!>ua(WmDEY=&#Gpl%x>)dD|VT(jk4mt{`iRc`GU-6+c*;7X_|^NompgT_&`hb zt8Bg+zV)0TuyDP*@BPX6OzG}(hDkAzFD z{`t3qP}|K2{L_*5lYB=(VoM5T+jC{YR-jyRg9KnL!akmgLkMfXYtV!I>`Y__kzZ)W}xq~ER}Qok9B`)+Qzn( za1irgK_6Di9T+szh~(aQF!*SeARjY97$)X9L8S6s0|vSiRVsqXY&A!p*=vkUsM6cZ z{f5AJ_+EkE=NUB~~D zXzjR;0IX!}u=)>iVhLaRCogcCBZ85jYS=!gaGR2It6R;onX+AtHEiQljTx5phEgH5}wbCc`6fm0dx1ak19|c%@pLnj4rn zf$v7 z8=exUM)$2s9BUBWV*4M-vp#lk^_9+$_m$JalBYxkjoIewP5Vew3cKv{(zX?Tz!B;D{J;ISq!=drb}9-wdqK zNk;F&_(a}}_@4;jAkGRM&KWej9GBXtkmrTx7K~YMNuNhuG8ad>)iPVfa!VojV}xn8iwZlG z7K2;mMOy4BNpM!}R}tZOZreQYCtp+-Rfk)ES0R|6*FO1m&sHowt=0=|Z>Z{Bc3kmA z^R3P;qiVK2!&HPV?YN3b>V@~gggPj@nWqU{8RhPDvG02na(MP1$t~ahqgC6`Q=>+= zY+wEr%_r$d?+!obcn{J=*|oQQ9VE(DJ>vUrAKdqevmqYcbB`jJKyi+~W?xJ1v8caZ z`9J@qWz=@y(CWw>?Eii{^qPs2Kgw`YV4pof6|?Ujs-4Cqm(H z97B1}#?miJY2O9zgMP{sv z@|+8&g&YY6lkzn#mdb})sku+SU69d}u)UE&q!OM<)Apc`iNr*sdYK{4M~%2c=+O-y zp2`eAH2Qj}8<6k~H(d*+5f)FR(=MDiPpD8DHsxmB=^6W8R}DnIw3oc$G&ka{(%Z^ju$Pr|W~2@ge_W&;TL*2ZzK|P4P^rc;jy-GtM6CX#0AW8uahwjfDT($U+#ED9FihASMWN42V! z)l5JyR^5Ha<3){GD8B=F?abLR8hN?6vV*w%mr$nAifT)guyQVMLAT@@0zAT$wEEgA zafe@?eckODPj`je%w>A_90d%0V>vB&A1sr!h@6VZ_-STRp-LZI8XGR86r2~R2#P8; zj`o78%j2vT2FlO2@%}7ZoosZHoi1b$L0rH}DR9GPtg16!+adJ90gz%{=ccPqwqbG% z&dj2kR3tZhE`9D7QJORkCx512(v7o5_mA zom5j5*SAvf``w|eJ=}w*Zo?Qx+ufb+X0=uvXxZPREE80r1=4dcc@uq}h!!xQ?_Fd2 zjkrU1)(B&u&E24Ytq0J9e-^4Q(h*pEQJNToC~-Q}f#CR|ltSr7qj0?Nvl@|KuvFJu zt4;fQlIfpUw_D_b**86y`3;JIrSYqp9j6Wk!Svfd#RmfprX5O4biJf{NM}}?-ByH; z>(5=@cX}3cmLER_&r#&9E`qeDJ)NvN=lF!cu@AQ~iJ4>2k5Zo$pKjiTQZlSI|MgW- zBYSAN0CkpGwu%2UkS%wReS8lQDYgfr+pb}KNf@ujG$#qEi_<{zu~Zq4)jz7tc#gG)ORI zE$hB}Mbjz3U#}?+u8H~HHJ#wAA-mTkF^i;p^xKh0SzJbo^cs@gKIg5(_U@Pq(pvY2 za~ibtOq8GbdhfO|m zW0*4-HB0~Yg6vMA-i}IDnBPl#{!IOQ*494nx=ad8v1Vf60)=HOe-C@G+Wqt`C=49N z3`-JCFjk{ujYMTK9~Qg$!P{J&sov@~?MnapUA(A)O-8BW4y(0W>CV*$UbkY9 z@y@wLNP2W%`|ZG6a+*k=9!iN#&n2S%h{0Xr2q6@HU9$<m$I;P@}IR7>`T(H8c)V6x(7S-FJ0TEx+W)g<>~(xRcts$@Zl=dX$4^0i#xJwCnn zd7tv+sECLg8@ofSM7nk0!?|~HKb43}R`LHxwsMG#Hsevhi(*+kg(m+V1~R~R&eM3x zQoU#$X>nu1~1XQAxAz;!EOkMn9JH4lL#xV`JH0oCPC#q$41tY&}X z*Nt+6p&~G!BNXSWMaAeORcL;dDBh_Eyr0|`h;C2^zWmwa;pR|~yQKRc$w}AVUnvS> zADeil18_l36!t;0i5~Qrse!)Ki{3^JQF+341%Pq->Fx%|)U!5ZGbTFA6FV(v0W6q? zR++G^F8%=Z3gUw5eyj`mLa=k%n-%;o$}|;;UdeBx?yk}Zk4K@MYrF0f288;`wn4Yw z0CHCUiVFPAy_>8cPP{A*w!&}K$;!|$%|3D3WVSDGfV96$-K#~deE!E$VpCxYh>WvO znr_wml$j2`V%V5jV6{-2dvCQ*^!`HSeAKjP)BmOim?SWQlc8iBncq5OH8h?zb6U={VyF zHJGx>$Fvd&sJi%C+jXJhILAzI-Lbx5V;$0?D|hFelW5YvDNn55bIe~gzmi@3uSv1^ zLZKXXhnBTVeR>ENdpYW0M`2NP9KgM@i7U5PL6KP>o!OnFZ6CM>f$~P^mM+GG7b&y(OIwTXLE@9n@81*?t+!yjl?#cU6e866}DS4Hg6c9i;6NN~iu!{S{ zGV>n^+ez7PG?#e!n%X0V206_yW)w@;3S)=j+$AN(CN6To@&33Mi+JYgXBD$;y8*tY zbrW#!fZ?BWHZ_0k<|KX<&dt>>oj;xX;+#PQ*;Hs^}l)2?dyocj9_mrke zt)|L8WBDW)GgNp@O&+X^1`iM~@Fa0{Mb=5onl7Zj-?`hC3}AIMu(~qMvBlf|PD#kq zS2JK21`+XQ`3fKBRMf z-e%BHq6K$P7{*yhRX}A@z3Kvdv5gE;5?+IaEK?vy$b4Z0TDn$EW-u#XqS@?D7T1Jz zEv=AZwtB;B>c@EOA)l#$M-uyUoD|<0FiU{7gXYj~!C3X?DkuV;z9J%p-a0Gc*_z_! zmUJEo^ggosgA-m2o~>*PzGI0JXyiomKU`DBhS=9=3qYN{xVbJ36?m>#x&~N^M8B%E z0#dtGy8PliSM%rGnkyzYE?FSboe=hvFJq9Ri<%C^@YN+jDU&cEPk-nP5QHz_g4>O~ zqtU*|-@uN$SKpvl-U`-6-gl6nK8FZrDOs71kh}U+bjmyF^*hP#z+tde>n?zq*2>y` zA?Mvwl)>?K9D7>@#2fSdL7ir;Ylkuez z<;tr(^9pClisqhpCHWCy&jq`2x0nN;qm4dgI1w7XDzS1r&5CuI=0 zc#`cj_>B3>t)x3Ko6R~jshIhaoo?;Si;9|s{rEC?*obSbyn|FXpur)ag=j6tV)o8i zqd$gR9d*q$mzLc8>En-WPH`4Xf@(ok^lbV2?i9gxVjYj}&>xTeZTd2gm$*LkbN1aC zSSofdWS&A-CW=i~+{H4iyhAn^e4LNJwMIblfDh#eB^tunmqqHIZA3U;Z_QO;=b=% zR#GU|FdynZljbQ@CScmIhXDQBU~GvHT&Xd8cfEQ))z8P{4xhK^EGl$$wySq{g=e8Ty4EB$WEO}MW8@Nt!v zCIx(Xh+_Duo5FKmPN=yoTU4NUsi)(XC%ETS4=f>0n2m61tHIHNEG?Zb%=}9^g}t_8 zrKgG2HTDN>w`mjXDaiCclYVl`dc%4ycq?VaJ)p}&EV;R%MWBa*PIwS&l)?v%YM7X? z4({9`a1aw7DG`iIo4c|{6n3lqQl7P5Owybw-dhwyPhx{CU46|Z**>D8L;8dbXKFNL z_)VMyJI~yVhUsou>-#tNwX~V#47ddG+5=x;6{6;ST~?<{(Q3~_2CkpY+nqxfRt{_Z zyczOH)_`Ea#AMRJ|%6CYF#uo>rV-$*`}D#fLMOSC7j!zR%mYJ1iwTeFWN>vGTBPM7) zUPfAgG09I=;Gu|*(~>rR?64ZeZ^d1Y*@^&&T0a&Mn|e|XB|%iOK2WT5jiXGU!@DX zGD@MPkWYn958H?>;WkNcxRdk~O|l=oxNG~<;|yVSFM0Fqd2SL49$b4|F4dS8lVLN3 zU#jURpoPm;`|J^w9C zj}yzH=3rvDt=0SxsCofTvmGdSeA?w5t&L0PuBeO{V)|+##pEWxck6Md#A-m)DP{(e zLP=rdK9#=Lbg*NM%X0FsJA4W0*NCB>n?74Q!T?&daZ}iaPTCp;M=?RNZ36**q&$_c zTDv~Bu)MePoy}w1L$_p7F1Ztv9;&Y$`p#*p>h>(OEndq@9s}fY2n8NgqW+0b5^C9c zuiu>-!d!_pPY*1yYnH<*Ru)!?zRGd3FZ}-bfaFhKo}1cf2f`=-xEr8 zdd~C6FS*F*M<0D3dyQ7wS)q2<7QbSM+y5v!3%@4cw+&;`A|PEVCEY#Xi%3qGbc2B8 z2jYC&Bc z`C)FMN)LxX&*-|Zlq26?<(-C2M643RFvZmx1kDk>3%3p-^TWUD*}Bz_Qm;RsZ1}ll z<2bCijY4sF)7y%e)jKE%;}6x@bzAmHTj;kSRU4C~z*yAGH=H#zTMqzi(8w*jcz&Py@|oAm$F!w>w-*<8Zm;NQKvS+vw=15{8*H zh;@Q{K&xP$S)j-@(9go6r!Ui|+svddGdH;clJq}3V@zo2zeXR4$-{WY27*y>LBs6C zKdh{YnTNh%jIx~cZl7E=L566F$v_^#sP6C%Z9zlrqq2A*usdUsB+89E{gYql9ouHt`HZL=-}{ipi9DQ%oKpsP>v$ytpHx1p09 zeX6ABaZuaEeh@gJ-{3EITe4qMpnstfbZJ$QIr%9uf1$H%O1*mf+R@2AHn{mLc3LoT^d3V1Q*^=o%U^R^c)H?_y5;N_OylYskc%chAW` zBiQj^O2e3ZmhhMbXJjS!jO?K&gZhp=%)gpqgPNl?ckEcrjr9v42cCNP*}j;vTwBXH ztL^DVRgDYu1Xl)uiBYdy0cj-!GG<&yAI5B=vdtrht@7FY;;ynbDytvi61=&DC&hdo zB?#blIj-f(>3Ur`kfWcmWnHvf6R-ECb7meApd>o|Z*j4~0gl^1a^2H67o`+^h259d zZM$QP2|v&2^fdXrL|z$x^UvU~-pL%$5O!S+F1`Ve_TQ}uJm9pknqLcB{6R-q%a>~* zLHLuU@P$h;^v7}d%UYAlUwn;w;o`ZjH((Os|KZ_s>Uwu==mx*TlEE=+x1ec*4|%Tu zWInhc6PYmPB4pK?3izAT)9h+44yFT+9?d4;O;1-W0Y=?1wdJdz&bx0 z(WC=Ez06n*<6z)@&m+@byd{cf4}3UT$aIQ{k8FixWRuHZuO+6}D@xwBd0MIQqrW74 z-GWEk%8uXvxii8Iw|PJCl?)E7a^F{2qB#3j?0V7>qV!FPMJofn7Sm#SG$reA)8rK2 z8FV|h`@G2U=nsU`gu**hxzRZ#xCLEWrA1BxE6uO6g|A@6BR<2Sgm_YEN6W$EJL9M=aFJ&_0=9K<$mb{sL}m}(?U zY=xySfbuLcrIq{4fOfRf$X`)Dt7W4@ty&kHR{hui@M_j@_35V6irTO<408^RdnSTu14Fc_7G68NB-MCf!IU5fy6u zZ_UxWcaZtzoLHbRV#zkS43ciz7Sdm(g8MG#2gx%2hZlrxyW^D;(hF(YvjG76HV|^A zXqN96O#WN){iHHI`r_1b6lk&^3r4}jh*h?{#Y|XAm$b=HM_8JS+v^hve}hv1UHt7e z=^gzrm-2z!fdEEaV&t7c&TQ&INwRrWDRtiZ3hTy6*XAkyve{r2PCMa%=14A=&k{Y} z-6Z&u<#6-r)r}e*LQ`@px`dT3@~^eRjAQOpI!L@@V)5&ZzE0}43&fXQtg3J!kP0{0 zQaoY#H`rrraCC6Tk6dd?=)ZU56HyQJzI6>{ChBYgH6f+{B#de(J1~$qv;Jy-idQb= zBFQK*rQ17syX~mEVv;6{K)MS2y;+u%p=5-6Iylf-WP*-L;qc(Zo8U6}zF@>%KVl*w zz{B5*ECLoY(fBu60{c-+&99$zsO4>>-8Bh%~6VgsKtRk3rnalM1%pEAgTW*2rLf1OSB?6_o_ ze7URiBRfkbp!6!S#nQw{e~l`R~_s$^C&0Yj^e@Q2#GWn6!5}6yiN--ZSe0S);$)+!i5fEj*Ja6={{pf zdS8?$-^o^DYC&V1N(P(T_iK2-V-RCvwn0O0qrDY!1ZHsZel@N$k*?G6m;Kp{K}tev zmrcUs0M;!>5l4UmyL^hXss&mRtVy>NaLof-fpbPyv=h3Q`+9!hsw{_^v8+Hsxu$rYp8``|2aal|ag>a+Kow=2zsWv?kp%XYqP zyCs^6dhm+BP2FhSogmfEx=xHJb1)8TQ@u)Gm>$Gi_W9`k(g(|9uUm@iZ+u+2W%M`QtX%d7Ug_l^^5gT*Q%RS&U;^NR`S|9~U*X8?USOwVpRqwq*Yd z+LzpH6I!IE5iaMH5|e0vud&uN8CEDXSIV7-;65ae7Qj#pHcrcU(OTrFMR&}5=^r>o zQeniv99tx~EWNM?dlNTYSO3Fil)VsKv3z!8^WK^71sEr|M@dBU;T{hM5H_iEH3`nF z>^nQyG^8tyK6~mcp3qtek7*avFH6qRh-6JOiq8MxJ>K9_xU0G`F;DJ(5JLNeH@f2O zi&F;?qx8-}m0)jrzn*l7cZBg`F7^Cw!%uS-$A$7rbq02B0@XHcSB#^FCHy(NO7l-_ z3>~MT6MPBP9rElc-ZFA)Ot8NB_T3P!fG)u+XlSKMYHo>;l=`002AGV)zddWTvq`*9 zjWGSeH+V+S6J>qcr?G*vqH7|MP?+>OZ`=Z$sy5w{8|PnjJRL zu^bmp7Y_5ORQc#;EG7I4+TvIP{bZ9S=45Z)pnFR2<;ccd&8e;Z$7z+&mUk4NNj|S% zK_>%@`v3`{f)@@->{^Sr?EV71w|25dYNHvQMt9|#vLZV5=;Gb-4N@BYhdEgNc?~}e z@C-i>*L&;_=ARz$5Lp;?a}f*}U~5}V*aXX(B2lIe^qsK$2t8a*OLeH`uNcQRL{q-Q zu4k>$A`DIox%(4mxdo+nxP4K+(dUh7jycVuq2@pO9W}5{XIfFNgB&0YD(2dC_k z-*(`1Hwot^*!ENtQuSi$q97|QH^vU6 z#(l;J3lgm90-OQ``cchm40QfLtbg{Ct@xvJ6m9t@cg+_{`apF<#;0i7Oz-UNRRpr> zj^XpZ1Py09ZnA818uKaOB?d9XWLMgdMWC=M9x5odqODAhGliJbzampB|xRrnyRiNiDTz9DUytDUo7U{KG(1gWO zOcPk}vMlW~@tjEVP#x#%NttUJxGvODS!IjLiOzVb=Es0$)nV=Xh%=cn*XwEF<;&v` z@CkCtJtZGI)H9}{i0kR9ZGwKR0$S1Rv2Xp&9R8+B)b~845g&i_n*12szL2a#95ya| zsnKcOc9@YWomd8wcYGiUFhUUp$kw6><}^;~DolzN{JzkPv(so`ejgLdG$FGf#|iP+%$a?7gUTFlWA8Xy8gOAHGPfUR`p)9(F}YysetV;S z-EH2HvD?;zq>uV2QIElu-${QP_>%c zIcxrGkRYT%aV~(0bR1TOOiM%fsZ`k=pml@*=qXJ&74a5(+`-GgK{=E$3*;tSWP8oFS3xh!bqjUL~Jkf z#e8g?MLL@G3|cm{qfQrXW^C6WU^BK0!SPY@qTm7;`3fTo`(~apjLYS#!&~+8Gk$BH zDZ&jikQ5^dygF!uG2P6HohxYy>S zwtZ4WA%SYKdhwr>*rC=2)|{2>nAMf-Hh0$AeucTO*@1{Hamb7#X2(k&LjE)8hrzem zEl&ecyGq_gGgzOtQcFeU2_D+O*3ProU0>*pij&v&m)Kb~<(+f29I=wNH_d6Q&xCr} zo)J8m)fZ7~p!?L`E(Rd447LIDxL3XL`JU3i{74p=NB+Xkj$baTQYGbrPo=LJ(UtKm zRtIQb6vaRJSxSDzaW{@YarXSca*ofY@W{c)e&Krl?J9bH#V(dxb)5J~u4I`PD(bj+GL7y2u;VEh@1b=``cDuIm;C8GKuAY*8Nk;E34oGw zYD=plu9|Twc@cJ#4^;_P_vt|tCRk34e1W|I4TXFZ^sy->gP*_mRm$Uv=-*pAAMKbl z+}!w`@5?jQ!Ry8X$k{V=L%HKJWCVP3d%-39 z%pCvb(+PT%@vm7}WADMyUX@zLxk~CSRZJ)G)}K(}8Tc{I9b#pj<3-JA8NPfwWR zRS1OEu^u4GY zq_WV7dG^j)h)b^Yuf!)NZ~%3a$S6q~rahW=G(=S<9{)e^{BA?%rQEz=94*2fXLOdE zlzV0GjeC%u=@4;22xb_Sq;Z)L$YitlU2BnR}Z|mvM7>pWo=*C2iWa%VuqCe;eD2`($d+P^K_QIJQFSy zqvz{%3d(~JzejUK6q+nTpeD^|{wC2&95Z-EAc)g2h{rW ztgeZW=t1UwIJep4Xb-=&X-f=WoVj+CRiVms+|#G7Dr%)sOwV0p6mb`p;`Z~O*VN;Z z$!+Anu)o3ic7vlkSgZc21aIuSTqu^m1ywGIgudd(toD{XSD083yEJqXr=*K;5pJw* z&iGrbFWjJdl|`3(wRB8Uq{378trg!hFoCJEzuZw9b}0@UB_S#&9gxYr1dM3zXDG1+ zbloWiaL&RxCpOYyNt>$+is8-;MoW!JzT?R26pv;{+?zJ|0OKQGnmSN?iOX}3BAO{9 z(ZSusgDB=i2VW|9@fN9^OG9)eW#T9u7`H~j>%F<$jIg)I|Zz|sJ`Nb zqSO07L6VilR9wX?VfgIg0U7xaG8{sKw?knoM-Hieo~Lcik>D1f)Z0$F#5(SdCp$!S z^(!`rlBbf00=~2a%77USi0L{7M%{^G%z_x#);OaILuA4IetuO*s)38|uTJ8~oLAg~ za#PQ+z&OYOJ7^0FJ#Nd0KDopfJet|~kvuk7zJP@dwD~0(#Oxjj&!SIfm_TiDzVZ{{?Tx&M)(g_fCsfm%fO3lN_8WZPa$H#}qX!icAh9XF~Y^K-5k@j#=|SkO`Bhp31A$omtfB_l1u}U*}QGKA;IuMUiP!f@%!vV{~dA|>N07Zg%#`(YsGO2w|FQ`;?~k`-GbCD~39(Pc zA?uz{R-w@bfN751t0WWC-RufY1KC}b*A3h$bmQFvJbN2FJVaEUbsJ5Hfl^f7rlKlkZ?k)wMMW>E{XwU>u3Z`tzTF<^9%fu6$Xoh$q-$ z6LgIMN503H7f1PuOitDRPpsJdOaRS-{bz(b39ctg@$k9v{hrbecaG)kv~;#kRP|W# zXlKWp*__UXD7dlWvKJyaKx}VvBd*wRa3)D>psO2K@YlGx=w%X-Ci~tpxWc*li z%?{mzEUQxEms9($ICppY16jbArWrA34>f9<@UbLWc_n!}emog>6})oUh+<8%zKj|z zPJ$8S--Dh_CS!wm_!s$x>!acI;2+e|7xVy{S~D<3coKLRyA;}R5++G&4%$=p?SmZc zx_Q6~m#iu{IkMwJH%saq>=-aMPHQGpVn9~`Lr6&1VtTC8&^GD?Pt2o;irq?1+a_uI zEv~Y~PEdT%>!98>Vz{6^P3C>0IdiB*V||jWjA6rMAL*VQcl|&oNRsXR)&K|m*^(SV za=T{q+*YoEbQ+dsz#eGOCT9;c8dui=`>ykW)VfwSi805bKu;CkcGa6gCS8`Gfi9O3 zkAOm&^gA!x>2}-1Y(JKgRWc07t{{NPBK-P|^X^=ugMofql7LjwuFXx}(=&qv&D0xy z>m0rE>_A)T#efA(Z_#JF&W4 zdXD({%F)rg@&<5fOmgok&t%e_0=#bCnKL6a;wF=tlXmZ!l-!^H;mO$yhX<6ZyE*P( zyE-mYgrl;*xkF)g26I!DMPETrp6{P6< zpGWq!g#vW=iSb`SB~p)TQ+7zzV|8&_UJT2|8Z``-R-nHN%mFL`H^u7Wez`oQvQE-N zNhc38de&(AbQnz*2GX?_Vu{dQz4OfxJ#w!b=REEC-%{G&R&6S!@UZZI>W@+O4n6z! z==ylnxRG1!yi#s|HQPpWxpeYYZ#TVcB}YOlZbo~mhE}cA!nl!WWc@iLWy>8s#Q0Lv z-yrAR2shHYh7YLHI=coebEsWoAyFzAD=SO5Q+(ehb6iu6kFC>x9rm@g`w5fclkOM7 z2JNr%ee(AaEKx5CpT|*W0Ir)7HmJWB8sz$w9iY zSlVygp;EjWn3$wLceLD3X|l)1`=@INA1|pdpm3jG$Y3&^BmVRw?xm#(-CF|oqdJQI zkT~(IM=1T94{v$mpQoSgmOYE#@Wnb^7a7NxrV zB}9;0ttLNza!KLY4|e_+QM}q^;(whpe#K)h)*pR?Tvc?2S-Y6X*QN?OWa=F^BHM(( z-ipWa$CNj^BY?^;q65Zk$(@PPOpS?ZgjU+yq+4_&*ky^bdzsmHE7e3Zt;JVhJvC-C z@snlVoezn?)_NKlq1(M&E+cPx_Y*-C2k`?(zC}&$C6{fkjmRzf(Q zNZ+4@GPs-be|WC#AnJz&78W=oWb4kZyN#u9^S1dLK&om=u){j1{BeFW0xRwB6N#%YW0-DXX0 zGnPyMmyzvrMc|v==ism}AT(p!Y9cBI)PXbPofb*nJ&OTMJW05*ANZhpO`a3^JGog5 zX@@~T7(+FCelNOkW3StYS9B$Kvny&w6}OFk zJ8E;NKzae!{bWkwtCgO@I~uR|I{o`LY(h?nxL99+l6)_iP86`czt%<%U;Lx zEk{$=jKfYrhQZxBSTF1K(|=o=^Qq;AV835zwloAN0>iOdZWD( zbimOGXd{9Y^ViL;4}umg^Q>=9FmF)78;1chD7p4BjE=&bSmiOJ*+ltarr+Nq7vVjb zGeN3vPvh~RV=bZ5fA=!=e>h5Z%NWV6M(qB|R~e&%3cj~H9xdIyu=%tkx6s^K_3@lT>$Q<+@S>NT zGbV2{i{;<>Rzg&xKsbH2ab9?bVt!T*vC)j1Q2c&hpMo!uoDk!WH?fxt46m~n0;OHa z-(Loup2@fww!JE-E=sz?Ma!CK)&;uFbhI1c=bImSf4ay8db(Xp%oSgiU-_4}up5dx{Dk~*d1P$?O0^}9bRU{{Fz;1v zzsXZewEdJVWz!10O1>|VV+oL6C`O%juc!bqsj~NXy@A#RJsK%3conrDc%;~eo&%cJ zRawg~_t$p_r1aCd%_a;e6Y`bJjPl+DnBtVVzSS2Q0cI!*71Z}OoHff&qp8xvx?-H% zJA(}`&4!kU_;>fZmuNj!(^FG^i6iqm8*Ksul1~!APku>rbt7q<jM==#%6;@jsG%7#1KtVNuNQ*yXd_B*@r~r zrQv-r_l1zrn5hj=SzSI$n#am<-j8{$0Ng|$>nvN?@K%+2=SzZ9WN*$7Z?P@?VjL$| zatEJ@Zcz;iC>ypTR-q?b1IduQ-AV!}m`2BdRt0ruy}r<^L}6t%k*QPFfZ#%4c~K9o zXnVOCy_#FkK%a9^jzUFcc%P-^_yO($_jJUyKw@ea+S?o2fhHMd`s1e*tP&$X7%8KR zY1L`W)W2%5hz3pSK*9pPOt0eX6p4^SfUI5V;q&#^1j7A~?w7;@pDSFtRu~ERx~$^- zjfEk)h3dn8iCEV83u1;!q+Lh5+`HLzOa45!RwgTjb7$AhOO94ZT0D30tMxALwws2- z`f|(Pr?W_`K{--Ra?Ud^A`@UM66j0fbM@u>t192#hz>JT?G{O zB$u>zTow0m z?Oxw_w9@rA04o^0WjlFPbve9|wDtjLsKDNnm=x`u%CvN#6A>>@BcYPfQf)Lw6IIQx ze*s{9PwjmbwH5cDdRwOBF#J$VGEFALJzvFX4+RY-=SG*)zcdKde9)Jx5#1nRU%bpM zEHYC-^;kst)pYWDQ%eW|OZqH!A!gJPTKmd)PbTSar1dO$rz{JZ%>Rd%agK7kIwW+l z!_b&Cx763p9hnS+k^d=ePy2o*WURCJEV;GX@$r;UU$UI*GDd;`<~4MVU_2R+dVSBcU%u<*Mmu5s%)b5b`clpv5}k@PMu^1W z8tATA4cp9B*sG~!jkiC5T$!TbB-U0qz4*A_H55o1Q5=@Qrg;eQ(?uQbU+4Web0}ZG zixh3*I5dIXc@Rc=MM3_<$Gr{7wO&AfZcbEbcD#Kcw%D7!{;E|}ZpIAU9IdwKGZ&w^ za43#C&Y%Av?bUho-P*vcI5i>gkHO66vdL~6A}xIv?km9G@v0p{iMq=leojIN21Dvq z@qgXeNNO=F|1icEurs0tJ^m}X_hO~~B7=ZOo9)oBAnD8{qa@$YX}eND-aMHy*HmT5 zHpycM)Pp7>+~Io%nbv@0G>yvPURb&Y+9Kj&jpCr$W!|s4Hi;@x@YDbBDCF<{L%CU` zTOEv&n(OYg0gQio?oLTHaBQ1YfrRV2J&#X#Br93Pyj_&?7YE|@@U~b)()vMSgXLSn zbY7$ey{qK2oT%!-#l26l&En8q^>H$S|MokFp(dQA?`ycY^P*r>_VPp*CP(cZJI3-h4}iy22&UfwHQ4J8o~KSIH$O}VKZ{ie2?K;2?+Xi=Ujb7l zn2dCi>y2|H?bTuC26ZLR9vbCTcO$gn-x|SQllQDH&G=?L)GAGjF~myX{hq-5$FN?hKb);}2mJw!2g?`sddZ3N4sZdJrO2Lv zH`GIFHZCeGy+!~=+YIFUQf}E#jv{I{OaloX-WvILvMW^%p}XF;7jpN~3!HP-l8Z5q zXAg6p#kY!O8>l(Ix~^Z9q^SIFlkt+bI}imMjQBGk<|T{O&@@)P1igUxP2U-%(ehma zh1_Vek-TR`exWCu`d3i9Ye0Tjm>ui>8krHozNyQl4&EBFy&RbJsVQz;E0ZJRe2(m4*D1cGEiMa)Y_|MvlFK5;K$0Sic zLDpW{k?Y5{&$1HpR-k3jy7J?*k2SAMVCuebp8ats19P^Z-xt?smmd^B@wRATw1Xy*P-tS?BLc;o`eg`bGR-Kd>u2`7lw*%^l_abyhTU;ij|I=%;x; znC*g=CZnJw2kPM^32L%z5?F)LcJhUs}4|B9-{YSt*lFCDX7F~nc7QA1M$l-eGMxf zCXU<1#uaHW=A&xbDUl-nwfs_zz3x%y#@s+$fumn8XQri>bZz)k!v%Lw zEgTrf=VVGfZs&LHzYHnCw#@N0gLyB*6DWKxkj|vCMCWZ|^*o3xIMmAr^gJ7+LdL1_ z3+L^7wi@@@D~I~}Q@U0z9W|{hzc}02|M2P;ME)qjJl(Au>@*}xf_#IfR@vrpgX^$b zNGWi}6Wpour|p8q=Yeq!&x5@#+R&`fi0p57sm}LdMvu%p92%)iXV85N_P5&WFmFG| zH}sp9r-Y=O8M>;*U--oWxcN{;EkoM6_arqPu^wt6B=UjmI2^(|%;ys`E^D>gh2Usau8`zZy@j@cy9 zeB(a`E^q}Y9_+-A+Q;XrIun5Z+uYOvVM;MH>Sx*9@$yZo z3d69>H_{;lA>KAXQ_;AFPidG77;N6zw489fEXybpP(8qdI=IelK-no{-rn*p3=jtK zF4-qTnvB9T9KZl=_SE)e;bAyHh=g9Q^fw^BpyM`MK6Dh_5NC`ib*8>vxUD-3u9k{- zP1BC!W=5L1woUoc`&|#@eS_1_)+F_A#<$iuwtaSEfB1O@0=wh(LfIkYUzV>+CeuBg6JxPBYnSWw5l&_mU1@Z2X)tjX3Sqa$e=y^jG1w4AxoN3~$(r@{hS$XwwI)^^MhY7?{{<#9U znp%(-D8HV;8<4dV>H%)*LcNeX$Hk8tV99D8n-)w5h_Lwcua(;azbjU@ z;LxY-zaPuy4r!UOL4G|&&(q$rz0v)=ZAZs5E`3Yu!s1oOrJ23iG>>Zoh;aWxqH6NXWZ7TaWKrgWGV?bf~-;e?%&-HoNq+*5MC{v!k@Rh{#uuxO{ z?l7UIw&n%4z#;880`ATEO38wTiwoPlyMV@Hzi{JU4j7sg3bS|=Ko$y&!V0mqxwLPw ziY={7bjRx^UMVNRmlIZmH(IVy=oY6e4(RYnr_;&Fg7-qYnbt)MqrO+R*6wwRvzN_C z-j_TL@u`Q>9|s8Nas1RFy=F1A>-#0H4PYVTpi!vdT!MJzG%Ui>F!0}__cePm^?y9Z zWk;4xQr|u7l&Z@Vvn1gz8O1-nUxQqwB=q_8lBZe&uVD+Tfl(W4A$hMFyGWKG3H{TK z!St|})&4irq$$@u#6PndSWP9LQrQlDe)MPHSpc(ue81hVbb7#KeA`;7tC#%WyQ417 z(j@IpA3FQaC9l)UdomGpAA&hy<2dNL&w>I=hw|5&?$CHPURhw~7@a;wYirR^oUO1- zIYCtPwIgx(62&NzV^C4dZ93)VAmww4qj7$qnP%EryQEi2e~@lw?4d}sUFL&50&TZoM^w`ieKk!$p9yO36Lts07HZx}1jwx!ET z$=>2(hLBaXRI{qc51rITwU?;T5Pw+_>+ZG=?|bn_?+iwU5leA^Z;fj==C;>+|x1rBf; zl*oOacT!Mwi_^VHA=Mik-REv_sej9mP;U8(x?%IqTAuUR zQQ5({WIb*f?}KYP%dKPfn!S2^IPX4cnHRLsLW#Zd^vJTe!V6aNO$u# ziB)_Mlg!rs-8mCoBV~BmPAngx(%TkaT59TWop~J*!`?qub#Hrtn?5^s7+KlKtS~c? z=&5jM&v=!?Un4U$Gb)W03*Z?g6;d=Ej6Tdc()wa%^I5s=(dDF?9s|s8oE>1K%v(lX zGad5Qyu-y{?;xg!>GNXOjg}w4J7~L^Z@`RSt~cH2BOmK|INp-+K@&4iJ8CbA5Btfb zX46^QKlc4(z8PF4#W!ZYQm{`mJAqTQnipIbpr0)I?uezqfP<4~lJ6<9**@PS;Z!+)268^xNpgNDsc0|%MCAOx2 zXl`D+FSdEw)g@=JaIM{siv;63HPbnC2o9H&azoeN>i6f`^GrAe8q3^;vlTh7F_v3y z!rmJ@d4t=2jtbo3BCEWWAH94cLhAM>%O$LeaS>S2tYZ@$dXDn436JMRHd&zNwylSj zXd@RlSsj&T^{N{$ImY{@0Qn7h(g2xo+~1Q1>VjElUJRzeIZ8}*;mj;CL`%}P6^=ja z^SDbLHyx+>WpyrLd!J-nJ>Ln4H`QG~aD-t&>i4<)0F~c3G=i(8zl~QJ1lmVEZ2dfu z0ot2JTa>Atz_|GP{q?5jfxh|ZcJ=naoA-r5#(y+8M;R~89itj?^Zj^=Ecnzby z2b#HFHiQ(A)k+VPvKO#@e}^mSo-KM4j%P*Bb&{_sibTwP$&xcf%O7uSoKh@d)Ms>X zUsz-S;reJ~$wMz3EgtR#>OICK7C z3%yG?{ZUxni=&HsM`WKI4H`eX5xK_Lzj457RB-NITjt#A9r<@;J)Z7+cfUtfu$+y4 zan*WNa%WESMVH6PPO68Er^A5h^0AaV;&IZ$hNt!Xc+v5Nw$g-Y)M5is0z$dsEo z7<EVacm_c0!)IGrt zIx8u9t+2~NRwmEb{(pG*jZnfR3kPp!QF=E^MhSVFe^v2o7Xq^s?>tU&s9AN@9PiaqW#JJoqusA$OKBIU2RPIR@UoHqf{{O@XZT z53!?J8T?(|)`Rz=P~3tT%10^7>p9DsU%J^vZ;vFqI!P3RU0!A8el{WB^=Jq_m6cyB z@3o;S^1T4JiiD!OVq8yxUao+VMGlBnSS6xm9w6aGtU5v8bxNT0I;3TbagXZ2Cd1P@ zAtrm-=>nW@nCaZB&O91VD~!N<+RKuo@|U(hhehx!;hg?>agoWRP6!x@$6 z#s1k7$qYKe>3efa)PBUjm5W#~e}g*8d)WcZ$M`x|c?r<&Pl+14rGAU&@utoG=r%#M zHOQbZ1Y1))U1;orf_5egWG*EPv<5D;%tzB`$UGpTO1KWG15tP2t`YZB zx@%iq@toOfz0vu8Jx;3kZ*LFoWv2Q_6$hU}xyvl*>~R$|Sd$`8MI~E|$1*DkU-JtR;{LF9&_Kaa2*j7V7lM z9ixDj0o9?+BMKZ7G3J-Ks$uiR9<<36jAbfLC4?!+?Fg9T;=G;>n=lQDa*r`gXX@j4iOM6R^3+07cPRV=!` zY^>l?_QsV%@xdbV`M+kv5zNi&u91k~e&Rb>ZZnQRe1mCcwbo_{W-B!Y3gHBpS~nhJ z*`f5p_?{Ho*>>^R7)`^{sjQ=6LN!MqedcBHG3-9mT(*zg=;#O8t&Ihx$0j@qQp4oAWaKEf0 zo-OFh0D4T^W?nSnzXaXT9+5?fm;k=AHXPK=d2TShg+k?&e36!Uk?k6~j8z)?8lcjP z?w!?7%?dqc>*9z*wc5?siaC~6i)NW?{Cmjons{Y$n0D(EdAvs-R9RjYX}WB7Lya~u zK(mujYS*rk>!|$1%$U_>o*mM;9G|#6tL|u){@K)r|3AD0gP9F`qrwT@s)=rvCH$>T z$2ICxIHSWY=$|MH;lwT^T4qRHb_`jgCw}#TMC!zZmG*g82|#>9+R!QA8W&Ob)jpI1 zVpkG4MXEXOGvyRJ7cN&+j_Rr$$_y8O)(*RsNr`{8`%X{!y;(Mr@d{~CqSHNDw9@EW zzjBjnHlulXv=G*K`W!RZ>o<^C)j1Yl?8b@EIBrp!DtfJ2^E)v%F@*54szMp^_tl2v zBD7uMleySkod}y8GcgasMoMv0I^mXRWs4lVD zVDwg|9m0Yec>bd4#MyO$D`^Lp7w5{+5>Yo|n-hx_2_i~vL3*S+qPhlt5a=$QA8!~HQnL)*NXnq-gc`}DH(QXPX@YS%y$k1KzH%1Cs z5%lJEVSNT#csaU7xHRfJzX?MVVeDIoy#p%5*kLES}{P zOyCXldEazj(2Y#zi5X9~(Fsnu@j}hAE!3bkOK+Or(@Yy-+cG`C5m(@%z%-TaUVFg- z&*Ew1av$d6$bAT&k9cO_cYWgjJQN+iFc`$yIvpVU#pwcalxAI~e#Azr)#>ebvhFc+ zan7?dfgi3@cFNzU91FGH4UUn2$%n;9XZ4O&$4^kbTP)wiCZ0POS62lI&-0pzc2a&as|T`uWD0;U_GFHm%4Tf0 zrhqm1W=vqyw~YU?#r(We~oxd8zUa&)aERItg+j z>nQSn6rG17n_U~m+iEF_+O^wSwfA0Cty$EJO^X__Vg^C0_AE+j*DgV7#NK;vLhQXs z%$V<&?=ML5E|j>}|RXc~Vd%UiLM)tQiy)zSQn)a(1O!;N&wXx03NgU&mUj$NE%Hr_oaF8kYY61@}b!#RL4d2pl9ce~4{wvK?y`*AX0G5(&2A$ru}1OPaTuJvYQmW{@uP|d|GrhpQ=UCC2=cqR zMN!ViS`OW`3y)q=1xB{EAtuee55oq+S25iD?Zq;XTkz(u*+@C5=)b)jM6n~(-E@KE zoiE1+;tRLP%#!B&rWq<+Fx%74Nu9J!6)LaaWefeb&E>rdsXap7o&#nm5u}ld0m_v6 z)l{J`vvJ0tg!_8gdzV_7&+iD0?T!7Dye_|)S-;fbQola%)XRIyCm{pJ>xNmHAxZ(! zwuv36&2pmeac@V9OF<-WEOR!#299L#k4r>ZW3=M`G87lqNzAOc__Fb;$Hl}he5tqE zoeE7H+vsRw@`E(fjcCC4P_Pddutr!)LU4(ulojEHSSi)((&V^nNfRoogHpfI&_YX6 zr68ti)rrM!jGMqNbgWGPYE?@<`hfl%sI_XIr3`FWBM&yh3y$wKxB5!4lk%Elg0j#bMOX z9sOshe2;LJ+LvveCDwZdUD><->I0|uHNC$>odi{&4R-V*9kV!7mZMhMUXcA5=)DUf zO>o)x;7huq-v3hO`xBMHtY#0(zbkd70-=N@J{J`eciGT)Zw!)E5qzUno@6NPRpu&( zA`S6c(CS4ah#WEHxy7s(%4q8@e$AX!*uq~+Y)4fj;FGqPwK-B1T?vp=>Gk`ull2fo z5aX#4;e}J<*aV1g^-zN0;tJmH3Vj}_?)H}X{^nJv8G5Dci1b_5d{&GM*&eu*Rayy( z4SWevpArT;=c*{V!(o;O>W^#c#eM^?5%%0g4 ze*mR)9{%H$ck;IIOwBy;Ul!qmmgHWel)INEtzp(^Rb&p5FSS~xOvdUdv9qf};8WI@ zF<#vPhUOY1hU6uC?sdmOtxBrXP0rS<$5FI^Wzr@om_S7Jewl(!l2#&<_<-tnhkUPB z#-N_@{!uNSgOlG%!rdx!>X_#F16zh-X4nnqE$QUBK-jfmV~Lc~9w`=S`efc)?-)bt-DR1KUCY%qA6s4S)5&LI^xJWw`M-YN`%>s3#mo zz*eq}#4m|+JcY>lfnpQ2mIC6U44TU(O*fRM|PFIc=2F zZx^n*IEl}0zTJU#PzBuPpUyqk3YB zS5LXdbs%s}iT5`HIoCorFYYG;=`iByc4(+RI(al4qUePqXh7*-)0MHW)Vv596gtUL zYh!yj1?U91K0|h>t>x&Y@%ZEV(T_1A5IH+zgO-RJSXaYGfQi3_Z>{hiP3516L9WOA zLE%imH7>QK8NoJWwt~Q%Z8QD6QA=el{STBTQ1F#m#i<*qRQE?zOe}CDlsi7IE24mXmq2BsGS({TdDlpj67YA;*yghCKc7+zPlNEtPoJx}1LMkxGL81@!6rH# zRw!JRi1}I+klP7j!lFxz={RS$YZZAGl<1GR&Feo2`aPSGbmHUoq6em33$PBtV>8uj zqQ<$zYO`-9ZOtHf(g4@|ocKgxBEIolS(}aiTGoVLCGx9X&e8vX!=cDVfhnRQ!TGR6Ed)JFq0fp_Z*F1g2 zHxx>$M%N}MNa`1r{n-$qTJMyS+d1w2H{tpaH@!zuuJXktmCj;od(!wLOJ-GwMvD|d z+ZtN}${*fpz#b{TJsy!18>iR%#Z)8bphfOiwbViZ(ZC8}thJ_`nnc!^DE7O>q4EK7 znHS#Qm#AO%(MS-15Xui;;K>OM8FUT^PCw@E9#jq>1FrDQ7Z*%7$=NyBmM95}A)1P4 zF4a|dwcoBJzqsC(r9UZYZ`PT|FO|@$#?V05v=QAj8Q11Rue_GYEL8O~c<_@2-KAH) zQP&e}iS>>WFsL~?CN+;w?=>8K6V+&pZsgNFk(1YxYp%41d(b~CLdkoY4^Tg3l?wo- z2|~qUZ3R5NV&lUQV*bY@;FL+-TH_Qt8q}RDdz@bUVxLIntYl|KhW>Ps}nv|XfVy0iLdm$YKM-sI7t;`evf zZ}N(z@R&nvtWHhzir>hI+8}6};)8Lsv{@}4GRprR*kj3h({RQ5**X|M-TJQl-n>+^ zx?%NQ(&g`!TDg9>E?v~dW%7thC{h_G+M#K+W0~h%?G1CjXAc}ID3PYG!&!3uu~&H%c!AF_PjaU(g}IbDQTljR;htzQ|9;GZqZ&(# z8Ex}!d2*LiJs9bHlw$wh#JkLcoJSO-yrSmn?&d+akdH3y6@%6^%^=f|ToNu4xI$ZVyIHFfDSTZ)Bg1g&rVs{H~nXvVRV5K#t z{0Xp3Z!IzBwJ@9G@i_NgRE1nw>g_Me7^0gl z5?=_EA8Lpb4Gbwh#xW@f2x^-__lF0=*$R4ZwO0e=(r+x*PE@CCoug|9qQ9q@ZU4v; z>K3Ed07-B;@wMa?EDOJ_r48oNyJtTc`0s(}XXszHXV0vs5|lPw+P#A$meHm`PwnsN zu=6+kfn$W_I}>6pe;{IOB*Lrh34GZg39BPIedDMNbSZ(^WY6kmY#(qub{;X^auY}} zvVCT*POH*x$s9;&3Q@uW#g0RroaejKUgD%aowffY;~bb-Q(rj3#LnX>Jtf|amH!`;}82r|o z57>@-+@!W?oVSUO=HF$s@0WI6jrkt(r};e-CPJ(>EDhSt{t!U=XM494<_wPf&B3Yz zM8kQ-c*HM9t5vF_fP(zMkwCJs`!`FsTD5VW(@)}f&+PU2@&Obsr{#Tn6LoAhXB+2Y zS9gJ2LqbxbZtj6={^zx>@7+hrR8;29R7T{bW|{(SIPS;N><-Ctu!9{FHO1@x#xK!R zHG>>~QJyuy#E2W2RqxVw_A{F63{x8v9|AMm=7yj3^2I&T^@;L<&Mj;DpI7W}8ujaf zbX3j;^KM;gkxr#YQ}vVQGVc?IZL|3+`d@gtfkGcMlf45jCKC`?A0~fb3l#c46ZpRe zz~-Q}d(*`YGf;M#di(|IFP)cN-a2PBR}GtLmcX{6x(xYucw@V3XG#)WP^ z<233vtI#$WN*Q1ao7mQN$;ysIYat|}wiYe6}JfR`@saHSr5hPl|Rrg0C0KkF&JeWALJG zgSr?`8B9ek2oaByDq9YnmZ5tP@z0UTj)#2Y=bnCEH3e(0inP705hAKTM@q;({``}z zmtaY=Ep6mtgOII;^DtXucvcO+uiw4KJ=P_TFyq6#Mlx3~hc|I+gnBYIk$taBAIB*^ zrXcZ~GXzBsRFK0z%-xgqLzTy!=o_>HO)+Tl-Qh2 zW8%C!(}Zk{cM-wE=Pz*p)!_gOOG}}3-hSO~gFDo8w=w6Pk59#-vOyJ5P5Kyiy(0(> z1yqWaETQGKKF~phkytDYeN0gWEtF6G|!s69dlARRLj-Z-{ zd>Jj2Y9jl}mgV*g-v0OVLgvU&%a4)^2?$wnx=gUi$po>IY^u~AfXXh5VLIumoL<^7@y3S*;)$;e$ zE!iv;LlA#UxURskJUbr>)Z}&SyivA44i+&D+fBHY@qOU4Z`rsagq5Whzf7*4EWWyv z>Uer|wj6d(g3gzKde4lRbQ00tkJrl-sJ3nM`vpF#bNp&Fr2osb@!;#8mI;eI__E6o z)l%rGefTwA>m(#*=F}>gNmx!*PBQ=>|3{8?7An1ipL_eaxrKv?ZCH+L!CeY*NL6Z? zbJnKL#_!_U?(||#Mr6SYeVC5a;Wf2`x?eVlk>hoDcZUOwMD59F>CpJ7t3%*C$Cp5> zg_YB^n^c{={-JgB6?1DvftYuV%#S=E{nvC!O&(o(MA?~wHIPo(I$l9WXz%Izi&FN; zPQ!Q}$EB|m#qac;F6G0gZ`}k|Cp{Nwbt#sYJBt4<3sbVaf?14-)9f#Duy+9evWWn;F}B~$Y=vVl0o{`L)I-xq8=O@;0! zjbwZG>257C(b=ofixRBJsyPE-+)IHtVU=eSJu75BtKJ{^T1KPq;pj1e-U4#WtpyYX zQ~v}zh8^7g_n_~fZOyT+F^ls?66^|?41Dcyc^y~nx;=%EM3HFOIWRmlO=?7n9ob={ z4BW4jg(@|yA?9|v3D?OWF+^-B6o4c*H8t&SSle5B8&N{QmSmaMBb-s1Jh#p^KX!Y9 z9fm34yb6nESPRtlCqx?1h<@vh+PnUfWBDl1)idP6rf9+U_5z)`y%8)zJvnPjqNffb zde1oN39Djkd07!7o@!_J#!#P|=G}b+xF>+eEOjmG)qn!t(v~EF`KWftRTgTObFA8z zLqg#zqM61S=X5i)5}~IY`v$_&U!$T%G|I{Y#MCSzk0>p$mpv_b)mT^S#}oMVcK;@< z8Kw(&GrlKET@zi+c0T#h)AX^$33E5#B{hcx>#cTZ7aXe6#3>)95O11s~9Q+XV+%S6T7$R4?v`c@t9FCB=;kn~|zkksOrC?>X zN?dqURDny0%vk2nIkz=Ts|q0Vco+@-ZJr2jT-!jYguxG+7^oVuib^aQOrxV!Priiy zI=0%5ckRNB7(4fH?I7n!!x)3<>nbM;e$irMIqkTkYE923R0_hu+0~ghG<~=gWk!l~ zlPk**-SNzSN~$(r&RMxp*Yn%6>t(z2^PG4K{pXr#!DFhXhESdQDPdQ9M4}gE;1^gZ ztmVa@5d>sR5tj+0;@0u#g z!v*bJKD5FcJfY&XVvdr0)S`w85*cudNgn0H!U~LGJ6W$Y0{?q3{9J3*O%Pwvb4SjN)jMiYJ`SXY@rU*rGqI5&I#R#vjuu0Nk0C5!eIW1G5o8ho zODnGyYxF%+>+(+>kJ}CnxavEcXq)+UJwH9TYx#eql81QD<3qg=nRd|R#xELxT0 z;5m+z5Hep9uBbu>RN+_G7`878nfWGyF0~AN_f58qZ-wGhf-Cp=OLw}q&KZ3jb{aDQ z-LKYQFo)_)ZpmAPybm<92hQx|O+N^>BzLnUhe4YY9TVB2&AUE!9L%4hxBRNs-eVos zEhFSv!v@X6F165G5$ZS=ks~R)Zv^Wli2oq@b9P!wrEd$_!?0%YjLrFTIg{V#TA6t; z26*78bn*ov;IG+Unnkp&m!NoBKx~!zqrZ4`Y!BORhwZ}G=-vMO$=yH#a;Q9>yf{H^ zj|Vc2ef~FoAR4X5s#G*z%Eg-f`sJ+V9k-XnPc8dm#j82-lJL`)5}pD)>%K973pvdA^_@NS8;gS`g3h>`3&n49N*L5*`P>FH)DahrKvuM^Sn;C6D)2%p8kwgmxY zSg0r*Zrx=U%i1{Eojl)sl=loY@Gm8%S43PqgZb@Bl0}#8D4n@|9M%A4;vH3SHX1HE z-^{8}Q86Q?Cg5_&7oIjLzG8~JJ+-9%ZBP^e=TbBl*>$_$pr~Jzofvh3IsWXDA0ql? zxg?>G>Bhr0GJVXtjB|^+0`o1*)saw>l=_!ZBOSaUaS{qm2~%E90h6~fupg)rs8XlC zCx`bv;TZG8w$Vghl-f(dymbFag+SJu!T6M>hV$lFrRDsYm)Ak7NYvp2f1?+As}O*@QNgW|A-~A?QP!{1?drlr{5qr(3M)4^g4TU*fd!gxcK}(v zmM%y^u%3qDzkk)CUWB>CB7V zLhwP(B(-|mL~Jmiub0X9#adnZc1o`e_ZuFw+XvX@0JstEknI_BY<-^83%&HoaX~}_ zgFpX{5e^Q?43np|mwW>5gO9sW6*uuoJay+^1l&qp8A32Wdq+NXc>v2>3wy`12(Um5 zu;-ovT^_%#KwAkBsINmz!DVIKVg$<9Y))w;zG|+zle=v{pcu>|fwX+iwyonvP(Ka4 zG4KNN;{sR0uCj5=1T$|=k^@_w`~cS+EbuLQy0pfEdA$0NV!%Ho4QMVr{W-Sa<)bcA ztO1LnC5a_@ME7V~enu85TZl{D)eus=mK}Xf8;g65FB8tMmKDW%a*0LjNA3C6{`+d- zvPvXa!R9Ws*eFRdSrG7*lD*5y9T{_Rn^cAS^g!pcGnt$)PxL)9YqSFJ3Edl9t$<>{ z0q)T!Jbc{uqg^vldBL#ZB_PnqDuv6Z+CSnQIScFezEQDV+ZRn8E!u|QumuxGzVnuB zksYw1QR@0SfApDxx!8XX;%cOuhomh-T^RJHoUQDS&V4N@atv-dH|H&-q&W|s!*xsS zk_Av-f9*+3is!%x(@eoL+P{v>ZU^UaRxN*G*lg5fvB$ghwYX>pSZ9&>ejro4UTbX1 zykZM3>@PK+z}}L#W<3)=<}KzbP`{*|*U1(wURJ7S7fizWl~Z^?P;5P1609Nly)3*FgbbQN~D2EL=TgzeX^jKx5)c zf~|GIx%B|anBy^)7j;QD)W6zF0FE}04vY683qkb94K_w-qxcHq@2Xwvaqj8z0V)93 z^PU0)y|H6?8gQOAs6>M%zU+5VoTQilVF!{Jcz-K^Nc!&qb6Ii0aPb*Aj7~*q>o}5u zW9oj+s>LN;Zbhd^NKcyO$|=3E{CYo}+uJTW_D@M;wm9Si7Pljf9R-cvr${62yaR1@9xDxQoQp7!C-@4#vuO>jeXob43e+p;~janjA}#2NlWKlkw1 zWHEacb;uYV8|3I3g0lP}>z{|(d%j0&5|~RdFn6B7`{~aqb;=xTyaN=(=^?SG^G!;0 z$Hq7Wqra6q0jw>&K5zgCcPJ6-3OnvzPL}+C;-EAq&w?vn0ZnwYZ9s(w`{KAq@?18P znYCxM%`TwQ4qU)PL_nv^e}=&9J?>Br88;qg_` zF*5yo$MXhQCYnr)zZtqLe}>+$2`aoe_hy+!oN^;C_yNcz zySXLeyX0GAd}ubyUMtBNi8Rlzx=D!8N+!Lz@&}ujzi9bcS$yJ3MZWJ_GQ_Myisnti zMYDa1R>}ir2!5QV>fD{ZqHfT*y;M-YCB(RPU4Km`O)uP$PD#Bmm-F0-pMM>@SxZEv z#@a==5a=SDH{To>6gBi&J+4&s&Fd#nQtw{8S^aWDj8!O^0&CdCq8+3+1X2a9l9~l7_&B2wgKNA+de0Y z&wkcIt5&jv4evrnR)C?DK=9x$(ZiBsWP-cmu^XBwIpdxK>O;NT>kN}J$yt>y_9C&RHY z%?YxfPwuu~;2OesIoBm-3csa6Tbsc(M`p-_YK<+(;>UT8m;x7vftxoc^P{HOvf#Xn z<~tam`#JEM!ckf!Osp{*VYY*L-(XwHy=tH<^)wdSqbfz95bO8b37?Ewal%XPuz9%` zxO*y9@gl~MrpZySvxwI2_?}^252tU9RG^d>*uUqW($mGTgjsZ{_VWOxzc>BFOs8lb zsIg@|in``)4Esk+LM!j$DuAWA(-vUK-exg&`wq^Qq4(2%~XpgvS<3z~cd_A%$w)9-6=}k>CEVq1?9%Emv z`4+TJAM>3Lo7``qOnv`g#B0jYrZt2wU#$l(YAK$HZEZ2?C5=TD5gR+!8zhgK@~$$D zI8PP(BV2u#wG+a$0Wn%L^<4u;ug3N9DmjJ5YS0A)yh(|pr?n~ZZ-F)Nkc`eDg( z9A;+xvdaDfQGe?3Cq~uhixlbl-sEg?yc6m<7KnM~1NR_kH;z@$nD93DyT`FEW?RGu zcU2O(EDKw6PHQ7^Wivcn+RqWQbFCbmr@}Nup1v>)v;6QC;%M^x&jg^Op6sDpI)uK-xL({v6av)dae+*+U(N9-TJ>*Pzh|1(Ln-URRt!lqdN^ z)Q1>l^25B21C-E@7rV;}3$XYTO z_w#-=Z>2!vvLm;Pi|>lw&j^S~VC{f^!J&LJ+xO3rnFt1b2k{UgE9J7}x0cK;)5wEE zgEyzfmj0%zGF9E8iz?59_WMJU%mdBjbOpD%z$5y%{v(l0Z2sxgW}~;|lI%cL-l5c&^5bd&*IlNO%p&l* z5yDybL_;B*J}{js%2jOf!y*du;2BVc!Yl)CGZ=JMZamd73FW?=KWH61m)V`{1%%7C zdQnfev;g*Z-2H5!q01c&Ey=K0V0YH*Bm>iEnH@NY3QXYc>qIQ?-sL8ZCM>V6@DkGT zoK7wS1{uos0|o`_A@>zLjZ24ffilUSmV~#8r%#T> zJT9Tfpu>Y+ZZE(w?oC?W+lgF<@Y4q!R7`szT4~`6-X^qdU@x4~^w5%aX)o|)eIs<3 zD~QJzC=Mn7eRTxTT=ytOV_-~=J;9& z$;zTUZWN?WbK2?STrw}3f_&K2HLGlp9RB#ZBEeEC$*53ei20fQK^`@oarPI7Y|>J8 zbg5tZZiq#%WcQIE``sbrag~FI$#&k0Zq_j`?XXJ=+R3xJg2^J&;dis@3gfNQL@V7} z6)6WX%+ib(U-27rlqXE17sU#0#JXrZx>XWgLPR`nj<0M1Aw9}=MY=+z)pALzN9pK^ zwI{Mu71IgKQOQp@A!k|%;wcfRWtXg?X77Kk!AL;1q;I#4| z9wl>NZLR4hgM1_3lN~?J;|S2RLY8yE^?RIvZQf+1bDKOQo+8U@P$X&cmfZg{FW>rp z^da%5lpXWE6#C)RN*+Oi)@%69sric`8}43BvfS%4?gDEMU1VwbG0I$iVor4EzX!Q} zEemJm(w{CS<-_?qq%Z8FJLK_OFq%hj+X9O@)RKzBR=f}f*=#7r4K662jJp7X=Z+xD ztJzeLkBGbSbF%N(!Xoy5wVjPHGU|m=?wMWZWMBU7K00MW5dn(~A9zF03R=>I@OtsX zO)tC4Ma#_o0#?>gBAs%>PackjcX_vxui;iq=-GV#8I$nI60l4i<@@L6$#9HtH{t1j z5B6iGPpeN$AdzO*(rz(p_KJV7C7sf~wZJgakemGItc*1LPfC=p8mpgW$uk_ zJof=10~Ld!`TtHf|8A5X+hlueRxF$~WJfXcPC4_QH(D}-Ios&7Vpn37FO*iBC5#m2 zX$*T_<8`p5$W@kPUXeE81*_31Oc|-_r?BizmlW%3ECCl?t14$Pc81ZJ@Zt;j!6o`e z^Da-G5ggvW{Je>{2qKQgsb^GcEy$bE!%b=Cciji~)@IbE-(RaeH)PRlvyPMJi4dBu z^AL`O$N_ZSWApQ;64hr=Ghao@h&&p6?107h?aajJnM|L*V7v9+NSx7SXLoBy$5f3% zgBrzoq-bwWm+r>mi8nb>x7vfKm{=I(p?_LNZRvW(>)XhYu zfoUmTi48O=ZFy-XTVuf*wrp=driG{SIwPD!RF}rElk%HNMFejBv5x{~1W!DF<#{G& zxb9x%kMDo>kT(GV^(Z@-IVWZHFhRZ2yrYK(icjBktD%-z&t0hE=qA(3yyz@Ot8n52kwe!|40c};?RD9% zP1xhn3(MHp2K5JtP{qh-RHQ2%}IiTpB7XtnGm>cQ;@lSNfl#|Ji} z#nVABhYs9%-*L^?(^!NWT@xV1CUs|jImJ_A{HaNJ(mLJG!FF;7+b;O6EXr{3;$w#x zQ+zZc9ZnB6T~~>?XSfxcIm&H9y7D@ga$*5qY$@9Y^$D`c4*3QPRI0as@FrP{c2doG zX>2>kd%t`s%nORHY`(wnH+nx+^mY28)(0^<_1^<>@TCQoaJ3#{u+C(1tUtrcb|arx zW?vIzSC@4jVPMeD5Glo$G)4i$43SdQ`2Y5&Cp2H&ue9)E-m;D<3dtLmC?14J-W7=n zu7XRpJ>&d}-)eOhd)F*nV3ux6mVB(*S~f1qzoz42Fc@Ai&5`}-!iPV+tc_ygXqeTD>UfTmVC4$ogFLMv=CaWfc-a~3U zi;~;@<>F!TJP!0pU>Oyx5?Z^*4-j%5gs1W4x;!o|BVmuDpHk@I>&q`bHLGE4c64wC zfim?h4x=Vpi8mt`-iED~C-Nqt@AsspV~?kf4sk``j4PrKN%>9zS<4e%{s=mHxr^@Ua7PE6*Ivg(67 zOX4**{fanhhf{S^xkFb0`K>d@$sz+To`u`H@#@VQr1rs{$f??(pn!d6SVNEmne#nfVkkGY&SKcC3>8T>oS5W2=AXBhBxU%zsaA2O&Z zele`=+F&X75N|(za1@qh2nz-2R0Sx?X&WFz&(h?}8yu3o=y*9yIci@D{wgNYzmS5n zKFgu6z2$otJYMh~^qQ7iv zW>cr4W^dL;y96$NvqosR$~FBCR-F%RhX-dd^OH2|NfxN13jOshsYK;CmfoDJmLJ;L z|48LsJ*6UT*3w9*aH9HduCtA1Huux3dB=2>IPXz+>PEk%5{lO!F}u2~~ss)Y|p9sqec z6j)L;)ssN23-=%Lm$nr?7hwh3h6}MWO6gjYhHGkp-TCu_TUry`(4YSvSG-b`ay%=D z>|Ng-Xnwy~8z38}UcD^7J-p0vmQ9Jx>rA_kEy_=W0BW`m8h(u|>2SCG?0N=&fShnU z;v@{~R?bHNbFz7htLL^_ABzQ1KqPV3eY;yWO8ElDwf7Bio0+t1tDmwKPP_elkEg3X zT4!@M&PJ8h7gozH8(`i`)ClbXNDECjSy0cqs419Rzr%^*==F;RYD^iE6#|O%M(&^D zf`j*N4KP06?Vy_DQ02-jAkRLmJJuyNU$ehyg``9gPj0lpPijdg()gngxt7@|&^b?r zl~CH@T>kA{Q4@eRO8)g8>ik!~e~}u{fi@hTs2E0AZ}w-zJFyvrYFQ3-gA=6m{HjhV zgXj{%rueh`bd6)OgX?)fQ;)Y2H_5bVx+o4Z^ z7MB(aO*xaNiL*Y*G!D>~6zi5vCx|F|)8VLt>XqsIJAkp<4L_K?QPfz!@)981_xqKW zdA?YFC+y)wWBX!IMUV;q;mh@zR>3t3mN;`w16;r;&StzqDd{2VuhOHN0O7^tBn>KH zxE{S?{f0+J%jB1>?T2Kb^q1*b+J(XtBHzrSxWHEs)p5@N{~qB|)Z^>sAwSV^Q#RX$ zC!E|F*8fK3fRibfP+M@SUT*Ulu3c03-u9^s>tD3?_hnqz2abudmx46m^}`LZvL<;e zBuCKU<;p^7TRrQm;e(roWNFJerMl_zt+;P>kW*-a^>(=B<2!dD|`UtMN$ki?$xy-tnH zyjew#r&g?gcl{5}Pt|g%0ngcs}nglj+%DQ8b(8p10nvFwQhqANN+iC=0?hm7d<+W&RRUbYJ+3q7IY6 zm_dIP758dn8HH?|Nd?e$pJ4x0z66`iAq$I%}a^3HLw&7nh~7hqa@%;Hh@{VghnMkb=;TEscs4 zS!NUHI_&g~X5g6gad+yg zFwF+6f3-+^@3;RJo@E$&I1`%8|ak0N<_C^2aES7UFS}!wp=5! zpUN7q@bSFIU7VxUG5Eh-4m5jGna<{abgA+_w>gwOk=$yD<{3e!W~!CwYK@F6-VWO` zd@wpGQ@`F#S4W^nip%z(!98mHs|^hD1NaXg21StaAUoS7I1RbEuYFV7wKVk3k1q(Y z7>P((k}`+{(lzZ=cY-c|EOhc)&tmxTmmT?itMACi$c?3!HlR*x>&U_~+E%!-yJ4q* zV?o7vc0`ljs_PR)V&HXoc5Zq*>)hN5p^LGykqUiG6=g488RRPiaa6C`jby#4&-|9> z+~Ai0f-XPpNYNcJK5pYQ!dw8kS(|mT;%>dRdK%Vm)-g_G@lnjX8_kJhPSa?Z(N?CO zV?F25w&conl>XjSaHStfBOj@RF*aaDfpVB~|DJlntC*LUd1e^F5G2@5%#sR_BWpF; z>-d@)Mz5>CC%L$+Rmyfy9v>#_L(sK6R|S~hy(Po1!e!-#kAgsNYN{tu#!gn=oc(N+ zjV@Ybh=6;1Upq>jr1B~59fY66LUjF(QvUrUQeI@nsfpc(qdsr&Zx#2fBg)gQ3|E?X z;vz-j!m}J{#vRN3ELrD!$`{Et+(5D@wygid zspY@z&}8XDK7%uPTMY6?&}uGkHJlR5eJ_+dzaVR(^L;?9V8(6Giv?ZL)_x`nX#CzA z1oL87Z@A352lg$cUFcNp1>oJt>?u62=Hm*az113bJ@m394Q^q=5P!87IFNwAwjRb} z&bI&dNCQSeOuUWcru$$u3t?=^u!7bQcQsU4ez+Ea2%hxU;H@O3QF{UC8s>KoBv)D-nB@dEZK2{O=vIrC@{+!pbs1^WT$2MK9|m#C>5BQRVFxENZ|s&jH#@i z#Q^rtM5vYU=qsarYS%nH2iVp78WS2Y#Sejl-7*aq@Oe`p)xOOc@y_T$yh-NbgS z9d4BC12pqYT*UpE1VUV8JsZ4Q(u;Tee$hWcoHQ4NTsRGl_!al{Y5%6*>{SuCD0fTr zs14fJlTsERyJpqI92KCwN+EWu!?b4O1zBGj;tFzhbJrwUIdk~)A7(ur23zVCWpFCz zC)FUmTNiw%xk?SzX2SOb4v;r0`-yMZBn3Z({@8lI&!&MbAWM(r&*~R177-u$>67V~X-JPmKNVobiKbZTxCT|X zU3}(%zaRalU{ICG^L0Aqq4g$Xe>=Id+@%9U|GZQx$UJCt|Gm{}U~eFP%+!3iHG$T@ zx(bhClxnTvPi4!b#6KRr<#OC*gGEZ^&8j$2rJ>!Q130r} z1foR1ycku+ELhuj$v@W1H~B${My2; zydmHFfc{#ZIZr**NO}YXTdt^TSDVt+npwEzo59hf?-Vp@Fl14D@M>KC@cnz`rkFh6 zR4M-9q<(_5yN0;W!7zi#{7DB-nX4om(5@%#PxT~w*rW;2*s8TwKc(#|@%bESllSfw z5&@kw;3>CX6uqP}*oH~oc;xPdf11!W*A1}Lj|6CEovZ#9Uu~+9u`UEob@zDM()BDv zd#Fcpq$ya+(_&fQVX1FK_Y(IEg*t;^*g!QeR>67RiI0t+mHKvn&cgeuc%32p5qSeg zNs|NfSq5tA2xn=QU)QwZvf69M5#C&@gCy!(#C9a2Y2He&VOg|{TdjI262#Dzs}dQJ zsRDkb!$s?rtk9J*cClkh@C*sDUPGmb!}T+?FSJsDPVdxBY8wv&j|-=?K7FRb{zg3I z&_1}#F;-r0pA5^nkV4ZUF>~t+5*ex?XHw9N@1H#(uobSXc=-lZHwwA_+LGh1?q+sV z)%s8!(loJfcYsDl9eMs1BL*@kt!0w`!439*>+@o4l~>^X{brd(oG;xR*Nf+f=4y$ATRDz_pyF~!=KL7C39-2HOJQ1CpTnE0S(nYi|6EG ze{@QNFnpt7R#R4W^%X(lxT?SAWV6rqZtazfk=LkS5m!4*?h&`J*0$x!9mnyZNlX?U z#<2EJ`(JxQzr@bm(?-BFbBd8{u1{ znfqteeiB_cdLCHgQ}cNF%8$|HtT&yS8?QHT%!VO-cO`4M`ff*0Mg_U9iCIr$VgV=9 zK@goh|4fVUtt$F5OkM$7Ynpc2eeHb14)4k&(;^2(e97!h|Eob!{EJH|GFzbU$+z-r zsU>s92_r85Doc+Oi$Ik@y)i9>466?9&-dMaP9J@<3=RYXI%PUIT1b6XM6 zLmxClPf$fcZ%+V&?gYfzwrsu~H<4TGnbad!b6BI*#atz@Qa+FLX^Q^ookv<%?!-hi z)_sC-+5Y;vOhPIBNa3YCV^F)2g6l9rhciZ=jCq%q<=I&@E{_Wx*1DQ5wWP^pOrA({ z!1bj@+Ik8njVLZ0QW_@2~H7ln)j{NNMMB0*fF*G5%HGS0GFeILl_>$<>g9fB4-b#p z4fPQm#oC`ob}PO55043~g|)xY@XIot?BKyFptxx0Kdcnun6~K>F42N7UOG&x(J`jE z^$8IWNQo}_Qs`!;5i(9^1J&z~+Z%%nlzZ20A8rhEJUT>dvKB%TSm=vjL zmURF8F4r(+F^&*}5&ef}?;=Oso)xYxy8NplW`R;qOW-L!tC<(wJq*<>tvh8i9|Ez;{kW6FG7IBqm=-UpO?Zp2{jO9;M;_9bm)ldOP4A& z$bAhsiD@weY3?n%+IX!x>Q-x?(jp1};n|Hn#3>7zSuqOzOm-}>I5AMAI8Z)tS!3&d z&??-9`-QWk={L28=|}&;Zo~;`!T9uIzyEH;n6N=U5VO;pumqdo4$TYJn~xU@$Vjh} z%af&a1Hi{ufy(beE zx_f;AE$S;YUdb}H)b@DLGce-D0>F?zD)PU&C+v`YS^73v(?m8v?Cf+BDcU<;s#l2% z7zQ|FBDd3Mr?&WDM&CLFpDj@2%0? z9S*V`C3l4A>L{=*YKmzv?EFx$kDF;&;Ev*x>adE|FoWZj7J}+3LXaq`yVW2xv8-lY zjf%TfY-0C%JQwL24}~?=w}Wg%3Wy`*3mEB7b~FNIIlX|onX|W|`F_J)Xd*P~w144MW<)xYrC%GF=X58y$QU?J~ishyr4=Z{F! z#4~s2tqcut>?o@eN!>)r_kz-0=2uun?=^+6k?O^d{0H8Lf(O?t1(x89pC{}%38tJT zDe`>r{vLsEoHLcnUFi2Cb$B@jxq;XbczQdzn+sg8r0L5%^IfpW^7?IJKEGv}Q5W@% zR3DGAMjC)9`dS{*3*+Y36(CWzfJXSqUU*?fJ474P^=4i{9)f~p%s=xoQY-$6uN&XG zY4aKfE%amXpI9RKAV&xpbH6}2YG}3Ujqt8XM<>L)%B=cA3=0rI&DdKl8`nEzT~V;p;Ov!`YCwRMOLk`)lSP!$K8^eKB@L6F z)}vLf{11T&eXtrS?tyIc)?634@hny5XDB2IXZWpd*{-C7AjQI-$3USnEar$q@>VZ2 z^HS(XWK6G;>QVf3d!cT}_S`=_eDLQL3ao532nRKutN+whsjaA-%Zt{=`5aRE16JUg=r_OgwA%< z5k>ae8YwJS2E)r`lEVoDT--AgidYsu{X1JR4%ZjoB}H zhT2&uYrnpvWKvZ|D$QI*-}AN85S%3Jr4zF-rXq-`xvin0fkq~Lqh#czoWzKLwGQ; zY0X~6tXm|XmL>YKJ2;Y=g<2Gw7*z5q<1xYnwi+@mX~y@CkbodG8H;KFJ0Tj6q};!!|UwmV^p3EK5Ab7`X9k2upB)g zD>vv-7R{qx*?6KDl|cX9EO+}Ax}XQ)t^_u$Sdhy(I4S*Gxg4X))XbRHy`exr0Q23Z zotsIo4V`e^|A&Wn#pfMdp|(txKTBk;7&Jl4>|_m(Zi%_tAI_=+?0D)-9RA$~_(SaT z{S=I61kReoqxja|UeFLcowpRt_JKR?c1`7cvH4sCI+rZ)pHaKOIj(t80-`c9ey3y22X37>=lTbH(?`1wygrSS*(93H?b)Ubtle8YYx?Wy8S_XY@h??=s9ga>!Uo z6i=%Tu%}&}56^Ms!*kBQW$OX@Y)QmyMUBxQKDCib&s7G1i}od%+T|(VNu0x-L5{dB zV)UTjAT0l2a6LNnUKB^b$|2R9x62)-r_w zI^?*WWg6H@6k$tju&~R7tERl@dAJu2jeH!YvQ$lnK4#M~T2h~tUMwX&;iNdNLj~28 zfh=B0(jTSBr?uF4n3}M~yw@~P8Y#fR6Am670)K9bmHh36J+rvZdza3m_w!s%b~Ujl z_=Op$MIl~1%J%QA0`yNK^_WM#ZTlZtpXyIPUT&N-@s7ep!IHmIXv zrbTjJK#T{Sh7rb&b5_Nu037qkc$#bjo-&cCFn(Uc)HPpMO04rMJ=H~BY1W~#87P8U#=LMHRL=3ylKCmae6$?z5)K(6 zJmb$=yFa%zu;nGhyCPqU z?r%;ndFkCfYG!0G_T4N@w|Za(v?%KJ-e2Sgg=i{%{NH*mP04{Fm_m<7%`Bf!53><} zZJP7}UrcvPPyM%EX?JOA%$>j=+`h!x=7Z(XM>QxQA@=ju3F1x6KRlyZZ{8103j?C8 zFUG#w9NL&dP#JjseCCpOUwudh5mqSo7fHN+pomF8&o!KBabD@ z(?4@f>Es^UPG5DRloM}#-HRMqUU-|1Bw`H=J0x1C>c@EB_t%;$KINJegYu`b{b%}8 zN{U5L!8Cp22ajG3mmu<_cySgEY3n%MQTT2Djwe3Q=_Ut>1C?TmFZ(^60yOK^_<4Kp z8PE-(Yz_2>Sv4_}3!FrZhA$f4*eS6I^B9#gG9nWDq$!0y#j8wvWUrLBLUhh=5((%+ zFVsXdkCf@q^}8~8{l_$5oym>R_YT^K%S@= z^lqH(==r9mE;rmaT(JcA__ev z!us|F{Ar*u;Tss#$&~hqw)v`LKZtfQ(1D!BY>fYY-o2h}g>KirVb+iG%YL0DN2ENR z*VT9pjdG>JrB0~nYz7T_w5~|HrYhWUR5SI@o$=_aY{Q;)*0(7aGMGxc2q3|KM;sqr zeLM}WM_yBz)0rq~a_>QeLHMPPrGCMR%^%X(>w;^{=FN|@;K7|dI9Pr9W>vI_ikQr^ zb5)mu2%=+{$UA0N19jjsF|HFVa-aT{B3s&hqwxBcnFU={<1Ie3RX`f0y<#lL4;%^E zny0wrmb^5nN->BXTt3%?+Qn`I{+)q^h;eid`7E#qqW2T}v zgCr*zdULtjX4sP%a)<_1*^k33z8A1pB>lr1oDMz!-_VyQk4{+o&q7l`hCZ|LaCkRTTbVr+q38^*|Kp_BzsmC|P~a}_mf}yp7TG%{!b1x~t*zD^*BED5`JKR& z1tth4U;ficCUvyMrEF@H)i~q(a1e%TLnhaslQSi=}<*DHwBp6NBEzf}w4F4i9H&Em^(Xe6b{&wk}G{Y`x+=p;yk~w+ z3F&aEojUaJ$+w7CT1eZQHbhoBhD!Q#!GWWuJH*-cau^v7HGy| zB<(FN&{O@|YKxC+J2Z(QFmx=)DsKHF07FVxxJ`X+!X4l^dVdxK4PPy*`B{j|E*C(! zB1{F%wfM1tpfc>#AboKx$~=hVp>Bz&U{bzGKYwN4^D9nEJq8-51UDh~1plg07oJpN z!raR1_S|x~C%kKw(^T}kiMgbqVsD>693pa3`I5;Ux@l`1u`qbMBj?adnr| zri~5K$b^h)xchmHZpl?n^%YCO>dsoeDpz%w?MeaFQWR$sb;^JQBv;m($1K^6%u>it zimIR9**~W?J20E00Asy281`QyhAdHxpX`%qg-=b+lyqqPCD`wx;Dk& zQ6`LrEonuzxLg6htUiSxt?vBxx(6PjKHz2 zKc2vg^)3CEX^$Db4$bDi;Cp5anxrJ}B|Ab+YN2ZCubD1bc-N5{ClJ&-B_=t$w zI7pXABr)A?68|6|(CA}AE;Iiypz~r+{rna#NR?5c|Gq$b8lmNnQ|yp!fTJt@_AgSg zp?B?-ej_Nm`i7R&>77RU+@?+IM}Fjq{C(Ol=H3b;_jqBG!=>Zgx^3y_2wi%&aZXLG zyflG-c(a)TgE+A@@eJ$`u-Czc0NYAr@Kl`2$BJnyRniTY#djyXVG+WMqZo4qOy+QV z^zhu<==|Y9IeN}yH~UU5D^PSyE7&JKqOCa3is!k}Z+3hY)dQ<-o z?TBTlMekO2fyCmOydCLt-Qw>CH@UArqqQPGo4?&(SB`v4qrp4o_-ogy*nsIHe-jn^ zDR!H#S`(XDovIxyd6mmx#3-Vh#v$Q5!5;(^jm2mUkVVR5yYt~%YvbukuZBjP*=i=i zs8>m%WZ@~h`!`7;>23gSJ&?Z6-JYzm@@H+p-q=>-%SC zi9m8RYtFO90%G6Q%i%P8x|$|yr0Qj%FS!16kyb$Vfd>`l#uhpa?Js~^a2_a~jggcI zxB7>`hVv6x`id{T#aB#m;GuxStzscoVqnI`iYD?PjUds-&7Dx-6mIa@P1v-Ttw-!? z<`@Yay}GrJhV6D<1bbJrrLR@5cuBB4!iR3EqmbmFT(&@N$}27R&G$4-1FA!8$%|iC zJ>RU8bfe#$A_6Ty^ADr@97P4F2s29H$Sk?arGQ|4t4FOm}=ZK4T!`zsOo4%mKs-lbX5>%EhDvCSW#4Vb##C856?jUhT++#emSv# ze|SLIyb{dL0(B?I_NSlbEDEVHb@;e3APatz;+}x&WU7vKt2pXiC}J=>V_diy|~jVq|xgv+i2LvbDujo4#9m!{6}@}Y#5iFpKnx;)M2pq&i!3yC7B?dL6K2Y-MMuaE@kE{R`8KykRXD68mw!N z%F()1EnqoYFGm6EpAvksJmFY91ttt~R}(JP891CcY^L%IUkCvdP)`srGAf5D@LOz3 zHCFdi^J#r6L=6QBu7Ugt#$s}x{rrcAbB~#UzBqF#aW<=k?TY7*n%~M#1~EIuujLRO z!l4Z6fpy;A{@dg76SGZjS7D{1#~#_rbwwbipvtw8>PY6to!HJ_*zGs9v6_>1nS1;$ zOIeOTxaXa>@ibMtx(HJA!*V%g#&`dQnR`Etc{WhXV2^7gj%J4w^skeUPNZvhPIz~fLd~}yaI_i4x4t4FU$S9Rd1;w>N0>;s zTC!$s;n!5sSe#XLgDfxwpGy_Rlx%v!+n7*+ouM6k69CB@bFA!p^eymtg?$|ik5Qfrlu0XE8xqedoM_{IJtVVWI>c?;n8d~*t%-M)PPRYpc?~CnGxQmY z+5fO=Ht*o4fCw%J$dM_`P4($s&O(v3*qebMA*?WZz2Ac4cl`t`$H+{)&m=&m`~zbp zy=qN!T*J5_n=b)=hXVQ6o>fn^=~4+)WoKsRC@P2Etkb>WTVM(EC#srr+;{l)cjOcmsv-^u9aBb zi(1TasB%afNrhwX>nWVB>V0!F4xMhQQm9L+FS_-|SLN%_O%cA3)LDTcUAM8gv0+IO z&8-;BH}G1Z;oQFZYi|?WJRS%60Fo?=FKew6guk3FKz~+uB}nk%b$H}2TA@}7aL?^^ zAW6sxph#p0@oVv3{Y|x?dqc7tw11oU*8@BmK||eM9yE6Bl876diOvLDCq~n|#G}Zt zM)x93tsw~2hf`{%N~4%}ukKcbv&*VxEuZb?-jOYBVfwA0BN`UhBQBBq{#0K`MN(4j z?dlV*MfX^++^#)C-oc6Vz!))So_%e!Px}pE$CnwedD{8*Vw#^d+A8JS$d;_MttD=O zK1d+G0zKe&UF$HF-%s^E3C!av1(;;zWKZQF@i?)SE6zeTi|30xSl8eu17f8ky*ArC?i-@6~#= z(*h5x20Qwf&O1oVW-4bqo=RM?xWV)In!|(qd0CUMJ-ZfkA z*4rTEG2B(7;M7TTYc=DQ7ivL-t9Qdeg?`2NB(fG5`&e_E4p87vDG}0F@dclsvPdv6 zG*{OQwaJcP?c(Yf?T^cJ%_ib}G=iKJ(jts9P^bpnyfVZ)k3pW<`1TQc@IQt%&M0pM znz`UFL+%(s^VG%7j2dtu*@OXCyC zUIvEv;9isVv7GbKbQ2P^3LoqxlYN688B03%rpicSPdj))I6tl-vpi2u+grN7(t<-g%;MHNeyENVu{if;{s8w`aB^d1YmhSX zbLlKJNjG_ZK=7#MQn@d2k)ka}Tf2h74dGuy!I zCk}{MJQx!m7dPDqosmPPMTVbWi>*1&WACcX9a~^ChpP!Anx-T3MU6F$y0yzp(Rz$t zbOUdykwSm_tagt~ieE#LdPctBnEt}fTod`pn3_Ykw`BaCHLhrT zU@`+2(#iKax-l9?7%I;hq>VW`Iy)gKEW}|gtmaFMZQ)9ilFilMa{QVbVb_mhlb@fE z6-$@5h<>o+&#lb%5$DyLtN1ZzR2a?Mmeh3|T@?4Q%XhH-g?ieE2lE2MU!|5|fjpP= zOSkvy&YJ^xalYHTW-x}r?3@fdA??Uy63PHd7QfL^Y5UK4q;%qC4RZJ1&4yiaz_ zoVEqVcI=bLh>(}?n^M6-t?nYr`&_NaO~x!|e@VGKBEG*;CJq9&`NP`-=7N|<$~RwJ zBuxb(^>^=;^WRpw+WO0Bkznkjz~1f{W>8&KXC!PfUJ0dc{EMB?%;tXI*SwIC@Dkl* z){$oLD}U^9>YZ%-@O7TWEeH10-ydq>7mP}a7Dz2KvLsPr@MNQ@S>32zO>iSv2NLDD zZE#QPyLq$$HA|edN;el$FY-#9GE-O5zciS5j~&F@+ch(r*`S32AiR?Wnng0gy1qV3 zJw6_P%bAAT^5%zR07v?1f7FOl<_`BwPQ;n*>W|bvqTz80B;FdbpHli3#J@)eShFlj zq`7Z>>a$e)>7fO{{UKkEm1^eIl$`A#H@tLGVrozq7E~Dg*3x+<(2e$iS62fjtDXzV zwe;D1ZsSNn?b7M9+Yi4+%_Vr_mg6CVa&tWstarYEl zJ-b&;pT}2rs#z_WA~Hk2AP=*J01SfICrR^4@INu5@DsTIJ6Opmt<-cggz{GZ2`D%V zT_gA!^u%v(L{YgGRx@MOtk+VPfca(bfsa4SCIx>hYq%|)t033)+1A&uqv5{7%6v=* z44um*$1eA73L(S1EovnAi@I*YM^@6lU% z&OaSZAQklH3B=U-X1+e+t9{1sy{#v=NVOl5TT&8qdjXtj=in5Phw4K%^{;!+j&W9kI zGani0W|+Jc7KtX)!hW@tuUTs~X=>XB*d+D%i*Cl^PHQKLQYTDXSxD4z`d!*lAG;vcon z)-7fK)t-FPaDZ~#QqT?}-%pcCkK_YuIX+ri1YHBZytaF&vhj!*`Zt0={Hnp~tr7TR zX=9mvXd=wQXk}LBPL=xTjT?a*Fash(SrL%a6l1=|Wq z6X)+V&*@wrxbmCX3CY-H+aEQItw)!0scAt`0gyUlhl?7G3MYdJrP%mN!BOlPlZN}a zn%1)N_jSN~_!dE%3X zEWVda##wBOqD;92yCNK3Wpk`z%=+kzeEt9omQD(rQ|e@e)P|sC_BkuJ%oE^u-k`GX zd_N0>K^>RXw9?n-TqA$u9>6l_`LpvQGW@2KQ8>kS6qA~{@4@JbXeLO5{K^zlaKSXw#!U)E9nzRc zE(HCTtl{hKfV61~p_pDTAogK`@ScB6OmO_XRiY{3aa?9^Qb|C0^S#pw{><^70W;eO z2@Ec-fvKj+#_M2ojG3Yyq`1>b?I)T{CA#aoOM~@v5x>{vA$)%JhtE)CbbjmWN{vPR zRX`_h!D#zXm5^C%y|xnjLM*xNe{DY1o{?@?0KV$8rlO^|dZf|NU#jXtvt zjVh;0^Zb3}DG@@y|F8$dZFuinK+O0}K5c>CADCG*@DI7ys;Y%_oiwfELfgI%oF_n& zu)x6%9*lh-8I9v?5PbqmqzR?AA{1M-Wu9yf6r>>^$Q$@C`PqS9%r&vgqi3Nbj^p|Y z5Pq{jf%pqMHA3aoTOTYz5%^7gsNTd2#5;^jY6<^VivPo>lZNl|_%TzsShaLA4AYl} zg1BQI9fKeXhgPqp3o?AH1wV~OT}wv>QYZ6qVBcwDnTj$GnH!0J)2P?}SjnwIKGAY~ z(&^=4@S3yk05dZdQn)KhDS0nJy^wW4@P&+sX(M+8mWX)Rkr?V;k2Z>#%pI1rXrw6H zo%(`KeClWt*LmIdowhU13!?DJlA?KocJA47gw$&Q~o46HDzH0 zbRWTt%z*M!$hTk>FnQguAenG15CxjApCIuM%FH*iHSI9h9T#Nh!TCa;sXG%dq za`bnu#bo|wr^PK|TPycJ`Oz4(qx&Q|{^6;{nHLp7$HaQ%jrDxjIhioV8)xWq;fZ+M z&&anW+S;j$QpXX&^`;=48Go5pYqlW>LSE%%(m6ZBHIeQU`G&Q z(*V{pmetFH-qn2)0R#}EKZE1qo0go)wa25=Xc+)5shY+$aS1Yrtqdf!wbQIu3G`{z zzTpXfhoSYJInA2ne_n-wIkG)I13FJrJOO2%d$dVFX+w!oknU#oJe((X!PN?ZB)*k( zFI?K0SY)8ewfAB3kET!{9igLLPRNa@ewO*UbVeto^L!~ob=WX^4+n`9MIWyohqFz3 z(H4bFZtcT6+grc8HZ{43Y^;+0hsVn|NRu!oY<7zLb&x2~E^`hommQPsI;{1kJ-F%$(;879TP6=x|DF-=a3nOsr%i~7@ws7;BF&hWBLR}-urNc zAp`tzRov0Vn>Vk1eBI$s!b>Ur3#d0`Kz->TiP9g)e{CTgjTC16wmv?iq(0>LR3gbq zaQz;g_Vx`QX6AYgfqT{5_sJ_;)bYk-4_acz4I3i!VygDFwfEvWnFnee-Frb4@Dg&? z#Xd&cLPDRolsJ1Pze@CpQ*kT)L!t$VGvz;d_#Irg4rpY|E$b>UYW5oE?8`jW&J-m6 z1Mis0D0+OgpG-DPN>_J+>VQfN*W#EMMPON-TEpW;EiA$B{lRq4BisiOhl=WO2KF+W zo%}}%rNn!>qD03RyU51OdkW?dQ8TMs%%4zg{$Pd$qTt=M9YT&5nVwFbj=m;VNtPi7 z95apHq@myD@mvl>fzCf<6q^&=Dck27Ij@ea(*vT?_B*Lq^IV z!@l=37szEwB>EJ-FZCqH7g};_v;K!S1I)9f%Np^doeA`|(DEEDi1LDNPM<&?t-6NY zKL$(WnNEG_n5x_j@YFyB&i(P{z;m&plf!#?2b%7)H>x-l{*-cQS}TignxEr2D{04pM+C#K^K5Lt_bt5CZIbf2tG5p$MlV9 zcM#k38P{2_BPIR&Ok;8ekfShT--B-ttAukEIYW_^&N{-b&4)@C3aTAMK@$sUStY&R zkn-5T!Wbb038;np`GfD7B6IFvk&J;cTU*)eo|^hxd8N4zu&IUM|L2>}i}5=H=+?u- zZKe+KsTUko@cfC95Y@q>xiq|N>hjolqs4016ArV#sqlON1Ik=ibz-vtgRW_u{R>IB zzZnyB_R9L<;?=eAMxSq_K4M%VrU#U!!D`fDQ}qd3jyC*=VJfuXLSu3r&I&sAKPG62 zxYmtk^T;b_Fdy@U2pK+l8MhtNPW5Mrq(IJFUStYPUXB&pxuhPnpy)yb_>?ov6x3bu z^88TTK6*eOviyKQH_VVPGxc_?;0PzIo~dH!S{RQ9V@#1d%pxDO1Dzf|ec57ct;CJA zla`Wp@$gjT)wckhF{6W&)mMS^yBG90XYJMN`ULoUY}3vA0UPee>1t!I*F5kSL+0po z9&8gtOnIuea14Fu7`+DK;)8D=tO-V5BFWp7?SJ*=`;op+@1vi-`0QB8pZ4WN@^8{V z@3vh5NeLh`0MtN@d{0CDgLz)O0WNtb@A(G|F3uX4>+|ri%^sboIa8da){aiS?OZ?` zQ@VgIyn=#N{t2h#RZ z?f05OTTbNzg?s8EpS?tg3g z)4c8C;+N3+m)NICVaZ~$-|i-#4fveM&tt!8Hc%JZYYZ4%I@?!vl0dvpZy>(Shkybf|`)61G@SZ$UsI6+n&|HAAUyBy7S!>mi zx2h$3%(#;?Fa8u6Fkl^Lqs)^;FZAU5X7o_?jLocqV3GOGM(T|P(*K(J?cQhftcF8% z)jvGeOVc%lTgvSV9Za-Qg*=<%0y7li7R#Kv&Lps|k&ORG-h@V*nc(BG!fefTkx|2> z*55OZE0(s*bA_i0j-AwCqq`CX=iu0HjuJ@HDls_zhcEZc698>WLuyGGBf?iUX;l1z zKiEWQmQ;xG*S>0J+G8~tx^;7m8j6Z@;2EPeaIz?b9ykRvGQcbXd;u0l03O^3y+d2~ zvk+Au9o*_y;mlI|W1@YYu8E)@g-dP{O;_gMD+(>G+@OhT2RDy+ym^X?8=TF7Cw3Hl zt2JH+XZCx*?p*=-m-ATJ0UDe_f6e%~-l(`^;@rV!gd!=8pp#FEAg4lx5pmk#s9`&o zS#QlQmXl(xMPFe(X1#O#BG?KWtkyi^y?8^ysa31XmKjmt@hV;)7j<`{{Bx_#OiY+I zbC`1Kd*1u#4ILAf6kvnkp&%NLV(HDwd*ml^Wk2&1aVQ{Ad8@Iex}FB|W++G-&=IDS z{f;|K;oq$}I&D{Tsm4y?R;1$Io5bfd+cfSKw*14(g?^y-EHaj;mv)`sUMJa*XHh@& zHT$?YFPD9t&|LB~bMJkUG=bacQ&xw2)|k8GN_lUudi#mL71=KE{B>--xS0A*(1iP! zVQ}RK^T)042aI_YLLej{A)Nn)=c^R0e!E!MZl93)Tkw^Cf%6`)%J zlJPomY%sJG8PFl-@}Gb6>1T+lv=r6Au5LlBUrdtOZ0*9u`Jv}{@9MT8`RGidS>1$7 zn|S5Qt#rd(_HhRncE3wUmAMk-`W(=!X|tG`rv6@+zJFX7oWY|wu1OG|fMX*2yqfld z5_-&kaB63`{gU8>W%M?CpPbT|w2V!`4a#6-{gtFsT^(HL;K(3qEd79yeG3eS^#ulRcm5unS{&^29!K=Y1D(DL>2&kCotcJKxBI2)LWR(D^-`w<&bf zvySO&fkAv_sr5zPT`d4-Bk6p4tB8Jw;%^9buJ#M!z(oGvU8cUQV37LX^N(;^d+qkr zw`d=iBa)!N9sqf$QQQYUh=4uKQDa@AcQta~x~qHj=hieLe?5(bQo-?#e#v49?9e8tZSLcCF`2QrUW=I4%rx>t)PFOj%2TB3K2KBUF78645p1KU}DK?Pv|T zRJjG>t`tzF;P)8UXmL3Ct=5c<7R6$lvs0o+m|BH!Gc6vmQ}~A94Ets)+1oaK?6_@ZDpP4-jF zXR3aRP=h9m{o?TGu+;^LtE7B7bZT{cM0&@D?f>H3s1Jv{pHzhXA?_VY5ywbxF-g@S z^ObgPTGu)n{R_?Bp{RIfaq;V=)KU*1!D_dSQbkgqz|cUgl>aZZovIgrA2Ii(3gP$6 ztq#`$IX24C0L}3ArkRbdX9R>Eqy36ji@87G3s~-gMlU8K;}Y!{4dJR%!;=#kVzW`UOPJk@Mw#>#d>?GQP>?F2Vw~ z3CeA8s#c=*B<%jp8*_&sVNCq_K&&I#+@fA!;#r(Zh#iZBEb}&|diI3NuxE|Z?i|*k zT&bK%IVsi z`M1<0N9qzc_-bF>$6c5g5Um3pCx)%eDgCeb{jG(o!_aW?KvR1Aw{r=9Ow z$#gTHAR|6u;l1>k*p?&Noi;gF9}3Mh_gaUg6Lx(-ICE#JrnT;)D2pM5z*2ZjF1^P_ z?DU-D+?G8U@#t1<4seawoR4@>MMQbjjwr+3kKMSS zsjcIhL$|$#mc}rE7W#aJf%cq9V2g9Qe(4ok)oK@+n}}>2BE?as|82(wNXcV7OP@*! ze2C7v_=c54E9*?P(G`LvGxz%fmOd^d_Ay2kHa9s+429tuvhKmh;alwoh{#j$R%kU( z$A(X$v)H*T$X4pWna1RPBfv+#8XI4lm8HSsEEOBisgtZ8THe))%6#{=UQLQEz;Mv^ zY~g!zJxJXf$eKd*bQ$U8|A4`$oE!KNQJ%l-QT#J@gPPSheOz>!u*EgaYWj8*(;0uy z;nyJNUFlV+r8~JkLrACorMBM7jy!7mq56X*#I6*8;}QNZ95fC*e{5wP{&OlY1r zq^8JLa$c0Sp$A}|ED2yD6bTNFR-5wS_3{u~#u}k8aFhZl8-v~}3UKlZs7bHNOMq6C zdMf8ZJ%9-~e+_KRw1?g|8X$8yyI5 zcGUka=jlzUOB|^& zI;^=T8~k1E@7FGyk^}Zne{B zg0d4vpUHb-<*f1-_f58%nJP>Mn#-IjGD#DL66>r6(|pdPWTU$ec$ZL5*KPj`3B5G9 zSkBW8tsGM1thtu6TCXO?#-IcvI~VcSjcO*RK@D2+teJXUNuND}+-UD+`2Q2evH!Z) zg}n3w9j-3`#7^b(Rlfq{EJ5ghOMsNE{I!X(DlHK6Xr!%+SV%9ha}iM3(ZN{;K9yH@FGzWo`h*_N>jU zY)>nY*fvkJ@q^anoIXGdd%p3fZcYn}^uI3KlGF(Z2@BFc^{-&nW#IXKPuE%iA4RvN zPOl!*?REay=j-$R`@tIokd*Kgz`7h3ktTDNB~2Uh`lRM==jmjZj18#kfrv@*r4D%5 zs^VfAXC+$VTNf;P8mTAAw-jH=nlcwOl|Xg$Hoc@8>CDPqi+5*}qAI;^c>Siq0e_dMi9(H(hZj-EqQ70;1AEhh5;xD zsY8ZMiBj+Zb1W`6*-3LZ+|00dwPx;0R?^E~oLjN)3RkSaBVkdU!X6mjYIiW{cwDkM$j%eZDPu>KDr zLEgUM&xwBrZ~Px7i5-OZdh+U_?Fn=b%7dPTeNSrpOtUwJB}q+5@N+s&hApP|*Y7^sg;-Renmtn5)alRm zNs*NaFBPkN6_;jxdwDf1AhftC`)8l^!{5`d`)x1@&#i7~AjWl*>rc0^9^)SY{ zCz1wE22Wb^Xyy5aX;YSjFZnN-=&W8B0~^iQ%A5Ah_-AOBHy0iN@m{&4waUoal$Q}( zN}vv?ndP(FJvsKTRvZnOPe)cNUA1fPJldRDhW3_>Zj60&8@LyFsoaPF=)GFvpQ@@Ly{o;LYy zo7uDJ{WrxLZlh&kHj?*R(YR-m$L)pt_ zd{6Ns!T$gkejRvA#oiZ!Np=4KhPIF=+x3{0WhrWK1IHfi(67w9_$U|xI^_E}N_kd0 z85+wa5jzN)_WQ^vx@Yso9C{@SK?pLz) zfAIeRBR(t4;ef!Z5Ly~HKLNZJpAPkZhx!~+Xi)1KeXMu-y_%0c=4)~Lxn~_8Et0@v zIXx@n1W?T+%O$ zlj(MrO&pDELj2Gwv1V|#TTU6Q}s6!`j@J=I}$Ti#ts2c*z1yj6BipNShfhc8Ek+utQg<{&Q36Lt6v3{ z(s+r~R*srJy^dUNcZF0PwK(61pALR1{08uGYp)SC?}zoRMd7=#@b;xLLgi4A<|`_% z&bz%y#yPG$yEDo7gBzqRIISB?`q24G6|lJ4`l~*NNBbxEcU)8^6T zlU>o7fio{JhT}1s?(!LenUPm+d zr7vMZ`*iI(ak~$<3EZT1!k_Qbmi%Ni%k`>*#_ zU%gt?!uz*Er|zDv*H&I5)NQqGI_0gj@hFpVyAsHmC=BYMO4XFnx(6iSr3R*!!O+`_!H-Mp_*aqt6rKFBj@MgqkgduA#omQt=+6 zZyeT^6K_;a>9slk0KTiXo+V2|mZll093Slu`#IQrXZRbc-=?h=m*OoKSbOgZ>Q`rR zFmRTOfHXggp9Qp= zo9#ct8iRN?#^iiRvDWm~8!sT-Vp#-WGnrN>uv2&5Y-EF9E5>=ICo9ZkxtwD4i(Q`f zzhm|e38zan%3~O)%A(RquDaU)0OoD@li&uQfALb^#Tw4J;9m(TceQT`cnd;~)VxfL zh!hdLISx+d4CesnHRDH!Gdj3Ohr>~v-$_dEUHWPAO!wCZ;bVzdoNahTb&PD4w)Okb z9)+WL7vMj{9}ajE$3GJ^-wpgVo=GCqFLiGh1ejYhv;Oipy+$+FtiXebYRc@jngZ7{!I7QO=IP4b}IuZt>Z>Ud){ATfMqbpA0Qvp8Hm_)O1Z^+5jf7bPhH| z5fmUG^T`dI;9wf_^USVus~FPdj{g7?Z%*6Yo~A>XQm0B&t0}c*vbMeNvSBCft~^aB zw$mFx@ZOzc5=9(Zj-cNxoa}d11JibL#{i5B@$>ke466;3l%Mj&MSd-}_#Z=u<4i3^ z*D{L!^sevIWS8gYeEF(;K=5?lC%W+!?y=%HyiswhCFFY5osJ-$e3HTym9gc%a!U?# z^%d(;;r!ZIbq1r!YgxU1c3ZDg$FH8`-&u3!mp$&9R#)=7T0cU%d|>^c^qn=+!E*R- zQxZ(l*j?+lG07K~xDbV7{x5QUMRzU};mVV}Yu~NEJx&?%M-=JQJ%Wcl^4)@@J%9e%O8p@ivvN z>OTxV2l#H)bWJ@{=J!_c+%ev}$k zT6Eqg5R#K=e80%%#8&!_3R095TUSfs`|oq(O=si2yQ^q#YvOB&?f(F^bs)BI&2b=U zA_wO~G5fhY2n66`rFzuzx=^dl4QzbnZ2GlaHLB@%r>Cz&&U|a}W5c&8;GYfnJ6gZe z^$4`qOA=BD*lTePri4k-EN~mOT7^afND?Ix}&0*Iuoj zXRUlr@n)T@>lSyOC^1~zy2o)QnERu5Wx-%U05HZ0z{XEC=u*pRRHmAS-Om>ho>iq< zN!8W%dVU8V2EVAa<-P8Z+TG@ zN^YjB%eAZDfAPD=631z0_IpSoyO}_ToTyu8yls@G8Z`cBT-g_tWj|QzngLjk7!N z4tN=@Bo`NYb==n=kFyJP;z9mR6KNXM#rsEOblS{T+9W9)Rz6D?U9ew|E6Xjx&;9m) zO692c)bGMz=TVp-&@}j`y|V_}`&Pj!X$${{XT>&N6r$;~RJqOwzPD zwk!V9J_on)zra6?X`|~l@#-2*lMb|&SC@?)xv{orZfDsVsl<+LF7P`wDDP|k0N^g~@LC^N!4;u`;z|>p-n_p#Cl&a$exF2mkyJq^`pUV z%{B-LG2BkT2H0_sIb+G~{O84ZKWQk|?zvy)zf<}XFkG!m<^6sq=~aiveGA~qnb$c6g;r%B2P=ey`&b!kBh&+$_?_UK?@}ttD z4nyQ$+7I9o{8EjtuHcu!o-4FX+HR?Bakaw(kQ|P`U-CY)hWNU^M_$rg)SmHwq4X87 zP_G50nfdc;r~Fm@pLLsUKg1p&@r|#ClUJ8ixSH=k8orYEl0;%@qC4;!WnHD!mG+UI zg1=avD<$H*BApn)$!Tly$uGO~X!D~A*g5;#eg~>qe%p5|rrzFZUJ}z|ys@#7=epE2 z_J#=Ee~d-5aa`w(+-I$Lc#jTMOiGNZyEmdr@9)0<03)^LX~RgXofpIJ+V@!2d_@#L z6Ey82#kII2YkgAQH%~CL6%M4aS4{A6f<5cY&Uglv285@DZcaO=Zk;@twi`IJw9-iL zKWYt2SU&@G9TM5DG|Mj%-oquDg1>0IV8Fm(&joicKGo!Sds3z+iD4v?QN8cmspe-` z%6O=rx9|%~@JGY1g}(vx&mB*zjd$TEfNo~Hzqz$lTU+f_*5KP0Qas!=lMFG)Cmm~> zKCLY8i?K4KoRp^RYrPhpeG&5#!(OYN*FQ5n8~aWCL-612FRXk@*ZfE0hWI~s;+;!J z{?yYQlG@KP$}HzwcP$${a!Rt8&kwnmBRqc3ir@^Z6T>v{l+unVE^EEpd*5w3c^bno zj4_TU=tsk!jXDp;O;c0Rdzy|(lG zs62yS7BY`AX&sZR3A?s_EPNgDq`oBmv3xV)jbhU7`fn2aNY(DrOUy4rxo+j$^6@AomQVTX=$r%{rex$cZcKBJ|f-2t((>G z#Qqwz^M2K)cly`zEhmYEO^oqa2(_W%T4s;n%CF!-AB zj>5v_(2nT&yY|iaS*mNlv;P2#d|~kW!I~6$-1?MWMuVs6BJx$R5@LU|t8|q?3bbc=vpS7r&##U;x@RNES5S-%F(0|$~?)S$t|(VMoV*m7!H{q8J6T& zE*r(xsZqC1lzFx9Z4>j~PeL%+eQMbCb#>7D8{l8;;qa@%I%b=3{e*Sf-3b8kKDY4( z+B=~<$k{R5#84t2Jr2^|tZVWvBjY^pHmzvS*~hdlzW2Z5W9l&&1xh*+Yu*{~x5KX$ zPvS3y+AoIuF?FsxF1;;{n#B{sPGSIbQIHN71A)aw8u_kkP7uUZl+<>+IO$N5dY%vC ze;*AR!^FN6U$bA?c+S>D)FMlaO&hw9Ncv{Jj{%dq6=POA#?S6ODp**kYJ6YeZAMRq zI_$m<*X|iEFKt`wZ7QU2YA_SJIbxGs> z{KF@ujioBoRiw9%>W_rXa5KxQr1gW@_VQ=bUKz6z=@VSr!X(opInH@dQ8f$eQ?^!xX7>G+C7>>T>@89(*-x z@k_({cf*|n;zx%(fANCv#y0V48eN6>oX#acw^Ou{f+CJMl1vvPoQ|fxr-7+vbn}N= zr3prgS8}zs*(>jNZHmIuj%kdA7`1l#?dNm0v+#$-&)J{BI{yHLyczKe!#0|?h@w{U zM}zf^H7;U<_bQRJS9{0KtAMM9EA5gi?DLKj$~dyJtB-}0SGz82J72N&8KzT(jFO>I z%C5~Nb@!eRdGX`+iO{U|Ehgv28dis;>b6oHM&rZUB3o)!u2%^$l1PCABRnuXw8=0W_mx2 z{{UlujGiIBywoqW-w1d->j1Qhn%vXES~L5%QX(v+fFHy#M?qgVPsI$4$|^9FlJZN| z_jddYE7!zh0c{Ju5_iM zzQ3vDLQ&?_{4cZdj<=-vuf?7q@ur_Xv#jdVJbJvbJ1xbuvAb?fj6&lif;b}p4@&)0 zFv{bO!PA8qB^d45-|;^{%W-&ID&@9}?tT$`bJ4ySd{x){X=$h3>)sym7J((b^~12Y zo;KKz`=Z0Dyh<>5AfC7t&0iwKW3qTqo8_Ec`>wyEIdgh+@il$ccsqEW+g|aU-Y1&g zePdklKZvE4?BD7VNFr&b*$^Ri<;ZQvp7}U_ylEgKojhCd zV^8rU(RhPR*FGX?7Y0k;2sOdCy_y9JnSgw5`A9iXeMzq?G2%KLJBfrHHyk@(8dq2C zp@m)?ukB?P{pHiC=ARM12YgEK9+{=;{xtCZy`e{SCzWEikw#T^~0$=aka&y+FL4B!sJ zyD=F~7Pc8Eu13GDNs?60seCo#uM7CH-bc~3DBftt?`&>=bvkjMxO$EcBQ^3E+`Act zt9i#x{RgFtzlk<_&Hn&`wR>Fz-Twe-%px!?i(*$%AS|lc7~`D#R{31%(#OVCJ{@=T zCh=Q`g0#(dOYr54J|fhl)U`=Kd5o`?h!MnO_ahYXxQsPw@^qD=XKra8mu;wN3vFv1 z#k^6pG3}c%?%aKPSDNJ~Ceh1MjdeED4I=YVnmel7<;UpQ%%#+fD9lSnGD^*C~B#b7MWQ`O^9#jgjaLV=7K|<#%326)4ItQ{!(H>d$-e zPS;l!t!&ZiOXMLf`{Ec`3eA{CObyr!PE{1dhjx;QsKJG+g0YLE{|_NAuC1d&oqnS$H!e4NU?2X zc)Hxq50Q6yrk0P)Bde|p1?kjcyWVTVxSG=Te6HOSH{^>whv8CO__Ill*HO@+w(&NA z&lbIR1pffKoDf8E`DA1P7|A zGz&7X968-B;NWgPfl2*EX^ze#LnQVv_@w^;0;f2}7F(Q;?Q!DE{{RPgkHWUT6}lEz zcbZh!TBc)JH%78;P(d9yC$)BPb_R|=3sO~;(rF@Tu5|8Zd=&7`zw!ITz8PYM!$h@T zGf=vYGINe4e?gpJeQR9r5r^U2HA`zJx9Eom@}I1p75F{y=fjGNY2mvWC6CMf{o6dH zigaQa<0rj-Q;5!UEKB#M`s`;rv*Ewm$HLk>{7ukweLBJ`Snhtt_lpn_f@UNgm>3*m zw`%*Y6vbjcvt>Cu+V=Stn&dus@vnw_QSigY7B>DA)-Pd-^3YvqGF-4=E}&pp0rlXJ zM>X%@aadf>2;FGx?EM&^?tLHoIDXo`DT~Ib;NOYH`sN)%U9E9_H<(d+nW2BYa06uz z7#vrV#2g=mmJ8cqt##Y-f97%5!X&-Z_R@VPLb}kj$*m(Mc@bq>=$Pg}MnM4fAmmr$ zs;y|&YE1d4)x<{=E4>d8*7QAIbk%O4w7k31p^cXITR47Y4hYB8*I%?zl3h=r!s2Mb z#W`8C@#EpnkK&I4d~5L@ov7-px;C{8vFSE?v?uK;GPxorN`K^yqlG zq$&G#ZO?4h+Fuvymy+GvY7pA#H|=ev+sAaurbKKR9Y+`^`PYXB^*T$I*J|(li^0;T zPMze+S65T%mn#(0#K9N+aG34~pdO~GKF*|cI_bhyBXq2dn>(qdjU=DU^LfVdN!wUe zr%gRJ3phOy4!7csC&D@|t>TSr&YEV8VI{@MMagZWAwcd)z^S1|SjfS5y4~RSi;<#Y(KZm?1wz_<6Y2zJS2DOGqk$kdq@}1oW z*S|{qgA0bCM;`{@<*uT70fw{-%Yo@HIa_V~1r%M#mZ$voRHRZaj z_n~f8fsNyfc1NRBEL>&o*w&=IgS=LUNo8QL>~*-Af}jRG?NWY~gs08W;j3O#TB6n4 zMFdSNym4$&L6NWz)YPq6ojz&K$KoHy-`a=Ao+#HoBX~XwyK&(K)!HSqw6I0;;(|@8 z=1lHlc9KSLdROfE2Mk~^v?$kW_qOld9@Hq)gi>7(oNPQ9;!$sJbKzZb-&k!xnTqOZ z>(B-z8YD8;VR%U;Oe%?HBZFP5lZKmF6mxb>xBUUPp6MX2L za>RlG>62Y}r%m7*in@~1=4$UHbJKo2{?Xn(@!y8^O*28hf(;`J{f57aBN-<~BKe2WCABWx}@jr}pgL~pRUFW;jH9beo zkl4W(8;CrpPzN6M^89s5`GhFZjiIthbzvlw?vGyAen0#iQj~%+Dt<-EtBmte- z=XW5S^UZK$<5^-_sI4P8yE_){p5EmQ5`efl-Q7>EbHPb6QumH|qO3!1Z_)pB#_5%VL8Hw6<{{VEZ4n6CiImSy1 znAC+QqIy2R)y{f2XHu)2pS#f>vMl^D;pkuqZKLQm&niW4_G?(}fns=3v<&CcyeU-0 z;+x)2ecL@2lRPs20OQW1r1-M?Nx1Mz8%sHic8haYeA_?uUVL^Y)s4*rB)tUA$i7Y zE)B}+4w5;T{N{X9_=lifk~_~MQkcMxIn z+-GqA066XXHegzk}W`@FHtEkB%?ztuOT#G3mY@ z^H<769c7RqDp=zK+P)8pvy293IKqO_eXr9}y{g@8eu4OIB^rPBa;h1&e9VW54`W{! zHEmA|6*lX+bUDuw*c~*-8DTZ_>-)nKaHl+em9`pJmyy|nsqI&iJnO}pJNTzdv(aO@ zmrRN~_#04`-eR&kDa!?J#PMFf60C65T&M07F%>Gi>T#t})N!82e-Fcp9ex*WDp_wwoKdB>kAWcsgShe3es$+n z%qK!in?u#1c}B(9e`oDhHMF|aq?X>-?Fr|!?x5{B;~!eeS;QwRAg<)8X}Q|#9|os@ z#$uKu3~EGa!CbFkK*2SYEY>Y*j}gLYX}R-;t7EHaz971?)NJl;BUu@(t>jIEZ>ZzF zdvt2iuM4JaQk-FjU(M8xSR$Fc_rPe^=6M@{wA{I4V~(7r-L6uV>}8TPg{|h1GSRz1 zys5@At&R`UgyfOY$va)6wEqBv^FZ(qf*#{rid{!ly|^b%u|_J!G{)AI`PjK64mr(n z$1AIt<82KR-TwfQ-$JEXc^^I>6nJOGTJEQJ;L`4vw+NcGij%(D;HWH(?~`7X@EDvF zV;YNnpLBN0cBI_TO3+QoXY;(r5wGt00;k_K&sGT@E-6#!b+JJey}6QRj@l3%+!7HH zdXjnoJJ&muo6}ZsN$X@()^DsdEh76}xsF%Nm}Ai5d3AewT*AVj&cy z{{R!;!}B(qS{~!!?~L}IBGy+(hSF~jo5?omx4M$~p~(k=qZ@f1y~S%hGK#(KdN9N( zO33%UC~C1h5#RWx`0mHar$#N1;QD}1dgGnCMCw}gKBf3${O^lHC2R_$~WD_+MZ?v9J6j^I9>IFo-es zl>~W-lBat7>%j!#vsL2Vr@wKyIITY8?X}f@Dfl+?!&=6HYj5IT2F$SeS9)x|Y=YPV zQKND9!2=lk*uZ5xnyyYpo9omRo7nICLEyg+{96{jCh(}X(7aLop7#%>>cmBDcQ8?y z*Zz6Qft(%~lY%%=$B3aCvv$$`4B8WLk92$~;_rh~nY?eMjV|v=*8ED7PpWA*5V9-J z6h&Jba7N|wayTTZ=L|8$cBGWIM*1kWx}PX%w%VPyi@qi4_ltiT>%JM&FSPic`OUmD ztR^XyQG+r9QZ_w_KT}mJaz@=799z3yN5A|;*E~C`{4eoNh2xuj5U-28EM&RUwT)FG zw7HQ{Ld7aEQmWh32JA;nftjG{Myhe$Fsh*{c4zac;$Mej_C4_ym8sds{{RUGz@Ln- zZFQk|#@j`g!>2chG(9K87Pe34Y0G^8nh;nIm@nO6MmppkEAtu{>~;on_ET|hM{ODN zF`Y_pM`NaqB8E8OiDHH*qg9F|P^ze-001}u00t|b&C2cFk*hq<;^)MhkA=P%kHm0z zYVX96$$F4XV7*u(w`co}E0A!k*inFfVh4Km@;s$ySkGha6kV^cUqgI753E$>y_xeD zjX!Cx40zYT+TMy=#hwq<^$SJvt%j7d;eif>N~dc?#X_9zI6W)r@LV07<+-G1%Nmf2 z*IRjg{{VUEQ_Jd7se4|>m;4gaKW7;{JuT0~FBkkz@K3}c;s}k$iS4wgH9Z}yTpT9d zrbT_jl14sZ*A@D1DuSy`M#*2L?9Z&rvA;-I8EJ+apT=OIaO(5{{V!O z-p{8`>vNBY>t$82i`k^-*GnI_9uv{!NnwiV0=zm~$9V`-g`G+1k<&i4{M%m<3E!3V zKRZ<1TF~~73)rokYnawS3ScNalg3SX5`5A+8oE9t{k(n=cTAU=)KOD4;PQ$_;CcTvDdIydWSWj;8>oz}Xx7b~OdbweS3WsZRfX9w&_q;YH zwQ4SkG{{Rv$%=I#yTdfCu&!9BPuaPxA^4f=_+9}nCC=ikr#4RQ)@GM$GA z8wxR8Gm~<%I-rtQX7cz`R@81a?N?E<(%;9{P!`kl=fCqT^k^g;8OH`m2v*JpS2*At zo#^t#c@a@LFEismkCyh{7Sr{MYiE@Bn_97Uxzwl2?}?ZK9N+~G%n$*B1~JI4`Vwz_ zj#`NLBTM)*;Qe>TwtA+MqT1U-Vhe7_BEwF$xT3D*R6x@=bJNVas{9!E@;P(UM$9CfZdT_rpmo%TI^ zpAhKgQ1d)z_LkN(Zxr}b!G})K?-x_>O4_w_m5;fnYEy^2yoo;QH)LOKbH~!W{I`SfSX#c@5hXcvOK(^?d zv{tRRWS8K27mPk3+}!*YuuU(*nr?`u*iV0O@|h;MGAKbPbI9Q5ZgHCN@VFSqHEvUH zqVhinNjydGbHiIuzt_A21;yRO@?7YiSc2;2T$sUZF2UO;o-5Z>p+gwbTbivadYT${ z#LtNS1pdyrPZUr6n<5qwY4?OgB>>>GeznhAEz9w|-sZk#PMjvT)T69?bokxkG{4hQ zSD#PSaM!mt7bH21c1(20ttjMqJqD%KY-t)aBNX1|B58K=!*8hDYi0;wnm_GZ8{7+o z%K;-szsJERiqqQEjGSd3M!yT0`$=BSA4lnz9}@Mu8(#|eLs;=Xy`-Z*{3G+&!6b4> zpY+tPKtH<20=#OG%jrqgtrZz{zvyx|N;j13nf6bCd@JK03fVosi+oG}00|DOa~v|g zx~V3{O}{)l^YdeloM$!h*xXhV6+6<0ELNVrb~!3a6ZfL5k6X~z!&B9C>n%oQvyOX| zQ*!ULAt#P&$FI*yl%*ANIk}aOzO23(=@;5br>=EJ#pwqr1{3z3B`yQ>~r@QfHnRdXsUBEwh(WfU4yG{pi zabKhGHyu&Du-K=nc8l_T{SMqdCKOUqKPIkqO=^D*TKH<`PrSGBO@-1VvRncZKPk9; zo~O1e^*CYatW&6;xc>lB=STP4$@{127wnPyEO_$&0K>ER+r`sd_6=9Dq)E;=T)tIEw=eLZeIGmGyVq$nx>Il{#|dio5INd*+?s^|kRno2A7Z z_g7I~sJXMZQV9d9lkeWVdDn}>Io{fCbITDaQf-|LkL*40^5Oi^c-`nRXP%cW$wO*sQBn<(_Lu( z4$*AmmqO8{En%ivMj~sOK*1^p-9SmpSCNF2`DIpb-g~#x{t3^9T&c~yS@K`)GvbXO z;HQObZ(-0cwXYZI*7M%LzuJCXvc(I5EM;+=fWrsa=DwST@YS=dTZ@-1HD$KC?0R@8 z&lgtLvOZ?`ar;mBFXAeT87-yKb=g%#wvP9Zaf#^vt!ynF3q zwzdMb3HL{>&8_JAEC_WKwa`*x&SITXG-l5yBZA(&>&uM_^`-9n#ypan(^HJR__y%l z#^OsWPZM~5?Xx!NVvbM&lc&s7V7E^7*$ksGsT;UE8pjP??wyPN9r$tZHv#C;A9{_&Y{{RCtEf&H*ivAMQ+QRDQ z=v#Q3MzOaGYI3Bl(t-C|BMb)zgVw(DgY&A@s(n_gy524C=z7_1B6EJueY@kA8x@4Bl8gM0skvUvBq2tZZo1gXU+nYySWr{6nbenw`Fp;oUP$ z(j|gO?e8w`-b=;Gl_zN6Fk_LAPI}johT+;#YIB=!@G+;BK1C+apXUD2($~qoit5Kv zh5perb16n|GmyXz$E|zul{%EY$8>bX`&_w00i=7i*+$PnWsKA|rHWH-Elykap*hUq74V)57BwIw{FD(|^F^#Za9pys_5jsVBzo zhO+6WR(*Ouu(YzRw22Eg@f#3ZfN(MoTI8NpiNnb%nq1b7SBR5W(34ZuqrdQ;vEoZ* z3k~*zaXp-nBBtaq6@ZdD=jH3`N^)M_FQ;a4JJGN zF4d#8OV|gRVphWZo4LoXJ64#i6-WEdN6X(^9+IN0uVHd}(UqsWji{BZ& zw3q%$zLJ)DTyUwE`-NiwVEsL7qXm}79Z^CE=C74uWlr!`XR-V$_=KMn{4_jSZEU)A zkklo&j?E_C#iKZ8bK57N^sXGs0DIfsxzsL|5u3MD&qLChqgu9*jo)N78FOf^aQ-R%r=P%UZ3l;S8GJ>5Buw^p z&`PpF0yipI&US<7Ij-C<3jY9TUDS^%>UtP#C3>%I3V#MZKYUgAo8sHpd{uj8E{SUd zk9utE5;Tfu1V*dew;sI#&0cfE*;ZGEUdcXhHda23EIcf}Bk22!o-QY0zhX0dyyO9# z56ZrMLu7c|t)B(>_x6PGcC)MMI!A-7t>V*GLmiZNdVcH7pv#goj-dVmzT*LqVJJ~m zD@$Iw=zR_cEK-7P`^Fc-zlisD{{Rq9x#K&_7)_>&ExnYH+X$H*-Bc>~C+0cMYpXNM zqe}zHMLk+?sIy8lju}D+)&4TnVA8xZt!j6cR@#lWn{H>gv$~6N$QS#*jmROp8u^SY z9ZW=H7iRQ4EIfJYC4JA%JsZVdB+~ATS|+ck>8W>g&mFC^f~_MSGNc{Z;A6dg?OZMv zv@cRAw0)E+)Tcv9Y<(NykBmBc!)a^d<-4}=7L|3fZ9;oZi7aHEBvl_NT!F~xUon_u zQ>iX|J)B=lo}OQrx^lFhjPpMqSbxH2@xIngHsU=~Oz~9Fe`J`X`3n|Uf&tho2jd)O zyCo0(8&MW75%ACKn`L68#?~&PzT-7dcS3k3_jkT|cI`)^OYDu8{HSs*M zTwylh>uj$=J>$9^)UJl`#bCL8Sh zzu}+eea8vrvZ+nNO#KeI*E}Vsi+uunWts`>RB9nElY1Y!{{Vizc2p#p_w?%~uFn$j zcgBAPd@4;o*HP3h?S=i%k)kMvcI$QE$9D+H*~r@1#dJ{1aTulhwR?YG(lf7`;js3M zAKE<%V~9DV7azOwo7*&T1StRARJ>Dz#XfKQJiI|=t8U~9X37|gJ08M z_M!NRuK0^qu+wzk1$aVxZ6)N3$$6tijr_fXmU5=$hIl1*j&Lj5&8gO&K}MZ8w&f*% zE%o%hm*Rde#;~tn8_Jc>qP20x zwb=I|mB$L5NqmobkHS7T{gw}c{xWzQu1%mHMO;habjA8?9eojV4)jfH~HPY(fArIZhRsD51s;pe4dA%9+pTgK?@MeW) z;j0O*MDob;Uf=3bhna~zWh0Y;z|D9Wla?l%GsA?$5SJ=@($ z1o1K2pJz|wPxh<8tw)gc<%;H3I)u88!R)n$)KMVQ2YonF_{ST0R?4E%1tB+ zoMfA9eYc6*#?ry!SaTMg8Hx0lxwZ0|?+?qWk&z!<6W7waF$z$8ui`l9(@EVe2)uRT zd8W}Vbi&t=F14$pw6MSLTHX)!m5gxFskzpx^1B`duiQ!EPZjuQ!&()L65q)+%e%d{2$+~=|Mr*-mO&PdnoYyT7tfavB`0z+-cutxRUm4Mq+4>nJHi4jI+qU z@H*&>+!|}4=hT(a`9rSWd|UmNK0Dm}EYQ9%TuJcH$M>=8UK#Mdr5nShwf>`U*0`AR zM3IOg+~`1HtJ4Gzu5@zT>nv5}OZSjgZ>^HPhkiktW?5cm?4efBo4QYDC#J7{+Z~6; z?+$!UxV6!IapS*=*ODI>>LxpFC&8B!2$p!*ZHz{qStLdn35ly3QE7x;J!|+x)s1-X8s#bU%ptY`V6ws`$$9#5cN(Nd@1JwRrT&Ezp+R zBbnsfW7wqiI2ZtD8P=tI+7(rzlwVVxo)?Dd(3R>*&2-r9{Cn`r;g`YNtusu!*8DG} zPL{}K@ehRM{@J;nAczeX2J@}=618lhPuf!%@EgDHc0pe(-+{&y;#ux7N!(jCNR}BV~ zVP&q`BZuqQxpQ+=T-RDQ+w;?6zN`CGcs>S)NuS|IfHY^)jm4eDuW*lbEX-W;v$j~W zq1p)mVDBK6I{5YLq6zt8bym>Ru?; zward@d*2sneimIm#Yyw-&zS0}HpV4IcXm1BupX7s3KZ$nx`UO@I+(inip@%*g_rcM zuGv1lu6!f2yVLaur||~4tIMEAZ>=VuY_Zx&c!YqHlbzjGoeCL^RO4io z^zU!$%vh{mNk&ndZc??MMSlAC?QfZPPx1DSo)*!e@Q=c~%|l$#wFxC_o4+;u*va`p zi_0i@$G;tGRg`1u;w8;D%KIaZd{vTRFmdFH=Zky2{#zX`x$z(4&aw~oUx)PX1Icg{ z&Hb5a6||0{XaYtDETaVDZ(8Z0!t@~h=gsQRD;eT!q@T0*U-wbR-sry>yhAnA`tQWO zR?#ml#9D-QaxyET;{ys5bBgt-u8u?@a=uAAHPGSlE@lXq;=-Re5c z)KT0iw^?RXEL-nnkb2_1AF9&ky^o!j5MtvST=ZCe4ERzHJ&ufw#xU_b^1HAjuq4+~ z!_$t)@akuH$;(+CUC+YZ9L$$?8g7=C5|8w@j@b(kG1TMO8cvchS(R&9$=lTFbUy~p zCq=WggJNFsvj(KXv7b zr3P`-$1Ah3v+z5UpR@UiA0+Li$j)hFntB}!J_?n9ks<6e7m?nMM{=GqGp5q~61KD0 zz3f8{C3&zZa+u2(bY9cE7>guw$BC93kMxLk)*QAXShsVkwD4Jr$R*;FJ+Vfrs;kdhB)%k0SLz*X04qhc~xu8y%E_qiD_kS zk&9)VeVB7>I#-=N8#$p`a+4&U(@nRM+6}WU_0aOIu)JonlT7Y~Su?TwJ+FrT%RZy3 zz#_O&Ex^Z2dj6GFdXpON5;)HiX)$=J-f3b3ZS1@B@;N+b{7>axeMcs=KD#ZFir^4vq3$LXH~5+RMQg$hdiw4?AIxcC*Dfzia3<~ufe8KQ z0E_{F+>Vv;8UAmR@TCvjrR_FpEnlnY{b+fyRdFxg*!{2gc$akNYC$~%i2 zOE3}V{{w`hq&VLuY8KrzI_!zC>&lh+V zrjNpR@@e;9XVh+to8HZ@-{cQ71`(ERrGNt)x&1STzt+sNH2Usnxv5l1$z5L7(ekZ* z-nwjjy?VG>j?mV}fZTr7ekbu>kKjLt-xhp1VfG&f_`1?Ds1=euO3`gt31Zw_62(FL z++-Z&@;;)k07DIltBuPld~km5oUOf{-;tcM`jV!n4|*;96rF`%li&M?F_0Dk=~5|a zrE>^;Xkki?Mmi=SATU}1=@5`1IguDOknZm88oklEkt4sq{r-c!o;~L|_qoq?U++6g zt-JDIr$8DsG|dZ+lk7QJaB6f$=J#ggn@Y|zNvR#b&q(zo42)%XS{zui9U!;1G#24W zWXY;JX96w`iqQu0v+9ZlR4g+pRE_4WxlsoQCv?(Lb$EFesJ+6K=rpI#FBh$Zb2|SEfMHwx|{=@IcvQFc@|By_lJpii~Z>fiku{nq#?GxeNU%2oPK_S_9V zZ&YO1YvFH6z85rcq?>Zj!1wQ^x4>hObA7~vl-N2KOza*+cUQ7lxOs)*$J zpBfBindsAaiuLBXXi+20w>1nJo*IX_Eveo&f!jIcE4fj)Qw*6;6o5B?2^;hI-?Z2m z%VL*MB78~Y-Nm@Z%>suZ*8qpFwA^~hwO$OZ91n$ck@l%dM^nr3RR6V~Q8~g6Q&RnB z^4xMOSgDnMJV3)|T`SJ!zl4KrT^@;rzAP8ZzNBFc7MeJJ_Ld=XR5I$S3d?*kHGRuf zimOt^M0}5kt{!{h916_nN&kfp;=5SOQ`b_h?@xXiWL3{A-%-AB!v1tc@_}kAH@qrE zWn=&@-sra3n$GsTK0b@|DAQm8j;35}v%ss{+8a|wWBw|Z?ls0@%y#HF`=0dYCo-AQ z3#rm6SeVpfTAB3_J+%K4GxYx?Z|xl=*Ula}#Sc3T3IEU#_A@6Bv>)qetC4JXquTxd zw0T)81msxD1#sHKMvfJ4wmz8^>0UA4_4$-akYqD|Wx4VYBnzGxL?>V_qj*d0?Eh6Z zYMYmw>6!{{{~$f1dnJ+lOCHwnI;sNi@Bu-rhEph_FfRn@E}12Tuz9$FQ=jgP@%x^Ua*A z8Wb@0Iw3m1#(%BthvWc?)gFZ@y`0pvnfip51}8KI{aLd?1Pvv9@#fB^1@-vG*g*yq@Cu>}N4nLv;J)J-%sw>I+Eo<=n}k=VE*3O_N!+ zX)VHkMlMYHiC@nnHZP?y|1Kc1ceAQvRzJ(J!Izny41J8`e?L`iNf;n9cdJ-x;!H*3 zzaAolj(DjxuyxpJ1?1Ct8+%sRZb#Mc-a0W`?bQele&un*KKj-uY*#JK(rf(s(MJrR zya4QzO@n2`%BMy)KfG63sdjM*`0C3utnoru^;MEm{hC#(6zvRY3a?tW#7AiD{dt?- zVHJZvi%Q<2`=#6FLS|d9In!JRtUBSF+bt*$5*|z(poR;CoA$V`^KXtUN>Oo+_lt(; zjPx&s{`8w`vd9l`1s+0>=s-f+N5FUy71GdlgDIEGVuub zUKN<6;O;NQxV9VPE2R3iTnHkChsC;im|G;1^(fh}&HsG-nq^D?VUd~2|I1RmNvw8m zx)W!Er6#j{7;L+b)p-7PXN(O|x;V0>?7|t$A7um|T>OPSof~#wG=sOIKPH_?X zRX)^B8c(^o4L=t;ocevTVezymkfkz#MCp0dh#fTFAB&!wRZ)cHhr&%VX$ohS8!Zc( zm@eBG#K$66c&E+|IW+L&gs5euS@GtHTdqg%kH6+RC6>uPicRik$4?>-x_4SF6>F=e z@AFKJpY6E=K#HCUekHq4@8R`$L<*0#c_2^Ca5Mhg`GKB%cuLD~P6Z{K!0wdEI@%Tg z9KBi-O6M8Yz}a|VhQq0+e&mt@GD=rUA4kz>4F&BFxwGl{w^ZD zT{_W5w{fCsQ)e^b{09FcuzS~D9@;%!5?#72Ev<31*dzyCr?vHDnv1@*Tt5`pWtvVl zV@BU6db)dV2Tz$Cv~MQDiwc->U}_f zpLNH2W`=+`n0@gA}`>%|7dA|gJv zPP@?g7S!7Ezf4*`ndgx1VE+-IZMG`fW2o!Jdi>Y?P6FU<6#IV9GHvNL6dRO`8N5M5 zi(w>(_Kg^5%vJ_;A=0{uPruZ7@B5I;=+h^G{AVPFeY*XV-Lm?rt8Su)Cti`6G{p&) z<3~?&Q3>SA9#laCC3z~G$wA{g_`Nr0ZrBh`cP8upykUXba{o9Zfzol(Vxgn>eIfKP z%yIZY1j56H&IfTZI`Mj>s8Jl8R}{9<3CK}?PR)LaNsUxFJg8D6mm$%3`0Me&3xT1Z zf2h@oqSwr1K@u7I#VTAYciu-bGc&A1!PLQy2^6^G_1+(ZbKzcD;4Y?kg#E;rd;;{6 zjJ$;N=i)h=BdMZI=edKZ-Irc%v*f3#G>_3Q;RlcUShGemKRa@fz z$5BTI$eiOzAws;#5YUR*PB;g~HX6b)+vt>NXA2=r^F^|Kr{1GwWtv|!EFKJRy1o+m z%(iilRiwN#Kue%ke^H)m0uB;R2#t($=>2RqUfj-J8spXy@ z__w)2V#E54Zy%mMpPVhy66?}h7}{z*?M0AiGN-I+r1r4!&wj!TlesYs@$cN*HgQ9_ zID*vIy!sELYa-)m$mk80&kt0#b<#a##v)d!&fUl%h-S(X-}EqHh%SneXPHwpiGI^V zoey9^MB9_LIqhyF>_)-b_Q>dFSM-pAU!`UCm~FC$D*q8Q@gG6?w<3$@pE9Fe`x+sV z>nd^a`~M@L%9F_&SJ=4-qoGbPWF5g%9-|1LcXs5cZlgRDxk4rdB{OGcwwr8&|v7RjH>Qsj7Ojk$yqs}vo#0eW$8dfklpmD`t3~NKS=>cA4IBko;7->a5&)ujhlOyISB(AmtvtLJ zid3oDfRCh4Je}cd38mHv+&_Q+#3gmZSD#n$RD18n3@Q3CE@7tpdmCx9I3~9p>79`C z&d}K9V+~ouyOpun6r!6y$(G664YfQ{eVShEf5i+P&sx9+RpVk=$|kKTRuxl%>87dn zeS<{rud|8J7B1xS@3jqxkA^oUy%l8K0`TMvV=EsJ<)XTxWlBl0&?)dKL_pP8<75Wb z^dKp4Bq)wW@ zD?H5-ujk?|GTLmGN3*JFH>Ghcx`Tt_SPz~8&b04TA>u8Xnt5JJi}ZLyE=iwPT@l{K zb?AxdGmX&&Mj{{2PVPc4YI|G-rs(M=`B^J9=F8L>4=vq08=#C6*EQP9mkU>{Qlx`< zzIM3)o0%YCHLo?T0%M`WTL(Eo=Us{t7nO>f&cBkKM!wM`+&BeI+U0QrcPr8%wVeOaHST?(e;f6OO9%`!1 zW0}M53~i-w;JRAH(2Yod&}2=2fXd%J5oNbL;Nx^qgpdHWs%XKRLj_$Cl3fcy9j@Wx zb#rNi$;>J|M~ojeV;9(1<%x=jL*dNVWfPuT_9A0HF82{v$FIEv8C^m2GYUA#4a=k;sKBM_ z`d4*j?P;YQ*}qS3%|)y#=b7;-yG0~961=!-rtWHZ^rS{JOGaa?e8-O}o_!wvdheAJ zF_)=-3O#kPwN}(KH=F$fPqURtvpKaKx?f`R<%NpeFgX`y#+NZ}=?ru(@bZ0=&Qe{c zL@DWfmp+RQhZ5wNO(9an$Ig>6-d{SGJU*^Nm%?MPO)#Hs8rqewF}2M8)Cr#`d!LJ) zr0_fL^htN1gO}Fk6c#%=U-$(>i&_6H^M3NR8e=S1iYp+k>i`0(vWqEKEPD`l2kUMXB5qWujDpNEO&lUvV2FA z_QZO_52jJ1@#7aSZ~pN7DbL6a>$PS{ib=K{QmnSM{+bCR++~5$A&0H^czH!>5G2{F9QFmBsfM zx85yy49nEY>f8M;J{MI-z2z;uc8p!;OM;2cui~`UfDAabb%_!btH<>vu(r81M(bY< zWJRJe-hkV@t6-Qw9#=H#J}=1uUh;I$ znJ`<_yC5DHKX~;pf*JDIbqubFOK(<-%*~c@@sC;@o1PK3*@Q)~@lM~8pv;AswGB~Y z?`2X`ijXU-G@q?)W;)hvSlxU1cSX$v1^P(%drxX+>O_BiyfniLN?n^2=J8ZK-Xvhr zvJkTTs`Wu$1|#y@-Mu{jX=-TS`pl+we$y0u#~w94^3H6LgYh@B$NKxU&Tx4VN@W8w z?cD}yv!-lI^fFCXE7!OV3{~Wks#V(h_+f}~FhnN1h0veTm7gZ8`}89&y*AuE zK_Wu9B)~aAu_Ag%6?0Ih#4sVYpEiLwwBTfreIn`pO%~)L5QXBC*70t=GoI0*`wlAHgnurXqip%Y&d!`+B zs;@1g_tffw4l`%CcU3ch;ZjUxZP14WM!ZwG>(l9b)rVCVIs<1%5YpyC{eUJ>??vT0 zO!*J7a9#Imve}bvtny#h^WG0?2Lq$Ww z6c7f^bgErs_E5(r8qLt^A6aTC3C-`&;bjM0 zlDZi#d8wX%X}obuZLv|fCzuMSrW)TnI63!WsuXX=alBaE{&|jUM*F~90s=p` zQAQzrB{FW}Ft~Duqao|xcZIihD7@fZ#gqKY&aU5R0zQxLM}6Jb&(D)N*T1tCLe;`L z=c;DP>c&@*`b7rtiZP=AZ(Np-7Y|bWH9N41j}D3I@vaWVMZjm99DZ#MLSsN%7EBS< z9v+6~lpu^{T=j8e-RUCa?}%;o?BZsW#$s%?L1R2n6I*Px_bF9eGG{DqGxl@rDjnp_ zkaw*KSF&JAr)XCzFoOU?a%}$99Tc}G4}29?tYoq`Dr<_7jA<6k8A26Ky{`$?nRlfD zRr_*yS+&2*V_oir$lqOKaGBiPjd@4M3-f11qvGair!5D%`;Eep%_@NW{JjxR(Lk7b z<@948Pjjg&kA`*qr`hx6xiQx@j(V{sr{MqM_^qwNHAL6hzu{x~4qIt)b$t>5d6j0dx&&--Iz#fh86E%hzS??Lc-OcsGvq|93XpFC6*-x2fp@vNgT@I9FCUaNXOt=f0=0A9!Kb`1N)3g6SU714UB4x=mmx}-d%=u zI~Df*l{1-*aq+B#s9SBn`8Y}%qGl~3ui{((zLrrUn0N-~mb<(0)#~5BTkqE{mqInNMp5Qnr2{ z)IH0Ig4ZE$1pUq&{`)dvdK9pZa2A9+0jM#x6%Nin9UH40K7{$Yd6bG6>a-sb!2&=# z72SH>>-jRmrpzk@i*j-4>#1y z6Mmf^PSIi(41Lqoq#@1~vp0*UC-?*5dwZUJz$h|Ht)0xpb-O)1D5rEarb!L@@zY5? z#bb`|Efq(bHw z!JRwjJ7}A8Q_I82J?5Kz7f(fpuoavaD)?XZyGr5Yw}Yi^d~yAKh1`{Ke!qPj>a1kk zvln57NW+MnTZ{3(bN6iE$)3VW61#~b&PD%+>}&OLio$IA32#L^?^N7~m=Z6&+EyZc zVx~_7fjzB^&20cO96mrp0bBZ)Ux5^taFCC5yx;JB@j#BSmxS|87sZkbTuu(G*w$B9 zIHRLsgqy>U(+~xiuD3DmK-2HD1fgjqPE2t>5+Vg&I0>9T5fw<3(NUeG$1{posb4r4 zw}&zvv`y6aVv~K;PML4K@5dCF<;1bMM%aXegIhavTUcr;TxY6=o!A9D#9*WJs>X2? zHN>{&%K>?@&E1j?iJt0^T2GHtxm{FfYB+63A$O4d<)!u=2VSTD26(Z%Z-u!;>9p9u z#ZeTV8q;>Z7ldmZNR59b2^oapls3^hUsDd@4yQ8;iKm`DsDHaf>{dJX z&zmt0-_Iz?7M$yl-F_5*!cF({NyMU(RB3^v4Fu$w1k&P|`X!S-8@O?gTG~qgDXsc+ z@y6_C6GPl#14tFR1xT|=;*Zwwbky?>Qe#D1lJ}v;$oI3Kx79aSR?n8+7TJcK#4?CT zOm%b>XZm~Zn{MI;)4U~UQDtk#*UVF?0@I17ApE+(U9JPeg#paY3Qxoon8E3RT^hns zi>f#3T6EguG*T4x4-sLX@(BAZVD%rzPRzWB4KA9CO^lml5sYX0?q}1auqt5Z1lANZ z*X)2o0618#r*{i_Jgq861*|o)8OF#vHs@u2Ak{v&V>1K0#W4mps0!_(wo{u;2K5kwf3`+d^@Tjl6|q>5i~+5rtbbk2?TuNln>HyM=f4TS3&$W)jLNBT zZ5F~YdBIs&OzB;WOo}0~Uu6=5|969kZo?t0SVF%`r#hF$-gl!7u8HO&XQ!b)6S9P6N`r*RIhw!UJej^&-})J=}O-ZqOfz$M5d?(+1H-jBp$DQ zA$!_9R(dO0h*YxBKu+l-p{9mfrU!2)zO@shm3-x5U!M<@TWgCV)z5>8oi1v9E=;PO z$lVt$&VoO@B~91wxOwf+d8?#;)Pg4b!jwi}r& zRNrBWyPDJ*Y@=G0qsbB+mAC6VXr{%qXSNmBz5G1 zK~q*Y)i+s(8c2henE@XuLOVOkTWuEmgp4Row{yKLA6$FU8jFFEUD*^$ckcYM>|1k_eSZHl`wj@A5Q+KB>7_+q+ z+DZsXpVH617}Kto@i}Qp&5(-=qQaH*tWVHu8}G;?`L-0wBVPEmV(h{tUL30 zOaO{@?t{02Y6Hmb(g38l%rjqO4*5GY%5X`Y?mqcopUX+JF}ZQICij7ks|FSu4rE(8 zE+b9~CcgE*L_MoDivWz1`npN6>{ zc>!tmpXC}a<{o7khp)M3@)fQn@0v{FEr6!k7a^+^d3>X~ZT|%(-$>j(2|;(I2i2f% z2pejrZgo$M?Ub4G<0O9JGaKbX*RCZf0#^L9>QUx0KoEP=J;^{^x2Ev&fggK!`9g#i zHaOk^E0C*>@3@5#{*?~Z`6k$2|A;(_?cq0_r+y%|N0H7}|13r<3>3(GGjRc*i#qTU zAqdVl*J9CV2lh08CVyG}7bgc-m~X>R(SQ@#GqdD@wFee-fEL*yDhtCPe?N}wdZ3P*zI`K$7a`gHKHFNtH3sPt>6*?}t!sqVd3&G8@L5?d1nr*Ln(%}qNj?4HkYRcw zbw2`TUw!*e_MuvAnP|3ePryw#ngu31Bbu;x=DI)>(Mkl7)T)8$x;$KA^}q)7wxo-T zsKy5E{S=MO){vXi{(Q_Vkvn!&7LjG~rmz$mF&bPQ5z%b0E^96lOtHH!@Ui#azR+Qb z#`8gq4dW2{j~u8b$>z=cV4Qxi@P5woH~*Fo0$9s%sY*DjVy6`;Y~%cHqVt+@%gi0B zL!e5*{9En#(pOaLU^qQZ+GGl;U=!G`{FbItA03q-AgMM8t6tn~V-(~6eKuqeJ@!7t z_soulgtLKLgw?q3fzgBZv+~k)$jl(WkV8pjkm~$vIk6f)SX3*Gi|E>Rk1SaWHz=IK zP-?4onbEs8#b{keP02%n>8_lLWSi0U*QI6DIj?{Vv&LSaDOy|S6fHjk%_!TW+Ce%t zC>9WNo}j8v-!Q4lo1O3BshP@KTDiYMA3%Wt107aQ;|QnE5bf=D^M|5^ih-qjNzM|R z6KUlPs&Je+f!xJ$^aA#Yp!Vw?uHB+@Fk#4t*SA!6IpXEtud^$hyz5K~Vkq|2N*yI7 z$=`2@fQElWy-;8z$|={9S-+M(ByQo5#TPtd{aAOL0JlSUrL#Ckm4ZEh5x1&>%UX+j z)O$@X`E1wk4wmIci+sTM>`Olm?eSA3NI2~ic=Pw}c;Vd+jMC&+p}sqGrw7-D>AR<^ z3lX;@sYOUcyAC!>QgyTX6!kxq4PB+J{g@VPXJcStVH=@ZUQw72hH-!us>(vwghNf1 zK8$!tMjd?Kfay=?e4q;!s1g9Py~$IHJ;b@63(FGx*RI@l-Vn~8Wg;f1IUCJGVUtm)$ zbyq2=rv@dS-3I|~r3-Pw?W<2qKh|jFeKTKueQKeVX|Ei<4x0P-uocGoqjTiOOt~@c zpivmd(K<9*H6gNDTgv%JKVDp0Jp?^4{gG?VzFf}e5>r_R1f`9w>AOtUpZPvLLt z7zElli=w=if%txCeuiAL+&^rO%myA4Ph!=>6h>NenHb;taOXiY$Hf+6@Mxt4-!&CM+L~1?@^g4JJ}+@ zC~g<1o9hB{fMK6oktjC78eOQBE*8wt3ix`CF@&RcKMET zsq8kj($n7kYT1WF4Q7{|bEEb&MuVfCrrGBHhAAuCt&wN!G-~4Ki;N4;h;t~z@xm#8 z+KoXkC&zfzZ9-d5cO3W7VP#G8=F61SgNxy&=>HKwTuY!rt`at0Fd=x4<+C8l0N_ls zIqHGSA4_MX!$r*h2<(^52Xo$Y93AL>AsCh4KR7wq=kHp#@#Q=$Ii3ekCu%-<0rTwY23>bG&R+nT&CGUN zDY1fEFh)sC1d(=$=Id2PC86ZRYpR?TBgjxE)}kg;&k6KxVF~$u zFr#EjsXr3}A0kA?kY>!ip| zVSC}{^N!ng+Dn|8fDV=C(JXvo-Fk1zXD=cD%s7AtJEV8;2!?m#d8D|ZieWt1!B zp5KUkDgkAG^WxM}+H~JoY%NE4xg1ZPwaYDxmQkkg{FNJ81AIqI;JVhoPTVR8<*m@o zdhhcbY!B2jUoS2=0rL9!?XywxTf4{?!jsCe?Zz{hsIcyD@+*;ujP)!Qtj;V9$ z3XuUH9ouZHCvA0FA6VI2j(tk6xrrLyM z*TZ0w`%F}}V8sh&8jn-!+#mZl(?A{Pj?fHa%G03jh6`rF{ODRXjh=ltFm22*^Z7Ar z!V}yLDg(c^@L?-XD1Wac$X{;$3}E%|-@?BQ^%DD;ZQ1%@h(Jm5k3Zg*mC79B9Q}<6 zeXX!2Y(>6k*qK&~4syqGSw1XjVd<}%9$yg$Pq|_&NJYjCmXdqM3%WFYzlmRpc&~0N zGw%Ek?tcV5!OvbbPS=cp&FTI*BX~bLkaorwOrH~Zu7&p_qh-@i>Qkk9Z085R?lh_J zFSgdsUGD{f)6o^Q*vvzi!ZM@;rO{z=CM~RvzcCY`V`k0b*(8#LKyS0$)S>%>>ULG3o z@kRr}(^0EHet6I3R7s(r))3S6r4{BPUhTnII_he#@e!(HRPwMReq4V8jmBomCZpdT zKig}n^C@W?3Z&$2Bemw!Jal!$*W{OZdqK3V)wry(g`I3+Om|gToy6Y|!c6|m6ayBS zr z8%`XqpdQ!Pr86wQy6Ld^k95+7k(k70p6RMI_^CT9<0+po)a0xG_19C;cp_?asWF!4 z@cWI{?ka=O+1QU(ih5|@deXbP^oy2YtIe7-Y(S3<(bhYW=MIlIu>IwAYoqkp9~rGn z_DyY*7kpvL$(s{dwp-@_LM))d2QAw#bhZsVP#~hE0z%@5ljgIU=tH5T5EdI2RGU%` za9(dSwTENJ{S0l9ytxw?gI-0l&2_gC9#+eXs?KOG8<{wzZ$}E1{e6o#AdcND*03LX zC4r8=+ee+;(<8!1nFho11hL)3otm&ApkLVHJH5WNpRGi{G<_cXs0`!)7W6n@Xji%|yG5iOL(it>q zCcg1+b#YmB(#eUYA+EibTItOo@y(zg)nv|Q4F@x#QPeAaJquueCjY2Yp++bqaiDOu z>ygF0(u6YD(B+-y5IBO|14eL$ZpR(Ly4q|y-B*R(scr_ZutIwzXFvg*7a7< z5)9%UD|MRvu-db(Me?eOze;EP-^2JW&-)atSPti+19E*YUma15Th*H7nHs2RdS+@O zAT(R`6E8#?QhFXZa=u(*!pJwEFW0-Jek+Jtq-5MPl!3z6hvIl#no+#Kh1oAso} z!S0f?I;E&#uysM=g<6DL^|GZ}bIbVTWbfqOa~Yf7uECSJ?bR)iT!}{imH`|eMxk&| zYPS}Jzy1pD0ZY+*NbN{Xg#vi1lfL90Og;zuutw)acFC>PqtkE7p7orJe&swIDZX;U zvEVKcOwg7(faAoiDIVLQgAf6+d^j|yDZRVL%|W6D{owhm=c}agQUTBBb^{!b$*Dpu z7OzLCOY(BS`+x6%e}RN)RyGy}%(dBPsml(Pa`e6Tcm-2iQB7M^&`ZX&QUW%xWsiSt5kcsJG`TYATQm!$RCNy)azGO>UocI=$ zgj}78ZL7w{-2(QPgH6&YF)_U^oT+b@cbU9GLnMCqF4HXcGai~HM7=T8P^tCQN0?m3 zCEbj2;K2jR8Y_ty2cZfCBxKix`@esapN*HPdC2=XcwFuF)cX+LpH96DG+ZrJu4?Kce3DjoUCnE9~9Q!&n069-|+F z=Byl43utvr&#xTEVumY>e+UHZD4EKZc>5vz7w%9yC%bH{Shn&&$`CKIRSNYw%7WG1 zY^JzDC(O_Awb7?rh0P4=-IW zXWx`K9;L@e<_g}dXX4+6trZf0@+@H`9_L7FPdM4N(r?HEY@Gxq$ zcxzs-o|~p*bQoTjBFf4ZGo=1{x^cxs#M^SbO!@vI1W%dr+a{Yl!?KMm>N(IsD4f+O>ZL#@GONUrWTkO!xdZnc4-dTJrrw z7KxH$By{~du{}m(?+7FAaW7Q2p%&<5{aM{Lba!Z?s@uIbathTeuu@=aXM#8R%reJ3FMD6Fr&Q577f3I}oM&DaQpsHH6Q5e%)2g8k*H6MhN*f~6wJ!&U-M)E-iNL@T}ky$raamHYl z!D{*tOX6R03~uYczL=!5@p5!f8uO?NS)m(r(}feU))Df|x%bIU?)=s(dK?q<3TqLO z>j>bUbIWn8ellL>R&K&=kUnXuZlcBq)Oe_*KJb8vT~Eg_R_HoN&6`P>Dl$%rf1o4jS;OvdikT4e9;! zx*NgvI`eNPDFEew9DRb~f!O4mW>_=-6)aW+c2NgN5x+V=x}4j#t2o>aKB&_E{6B(% zz!5hzLdiJ5$IXc$waewH*J25t%G0Q7tY>>qvkhCi7r&}@)FQLg>nn-V5Y!0@q%pxn zga(#7{~EDYfDD{!7FUW zS4Rm>zXGrKw(=DhmdPzO?~A=(YyOrG+wD# z=(K(9q1su(vn@td%kPM&;*4L(T3QRpL8N0-?Lj~-DIZi&yA_^yKi}9EDra84BNN?3AJr0#eIYRzJV$fdz<9dEvp#)Eg7kdm2Z8+Xr;3E4^WVdR zP{T#IpkMji^i&(p95c7J-2o)qQDFEp@wJV~+0SmIzo|AvLpW&uiuajghdouUD#Mqw zG57Q{o3t(8Eni)TY@7b+dv_L3e_#aCpMk%^zDy(>KYeg!aN_ zcX#0^Io^P;K&HOUD&NYKnl|;`hXe7t?_Ih>3#8A>e+-HKUN7<||L^%uiy*irc*K{D zj+t(!NyD7Y7!7=Y%l!{$j%7zh^d{qb84d~PagKkOW|P)DFNvyeK}T=m#s_Y?;_DZ) z^XAG^X4=)>=7bK-aWStL8aAz3a!g#$)pe`BoxkE)1LUGsiEyc1t5jSVm&>SI(KSaC zZF85Sj5{{1xLw9|onhZ3s%#P#G$PQAe*Lw5gTZ?izCxX{=sTCIgFqFtF$&FJugh`X zL1>82MN<9U-+LD4boNed9}o_VSlEFr{9Lh^X9qAhyt=XhvGdz_`|$Sn%dvn?xrC?? zoyMhfBBXgj`L_43S1lEqFDla-=QRqOL{F2Iusq?dED&HX-t!KSa74x@7E@>*;&s9A zB7qkX0Wz|Uu$HVQqfO1jQT|Iw)mFF2{NJB!Ge4JRLu+GkEL}v=`SDw(xny{f4%7Dm zV-V5F9^Lq~$_czKyO^`y#;WGR>`bSs^-Vo}++``cocFW(@Vf_!QhnT#uSSa;bces_ zSzMcq&p{2%xyqVMRki{F?DV1KA^Lj?X}!0Parj9vWwc;j)Y;kE3nq#bfWvm?O~fkKU$iE(_iS8iVe!Pxz7 zg^Idv7`Y`RSudkohO#F#;Qk$^H#TXtpCNHWJLD7e&D(I{B;spO=NBkVw?HcWfaX+J z%|+fc2#y49co$D&#?nP9u6~r=3gA-VIBx~oJto$Xf`}q#?nRC2)@tae1cSq=k}Xw@ z+G;xsYXiaD(eo;^vI35Ug3QULnv6p?91-FB#r@x5)rJS&Y-Ej?{|vnwd7{MegKbkU z>yy9;zTSc6rryMMyX;+trl*SS1`iasqp?-PI$w|F1jQC75BI8$x+-{r>3mSCC5lPwD8b0Yc7np2i5 zAfYTXZ^BdEjD%cAQ{XoR=0&~x37jw1CBVO=BX@|q_Fl4zT8rF+d;T!{I3PdoCmm@X z!5eATM$D2Abf%hrd@})Z=zlT3jJ0qfF)7*J^(na-7#@oVyJoh&Zh=&jh6&22oN6sW3YA$9JgIX8LV zw%M?6L4?ndVUA)T84_PJ=B%=4W!rE>|DIGWld{Kjsd~A49x6JcaR|FK6TwFT^#G0 zz48Ko|H2HcH+~gOXNT|fi%Pw(JuG{~_LRa8M;aZ+tK(OH)4UwKe#dxXT%aA+ZJ(IM za5H7L)IxpS}9Xryom9n3|M&{*5=pQ2|N}#2<$EX%B>*CgdY7K=-8&csP?>V zlg?*?>=+~R+AMcrvT^G(=91uQkKku(xMeJK7Hx#xYI9%9dMn5g($&eN(j6O4l?ja< z>@cc*icTK;Y~A?Uet}zc`VICXX?Xx|++)%Ah?cT#fWn8;KglnVy2LSUp1FwS7}2Wfg0(S`fVJ#l*2OgHM~I1Xis|zy0)^ zL$)7iV7$X-&%BocQRb!hB|OQFAxL!h`hBAcEL2co{RQT{NvW|H@vxGQgr(4cFbG51 zx5dGOZ&>(THyI*$WhysdDoe8k{1mFyHnjd(M7;y0&2Le_AFUkV1#5g_yr-{xP5YxcZ$~%0S^aE3ZPnxK<1}#rD%{mhfqNJHfG$0Fcx+A+APh%&^QM}OXVPo++1^jw zsS0KT;1ed+Rq%W5!>|#(p*P4Z#inoAJ^KkIn^U)DKBH=;d}e-L*7YZl1}vXZ_}P z^p`;CRDVRU^4yx4O{c^3BF?nx3>u;GKLWx>v-pEc!Z-F>${)?H&F-Svth-C)W(@ZSv$JRV z5>XDy>Q)6IXCVGV&zY{8Y8E7$B2;QP0e#{nOowEbONUJ&~qf%su_l2|z7e7HS`kHowSU$n8Y zKQdte>A3!npjdWS>2CtR!iQixw@8`b*cxJi>^;Icm+DJNZ{5IMoA*KI@@gErmcQIB zj7 zf{%sZqj)m;7*&@b)(^GEY&Lz3{bouseKMe7w|KZQ7(@ zCRBaMr|<~52#EnsoKrYzur&T|jIwwsr+qR+nyu=W@P2NKrrgk|?!ffpf*&AuE$2rZ zY4fQcyG(!ymOcs(b3cJp-gMGUap%%S_=s0m^!}JNZ&;mTWZ;2mo>!K#GW|w6*N&8A zts4K?99+0sz7e_g#HBc)z+;3fdotN&jp60br#ieYe2aG_UR0BQe>}eZxaz?zXXx2TV7%$g(tl2MwhJW|W8>{OW2|X6fTwy2afbgY zJ5wn?cQ32*^SEdrtBG|D#AwS6@pO%6=I#0UTtSODCjSo~LEyfAC_#DRZ-?G4(5xbn z@9#AA7RU!zS60S<;5EyWxM6b&bC%aBx6O0&`@!BmweVe&cxzbj&bJlx6Hg_~@T&g$ zW+!h4^3SDx<})syIw<<*Oy9{zV zpGx>xOP*I|cq~my_vTiLJ(Iv+3-sA-qtvw+qLx`L(E>#4B7xlJ9czadjj0)O#Q7}K zHm^=@5q(aF$A1O0QEr0;6uIeq&#pA|dw4A@Y~pERg2`gFv4sv15CEV7>49G>I-JsNvyOD> z-tSK{s)!_dd=^(W(W40qO(9%KyU_hBhHc8DX`H;T+POuan4h*!#lH`K!gb-Fg*v6} z)}5wFsKp)4^{iq+_Nf#TxF7DTaqpV_Cxh~QOTg5{!YRtyC)t0Q>)~T4)8}W{?U0Ys5cYL z!YIg4>~IJF0IH@`xphZG9SBOvZhB9{_+xDin=pwYjfrTZ!?+_MnD^;ixT#vDk3Sae zSIL?7?=|Jr7w+?tI2K6)H~he)05ejf|Rot-XuS1a`5YNZL5IlY#nIi79(Yb8gR^ zsqf9pc3YP3P0`>N*Sdwhx~V>6XD-X=0Ob8BjA~VONSMa0XUiC$ApA-39G))Mq_fig z(H4>%A3Al|@}B1&mGrneFAq&~Zhgj6hK2_Yr8n<(>`CG4eIrWK^(MS%t)3`Q!*eq6 z$5B;P&QeJa6IP{Ki6hK>L*m%=xZ6&%XKPrb`Da+d@4@`>TSkht+1rN0N{votc#p*U z?}>I_2mEChgJPcR#SL^I(%(f=CyvdCEiQBS!sKz!BNgrB_zMpL__t}}-xOUp{3qIusTITBMs<5z>v-xQoaZ!? zn^B6|{eR$@LK1g!J~jBE@khnK7q#X~tx;}beMK#_SY`q!qFEavDA0Gn$mDZ2VWL+Cx8?6j0B5nBfrx11LYckZZdGHnR09F>Pw} z-{wplEuraJx5B>-XbyDiO*+%XgHW}GPwjmxRxmZT_1(2W7;eCd;iZ~lF)Nx$=XPqFo!H*7i?i870~?v95A9lZ!@{@Qfpm3H>6R-4%|L4PVKydUonv2F?6wx zy=b(o_wy3wwx`wK4XyPJJK?v5^y{+ecMgz=c@((h`VsUvuaeB_Q>&RyQQG<#%1tc~ zoBkpG&UUv4Sl2u)e`{vaEVmPB8iW{$1`9Ba$3fKKk81inyNPDGY1UWib^4JRw2zat zT{;giL|X4o)a@n>72T)FGCx#wV~+UdzQ(mqXlZ7jbE#_+=$%Kxwmu-!v=0z?$5ZhP z@%VbtXT8#))|oA?WPwRnl|jKE^N+&5N{(Yw2Uc{b#e2@l+f{zYEqZdR8z*A}MAAHS z@yAszx;2iO;F(ZKrD`5Y3myp0=iQT>9tCz*t(RmpuG@8buH{mr$hmKSHhoXwpM>5W z@Sd9tchOt;gHT&@3*BDZ<{=qk+fp_sZzr!)Um=Xnu~^#8$K8(hU*>juH56O%2Z=O) z18FAHO44njySt7?wXm}y-DGe-ya(U(`c_zMHGF-3Y024jdj9}OZfY=k9}#%l$FfJE zYqqxQV`Y8f+tD7Urb1n(jT0M;j(8=Civ0rtmqp?sCw8E;eLhDbZc^Cne`l`>*y^^H z{v^1(S!}KEOvWf=+y0XtRaJ=U6m}Jl5MpOeZk@HYzD(i8xyn{Y+};oEqlkQF?B1QoJtunUHx}Xe|gR zUO}~7=N#noRPNTM@{_GCOFlA>Qq{C3Iwh17-QA#yOPk5eQ9`T;+}H$>oOJcAFp{NC zufFs~RAx!Y>sc1$g)2z}IxRq0HCX9r~o13{>q7I$?4TB>uJc7;X-Z zbA$HOD%xF|Js+t$u;+xeKDO}ZjdY(AX*yoNrfIDehPP+uS=(Jt<}^^hC`)68BODJ( z`20o+wjQjh&FdF$nB5AqSCg|u`n(!L7%s0gyDRA}rc-BeacGhlq{jtZf=A(5Q=M8m zMonMLsxhfjR=terHA}J>%2#1ICvO6w#kO|5JQBILXQUloHjP0`lk-C$UzLxc{{R|^ zPm)Iyt@U|pvCq$>>UP?X_Dt5Y!+9eQ+>mlX@ARsTMJ1-krB4w~RC&|T`b*(Yg(vX2 zyVozuJkncjf&iqxdlEVhz3b1$OWMblDDi9JVT`Df*&QU`5p?}5d3OT!^%-THf~9bZ z2ml|hYnSRZCBDX$6{l#e56<7)OZJ-hg9V0>;9Uk2Wut1yWx3U4LP;>T1S^g+-#PT+ zzW)G%ats9OPPIpNx_b3HX;Zr9Tc4czFNeM-_=`-u@&1Wv;#=EI4)bjK<&wzD6sR{4 zG3my5$E|*mTN9RH>Z%iIb1j)uge7Rpc4Bz9!Wz})n|0&g8YZW2t9Xv)MYOn*Lj}dm zk%7KOj{_hA27SeEgvH_2RYHSJM}Dar(TCOHZil{n68)U?$>eL#6KNN+*=ybxFBYwO zPn`tL6vok#bCI0m*w@TwTt`|mwK;1UY_@3e^9<6Og`o9J$Cpm=uk7{X_^%*}<5bhy zMpDNsYpK~c@UZ9{4_=4by47445oPvzKgB=tHp}xGScuu}`5!NQezx$}iF{;rj|(fJNHMEwuJq$T)ZeiDQ@%oBb3>(a4Q`<$wHtn;z@BaV*=fPC1DK#&V z#(%|0@e@|C&@KErnvB}z!tI8_=X8ima{YKCllWJoJT)AegR19i9kr`0JtryXez^Qh z{hu@s3jW4A?}aq@{>Q5Ld&9}8-d;&^3AnySS77W%JPZNrUy|kd?jsq-Fsm(8ovqnD z4~W9%btRoCZx-$HJ~;RT;t6j&Cu^p~q~2boifi(r=dS09aj)rgJd&3(_( zs7~;)_OFC*d_wa^*ArvMBa!A~86b2+#w(JfDkp2$=!HeR`#=)LGmFCr@4r{h{Mx(Ze*`EylBzQC7rmFrP-PG}>aUx3ua4W_T?gZ^9c7Q^FYH8Dw)k@F4wkAz%(fUC@jlK|k zd((7H56AYfKa60GIea?15cBSd5*Uw7)VVN>;kq zXFu}wygAL@(<&W26)rx`KUP0kaZ^QPnCAPgAT&~-$ zSZ!v)kf0sAv5tiFXLt-p5a3}74k{~Gd);{-8=B!UlC5iX-1QF#{4D*pJbmF$5_sI| z`ZvSPA4Ge$w9&jYuOH$ z4=K}fYQ*YK-i^N(~tk#!TTX`mz;BQwUi>9Te&KJdcm&Ol)8sCL&{xJB;%f%WOilmM! z%cRpwMW#v*&Kl@OnP3|@DnY^L11HSQ_+u=^VC6g=HyOuUC%?$y#pQ6qq~f(Wn~#TH zEYf};4~c#X@r9M&hP8c7?zPdb>J0GD`m#fJEx1Q!#3Xr` z8yB6pC%-wbgs+n0sAef*p(=FeWz5yp^y|0ca?je+n!e2Z$^Ovzo$=$v!{SxP_GP7) zhOQ-l4e2-2F@)X5cPt?WN{z~enTY5y$4}@ClO@3L{u|lHR`+MSgu^&4WO17IrQ>N5 z+h5lF1E@cUn^*?_0L6YFw0XSyl=+erj!Z@(P=xK;!1p-fy6fR8;wsCUt*P49T6(*! zZ}$Y@UQM}ZkJ``KYsNnxz94uA__yN??}zU6JzcZl%bP0*t?!I0#HK`r5+MjHwLV?h zMm;cV`O}PWd^wk99>)ZqG=3}HuPa@*e*HB^mxxr;vOZ{=Q1Hj?Vez9_u#SHb{4()} z!yEUH!@e@`#=dSYFT6b*8iO_l?Y#Zo|pSO*?eXAf8w8sS_j0$KjoJ;_zHwT@{gwv$4yv zI4Ib1N|hjRab9N;*5T~O3qr0E3KMJIRo+R*Am#9M~l`KADM=qZdGeZbf3i;gb?~IcCX8>2|JQtgA)>oFnI?6Q~)js`v zyqA&Jf_Qoq)!wH)VepUR7lE|99e-KPY;OnhYOr^1ve4v z$QA9zF{=eANl8A;?uB}C@;zU}n&yqF%?_iX-Pr4DQD%iLq}>!?e-Rk_{PSGXi;2*h zdmhK|_r~MI`r?G0#9CQcoCCHnbNnsbWFEE4UY{z|(wx$IAELhub?bRV_YuJrsu3J^ z*G`M&jm!f$QO0=s@$Xy`i#p)+JO2O_>leNtlSS~P7YqH9uG~B7Hv|ClTExoEnH`^i zNa`5maC3`sf^Vs=ve5ar#orI4__O;+=sp#;WIhu3Q)vb7j0V8g=HM*t6A{76tjI_l zfHTH8>7`TIVQK5_XPvb2CztL}QRaGSxvoaJWFma4=w4R-O z9BwNUgTm5{{oQZseKtvi!Dg9_S+(!kZP9ujX*Z4H@V=?8>0b+c6XA^#%G%8?buSw0 zwrQwp7VWp@h%@1F{?aET^%d!08>@wjs*`;em!JF-!_RpmkDM^_cGu>l6&DVdl z&%`UeN*g^(#-1YaRlUBZC67zDuumaKAyP1ip$-7gIU}ulRd7nBKYb`guCB+-Q_gUC zJzM)r$vf-+00j2yZ`)JFkoZqW)Ag&%INDgGGRJkMJ*DNW&m&+g+egd>IUL}1t~@qJ zmcpdDZ2oE8dLGQU{;n#FQ>w21O<&CNtz%yC4~g#@duzQ$>%|di%=R}HbDO(>&cC{m zB~~n~0bD+Ja77r*ZdZrpg?5x4mTON&eAZ=|U@-A;uKnpN_usFP^#1_t_xomR-U+!L z5ct($H!z9`)P^e$O(dDs{0;aYf1&(n(KLUK9wmps zA8&{}TE4jCrSu9oiU}}44}!bf3OVOB&6{U1t&~c5D0ADQ==;Az99AknRc@N*^gnQ| zeidkT7SRm}?UO@jV@q3oHZ^!+g;(X+RFTsh_v>GeOEIk~jnCrqK4In)*{x3-@t1)j z)VxEdcyh+@MkSmVk*)#Qo%dtDE7-$hO4DpKeE?ad z^oASVc60(uymG|288PPr-0{VHE@_CxQS9-lP zCDnwdZimkIe-6BL;eQ@nYHg;&XKiaLPopwitcG0&+sq?BvbtDG*S*>zu47uPY_vFC z9{&Ku7Bj~+wyARl5qer>_aZwF@KgKlbhLCy%^&f1>z%P8Rycou3Dyj`I9HFTYA;C)N`N=K9np)66UP!tB~*qn5) zM>)sgD`NTKwT_%cSV~t%=C{S)vUoq@hxU%Cpbrw=NSClakgj2lIgHs^1_#TI-&*}A zBdZ$N2k%>Len-ES*QE-4(n4r{EwNn_Rn~xq}EuG`vTwmHrXcETeVq#{EduM>mGs*8>tvFJr7s`^? zw^F9DHnMj|pnN3Id>gD?UuoVxvbp}&mUvpoq)KBk1BPA>PVDoM$7=Djdbx!gPLo#a z>Unt2ty8lX%Dk&jneKYc#nQm`(S+ajnYN#s827IxG~GzHx)R=}op}EHPtonJ{{XZ+ zw@pgUMS|JTFmeVCLF0^y^z!)5s!4PbS3Fxoklxu(438g^CIoUud5r%62_x9ou{fwm ziKd;-j?^?Q3*3)A@FSJnZ~^K;KHyeW72{+}cUDK8>rkckrKq=*BZF~Rn_vvRGlS?z z&O6sc8;vB6id82`CWq|N}udYgZL$9Cw0}NIz*U@Z! zEv4C8Pbky&E6=INd5>TSTg?c>HUPw<#R5 zi*i0=@n!tJD)Fu3#bno3mMSfx0lr05CoE4+Nv~F%Rv!$m?Ah5E`#N^HzXyTzsXosj zj%ya!OsppPr1lHg3g>v5x|uriS}jhN$3xS!c+7U3O>%i>e6*PUm4xa}qq`y0l=WqZ zo(syAYX!npH7v}%VcDmOqO}>A&9a;Zyd55 ze&!IMd$9v7X{fG$A>KDU`u5IQ}2V>m6gf7v%i)` z7KmhtrhFozj&bzGbyTM)*`>L(qsuF!;V+Bd5})E0wWer(7=~E19VYK}v?VnovT%Rmh3UaAa;%n|*kAEz~x^i-Rl)QJOYPXtBiYzqOX`bkPs!U-<0qgzI zn&-;#lxkI}DZ4I*&|+yybd*<98%X$#@e9H}9=z~|m!?RTvRq8@-mRlcExW!0lyx{6 zI5}>W-CF^d<0`81l6Ldc=6G_-+pBqQaEYU9n&!V};h_MVUDfZRCP`%tBfE@cpF9j? zk?mb;6NaUQ_Nn`+GpeMP4wJgE`V*o2De&LJyJnL`g5^G=2>UU!(flA}2p>6R^@ z!oCW=XNbqj)7dv;<)wr6aAq6`)5Xdr*3<3UfxfX;jvWj zK9c+N*z3aKsnmtvbL0IZ#hy9;0EEsD6UC_CYhEJ`BhjLmwcMFuf;OIW^Bw`lE9-0F za34~1nzVZKJ!cwJ>2ljc=#3xackL~q%oc4EQq-;Cxh*A*q2bM>gUJDu2EfSZO?>5S zi-xfaMw9NDik2PqJj3EKAPW${&&rN@R_O~271VFrh0jPkVk%#EDxEC>f~Isw+b z9J?*SdP{z-~?n`ANGLi4Skj=Pc6%6&~DWuy}DfeJA|*d&- zJb9PAmiGR?A~2cGU5(N%&uvd5{h@pZ@GHYQ4~cwz;{N~&wWRVvEO0%zkp||LoPAo6rwM8KBy;1im^x|HlGOb7{hl;SFNvlvgMJY3UXQ7G=fxW9 zn7l)OcCp6<3l8#QasW@d`DSguFGJhi&oPfEqVaWR)FQU|pCOFJ(!;@}6yI}|@YjMa zuC=SnyS-9bv^!4_O=%UVj5(GxMUjR%RqC6F&Uy|jY)(1~f>yMoul;_8m>9}&=i2A6 zYg$dm_GDUCnQa}ct09^siIq|)Qy(#7(>dv0eLAVm^3?B?WZ`6Z=Ck8%ehpj0)|&pA z4ySEna%KL=oCLO%?otff3hxY{sUYsbI61FL;i*=kE=gIwy?#fFnaZtN3N6_q-F$QK z&&B>P{{Vzj$6pLQ58;!dK7prCd!zUwf3}FPrQPO3Di&r|Q;ddO4l++Q^H>ba2Z8pK zF;!nR+D=+%x~H-8R4dS>8A7C;{LiUwe`Q|_c*fJgo+sC=Kj9Sddc$KcjI^Bvvt@9> zN7^F^$CU5fq1p*J2d#Xn;=EoCRVh<^^!4R$b=mpb%;5get4Ep4chwpLwk$H61;tvXVw?gs9fvmM_jVH$XhNBgpp`hErsPEEle8>4C%K2*Gv|(Fm z9meYVOg=XWiNMvAZ%r$wr@XD#t+%>8in*0cZ5cUA%h39l_JX^x@yCdM4g5Tq=;y@K zc!JRQi%zt!Pn6|p^PYpG&!<^k-szW`MfRs2w-Nr%vyWPNA>6C{8>RcJ_lo*dK3CI2rK)W2 z^q&)IdR#j^4Su#h2hmYszS6Gb$(KEDtv&w$^e>vSZkmy$DsX)dojx;sVz=>Ej{JS_ zo^J+A;~fLU8dP>s=|;+Fbqj=^%s1O%w(|CDNkQX&@7=R;w!Vi8N)&ML#VPXJTe~Qx zp4;B-erL|(^9bQ_QlnBH<+t@m=YNhrWi1E5cUsN&h_zsgsAyIa=sGp5=1J}EALhBV zm19E9B1Vh^fM5f;v4dXr2a9nzgku_U+E1DHT_ms3_W2{^AzD(B>X&ZFm%_iZv_2-D zZD+wB4zG2sKT5dMqtrY%t?LrnUkkG-X%ZKTmYe*vrE=7djQZ7Md=J;kyqA!#BilhT5cUc_;SMMuiyMZULo4 z`6SrG?tlvuxPD(gG{nXdlf0(n)F!m|eL5$)xx>!W-1x%#!8ewA<*&foj}QL8{uY=;V+3l5j-H8&XFaKg{eho+BKf3=3@Q`gI@U&kO+wkh=dH`(ZR<- z;bvLAOjcV)vy0VU_UPZcci&6;Sl0yQDi>!t@v0@TlR(q7hJ6=Bk_)M3)He%nwB5#6 z%CnAB^2W{?h%Oj5+yTL^t{$BXTxU0|m9*Z;?<;QY^=K8=^qvB^w@#Y>0EovOR-EheIHfBsyuaXCe3A6e z#_cLd{v5;L`=1SIx_Eth%HK~GS`-N+1hNRDhBS$|X^IzV8HXWVk2Uh#J6=%DRwff| zq~5Kx_q%s}wn=&;o-&0<*`8snN8ovUP2zupzZa#lFs0_5Zw9jj5+qZ+yBaHd$B31; zxmiZiOCWH(5O*N`>xH@;Lmf6_(dku-9u}RC)%DrP}`h zX?Tml`fr9shKJ#OI>CHDtXR$FY1h`wg-Sx(Kv#*PD9e&Y22VBiRNXZemdN?6PqgJ# zB`eBTx_htqb30M+cAt7;l1LsIY~ndshn2kgRxoyvjcSr4{{Vz)=`G3g1Tu(!)MK}5 z?T*KrDy=gHKMT(bMR6^xvr4VzTS9MtbLQ2?MinOB#=WMMt=!(lE}<`v?5Pt+QCWn)1rU`5swfmMepAZvg)Qmy3h{04?hYCfS^~9sQ@H zLvwF9YY0BgYtK0U0Iv1Q;@?AU&Alg8QDP>A-fu1zds*YV8DOJ086ana*14w^rZkgw zKPS8y`)c^x!+#WYhw)UG7oHN;HQDX;4J9ohZ?M{#SRjGa0?dn!7~!^`_p6dQg8Iv+ zHE!N#={5LI4O1^pi?q`7)t?)DP|~h^Yp#4k)%+`Is_K7f)-@}*LfEq0Lkv>1zI!U4 zkSY!B&&o6DSXIN$t}RuE*=;lG^2)Hn(x*MR$6AUZFh0w zPYE@>z1-yCudTLX-eZ%WodYgUrfa_sh=qDeYp>`3008)2DazhUoKBzFdavv5XEpx- z1rhkId+_(*c<{!PXxG}m#cfR^gj(7(E|wO>X1rm73aKL9cn2m{&sxVHCG}Su*}V^U z!>lXC=c=`?sV-;hvi`h{fA}VE!Oag#_yMhWpT^em>K4DWWO|K;x2HQuvVD%*&VWKC zLawGod;QF(jfsM+IaquZIN+TrE2qDs(DXRFKCOu22-K$R=``Z^*L&-x{m+BEEopV| z=i>&q;B8u84BqNmW}&QTx}sm)&Ma;vv}Y1*WoV@+(p!KJ%EUL_$;EyL#JPO_sZtWv z)0a)Ioxbh+AGT&y=w?|IYsTqGMrk`=TW`Nd(e8e|d^>I^G^@%Gj>1L!|gSGA;dHzN!}>@+aHOPA))RXhlc(ecxS*L@Pgd@b!$xv z#X6+=j)kG>Ivg6VtqsSW=KkaUTK?v0`TR8JQR;AE^BSvDrvy7KNFE_g@$_l65k_22c%YWdvODJ!0hXv(U&vGHe5@fU~w5$Ycl zJ_atAuXy*v+8mPFS=rjGQA;s{6UY^~LV%Xqe(_v)uOEl;S$<)j(xr`;B^NJw`G3Lg zU1w6gJr&RAE5Z5~jealuM!vPvP5JSzvty|07ndK}Yijb|C?t*YVOKITlgi*{9RRQF zn)r;jE6QTsohY=Hm$LbJA3a`v#okKC>o>rEgL*H+Ujlf3Eki)lWAWUUt2c=CX@cF{ zCFF^T7CFvJs2?s6g*ZKWpUX4c_O4@%pCq5MPSIN{bkqFLDzv9oqj%8rf7*-oM_-P1 zmYyMx#%-kQnkBpc0A$)~BW9nmz{;^7GBLu9<2eHaV!b{V<0p|#)AoGOmhEr<00hpC zDtIY2o`=9cvA2gUJS*{w#F_@7WMb9d!&kQQMJ^fRxr%7K(4~06P)c8_Rsert2h!eXdmDm6Exk5IM!n|vkWABT{5!^7S_mThZEw3N+lCXMGusmPh~ zmI%y%##?7nTo6YByt#3nFAJEuHK|%HrM|Jg_jcCai1%fX;2s@H4`0mgz5sZez}_eL zaj58erJsiHJW+S5T|bL7YuyqU#PZ22G(<#DD*&KiDEUgBhOpuqINTOt8Pjb+CCcvI zwAWu==fLCPT3ELyq0=9Oe+zVtPRqn;;5{T=>EbtA58ew_AmvLzyJ73yNX9tgxSoHU zIxY^Yv-H2;xz6g;lI6MTK0Wx2Yh~d}&0RFVv?Mw^kL+`XN#(&*g+?)kBri-?1`iJ` zMkX;%*L(I|%<#BZD!i@gd=mzP<1dUFg|)|zyd9u;A57A~iaX68Lt7h(B00`>pPViS z%>KMr+2XT|7Dq>y4N=r@ySiW3k@Z+?rO{4K{{S=V?PAAL)iixJ`|YW5q+3C65?Z5f zMG63flj?C_nobg_CoZh^DN{WiqD=$B5?N^arM{VaJP^ibo)0(5{{WuVU@>s-Fw1+ z3H(r+jn9N0^Gfl?nAaM%vw3)BXVoER*!+x=6@vvIc&PWU)VNl*CpW-4QK@OudN1y~ zY<)gQm|!@1yuG|RqSl^I`qcMdi{G^e?C<+Td@}fTKaE#O(7boyj}PA3Ym;7RlGx5x z%FWkLCiW<6l@`*C`QOR;o=#gwDyf9UV;$R3RMx%LyLL$V3*xtqH7^rMtmyU; zOLL|8LgHyPO;%_Ok>2W#+nI+L1YwjOtTT=)wv8@Yigh2qKAlqjzT@(2(=&LvMw0kb z``Pqs{6-MLWd!$E(A!)(Ln*U^a7knsKf3(u^4R4tsad;q6*_4n(EKsuNvD$GZ8-U1 zK`}h}zN7wm$y`~ERT^mYXw*=89-m|5E9)q2bvsE!I*qvVAcD#-H=6nAWvZmLM|LSf zP|))~9Q;CoV!YS9O{>{KG9*&CSxYlUdNP64iQoawYv?c;Q>#%^g1njL{_31tZ241B z{iHlYePgOy>6Wto{zgb|by>1u8N&vL0D`~5PhO;Biu-&&22rP0E^^UsmtUWm<$q{6 zT_vwV4FkgdIPqqe7OSrKlUdXL7{jaD4;FZy{{T@pcGdxj3o}Q!G2xg5UZ(@ny=ngd zW#KV4rA<24e5orp<$v=$Y(`^Q!NOY0qV7Sfcx%T000F)!=+AKi$*761udFY0>y7Z- zY3_|27ZFMa+9OEdQdOIh6_q$Db6_#Rsv*wRY4!248<>Q??YfVgi zN%1z1WpyA_xPs-bQ6@q1e1K;JoP50pYVqTeVI?j|(TkGuwx8E?>L_DsQ;poLj;r8H z{6zSv;%#axoo`T|NzrvUZ#8AtF2*J-SjGb6vj;J_z~Ez?S2qyPEy-}p++6cbD=)w9 zxz~WHR~kqhd$dc_ST^#ycWiCS|_(iwlEA<01TS=dg@rHT|2wo{LU^&&RU}rz7ikv_K;%jwr(cum&eGWaIg+Jj+XqW)nwo5&OS%@ZO@n&jXEkx(Z82+3Bg*P4h>UZgd_MlV12} zEIfDNT~-|`_Qus_R*|-}am$cb3^3UWeqX0b!yQ8pnMKg88>jjm^ULJ$*P6Aup17a2 zr^Y`U{{Y0R!`hyyb2Ff8zwA8~BXx`%F$@R8wEL|`P=I~1+fvlLp#{cOTuj7dHbLOvb*~DJP~%={CZfA7*OAFZMO1g( z^bZ|)?LHQKEb#vTjclh&UlMqd61qjKR)$D|#@{gx2>F9xf_TMpU^3tBEY5UfuL$l` zYEG?Z6tqX(p9Fp-YabH48Q{+mYxInyeE6t@+RHUjW zX+@tcIT94^!)!`Yb&t(x8`9zLh^^1iKW!vh1~OGgQ-Wq4Vvp zZ5&&rH#Nr!ILymI0HvDaQZ{eQ{>bl{yS%tJEX8AIat8u)6$-yHSsliitoJx(!btN~+ z-15H)>puqkd^|RuF^fgjbsJ(*)n$lA?>Oj>w*-&&PZjE7R%e0dbeoDUFs!OtC#`C~ z1O6CmcXm3%czzpq((YrP+Rn;$OICFIp`p&xUOY3*%8e$JuYRw8y!544l3cPrk?>>| zDWWK~@Z>&Kpk%j-2N1>&QWZu8eC{r_N|U^$t3GEP8B@erPRR7#AH$v*@eRCpCrCDr zBIaK%W4JKullWJgR}qM#J0^M6u~^(Rtfh2!`ag#>-4ZqX47ZU5=&dO1VuV=Bcw4OZIGqXWWr79J3~w;GB^6yxMKG5|&oMh3OTPNpV4>9#U; zvCw?G91q1UOG-W{T|-5^ismC~t$ZOLyGe%xXQ9Xgr+U)|8nK|1mZztbQLM0hwH2N8 z^gliREB?(|U&Wt@cfLJsQ%tf&5lL%hcVf&TxJbgZ+ra=6w>ifZ`X))lwKB}LP~~rQ z-THPtwarSJi#)U7dDhp(-X!pzk*Mk#zlR}@bkR$44ZIf#E)|d-aKm>3y&fQr9bn;F zQA%&`YQ|M13QbB{Gw<2FD{QtNdAolyC__$;pautw4^Fl4e_fQPwug-j!mF!mdKElA zhr?HvurZcM=iME&Paq5ByJu-6)zq4=2Yt@pXz?1YY-@P0SJFH#&2+ag>DKm^%_gkx zAQ8qp0)M^jT=Xf`uGCVyZ0?|?TAOt?=w^IA*E~D%zfYS`@F$6^{6%}FMxy@!M`ke1 z0@2YFVyS`kZ%#KWP5|gx?STH(&fP@pY}q z)$Fd;%1usaBR2MzTf&#YVtl-i3uE59D)7c_jLB9en_R74+TE}7@;PzyuZzMdQ+j@A z{Y2AmVwyBdM1(-&agq`U3)z<(VAtn$X*Ka5Atcl8UAskvQfVE`P8AkOTm{KIW8Sil zHSB^GYR3;1_k>pORkDLv)2?+bDsT9h>DKzJb58@FNOT01_x)?R(#88Y$;GJ4XKN;O zN~L+VWv8L#zB64TP`R?7OtXT?tM!iQI^Dz)5N_q^oOT}7=uwPQyJx$D_H^Gg-n|YE($aY6NF<6)=Nlr4GFbXoN{*YI zvaJa#^g39q^;ta2dr-EsIUAYV?s{|UM573;bvbHcDJGjfYWV5!lTGorgf(3gS-FxO zV$aUGvDB{9&1IPowm9c&4mkC%pvg0e*?u-Ng7;pHZJ~I1Cb^@r_;ssTYI;rcM|Gv& zOKKFQrMk+|fXD8aOk{I|gUx>93Y6;8x{|rx)%G}F7wH=Ajj8FEa@no_0NUa$r$eL6 zT12@cB}g3(2X2+=W%Y3NX-Qtz-u;cCZBMH{2mZ{yB>3~l#bkOJ*l7 zkxG(n{oZ*1j32FiZwlk_So}1dXLlEC`FV{?Lyq_xb@0@9%TAldI=|WVD@8}q^w}dG zL(WbE%-w>VV01m}yFZ3!EEJUp`>%J_-bBgEmqYZ1CK4~3Z6eDYxGK>&WjuB@`JAsE z8P0s^`%ZX^#6B1BMw&F6hp-ynsMh!M#@Lt12u=r}Jq>*)3t_OhtbDoE`Bm4caE`j4 zp2@An8sI!yYZO zgYEF7?o2LE-6Vb7;|9EcWgJy*Zd*IU zd&AqE^V(Yt*-56N$sxVSs5*2Jf+HC$@_cP2{^E112r+_*Qn5nUtKS?2fkD;7w@2hK*%RD$0Op1(Z?qB#ZqI_G@Q%%u)ed8Yr_>WGG)nkGkGe>ByVpSXiEJm-$#6$13y-8uHh;avFIikxpIc$u42 zotIPT%a4KgSC0m_HQk+-q_G6gF2xs|dS^A@JjyYAsa+fxRbP{qPSIz0{{RoKp3x1A z>nvVKE(u(h_7#kA$vsgN=vAXDCVXS@Kg0T-f#M50d+@5drNbi5$72@z*c^IdzM}~^ z;;8$b4*FG;7rnXVJ~;4Bnc^tmvez`-J6y7kK`pcw@COmg({S`Ay0Dmv*h#lePA&F3 zu(M7+XM3jT7Csa3-JgdvEhfuKvjDu-Rxk+SGCnt)4&>K8O4V^y-0DfU-JA|irB^0= z9s6DQKT_1-(6x(8X&HPuJB#RH8Dv???UNYf0-ztLueRYFbt*MwN>Ae3<x>sOTMNm=x4`J851 zRn%@avGlf)dGPP!Z-(w{?R5(sUdm{Rdq!~`?W+&t2zgQo9Q69v&d!cylHydFaci$e zd2W^`2|L=y=a=mp`#5;tz^VPYr&>wkKLSML>YBZ7vTU?XF7f|W*-njCFtq}majFQ;z zUw4OdrAJfgX*e}>j(6eqwSDl<#u^`rKeFW0ue9b8TEncvBzE@`A;W@j4mqxT+XGWE zz`9a*Pq$--8HTA|i;T6o^cRo*KYU^M{b4_Z7TZlaB-)C~_WDkk(AmPk5I4-kvv5xY zocrRu9HWFV8BJwY&i3l{`;I&gMM{-LB(*(z;g^P>@PCIaG@~ZbW~=t8V%vi&9nvt! z>5_5jiuzef@@)F3L)pPb=dH?NwDay`>K8kC?mK~5&z{~z zrxeen{vPZ8Fw`|TEu!%3I(?nAB1?@^TGdAX05z2CZ!G~iTq|vCaJb0pT$7~>>dn;U z(E4-3-Uq$$3*PE}EAei*bN!v>3kbB_SSvGz+L9!A^8nm?=NRs5&#L3Cm5zvATI~84 z;rGM4eGgO7pFzQ3B^3$*)^5L$hX#fH{uJ_OGcEc{_@&qd=NJb9CcI91}o5`CY74H>W*r*-)3g~LijZj z#V^D!+1pamBZ^65n_1HubP>x8jk%*?kPv*p2K$FSs^v}>a$9~PjHK0`=gdD4z8H98 zTh^eS3kw|^$8lN1ccf|hm4}^dE+Qf2Xu!Zs;g16Z@^A)E1xgCAD&Z7t-;`%uMX@`1M$1pvV$!uJt~AjV?051Z z-VkkJfu`i=b(82<~FK)mj^O zBjh>8K@RC7DxCbItzL7PWjSRiJXCKdwUycPxVn@n&ttXlf9%Wg2H(ZU{t~@bF9>M1 zS`GH2f8%>wzdk60F*A8;eoz#hg{cpw>$Znx( z=|`b$IFB(9HKzOI4Ii(28_Ovxi=7|uL@B;??m`nY(o>@1=!OttmHiVYGy1KWB2>m4 z5U(zn#>i#8Wg8x>Uz5;l(vW?lk8?+jk?qFZ;31we3;P-K{}IgNe~BfJb1^?fZGLOr zjqj?LX3hhPlg+yg>YsH|+}{+6mM&>JT(TwS(TJct{1WcEfR%S?m@)OKJK>vmGhA)h zqezj2`bmeiwpeK&QlZ@!@9HBlQ&PWFV+a2bCOm+5<1QksQ?#H=G7gGlV<1Ct_I?|y ze1DI*SH`P()(>``*g0sE4v5p<841>LPtNb=n^oY);Iv4pfzPs4d)2mjJ z;SJM9d8`FDl?9K*Y3b_|-Cjjmiq!uI+!gAYfW)mtxVHAj)*v+T(7Zrjq#KaD8Yd49 zcMI5fy1BAF!k+dwP?>Ix)!?|=Jv>;i*rzH!1$hYkj2c+uMs2?lAA7vaSG(uBZ~Ay1 z%D<@7INQnwT}HIs!%;hwyARuCf#g5WJa8VIPYzTkaOU- z&CkZNwPeY~IfIN@^RIC_C@q1hV#T5|q0ebBbwBJKkG@o3ROcVmP1(<%JOD9SQ-Z(K zZ%M55!G9A7rW-REF&i1E3f6JAuF8sYGO1Q^!~S>~xU|WnC*F9o+@tM+GvnX~$VB8- zUQ`w?_to9RblLt#*Of)u2MUkbgFi>Q_SM;;`mg}gfV^y#Hz51C39stSO8PYK$;9e} zs^$L(Ofh}sD){W?KNdPQW+GKMc-mmCpOcmh$uXwMA{Do1`Y^l??aGik!)SjAbA0s1 zcy}~>ckknbNWFjzDA$&&=k9qR&#$a$q1BzqMvmTgpZp}e56yW`RpKdv&28W7+27wa z;(p8~b0)Y9gXyd(H(9Y&%_#%=?7AN>7uwvIbU7{08f#`G#n82~48NIT+vMZ1Vi~9w zQ^Q$ags~Lk45FSVXV-c&U38a1`5L<&8x;?T*XI-#8Y}`@@+cfO`nUU8=Y9`XrKVcj z|Bs+_Y=%6<^gg}_49c+B?e|h#rO31iod2Q9Ub%D{^@RDtTy$go#Jk4X@!7l+9u@wx zPb)ucGrE6t=7!HF4sK4iP?NLSs4Mjb8M#w8+qVh6 zq2lUeNJn7(l@nDAqn?jWse%Aq>M2jhd1am{N?iWQ$i(l87>Pq)}e<<<+?$h=gu zkS0lifK|#n9w-qyG4zI+yc^_kq&_nU<_lkm56dQa6qWdwL}JX$n7);eci3e>+btHN z2B&@>!bY~WUIesjeRCr{ZGT5;r`t-vu+$2eb>QnwVlWcB_R6&sa&+%_`d54;edX+u zMn5{2cS5nHCAQ^eAGXEFcsKd`z`~1lf8tsVri&f+1U`|`&ijW9Tf2RQLbTDW@^lo8 zz5c`fAuRP7V;MpFR@2EH^Uzz(s~It*v`+X8pSUbjk7g7H`+@7?;TQN=;!w26%VTXN zg5;A|%cZXUk(x_`n7gFne1&7xNN8lj`srHg`yyh`9nvmyo19fW9b{Sl1vk8~uI;7TQX2y11DW+cur*+3RQEofrN ze%O=htVW{ILrL(LHE|J8qe`6o5ACeH5Pq}t$1GO620=ihutu@US-ly|r&B^T+e@_~ z8G_erV{qmwHIP6mt0TWxVFW{hES-%BWH~n1D$+(8+1{{&1lVV+ZbvIaiz)eT^6$bz zBZB~vXNyS$9w?F$36mv;#U}}0_c}(26>e=5m}G7FE#Nc_(>1e)Z5d6@Ks!Nlnzq!~|qqWycxM7U>*r4+gO)%mnMr(-)QSk>;SN4RtWx>!r6 z_2hsBaXJ9o~;__%*rH|>NeB3OeYci9eDt@^J5Jzqh z!n#^m{LhyUvwr?zT67C@i~k;ZKz3st@1F#xC;Aq&AcpdmO1qVb2K9#_FZQ4bT`!Jda-$u#^U@i4;Z-zk%sop zoV*)j35K7P2SrYK`hrOfw!i^t93(<=9dlxTe$aDvL zfypzQc}-aJ0E=hA?y;erDDmkX^SpG=AX&1D9r85ybKv}vTgo8QyFqT!J@FKqZ!sJ2G&RiV zWDh~J_sXdMWs*G4hgF|%>-g^4^}&@;^=)y|w0WBWl~+scp@cC<;s0F170XoEimX#t1{?rv4wZFEvrf1KJ1Ykt{icar-r%KQnmM89V$L@lUUo z?pEfy`pW5=k*XnUH^r?;F=EB8KshG3_kQmNqT-2bQ=T@A&t9OXa0j&RM1c#r_&8y( z`#Q6}zT?R=QZA-Puj)-$;^`zg3V%PJNtT+;K>HKTU!GqnME+8H!MZ@4K+&)he|Av@ zRSkLN-J;mQt)?RoYW?dS(z|qM#g3K>*aD+D{lJ{K5RJL4y96u4|OX-H|-;y=KHW~@~b?=KayN^5T# zy-lv?Io~naOITwZjQ?q=q~y$IqE*yOHPZg2Tq|E^l$x@W$PT{~Z?;M<+i-{?nYqNK zi*&SCc~bY_r?j}YxsT`1cfS|3dnca zf3bPLZdu4G$Semy?D)Ly(&2dAr{i)VrLme6HIoyQ6K)>MDR*-JvFH>-bNIlneGx}B zQ1V6}bt{jejUtPGmGjF`WovP{gq628Hg3>5ooMKc`iks%v#>p*XSFwMEPJTZIqu^b zAF*ku9=Jl8OXE7}9@8(##@<)le`FFu$t=S=y*`oe7`YPV2>RR)lfrSJ{0U7+ZJh+peC<}aqE~!MUUe#W3B5k_ z1>5cQZPS&wN!tH5MMDg!@&6L8p0Th(%#lKE%q#e3r2CsBktXQ|^&ai($vPO>A7&7} zx)Js)y*7NQS(Md5fbAsva|`wf_Rp;28AaZnI8x31;qrdo>ct;^y0^U&pMy@zC-5sS zU-10@JKu6UKILl|CBw$@T3P%i?|3Jhtusf~i6)NRb{x&Zckhf@INfTj7&ilL+PR)~ zUmTeV{=v*Xs(oq~VP`OJd^DeD_OqiiIX>-{em{d1&khwJv14JFxuHe90f*hlm+L=1 z3$-M8q8>s9xh+1uFmiscUdAp>#e(yYD|2p zn5S!mp^~_;l2Z_SIRej=v-Bh!C>mk1`^vs@kdb96x>Ga}wuEPKrNIMRfl#%+bpAq}R_w&hv3;$SDXDbwpw6!@Ub@W0%>Tnmi zog>=TSjfHBL6nBL2s|fsc!jBP;=n$?E~U%h;b4yPLI8Az-|AgG_dOwM%^|Y-QQsm7 zsd}Tv1jghet<{7^ztFT;6jxwZ!?bRy2e=_%ef8&^WF6g=Dtx+M_nYe}YVT zQtnTi%BV95M+51BjWG4}Z^6Hw#r8K7kbeq_JA~M2n~Q}PKIzkJZ++Ps#u;mIT<+K{ zUT~o~;1p`?^o!r+crP=(gv?gWXB#BJzdnkKsS9E+wKtIkeikfcfJkfjL$X{T$&yPIh zn`7K|ofupLOaY_E*8RMp&A$1RVlo4BE#FPH7iW1@_X{qV^(Oc&kC@)8eMZ-~0YWb7 z8F|{kE-ffj;XRL2Tlr-g>zpc`$d03me-Rk#ja<73aP#HHOX`9+ThfqnU#D+)wx}}O zYXV?~X4TvYPn2Aox35K?09Vj#Sq5s*Q4L%n9K z`MIG*#ohn;5Nr^pRP?cGsgKa%c5)q#GEHHO-lvS_>FzVf()}y|dhle;U6ar}4|xdC z+&$pwW&tgCe=@EjvVti7y4y_IyfkQ5jpy~Q_uffrm23dh*pY6FC=X8h=4sV$vqasE ze1y!c z*|ycwxv>&If&-r*-BKUDetHr<3B6-N^M1(6T2v8rU~1~&JXmy+RWC8o*Cba^DTTqI zGe8?ze{BQ?ko$10@$F+%o%DOpqcpaMB-5A~Su|<52rEy~%|%``EWe97iuqHni|dMH zf~iuZfe&F?h>Sid`-QR)qzmE)-2CsJZc0|5OZVU_*Aptb4I_NNoW{EqvzWVStAjGSj?W+a7 zlF2>#vcaS%hTs2sS`FN0a@vyS6-*~yBl7-DrgOS&(zFh2WKf?TQNvzhEb$^$vmA&RV?L0$hF!G%|!G--ov@xY9;!?`W5OS=ZjDeFcT*viTkujK~cw1-0pLm zLSC&?UgG!_w^t9t9|cx~Ir+IduDOkLKY3g85BYsCnz8V#MaaiiXGLN|VJUFFxqmQ( zIFPW8-Ep082Hl)^t>_Vo)liY%%TI?pf#tXNI5e_7rmq?MSj2BL5hF@kGdJQScTaE- z*McIOizhx#`G$Ws!i7u@JzhAjzWmfPC`O$~{}cdx7>F8{6=i@g=%^Vp`m`htUK_hh zYQ0EkN+kQTPyPCf(68Rhdu;5dU&3pm@HAj?C4I(6BSp%&waU&}1rAtxcbrRKY z+$-|#3A+Ug!Kmx!$dQUaygbF?`A&dtvw8@9*syG5jhg4w<}NEy>l@=6ZOmPMnM#g) zp5ek?79$<+nLh$V;-@E__ktiN_8XBIE`6AvZBOemwsOl_Ut>`4X@+q8%pxMO|8yhy z&W#Jy@Z%$i(TJ!U=QoLEx)UYO^Qax@m&On$ewg!!_;BDz@|8!nlM_?r(vm`wZYDEl zE=c6-+ER4-n3i(v?#6PLh{-Qqd!`1Jc!}1aL;kI0vn`Gi!IgIQ`jNh?qV4#GpjdGl z>f@UXkxPyDz==`3l~r$9qUKcGt$6TJmzgpiCjn$Pv)_?ee|X3AKE zV!GTtU~5UTik=Ejx-RB;ug@U8-u_W3)ieGu;DTaY!DZjr?X=M>+*f@e9E*tFQ^xkD zkq4VkBNFO09lm|N1`V9t?CdhROK^X3k!+)aPO?%i?f_UZZpibimA`(2eiM+prr9cI zC1VElNOwR!emQcw`uLy6tVd1<72T5FRzp#)YXswG5FYo6z+XZFq);##_#+qRk2=W* zum58}JCT-7iKoG=7lvahIc0nLUIgz2bd;wKJAdlXbk9NZx_jQTx}L63_aOV$HW{K? zjVX`o@KZT%Z0({O{tzd0jphpDJ+OBYy;VF%cI&*g%iToOHUCg76;xbs8G9{Z9;hpM zfTagBqJ(*m^}N+55=IxqH+?;7@2sbaM3|^_nrrI@mezsR_~4Z(V=MEn&fPN{#5YeL zm(f#OZbp)L_4^T;LoL>!wmP=qc#$cxz-*;8f;vUB|BZIMLRR&JZEb#j#wL_$QK0K9 z_nyVnB_Owr6=s8r!lzI%hkuciAj!ZD5-~)*#1=z)4%a)Cxw@>JmAo0lq zqwVm$5TR%X25p*(__UkR6_$3hW0@36gP@wUyF<+@P>tzh99NeCe-J7~+K17J2!fHz zo!5_HZj_VM=6-hXdm(f^x+DOufjCo9I#OEqNYign)42dX0=&54t-j6j1K^h+eIW=n z@Y8>dz;0b963|mMf2O*==VJhqcUmffw(9pjZ$11({f;#TtK$^XFU<8=J|+Fo;9|A) z@QSr?V$^xMYLF_Q=eTpZX5M#j@Oq~#zv8a1RRWvWCJqOXEE|^gMY3ZpgMS$G6otJC zoMHQNOxAWG>E1S>{|pT^rgwYilGRhssr-MbQ9X)7oX zGpohS^pvHb8B=UPn2gaASgQYl!A-JGAOg-Qv|;IwGhTrItO>(!mdHczn2~NyRCX15 zwjNjU!=3ctt0~~^WyzZ_MW3fnT`pG)nc?4?-xMs`BqKvUEO@}rQ<{F(luKyvbNWCjBv&jjKEytts&WABf}0P9ChpXK$OqkGAn^)O?e4|*#kKB0xXh)} ziMyd!UHx81c~HBBSBUxhTvdoN=h5=HiH8hss_=CkOK6*lxf#?v1iircrz?mq`R(rG zqaYJrE{Q!_^O&i~IvH~`Yu6aL&BX#dT826or`zdI#eYgWRn$jTEM(20FoOJzVxp?5;s%o02`9-DY z-2R!jOfx+W?nV*Bg0h2`+EdLV(TzGR$pxEq^TzWYx^w6>!yyoS0JtcO0xgHdp*hoR z7IJhGB5X?+ct7THXw5SZ^^e&Kx(vZ1lN)wiPbA=M3*>jg| zsKoE(FsD3R^pSjX!k!8yG038|bvo~tlUk3)4wHX(`=txXI=tO_$JM@9;%P;cf~~ra z+K_{{yHaJEcBk21uSnYY^;PO^r7-Jrh+!MiuJ^j3QudG!kKu|zwj|lF!C{98!j7K@vX9rP z&$PcunmB0AiQ5&Loa=%vi(O%70CURt0*x(0CSSyA)QubpP6rK@N6aD)@Y9F>G$s0B z%W$!?)kMEcKa=6M;P2-&WPe^1?DOQgVI+(!rL-9$RAr)Uu0{Ro5G7r^MOxF@jZ&)t zD?(U6p=B{nXjlK}G)-)JWnoqIBi!lbmj{;D#c{uKHXOc65U~JhETOLzzP`*^tTw*6 zGaiFHj3~(*;)7T3m*--(!knC(UpH;N8Og~XJmERHIyJO9c68iGXKENnT;@!l?afEk z2;ZTH5Y`cy2W(l~)Q+dpx0>C6=arbee1B*~*1YAKZSLdqBI%8Ep1$0GQtm+tQ0?eH z%?rmX);BO2oG7|{!Qie7Ef94keZY!piAJ!uGGMM>2@gD%?BrY`G2gVMv$$!uYBMN> zcYJFBn!OhTPV>w(I;88O$Qf)|Bya!7Jh|q9 zGIllQ-|#*02=PwQ!ulbU8&ngCKE_@}{$SmW*pX*h9?f{uzd~6F`9J2w8)!q96V+C_@w) z!-WhHVevUydm#dg!JngZbo($X?%`vugMX6SzLE`iwDxVyagWi4=`P(gVWSbwxi{~T z{}EKX|16IkGgLE#zW6!jW+<{QIy?W8@6l{W+iaF22TG zZHF{-;^20~sU(D!LKEoF}31jKAkxTGNPzp1Ro7W@jgtf(vA7GY~Z!gfZ_0GMEf?GlWK+9;kIQu%zVpHujAX4bk|0 zeNA_}=Ja-;Mkt|!j(SIXSePq1fis$Q`LnIq{`KnJ!zfErYK@ZO*Eb}%jt{}rF>|)=QM|I(oQlj+o_^Qj>O<$9v zEf=#&TnSq|;)KiLk8U@}duPuG*DQ$nw*vl?`` zUQ68v`y0?7Iz@H4nC);3LF!k|+tgM~n-A`$dcV@Pl>4ygV_dtF$M$p4iIaXDIP#Cv zFwynvJOCa__0U34PY;h+4I~#2zzb?Pa8_4R(RDA>(shFD-;8~`O=^7z z&F@NVBlDAj686-369vhrF|XdRvk>D#3rll{&m(?Y1w3;|Vn@w{3_H-D0mv!0|H!;A z4=4pE=Q!BP8FOvVm!@yGYnOkXblbI?xN^d5qqSQRrKAs=CB5=jdrQ8yOj*+=ko+X` z_Xcbed{dMxA9f{qfI0Qe7e!iUUq=hLH?b6>{h#~;@K378m+Rj)&TLry3`^orG@mj4 zrb}>_iiC&u>UL>w-4&9y)=9h}xj^(rl~VVwSG(P3bnYP)J#+W%MV>++rI|tadb6WLjvH+&lOMe$|{|EhDPUU)L!7X)Asn+t(v-&u;|Z4!{%xjc89Mz1ANLvMy9vZZ?Oc8gVakM_$G|9MWiL$p+-GSXHa zVrYAwoP}VCx>_Ecd`>vlfv6Q*M%&CvR{nX)1lwzX_Ifet?$!^^(T_(-9qHyaA?B`z z#mTHBl68ML4VDXVZ2$AjplD^ev6#FObp`ggx}yq84u4SSLBxdgK;QPg79xu*2v~|9 zAE+k~69pBIJSe+49EDoqfdjQ_9#hI#r$8B*-E?5l|wp#=O#7_)zhz3>c9|)k4^u8 zzq!xjSaFj}P5s%eA0kWJS0#33x|!RwZR9XM{@h2EnK+0lB796oybUW*@w!uIRE@Rp zmZwZVgzvNS?-U0^lU|&)dX$>V-j**LN|yV>wdnHkvk&qXLS*9J$r$dTiZX9&a0shD}RM?md+?@`@T!iAq$}L-g_i^VE zw0tpB=}WVx74b#IrP2E|x{$_*37N;HM`9sI{>VSNX*Q+3KftPM|>Z>ylq`D{A;q5$VH~0X zA6|TkEZi_(tt=^+iho*_D{2+>mLi(**$&tb-f&{wd&Gnb?Znsmi5mNN>exD$%#S%W zg9)IWG+h=xsU+9P>Xg?5=9O zI5odME7$I7HCJ~zo!|Hgw5_*QAjB!y)oyCp#*evn+8Fg-^I0z@rY2rOCMcERYS2g} z;Y$^@YOu5}BDM5lZ_DYdpSLacp#L)Cj#{7(K7WMX4wErQWqY`-5-%92c|(&snP`Q(LW42a3OyT3Q0 zwBKc3t}PRGc&xmvu$Vag$p@Hg?2pwqrh4RXImVaqx4nD|riHB^w%C(6TtvXb@K4|w z*G+%tZK=KpbCCWi2&mQ2TJ_ps^T>Lspy8ijOx!}F&G?06a<#0)m(_~%I34S){J?^gz0^e7CZ(6>j=-?^Ao9>po)0tLXBjz6DD8I#^Yz#bdei# zelN=33ubdMfR3&%Y2uL8vH3VA;Kqh4Kf#z8jT|!@RZuJ?t3A4K7ei` z8o_HI)SLAG(03o2md+l1^a(PN@*qU9E;Q+n*NidTNYy8=t2MVxsSzKrV6dA>g!f(^ z{9+_rXnT)(s+TAd8+>5 z&p!Hcq|lYxy{b# zq(xb>YBZFe@(A3zV+qAwb-E42?yoL+T9o7Epy{i*%32G*#STH}lCSnWh>meaHV)jqc9T1MhJAzT{t%0Q2 zKGM!OM1u?&Wc%AW)UE3Y@ceaMldR`^p|i1V;7+O>EqldDvLFLigRiz%%AY7PvJAa{(ni?yZVvgiSTVd zX)mPwLj{t`GouFOi{6`kB~nxXLjAe-dp4j;txvVt@)NSXv{gTCC9Eic&`wmwI}9Yr z-C|f1B}aLalBE9#v@|Yt`9dekiZ1XctC;x5<*=!Ub2Pa=t9s(FK zEWr@s+DzKTGLH8Yhbb?-nVuf+qPO1|NU`;o{`qRRfAG&6KYNMrIM5s~>Qq|QsJZcQ z)c8Ah>^kom(Ip=`Z+fR2!`xNW;&;7u3bD^GhQz$JOL!Q{7@wNlz{si@iP z2UmcKL@^z~uP>e77(Fz<2oD;dr_cR`=0RayemE2%u9<&VAd1zJ?8m}0G-5Z+e+$b5 zD&Uc{q`t)J`)6$LwU!%MlAJsm)0XR_K1O2SED(9G$2#j;C%u;XUL4AONNQR|B6sf8z68G`6Vx~~DgGajUgx>X91h0$5Zy1a=p!N#N53?1L zWq}$#P!-mm&1fO#5qG69R~R)wSxsTt_;z~~jh)$%bZH?E^5cPtV=wmSv9IusxK<*| zNf}AM1D1e73AG>TL>(iK-{0>en4&4TY?L9MsR5#ac>+XPQVJ4(NgX`6`2vsc0Eq((#OgX1Eg z1Y?yV+8YQO>VV|#ma~afmx8zZIVGGp%;fr|#9nXfhZH^%4qLG@uBVl;$YIM-8B!bK8IjgfAW{h0KLj#B3RO65TKd_ zV0jkt#ev`ROTmgRX=Lg%xizfyB`-Aax3#)XF-scj*|Klns5ypmYfGsX*L409XAHrl zm`w7CLQE;4Q@vLYW|K+d)1%lc^$k_;OAjjo{RT%1a-K(pumxlU58%wDi&Hx_gQBEd zKux;~3oFK}n*G^9j^(0BgEveV((RBtCY#t@nku=%-NbT#=P$FvAC->@%=*3-w5R{M z;W;Zh%i3MIw(-TUC#mAcY<(o`ol5O<1Smnaf^)-EQMt-Y>FVT&50-95@kwKQ3xGIu zDNqwrTTPOfkeqCv1RH*)T~!iECV#(3X|g8rl6m5Jc&dR9lWE5)9M3Q(3W9NQb>Jy= zFu@rBmmKR)cQxQ6$fSuHZ**AVGrGjUXF`?6gO8LS==N;Ou*Pjk*44$UD;_{|>i#1T zKatt_mTng9H~HikIDXRa_ttN6mA+<-1|~i0fG>i5l6#oRWN=sMN&D;k6ThcH7Zp#v zqh*(q6_?}EcXi*70#7X@NIpUoj}r4emsc?pOyj7&(2~?fnpQ@b2JZ6uZ7brhp1z%l zK;Z7K#HmjqM}6}Yp9b$C^cnTzLv}gD{JRA|9XdPVGTI^6t0K_rMIU|fy`7ztw>_3* zxsZdM>Dza=iT-PU#WN`Ucoy+Xg{C!GAZn|w)F4cTv1oCR{2RZeCoy$%Ww2Sxo&8(O zPr46WlW)o+WTX;6iM~$cpGO433}#OZPWN4r?L)+*1OE0$^VxV|^gwjo7pOZfr_+qR5j9Wr#qCCXQF4d}v6CZ)ymm;54hGOE8ttj3#em!m4LPs4QFcgACyt4Xp8YWV34))W4J1b8}@UhBIffpK5?L`QR53 z-6y#LS;6#pk;2y+E>>~BbJ=4K{v)Wnh<*V_0Xt0Rhq@G{mx&eIRGNK@-pkuJCkth9 zKDZYZYn<*n6v^}j@ug5bo_=O;{9iVMJGLU{ya9K8TTIk7MrC`)6sk5|vcFt*z|kBg zGgMdA$Y`lG3P3$LIPY;mzm2cdO1(@}OjIjB0c3tHT;ncsjxa1ft6n_>Y^JogQe#>7 z&kAu(9kb&2p|;1CVU{tBH=?9%{u_6RX`?+QTTV>K93%H5hJ!-DxseJ7P8o$K< z2)_Hw`_aV1LR#zu9gAYYjquo$U6?gyw%7jwG#@X`&NfTut{B;s~{h* zGef=YshS-QQrTZ-X}O_Be$+UFcC8NcT$RC_GUTbupGnt1>w(snE%o9&cwnYh{sjT} zg6Ht{v3h_;?wFE1E&5TV6I$7=X|Zs#)=-yI#c!PYqv`R)lhd;1MpCURUF*2uTn2aJ zF}mqy5SCmEn;(2bjX@gRbv9xN<*GlseRAAPcP0_c>d)t?k5y*I*U{-QRTIh+YEnc7 zPqwDT>N@?CWqNR&&3Fwe-(>D9sR^}bF1)NW6ZOOs&oqMD>B_* z9^YM~vzi&Sanj6h)Y7#|C-9yL;lb?mhEnjfEF1bF@-*$$kR0uiXWsnxU+=p}*qA9j z|CUD zVyNG!Z-gu;rZ_|VLTbKgrWyX8hyXj_#B~w@? z&iim{dV}%bCkm!7U(D`}sb{EOrt*>SB2rtGQq~5FEPI_G*p|9qNRy90vsm|eey5YpY#KlfvVvW_98pRrJqm?qHL~zC(A9Go9jZX!XE~B3jC_q ziK|5|eXWOd;LGkEU1x&AWjP5S-uM{xyprSOh!*Sr>I_U= z9zy$5w{9iu5|qRW5K}>pv*4}+WveAx-S4SZ`tv2#1w+lza9SlFuQHQ8TGI3Q=}lpI zk4J>%_P#`P<<(uP6o3ELRPKMSDJ&=p?FR5*xDK9_!8Ac?ax>-0E32P$Lk_p~1m{ZQ z-b#GwUbntb9`Q|}Wd1cV)L<2VfIu|tOce&_s~L}tJ3N}X5p~b)D6+e<96=oX^;tW1 zfRFS(f$u`lkWo?e($~Z2r}4fmocq(ij_9GuvSMgs%C4y}0e)(o^Yi&*Hmm;#5^Q|Z zzk%(Bh!tkxGUo?Zeb=2j7Eh;+dCEn6*5gxCq+QN2e3(_z zLY8g|Dn13`*Wr)@f*WaE0BVeGam*hOgcVjxDi^^W0@nwxh=@ggZ6Ah`zyp?84Q_!y ziZ%My@Q#j^yo*kyE}Cx#Vl6Wp zmw6p?8RR04FADB#jSDGypQfVe)1torVA={jb{{8+Z>2zWCzs`Wq8iTJ{`_Y6A!8Ab|BC)I7knF~uIDh_kW2do z%Yg!Lrmrl$Fl5v-|HN2GxWyV`XPfhHZ(1iJx`{!`em17JUFyRo{l$V6Tsk~~eBC=bmN`ZZax6YSEQt#lHokhzosBW0b7v!yft}mr!(`a|M z*S6&&oH?K>W=x*r_hO|l7b@SKm`HQrPTiXHB6*(kc)sKE8=ae^Yzt3&yWC872iLTg z_5z-`2wp$>>1|b6VpE%Za2KCDXSd>)e(n|GvGVaW?7Z;*|!aT#s-mgs&AU~ z&*si|%-$a7kFopiVEnEPod}`sFk>(0f?e);Itj%@&^0mCg+y!&0`UlrVls9z9&UzZ>~C$7w!$@dwAz>>ukDVDbTp$+7f|0%xeC%=4AO&+pw`MbF2AJFT6?0NxN{rFGZU_ zZ+jnAhzkW_N8_@GT(11!B_`aE+QiCzA$fX5lF;{M5G!=^UE4`B`5ryWe^Ax zF&x^8tVyUf2*lIt{64w%N%pw=$bh&#QyEM`?V=RakCnFi4k!zu*{0ZI+pE$aS0c$@ zOIuSO{D|SE`H#SW&cl2>y0h&A3TIX^$70h8+5L}TXv3GrSUn=A* zlFRnM%Tev^hxVu6)90v5RYxI96D$V|+^Mhuya2~A@z*PA+A}dBSZSU_JV2q<>m}XW zF|M}1dj`DPCWdD>!*^xbuB$L|O!24b=7&D$G2#!_2*k{G__}(sr7)e2h{Iyoz-CI2 z5j3^uy>qZqBVdSQuxPs7#{gp3RQ|H{KCYv1r?ECIXT(E2h6+vWU^gE7b>pk#<6VLm z);lI9&T&#T%gQ#_{xNGv$7q3tF1@qLi{8XC6Nm@RH@jas37b zwh99Lg^~CqY3hFzo%KVL@888Sk(O>yDd}z)CP+(;M!Fo`3{a6S=?^VALKxjJB&B=6 z$c^re95DDkd;Wp_u-&_^`~5!Wyw31xcvKY{V%HuF6W@}_7J>ZelVn8z#X3}PMf{i6 z*W$V;6KS2(nYPRS_z%dO^PW4|C#|a+zY?S2qGbU2Jo&MyZ`FeTAY^5mYQM6yU$bex zZ1Vigs;p-ve?DkmnhA7V;$Ro#@!v6#=wDG=%EA2qK6w1#M|Cwa=R?#YC0spH96!5A zW7J>ddLI~b<7r_r;7l8q4fznag6bAjmWrTU!%fa*3p|6_o5B0PjSn78K|vtM-Hf?6 zCZP|WD>TSn?f+iAB|?+Pd!bqZnDob@O%8U#)@;q+xk`4&0p*TFGV=%ecgF7Svy1tO8nA4>$gi;LPmc-^fI3n^=By( zPHav~nQuI~x*PnSWiL@zfvZ|I4-)3sRqc8WR!4_KepPTnU*7g2EV4ss(+&^|s@Avx zwWz`*sedAoMK&e=u_QkR=AFY`hAOM{ZjWk>v|jYgH5l%+vbqLH90}_-rX0ady0Vgc zNo&7)Cwyk~lxLx|@X9HWCUQ+IOieA!R~9#hGb^jRQ6iQ&?P8b@oSu2TVE5ixV&y09 zI;#`&(Bc^jr3Xlkp|Tb6*$e6D?Z#-RFnN_n@qW0%d?K6v2k0pM%i6FX+F;_#)6q5~ z1HQC^>h!kViAU_Q<;1|!(O{CxD9m8^{mgId!0>@-YmMWm01t^k6OO8x{H@^WulGCK zj~!-LIXM4rfDBVx_15M`aM1;MCJAlzN7~O^o`ZGJ+bPw%Qs_N|U_=_{d`8B9E1(26 zA(@^eOOp5!;FD@ zssGZf_{LD@>E}y47DqZ?{_WqM6-J^YJ}Wk5T7GT*=2S-X8qa_~E~*UH&OfJ!x+k68 zMjvfm7NImb%sOX;k0do+EHM(zQt&4AMV@7Jd%g04j z`z5AzRGWhvr?{JgX(#w}D~@=p?Iv&Bkd{Z%$k6bc++{>WJY*lhHh-QSfu0)-Z*T$~ zf1E3Jaw4Td3?-Lt30h_N;m%u5lBqYu^QihAbaf$86>m$pxU(9vQ=Fh%pi1AwwPQQ~ zVSiG^3PIMj+*^h&UTiZ)9MzZ~**F#ioJP({vOnu8Meb&+8Dpr-=`cJ$Rin(X3D3frFr9zB z%IuCNp+#HQt^RR&xp1USP-xvV)Y;R%w|!=O-wIM6ddf&1BWvb(-y`1g3qq@okD&Q0 zoBrozbJ-mR6U8a0jBogg3xDdj^9@g0%&lIjQ_wCbNdGFj&Ng8!TUtr_A^ODNT~ZEk ztfQITB+a-d$O7YME`10+@M2RPk_sH`U$Gptcs<#{;jpf#d!}V>YDWDQMNR3#3wjlt z{AZf4{w1kz8Yk5PBf&A0ov-9aFR+{s)0tKUzpeDX@A@#K69y_8hB*nxgi;=ZDg4%X zCV!(l+MZ@VEvm%g!z)2W{*xLDasgZm5g#7>>?p`^BXCt*mQLH66+NJw7%yJdtut)9 zH5I&Ux`ZXI{Ol3YG}c3SmT+=tzuxN*!KkM>Za7teK!?a9TlFa)n&eMb3C~E}fR-ySALo2Y z`8(#jl{{M88aXE%BxnJz1GXb34E34aQm?%}VOvpEDm^=WABK2I4Z7j&zqo{TbvkJm$>>rg31Tr{Ioahyb}zxHNY~{J||0m27!N2=ntddlgbPwJ|-7$SG``*zv@AWLl zlqBy9(*V~axEAZIrhi0W?z zx6rqKxgL|#rI(VMv33UmrLm^wYC&h*f?NIR8Ns*tJof=WTc!_f?$V$W&W_r4rlwr_ z+yIK357g`u*R-*Xqsy=2Pbm6*NGz9D%&!sP9wLbY#)%U=ob$*)*h7tPtOzQ7Z=0u) zY;LT9U;j;wb#|I=?YbLh$)>4fg&k36yB6!K?y4ICd>nDcAfNKR8=lLp$T*3n$RjC) zb}}iPbvx`nF#qPjM5Z)hSUYn+AToYy%BQFVE8d%oU9)Ixl8yWbW8bSc3s~E?`m;Ld z&HK*f{amPnW~jy-fZIP}JXrj54ZJ~&TUc$_F!i(P|)H8GB8 zm1rEJLm^HELl|-5Y9Z*V%ae}aBAjsYe^>lV1m;(L%zt{=8|Kg(;4Nx)vUJ98dVX;C zHP||h>nW0d2#}w2Cf%pKs5IEcHt&7sh4k77@J4{%?$kHW6xvAsejH%`j+uvV;f(tB z8~$jVw99e$-fy*{U{_SqcyQ7rK-y*2mbQY^961*+xmvGOp7Z`pdEOye#f)S(D(UuW$K`IbK6O{GxIrsIx|<6uEKH~MekpPZ-b?_t#MFRd|uR$1sC2)=yx1{NpOuRw*D`hOmqL_-5}!7A;PGjJ?wr-lT>$JpkR#I=v;)+Sr70H zZQslu?oASG<9#zw`6t#RI~#T(iD|8VFz(PQ&?Oe_t7&gZ<^0*w85Bpsy|Cn4Eo(QG zs$DtcY2sZIpP$U$Xg-(#>QWlSe_d;F9kLawR>-oi>j}4gQYV7#l_LHfk-ykX$)&E8 z!b9Kq2a&cVk|=QV<=~x-*A|_*N2liiVTEBf9;#Ved?Cf0Fis#pHvf5J{3C-oi4z*! zn?#MeTeoOyc+rnF)u!+Nd~`+r=oABADGpAGQzycT1n5k^#XI)T6!iZXOB{o40K>P*1)O*0DGd(SE-2UM{dT00onZ9>~ z`Q>-6SZ8>@qw3fCgrK>ky@@x2M!48bRqAHN%k#?{AFa4}AyVC)f261!08%RU*o4u( z31C&blD$>A$oI{1w|j|9Wu4C+Z$2BJZogvjN|?JASVk`_-g2+-w_DtLubC$@b-tE5 z^k+}N2}AbbCgYKn0vU8|?8Tdw-Gbsr!Nen=}_8qh^PH~zny`{WQpyTj>V1X$VpQq^a2(lYOb@%#8$tvzqW8g9@Un%waiuBs2{epjdEO(iWb`JNpY}tC8!sRZ*DjY!$wwLf)v0lgsRU)$IT0mK(g9SK<#Q5+6<3Fs4%?F2^?N(S> zy?SQsLsUrcH5B2c6Jd>=+%qC2%x6&&b< z>{B8F7-A;C(m>00rHk=4?$o3~8P8q!^tKr%6UC-fLt~zFSGySDRW85j9%V<4$j#Yu z40T_69sZpE;Rvr zv4vIS--?;AI5(I75p*w~a}Za=WE*N+YDcmY0a$Tz^B4GxrUf-RxG5H8ZcotchcBN? z{#2lsFY=Z-`6aoQsjGNGZ_Fv?dcY>3S2^4yXDVT>`Pr=^^)K#~veB-jXO9V}kUBpbYF9iqBFQ-k}el7MsEf0vFB*;9rz|hDf zz7IEgR{*n5q{2OGK}$!45RakqpEKXte}blOXv7#ar#y0QiGI5IOPrK;V&pG3Oa*z* zRg^nWrC{)TdIktxTR5+2Y39D3pv5B5O9K|v(_nEFdn|x+QdmJ7=^leISRBroM_ig=FchJ~z5XDhDhFt|N1YpOJ;(HIG1%+@1RsQkC^WK&GC9h<4KDd8$ zUq>lr852=_llsy3z$}ONN1twy9;1v25uSZ6g|Ejll&RBTRhzrM_TKf#$~aWnaC_!Y zZH$e^g!P#Ke>8xEwVIRRDCzszw9%M%{jZe$goxtoR9P^;_>(-~^wgQ}$$pgXa3lP# zeD||)iR}?@Wv0CT9JYJkCbDJ>D6uHm6#6@;P0gENe8cfEN|9V1qv@|DVk#a&$gk5Q zz2HJ=#OQ<1A+Cj85sd;VLY1-04vs}`{rZgMRS7B$~z-ThN`a;D~5AsoB;rrDwfV(xFT%lGfiAW#OSx$WSC3_Myb3mdnMLf=Y zLJ>QLocNw6HTS9&8;#nU0>5{Fe6%6!%122UTgL#c+pB5@Nl%jdYzS=Efz8Pq;)iYV zHM7@+D;MU#%%#XaR89G{HR5 zqrr7ffd%2paX|MS|I1NvvmFYS52zxNcGtC$o7wXkA8`To2F_W#E+|Hxj9Cvu-s)Gl zh;8ooyO*2pc%nc7fcUt(*|g4f_Y?!kRsF5rRetkLXG`nN(uYLsN8SIOR)91cSVgOm1KZ5&BhP6JW<@*d_b_=0Ki)2qMPBWC<2|7 zC!S|cd3s&EMQq}uNVp#Q7e=&(mDj?&o>_1u8u=0TE!N;ek1NfxK@RhKbBgpn)b z>!`PnpnBIp1RniEW>rtjwp!V?+l14Kvf5KMFWS<(eGk^cd}ve7EOX9a3Xe1C?D(x} zpEP>LnQ6%UM)vXiTxeyhJ$06jp>MExleEs~g}X4USA`4ko@u69vYc-Fyr*ze;4N3& zI`|LaFUw1~aSu1(Th=CYWUS!q!j9hj^oBL9y70%U>gKz0nxH0f$aHIP z27fJahCr)UMlYhjWW1_)@9M+$v7tah;1kA2m}(78>1R^Wk-~c5qyF*HP+8wUBU?&_>;CVZGybes?|hy=A?hG@RMMmJC7OlGn>v z@qUvgh)o4z%}FNw&2X_dVu5koBQfws045t@`mOSraEPf=cU!V&tV-9?2q2FqR+F2b zKfEtpKGdg%lz{$sH>!jAOuloJOD$Kwwb@*YexQwYym8%)a#t$kgJ0Wfh5#MNle~Kr zU_RGHLdycMB8ED)XYURza8bepLW_rq;^ zR)fNQ(Hr0vwu6nI2$=lG1lM)8*mBXcKTvB-(Qcb%+qkNKXTtEUC+_@dZ5$#u zVPBGmv5c!Gj}jj;%X6c_lb1>-FOJ?DVoGxRL>v4PH%&BozwoI0@?0e{Ec<>Rr!ZsM ztxB`^_$y%W36Xs}?{cZJ-fz%9>-wiK`5q>IKnCnia?0{%if^1i*fghHmGhlG^=JVO zzh~N?#WyPGizZj>g^pg8eYtkOpT5l<#WVTu6WS`Up}ko=ktR3VQb*@wvQ}a; zo35^<9a$}Z47r4zq&eH`>nRNInaJg>+$CSH2)$lE94{A5qNiqwZ6GY%I$}w)C0X@x zR_;s@*$(#Ex_!s~@r6QS)*w9Bc_=tl+6dNG8%@@w`R~iShXFfFOA_TXKex&m0=@SY zedVUAm-f>sJN`Vbe7?eH{s%I-U4N-XHMw!qu{T>M8@uvu03mDJ{@Fl}FG8>nFXqjb zj~)68F1FM5?0u>BxYuPV3(iebl9wKC*Rim6;~btxn}WjuW7KHZBj;lo@yUYL+HB z)_VOOb9-rr?}EoUpv;{~1cUUZd=yR8V@bx?4mE&dFObM_Pa=-Ju@G4AvQ7rl{c|Zo zS8e>DIkVXA(M~SUr4Kf`2;2T4R=WYip84C-)NCJN+x8(zgX4_A-thJ}<(krXS41Wb+X-{?D1e=SPn9f{U-rp6u(K_9y1wD8>n1ED^z32l>m*8%kdnP`pJ zJY$UX#(gY$l^I!Sw#(#=#%IDDnzM~fV>4X)KC-V|Y!3y;(c|EwBw+oPpxl1U^P z!}B-H1-+H(_an73kD<1d;kmuP7#A)$sh(1(oea$MOvPSi0H=I;7sc1`1etTF-W^6Jz%LL9IFWXhXv^nWwluRVtn07;1 zLnz0Pt&Qq3I0v61v6a17+Ja-FG7IZ$Qq9Bu7n0YsU&%t)#?vf-hbe1#4L9j$Y8x9N zT6ldv`b5D?II6>?Xx}$bDh$#QXzi?%rjlmcZGwX*tl=^wzus|dRJ zx#7>B|JA>KJ>)yarnhDgYN=``S<(y0SNy|w*n&)Jrf3T$1Oo@`uDdw+s#hd~jy=_> z`6OF)TNBq$!eA8ltP5*{rMr~-z(3(BpWy_#8$Rr(VzV`}g*lKo=#lv-^H6?4ACpQ;YfT@uTJ4yA2pSWbq3&_Et$Sp3nL8?7op#FUxS> z2K)spY~%L3w050DzBx?2FJ(`g`ye%r^tx8&QK_s&S6Zohek)2=lzi-BZ+9xSOg(*i z_RKOOPj1%rei51Yyb5>!B9HY(aci1&;%mhteuw04(#`pj>@QZDc<21kT)=~A!$3}~) zcChe=8eu2OcLRAY!EL^2MU|R=))48zEgGYn|TL70~Qywg{Zed}z zJo`6z2xB{jyxy<$t)EY*4JDJyILuREBZLscmbVC1isFe$U=q!)3%a=^9v7MGq^PmW za#^FW+yf3HbJ*X_$reA!2Z?dGKPk$ zwlu2-J|fw8n0onvVY>GUZZe+Hg9$sAigd zIp#IckL2ZTlSUb6nt zDGACiDGU}R!4Ho4i@1Jv)~778Z7FGNc4$jejAY~04ndypt)b*g#%af`{xXzEimu5yU<19@3t~2} zYo3R)o=E?w?>T*Z8bQ8&p%}SgDI7hhUm*P$d{0QcKMf0sOvcuc(SN{@(q(~;nlFRL z%CZ)g%_>ymPXFWdq@dkJ<~lFL# zHpUUX3kidrAmvW5;>Xug`R~W$O=^lV{U()!LDM~`_GOV4f(Z8Hl_r#AyE;w|v;5*C(nj0&u(|$}m(Z9V@Mt(h@$uoT@ zg{&(MSJVzXDQ9{5($olcunpqXb*qqQfH6ZOajGQ;ZG%4*R4-Yj{X5!k`F=rPty@Jt zCiUS2R;KHgXlDj}SlSI_V0=dnS6Kv5V%EaIZXT@Fks;i(7K2ArPW6?X>nMzQ49bBf-U>d_$w3863H1XQDd0}3rUpK4=+v_q%iX22%eFxm;a^sHJ?VF+q_ z`XYUWMuC!gXeln~-_Zbno~Q2eD&N0L`3b@a$e{g=DPrH3$uq^vfhEY@T?+RN*Y_po zhqh9Y!#EsD2cMu$A`tUY zY&WNx%4;8NRg(8LUky3@N@5=_7l@<8^;G2uiLXY#lb-n;w*{I=#Hl0i_|-ajv};@E zZ9AiP>R~h9bFK0Ax(^IfJU(SS4*MaR0#Dv)sva2r9K@e#!Hyy9Un5e!x$4P0JU8-| zbSlAuQ0A(oP09Mc0fq!L0u>F-J%bk77h#%`r@G zy!@@|UXftPFbu7e{{-wleS(MPt|5v(gdx`k)=1Zy@<9-6kzE|q@W5!rP4HhfU9$*g z-#CHFnlhWV=Ke3KR{pnBxVSyT?cBULv}H^_)jh!;tbx1WR?(4-f7TW325}x3_ixmu zpmgJ!QR%Gukn~hPUEz@HM|o&kh)v9y^A{Jrq9YFU$+ou&z2@9z`cAiHgXMr_xDqKi z5JrkqFBpTqS8SNVb_I)sZPq{78r*!Y(Az9uqdZOUAmPnkk5%Pd$#`!5J5h!#n(e}y ztgc6Q8TX9->iw5_@-qVP{fWLn6U{=?wK`@;-A{8H>5K1dNL$?sHW*RPHZE%96w0xX zpG8DxA6)~L3y}Ywrd1Up2pxGkPr>;~J=MnUZ}#PVB~zUNwx&M=jJGWWn^ZZcTq%*h zZEXu^Eu@+JfIoYNjk&~TqezaR&DKdw8$KDgBCI>pz~iE6sh4R(*8cSMGXp=u`P^2P zt0Qyr5HzWEPW3DXFPwuRdy^!POjd)kXDJU+2M&5U}JF#6{y z{E3q`*N8*v;1gXw_pPmYi*y(?>zYO1olip6WZ_15!}5s!))efFCX9xH%^_d_8up_x zRz9f8b)pCUYMO@sRUP5foGode|1Yw-%EK6Kdy`)r)^UmEaR=#r&xf9E>jZDORPzatp3%iY8a=N$yxTU-?J zG?whD@n)4sbDVV}#xe@bg<87f(4O^~ct)apdO`AKYDN1|#OPl0_R6=aq?9r6IXd17 zqMkJjob!g+oWPw(?E-zW+T)uKTz4kf2|^vKbjLx4n^=AP0@f_DFAMy@P`Gx*jFaw& z^0h+qyDkgNX)?z@22TIhJas;AU9TzU_7%6Q-3gl)^NvpaQ?(Lc+3hF`W*X|NI_IG2_xC`|EdI4aNPs0xS^L6ZZZmm5u_@Q<0xZL zqu5ZA#J(WMF5qPcZax!jlv7Xpu1>#mcf?KDl4GLdJ*w0BIN+rKAvV+UqOK{fUe+0~#0Q&koE|;Uw-oT02 zYEm&0eK=k!d4=F*tf{(muXtn8GH3#?=HTxcNsmhnrd_(u{8B5c{8US~bYHtWG0td?8^EJuI z_`g+4&CLo10z8-?;=>Q@{Pw3_lTK8GrUAKo|I&PZs@k!aWSW8x% zY_Y%Z4C%=&UTt_Ci4ZW_}6yxg^3H9*rM9#HamYn&01i zyTcd6+ry|<5ZKQ{Rh>B?*3RkbvN6uX!@_sr5fAJL-DFsRXZC)5SQDQeT9V_2+eGpv zI{zp@?J1m@#NrBQYEODJy(AAP{~wi)Wi3 zl)-;)jOp1d6-4a-GlP1m{R>?xcRTbG>K6Nmm#d#81>!LuIr=pfS>8={2Hs}Dy_4Qc z8_okCuWcD*k^rZdgy?EUz3@*9TglrhK}bc5p<^NMYvfCA`*hw10~7_-q!x^2Ji&1; zl^>-i`|;EL0ir*}sZF_(EIm)ZsYu$GRa@WkYlwH)fx?Ein4p?yu+nUE`^?eygP^Ni3VbN#|Mn-BCCuA9LXj?!Mn|o!vNsI-*K3d*?`u0BQ z1>;IyaYC;m|D5s9N=+{?M|{9AFo?|(BR&9NnmNA)3zlFrRPzp$vjHLwvj!%-ZwQBF zW&i!-#5+`%q0A<8Io?5mY}>rl(t!wX~Y+gL_aTaAn7OsnohA|DoLd4Gj z=_AJz-F#jlm{*K`zW(D|OEQbr)@nSL$vJ!UE*m^QQ?P3=THZr?*N$~UpS{PLu8&dt zZ6j6rH~l9`$jy#19rYD_Jh;5`=r=8PRh}6r(y#XC=ALkP+_O@eXBKt;YB$}3(PI29 zO*1mK8}fv6pY_eIc+Bo!Ej`0vQa#l?!jgW9XrC0fYPDxGRkd3QB+c*hhda|(i2Wk< z0(i8f-|d?S<=TaeIIw3vU72dDes;lzg)r55v@aJgZ;|D-3|ArNA z!O^L~9Qvfc-8Rj~7ql4J<6vFM&Nw|SVMBKte$_6c-Kh(Qi1T3iUK3Dh8pNs2Da$Uk zjwDFg-nvNPmsa2fG^fw7JUTliZSyA23pCr&EN|cZ!@uvlL9gdC2B>`AXJ4VAq7kq* z`hF24IcC!fpH_#CJQ^cQouO0RCiqpPNWvxqeHS66n`5PO+ldQH7E;;P$Zyb&{VK`J z-j~N*UvDa3UMOm8CL!MI{_{s%eA2JLFw3IQN``>XS~{(g2a3Emxd|fPSZpixCW#fTegll;w&Gn;b^Q&gRmRma(4aW}25zTcfS* z9Hd`;@eOB`l|2+UGeFIE#6j5oMsai4Eof+u8%Ef0u0v3^tzl|Q>PET1wIs_nTx*_? zCH;%XL4Qa}vQ-Eq?X`hnTRSZCJis%ZEz3>WGu@A!<|4?{keVwkE5kN@|FKr+&ujmc zoCGm`S)JiB)#B=Vhl(>I4kgoBupJ1sBxs^&yLw<)k?0ZN#-3izw;nG4hViiv+uT}s zQCK?B-+`&4O)r$FrFpE6T)vSbtZBYqkXiG7Z2mlv;s7}PJ3>%Tr|EUCd$-_L4QbH% zPA7QGm2`xEB8$q&4UgP^jCQtT2$1h@NHj(}9GU*cetTc+e>||$i^v&GiZ@kfK4ScD zLjV>)sIeotVdHP#Nk8`XOlZO@tJ+kTayz07eS%;{QN;Kts_UYuoID-n$kIzAxQPv* zMFYBqilh$m-&g|Y>wm3_%sN$EZKqiJWt6X_TRDywrp&>*ueH_Z8nwyxdCaC7d1~O^ zJ5C^1WF%+H#-oKFff!32lQe;k0M!AELuXX)WF?z12}+pKA3Ep~fWqIKnq|w2%1PO= zMYXuvDQn`Eo|JthCjHk)5ixzIN=rP4D^4VD7_dLNg@j8|WKE@=6n_bskf;N%`>qUf z9E^b!1Q}gw=e1zEq+}BXYE@^E3 z@Z0kreZM+=Kul9VcPdSNg6~gWxi6+u5N1>eDa-_Q#oip80wSgMQAo2>_OIU9+eKY|S%(hVSqmma|OnH$_hQIUyAuh-Bb$1ZeX263)np?F9+{HT?vbjd@i(*Wimd}L00Tj`L{cg0&iwz*;8p|GKLlv^q zk^f|Jt;`vvW+m zYY?0{Ccu=h*g4*xD1Xi!|O!Qeq%%FNFF&P5l@0lLPNe~7^-w)4BI7QhA|XkBAF!V zFH@~(YqUAZU676f*%8jS#_*kT(5tF>l{lOXo-Cn4J0T3ebLoBe_~@y@6d(l?u8p zrzIt=KR|_wi!XlPi=JlPe2r;t>@RmMDnFBrrzZya0p3RTP#HUm?*d*(Gm%5xoY!nS z+J5%aBqz44pXonfM zXF`Ic0s#H`l|F?suqR+LEV8_RLy@|>xz;g+Icw+(EU{0TGqzE%?E@Ln%S;At>Blzh zoWk!9QD*F!K9{jF{QiY2fZ+9I6BLULXRhGaX< zur_L%s)cgoKk^hgT^r>CV9u*q*fg0Kd;5X;$3-XCSB+g4E_qt?!sVvyE-P#sw*VaT zT{4b;oqvVtqC*-Jgc``$k%IVmNqj%fxBo!LX2X|L(`_|mGf@K0px(jR#SB&?=@vu= za!m=HHvW%*E%MOVkeU+`;gJTByuQR+xE1CAufVTDnJgRuv~>;G42U{QAf8tXj18(V zcG7}5ed=iD=8~UYLB}vK%<%bvVLA!M_AbQEUY+!fX@#2&u#f|Dfz>vb>uoD7x91xM z4Y$4**X%Y+I6+u>!GA0Td~YOImY?)FbG*IG=>PlqG*ha2 zDhJi2bgM2|z2EYVSANyWg){Hwu%R=pdfWuNtZAZ_li!v|gxy$Yr|_RQME|s)o&F=} zqx9VQVb86x9Pjt@f1njQ6bcyr?7w@AfuG34*SPSjy00M|Pt+idDIPIxK$y5+9dHTc zjYsyT5!aWV1Sd@NuGP@TcrSI*_xY_oZxDWJ=@=Nk>BKZBRBYRDs}Ymr(O8WERLy`3)G;x|2y^%!0ST76+t7k(^2uP# z;rS8R1#hwY5g@z;db{y@W~p4>D*ov`hnC+?`Bxm(M6JxSOSzIy1FW!*9}h} z$yWR^miP$#0p6%cr$oB2>(|9NdEWYOMv~0%)A3fGc30e=pR~l4%{<8ge1uAN8P=y; z?=0Y&TAI%3>6VJOxmZ#Sku;XvMYME3nf}tgsAIE<6a<9gZHSHKkB!%5v^Ql{sCD4* zlp)rzjfg#dI0{LoSlGmBe6ZeEF4-&1O~K}`!dNdIN}?+xs#9W@&qE`-1llm<8B!20 zC$>bc@X=VOvZZCZrkoF2cHd(vA76Vie4m8--w=m?q&W#m^a+VOHT#M;&?1AX(g_=FwT;~V;UW!M)i3mYv-+9P%HF(K3ap@)PC;Uzw|!aP zplj;VmOgKI0w1xq%>t_YmF{{u3ufL}(L=(UB=p?Y@lUWbJrk%izIb|w8$vU!>hMsM z(Qz~1I`SF$qTDwk=!~adMA;r{?ryj0vat=C-j-_=C*Z+AFEe7X5~S39WiWdJ1_uA$ z3(SSY_{hhO$j8g=^s>>w4S8)GH+dym>}-=2%lhZJLCCC;qsYwx5)5q$M~St0R*g3u`rkpm-3x=oCMDxd zcJw9{s69}vRf2Z4(~U&ja3P(=LiW}(uAY-LQ?GyQ%(d}ze=0W@SA{dr48vtwrRLl6 z_AI83T)5m?c2mNghyAp@aEY{=UV)I`P}=27Tb2pxE|Y!_Sfo1%~T6~W8ZtK zQS3b4yF)%a{D$4{X}c$j1K}66R=cxU=bCs&%3)Qdd7`{Xgp00O!`C9vL@~}7EqyDF zOpnCdf$xR2DZqvpiYOQ=bL#%(zK0RQsb)}KD_yGDBRSfG^F8x_InDn<3}mkZ^IoDb z%SIa?)r?F`R_Q@i)$?}OE-hAde-srSl?+3<9N@=G`9kK{Sd>x>6!6kCR}Uo=UcSIt zWmn*MBQd@5wyb#bJ&5Q#V>(yDt7IzWZP3EMulKp6c-oPUR+Sn$Ue>sGRqe*&cqidh z&HtmaNYR8~=_>r-Y(Jq0c@j-+31{w|#D?k5gO$j?%>zT1r0cQ|n4yveg7|;R!#_Bw zPoiv}6ujNx!jkwLa=!{FUm0d`C4b5FkN;Sy#ty{W(Z~$j|62nME(w<$C?!ifC z5AL@#7+JvHn{tFK4gKH+ZPd0!gYVEENtF)xS~K*hXzYr%Nq~=7b1Qu2QTjOIj{d8!Hm-ZqjllW?HloiDQ`_7)7z02i4{4-tuCH6maDFXzZE`Z z;|qCo=W@JKi;w-9MBbJL7xMqTjl+09v6HZF@DstAS2pJK+H%aIi;%E0nn+h=+&pK14r8<9>pFxS%j8^Lv)d8#Yf!yQv!`_F=HdEF9nB$~ z6ZHUcf6oo%PIvJm|6^iksH7Oe0p`aJ zt+U5<@nYuxt~`ODC*lP44-7q>rA|Kzj7kqPa(jF;lD%ntR0c(~C?%j}Lo}HfqJuD} zLEejE6*IloughkAYtfN?phqYN{2tR!PATzxEYK|qvk;KSRFkkSd@Qx~o^@fV@e!R_ zZg(CQI<;%h@b#AH=(T+1$#qdXk#54%#Fo49k_lo9|Eo)P%;OuWR>;4$wEhmyec!B{ zF6-rf9sr)7M5{pfX4vTAvoFS<*va}BKX}OsJGa_4o!=S!k6?KB7T0RGa7dg+@3S^h zZwXJw+XDf#;Ln{H%fv>(dB*96>&)|C*>qKwr^M7Qt4&?S zR?aPR9?7$}^S5?jbt@OQD$_-6hsUVxg}eMe7uN&aG24#kw2v=Ts&@0Z+BMmhG{1wd zL74lFYjJ#&!v6KBJyCl*Qw8}>r@y>54D&G!UP2tzp#Iu5-SIg34mT>I9Q+rWlvAQr z0^dD`#BUq6o;D}KZ2w2_1pH=h8_oguaU(XDFaI$<$8q|L)WJDvkl>!XYl3ehXF{+y z2=Gy&eHB&ttsn|KU#}$I^%DGQ`krLJEusi%8JFb{+o4kIzmH%i-@DORoc*B1e#E_R z`+%nMFxGXOlp#mx8FWd;ExLADRgDJ2AdT11GGP(>@GWg~!{)l?O!Rg7)A-k#XWT=f zPD@G*SQsk3u5UCWIN18q86`bFPNF_%&&I&yoQ>?ZA zLS?%-w6(#J66cUJzr8r8AgD17nVWBEuA9CK0V)Ix&{jyY#xt|WTmpnK8BrZ1rHUsw zP5@oKdiGwFcKxT~-~N*kJf00P&tCYILDQ^7u*Ck+rs;uP^EbZqHJ6`tgTzZ`z(Git z6G{rgrGxbUW9Td!nr_=TjG`h^(hVvg(k(UMkrWV+ZYCu$2hyW0x|Ecb7zksGZWxW^ zfYIF@8!#AoKl=jvzu1-Mb^eZn1_J-!l&K!AJpSyxHbZ-RJ3HyHt>7ae+u-V$jiYxZ zBVt>1VeYY}875ybz%{?fa<@aqehhTOHIS2blZ2v+iZ+bjd8SeP@Zfzse%28_IGk&4~K_ zQ8&@|hdTk=9UQ`esGK51Ui8){`#J}aOu$I*W18VLs9MhOM!IH$i9KiP>RWJ|{r%!p zrVYDll=u@_D8C1|FR47!2XLeFW9v;vceh)^eQeDozgZU5ual`4PNtyM0p9?HvHt$`WiTg}@-ZR@mOIg5XKbcmH?*g3%=Izo z4c2m{J~D*z=IvAqFSrOlccDCXc3f9p>+->Ju<|pY*Q77ygdi|R z^#w{=cQiLz6N+3AuC5$`)T4tXai&^r^DQA->&|(e^*j?t-knMO5-3eYV8}^RNZKaB z_<}QSU9>!oKn^O{Ng&5BYmDp8XF^67{wdD7)7P^H2bxAicAAu)&8%<6+Pf9y#s)bF zhZWiEWjJ`M*n=M=4u{NizyB+!E1yMqWBQu*G0a#$b*uD5)5qx)z5X9jY({Q36$c*K zSAjRRm?-DH?fYS{*1w@`mb7_lXFK&~@UvJNZwA4vPMp~F@Jn&Twx+v~--%)bX$16% ziKk{x-lNuQr9EWTLIC~JFW+UB@TT!4*Nn-QOuMLDFR<*Ka(?N-PvX|}a1hGdYtBj= z#Vi7|RBcs)H#vI^NTqV=gyHGeIT`T~SDS};>lJ)?n+U$89Uy|Jv182yD~vKyGjhIY z=!zKl%PBVUP~9Vwd4aaDV5J#@tjp(+k_E+IgHAk?V% zLSp#K#OO3ZBoQ{P%Y8m!r98|Jlel*TjJzY7;sLP=JoK47bXZNXiy6`rU!b?^_}`lr zKJH%`b4+)SMm#)vGy~T3Rp-UuUNdQ9< zUO3SrP-X#im9`OPX)Rd>yJ7zKD_>pR?lXh3*>>7HN`cwbH>pnkEn>#OJKV_z`yc0< z_XzP!$mM1O0jOe%Ozokf45CNtg#maFW_$H4>d-(oxp25E_Hs@6fLqs(qO7FCA;5{b z{F5o|wAo(Gf>Az#9z9s^RkF%A?P|%&SwqqtBV@N3B>9nA^?7`-{)_p>$twM)SwGdq zb>-th1>q<4^oNHVNP|-=HH)B{5}^wTZxAY~slLmSoz)zh%t;kO?LuSKPo7pG>9y1n zYyGqLtIcNrKh}7$c3%3u322&OUt=f7cyoPz{YtzQBh_f~V!(3XEwy$h?QY0RY3B`D^*H!tpWk^dx`#V(0C5(<82EVfe#6GTpqgEK|>Fd z`Ow>q?ll@uDZ7@QxT-^+gYiOZ?80j&7puBypmJz? zgJ0dG8ypN3XIlgEO;b#7vU!cS$T9bN>8TmdkDyL9RK*V-f>)4S+f#)Apw}WVYO>?~^lu9R{YbbBTjZEqzcL8F5XCeb4 z6pt)-(uj@=B}4nVs7D;jxU0PN()2FkGRNU0OEo*OasP_sPT?>EVZzfnoLi0#l9$>{ zmH<&GATry`v+{@}h;uSE{zue~m^f*9#Cb18JIA2iUMh@*$%)75d75a9 zAt{5rR=`xcqi1HgW+BP0;?DZlw4pH5$I=uhQ<1l8h5)e+_E&ajLskrBP!h;*0$?$S}V{I;8=- zBp=c*);79JgqVdZ_3Y<>B1lO21HvqfU}%rTCZ~IAVBc#i=OcvO4+6iir^ak?AyGa@ zV6yAvjoD_w_u{bcn@$5ZoYQC%{5ODU(X6GVHYg;+2(w`RAmgng0olFx_<@sxz#hLr z3L6=e*LzwzHSA5(g`Qi)I17Bi^l{YvroY5P!T~wB(~`Pj7sD*Z7N_}tef&|4lcJ`T zaQjj*7@7RS34-xP3gZ-WTz)Kd_8cq~K)hlD!jvS#zT&f1R@u*W z4zrzsHb%VdstBbD$ks96+-A^i{t(ByPnWpSaQ9+nk00w_EdNJblG(;r8h7~V4$=_cUpFdU-Dz-n8YOQ`*&uNjp3jj6*9jMW>00e zS~6-jnHB$?t*q*sE5tRttk<+p^ggv$C$IcE5j`NT{TGJL+HL6bH6au;S%-PwK+bR# zXfE=`wh5~AZ;w$&SJLCn7$#S#(!lAEx7f`u5Xfo0Z-9FkK!+q!GLCSgrJTv41cWOz@Z7f3NyCANda=p5V$&X#Z3oWq7cv&34H zs}Er5;pFkR^HcW&jeE3GO|c9pm1B!xPQ5hs!dGqfKT{tUKD4Hjpw#8FdG7>Hj&*s) z_uR(!Txzr!!mMeYTx$*nOU^ep&)U}2*2j3)GtxXz-Dbn2j z!6}h1L1NyFJ^PAGttR)+R2T zAR{;)O-s4QnAk94d|U16-|uk^O&lDVzkn1xLxyJE%aNZRwHKR6eZM#Lz1mW0*;rGb*uGtAg)9k8G6^LWwwBhjzLaO;1DLsYjeYn=MaRK9P$JLUY&Nfh*O1rgmQ zh3|tC_|&AF-8w4o)2<(#+<@!H4`($*)w29s--POE;k;~~^{tCHL0$#cBu@Gyod&mr z#dRCQ)I}}SazVQ+y$OHup@!eC?wFkd{Yc%J`k9ZYrrPA7Pe!|YdYt`zUKxi!m#k5| zKS^L25*PPo0^?E*2?t`gxA7&#;)1DLJLPD_w+l>P9+41dTtl#rq_3G*GA;sf_4d1b zCMAOMMOWKNJ4PT3H54@CBE53j87|pdf*%_daXUD7Q>btmkn$Ag5?~1^V006~Rsv-rWjxQ$bPmLy>OAPrtIVeF!kferTxbHQiN;1%Wc%*M`MU zw#2y{(oZZj9}y`na>5;P{yqL|Rb56<5~sW!7Lp%0B^IkWRx;+C&EJuAp-(xMewSM` zltSLNIpvL|uDTjFrw-v-^;Sb8ZX~a~Ii61(<~27FRix_vPhdjChLtPhv}DT%%lO%n zBNmg)+w@{8gl(t(wI>CGaj5t_txfN&iJ;iemdW=+0_w%c3nrt%zs)i`W2f8EXF9;n z42r328UJ;G^FWtG0EwVS)|2xJoXZ-FPl(c@!QxkU$)MYIvgMAS9&>EUgD)H!_F=p? z0uyl%)y1`fhrUh=J(Ou&8r=DIjq{@H!6hZSRiisl%lY2(iGR(LEt3v!Cp!{cL~fTF zt_ZK}>GcBEy2L#MQddxD(GtXj6p>fmR8IsnTk;qBq~XJhWN&=Y%Es<$9_(n+Upuz% z*_dqJ;k=B|9yaVYaG5(K91g#RKD@=>jkz4M^|Jx_1V@Jao{~|LyqDc-4QP8c{wG^X zeOO3v%<4ih2Ag|BJKtd;{o}X@gDXrePrZIV5r)=cPI+XW&-+E!Q>-UwimIEfvz#wb zBUB)yu*5lp0Wx?VjE`H-k+choT2Bw2!>%Z`$ML;7ggDDI!H_!b#KIFjq@B(gbT@P-h($zt z>zKa5Is}vzYkW9ol#8ooCQ=G{?X}~-J=I1Wg)tKpGMgxH3_irm6FByqcFtaXF4UI4 zURc6X{W{v2j(362WlOYGQd@b2>iPEGB`&-@-&T!C%)FR!S+@=gVv2k6AS@9JY;&n$hrF?H!Mf zX=g&cS!z2^r6u{1H*iOZvX76Gax)4h#voQWGgl}=&^;M}6!zWmMNDq*(`u=+V6@Zz zvb_61`Sk7Kt*0rBM}64FotoX6z=SSBeL#-0Yf*5=LZ=Yj@Ao`d>-&L0#)s1b;TJyPiO}al?*r z9m?UPgH(j*q@Mu2+JGFVVG-12wN;Qcvr!Rse~tBHaCiNMk$oa)GmAGG=3NW8?u`vz z&0uKu`fCG6Ti&KlJ_WeS$|u-oh)L!tGqlcNCV8WgstG3OAh+|=KA~Y)<<~9^o|7UOSnhTwsr}>ExEE0m_iq>ynKE9-a(xo!F-Xbj%{^pZxU@I>aA^FDpUL!zE?}-2+uX~^cE<;4?yk3yN2Xrr zi~%IPf6mPBntqg7lXz<(73yhP!0>2EuezAQUKJeP& z280iV;gP*8ACuOQG#2{-%J4xTWCX}Z8jAbs3HjH{_y?tRa;ix2&+DNcWie9&a?|we z2_%4SG5P*Zm7D2HDa?{2QIV{jW%hlI>}Te$MS(TfA{c`p5Uh zk9B76949*XcY%2$JDfGBUZrnnJ=h>-+Yl{+d*%4`Blx3l-ABiEA?A+{(~gA$qak;s z?H@nur|2*eI8pwSCo;yG(s&v|FCpQxYrT4O`0~Mn^D(R1)}!XXR>uv$NN%bPG?W5~ z;{^tLY{l<5lc1XWphBdC%&LoR=_}PusbiA8HjarKrPbp{%dVz#$jEZ;*8$*8#-F`1 z_vBw&D#)Wd*6pKylunt%2ITz6=Ft9kEzu5qaMp`){DU2?t7?1IYLa;Q3@IvwbWCvK ze|y2czb?V?y!+PY`cWfe%JCLqVXmz_Y5fk#TtRg+BAY5s!dkndC<-fAi>vIUDHfS4 z?)}>Von;kBbl6v5WBlCxX0O<5N?%Ewp;kqrCH2^LrkajY+f-?@q|L3J#V*1s*2w;OYQ zo|!Y@y#kO<%u=`Xu^(WtZ<#_W*s1G8+sAM9kX1F&JWU78XTszCp^%n4l18GL`JS#a zZeVs!=STk4C=Eh4HK_Q*l3uL*`fbAj4LdXQ$7%+90K_ct2o2h8S zleNJQ;`Fi2vNG>p%kci{)3H)FPo9(7x6soLwWcCw&apKj?9Y@Ck{)0JkRIubqEyM> zx1p$tK5nlgU*f{U)`~1a^UkTj)JfrV%skm6ilIIaqLnAORL3uaD{z6v8!?NUL-dJE zrECf>9U(;>bsCrU)eR>SHkZ(SObMB{&h4`h>1Gx4lhoHuGdc7;7+a89Rg$RL=Xfm3 z%)AlZ|1qVYo4RWvtl(9%{Ly4heO?F4sabcf!FD&hiYb=2^WWX`eL0`=5-ejkhfFdM zQnYt`nATK8=-(hH>!eJTQSz~_7*eP#|JE!#oT^J? zp0)QXH@t;s6^5kR3E>@Wk+!w9f7t2bX})9``P}$z?00X+ZU;&uw;K?Q{zsf#ypH5D zSg$IN#mC_NUqZ|O4RQShl7JSX!u#$UvP66VXfm{5%0AD6z$|lxpNKwl%75W@lJ`JO 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 w=Np#AVx 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 ?q}pZx&T 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 Date: Sat, 16 Jul 2022 18:01:09 +0200 Subject: [PATCH 043/177] More tutorial combat tests --- .../tutorials/evadventure/characters.py | 44 ++- .../tutorials/evadventure/combat_turnbased.py | 175 ++++++------ evennia/contrib/tutorials/evadventure/npcs.py | 11 +- .../contrib/tutorials/evadventure/objects.py | 67 ++++- .../contrib/tutorials/evadventure/rules.py | 3 +- .../evadventure/tests/test_combat.py | 255 +++++++++++++++++- 6 files changed, 431 insertions(+), 124 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 10f96f81c2..623977764b 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -119,13 +119,17 @@ class EquipmentHandler: method. Returns: - int: Armor from equipment. + int: Armor from equipment. Note that this is the +bonus of Armor, not the + 'defense' (to get that one adds 10). """ slots = self.slots return sum( ( - getattr(slots[WieldLocation.BODY], "armor", 0), + # armor is listed using its defense, so we remove 10 from it + # (11 is base no-armor value in Knave) + getattr(slots[WieldLocation.BODY], "armor", 11) - 10, + # shields and helmets are listed by their bonus to armor getattr(slots[WieldLocation.SHIELD_HAND], "armor", 0), getattr(slots[WieldLocation.HEAD], "armor", 0), ) @@ -333,7 +337,8 @@ class EquipmentHandler: list: A list of objects that are usable. """ - return [obj for obj in slots[WieldLocation.BACKPACK] if obj.uses > 0] + character = self.obj + return [obj for obj in slots[WieldLocation.BACKPACK] if obj.at_pre_use(character)] class LivingMixin: @@ -386,6 +391,21 @@ class LivingMixin: """ pass + def at_defeat(self): + """ + Called when this living thing reaches HP 0. + + """ + # by default, defeat means death + self.at_death() + + def at_death(self): + """ + Called when this living thing dies. + + """ + pass + class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ @@ -417,6 +437,14 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """Allows to access equipment like char.equipment.worn""" return EquipmentHandler(self) + @property + def weapon(self): + return self.equipment.weapon + + @property + def armor(self): + return self.equipment.armor + def at_pre_object_receive(self, moved_object, source_location, **kwargs): """ Hook called by Evennia before moving an object here. Return False to abort move. @@ -475,20 +503,14 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): rules.dice.roll_death(self) if hp <= 0: # this means we rolled death on the table - self.handle_death() + self.at_death() else: # still alive, but lost in some stats self.location.msg_contents( f"|y$You() $conj(stagger) back, weakened but still alive.|n", from_obj=self ) - def defeat_message(self, attacker, dmg): - """ - Sent out to everyone in the location by the combathandler. - - """ - - def handle_death(self): + def at_death(self): """ Called when character dies. diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index e310757d13..1a23d43bc6 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -326,8 +326,7 @@ class CombatActionStunt(CombatAction): "actions. The effect needs to be used up within 5 turns." ) - give_advantage = True - give_disadvantage = False + give_advantage = True # if False, give_disadvantage max_uses = 1 priority = -1 attack_type = Ability.DEX @@ -353,10 +352,19 @@ class CombatActionStunt(CombatAction): ) self.msg(f"$You() $conj(attempt) stunt on $You(defender.key). {txt}") if is_success: - if advantage: + stunt_duration = self.combathandler.stunt_duration + if self.give_advantage: self.combathandler.gain_advantage(attacker, defender) + self.msg( + f"%You() $conj(gain) advantage against $You(defender.key! " + f"You must use it within {stunt_duration} turns." + ) else: self.combathandler.gain_disadvantage(defender, attacker) + self.msg( + f"%You(defender.key) $conj(suffer) disadvantage against $You(). " + f"Lasts next attack, or until 3 turns passed." + ) # only spend a use after being successful self.uses += 1 @@ -386,19 +394,53 @@ class CombatActionUseItem(CombatAction): help_text = "Use an item from your inventory." def get_help(self, item, *args): - return item.combat_get_help(*args) - - def can_use(self, item, *args, **kwargs): - return item.combat_can_use(self.combatant, self.combathandler, *args, **kwargs) + return item.get_help(*args) def pre_use(self, item, *args, **kwargs): - item.combat_pre_use(self.combatant, *args, **kwargs) + """ + We tie into the `item.at_pre_use` hook here, which returns False if + the item is not usable (that is, has .uses > 0). + + """ + if item.at_pre_use(self.combatant, *args, **kwargs): + item.at_use(self.combatant, *args, **kwargs) def use(self, item, target, *args, **kwargs): - item.combat_use(self.combatant, target, *args, **kwargs) + item.at_use(self.combatant, target, *args, **kwargs) def post_use(self, item, *args, **kwargs): - item.combat_post_use(self.combatant, *args, **kwargs) + item.at_post_use(self.combatant, *args, **kwargs) + self.msg("$You() $conj(use) an item.") + + +class CombatActionSwapWieldedWeaponOrSpell(CombatAction): + """ + Swap Wielded weapon or spell. + + """ + + key = "Swap weapon/rune/shield" + desc = "Swap currently wielded weapon, shield or spell-rune." + aliases = ( + "s", + "swap", + "draw", + "swap weapon", + "draw weapon", + "swap rune", + "draw rune", + "swap spell", + "draw spell", + ) + help_text = ( + "Draw a new weapon or spell-rune from your inventory, replacing your current loadout" + ) + + next_menu_node = "node_select_wield_from_inventory" + + def use(self, _, item, *args, **kwargs): + # this will make use of the item + self.combatant.equipment.use(item) class CombatActionFlee(CombatAction): @@ -451,13 +493,17 @@ class CombatActionBlock(CombatAction): attack_type = Ability.DEX defense_type = Ability.DEX - def use(self, combatant, fleeing_target, *args, **kwargs): + def use(self, fleeing_target, *args, **kwargs): - advantage = bool(self.advantage_matrix[combatant].pop(fleeing_target, False)) - disadvantage = bool(self.disadvantage_matrix[combatant].pop(fleeing_target, False)) + advantage = bool( + self.combathandler.advantage_matrix[self.combatant].pop(fleeing_target, False) + ) + disadvantage = bool( + self.combathandler.disadvantage_matrix[self.combatant].pop(fleeing_target, False) + ) is_success, _, txt = rules.dice.opposed_saving_throw( - combatant, + self.combatant, fleeing_target, attack_type=self.attack_type, defense_type=self.defense_type, @@ -468,60 +514,12 @@ class CombatActionBlock(CombatAction): if is_success: # managed to stop the target from fleeing/disengaging - self.combatant.unflee(fleeing_target) + self.combathandler.unflee(fleeing_target) self.msg("$You() blocks the retreat of $You({fleeing_target.key})") else: self.msg("$You({fleeing_target.key}) dodges away from you $You()!") -class CombatActionSwapWieldedWeaponOrSpell(CombatAction): - """ - Swap Wielded weapon or spell. - - """ - - key = "Swap weapon/rune/shield" - desc = "Swap currently wielded weapon, shield or spell-rune." - aliases = ( - "s", - "swap", - "draw", - "swap weapon", - "draw weapon", - "swap rune", - "draw rune", - "swap spell", - "draw spell", - ) - help_text = ( - "Draw a new weapon or spell-rune from your inventory, replacing your current loadout" - ) - - next_menu_node = "node_select_wield_from_inventory" - - def use(self, combatant, item, *args, **kwargs): - # this will make use of the item - combatant.inventory.use(item) - - -class CombatActionUseItem(CombatAction): - """ - Use an item from inventory. - - """ - - key = "Use an item from backpack" - desc = "Use an item from your inventory." - aliases = ("u", "use", "use item") - help_text = "Choose an item from your inventory to use." - - next_menu_node = "node_select_use_item_from_inventory" - - def use(self, combatant, item, *args, **kwargs): - item.use(combatant, *args, **kwargs) - self.msg("$You() $conj(use) an item.") - - class CombatActionDoNothing(CombatAction): """ Do nothing this turn. @@ -635,19 +633,6 @@ class EvAdventureCombatHandler(DefaultScript): combathandler=self, # makes this available as combatant.ndb._evmenu.combathandler ) - def _reset_menu(self): - """ - Move menu to the action-selection node. - - """ - - def _update_turn_stats(self, combatant, message): - """ - Store combat messages to display at the end of turn. - - """ - self.turn_stats[combatant].append(message) - def _warn_time(self, time_remaining): """ Send a warning message when time is about to run out. @@ -693,6 +678,9 @@ class EvAdventureCombatHandler(DefaultScript): f"|y__________________ turn resolution (turn {self.turn}) ____________________|n\n" ) + # store those in the process of fleeing + already_fleeing = self.fleeing_combatants[:] + # do all actions for combatant in self.combatants: # read the current action type selected by the player @@ -710,39 +698,26 @@ class EvAdventureCombatHandler(DefaultScript): "Please report the problem to an admin." ) logger.log_trace() + raise # handle disengaging combatants to_remove = [] for combatant in self.combatants: - # check disengaging combatants (these are combatants that managed - # not get their escape blocked last turn - if combatant in self.fleeing_combatants: + # see if fleeing characters managed to do two flee actions in a row. + if (combatant in self.fleeing_combatants) and (combatant in already_fleeing): self.fleeing_combatants.remove(combatant) + to_remove.append(combatant) if combatant.hp <= 0: + # check characters that are beaten down. # characters roll on the death table here, npcs usually just die combatant.at_defeat() - - # tell everyone - self.msg(combatant.defeat_message(attacker, dmg), combatant=combatant) - - if defender.hp > 0: - # death roll didn't kill them - they are weakened, but with hp - self.msg( - "You are alive, but out of the fight. If you want to press your luck, " - "you need to rejoin the combat.", - combatant=combatant, - broadcast=False, - ) - defender.at_defeat() # note - NPC monsters may still 'die' here - else: - # outright killed - defender.at_death() - - # no matter the result, the combatant is out - to_remove.append(combatant) + if combatant.hp <= 0: + # if character still < 0 after at_defeat, it means they are dead. + # force-remove from combat. + to_remove.append(combatant) for combatant in to_remove: # for clarity, we remove here rather than modifying the combatant list @@ -1050,7 +1025,7 @@ def node_select_wield_from_inventory(caller, raw_string, **kwargs): """ combat = caller.ndb._evmenu.combathandler - loadout = caller.inventory.display_loadout() + loadout = caller.equipment.display_loadout() text = ( f"{loadout}\nSelect weapon, spell or shield to draw. It will swap out " "anything already in the same hand (you can't change armor or helmet in combat)." @@ -1058,7 +1033,7 @@ def node_select_wield_from_inventory(caller, raw_string, **kwargs): # get a list of all suitable weapons/spells/shields options = [] - for obj in caller.inventory.get_wieldable_objects_from_backpack(): + for obj in caller.equipment.get_wieldable_objects_from_backpack(): if obj.quality <= 0: # object is broken options.append( diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index 6b109187b5..8fd2ad6749 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -30,7 +30,7 @@ class EvAdventureNPC(LivingMixin, DefaultCharacter): """ hit_dice = AttributeProperty(default=1) - armor = AttributeProperty(default=11) + armor = AttributeProperty(default=1) # +10 to get armor defense morale = AttributeProperty(default=9) hp = AttributeProperty(default=8) @@ -92,8 +92,15 @@ class EvAdventureQuestGiver(EvAdventureNPC): """ -class EvadventureMob(EvAdventureNPC): +class EvAdventureMob(EvAdventureNPC): """ Mob (mobile) NPC; this is usually an enemy. """ + + def at_defeat(self): + """ + Mobs die right away when defeated, no death-table rolls. + + """ + self.at_death() diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index 3b9caf1d6c..1e31c1600f 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -31,6 +31,54 @@ class EvAdventureObject(DefaultObject): quality = AttributeProperty(1) value = AttributeProperty(0) + help_text = AttributeProperty("") + + def get_help(self): + """ + Get help text for the item. + + Returns: + str: The help text, by default taken from the `.help_text` property. + + """ + return self.help_text + + def at_pre_use(self, user, *args, **kwargs): + """ + Called before this item is used. + + Args: + user (Object): The one using the item. + *args, **kwargs: Optional arguments. + + Return: + bool: False to stop usage. + + """ + return self.uses > 0 + + def at_use(self, user, *args, **kwargs): + """ + Called when this item is used. + + Args: + user (Object): The one using the item. + *args, **kwargs: Optional arguments. + + """ + pass + + def at_post_use(self, user, *args, **kwargs): + """ + Called after this item was used. + + Args: + user (Object): The one using the item. + *args, **kwargs: Optional arguments. + + """ + self.uses -= 1 + class EvAdventureObjectFiller(EvAdventureObject): """ @@ -59,7 +107,7 @@ class EvAdventureConsumable(EvAdventureObject): size = AttributeProperty(0.25) uses = AttributeProperty(1) - def use(self, user, *args, **kwargs): + def at_use(self, user, *args, **kwargs): """ Consume a 'use' of this item. Once it reaches 0 uses, it should normally not be usable anymore and probably be deleted. @@ -71,6 +119,20 @@ class EvAdventureConsumable(EvAdventureObject): """ pass + def at_post_use(self, user, *args, **kwargs): + """ + Called after this item was used. + + Args: + user (Object): The one using the item. + *args, **kwargs: Optional arguments. + + """ + self.uses -= 1 + if self.uses <= 0: + user.msg(f"{self.key} was used up.") + self.delete() + class EvAdventureWeapon(EvAdventureObject): """ @@ -98,6 +160,9 @@ class WeaponEmptyHand: damage_roll = "1d4" quality = 100000 # let's assume fists are always available ... + def __repr__(self): + return "" + class EvAdventureRunestone(EvAdventureWeapon): """ diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index f9e6a05efe..1ceb216705 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -200,8 +200,9 @@ class EvAdventureRollEngine: Advantage and disadvantage cancel each other out. """ + # what is stored on the character/npc is the bonus; we add 10 to get the defense target + defender_defense = getattr(defender, defense_type.value, 1) + 10 - defender_defense = getattr(defender, defense_type.value, 1) result, quality, txt = self.saving_throw( attacker, bonus_type=attack_type, diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index bbba30890a..e95c7576dc 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -3,40 +3,63 @@ Test EvAdventure combat. """ -from unittest.mock import patch, MagicMock -from evennia.utils.test_resources import BaseEvenniaTest +from unittest.mock import MagicMock, patch + +from anything import Something from evennia.utils import create -from .mixins import EvAdventureMixin +from evennia.utils.test_resources import BaseEvenniaTest + from .. import combat_turnbased from ..characters import EvAdventureCharacter +from ..enums import WieldLocation +from ..npcs import EvAdventureMob +from ..objects import ( + EvAdventureConsumable, + EvAdventureRunestone, + EvAdventureWeapon, + WeaponEmptyHand, +) +from ..rooms import EvAdventureRoom +from .mixins import EvAdventureMixin class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): """ - Test the turn-based combat-handler implementation. + Test methods on the turn-based combat handler. """ maxDiff = None + # make sure to mock away all time-keeping elements @patch( "evennia.contrib.tutorials.evadventure.combat_turnbased" ".EvAdventureCombatHandler.interval", new=-1, ) + @patch( + "evennia.contrib.tutorials.evadventure.combat_turnbased.delay", + new=MagicMock(return_value=None), + ) def setUp(self): super().setUp() self.combatant = self.character - self.target = create.create_object(EvAdventureCharacter, key="testchar2") + self.target = create.create_object( + EvAdventureMob, key="testmonster", location=self.location + ) # this already starts turn 1 self.combathandler = combat_turnbased.join_combat(self.combatant, self.target) def tearDown(self): self.combathandler.delete() + self.target.delete() def test_remove_combatant(self): - self.combathandler.remove_combatant(self.character) + self.assertTrue(bool(self.combatant.db.turnbased_combathandler)) + self.combathandler.remove_combatant(self.combatant) + self.assertFalse(self.combatant in self.combathandler.combatants) + self.assertFalse(bool(self.combatant.db.turnbased_combathandler)) def test_start_turn(self): self.combathandler._start_turn() @@ -47,6 +70,52 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): def test_end_of_turn__empty(self): self.combathandler._end_turn() + def test_add_combatant(self): + self.combathandler._init_menu = MagicMock() + combatant3 = create.create_object(EvAdventureCharacter, key="testcharacter3") + self.combathandler.add_combatant(combatant3) + + self.assertTrue(combatant3 in self.combathandler.combatants) + self.combathandler._init_menu.assert_called_once() + + def test_start_combat(self): + self.combathandler._start_turn = MagicMock() + self.combathandler.start = MagicMock() + self.combathandler.start_combat() + self.combathandler._start_turn.assert_called_once() + self.combathandler.start.assert_called_once() + + def test_combat_summary(self): + result = self.combathandler.get_combat_summary(self.combatant) + self.assertTrue("You (4 / 4 health)" in result) + self.assertTrue("testmonster" in result) + + def test_msg(self): + self.location.msg_contents = MagicMock() + self.combathandler.msg("You hurt the target", combatant=self.combatant) + self.location.msg_contents.assert_called_with( + "You hurt the target", + from_obj=self.combatant, + exclude=[], + mapping={"testchar": self.combatant, "testmonster": self.target}, + ) + + def test_gain_advantage(self): + self.combathandler.gain_advantage(self.combatant, self.target) + self.assertTrue(bool(self.combathandler.advantage_matrix[self.combatant][self.target])) + + def test_gain_disadvantage(self): + self.combathandler.gain_disadvantage(self.combatant, self.target) + self.assertTrue(bool(self.combathandler.disadvantage_matrix[self.combatant][self.target])) + + def test_flee(self): + self.combathandler.flee(self.combatant) + self.assertTrue(self.combatant in self.combathandler.fleeing_combatants) + + def test_unflee(self): + self.combathandler.unflee(self.combatant) + self.assertFalse(self.combatant in self.combathandler.fleeing_combatants) + def test_register_and_run_action(self): action_class = combat_turnbased.CombatActionAttack action = self.combathandler.combatant_actions[self.combatant][action_class.key] @@ -60,10 +129,178 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): self.combathandler._end_turn() action.use.assert_called_once() + def test_get_available_actions(self): + result = self.combathandler.get_available_actions(self.combatant) + self.assertTrue(len(result), 7) + + +class EvAdventureTurnbasedCombatActionTest(EvAdventureMixin, BaseEvenniaTest): + """ + Test actions in turn_based combat. + """ + + @patch( + "evennia.contrib.tutorials.evadventure.combat_turnbased" + ".EvAdventureCombatHandler.interval", + new=-1, + ) + @patch( + "evennia.contrib.tutorials.evadventure.combat_turnbased.delay", + new=MagicMock(return_value=None), + ) + def setUp(self): + super().setUp() + self.combatant = self.character + self.combatant2 = create.create_object(EvAdventureCharacter, key="testcharacter2") + self.target = create.create_object(EvAdventureMob, key="testmonster") + self.target.hp = 4 + + # this already starts turn 1 + self.combathandler = combat_turnbased.join_combat(self.combatant, self.target) + + def _run_action(self, action, *args, **kwargs): + self.combathandler.register_action(self.combatant, action.key, *args, **kwargs) + self.combathandler._end_turn() + + def test_do_nothing(self): + self.combathandler.msg = MagicMock() + self._run_action(combat_turnbased.CombatActionDoNothing, None) + self.combathandler.msg.assert_called() + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") - def test_attack(self, mock_randint): - mock_randint.return_value = 8 + def test_attack__miss(self, mock_randint): + mock_randint.return_value = 8 # target has default armor 11, so 8+1 str will miss + self._run_action(combat_turnbased.CombatActionAttack, self.target) + self.assertEqual(self.target.hp, 4) + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_attack__success__still_alive(self, mock_randint): + mock_randint.return_value = 11 # 11 + 1 str will hit beat armor 11 + # make sure target survives + self.target.hp = 20 + self._run_action(combat_turnbased.CombatActionAttack, self.target) + self.assertEqual(self.target.hp, 9) + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_attack__success__kill(self, mock_randint): + mock_randint.return_value = 11 # 11 + 1 str will hit beat armor 11 + self._run_action(combat_turnbased.CombatActionAttack, self.target) + self.assertEqual(self.target.hp, -7) + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_stunt_fail(self, mock_randint): + mock_randint.return_value = 8 # fails 8+1 dex vs DEX 11 defence + self._run_action(combat_turnbased.CombatActionStunt, self.target) + self.assertEqual(self.combathandler.advantage_matrix[self.combatant], {}) + self.assertEqual(self.combathandler.disadvantage_matrix[self.combatant], {}) + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_stunt_advantage__success(self, mock_randint): + mock_randint.return_value = 11 # 11+1 dex vs DEX 11 defence is success + self._run_action(combat_turnbased.CombatActionStunt, self.target) + self.assertEqual( + bool(self.combathandler.advantage_matrix[self.combatant][self.target]), True + ) + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_stunt_disadvantage__success(self, mock_randint): + mock_randint.return_value = 11 # 11+1 dex vs DEX 11 defence is success + action = combat_turnbased.CombatActionStunt + action.give_advantage = False + self._run_action( + action, + self.target, + ) + self.assertEqual( + bool(self.combathandler.disadvantage_matrix[self.target][self.combatant]), True + ) + + def test_use_item(self): + """ + Use up a potion during combat. + + """ + item = create.create_object( + EvAdventureConsumable, key="Healing potion", attributes=[("uses", 2)] + ) + self.assertEqual(item.uses, 2) + self._run_action(combat_turnbased.CombatActionUseItem, item, self.combatant) + self.assertEqual(item.uses, 1) + self._run_action(combat_turnbased.CombatActionUseItem, item, self.combatant) + self.assertEqual(item.pk, None) # deleted, it was used up + + def test_swap_wielded_weapon_or_spell(self): + """ + First draw a weapon (from empty fists), then swap that out to another weapon, then + swap to a spell rune. + + """ + sword = create.create_object(EvAdventureWeapon, key="sword") + zweihander = create.create_object( + EvAdventureWeapon, + key="zweihander", + attributes=(("inventory_use_slot", WieldLocation.TWO_HANDS),), + ) + runestone = create.create_object(EvAdventureRunestone, key="ice rune") + + # check hands are empty + self.assertEqual(self.combatant.weapon.key, "Empty Fists") + self.assertEqual(self.combatant.equipment.slots[WieldLocation.WEAPON_HAND], None) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.TWO_HANDS], None) + + # swap to sword + self._run_action(combat_turnbased.CombatActionSwapWieldedWeaponOrSpell, None, sword) + self.assertEqual(self.combatant.weapon, sword) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.WEAPON_HAND], sword) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.TWO_HANDS], None) + + # swap to zweihander (two-handed sword) + self._run_action(combat_turnbased.CombatActionSwapWieldedWeaponOrSpell, None, zweihander) + self.assertEqual(self.combatant.weapon, zweihander) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.WEAPON_HAND], None) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.TWO_HANDS], zweihander) + + # swap to runestone (also using two hands) + self._run_action(combat_turnbased.CombatActionSwapWieldedWeaponOrSpell, None, runestone) + self.assertEqual(self.combatant.weapon, runestone) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.WEAPON_HAND], None) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.TWO_HANDS], runestone) + + # swap back to normal one-handed sword + self._run_action(combat_turnbased.CombatActionSwapWieldedWeaponOrSpell, None, sword) + self.assertEqual(self.combatant.weapon, sword) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.WEAPON_HAND], sword) + self.assertEqual(self.combatant.equipment.slots[WieldLocation.TWO_HANDS], None) + + def test_flee__success(self): + """ + Test fleeing twice, leading to leaving combat. + + """ + # first flee records the fleeing state + self._run_action(combat_turnbased.CombatActionFlee, None) + self.assertTrue(self.combatant in self.combathandler.fleeing_combatants) + + # second flee should remove combatant + self._run_action(combat_turnbased.CombatActionFlee, None) + self.assertTrue(self.combatant not in self.combathandler.combatants) + + @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") + def test_flee__blocked(self, mock_randint): + """ """ + mock_randint.return_value = 11 # means block will succeed + + self._run_action(combat_turnbased.CombatActionFlee, None) + self.assertTrue(self.combatant in self.combathandler.fleeing_combatants) + + # other combatant blocks in the same turn self.combathandler.register_action( - combat_turnbased.CombatActionAttack.key, self.combatant, self.target + self.combatant, combat_turnbased.CombatActionFlee.key, None + ) + self.combathandler.register_action( + self.target, combat_turnbased.CombatActionBlock.key, self.combatant ) self.combathandler._end_turn() + # the fleeing combatant should remain now + self.assertTrue(self.combatant not in self.combathandler.fleeing_combatants) + self.assertTrue(self.combatant in self.combathandler.combatants) From 41962fae791e6ed5cd7af01243a3b859cad8b6ec Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 17 Jul 2022 19:10:51 +0200 Subject: [PATCH 044/177] Add defeat mode to tutorial combat --- evennia/__init__.py | 125 +++++----- .../tutorials/evadventure/build_techdemo.py | 11 +- .../tutorials/evadventure/characters.py | 58 ++++- .../tutorials/evadventure/combat_turnbased.py | 236 +++++++++++++++--- .../contrib/tutorials/evadventure/enums.py | 4 + evennia/contrib/tutorials/evadventure/npcs.py | 56 ++++- .../contrib/tutorials/evadventure/rooms.py | 31 ++- .../contrib/tutorials/evadventure/rules.py | 4 +- .../evadventure/tests/test_combat.py | 18 +- evennia/typeclasses/tags.py | 7 +- 10 files changed, 419 insertions(+), 131 deletions(-) diff --git a/evennia/__init__.py b/evennia/__init__.py index 1ae50a98ca..4a64d06ba3 100644 --- a/evennia/__init__.py +++ b/evennia/__init__.py @@ -48,6 +48,10 @@ ScriptDB = None ChannelDB = None Msg = None +# Properties +AttributeProperty = None +TagProperty = None + # commands Command = None CmdSet = None @@ -106,7 +110,7 @@ def _create_version(): Helper function for building the version string """ import os - from subprocess import check_output, CalledProcessError, STDOUT + from subprocess import STDOUT, CalledProcessError, check_output version = "Unknown" root = os.path.dirname(os.path.abspath(__file__)) @@ -153,70 +157,63 @@ def _init(): global GLOBAL_SCRIPTS, OPTION_CLASSES global EvMenu, EvTable, EvForm, EvMore, EvEditor global ANSIString + global AttributeProperty, TagProperty # Parent typeclasses - from .accounts.accounts import DefaultAccount - from .accounts.accounts import DefaultGuest - from .objects.objects import DefaultObject - from .objects.objects import DefaultCharacter - from .objects.objects import DefaultRoom - from .objects.objects import DefaultExit - from .comms.comms import DefaultChannel - from .scripts.scripts import DefaultScript - - # Database models - from .objects.models import ObjectDB - from .accounts.models import AccountDB - from .scripts.models import ScriptDB - from .comms.models import ChannelDB - from .comms.models import Msg - - # commands - from .commands.command import Command, InterruptCommand - from .commands.cmdset import CmdSet - - # search functions - from .utils.search import search_object - from .utils.search import search_script - from .utils.search import search_account - from .utils.search import search_message - from .utils.search import search_channel - from .utils.search import search_help - from .utils.search import search_tag - - # create functions - from .utils.create import create_object - from .utils.create import create_script - from .utils.create import create_account - from .utils.create import create_channel - from .utils.create import create_message - from .utils.create import create_help_entry - # utilities from django.conf import settings - from .locks import lockfuncs - from .utils import logger - from .utils import gametime - from .utils import ansi - from .prototypes.spawner import spawn - from . import contrib - from .utils.evmenu import EvMenu - from .utils.evtable import EvTable - from .utils.evmore import EvMore - from .utils.evform import EvForm - from .utils.eveditor import EvEditor - from .utils.ansi import ANSIString - from .server import signals - # handlers - from .scripts.tickerhandler import TICKER_HANDLER - from .scripts.taskhandler import TASK_HANDLER - from .server.sessionhandler import SESSION_HANDLER + from . import contrib + from .accounts.accounts import DefaultAccount, DefaultGuest + from .accounts.models import AccountDB + from .commands.cmdset import CmdSet + from .commands.command import Command, InterruptCommand + from .comms.comms import DefaultChannel + from .comms.models import ChannelDB, Msg + from .locks import lockfuncs + from .objects.models import ObjectDB + from .objects.objects import DefaultCharacter, DefaultExit, DefaultObject, DefaultRoom + from .prototypes.spawner import spawn + from .scripts.models import ScriptDB from .scripts.monitorhandler import MONITOR_HANDLER + from .scripts.scripts import DefaultScript + from .scripts.taskhandler import TASK_HANDLER + from .scripts.tickerhandler import TICKER_HANDLER + from .server import signals + from .server.sessionhandler import SESSION_HANDLER + from .typeclasses.attributes import AttributeProperty + from .typeclasses.tags import TagProperty + from .utils import ansi, gametime, logger + from .utils.ansi import ANSIString # containers - from .utils.containers import GLOBAL_SCRIPTS - from .utils.containers import OPTION_CLASSES + from .utils.containers import GLOBAL_SCRIPTS, OPTION_CLASSES + + # create functions + from .utils.create import ( + create_account, + create_channel, + create_help_entry, + create_message, + create_object, + create_script, + ) + from .utils.eveditor import EvEditor + from .utils.evform import EvForm + from .utils.evmenu import EvMenu + from .utils.evmore import EvMore + from .utils.evtable import EvTable + + # search functions + from .utils.search import ( + search_account, + search_channel, + search_help, + search_message, + search_object, + search_script, + search_tag, + ) # API containers @@ -252,11 +249,11 @@ def _init(): """ - from .help.models import HelpEntry from .accounts.models import AccountDB - from .scripts.models import ScriptDB - from .comms.models import Msg, ChannelDB + from .comms.models import ChannelDB, Msg + from .help.models import HelpEntry from .objects.models import ObjectDB + from .scripts.models import ScriptDB from .server.models import ServerConfig from .typeclasses.attributes import Attribute from .typeclasses.tags import Tag @@ -288,11 +285,11 @@ def _init(): """ - from .commands.default.cmdset_character import CharacterCmdSet from .commands.default.cmdset_account import AccountCmdSet - from .commands.default.cmdset_unloggedin import UnloggedinCmdSet + from .commands.default.cmdset_character import CharacterCmdSet from .commands.default.cmdset_session import SessionCmdSet - from .commands.default.muxcommand import MuxCommand, MuxAccountCommand + from .commands.default.cmdset_unloggedin import UnloggedinCmdSet + from .commands.default.muxcommand import MuxAccountCommand, MuxCommand def __init__(self): "populate the object with commands" @@ -305,12 +302,12 @@ def _init(): self.__dict__.update(dict([(c.__name__, c) for c in cmdlist])) from .commands.default import ( + account, admin, batchprocess, building, comms, general, - account, help, system, unloggedin, diff --git a/evennia/contrib/tutorials/evadventure/build_techdemo.py b/evennia/contrib/tutorials/evadventure/build_techdemo.py index a05085e21f..f819baef8c 100644 --- a/evennia/contrib/tutorials/evadventure/build_techdemo.py +++ b/evennia/contrib/tutorials/evadventure/build_techdemo.py @@ -28,6 +28,7 @@ from evennia.contrib.tutorials.evadventure.objects import ( EvAdventureObject, EvAdventureObjectFiller, EvAdventureRunestone, + EvAdventureWeapon, ) from evennia.contrib.tutorials.evadventure.rooms import EvAdventureRoom @@ -65,10 +66,6 @@ create_object( # with a static enemy combat_room = create_object(EvAdventureRoom, key="Combat Arena", aliases=("evtechdemo#01",)) -combat_room_enemy = create_object( - npcs.EvadventureMob, key="Training Dummy", aliases=("dummy",), location=combat_room -) - # link to/back to hub hub_room = search_object("evtechdemo#00")[0] create_object( @@ -81,3 +78,9 @@ create_object( location=combat_room, destination=hub_room, ) +# create training dummy with a stick +combat_room_enemy = create_object( + npcs.EvAdventureMob, key="Training Dummy", aliases=("dummy",), location=combat_room +) +weapon_stick = create_object(EvAdventureWeapon, key="stick", attributes=(("damage_roll", "1d2"),)) +combat_room_enemy.weapon = weapon_stick diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 623977764b..6c6f11d18d 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -347,6 +347,8 @@ class LivingMixin: """ + is_pc = False + @property def hurt_level(self): """ @@ -406,6 +408,46 @@ class LivingMixin: """ pass + def get_loot(self, looter): + """ + Called when being looted (after defeat). + + Args: + looter (Object): The one doing the looting. + + """ + max_steal = rules.dice.roll("1d10") + owned = self.coin + stolen = max(max_steal, owned) + self.coin -= stolen + looter.coin += stolen + + self.location.msg_contents( + f"$You(looter) loots $You() for {stolen} coins!", + from_obj=self, + mapping={"looter": looter}, + ) + + def pre_loot(self, defeated_enemy): + """ + Called just before looting an enemy. + + Args: + defeated_enemy (Object): The enemy soon to loot. + + """ + pass + + def post_loot(self, defeated_enemy): + """ + Called just after having looted an enemy. + + Args: + defeated_enemy (Object): The enemy just looted. + + """ + pass + class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ @@ -414,6 +456,8 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ + is_pc = True + # these are the ability bonuses. Defense is always 10 higher strength = AttributeProperty(default=1) dexterity = AttributeProperty(default=1) @@ -429,6 +473,7 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): hp_max = AttributeProperty(default=4) level = AttributeProperty(default=1) xp = AttributeProperty(default=0) + coins = AttributeProperty(default=0) # copper coins morale = AttributeProperty(default=9) # only used for NPC/monster morale checks @@ -501,13 +546,11 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ rules.dice.roll_death(self) - if hp <= 0: - # this means we rolled death on the table - self.at_death() - else: - # still alive, but lost in some stats + if self.hp > 0: + # still alive, but lost some stats self.location.msg_contents( - f"|y$You() $conj(stagger) back, weakened but still alive.|n", from_obj=self + f"|y$You() $conj(stagger) back and fall to the ground - alive, but unable to move.|n", + from_obj=self, ) def at_death(self): @@ -516,5 +559,6 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ self.location.msg_contents( - f"|r$You() $conj(collapse) in a heap. No getting back from that.|n", from_obj=self + f"|r$You() $conj(collapse) in a heap.\nDeath embraces you ...|n", + from_obj=self, ) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 1a23d43bc6..8502c88009 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -105,10 +105,12 @@ from datetime import datetime from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from evennia.utils import dbserialize, delay, evmenu, evtable, logger -from evennia.utils.utils import make_iter +from evennia.utils.utils import inherits_from, make_iter from . import rules +from .characters import EvAdventureCharacter from .enums import Ability +from .npcs import EvAdventureNPC COMBAT_HANDLER_KEY = "evadventure_turnbased_combathandler" COMBAT_HANDLER_INTERVAL = 60 @@ -144,7 +146,7 @@ class CombatAction: # the next combat menu node to go to - this ties the combat action into the UI # use None to do nothing (jump directly to registering the action) - next_menu_node = "node_select_target" + next_menu_node = "node_select_action" max_uses = None # None for unlimited # in which order (highest first) to perform the action. If identical, use random order @@ -246,6 +248,7 @@ class CombatActionAttack(CombatAction): desc = "[A]ttack/[C]ast spell at " aliases = ("a", "c", "attack", "cast") help_text = "Make an attack using your currently equipped weapon/spell rune" + next_menu_node = "node_select_enemy_target" priority = 1 @@ -255,7 +258,7 @@ class CombatActionAttack(CombatAction): """ attacker = self.combatant - weapon = self.combatant.equipment.weapon + weapon = self.combatant.weapon # figure out advantage (gained by previous stunts) advantage = bool(self.combathandler.advantage_matrix[attacker].pop(defender, False)) @@ -266,14 +269,14 @@ class CombatActionAttack(CombatAction): attacker, defender, attack_type=weapon.attack_type, - defense_type=attacker.equipment.weapon.defense_type, + defense_type=attacker.weapon.defense_type, advantage=advantage, disadvantage=disadvantage, ) self.msg(f"$You() $conj(attack) $You({defender.key}) with {weapon.key}: {txt}") if is_hit: # enemy hit, calculate damage - weapon_dmg_roll = attacker.equipment.weapon.damage_roll + weapon_dmg_roll = attacker.weapon.damage_roll dmg = rules.dice.roll(weapon_dmg_roll) @@ -299,7 +302,7 @@ class CombatActionAttack(CombatAction): # a miss message = f" $You() $conj(miss) $You({defender.key})." if quality is Ability.CRITICAL_FAILURE: - attacker.equipment.weapon.quality -= 1 + attacker.weapon.quality -= 1 message += ".. it's a |rcritical miss!|n, damaging the weapon." self.msg(message) @@ -325,6 +328,7 @@ class CombatActionStunt(CombatAction): "A stunt does not cause damage but grants/gives advantage/disadvantage to future " "actions. The effect needs to be used up within 5 turns." ) + next_menu_node = "node_select_enemy_target" give_advantage = True # if False, give_disadvantage max_uses = 1 @@ -392,6 +396,7 @@ class CombatActionUseItem(CombatAction): desc = "[U]se item" aliases = ("u", "item", "use item") help_text = "Use an item from your inventory." + next_menu_node = "node_select_friendly_target" def get_help(self, item, *args): return item.get_help(*args) @@ -456,7 +461,7 @@ class CombatActionFlee(CombatAction): aliases = ("d", "disengage", "flee") # this only affects us - next_menu_node = "node_register_action" + next_menu_node = "node_confirm_register_action" help_text = ( "Disengage from combat. Use successfully two times in a row to leave combat at the " @@ -487,6 +492,7 @@ class CombatActionBlock(CombatAction): "Move to block a target from fleeing combat. If you succeed " "in a DEX vs DEX challenge, they don't get away." ) + next_menu_node = "node_select_enemy_target" priority = -1 # must be checked BEFORE the flee action of the target! @@ -532,7 +538,7 @@ class CombatActionDoNothing(CombatAction): help_text = "Hold you position, doing nothing." # affects noone else - next_menu_node = "node_register_action" + next_menu_node = "node_confirm_register_action" post_action_text = "{combatant} does nothing this turn." @@ -587,6 +593,7 @@ class EvAdventureCombatHandler(DefaultScript): disadvantage_matrix = AttributeProperty(defaultdict(dict)) fleeing_combatants = AttributeProperty(list()) + defeated_combatants = AttributeProperty(list()) _warn_time_task = None @@ -621,8 +628,10 @@ class EvAdventureCombatHandler(DefaultScript): combatant, { "node_wait_start": node_wait_start, - "node_select_target": node_select_target, + "node_select_enemy_target": node_select_enemy_target, + "node_select_friendly_target": node_select_friendly_target, "node_select_action": node_select_action, + "node_select_wield_from_inventory": node_select_wield_from_inventory, "node_wait_turn": node_wait_turn, }, startnode="node_wait_turn", @@ -660,18 +669,24 @@ class EvAdventureCombatHandler(DefaultScript): self.msg(f"|y_______________________ start turn {self.turn} ___________________________|n") for combatant in self.combatants: - # cycle combat menu - self._init_menu(combatant) - combatant.ndb._evmenu.goto("node_select_action", "") + if hasattr(combatant, "ai_combat_next_action"): + # NPC needs to get a decision from the AI + next_action_key, args, kwargs = combatant.ai_combat_next_action(self) + self.register_action(combatant, next_action_key, *args, **kwargs) + else: + # cycle combat menu for PC + self._init_menu(combatant) + combatant.ndb._evmenu.goto("node_select_action", "") def _end_turn(self): """ End of turn operations. 1. Do all regular actions - 2. Roll for any death events - 2. Remove combatants that disengaged successfully - 3. Timeout advantages/disadvantages + 2. Check if fleeing combatants got away - remove them from combat + 3. Check if anyone has hp <= - defeated + 4. Check if any one side is alone on the battlefield - they loot the defeated + 5. If combat is still on, update stunt timers """ self.msg( @@ -702,29 +717,66 @@ class EvAdventureCombatHandler(DefaultScript): # handle disengaging combatants - to_remove = [] + to_flee = [] + to_defeat = [] for combatant in self.combatants: # see if fleeing characters managed to do two flee actions in a row. if (combatant in self.fleeing_combatants) and (combatant in already_fleeing): self.fleeing_combatants.remove(combatant) - to_remove.append(combatant) + to_flee.append(combatant) if combatant.hp <= 0: # check characters that are beaten down. - # characters roll on the death table here, npcs usually just die + # characters roll on the death table here; but even if they survive, they + # count as defeated (unconcious) for this combat. combatant.at_defeat() - if combatant.hp <= 0: - # if character still < 0 after at_defeat, it means they are dead. - # force-remove from combat. - to_remove.append(combatant) + to_defeat.append(combatant) - for combatant in to_remove: - # for clarity, we remove here rather than modifying the combatant list - # inside the previous loop - self.msg(f"|y$You() $conj(are) out of combat.|n", combatant=combatant) + for combatant in to_flee: + # combatant leaving combat by fleeing + self.msg(f"|y$You() successfully $conj(flee) from combat.|n", combatant=combatant) self.remove_combatant(combatant) + for combatant in to_defeat: + # combatants leaving combat by being defeated + self.msg("|r$You() $conj(fall) to the ground, defeated.|n", combatant=combatant) + self.combatants.remove(combatant) + self.defeated_combatants.append(combatant) + + # check if only one side remains, divide into allies and enemies based on the first + # combatant,then check if either team is empty. + if not self.combatants: + # everyone's defeated at the same time. This is a tie where everyone loses and + # no looting happens. + self.msg("|yEveryone takes everyone else out. Today, noone wins.|n") + self.stop_combat() + return + else: + combatant = self.combatants[0] + allies = self.get_friendly_targets(combatant) # will always contain at least combatant + enemies = self.get_enemy_targets(combatant) + + if not enemies: + # no enemies left - allies to combatant won! + defeated_enemies = self.get_enemy_targets( + combatant, all_combatants=self.defeated_combatants + ) + + # all surviving allies loot the fallen enemies + for ally in allies: + for enemy in defeated_enemies: + try: + ally.pre_loot(enemy) + enemy.get_loot(ally) + ally.post_loot(enemy) + except Exception: + logger.log_trace() + self.stop_combat() + return + + # if we get here, combat is still on + # refresh stunt timeouts (note - self.stunt_duration is the same for # all stunts; # for more complex use we could store the action and let action have a # 'duration' property to use instead. @@ -753,10 +805,6 @@ class EvAdventureCombatHandler(DefaultScript): self.advantage_matrix = new_advantage_matrix self.disadvantage_matrix = new_disadvantage_matrix - if len(self.combatants) == 1: - # only one combatant left - abort combat - self.stop_combat() - def add_combatant(self, combatant, session=None): """ Add combatant to battle. @@ -775,7 +823,7 @@ class EvAdventureCombatHandler(DefaultScript): """ if combatant not in self.combatants: self.combatants.append(combatant) - combatant.db.turnbased_combathandler = self + combatant.db.combathandler = self # allow custom character actions (not used by default) custom_action_classes = combatant.db.custom_combat_actions or [] @@ -798,7 +846,7 @@ class EvAdventureCombatHandler(DefaultScript): self.combatants.remove(combatant) self.combatant_actions.pop(combatant, None) combatant.ndb._evmenu.close_menu() - del combatant.db.turnbased_combathandler + del combatant.db.combathandler def start_combat(self): """ @@ -821,6 +869,73 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in self.combatants: self.remove_combatant(combatant) + def get_enemy_targets(self, combatant, excluded=None, all_combatants=None): + """ + Get all valid targets the given combatant can target for an attack. This does not apply for + 'friendly' targeting (like wanting to cast a heal on someone). We assume there are two types + of combatants - PCs (player-controlled characters and NPCs (AI-controlled). Here, we assume + npcs can never attack one another (or themselves) + + For PCs to be able to target each other, the `allow_pvp` + Attribute flag must be set on the current `Room`. + + Args: + combatant (Object): The combatant looking for targets. + excluded (list, optional): If given, these are not valid targets - this can be used to + avoid friendly NPCs. + all_combatants (list, optional): If given, use this list to get all combatants, instead + of using `self.combatants`. + + """ + is_pc = not inherits_from(combatant, EvAdventureNPC) + allow_pvp = self.obj.allow_pvp + targets = [] + combatants = all_combatants or self.combatants + + if is_pc: + if allow_pvp: + # PCs may target everyone, including other PCs + targets = combatants + else: + # PCs may only attack NPCs + targets = [target for target in combatants if inherits_from(target, EvAdventureNPC)] + + else: + # NPCs may only attack PCs, not each other + targets = [target for target in combatants if not inherits_from(target, EvAdventureNPC)] + + if excluded: + targets = [target for target in targets if target not in excluded] + + return targets + + def get_friendly_targets(self, combatant, extra=None, all_combatants=None): + """ + Get a list of all 'friendly' or neutral targets a combatant may target, including + themselves. + + Args: + combatant (Object): The combatant looking for targets. + extra (list, optional): If given, these are additional targets that can be + considered target for allied effects (could be used for a friendly NPC). + all_combatants (list, optional): If given, use this list to get all combatants, instead + of using `self.combatants`. + + """ + is_pc = not inherits_from(combatant, EvAdventureNPC) + combatants = all_combatants or self.combatants + if is_pc: + # can target other PCs + targets = [target for target in combatants if not inherits_from(target, EvAdventureNPC)] + else: + # can target other NPCs + targets = [target for target in combatants if inherits_from(target, EvAdventureNPC)] + + if extra: + targets = list(set(target + extra)) + + return targets + def get_combat_summary(self, combatant): """ Get a summary of the current combat state from the perspective of a @@ -973,7 +1088,7 @@ class EvAdventureCombatHandler(DefaultScript): def _register_action(caller, raw_string, **kwargs): """ - Register action with handler. + Actually register action with handler. """ action_key = kwargs.pop("action_key") @@ -987,22 +1102,41 @@ def _register_action(caller, raw_string, **kwargs): return "node_wait_turn" -def node_select_target(caller, raw_string, **kwargs): +def node_confirm_register_action(caller, raw_string, **kwargs): """ - Menu node allowing for selecting a target among all combatants. This combines - with all other actions. + Node where one can confirm registering the action or change one's mind. + + """ + action_key = kwargs["action_key"] + action_target = kwargs.get("action_target", None) or "" + if action_target: + action_target = f", targeting {action_target.key}" + + text = f"You will {action_key}{action_target}. Confirm? [Y]/n" + options = ( + { + "key": "_default", + "goto": (_register_action, kwargs), + }, + {"key": ("Abort/Cancel", "abort", "cancel", "a", "no", "n"), "goto": "node_select_action"}, + ) + + +def _select_target_helper(caller, raw_string, targets, **kwargs): + """ + Helper to select among only friendly or enemy targets (given by the calling node). """ combat = caller.ndb._evmenu.combathandler action_key = kwargs["action_key"] + friendly_target = kwargs.get("target_friendly", False) text = f"Select target for |w{action_key}|n." # make the apply-self option always the first one, give it key 0 kwargs["action_target"] = caller options = [{"key": "0", "desc": "(yourself)", "goto": (_register_action, kwargs)}] # filter out ourselves and then make options for everyone else - combatants = [combatant for combatant in combat.combatants if combatant is not caller] - for inum, combatant in enumerate(combatants): + for inum, combatant in enumerate(targets): kwargs["action_target"] = combatant options.append( {"key": str(inum + 1), "desc": combatant.key, "goto": (_register_action, kwargs)} @@ -1014,6 +1148,25 @@ def node_select_target(caller, raw_string, **kwargs): return text, options +def node_select_enemy_target(caller, raw_string, **kwargs): + """ + Menu node allowing for selecting an enemy target among all combatants. This combines + with all other actions. + + """ + targets = combat.get_enemy_targets(caller) + return _select_target_helper(caller, raw_string, targets, **kwargs) + + +def node_select_friendly_target(caller, raw_string, **kwargs): + """ + Menu node for selecting a friendly target among combatants (including oneself). + + """ + targets = combat.get_friendly_targets(caller) + return _select_target_helper(caller, raw_string, targets, **kwargs) + + def _item_broken(caller, raw_string, **kwargs): caller.msg("|rThis item is broken and unusable!|n") return None # back to previous node @@ -1080,9 +1233,7 @@ def node_select_use_item_from_inventory(caller, raw_string, **kwargs): options.append({"desc": str(obj), "goto": (_register_action, kwargs)}) # add ability to cancel - options.append( - {"key": "_default", "desc": "(No input to Abort and go back)", "goto": "node_select_action"} - ) + options.append({"key": "_default", "goto": "node_select_action"}) return text, options @@ -1236,6 +1387,9 @@ def join_combat(caller, *targets, session=None): if not location: raise CombatFailure("Must have a location to start combat.") + if not getattr(location, "allow_combat", False): + raise CombatFailure("This is not the time and place for picking a fight.") + if not targets: raise CombatFailure("Must have an opponent to start combat.") diff --git a/evennia/contrib/tutorials/evadventure/enums.py b/evennia/contrib/tutorials/evadventure/enums.py index 8cd934fec1..928aec3ed2 100644 --- a/evennia/contrib/tutorials/evadventure/enums.py +++ b/evennia/contrib/tutorials/evadventure/enums.py @@ -47,6 +47,10 @@ class Ability(Enum): CRITICAL_FAILURE = "critical_failure" CRITICAL_SUCCESS = "critical_success" + ALLEGIANCE_HOSTILE = "hostile" + ALLEGIANCE_NEUTRAL = "neutral" + ALLEGIANCE_FRIENDLY = "friendly" + class WieldLocation(Enum): """ diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index 8fd2ad6749..a1b25e0d34 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -2,11 +2,14 @@ EvAdventure NPCs. This includes both friends and enemies, only separated by their AI. """ +from random import choice from evennia import DefaultCharacter from evennia.typeclasses.attributes import AttributeProperty from .characters import LivingMixin +from .enums import Ability +from .objects import WeaponEmptyHand class EvAdventureNPC(LivingMixin, DefaultCharacter): @@ -27,12 +30,25 @@ class EvAdventureNPC(LivingMixin, DefaultCharacter): If wanting monsters or NPCs that can level and work the same as PCs, base them off the EvAdventureCharacter class instead. + The weapon of the npc is stored as an Attribute instead of implementing a full + inventory/equipment system. This means that the normal inventory can be used for + non-combat purposes (or for loot to get when killing an enemy). + """ - hit_dice = AttributeProperty(default=1) - armor = AttributeProperty(default=1) # +10 to get armor defense - morale = AttributeProperty(default=9) - hp = AttributeProperty(default=8) + is_pc = False + + hit_dice = AttributeProperty(default=1, autocreate=False) + armor = AttributeProperty(default=1, autocreate=False) # +10 to get armor defense + morale = AttributeProperty(default=9, autocreate=False) + hp_multiplier = AttributeProperty(default=4, autocreate=False) # 4 default in Knave + hp = AttributeProperty(default=None, autocreate=False) # internal tracking, use .hp property + allegiance = AttributeProperty(default=Ability.ALLEGIANCE_HOSTILE, autocreate=False) + + is_idle = AttributeProperty(default=False, autocreate=False) + + weapon = AttributeProperty(default=WeaponEmptyHand, autocreate=False) # instead of inventory + coins = AttributeProperty(default=1, autocreate=False) # coin loot @property def strength(self): @@ -60,7 +76,7 @@ class EvAdventureNPC(LivingMixin, DefaultCharacter): @property def hp_max(self): - return self.hit_dice * 4 + return self.hit_dice * self.hp_multiplier def at_object_creation(self): """ @@ -98,6 +114,36 @@ class EvAdventureMob(EvAdventureNPC): """ + def ai_combat_next_action(self, combathandler): + """ + Called to get the next action in combat. + + Args: + combathandler (EvAdventureCombatHandler): The currently active combathandler. + + Returns: + tuple: A tuple `(str, tuple, dict)`, being the `action_key`, and the `*args` and + `**kwargs` for that action. The action-key is that of a CombatAction available to the + combatant in the current combat handler. + + """ + from .combat_turnbased import CombatActionAttack, CombatActionDoNothing + + if self.is_idle: + # mob just stands around + return CombatActionDoNothing.key, (), {} + + target = choice(combathandler.get_enemy_targets(self)) + + # simply randomly decide what action to take + action = choice( + ( + CombatActionAttack, + CombatActionDoNothing, + ) + ) + return action.key, (target,), {} + def at_defeat(self): """ Mobs die right away when defeated, no death-table rolls. diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py index eeef8d1893..326010d5fc 100644 --- a/evennia/contrib/tutorials/evadventure/rooms.py +++ b/evennia/contrib/tutorials/evadventure/rooms.py @@ -5,8 +5,35 @@ EvAdventure rooms. """ -from evennia import DefaultRoom +from evennia import AttributeProperty, DefaultRoom class EvAdventureRoom(DefaultRoom): - pass + """ + Simple room supporting some EvAdventure-specifics. + + """ + + allow_combat = False + allow_pvp = False + allow_death = False + + +class EvAdventurePvPRoom(DefaultRoom): + """ + Room where PvP can happen, but noone gets killed. + + """ + + allow_combat = True + allow_pvp = True + + +class EvAdventureDungeonRoom(EvAdventureRoom): + """ + Dangerous dungeon room. + + """ + + allow_combat = True + allow_death = True diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 1ceb216705..2f0c561072 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -327,7 +327,7 @@ class EvAdventureRollEngine: result = self.roll_random_table("1d8", death_table) if result == "dead": - character.handle_death() + character.at_death() else: # survives with degraded abilities (1d4 roll) abi = self.death_map[result] @@ -339,7 +339,7 @@ class EvAdventureRollEngine: if current_abi < -10: # can't lose more - die - character.handle_death() + character.at_death() else: # refresh health, but get permanent ability loss new_hp = max(character.hp_max, self.roll("1d4")) diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index e95c7576dc..427d237a00 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -43,9 +43,14 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): ) def setUp(self): super().setUp() + self.location.allow_combat = True + self.location.allow_death = True self.combatant = self.character self.target = create.create_object( - EvAdventureMob, key="testmonster", location=self.location + EvAdventureMob, + key="testmonster", + location=self.location, + attributes=(("is_idle", True),), ) # this already starts turn 1 @@ -56,10 +61,10 @@ class EvAdventureTurnbasedCombatHandlerTest(EvAdventureMixin, BaseEvenniaTest): self.target.delete() def test_remove_combatant(self): - self.assertTrue(bool(self.combatant.db.turnbased_combathandler)) + self.assertTrue(bool(self.combatant.db.combathandler)) self.combathandler.remove_combatant(self.combatant) self.assertFalse(self.combatant in self.combathandler.combatants) - self.assertFalse(bool(self.combatant.db.turnbased_combathandler)) + self.assertFalse(bool(self.combatant.db.combathandler)) def test_start_turn(self): self.combathandler._start_turn() @@ -150,9 +155,13 @@ class EvAdventureTurnbasedCombatActionTest(EvAdventureMixin, BaseEvenniaTest): ) def setUp(self): super().setUp() + self.location.allow_combat = True + self.location.allow_death = True self.combatant = self.character self.combatant2 = create.create_object(EvAdventureCharacter, key="testcharacter2") - self.target = create.create_object(EvAdventureMob, key="testmonster") + self.target = create.create_object( + EvAdventureMob, key="testmonster", attributes=(("is_idle", True),) + ) self.target.hp = 4 # this already starts turn 1 @@ -186,6 +195,7 @@ class EvAdventureTurnbasedCombatActionTest(EvAdventureMixin, BaseEvenniaTest): mock_randint.return_value = 11 # 11 + 1 str will hit beat armor 11 self._run_action(combat_turnbased.CombatActionAttack, self.target) self.assertEqual(self.target.hp, -7) + self.assertTrue(self.target not in self.combathandler.combatants) @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") def test_stunt_fail(self, mock_randint): diff --git a/evennia/typeclasses/tags.py b/evennia/typeclasses/tags.py index 2803c8de26..2a0b24d786 100644 --- a/evennia/typeclasses/tags.py +++ b/evennia/typeclasses/tags.py @@ -13,9 +13,8 @@ from collections import defaultdict from django.conf import settings from django.db import models -from evennia.utils.utils import to_str, make_iter from evennia.locks.lockfuncs import perm as perm_lockfunc - +from evennia.utils.utils import make_iter, to_str _TYPECLASS_AGGRESSIVE_CACHE = settings.TYPECLASS_AGGRESSIVE_CACHE @@ -105,6 +104,10 @@ class TagProperty: with an existing method/property on the class. If it does, you must use tags.add() instead. + Note that while you _can_ check e.g. `obj.tagname,this will give an AttributeError + if the Tag is not set. Most often you want to use `obj.tags.get("tagname")` to check + if a tag is set on an object. + Example: :: From 604769f762d2131173860dac7a5fa9c004d82dba Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 18 Jul 2022 00:54:09 +0200 Subject: [PATCH 045/177] More linting fixes --- .../tutorials/evadventure/characters.py | 20 +- .../tutorials/evadventure/combat_turnbased.py | 26 ++- .../contrib/tutorials/evadventure/quests.py | 174 +++++++++++++++--- .../contrib/tutorials/evadventure/rooms.py | 2 +- .../contrib/tutorials/evadventure/rules.py | 18 +- 5 files changed, 183 insertions(+), 57 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 6c6f11d18d..c527146de8 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -3,13 +3,13 @@ Base Character and NPCs. """ -from evennia.objects.objects import DefaultCharacter, DefaultObject +from evennia.objects.objects import DefaultCharacter from evennia.typeclasses.attributes import AttributeProperty -from evennia.utils.utils import int2str, lazy_property +from evennia.utils.utils import lazy_property from . import rules from .enums import Ability, WieldLocation -from .objects import EvAdventureObject, WeaponEmptyHand +from .objects import WeaponEmptyHand class EquipmentError(TypeError): @@ -163,7 +163,6 @@ class EquipmentHandler: """ slots = self.slots - one_hand = None weapon_str = "You are fighting with your bare fists" shield_str = " and have no shield." armor_str = "You wear no armor" @@ -172,7 +171,7 @@ class EquipmentHandler: two_hands = slots[WieldLocation.TWO_HANDS] if two_hands: weapon_str = f"You wield {two_hands} with both hands" - shield_str = f" (you can't hold a shield at the same time)." + shield_str = " (you can't hold a shield at the same time)." else: one_hands = slots[WieldLocation.WEAPON_HAND] if one_hands: @@ -306,7 +305,7 @@ class EquipmentHandler: """ return [ obj - for obj in slots[WieldLocation.BACKPACK] + for obj in self.slots[WieldLocation.BACKPACK] if obj.inventory_use_slot in (WieldLocation.WEAPON_HAND, WieldLocation.TWO_HANDS, WieldLocation.SHIELD_HAND) ] @@ -324,7 +323,7 @@ class EquipmentHandler: """ return [ obj - for obj in slots[WieldLocation.BACKPACK] + for obj in self.slots[WieldLocation.BACKPACK] if obj.inventory_use_slot in (WieldLocation.BODY, WieldLocation.HEAD) ] @@ -338,7 +337,7 @@ class EquipmentHandler: """ character = self.obj - return [obj for obj in slots[WieldLocation.BACKPACK] if obj.at_pre_use(character)] + return [obj for obj in self.slots[WieldLocation.BACKPACK] if obj.at_pre_use(character)] class LivingMixin: @@ -549,7 +548,8 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): if self.hp > 0: # still alive, but lost some stats self.location.msg_contents( - f"|y$You() $conj(stagger) back and fall to the ground - alive, but unable to move.|n", + "|y$You() $conj(stagger) back and fall to the ground - alive, " + "but unable to move.|n", from_obj=self, ) @@ -559,6 +559,6 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ self.location.msg_contents( - f"|r$You() $conj(collapse) in a heap.\nDeath embraces you ...|n", + "|r$You() $conj(collapse) in a heap.\nDeath embraces you ...|n", from_obj=self, ) diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 8502c88009..e4694d05a1 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -100,15 +100,13 @@ Choose who to block: """ from collections import defaultdict -from datetime import datetime from evennia.scripts.scripts import DefaultScript from evennia.typeclasses.attributes import AttributeProperty from evennia.utils import dbserialize, delay, evmenu, evtable, logger -from evennia.utils.utils import inherits_from, make_iter +from evennia.utils.utils import inherits_from from . import rules -from .characters import EvAdventureCharacter from .enums import Ability from .npcs import EvAdventureNPC @@ -135,7 +133,8 @@ class CombatAction: Note: We want to store initialized version of this objects in the CombatHandler (in order to track usages, time limits etc), so we need to make sure we can serialize it into an Attribute. See - `Attribute` documentation for more about `__serialize_dbobjs__` and `__deserialize_dbobjs__`. + `Attribute` documentation for more about `__serialize_dbobjs__` and + `__deserialize_dbobjs__`. """ @@ -366,8 +365,8 @@ class CombatActionStunt(CombatAction): else: self.combathandler.gain_disadvantage(defender, attacker) self.msg( - f"%You(defender.key) $conj(suffer) disadvantage against $You(). " - f"Lasts next attack, or until 3 turns passed." + f"$You({defender.key}) $conj(suffer) disadvantage against $You(). " + "Lasts next attack, or until 3 turns passed." ) # only spend a use after being successful @@ -735,7 +734,7 @@ class EvAdventureCombatHandler(DefaultScript): for combatant in to_flee: # combatant leaving combat by fleeing - self.msg(f"|y$You() successfully $conj(flee) from combat.|n", combatant=combatant) + self.msg("|y$You() successfully $conj(flee) from combat.|n", combatant=combatant) self.remove_combatant(combatant) for combatant in to_defeat: @@ -932,7 +931,7 @@ class EvAdventureCombatHandler(DefaultScript): targets = [target for target in combatants if inherits_from(target, EvAdventureNPC)] if extra: - targets = list(set(target + extra)) + targets = list(set(targets + extra)) return targets @@ -1120,6 +1119,7 @@ def node_confirm_register_action(caller, raw_string, **kwargs): }, {"key": ("Abort/Cancel", "abort", "cancel", "a", "no", "n"), "goto": "node_select_action"}, ) + return text, options def _select_target_helper(caller, raw_string, targets, **kwargs): @@ -1127,9 +1127,7 @@ def _select_target_helper(caller, raw_string, targets, **kwargs): Helper to select among only friendly or enemy targets (given by the calling node). """ - combat = caller.ndb._evmenu.combathandler action_key = kwargs["action_key"] - friendly_target = kwargs.get("target_friendly", False) text = f"Select target for |w{action_key}|n." # make the apply-self option always the first one, give it key 0 @@ -1154,6 +1152,7 @@ def node_select_enemy_target(caller, raw_string, **kwargs): with all other actions. """ + combat = caller.ndb._evmenu.combathandler targets = combat.get_enemy_targets(caller) return _select_target_helper(caller, raw_string, targets, **kwargs) @@ -1163,6 +1162,7 @@ def node_select_friendly_target(caller, raw_string, **kwargs): Menu node for selecting a friendly target among combatants (including oneself). """ + combat = caller.ndb._evmenu.combathandler targets = combat.get_friendly_targets(caller) return _select_target_helper(caller, raw_string, targets, **kwargs) @@ -1177,7 +1177,6 @@ def node_select_wield_from_inventory(caller, raw_string, **kwargs): Menu node allowing for wielding item(s) from inventory. """ - combat = caller.ndb._evmenu.combathandler loadout = caller.equipment.display_loadout() text = ( f"{loadout}\nSelect weapon, spell or shield to draw. It will swap out " @@ -1191,7 +1190,7 @@ def node_select_wield_from_inventory(caller, raw_string, **kwargs): # object is broken options.append( { - "desc": f"|Rstr(obj)|n", + "desc": "|Rstr(obj)|n", "goto": _item_broken, } ) @@ -1213,7 +1212,6 @@ def node_select_use_item_from_inventory(caller, raw_string, **kwargs): Menu item allowing for using usable items (like potions) from inventory. """ - combat = caller.ndb._evmenu.combathandler text = "Select an item to use." # get a list of all suitable weapons/spells/shields @@ -1223,7 +1221,7 @@ def node_select_use_item_from_inventory(caller, raw_string, **kwargs): # object is broken options.append( { - "desc": f"|Rstr(obj)|n", + "desc": "|Rstr(obj)|n", "goto": _item_broken, } ) diff --git a/evennia/contrib/tutorials/evadventure/quests.py b/evennia/contrib/tutorials/evadventure/quests.py index 54fcb52423..ec95e8cc4e 100644 --- a/evennia/contrib/tutorials/evadventure/quests.py +++ b/evennia/contrib/tutorials/evadventure/quests.py @@ -27,26 +27,99 @@ class EvAdventureQuest: The last step is always the end of the quest. It is possible to abort the quest before it ends - it then pauses after the last completed step. - each step is represented by two methods on this object: - check_ and complete_ + Each step is represented by three methods on this object: + `check_` and `complete_`. `help_` is used to get + a guide/reminder on what you are supposed to do. """ # name + category must be globally unique. They are # queried as name:category or just name, if category is empty. - name = "" - category = "" - # example: steps = ["start", "step1", "step2", "end"] - steps = [] + key = "basequest" + desc = "This is the base quest. It will just step through its steps immediately." + start_step = "start" - def __init__(self): - step = 0 + # help entries for quests + help_start = "You need to start first" + help_end = "You need to end the quest" - def check(): - pass + def __init__(self, questhandler, start_step="start"): + if " " in self.key: + raise TypeError("The Quest name must not have spaces in it.") - def progress(self, quester, *args, **kwargs): - """ """ + self.questhandler = questhandler + self.current_step = start_step + + @property + def quester(self): + return self.questhandler.obj + + def end_quest(self): + """ + Call this to end the quest. + + """ + self.current_step + + def progress(self): + """ + This is called whenever the environment expects a quest may be complete. + This will determine which quest-step we are on, run check_, and if it + succeeds, continue with complete_ + + """ + if getattr(self, f"check_{self.current_step}")(): + getattr(self, f"complete_{self.current_step}")() + + def help(self): + """ + This is used to get help (or a reminder) of what needs to be done to complete the current + quest-step. + + Returns: + str: The help text for the current step. + + """ + help_resource = ( + getattr(self, f"help_{self.current_step}", None) + or "You need to {self.current_step} ..." + ) + if callable(help_resource): + # the help_ can be a method to call + return help_resource() + else: + # normally it's just a string + return str(help_resource) + + # step methods + + def check_start(self): + """ + Check if the starting conditions are met. + + Returns: + bool: If this step is complete or not. If complete, the `complete_start` + method will fire. + + """ + return True + + def complete_start(self): + """ + Completed start. This should change `.current_step` to the next step to complete + and call `self.progress()` just in case the next step is already completed too. + + """ + self.quester.msg("Completed the first step of the quest.") + self.current_step = "end" + self.progress() + + def check_end(self): + return True + + def complete_end(self): + self.quester.msg("Quest complete!") + self.end_quest() class EvAdventureQuestHandler: @@ -63,46 +136,54 @@ class EvAdventureQuestHandler: """ - quest_storage_attribute = "_quests" + quest_storage_attribute_key = "_quests" quest_storage_attribute_category = "evadventure" def __init__(self, obj): self.obj = obj - self.storage = obj.attributes.get( - self.quest_storage_attribute, category=self.quest_storage_attribute_category, default={} + self._load() + + def _load(self): + self.storage = self.obj.attributes.get( + self.quest_storage_attribute_key, + category=self.quest_storage_attribute_category, + default={}, ) - def quest_storage_key(self, name, category): - return f"{name}:{category}" + def _save(self): + self.obj.attributes.add( + self.quest_storage_attribute_key, + self.storage, + category=self.quest_storage_attribute_category, + ) - def has(self, quest_name, quest_category=""): + def has(self, quest_key): """ Check if a given quest is registered with the Character. Args: - quest_name (str): The name of the quest to check for. + quest_key (str): The name of the quest to check for. quest_category (str, optional): Quest category, if any. Returns: bool: If the character is following this quest or not. """ - return bool(self.get(quest_name, quest_category)) + return bool(self.storage.get(quest_key)) - def get(self, quest_name, quest_category=""): + def get(self, quest_key): """ Get the quest stored on character, if any. Args: - quest_name (str): The name of the quest to check for. - quest_category (str, optional): Quest category, if any. + quest_key (str): The name of the quest to check for. Returns: EvAdventureQuest or None: The quest stored, or None if Character is not on this quest. """ - return self.storage.get(self.quest_key(quest_storage_name, quest_category)) + return self.storage.get(quest_key) def add(self, quest, autostart=True): """ @@ -114,3 +195,48 @@ class EvAdventureQuestHandler: start immediately. """ + self.storage[quest.key] = quest + self._save() + + def remove(self, quest_key): + """ + Remove a quest. + + Args: + quest_key (str): The quest to remove. + + """ + self.storage.pop(quest_key, None) + self._save() + + def help(self, quest_key=None): + """ + Get help text for a quest or for all quests. The help text is + a combination of the description of the quest and the help-text + of the current step. + + """ + help_text = [] + if quest_key in self.storage: + quests = [self.storage[quest_key]] + + for quest in quests: + help_text.append(f"|c{quest.key}|n\n {quest.desc}\n\n - {quest.help}") + return "---".join(help_text) + + def progress(self, quest_key=None): + """ + Check progress of a given quest or all quests. + + Args: + quest_key (str, optional): If given, check the progress of this quest (if we have it), + otherwise check progress on all quests. + + """ + if quest_key in self.storage: + quests = [self.storage[quest_key]] + else: + quests = self.storage.values() + + for quest in quests: + quest.progress() diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py index 326010d5fc..241b063633 100644 --- a/evennia/contrib/tutorials/evadventure/rooms.py +++ b/evennia/contrib/tutorials/evadventure/rooms.py @@ -5,7 +5,7 @@ EvAdventure rooms. """ -from evennia import AttributeProperty, DefaultRoom +from evennia import DefaultRoom class EvAdventureRoom(DefaultRoom): diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 2f0c561072..f37459cfdd 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -164,7 +164,7 @@ class EvAdventureRollEngine: modtxt = f" + {modifier}" if modifier > 0 else f" - {abs(modifier)}" qualtxt = f" ({quality.value}!)" if quality else "" - txt = f"{dice_roll} + {bonus_type.value}{bontxt}{modtxt} -> |w{result}{qualtxt}|n" + txt = f"{rolltxt}={dice_roll} + {bonus_type.value}{bontxt}{modtxt} -> |w{result}{qualtxt}|n" return (dice_roll + bonus + modifier) > target, quality, txt @@ -563,7 +563,7 @@ class EvAdventureImprovement: """ character.xp += xp - next_level_xp = character.level * xp_per_level + next_level_xp = character.level * EvAdventureImprovement.xp_per_level return character.xp >= next_level_xp @staticmethod @@ -583,18 +583,20 @@ class EvAdventureImprovement: roll_engine = EvAdventureRollEngine() character.level += 1 - for ability in set(abilities[:amount_of_abilities_to_upgrades]): + for ability in set(abilities[: EvAdventureImprovement.amount_of_abilities_to_upgrades]): # limit to max amount allowed, each one unique try: # set at most to the max bonus current_bonus = getattr(character, ability) - setattr(character, ability, min(max_ability_bonus, current_bonus + 1)) + setattr( + character, + ability, + min(EvAdventureImprovement.max_ability_bonus, current_bonus + 1), + ) except AttributeError: pass - character.hp_max = max( - character.max_hp + 1, EvAdventureRollEngine.roll(f"{character.level}d8") - ) + character.hp_max = max(character.max_hp + 1, roll_engine.roll(f"{character.level}d8")) # character sheet visualization @@ -646,7 +648,7 @@ class EvAdventureCharacterSheet: equipment_table = EvTable( table=[equipment[i : i + 10] for i in range(0, len(equipment), 10)] ) - form = EvForm({"FORMCHAR": "x", "TABLECHAR": "c", "SHEET": sheet}) + form = EvForm({"FORMCHAR": "x", "TABLECHAR": "c", "SHEET": EvAdventureCharacterSheet.sheet}) form.map( cells={ 1: character.key, From 73d8f24b7cc1ddc1723fd2d9eb76c06e7721eccd Mon Sep 17 00:00:00 2001 From: Griatch Date: Mon, 18 Jul 2022 16:58:45 +0200 Subject: [PATCH 046/177] Debugging of tutorial --- .../tutorials/evadventure/build_techdemo.py | 4 +- .../tutorials/evadventure/characters.py | 390 +++--------------- .../tutorials/evadventure/combat_turnbased.py | 32 +- evennia/contrib/tutorials/evadventure/npcs.py | 58 ++- .../contrib/tutorials/evadventure/quests.py | 23 +- .../contrib/tutorials/evadventure/rules.py | 6 +- .../evadventure/tests/test_combat.py | 5 +- evennia/utils/utils.py | 62 +-- 8 files changed, 189 insertions(+), 391 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/build_techdemo.py b/evennia/contrib/tutorials/evadventure/build_techdemo.py index f819baef8c..e6a763e9bf 100644 --- a/evennia/contrib/tutorials/evadventure/build_techdemo.py +++ b/evennia/contrib/tutorials/evadventure/build_techdemo.py @@ -30,7 +30,7 @@ from evennia.contrib.tutorials.evadventure.objects import ( EvAdventureRunestone, EvAdventureWeapon, ) -from evennia.contrib.tutorials.evadventure.rooms import EvAdventureRoom +from evennia.contrib.tutorials.evadventure.rooms import EvAdventurePvPRoom, EvAdventureRoom # CODE @@ -65,7 +65,7 @@ create_object( # A combat room evtechdemo#01 # with a static enemy -combat_room = create_object(EvAdventureRoom, key="Combat Arena", aliases=("evtechdemo#01",)) +combat_room = create_object(EvAdventurePvPRoom, key="Combat Arena", aliases=("evtechdemo#01",)) # link to/back to hub hub_room = search_object("evtechdemo#00")[0] create_object( diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index c527146de8..a63b02cf9e 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -1,5 +1,5 @@ """ -Base Character and NPCs. +Character class. """ @@ -8,336 +8,8 @@ from evennia.typeclasses.attributes import AttributeProperty from evennia.utils.utils import lazy_property from . import rules -from .enums import Ability, WieldLocation -from .objects import WeaponEmptyHand - - -class EquipmentError(TypeError): - pass - - -class EquipmentHandler: - """ - _Knave_ puts a lot of emphasis on the inventory. You have CON_DEFENSE inventory - slots. Some things, like torches can fit multiple in one slot, other (like - big weapons and armor) use more than one slot. The items carried and wielded has a big impact - on character customization - even magic requires carrying a runestone per spell. - - The inventory also doubles as a measure of negative effects. Getting soaked in mud - or slime could gunk up some of your inventory slots and make the items there unusuable - until you clean them. - - """ - - save_attribute = "inventory_slots" - - def __init__(self, obj): - self.obj = obj - self._load() - - def _load(self): - """ - Load or create a new slot storage. - - """ - self.slots = self.obj.attributes.get( - self.save_attribute, - category="inventory", - default={ - WieldLocation.WEAPON_HAND: None, - WieldLocation.SHIELD_HAND: None, - WieldLocation.TWO_HANDS: None, - WieldLocation.BODY: None, - WieldLocation.HEAD: None, - WieldLocation.BACKPACK: [], - }, - ) - - def _count_slots(self): - """ - Count slot usage. This is fetched from the .size Attribute of the - object. The size can also be partial slots. - - """ - slots = self.slots - wield_usage = sum( - getattr(slotobj, "size", 0) or 0 - for slot, slotobj in slots.items() - if slot is not WieldLocation.BACKPACK - ) - backpack_usage = sum( - getattr(slotobj, "size", 0) or 0 for slotobj in slots[WieldLocation.BACKPACK] - ) - return wield_usage + backpack_usage - - def _save(self): - """ - Save slot to storage. - - """ - self.obj.attributes.add(self.save_attribute, self.slots, category="inventory") - - @property - def max_slots(self): - """ - The max amount of equipment slots ('carrying capacity') is based on - the constitution defense. - - """ - return getattr(self.obj, Ability.CON.value, 1) + 10 - - def validate_slot_usage(self, obj): - """ - Check if obj can fit in equipment, based on its size. - - Args: - obj (EvAdventureObject): The object to add. - - Raise: - EquipmentError: If there's not enough room. - - """ - size = getattr(obj, "size", 0) - max_slots = self.max_slots - current_slot_usage = self._count_slots() - if current_slot_usage + size > max_slots: - slots_left = max_slots - current_slot_usage - raise EquipmentError( - f"Equipment full ($int2str({slots_left}) slots " - f"remaining, {obj.key} needs $int2str({size}) " - f"$pluralize(slot, {size}))." - ) - return True - - @property - def armor(self): - """ - Armor provided by actually worn equipment/shield. For body armor - this is a base value, like 12, for shield/helmet, it's a bonus, like +1. - We treat values and bonuses equal and just add them up. This value - can thus be 0, the 'unarmored' default should be handled by the calling - method. - - Returns: - int: Armor from equipment. Note that this is the +bonus of Armor, not the - 'defense' (to get that one adds 10). - - """ - slots = self.slots - return sum( - ( - # armor is listed using its defense, so we remove 10 from it - # (11 is base no-armor value in Knave) - getattr(slots[WieldLocation.BODY], "armor", 11) - 10, - # shields and helmets are listed by their bonus to armor - getattr(slots[WieldLocation.SHIELD_HAND], "armor", 0), - getattr(slots[WieldLocation.HEAD], "armor", 0), - ) - ) - - @property - def weapon(self): - """ - Conveniently get the currently active weapon or rune stone. - - Returns: - obj or None: The weapon. None if unarmored. - - """ - # first checks two-handed wield, then one-handed; the two - # should never appear simultaneously anyhow (checked in `use` method). - slots = self.slots - weapon = slots[WieldLocation.TWO_HANDS] - if not weapon: - weapon = slots[WieldLocation.WEAPON_HAND] - if not weapon: - weapon = WeaponEmptyHand() - return weapon - - def display_loadout(self): - """ - Get a visual representation of your current loadout. - - Returns: - str: The current loadout. - - """ - slots = self.slots - weapon_str = "You are fighting with your bare fists" - shield_str = " and have no shield." - armor_str = "You wear no armor" - helmet_str = " and no helmet." - - two_hands = slots[WieldLocation.TWO_HANDS] - if two_hands: - weapon_str = f"You wield {two_hands} with both hands" - shield_str = " (you can't hold a shield at the same time)." - else: - one_hands = slots[WieldLocation.WEAPON_HAND] - if one_hands: - weapon_str = f"You are wielding {one_hands} in one hand." - shield = slots[WieldLocation.SHIELD_HAND] - if shield: - shield_str = f"You have {shield} in your off hand." - - armor = slots[WieldLocation.BODY] - if armor: - armor_str = f"You are wearing {armor}" - - helmet = slots[WieldLocation.BODY] - if helmet: - helmet_str = f" and {helmet} on your head." - - return f"{weapon_str}{shield_str}\n{armor_str}{helmet_str}" - - def use(self, obj): - """ - Make use of item - this makes use of the object's wield slot to decide where - it goes. If it doesn't have any, it goes into backpack. - - Args: - obj (EvAdventureObject): Thing to use. - - Raises: - EquipmentError: If there's no room in inventory. It will contains the details - of the error, suitable to echo to user. - - Notes: - If using an item already in the backpack, it should first be `removed` from the - backpack, before applying here - otherwise, it will be added a second time! - - this will cleanly move any 'colliding' items to the backpack to - make the use possible (such as moving sword + shield to backpack when wielding - a two-handed weapon). If wanting to warn the user about this, it needs to happen - before this call. - - """ - # first check if we have room for this - self.validate_slot_usage(obj) - - slots = self.slots - use_slot = getattr(obj, "inventory_use_slot", WieldLocation.BACKPACK) - - if use_slot is WieldLocation.TWO_HANDS: - # two-handed weapons can't co-exist with weapon/shield-hand used items - slots[WieldLocation.WEAPON_HAND] = slots[WieldLocation.SHIELD_HAND] = None - slots[use_slot] = obj - elif use_slot in (WieldLocation.WEAPON_HAND, WieldLocation.SHIELD_HAND): - # can't keep a two-handed weapon if adding a one-handede weapon or shield - slots[WieldLocation.TWO_HANDS] = None - slots[use_slot] = obj - elif use_slot is WieldLocation.BACKPACK: - # backpack has multiple slots. - slots[use_slot].append(obj) - else: - # for others (body, head), just replace whatever's there - slots[use_slot] = obj - - # store new state - self._save() - - def add(self, obj): - """ - Put something in the backpack specifically (even if it could be wield/worn). - - """ - # check if we have room - self.validate_slot_usage(obj) - self.slots[WieldLocation.BACKPACK].append(obj) - self._save() - - def can_remove(self, leaving_object): - """ - Called to check if the object can be removed. - - """ - return True # TODO - some things may not be so easy, like mud - - def remove(self, obj_or_slot): - """ - Remove specific object or objects from a slot. - - Args: - obj_or_slot (EvAdventureObject or WieldLocation): The specific object or - location to empty. If this is WieldLocation.BACKPACK, all items - in the backpack will be emptied and returned! - Returns: - list: A list of 0, 1 or more objects emptied from the inventory. - - """ - slots = self.slots - ret = [] - if isinstance(obj_or_slot, WieldLocation): - if obj_or_slot is WieldLocation.BACKPACK: - # empty entire backpack - ret.extend(slots[obj_or_slot]) - slots[obj_or_slot] = [] - else: - ret.append(slots[obj_or_slot]) - slots[obj_or_slot] = None - elif obj_or_slot in self.slots.values(): - # obj in use/wear slot - for slot, objslot in slots.items(): - if objslot is obj_or_slot: - slots[slot] = None - ret.append(objslot) - elif obj_or_slot in slots[WieldLocation.BACKPACK]: - # obj in backpack slot - try: - slots[WieldLocation.BACKPACK].remove(obj_or_slot) - ret.append(obj_or_slot) - except ValueError: - pass - if ret: - self._save() - return ret - - def get_wieldable_objects_from_backpack(self): - """ - Get all wieldable weapons (or spell runes) from backpack. This is useful in order to - have a list to select from when swapping your wielded loadout. - - Returns: - list: A list of objects with a suitable `inventory_use_slot`. We don't check - quality, so this may include broken items (we may want to visually show them - in the list after all). - - """ - return [ - obj - for obj in self.slots[WieldLocation.BACKPACK] - if obj.inventory_use_slot - in (WieldLocation.WEAPON_HAND, WieldLocation.TWO_HANDS, WieldLocation.SHIELD_HAND) - ] - - def get_wearable_objects_from_backpack(self): - """ - Get all wearable items (armor or helmets) from backpack. This is useful in order to - have a list to select from when swapping your worn loadout. - - Returns: - list: A list of objects with a suitable `inventory_use_slot`. We don't check - quality, so this may include broken items (we may want to visually show them - in the list after all). - - """ - return [ - obj - for obj in self.slots[WieldLocation.BACKPACK] - if obj.inventory_use_slot in (WieldLocation.BODY, WieldLocation.HEAD) - ] - - def get_usable_objects_from_backpack(self): - """ - Get all 'usable' items (like potions) from backpack. This is useful for getting a - list to select from. - - Returns: - list: A list of objects that are usable. - - """ - character = self.obj - return [obj for obj in self.slots[WieldLocation.BACKPACK] if obj.at_pre_use(character)] +from .equipment import EquipmentHandler +from .quests import EvAdventureQuestHandler class LivingMixin: @@ -407,6 +79,16 @@ class LivingMixin: """ pass + def at_loot(self, looted): + """ + Called when looting another entity. + + Args: + looted: The thing to loot. + + """ + looted.get_loot() + def get_loot(self, looter): """ Called when being looted (after defeat). @@ -418,8 +100,8 @@ class LivingMixin: max_steal = rules.dice.roll("1d10") owned = self.coin stolen = max(max_steal, owned) - self.coin -= stolen - looter.coin += stolen + self.coins -= stolen + looter.coins += stolen self.location.msg_contents( f"$You(looter) loots $You() for {stolen} coins!", @@ -434,6 +116,9 @@ class LivingMixin: Args: defeated_enemy (Object): The enemy soon to loot. + Returns: + bool: If False, no looting is allowed. + """ pass @@ -481,6 +166,11 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """Allows to access equipment like char.equipment.worn""" return EquipmentHandler(self) + @lazy_property + def quests(self): + """Access and track quests""" + return EvAdventureQuestHandler(self) + @property def weapon(self): return self.equipment.weapon @@ -544,14 +234,18 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): the death table. """ - rules.dice.roll_death(self) - if self.hp > 0: - # still alive, but lost some stats - self.location.msg_contents( - "|y$You() $conj(stagger) back and fall to the ground - alive, " - "but unable to move.|n", - from_obj=self, - ) + if self.location.allow_death: + rules.dice.roll_death(self) + if self.hp > 0: + # still alive, but lost some stats + self.location.msg_contents( + "|y$You() $conj(stagger) back and fall to the ground - alive, " + "but unable to move.|n", + from_obj=self, + ) + else: + self.location.msg_contents("|y$You() $conj(yield), beaten and out of the fight.|n") + self.hp = self.hp_max def at_death(self): """ @@ -562,3 +256,17 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): "|r$You() $conj(collapse) in a heap.\nDeath embraces you ...|n", from_obj=self, ) + + def at_pre_loot(self): + """ + Called before allowing to loot. Return False to block enemy looting. + """ + # don't allow looting in pvp + return not self.location.allow_pvp + + def get_loot(self, looter): + """ + Called when being looted. + + """ + pass diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index e4694d05a1..7788a5ee8d 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -111,7 +111,7 @@ from .enums import Ability from .npcs import EvAdventureNPC COMBAT_HANDLER_KEY = "evadventure_turnbased_combathandler" -COMBAT_HANDLER_INTERVAL = 60 +COMBAT_HANDLER_INTERVAL = 30 class CombatFailure(RuntimeError): @@ -156,7 +156,7 @@ class CombatAction: self.combatant = combatant self.uses = 0 - def msg(self, message, broadcast=False): + def msg(self, message, broadcast=True): """ Convenience route to the combathandler msg-sender mechanism. @@ -520,9 +520,9 @@ class CombatActionBlock(CombatAction): if is_success: # managed to stop the target from fleeing/disengaging self.combathandler.unflee(fleeing_target) - self.msg("$You() blocks the retreat of $You({fleeing_target.key})") + self.msg(f"$You() $conj(block) the retreat of $You({fleeing_target.key})") else: - self.msg("$You({fleeing_target.key}) dodges away from you $You()!") + self.msg(f"$You({fleeing_target.key}) dodges away from you $You()!") class CombatActionDoNothing(CombatAction): @@ -660,7 +660,7 @@ class EvAdventureCombatHandler(DefaultScript): # start a timer to echo a warning to everyone 15 seconds before end of round if self.interval >= 0: # set -1 for unit tests - warning_time = 15 + warning_time = 10 self._warn_time_task = delay( self.interval - warning_time, self._warn_time, warning_time ) @@ -766,9 +766,9 @@ class EvAdventureCombatHandler(DefaultScript): for ally in allies: for enemy in defeated_enemies: try: - ally.pre_loot(enemy) - enemy.get_loot(ally) - ally.post_loot(enemy) + if ally.pre_loot(enemy): + enemy.get_loot(ally) + ally.post_loot(enemy) except Exception: logger.log_trace() self.stop_combat() @@ -844,7 +844,8 @@ class EvAdventureCombatHandler(DefaultScript): if combatant in self.combatants: self.combatants.remove(combatant) self.combatant_actions.pop(combatant, None) - combatant.ndb._evmenu.close_menu() + if combatant.ndb._evmenu: + combatant.ndb._evmenu.close_menu() del combatant.db.combathandler def start_combat(self): @@ -867,6 +868,7 @@ class EvAdventureCombatHandler(DefaultScript): """ for combatant in self.combatants: self.remove_combatant(combatant) + self.delete() def get_enemy_targets(self, combatant, excluded=None, all_combatants=None): """ @@ -1131,8 +1133,10 @@ def _select_target_helper(caller, raw_string, targets, **kwargs): text = f"Select target for |w{action_key}|n." # make the apply-self option always the first one, give it key 0 - kwargs["action_target"] = caller - options = [{"key": "0", "desc": "(yourself)", "goto": (_register_action, kwargs)}] + if caller in targets: + targets.remove(caller) + kwargs["action_target"] = caller + options = [{"key": "0", "desc": "(yourself)", "goto": (_register_action, kwargs)}] # filter out ourselves and then make options for everyone else for inum, combatant in enumerate(targets): kwargs["action_target"] = combatant @@ -1385,6 +1389,9 @@ def join_combat(caller, *targets, session=None): if not location: raise CombatFailure("Must have a location to start combat.") + if caller.hp <= 0: + raise CombatFailure("You can't start a fight in your current condition!") + if not getattr(location, "allow_combat", False): raise CombatFailure("This is not the time and place for picking a fight.") @@ -1402,6 +1409,9 @@ def join_combat(caller, *targets, session=None): # it's safe to add a combatant to the same combat more than once combathandler.add_combatant(caller, session=session) for target in targets: + if target.hp <= 0: + caller.msg(f"{target.get_display_name(caller)} is already out of it.") + continue combathandler.add_combatant(target) if created: diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index a1b25e0d34..12e97d08e1 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -8,8 +8,9 @@ from evennia import DefaultCharacter from evennia.typeclasses.attributes import AttributeProperty from .characters import LivingMixin -from .enums import Ability +from .enums import Ability, WieldLocation from .objects import WeaponEmptyHand +from .rules import dice class EvAdventureNPC(LivingMixin, DefaultCharacter): @@ -114,6 +115,9 @@ class EvAdventureMob(EvAdventureNPC): """ + # chance (%) that this enemy will loot you when defeating you + loot_chance = AttributeProperty(75) + def ai_combat_next_action(self, combathandler): """ Called to get the next action in combat. @@ -150,3 +154,55 @@ class EvAdventureMob(EvAdventureNPC): """ self.at_death() + + def at_loot(self, looted): + """ + Called when mob gets to loot a PC. + + """ + if dice.roll("1d100") > self.loot_chance: + # don't loot + return + + if looted.coins: + # looter prefer coins + loot = dice.roll("1d20") + if looted.coins < loot: + self.location.msg_location( + "$You(looter) loots $You() for all coin!", + from_obj=looted, + mapping={"looter": self}, + ) + else: + self.location.msg_location( + "$You(looter) loots $You() for |y{loot}|n coins!", + from_obj=looted, + mapping={"looter": self}, + ) + elif hasattr(looted, "equipment"): + # go through backpack, first usable, then wieldable, wearable items + # and finally stuff wielded + stealable = looted.equipment.get_usable_objects_from_backpack() + if not stealable: + stealable = looted.equipment.get_wieldable_objects_from_backpack() + if not stealable: + stealable = looted.equipment.get_wearable_objects_from_backpack() + if not stealable: + stealable = [looted.equipment.slots[WieldLocation.SHIELD_HAND]] + if not stealable: + stealable = [looted.equipment.slots[WieldLocation.HEAD]] + if not stealable: + stealable = [looted.equipment.slots[WieldLocation.ARMOR]] + if not stealable: + stealable = [looted.equipment.slots[WieldLocation.WEAPON_HAND]] + if not stealable: + stealable = [looted.equipment.slots[WieldLocation.TWO_HANDS]] + + stolen = looted.equipment.remove(choice(stealable)) + stolen.location = self + + self.location.msg_location( + "$You(looter) steals {stolen.key} from $You()!", + from_obj=looted, + mapping={"looter": self}, + ) diff --git a/evennia/contrib/tutorials/evadventure/quests.py b/evennia/contrib/tutorials/evadventure/quests.py index ec95e8cc4e..d30ce5f153 100644 --- a/evennia/contrib/tutorials/evadventure/quests.py +++ b/evennia/contrib/tutorials/evadventure/quests.py @@ -38,6 +38,7 @@ class EvAdventureQuest: key = "basequest" desc = "This is the base quest. It will just step through its steps immediately." start_step = "start" + end_text = "This quest is completed!" # help entries for quests help_start = "You need to start first" @@ -49,6 +50,7 @@ class EvAdventureQuest: self.questhandler = questhandler self.current_step = start_step + self.completed = False @property def quester(self): @@ -59,17 +61,20 @@ class EvAdventureQuest: Call this to end the quest. """ - self.current_step + self.completed = True - def progress(self): + def progress(self, *args, **kwargs): """ This is called whenever the environment expects a quest may be complete. This will determine which quest-step we are on, run check_, and if it - succeeds, continue with complete_ + succeeds, continue with complete_. + + Args: + *args, **kwargs: Will be passed into the check/complete methods. """ - if getattr(self, f"check_{self.current_step}")(): - getattr(self, f"complete_{self.current_step}")() + if getattr(self, f"check_{self.current_step}")(*args, **kwargs): + getattr(self, f"complete_{self.current_step}")(*args, **kwargs) def help(self): """ @@ -93,7 +98,7 @@ class EvAdventureQuest: # step methods - def check_start(self): + def check_start(self, *args, **kwargs): """ Check if the starting conditions are met. @@ -104,7 +109,7 @@ class EvAdventureQuest: """ return True - def complete_start(self): + def complete_start(self, *args, **kwargs): """ Completed start. This should change `.current_step` to the next step to complete and call `self.progress()` just in case the next step is already completed too. @@ -114,10 +119,10 @@ class EvAdventureQuest: self.current_step = "end" self.progress() - def check_end(self): + def check_end(self, *args, **kwargs): return True - def complete_end(self): + def complete_end(self, *args, **kwargs): self.quester.msg("Quest complete!") self.end_quest() diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index f37459cfdd..5a83ce359e 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -164,7 +164,11 @@ class EvAdventureRollEngine: modtxt = f" + {modifier}" if modifier > 0 else f" - {abs(modifier)}" qualtxt = f" ({quality.value}!)" if quality else "" - txt = f"{rolltxt}={dice_roll} + {bonus_type.value}{bontxt}{modtxt} -> |w{result}{qualtxt}|n" + txt = ( + f"rolled {dice_roll} on {rolltxt} " + f"+ {bonus_type.value}{bontxt}{modtxt} vs " + f"{target} -> |w{result}{qualtxt}|n" + ) return (dice_roll + bonus + modifier) > target, quality, txt diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index 427d237a00..4dcdd3de6b 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -195,7 +195,8 @@ class EvAdventureTurnbasedCombatActionTest(EvAdventureMixin, BaseEvenniaTest): mock_randint.return_value = 11 # 11 + 1 str will hit beat armor 11 self._run_action(combat_turnbased.CombatActionAttack, self.target) self.assertEqual(self.target.hp, -7) - self.assertTrue(self.target not in self.combathandler.combatants) + # after this the combat is over + self.assertIsNone(self.combathandler.pk) @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") def test_stunt_fail(self, mock_randint): @@ -293,7 +294,7 @@ class EvAdventureTurnbasedCombatActionTest(EvAdventureMixin, BaseEvenniaTest): # second flee should remove combatant self._run_action(combat_turnbased.CombatActionFlee, None) - self.assertTrue(self.combatant not in self.combathandler.combatants) + self.assertIsNone(self.combathandler.pk) @patch("evennia.contrib.tutorials.evadventure.combat_turnbased.rules.randint") def test_flee__blocked(self, mock_randint): diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index a79b89e89c..25265c0c96 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -6,38 +6,38 @@ They provide some useful string and conversion methods that might be of use when designing your own game. """ -import os import gc -import sys -import types -import math -import threading -import re -import textwrap -import random -import inspect -import traceback import importlib -import importlib.util import importlib.machinery +import importlib.util +import inspect +import math +import os +import random +import re +import sys +import textwrap +import threading +import traceback +import types from ast import literal_eval -from simpleeval import simple_eval -from unicodedata import east_asian_width -from twisted.internet.task import deferLater -from twisted.internet.defer import returnValue # noqa - used as import target -from twisted.internet import threads, reactor +from collections import OrderedDict, defaultdict +from inspect import getmembers, getmodule, getmro, ismodule, trace from os.path import join as osjoin -from inspect import ismodule, trace, getmembers, getmodule, getmro -from collections import defaultdict, OrderedDict +from unicodedata import east_asian_width + +from django.apps import apps from django.conf import settings +from django.core.exceptions import ValidationError as DjangoValidationError +from django.core.validators import validate_email as django_validate_email from django.utils import timezone from django.utils.html import strip_tags from django.utils.translation import gettext as _ -from django.apps import apps -from django.core.validators import validate_email as django_validate_email -from django.core.exceptions import ValidationError as DjangoValidationError - from evennia.utils import logger +from simpleeval import simple_eval +from twisted.internet import reactor, threads +from twisted.internet.defer import returnValue # noqa - used as import target +from twisted.internet.task import deferLater _MULTIMATCH_TEMPLATE = settings.SEARCH_MULTIMATCH_TEMPLATE _EVENNIA_DIR = settings.EVENNIA_DIR @@ -2714,10 +2714,24 @@ def run_in_main_thread(function_or_method, *args, **kwargs): return threads.blockingCallFromThread(reactor, function_or_method, *args, **kwargs) -_INT2STR_MAP_NOUN = {0: "no", 1: "one", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", - 7: "seven", 8: "eight", 9: "nine", 10: "ten", 11: "eleven", 12: "twelve"} +_INT2STR_MAP_NOUN = { + 0: "no", + 1: "one", + 2: "two", + 3: "three", + 4: "four", + 5: "five", + 6: "six", + 7: "seven", + 8: "eight", + 9: "nine", + 10: "ten", + 11: "eleven", + 12: "twelve", +} _INT2STR_MAP_ADJ = {1: "1st", 2: "2nd", 3: "3rd"} # rest is Xth. + def int2str(self, number, adjective=False): """ Convert a number to an English string for better display; so 1 -> one, 2 -> two etc From 104f47860f2e57908010d226bf0b05fd8865eee2 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 19 Jul 2022 00:58:31 +0200 Subject: [PATCH 047/177] Start adding dungeon logic --- .../contrib/tutorials/evadventure/dungeon.py | 262 ++++++++++++++ .../tutorials/evadventure/equipment.py | 335 ++++++++++++++++++ .../contrib/tutorials/evadventure/rules.py | 2 +- .../tutorials/evadventure/tests/test_rules.py | 50 +-- 4 files changed, 623 insertions(+), 26 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/dungeon.py create mode 100644 evennia/contrib/tutorials/evadventure/equipment.py diff --git a/evennia/contrib/tutorials/evadventure/dungeon.py b/evennia/contrib/tutorials/evadventure/dungeon.py new file mode 100644 index 0000000000..d2926e6206 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/dungeon.py @@ -0,0 +1,262 @@ +""" +Dungeon system + +This creates a procedurally generated dungeon. + +The dungone originates in an entrance room with exits that spawn a new dungeon connection every X +minutes. As long as characters go through the same exit within that time, they will all end up in +the same dungeon 'branch', otherwise they will go into separate, un-connected dungeon 'branches'. +They can always go back to the start room, but this will become a one-way exit back. + +When moving through the dungeon, a new room is not generated until characters +decided to go in that direction. Each room is tagged with the specific 'instance' +id of that particular branch of dungon. When no characters remain in the branch, +the branch is deleted. + +""" + +from datetime import datetime +from math import sqrt +from random import randint, random, shuffle + +from evennia import AttributeProperty, DefaultExit, DefaultScript +from evennia.utils import create +from evennia.utils.utils import inherits_from + +from .rooms import EvAdventureDungeonRoom + +# aliases for cardinal directions +_EXIT_ALIASES = { + "north": ("n",), + "east": ("w",), + "south": ("s",), + "west": ("w",), + "northeast": ("ne",), + "southeast": ("se",), + "southwest": ("sw",), + "northwest": ("nw",), +} +# finding the reverse cardinal direction +_EXIT_REVERSE_MAPPING = { + "north": "south", + "east": "west", + "south": "north", + "west": "east", + "northeast": "southwest", + "southeast": "northwest", + "southwest": "northeast", + "northwest": "southeast", +} + +# how xy coordinate shifts by going in direction +_EXIT_GRID_SHIFT = { + "north": (0, 1), + "east": (1, 0), + "south": (0, -1), + "west": (-1, 0), + "northeast": (1, 1), + "southeast": (1, -1), + "southwest": (-1, -1), + "northwest": (-1, 1), +} + + +# -------------------------------------------------- +# Dungeon orchestrator and rooms +# -------------------------------------------------- + + +class EvAdventureDungeonExit(DefaultExit): + """ + Dungeon exit. This will not create the target room until it's traversed. + It must be created referencing the dungeon_orchestrator it belongs to. + + """ + + dungeon_orchestrator = AttributeProperty(None, autocreate=False) + + def at_traverse(self, traversing_object, target_location, **kwargs): + """ + Called when traversing. `target_location` will be None if the + target was not yet created. + + """ + if not target_location: + self.destination = target_location = self.dungeon_orchestrator.new_room(self) + super().at_traverse(traversing_object, target_location, **kwargs) + + +class EvAdventureDungeonOrchestrator(DefaultScript): + """ + One script is created per dungeon 'branch' created. The orchestrator is + responsible for determining what is created next when a character enters an + exit within the dungeon. + + """ + + # this determines how branching the dungeon will be + max_unexplored_exits = 5 + max_new_exits_per_room = 3 + + rooms = AttributeProperty(list()) + n_unvisited_exits = AttributeProperty(list()) + highest_depth = AttributeProperty(0) + + # (x,y): room + xy_grid = AttributeProperty(dict()) + + def register_exit_traversed(self, exit): + """ + Tell the system the given exit was traversed. This allows us to track how many unvisited + paths we have so as to not have it grow exponentially. + + """ + if exit.id in self.unvisited_exits: + self.unvisited_exits.remove(exit.id) + + def create_out_exit(self, location, exit_direction="north"): + """ + Create outgoing exit from a room. The target room is not yet created. + + """ + out_exit, _ = EvAdventureDungeonExit.create( + key=exit_direction, location=location, aliases=_EXIT_ALIASES[exit_direction] + ) + self.unvisited_exits.append(out_exit.id) + + def _generate_room(self, depth, coords): + # TODO - determine what type of room to create here based on location and depth + room_typeclass = EvAdventureDungeonRoom + new_room = create.create_object( + room_typeclass, + key="Dungeon room", + tags=((self.key,),), + attributes=(("xy_coord", coords, "dungeon_xygrid"),), + ) + return new_room + + def new_room(self, from_exit): + """ + Create a new Dungeon room leading from the provided exit. + + """ + # figure out coordinate of old room and figure out what coord the + # new one would get + source_location = from_exit.location + x, y = source_location.get("xy_coord", category="dungeon_xygrid", default=(0, 0)) + dx, dy = _EXIT_GRID_SHIFT.get(from_exit.key, (1, 0)) + new_x, new_y = (x + dx, y + dy) + + # the dungeon's depth acts as a measure of the current difficulty level. This is the radial + # distance from the (0, 0) (the entrance). The Orchestrator also tracks the highest + # depth achieved. + depth = int(sqrt(new_x**2 + new_y**2)) + + new_room = self._generate_room(depth, (new_x, new_y)) + + self.xy_grid[(new_x, new_y)] = new_room + + # always make a return exit back to where we came from + back_exit_key = (_EXIT_REVERSE_MAPPING.get(from_exit.key, "back"),) + EvAdventureDungeonExit( + key=back_exit_key, + aliases=_EXIT_ALIASES.get(back_exit_key, ()), + location=new_room, + destination=from_exit.location, + attributes=(("desc", "A dark passage."),), + ) + + # figure out what other exits should be here, if any + n_unexplored = len(self.unvisited_exits) + if n_unexplored >= self.max_unexplored_exits: + # no more exits to open - this is a dead end. + return + else: + n_exits = randint(1, min(self.max_new_exits_per_room, n_unexplored)) + back_exit = from_exit.key + available_directions = [ + direction for direction in _EXIT_ALIASES if direction != back_exit + ] + # randomize order of exits + shuffle(available_directions) + for _ in range(n_exits): + while available_directions: + # get a random direction and check so there isn't a room already + # created in that direction + direction = available_directions.pop(0) + dx, dy = _EXIT_GRID_SHIFT(direction) + target_coord = (new_x + dx, new_y + dy) + if target_coord not in self.xy_grid: + # no room there - make an exit to it + self.create_out_exit(new_room, direction) + break + + self.highest_depth = max(self.highest_depth, depth) + + +# -------------------------------------------------- +# Start room +# -------------------------------------------------- + + +class EvAdventureStartRoomExit(DefaultExit): + """ + Traversing this exit will either lead to an existing dungeon branch or create + a new one. + + """ + + dungeon_orchestrator = AttributeProperty(None, autocreate=False) + + def reset_exit(self): + """ + Flush the exit, so next traversal creates a new dungeon branch. + + """ + self.dungeon_orchestrator = self.destination = None + + def at_traverse(self, traversing_object, target_location, **kwargs): + """ + When traversing create a new orchestrator if one is not already assigned. + + """ + if target_location is None or self.dungeon_orchestrator is None: + self.dungeon_orchestrator, _ = EvAdventureDungeonOrchestrator.create( + f"dungeon_orchestrator_{datetime.utcnow()}", + ) + target_location = self.destination = self.dungeon_orchestrator.new_room(self) + + super().at_traverse(traversing_object, target_location, **kwargs) + + +class EvAdventureStartRoomResetter(DefaultScript): + """ + Simple ticker-script. Introduces a chance of the room's exits cycling every interval. + + """ + + def at_repeat(self): + """ + Called every time the script repeats. + + """ + room = self.obj + for exi in room.exits: + if inherits_from(exi, EvAdventureStartRoomExit) and random() < 0.5: + exi.reset_exit() + + +class EvAdventureDungeonRoomStart(EvAdventureDungeonRoom): + """ + Exits leading out of the start room, (except one leading outside) will lead to a different + dungeon-branch, and after a certain time, the given exit will instead spawn a new branch. This + room is responsible for cycling these exits regularly. + + The actual exits should be created in the build script. + + """ + + recycle_time = 5 * 60 # seconds + + def at_object_creation(self): + self.scripts.add(EvAdventureStartRoomResetter, interval=self.recycle_time, autostart=True) diff --git a/evennia/contrib/tutorials/evadventure/equipment.py b/evennia/contrib/tutorials/evadventure/equipment.py new file mode 100644 index 0000000000..57438864fc --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/equipment.py @@ -0,0 +1,335 @@ +""" +Knave has a system of Slots for its inventory. + +""" + +from .enums import Ability, WieldLocation +from .objects import WeaponEmptyHand + + +class EquipmentError(TypeError): + pass + + +class EquipmentHandler: + """ + _Knave_ puts a lot of emphasis on the inventory. You have CON_DEFENSE inventory + slots. Some things, like torches can fit multiple in one slot, other (like + big weapons and armor) use more than one slot. The items carried and wielded has a big impact + on character customization - even magic requires carrying a runestone per spell. + + The inventory also doubles as a measure of negative effects. Getting soaked in mud + or slime could gunk up some of your inventory slots and make the items there unusuable + until you clean them. + + """ + + save_attribute = "inventory_slots" + + def __init__(self, obj): + self.obj = obj + self._load() + + def _load(self): + """ + Load or create a new slot storage. + + """ + self.slots = self.obj.attributes.get( + self.save_attribute, + category="inventory", + default={ + WieldLocation.WEAPON_HAND: None, + WieldLocation.SHIELD_HAND: None, + WieldLocation.TWO_HANDS: None, + WieldLocation.BODY: None, + WieldLocation.HEAD: None, + WieldLocation.BACKPACK: [], + }, + ) + + def _save(self): + """ + Save slot to storage. + + """ + self.obj.attributes.add(self.save_attribute, self.slots, category="inventory") + + def _count_slots(self): + """ + Count slot usage. This is fetched from the .size Attribute of the + object. The size can also be partial slots. + + """ + slots = self.slots + wield_usage = sum( + getattr(slotobj, "size", 0) or 0 + for slot, slotobj in slots.items() + if slot is not WieldLocation.BACKPACK + ) + backpack_usage = sum( + getattr(slotobj, "size", 0) or 0 for slotobj in slots[WieldLocation.BACKPACK] + ) + return wield_usage + backpack_usage + + @property + def max_slots(self): + """ + The max amount of equipment slots ('carrying capacity') is based on + the constitution defense. + + """ + return getattr(self.obj, Ability.CON.value, 1) + 10 + + def validate_slot_usage(self, obj): + """ + Check if obj can fit in equipment, based on its size. + + Args: + obj (EvAdventureObject): The object to add. + + Raise: + EquipmentError: If there's not enough room. + + """ + size = getattr(obj, "size", 0) + max_slots = self.max_slots + current_slot_usage = self._count_slots() + if current_slot_usage + size > max_slots: + slots_left = max_slots - current_slot_usage + raise EquipmentError( + f"Equipment full ($int2str({slots_left}) slots " + f"remaining, {obj.key} needs $int2str({size}) " + f"$pluralize(slot, {size}))." + ) + return True + + @property + def armor(self): + """ + Armor provided by actually worn equipment/shield. For body armor + this is a base value, like 12, for shield/helmet, it's a bonus, like +1. + We treat values and bonuses equal and just add them up. This value + can thus be 0, the 'unarmored' default should be handled by the calling + method. + + Returns: + int: Armor from equipment. Note that this is the +bonus of Armor, not the + 'defense' (to get that one adds 10). + + """ + slots = self.slots + return sum( + ( + # armor is listed using its defense, so we remove 10 from it + # (11 is base no-armor value in Knave) + getattr(slots[WieldLocation.BODY], "armor", 11) - 10, + # shields and helmets are listed by their bonus to armor + getattr(slots[WieldLocation.SHIELD_HAND], "armor", 0), + getattr(slots[WieldLocation.HEAD], "armor", 0), + ) + ) + + @property + def weapon(self): + """ + Conveniently get the currently active weapon or rune stone. + + Returns: + obj or None: The weapon. None if unarmored. + + """ + # first checks two-handed wield, then one-handed; the two + # should never appear simultaneously anyhow (checked in `use` method). + slots = self.slots + weapon = slots[WieldLocation.TWO_HANDS] + if not weapon: + weapon = slots[WieldLocation.WEAPON_HAND] + if not weapon: + weapon = WeaponEmptyHand() + return weapon + + def display_loadout(self): + """ + Get a visual representation of your current loadout. + + Returns: + str: The current loadout. + + """ + slots = self.slots + weapon_str = "You are fighting with your bare fists" + shield_str = " and have no shield." + armor_str = "You wear no armor" + helmet_str = " and no helmet." + + two_hands = slots[WieldLocation.TWO_HANDS] + if two_hands: + weapon_str = f"You wield {two_hands} with both hands" + shield_str = " (you can't hold a shield at the same time)." + else: + one_hands = slots[WieldLocation.WEAPON_HAND] + if one_hands: + weapon_str = f"You are wielding {one_hands} in one hand." + shield = slots[WieldLocation.SHIELD_HAND] + if shield: + shield_str = f"You have {shield} in your off hand." + + armor = slots[WieldLocation.BODY] + if armor: + armor_str = f"You are wearing {armor}" + + helmet = slots[WieldLocation.BODY] + if helmet: + helmet_str = f" and {helmet} on your head." + + return f"{weapon_str}{shield_str}\n{armor_str}{helmet_str}" + + def use(self, obj): + """ + Make use of item - this makes use of the object's wield slot to decide where + it goes. If it doesn't have any, it goes into backpack. + + Args: + obj (EvAdventureObject): Thing to use. + + Raises: + EquipmentError: If there's no room in inventory. It will contains the details + of the error, suitable to echo to user. + + Notes: + If using an item already in the backpack, it should first be `removed` from the + backpack, before applying here - otherwise, it will be added a second time! + + this will cleanly move any 'colliding' items to the backpack to + make the use possible (such as moving sword + shield to backpack when wielding + a two-handed weapon). If wanting to warn the user about this, it needs to happen + before this call. + + """ + # first check if we have room for this + self.validate_slot_usage(obj) + + slots = self.slots + use_slot = getattr(obj, "inventory_use_slot", WieldLocation.BACKPACK) + + if use_slot is WieldLocation.TWO_HANDS: + # two-handed weapons can't co-exist with weapon/shield-hand used items + slots[WieldLocation.WEAPON_HAND] = slots[WieldLocation.SHIELD_HAND] = None + slots[use_slot] = obj + elif use_slot in (WieldLocation.WEAPON_HAND, WieldLocation.SHIELD_HAND): + # can't keep a two-handed weapon if adding a one-handede weapon or shield + slots[WieldLocation.TWO_HANDS] = None + slots[use_slot] = obj + elif use_slot is WieldLocation.BACKPACK: + # backpack has multiple slots. + slots[use_slot].append(obj) + else: + # for others (body, head), just replace whatever's there + slots[use_slot] = obj + + # store new state + self._save() + + def add(self, obj): + """ + Put something in the backpack specifically (even if it could be wield/worn). + + """ + # check if we have room + self.validate_slot_usage(obj) + self.slots[WieldLocation.BACKPACK].append(obj) + self._save() + + def can_remove(self, leaving_object): + """ + Called to check if the object can be removed. + + """ + return True # TODO - some things may not be so easy, like mud + + def remove(self, obj_or_slot): + """ + Remove specific object or objects from a slot. + + Args: + obj_or_slot (EvAdventureObject or WieldLocation): The specific object or + location to empty. If this is WieldLocation.BACKPACK, all items + in the backpack will be emptied and returned! + Returns: + list: A list of 0, 1 or more objects emptied from the inventory. + + """ + slots = self.slots + ret = [] + if isinstance(obj_or_slot, WieldLocation): + if obj_or_slot is WieldLocation.BACKPACK: + # empty entire backpack + ret.extend(slots[obj_or_slot]) + slots[obj_or_slot] = [] + else: + ret.append(slots[obj_or_slot]) + slots[obj_or_slot] = None + elif obj_or_slot in self.slots.values(): + # obj in use/wear slot + for slot, objslot in slots.items(): + if objslot is obj_or_slot: + slots[slot] = None + ret.append(objslot) + elif obj_or_slot in slots[WieldLocation.BACKPACK]: + # obj in backpack slot + try: + slots[WieldLocation.BACKPACK].remove(obj_or_slot) + ret.append(obj_or_slot) + except ValueError: + pass + if ret: + self._save() + return ret + + def get_wieldable_objects_from_backpack(self): + """ + Get all wieldable weapons (or spell runes) from backpack. This is useful in order to + have a list to select from when swapping your wielded loadout. + + Returns: + list: A list of objects with a suitable `inventory_use_slot`. We don't check + quality, so this may include broken items (we may want to visually show them + in the list after all). + + """ + return [ + obj + for obj in self.slots[WieldLocation.BACKPACK] + if obj.inventory_use_slot + in (WieldLocation.WEAPON_HAND, WieldLocation.TWO_HANDS, WieldLocation.SHIELD_HAND) + ] + + def get_wearable_objects_from_backpack(self): + """ + Get all wearable items (armor or helmets) from backpack. This is useful in order to + have a list to select from when swapping your worn loadout. + + Returns: + list: A list of objects with a suitable `inventory_use_slot`. We don't check + quality, so this may include broken items (we may want to visually show them + in the list after all). + + """ + return [ + obj + for obj in self.slots[WieldLocation.BACKPACK] + if obj.inventory_use_slot in (WieldLocation.BODY, WieldLocation.HEAD) + ] + + def get_usable_objects_from_backpack(self): + """ + Get all 'usable' items (like potions) from backpack. This is useful for getting a + list to select from. + + Returns: + list: A list of objects that are usable. + + """ + character = self.obj + return [obj for obj in self.slots[WieldLocation.BACKPACK] if obj.at_pre_use(character)] diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 5a83ce359e..391bc1e939 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -532,7 +532,7 @@ class EvAdventureCharacterGeneration: for item in self.backpack: # TODO create here - character.equipment.store(item) + character.equipment.add(item) # character improvement diff --git a/evennia/contrib/tutorials/evadventure/tests/test_rules.py b/evennia/contrib/tutorials/evadventure/tests/test_rules.py index 6db9781444..c7f5fcaf12 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_rules.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_rules.py @@ -3,15 +3,14 @@ Test the rules and chargen. """ -from unittest.mock import patch, MagicMock, call -from parameterized import parameterized -from evennia.utils.test_resources import BaseEvenniaTest +from unittest.mock import MagicMock, call, patch +from anything import Something +from evennia.utils.test_resources import BaseEvenniaTest +from parameterized import parameterized + +from .. import characters, enums, equipment, random_tables, rules from .mixins import EvAdventureMixin -from .. import rules -from .. import enums -from .. import random_tables -from .. import characters class EvAdventureRollEngineTest(BaseEvenniaTest): @@ -86,23 +85,24 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): character.dexterity = 1 self.assertEqual( - self.roll_engine.saving_throw(character, bonus_type=enums.Ability.STR), (False, None) + self.roll_engine.saving_throw(character, bonus_type=enums.Ability.STR), + (False, None, Something), ) self.assertEqual( self.roll_engine.saving_throw(character, bonus_type=enums.Ability.DEX, modifier=1), - (False, None), + (False, None, Something), ) self.assertEqual( self.roll_engine.saving_throw( character, advantage=True, bonus_type=enums.Ability.DEX, modifier=6 ), - (False, None), + (False, None, Something), ) self.assertEqual( self.roll_engine.saving_throw( character, disadvantage=True, bonus_type=enums.Ability.DEX, modifier=7 ), - (True, None), + (True, None, Something), ) mock_randint.return_value = 1 @@ -110,7 +110,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): self.roll_engine.saving_throw( character, disadvantage=True, bonus_type=enums.Ability.STR, modifier=2 ), - (False, enums.Ability.CRITICAL_FAILURE), + (False, enums.Ability.CRITICAL_FAILURE, Something), ) mock_randint.return_value = 20 @@ -118,7 +118,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): self.roll_engine.saving_throw( character, disadvantage=True, bonus_type=enums.Ability.STR, modifier=2 ), - (True, enums.Ability.CRITICAL_SUCCESS), + (True, enums.Ability.CRITICAL_SUCCESS, Something), ) @patch("evennia.contrib.tutorials.evadventure.rules.randint") @@ -133,7 +133,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): self.roll_engine.opposed_saving_throw( attacker, defender, attack_type=enums.Ability.STR, defense_type=enums.Ability.ARMOR ), - (False, None), + (False, None, Something), ) self.assertEqual( self.roll_engine.opposed_saving_throw( @@ -143,7 +143,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): defense_type=enums.Ability.ARMOR, modifier=2, ), - (True, None), + (True, None, Something), ) @patch("evennia.contrib.tutorials.evadventure.rules.randint") @@ -224,7 +224,7 @@ class EvAdventureRollEngineTest(BaseEvenniaTest): # death mock_randint.return_value = 1 self.roll_engine.roll_death(character) - character.handle_death.assert_called() + character.at_death.assert_called() # strength loss mock_randint.return_value = 3 self.roll_engine.roll_death(character) @@ -310,7 +310,7 @@ class EvAdventureCharacterGenerationTest(BaseEvenniaTest): self.assertTrue(character.db.desc.startswith("Herbalist")) self.assertEqual(character.armor, "gambeson") - character.equipment.store.assert_called() + character.equipment.add.assert_called() class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): @@ -350,7 +350,7 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): if is_ok: self.assertTrue(self.character.equipment.validate_slot_usage(obj)) else: - with self.assertRaises(characters.EquipmentError): + with self.assertRaises(equipment.EquipmentError): self.character.equipment.validate_slot_usage(obj) @parameterized.expand( @@ -375,8 +375,8 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): else: self.assertEqual(self.character.equipment.slots[where], obj) - def test_store(self): - self.character.equipment.store(self.weapon) + def test_add(self): + self.character.equipment.add(self.weapon) self.assertEqual(self.character.equipment.slots[enums.WieldLocation.WEAPON_HAND], None) self.assertTrue(self.weapon in self.character.equipment.slots[enums.WieldLocation.BACKPACK]) @@ -408,7 +408,7 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): def test_remove__with_obj(self): self.character.equipment.use(self.shield) self.character.equipment.use(self.item) - self.character.equipment.store(self.weapon) + self.character.equipment.add(self.weapon) self.assertEqual( self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield @@ -428,7 +428,7 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): def test_remove__with_slot(self): self.character.equipment.use(self.shield) self.character.equipment.use(self.item) - self.character.equipment.store(self.helmet) + self.character.equipment.add(self.helmet) self.assertEqual( self.character.equipment.slots[enums.WieldLocation.SHIELD_HAND], self.shield @@ -449,11 +449,11 @@ class EvAdventureEquipmentTest(EvAdventureMixin, BaseEvenniaTest): def test_properties(self): self.character.equipment.use(self.armor) - self.assertEqual(self.character.equipment.armor, 11) + self.assertEqual(self.character.equipment.armor, 1) self.character.equipment.use(self.shield) - self.assertEqual(self.character.equipment.armor, 12) + self.assertEqual(self.character.equipment.armor, 2) self.character.equipment.use(self.helmet) - self.assertEqual(self.character.equipment.armor, 13) + self.assertEqual(self.character.equipment.armor, 3) self.character.equipment.use(self.weapon) self.assertEqual(self.character.equipment.weapon, self.weapon) From caed0660d38d52f5affe91977aa163bae6e0b074 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 22 Jul 2022 17:36:38 +0200 Subject: [PATCH 048/177] Finished quest engine for evadventure --- docs/source/Persistent-Handler.md | 196 ++++++++++++++++++ .../contrib/tutorials/evadventure/quests.py | 177 ++++++++++------ .../evadventure/tests/test_combat.py | 9 +- .../evadventure/tests/test_quests.py | 150 ++++++++++++++ 4 files changed, 465 insertions(+), 67 deletions(-) create mode 100644 docs/source/Persistent-Handler.md create mode 100644 evennia/contrib/tutorials/evadventure/tests/test_quests.py diff --git a/docs/source/Persistent-Handler.md b/docs/source/Persistent-Handler.md new file mode 100644 index 0000000000..d4838b0881 --- /dev/null +++ b/docs/source/Persistent-Handler.md @@ -0,0 +1,196 @@ +A _handler_ is a convenient way to group functionality on an object. This allows you to logically group all actions related to that thing in one place. This tutorial expemplifies how to make your own handlers and make sure data you store in them survives a reload. + +For example, when you do `obj.attributes.get("key")` or `obj.tags.add('tagname')` you are evoking handlers stored as `.attributes` and `tags` on the `obj`. On these handlers are methods (`get()` and `add()` in this example). + +## Base Handler example + + +Here is a base way to set up an on-object handler: + +```python + +from evennia import DefaultObject, create_object +from evennia.utils.utils import lazy_property + +class NameChanger: + def __init__(self, obj): + self.obj = obj + + def add_to_key(self, suffix): + self.obj.key = f"self.obj.key_{suffix}" + +# make a test object +class MyObject(DefaultObject): + @lazy_property: + def namechange(self): + return MyHandler(self) + + +obj = create_object(MyObject, key="test") +print(obj.key) +>>> "test" +obj.namechange.add_to_key("extra") +print(obj.key) +>>> "test_extra" +``` + +What happens here is that we make a new class `MyHandler`. We use the `@lazy_property` decorator to set it up - this means the handler will not be actually created until someone really wants to use it, by accessing `obj.namechange` later. The decorated `namechange` method returns the handler and makes sure to initialize it with `self` - this becomes the `obj` inside the handler! + +We then make a silly method `add_to_key` that uses the handler to manipulate the key of the object. In this example, the handler is pretty pointless, but grouping functionality this way can both make for an easy-to-remember API and can also allow you cache data for easy access - this is how the `AttributeHandler` (`.attributes`) and `TagHandler` (`.tags`) works. + +## Persistent storage of data in handler + +Let's say we want to track 'quests' in our handler. A 'quest' is a regular class that represents the quest. Let's make it simple as an example: + +```python +# for example in mygame/world/quests.py + + +class Quest: + + key = "The quest for the red key" + + def __init__(self): + self.current_step = "start" + + def check_progress(self): + # uses self.current_step to check + # progress of this quest + getattr(self, f"step_{self.current_step}")() + + def step_start(self): + # check here if quest-step is complete + self.current_step = "find_the_red_key" + def step_find_the_red_key(self): + # check if step is complete + self.current_step = "hand_in_quest" + def step_hand_in_quest(self): + # check if handed in quest to quest giver + self.current_step = None # finished + +``` + + +We expect the dev to make subclasses of this to implement different quests. Exactly how this works doesn't matter, the key is that we want to track `self.current_step` - a property that _should survive a server reload_. But so far there is no way for `Quest` to accomplish this, it's just a normal Python class with no connection to the database. + +### Handler with save/load capability + +Let's make a `QuestHandler` that manages a character's quests. + +```python +# for example in the same mygame/world/quests.py + + +class QuestHandler: + def __init__(self, obj): + self.obj = obj + self.do_save = False + self._load() + + def _load(self): + self.storage = self.obj.attributes.get( + "quest_storage", default={}, category="quests") + + def _save(self): + self.obj.attributes.add( + "quest_storage", self.storage, category="quests") + self._load() # important + self.do_save = False + + def add(self, questclass): + self.storage[questclass.key] = questclass(self.obj) + self._save() + + def check_progress(self): + for quest in self.storage.values(): + quest.check_progress() + if self.do_save: + # .do_save is set on handler by Quest if it wants to save progress + self._save() + +``` + +The handler is just a normal Python class and has no database-storage on its own. But it has a link to `.obj`, which is assumed to be a full typeclased entity, on which we can create persistent [Attributes](Attributes) to store things however we like! + +We make two helper methods `_load` and +`_save` that handles local fetches and saves `storage` to an Attribute on the object. To avoid saving more than necessary, we have a property `do_save`. This we will set in `Quest` below. + +> Note that once we `_save` the data, we need to call `_load` again. This is to make sure the version we store on the handler is properly de-serialized. If you get an error about data being `bytes`, you probably missed this step. + + +### Make quests storable + +The handler will save all `Quest` objects as a `dict` in an Attribute on `obj`. We are not done yet though, the `Quest` object needs access to the `obj` too - not only will this is important to figure out if the quest is complete (the `Quest` must be able to check the quester's inventory to see if they have the red key, for example), it also allows the `Quest` to tell the handler when its state changed and it should be saved. + +We change the `Quest` such: + +```python +from evennia.utils import dbserialize + + +class Quest: + + def __init__(self, obj): + self.obj = obj + self._current_step = "start" + + def __serialize_dbobjs__(self): + self.obj = dbserialize.dbserialize(self.obj) + + def __deserialize_dbobjs__(self): + if isinstance(self.obj, bytes): + self.obj = dbserialize.dbunserialize(self.obj) + + @property + def questhandler(self): + return self.obj.quests + + @property + def current_step(self): + return self._current_step + + @current_step.setter + def current_step(self, value): + self._current_step = value + self.questhandler.do_save = True # this triggers save in handler! + + # [same as before] + +``` + +The `Quest.__init__` now takes `obj` as argument, to match what we pass to it in `QuestHandler.add`. We want to monitor the changing of `current_step`, so we make it into a `property`. When we edit that value, we set the `do_save` flag on the handler, which means it will save the status to database once it has checked progress on all its quests. + +The `__serialize__dbobjs__` and `__deserialize_dbobjs__` methods are needed because `Attributes` can't store 'hidden' database objects (the `Quest.obj` property. The methods help Evennia serialize/deserialize `Quest` propertly when the handler saves it. For more information, see [Storing Single objects](Attributes#storing-single-objects) in the Attributes documentation. + +### Tying it all together + +The final thing we need to do is to add the quest-handler to the character: + +```python +# in mygame/typeclasses/characters.py + +from evennia import DefaultCharacter +from evennia.utils.utils import lazy_property +from .world.quests import QuestHandler # as an example + + +class Character(DefaultCharacter): + # ... + @lazy_property + def quests(self): + return QuestHandler(self) + +``` + + +You can now make your Quest classes to describe your quests and add them to characters with + + character.quests.add(FindTheRedKey) + +and can later do + + character.quests.check_progress() + +and be sure that quest data is not lost between reloads. + +You can find a full-fledged quest-handler example as [EvAdventure quests](evennia.contribs.tutorials.evadventure.quests) contrib in the Evennia repository. \ No newline at end of file diff --git a/evennia/contrib/tutorials/evadventure/quests.py b/evennia/contrib/tutorials/evadventure/quests.py index d30ce5f153..be8d0a98cd 100644 --- a/evennia/contrib/tutorials/evadventure/quests.py +++ b/evennia/contrib/tutorials/evadventure/quests.py @@ -14,6 +14,10 @@ another quest. """ +from copy import copy, deepcopy + +from evennia.utils import dbserialize + class EvAdventureQuest: """ @@ -22,59 +26,104 @@ class EvAdventureQuest: Properties: name (str): Main identifier for the quest. category (str, optional): This + name must be globally unique. - steps (list): A list of strings, representing how many steps are - in the quest. The first step is always the beginning, when the quest is presented. - The last step is always the end of the quest. It is possible to abort the quest before it ends - it then pauses after the last completed step. - Each step is represented by three methods on this object: - `check_` and `complete_`. `help_` is used to get - a guide/reminder on what you are supposed to do. + Each step of the quest is represented by a `.step_` method. This should check + the status of the quest-step and update the `.current_step` or call `.complete()`. There + are also `.help_` which is either a class-level help string or a method + returning a help text. All properties should be stored on the quester. + Example: + ```py + class MyQuest(EvAdventureQuest): + '''A quest with two steps that ar''' + + start_step = "A" + + help_A = "You need a '_quest_A_flag' on yourself to finish this step!" + help_B = "Finally, you need more than 4 items in your inventory!" + + def step_A(self, *args, **kwargs): + if self.quester.db._quest_A_flag == True: + self.quester.msg("Completed the first step of the quest.") + self.current_step = "end" + self.progress() + + def step_end(self, *args, **kwargs): + if len(self.quester.contents) > 4: + self.quester.msg("Quest complete!") + self.complete() + ``` """ - # name + category must be globally unique. They are - # queried as name:category or just name, if category is empty. key = "basequest" - desc = "This is the base quest. It will just step through its steps immediately." + desc = "This is the base quest class" start_step = "start" - end_text = "This quest is completed!" - # help entries for quests + completed_text = "This quest is completed!" + abandoned_text = "This quest is abandoned." + + # help entries for quests (could also be methods) help_start = "You need to start first" help_end = "You need to end the quest" - def __init__(self, questhandler, start_step="start"): + def __init__(self, quester, start_step=None): if " " in self.key: raise TypeError("The Quest name must not have spaces in it.") - self.questhandler = questhandler - self.current_step = start_step - self.completed = False + self.quester = quester + self._current_step = start_step or self.start_step + self.is_completed = False + self.is_abandoned = False + + def __serialize_dbobjs__(self): + self.quester = dbserialize.dbserialize(self.quester) + + def __deserialize_dbobjs__(self): + if isinstance(self.quester, bytes): + self.quester = dbserialize.dbunserialize(self.quester) @property - def quester(self): - return self.questhandler.obj + def questhandler(self): + return self.quester.quests - def end_quest(self): + @property + def current_step(self): + return self._current_step + + @current_step.setter + def current_step(self, step_name): + self._current_step = step_name + self.questhandler.do_save = True + + def abandon(self): + """ + Call when quest is abandoned. + + """ + self.is_abandoned = True + self.cleanup() + + def complete(self): """ Call this to end the quest. """ - self.completed = True + self.is_completed = True + self.cleanup() def progress(self, *args, **kwargs): """ - This is called whenever the environment expects a quest may be complete. - This will determine which quest-step we are on, run check_, and if it - succeeds, continue with complete_. + This is called whenever the environment expects a quest may need stepping. This will + determine which quest-step we are on and run `step_`, which in turn will figure + out if the step is complete or not. Args: - *args, **kwargs: Will be passed into the check/complete methods. + *args, **kwargs: Will be passed into the step method. """ - if getattr(self, f"check_{self.current_step}")(*args, **kwargs): - getattr(self, f"complete_{self.current_step}")(*args, **kwargs) + if not (self.is_completed or self.is_abandoned): + getattr(self, f"step_{self.current_step}")(*args, **kwargs) def help(self): """ @@ -85,6 +134,11 @@ class EvAdventureQuest: str: The help text for the current step. """ + if self.is_completed: + return self.completed_text + if self.is_abandoned: + return self.abandoned_text + help_resource = ( getattr(self, f"help_{self.current_step}", None) or "You need to {self.current_step} ..." @@ -96,35 +150,22 @@ class EvAdventureQuest: # normally it's just a string return str(help_resource) - # step methods + # step methods and hooks - def check_start(self, *args, **kwargs): + def step_start(self, *args, **kwargs): """ - Check if the starting conditions are met. - - Returns: - bool: If this step is complete or not. If complete, the `complete_start` - method will fire. + Example step that completes immediately. """ - return True + self.complete() - def complete_start(self, *args, **kwargs): + def cleanup(self): """ - Completed start. This should change `.current_step` to the next step to complete - and call `self.progress()` just in case the next step is already completed too. + This is called both when completing the quest, or when it is abandoned prematurely. + Make sure to cleanup any quest-related data stored when following the quest. """ - self.quester.msg("Completed the first step of the quest.") - self.current_step = "end" - self.progress() - - def check_end(self, *args, **kwargs): - return True - - def complete_end(self, *args, **kwargs): - self.quester.msg("Quest complete!") - self.end_quest() + pass class EvAdventureQuestHandler: @@ -146,6 +187,7 @@ class EvAdventureQuestHandler: def __init__(self, obj): self.obj = obj + self.do_save = False self._load() def _load(self): @@ -161,6 +203,8 @@ class EvAdventureQuestHandler: self.storage, category=self.quest_storage_attribute_category, ) + self._load() # important + self.do_save = False def has(self, quest_key): """ @@ -190,52 +234,63 @@ class EvAdventureQuestHandler: """ return self.storage.get(quest_key) - def add(self, quest, autostart=True): + def add(self, quest): """ Add a new quest Args: - quest (EvAdventureQuest): The quest to start. - autostart (bool, optional): If set, the quest will - start immediately. + quest (EvAdventureQuest): The quest class to start. """ - self.storage[quest.key] = quest + self.storage[quest.key] = quest(self.obj) self._save() def remove(self, quest_key): """ - Remove a quest. + Remove a quest. If not complete, it will be abandoned. Args: quest_key (str): The quest to remove. """ - self.storage.pop(quest_key, None) + quest = self.storage.pop(quest_key, None) + if not quest.is_completed: + # make sure to cleanup + quest.abandon() self._save() - def help(self, quest_key=None): + def get_help(self, quest_key=None): """ Get help text for a quest or for all quests. The help text is a combination of the description of the quest and the help-text of the current step. + Args: + quest_key (str, optional): The quest-key. If not given, get help for all + quests in handler. + + Returns: + list: Help texts, one for each quest, or only one if `quest_key` is given. + """ - help_text = [] + help_texts = [] if quest_key in self.storage: quests = [self.storage[quest_key]] + else: + quests = self.storage.values() for quest in quests: - help_text.append(f"|c{quest.key}|n\n {quest.desc}\n\n - {quest.help}") - return "---".join(help_text) + help_texts.append(f"|c{quest.key}|n\n {quest.desc}\n\n - {quest.help()}") + return help_texts - def progress(self, quest_key=None): + def progress(self, quest_key=None, *args, **kwargs): """ Check progress of a given quest or all quests. Args: quest_key (str, optional): If given, check the progress of this quest (if we have it), otherwise check progress on all quests. + *args, **kwargs: Will be passed into each quest's `progress` call. """ if quest_key in self.storage: @@ -244,4 +299,8 @@ class EvAdventureQuestHandler: quests = self.storage.values() for quest in quests: - quest.progress() + quest.progress(*args, **kwargs) + + if self.do_save: + # do_save is set by the quest + self._save() diff --git a/evennia/contrib/tutorials/evadventure/tests/test_combat.py b/evennia/contrib/tutorials/evadventure/tests/test_combat.py index 4dcdd3de6b..108c77b136 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_combat.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_combat.py @@ -5,7 +5,6 @@ Test EvAdventure combat. from unittest.mock import MagicMock, patch -from anything import Something from evennia.utils import create from evennia.utils.test_resources import BaseEvenniaTest @@ -13,13 +12,7 @@ from .. import combat_turnbased from ..characters import EvAdventureCharacter from ..enums import WieldLocation from ..npcs import EvAdventureMob -from ..objects import ( - EvAdventureConsumable, - EvAdventureRunestone, - EvAdventureWeapon, - WeaponEmptyHand, -) -from ..rooms import EvAdventureRoom +from ..objects import EvAdventureConsumable, EvAdventureRunestone, EvAdventureWeapon from .mixins import EvAdventureMixin diff --git a/evennia/contrib/tutorials/evadventure/tests/test_quests.py b/evennia/contrib/tutorials/evadventure/tests/test_quests.py new file mode 100644 index 0000000000..5a65725044 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/test_quests.py @@ -0,0 +1,150 @@ +""" +Testing Quest functionality. + +""" + +from unittest.mock import MagicMock + +from evennia.utils.test_resources import BaseEvenniaTest + +from .. import quests +from ..objects import EvAdventureObject +from .mixins import EvAdventureMixin + + +class _TestQuest(quests.EvAdventureQuest): + """ + Test quest. + + """ + + key = "testquest" + desc = "A test quest!" + + start_step = "A" + end_text = "This task is completed." + + help_A = "You need to do A first." + help_B = "Next, do B." + + def step_A(self, *args, **kwargs): + """ + Quest-step A is completed when quester carries an item with tag "QuestA" and category + "quests". + """ + # note - this could be done with a direct db query instead to avoid a loop, for a + # unit test it's fine though + if any(obj for obj in self.quester.contents if obj.tags.has("QuestA", category="quests")): + self.quester.msg("Completed step A of quest!") + self.current_step = "B" + self.progress() + + def step_B(self, *args, **kwargs): + """ + Quest-step B is completed when the progress-check is called with a special kwarg + "complete_quest_B" + + """ + if kwargs.get("complete_quest_B", False): + self.quester.msg("Completed step B of quest!") + self.quester.db.test_quest_counter = 0 + self.current_step = "C" + self.progress() + + def help_C(self): + """Testing the method-version of getting a help entry""" + return f"Only C left now, {self.quester.key}!" + + def step_C(self, *args, **kwargs): + """ + Step C (final) step of quest completes when a counter on quester is big enough. + + """ + if self.quester.db.test_quest_counter and self.quester.db.test_quest_counter > 5: + self.quester.msg("Quest complete! Get XP rewards!") + self.quester.db.xp += 10 + self.complete() + + def cleanup(self): + """ + Cleanup data related to quest. + + """ + del self.quester.db.test_quest_counter + + +class EvAdventureQuestTest(EvAdventureMixin, BaseEvenniaTest): + """ + Test questing. + + """ + + def setUp(self): + super().setUp() + self.character.quests.add(_TestQuest) + self.character.msg = MagicMock() + + def _get_quest(self): + return self.character.quests.get(_TestQuest.key) + + def _fulfillA(self): + """Fulfill quest step A""" + EvAdventureObject.create( + key="quest obj", location=self.character, tags=(("QuestA", "quests"),) + ) + + def _fulfillC(self): + """Fullfill quest step C""" + self.character.db.test_quest_counter = 6 + + def test_help(self): + """Get help""" + # get help for all quests + help_txt = self.character.quests.get_help() + self.assertEqual(help_txt, ["|ctestquest|n\n A test quest!\n\n - You need to do A first."]) + + # get help for one specific quest + help_txt = self.character.quests.get_help(_TestQuest.key) + self.assertEqual(help_txt, ["|ctestquest|n\n A test quest!\n\n - You need to do A first."]) + + # help for finished quest + self._get_quest().is_completed = True + help_txt = self.character.quests.get_help() + self.assertEqual(help_txt, ["|ctestquest|n\n A test quest!\n\n - This quest is completed!"]) + + def test_progress__fail(self): + """ + Check progress without having any. + """ + # progress all quests + self.character.quests.progress() + # progress one quest + self.character.quests.progress(_TestQuest.key) + + # still on step A + self.assertEqual(self._get_quest().current_step, "A") + + def test_progress(self): + """ + Fulfill the quest steps in sequess + + """ + # A requires a certain object in inventory + self._fulfillA() + self.character.quests.progress() + self.assertEqual(self._get_quest().current_step, "B") + + # B requires progress be called with specific kwarg + # should not step (no kwarg) + self.character.quests.progress() + self.assertEqual(self._get_quest().current_step, "B") + + # should step (kwarg sent) + self.character.quests.progress(complete_quest_B=True) + self.assertEqual(self._get_quest().current_step, "C") + + # C requires a counter Attribute on char be high enough + self._fulfillC() + self.character.quests.progress() + self.assertEqual(self._get_quest().current_step, "C") # still on last step + self.assertEqual(self._get_quest().is_completed, True) From a3205ccf7db8c0268bdc6da6fe724649a7c1b86e Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 24 Jul 2022 08:47:25 +0200 Subject: [PATCH 049/177] Testing adventure dungeon --- .../contrib/tutorials/evadventure/dungeon.py | 87 ++++++++++++----- .../evadventure/tests/test_dungeon.py | 97 +++++++++++++++++++ 2 files changed, 159 insertions(+), 25 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/tests/test_dungeon.py diff --git a/evennia/contrib/tutorials/evadventure/dungeon.py b/evennia/contrib/tutorials/evadventure/dungeon.py index d2926e6206..af30168e05 100644 --- a/evennia/contrib/tutorials/evadventure/dungeon.py +++ b/evennia/contrib/tutorials/evadventure/dungeon.py @@ -19,8 +19,10 @@ from datetime import datetime from math import sqrt from random import randint, random, shuffle -from evennia import AttributeProperty, DefaultExit, DefaultScript -from evennia.utils import create +from evennia.objects.objects import DefaultExit +from evennia.scripts.scripts import DefaultScript +from evennia.typeclasses.attributes import AttributeProperty +from evennia.utils import create, search from evennia.utils.utils import inherits_from from .rooms import EvAdventureDungeonRoom @@ -81,7 +83,7 @@ class EvAdventureDungeonExit(DefaultExit): target was not yet created. """ - if not target_location: + if target_location == self.location: self.destination = target_location = self.dungeon_orchestrator.new_room(self) super().at_traverse(traversing_object, target_location, **kwargs) @@ -99,10 +101,10 @@ class EvAdventureDungeonOrchestrator(DefaultScript): max_new_exits_per_room = 3 rooms = AttributeProperty(list()) - n_unvisited_exits = AttributeProperty(list()) + unvisited_exits = AttributeProperty(list()) highest_depth = AttributeProperty(0) - # (x,y): room + # (x,y): room coordinates used up by orchestrator xy_grid = AttributeProperty(dict()) def register_exit_traversed(self, exit): @@ -119,8 +121,11 @@ class EvAdventureDungeonOrchestrator(DefaultScript): Create outgoing exit from a room. The target room is not yet created. """ - out_exit, _ = EvAdventureDungeonExit.create( - key=exit_direction, location=location, aliases=_EXIT_ALIASES[exit_direction] + out_exit = create.create_object( + EvAdventureDungeonExit, + key=exit_direction, + location=location, + aliases=_EXIT_ALIASES[exit_direction], ) self.unvisited_exits.append(out_exit.id) @@ -130,20 +135,33 @@ class EvAdventureDungeonOrchestrator(DefaultScript): new_room = create.create_object( room_typeclass, key="Dungeon room", - tags=((self.key,),), + tags=((self.key, "dungeon_room"),), attributes=(("xy_coord", coords, "dungeon_xygrid"),), ) return new_room + def delete(self): + """ + Clean up the entire dungeon along with the orchestrator. + + """ + rooms = search.search_object_by_tag(self.key, category="dungeon_room") + for room in rooms: + room.delete() + super().delete() + def new_room(self, from_exit): """ Create a new Dungeon room leading from the provided exit. + Args: + from_exit (Exit): The exit leading to this new room. + """ # figure out coordinate of old room and figure out what coord the # new one would get source_location = from_exit.location - x, y = source_location.get("xy_coord", category="dungeon_xygrid", default=(0, 0)) + x, y = source_location.attributes.get("xy_coord", category="dungeon_xygrid", default=(0, 0)) dx, dy = _EXIT_GRID_SHIFT.get(from_exit.key, (1, 0)) new_x, new_y = (x + dx, y + dy) @@ -157,8 +175,9 @@ class EvAdventureDungeonOrchestrator(DefaultScript): self.xy_grid[(new_x, new_y)] = new_room # always make a return exit back to where we came from - back_exit_key = (_EXIT_REVERSE_MAPPING.get(from_exit.key, "back"),) - EvAdventureDungeonExit( + back_exit_key = _EXIT_REVERSE_MAPPING.get(from_exit.key, "back") + create.create_object( + EvAdventureDungeonExit, key=back_exit_key, aliases=_EXIT_ALIASES.get(back_exit_key, ()), location=new_room, @@ -168,14 +187,14 @@ class EvAdventureDungeonOrchestrator(DefaultScript): # figure out what other exits should be here, if any n_unexplored = len(self.unvisited_exits) - if n_unexplored >= self.max_unexplored_exits: - # no more exits to open - this is a dead end. - return - else: - n_exits = randint(1, min(self.max_new_exits_per_room, n_unexplored)) - back_exit = from_exit.key + + if n_unexplored < self.max_unexplored_exits: + # we have a budget of unexplored exits to open + n_exits = min(self.max_new_exits_per_room, self.max_unexplored_exits) + if n_exits > 1: + n_exits = randint(1, n_exits) available_directions = [ - direction for direction in _EXIT_ALIASES if direction != back_exit + direction for direction in _EXIT_ALIASES if direction != back_exit_key ] # randomize order of exits shuffle(available_directions) @@ -184,11 +203,14 @@ class EvAdventureDungeonOrchestrator(DefaultScript): # get a random direction and check so there isn't a room already # created in that direction direction = available_directions.pop(0) - dx, dy = _EXIT_GRID_SHIFT(direction) + dx, dy = _EXIT_GRID_SHIFT[direction] target_coord = (new_x + dx, new_y + dy) if target_coord not in self.xy_grid: # no room there - make an exit to it self.create_out_exit(new_room, direction) + # we create this to avoid other rooms linking here, but don't create the + # room yet + self.xy_grid[target_coord] = None break self.highest_depth = max(self.highest_depth, depth) @@ -204,8 +226,14 @@ class EvAdventureStartRoomExit(DefaultExit): Traversing this exit will either lead to an existing dungeon branch or create a new one. + Since exits need to have a destination, we start out having them loop back to + the same location and change this whenever someone actually traverse them. The + act of passing through creates a room on the other side. + """ + # we store the orchestrator like this since we don't want to actually manipulate it, + # but only use the reference to know when to create a new room dungeon_orchestrator = AttributeProperty(None, autocreate=False) def reset_exit(self): @@ -213,18 +241,20 @@ class EvAdventureStartRoomExit(DefaultExit): Flush the exit, so next traversal creates a new dungeon branch. """ - self.dungeon_orchestrator = self.destination = None + self.dungeon_orchestrator = None + self.destination = self.location def at_traverse(self, traversing_object, target_location, **kwargs): """ When traversing create a new orchestrator if one is not already assigned. """ - if target_location is None or self.dungeon_orchestrator is None: - self.dungeon_orchestrator, _ = EvAdventureDungeonOrchestrator.create( - f"dungeon_orchestrator_{datetime.utcnow()}", + if target_location == self.location or self.dungeon_orchestrator is None: + self.dungeon_orchestrator = create.create_script( + EvAdventureDungeonOrchestrator, + key=f"dungeon_orchestrator_{self.key}_{datetime.utcnow()}", ) - target_location = self.destination = self.dungeon_orchestrator.new_room(self) + self.destination = target_location = self.dungeon_orchestrator.new_room(self) super().at_traverse(traversing_object, target_location, **kwargs) @@ -235,6 +265,9 @@ class EvAdventureStartRoomResetter(DefaultScript): """ + def at_script_creation(self): + self.key = "evadventure_startroom_resetter" + def at_repeat(self): """ Called every time the script repeats. @@ -259,4 +292,8 @@ class EvAdventureDungeonRoomStart(EvAdventureDungeonRoom): recycle_time = 5 * 60 # seconds def at_object_creation(self): - self.scripts.add(EvAdventureStartRoomResetter, interval=self.recycle_time, autostart=True) + # want to set the script interval on creation time, so we use create_script with obj=self + # instead of self.scripts.add() here + create.create_script( + EvAdventureStartRoomResetter, obj=self, interval=self.recycle_time, autostart=True + ) diff --git a/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py new file mode 100644 index 0000000000..4b04743ad5 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py @@ -0,0 +1,97 @@ +""" +Test Dungeon orchestrator / procedurally generated dungeon rooms. + +""" + +from unittest.mock import MagicMock + +from evennia.utils.create import create_object +from evennia.utils.test_resources import BaseEvenniaTest +from evennia.utils.utils import inherits_from + +from .. import dungeon +from ..rooms import EvAdventureDungeonRoom +from .mixins import EvAdventureMixin + + +class TestDungeon(EvAdventureMixin, BaseEvenniaTest): + """ + Test with a starting room and a character moving through the dungeon, + generating more and more rooms as they go. + + """ + + def setUp(self): + """ + Create a start room with exits leading away from it + + """ + super().setUp() + droomclass = dungeon.EvAdventureDungeonRoomStart + droomclass.recycle_time = 0 # disable the tick + + self.start_room = create_object(droomclass, key="bottom of well") + + self.assertEqual( + self.start_room.scripts.get("evadventure_startroom_resetter")[0].interval, -1 + ) + self.start_north = create_object( + dungeon.EvAdventureStartRoomExit, + key="north", + location=self.start_room, + destination=self.start_room, + ) + self.start_north + self.start_south = create_object( + dungeon.EvAdventureStartRoomExit, + key="south", + location=self.start_room, + destination=self.start_room, + ) + self.character.location = self.start_room + + def _move_character(self, direction): + old_location = self.character.location + for exi in old_location.exits: + if exi.key == direction: + # by setting target to old-location we trigger the + # special behavior of this Exit type + exi.at_traverse(self.character, old_location) + break + return self.character.location + + def test_start_room(self): + """ + Test move through one of the start room exits. + + """ + # begin in start room + self.assertEqual(self.character.location, self.start_room) + + # first go north, this should generate a new room + new_room_north = self._move_character("north") + self.assertNotEqual(self.start_room, new_room_north) + self.assertTrue(inherits_from(new_room_north, EvAdventureDungeonRoom)) + + # check if Orchestrator was created + orchestrator = self.start_north.scripts.get(dungeon.EvAdventureDungeonOrchestrator) + self.assertTrue(bool(orchestrator)) + self.assertTrue(orchestrator.key.startswith("dungeon_orchestrator_north_")) + + def test_different_start_directions(self): + # first go north, this should generate a new room + new_room_north = self._move_character("north") + self.assertNotEqual(self.start_room, new_room_north) + + # back to start room + start_room = self._move_character("south") + self.assertEqual(self.start_room, start_room) + + # next go south, this should generate a new room + new_room_south = self._move_character("south") + self.assertNotEqual(self.start_room, new_room_south) + self.assertNotEqual(new_room_north, new_room_south) + + # back to start room again + start_room = self._move_character("north") + self.assertEqual(self.start_room, start_room) From 7ae1258df18189b1a905e187ccccc661f69762d6 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 24 Jul 2022 12:20:31 +0200 Subject: [PATCH 050/177] Further break out return_appearance functionality into helper hooks --- evennia/objects/objects.py | 414 ++++++++++++++++++++----------------- 1 file changed, 225 insertions(+), 189 deletions(-) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index edc36ed912..966fc150aa 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -314,68 +314,6 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): # main methods - def get_display_name(self, looker=None, **kwargs): - """ - Displays the name of the object in a viewer-aware manner. - - Args: - looker (TypedObject): The object or account that is looking - at/getting inforamtion for this object. - - Returns: - name (str): A string containing the name of the object, - including the DBREF if this user is privileged to control - said object. - - Notes: - This function could be extended to change how object names - appear to users in character, but be wary. This function - does not change an object's keys or aliases when - searching, and is expected to produce something useful for - builders. - - """ - if looker and self.locks.check_lockstring(looker, "perm(Builder)"): - return "{}(#{})".format(self.name, self.id) - return self.name - - def get_numbered_name(self, count, looker, **kwargs): - """ - Return the numbered (singular, plural) forms of this object's key. This is by default called - by return_appearance and is used for grouping multiple same-named of this object. Note that - this will be called on *every* member of a group even though the plural name will be only - shown once. Also the singular display version, such as 'an apple', 'a tree' is determined - from this method. - - Args: - count (int): Number of objects of this type - looker (Object): Onlooker. Not used by default. - Keyword Args: - key (str): Optional key to pluralize, if given, use this instead of the object's key. - Returns: - singular (str): The singular form to display. - plural (str): The determined plural form of the key, including the count. - - """ - plural_category = "plural_key" - key = kwargs.get("key", self.key) - key = ansi.ANSIString(key) # this is needed to allow inflection of colored names - try: - plural = _INFLECT.plural(key, count) - plural = "{} {}".format(_INFLECT.number_to_words(count, threshold=12), plural) - except IndexError: - # this is raised by inflect if the input is not a proper noun - plural = key - singular = _INFLECT.an(key) - if not self.aliases.get(plural, category=plural_category): - # we need to wipe any old plurals/an/a in case key changed in the interrim - self.aliases.clear(category=plural_category) - self.aliases.add(plural, category=plural_category) - # save the singular form as an alias here too so we can display "an egg" and also - # look at 'an egg'. - self.aliases.add(singular, category=plural_category) - return singular, plural - def search( self, searchdata, @@ -1248,6 +1186,225 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): self.at_access(result, accessing_obj, access_type, **kwargs) return result + # name and return_apperance hooks + + def get_display_name(self, looker=None, **kwargs): + """ + Displays the name of the object in a viewer-aware manner. + + Args: + looker (TypedObject): The object or account that is looking + at/getting inforamtion for this object. + + Returns: + name (str): A string containing the name of the object, + including the DBREF if this user is privileged to control + said object. + + Notes: + This function could be extended to change how object names + appear to users in character, but be wary. This function + does not change an object's keys or aliases when + searching, and is expected to produce something useful for + builders. + + """ + if looker and self.locks.check_lockstring(looker, "perm(Builder)"): + return "{}(#{})".format(self.name, self.id) + return self.name + + def get_numbered_name(self, count, looker, **kwargs): + """ + Return the numbered (singular, plural) forms of this object's key. This is by default called + by return_appearance and is used for grouping multiple same-named of this object. Note that + this will be called on *every* member of a group even though the plural name will be only + shown once. Also the singular display version, such as 'an apple', 'a tree' is determined + from this method. + + Args: + count (int): Number of objects of this type + looker (Object): Onlooker. Not used by default. + Keyword Args: + key (str): Optional key to pluralize, if given, use this instead of the object's key. + Returns: + singular (str): The singular form to display. + plural (str): The determined plural form of the key, including the count. + + """ + plural_category = "plural_key" + key = kwargs.get("key", self.key) + key = ansi.ANSIString(key) # this is needed to allow inflection of colored names + try: + plural = _INFLECT.plural(key, count) + plural = "{} {}".format(_INFLECT.number_to_words(count, threshold=12), plural) + except IndexError: + # this is raised by inflect if the input is not a proper noun + plural = key + singular = _INFLECT.an(key) + if not self.aliases.get(plural, category=plural_category): + # we need to wipe any old plurals/an/a in case key changed in the interrim + self.aliases.clear(category=plural_category) + self.aliases.add(plural, category=plural_category) + # save the singular form as an alias here too so we can display "an egg" and also + # look at 'an egg'. + self.aliases.add(singular, category=plural_category) + return singular, plural + + def get_display_header(self, looker, **kwargs): + """ + Get the 'header' component of the object description. Called by `return_appearance`. + + Args: + looker (Object): Object doing the looking. + **kwargs: Arbitrary data for use when overriding. + Returns: + str: The header display string. + + """ + return "" + + def get_display_desc(self, looker, **kwargs): + """ + Get the 'desc' component of the object description. Called by `return_appearance`. + + Args: + looker (Object): Object doing the looking. + **kwargs: Arbitrary data for use when overriding. + Returns: + str: The desc display string.. + + """ + return self.db.desc or "You see nothing special." + + def get_display_exits(self, looker, **kwargs): + """ + Get the 'exits' component of the object description. Called by `return_appearance`. + + Args: + looker (Object): Object doing the looking. + **kwargs: Arbitrary data for use when overriding. + Returns: + str: The exits display data. + + """ + + def _filter_visible(obj_list): + return (obj for obj in obj_list if obj != looker and obj.access(looker, "view")) + + exits = _filter_visible(self.contents_get(content_type="exit")) + exit_names = list_to_string(exi.get_display_name(looker, **kwargs) for exi in exits) + + return f"|wExits:|n {exit_names}" if exit_names else "" + + def get_display_characters(self, looker, **kwargs): + """ + Get the 'characters' component of the object description. Called by `return_appearance`. + + Args: + looker (Object): Object doing the looking. + **kwargs: Arbitrary data for use when overriding. + Returns: + str: The character display data. + + """ + + def _filter_visible(obj_list): + return (obj for obj in obj_list if obj != looker and obj.access(looker, "view")) + + characters = _filter_visible(self.contents_get(content_type="character")) + character_names = list_to_string( + char.get_display_name(looker, **kwargs) for char in characters + ) + + return f"\n|wCharacters:|n {character_names}" if character_names else "" + + def get_display_things(self, looker, **kwargs): + """ + Get the 'things' component of the object description. Called by `return_appearance`. + + Args: + looker (Object): Object doing the looking. + **kwargs: Arbitrary data for use when overriding. + Returns: + str: The things display data. + + """ + + def _filter_visible(obj_list): + return (obj for obj in obj_list if obj != looker and obj.access(looker, "view")) + + # sort and handle same-named things + things = _filter_visible(self.contents_get(content_type="object")) + + grouped_things = defaultdict(list) + for thing in things: + grouped_things[thing.get_display_name(looker, **kwargs)].append(thing) + + thing_names = [] + for thingname, thinglist in sorted(grouped_things.items()): + nthings = len(thinglist) + thing = thinglist[0] + singular, plural = thing.get_numbered_name(nthings, looker, key=thingname) + thing_names.append(singular if nthings == 1 else plural) + thing_names = list_to_string(thing_names) + return f"\n|wYou see:|n {thing_names}" if thing_names else "" + + def get_display_footer(self, looker, **kwargs): + """ + Get the 'footer' component of the object description. Called by `return_appearance`. + + Args: + looker (Object): Object doing the looking. + **kwargs: Arbitrary data for use when overriding. + Returns: + str: The footer display string. + + """ + return "" + + def return_appearance(self, looker, **kwargs): + """ + Main callback used by 'look' for the object to describe itself. + This formats a description. By default, this looks for the `appearance_template` + string set on this class and populates it with formatting keys + 'name', 'desc', 'exits', 'characters', 'things' as well as + (currently empty) 'header'/'footer'. Each of these values are + retrieved by a matching method `.get_display_*`, such as `get_display_name`, + `get_display_footer` etc. + + Args: + looker (Object): Object doing the looking. Passed into all helper methods. + **kwargs (dict): Arbitrary, optional arguments for users + overriding the call. This is passed into all helper methods. + + Returns: + str: The description of this entity. By default this includes + the entity's name, description and any contents inside it. + + Notes: + To simply change the layout of how the object displays itself (like + adding some line decorations or change colors of different sections), + you can simply edit `.appearance_template`. You only need to override + this method (and/or its helpers) if you want to change what is passed + into the template or want the most control over output. + + """ + + if not looker: + return "" + + # populate the appearance_template string. It's a good idea to strip it and + # let the client add any extra spaces instead. + return self.appearance_template.format( + name=self.get_display_name(looker, **kwargs), + desc=self.get_display_desc(looker, **kwargs), + header=self.get_display_header(looker, **kwargs), + footer=self.get_display_footer(looker, **kwargs), + exits=self.get_display_exits(looker, **kwargs), + characters=self.get_display_characters(looker, **kwargs), + things=self.get_display_things(looker, **kwargs), + ).strip() + # # Hook methods # @@ -1624,7 +1781,9 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): } ) - location.msg_contents((string, {"type": move_type}), exclude=(self,), from_obj=self, mapping=mapping) + location.msg_contents( + (string, {"type": move_type}), exclude=(self,), from_obj=self, mapping=mapping + ) def announce_move_to(self, source_location, msg=None, mapping=None, move_type="move", **kwargs): """ @@ -1692,7 +1851,9 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): } ) - destination.msg_contents((string, {"type": move_type}), exclude=(self,), from_obj=self, mapping=mapping) + destination.msg_contents( + (string, {"type": move_type}), exclude=(self,), from_obj=self, mapping=mapping + ) def at_post_move(self, source_location, move_type="move", **kwargs): """ @@ -1857,131 +2018,6 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): """ pass - # hooks called by the default cmdset. - - def get_visible_contents(self, looker, **kwargs): - """ - Get all contents of this object that a looker can see (whatever that means, by default it - checks the 'view' lock), grouped by type. Helper method to return_appearance. - - Args: - looker (Object): The entity looking. - **kwargs (any): Passed from `return_appearance`. Unused by default. - - Returns: - dict: A dict of lists categorized by type. Byt default this - contains 'exits', 'characters' and 'things'. The elements of these - lists are the actual objects. - - """ - - def filter_visible(obj_list): - return [obj for obj in obj_list if obj != looker and obj.access(looker, "view")] - - return { - "exits": filter_visible(self.contents_get(content_type="exit")), - "characters": filter_visible(self.contents_get(content_type="character")), - "things": filter_visible(self.contents_get(content_type="object")), - } - - def get_content_names(self, looker, **kwargs): - """ - Get the proper names for all contents of this object. Helper method - for return_appearance. - - Args: - looker (Object): The entity looking. - **kwargs (any): Passed from `return_appearance`. Passed into - `get_display_name` for each found entity. - - Returns: - dict: A dict of lists categorized by type. Byt default this - contains 'exits', 'characters' and 'things'. The elements - of these lists are strings - names of the objects that - can depend on the looker and also be grouped in the case - of multiple same-named things etc. - - Notes: - This method shouldn't add extra coloring to the names beyond what is - already given by the .get_display_name() (and the .name field) already. - Per-type coloring can be applied in `return_apperance`. - - """ - # a mapping {'exits': [...], 'characters': [...], 'things': [...]} - contents_map = self.get_visible_contents(looker, **kwargs) - - character_names = [ - char.get_display_name(looker, **kwargs) for char in contents_map["characters"] - ] - exit_names = [exi.get_display_name(looker, **kwargs) for exi in contents_map["exits"]] - - # group all same-named things under one name - things = defaultdict(list) - for thing in contents_map["things"]: - things[thing.get_display_name(looker, **kwargs)].append(thing) - - # pluralize same-named things - thing_names = [] - for thingname, thinglist in sorted(things.items()): - nthings = len(thinglist) - thing = thinglist[0] - singular, plural = thing.get_numbered_name(nthings, looker, key=thingname) - thing_names.append(singular if nthings == 1 else plural) - - return {"exits": exit_names, "characters": character_names, "things": thing_names} - - def return_appearance(self, looker, **kwargs): - """ - Main callback used by 'look' for the object to describe itself. - This formats a description. By default, this looks for the `appearance_template` - string set on this class and populates it with formatting keys - 'name', 'desc', 'exits', 'characters', 'things' as well as - (currently empty) 'header'/'footer'. - - Args: - looker (Object): Object doing the looking. - **kwargs (dict): Arbitrary, optional arguments for users - overriding the call. This is passed into the helper - methods and into `get_display_name` calls. - - Returns: - str: The description of this entity. By default this includes - the entity's name, description and any contents inside it. - - Notes: - To simply change the layout of how the object displays itself (like - adding some line decorations or change colors of different sections), - you can simply edit `.appearance_template`. You only need to override - this method (and/or its helpers) if you want to change what is passed - into the template or want the most control over output. - - """ - - if not looker: - return "" - - # ourselves - name = self.get_display_name(looker, **kwargs) - desc = self.db.desc or "You see nothing special." - - # contents - content_names_map = self.get_content_names(looker, **kwargs) - exits = list_to_string(content_names_map["exits"]) - characters = list_to_string(content_names_map["characters"]) - things = list_to_string(content_names_map["things"]) - - # populate the appearance_template string. It's a good idea to strip it and - # let the client add any extra spaces instead. - return self.appearance_template.format( - header="", - name=name, - desc=desc, - exits=f"|wExits:|n {exits}" if exits else "", - characters=f"\n|wCharacters:|n {characters}" if characters else "", - things=f"\n|wYou see:|n {things}" if things else "", - footer="", - ).strip() - def at_look(self, target, **kwargs): """ Called when this object performs a look. It allows to From 3d270341020481c0d096ed32a9a5156593844b4f Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 24 Jul 2022 13:00:30 +0200 Subject: [PATCH 051/177] Fixes to return_appearance helpers and iter_to_str --- evennia/objects/objects.py | 35 ++++++++++++++++++++--------------- evennia/utils/utils.py | 12 ++++++------ 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index 966fc150aa..d147e4e65f 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -24,8 +24,8 @@ from evennia.utils import ansi, create, funcparser, logger, search from evennia.utils.utils import ( class_from_module, is_iter, + iter_to_str, lazy_property, - list_to_string, make_iter, to_str, variable_from_module, @@ -1194,19 +1194,18 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): Args: looker (TypedObject): The object or account that is looking - at/getting inforamtion for this object. + at/getting inforamtion for this object. If not given, `.name` will be + returned, which can in turn be used to display colored data. Returns: - name (str): A string containing the name of the object, - including the DBREF if this user is privileged to control - said object. + str: A name to display for this object. This can contain color codes and may + be customized based on `looker`. By default this contains the `.key` of the object, + followed by the DBREF if this user is privileged to control said object. Notes: - This function could be extended to change how object names - appear to users in character, but be wary. This function - does not change an object's keys or aliases when - searching, and is expected to produce something useful for - builders. + This function could be extended to change how object names appear to users in character, + but be wary. This function does not change an object's keys or aliases when searching, + and is expected to produce something useful for builders. """ if looker and self.locks.check_lockstring(looker, "perm(Builder)"): @@ -1224,11 +1223,17 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): Args: count (int): Number of objects of this type looker (Object): Onlooker. Not used by default. + Keyword Args: key (str): Optional key to pluralize, if given, use this instead of the object's key. + Returns: - singular (str): The singular form to display. - plural (str): The determined plural form of the key, including the count. + tuple: This is a tuple `(str, str)` with the singular and plural forms of the key + including the count. + + Examples: + :: + obj.get_numbered_name(3, looker, key="foo") -> ("a foo", "three foos") """ plural_category = "plural_key" @@ -1292,7 +1297,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): return (obj for obj in obj_list if obj != looker and obj.access(looker, "view")) exits = _filter_visible(self.contents_get(content_type="exit")) - exit_names = list_to_string(exi.get_display_name(looker, **kwargs) for exi in exits) + exit_names = iter_to_str(exi.get_display_name(looker, **kwargs) for exi in exits) return f"|wExits:|n {exit_names}" if exit_names else "" @@ -1312,7 +1317,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): return (obj for obj in obj_list if obj != looker and obj.access(looker, "view")) characters = _filter_visible(self.contents_get(content_type="character")) - character_names = list_to_string( + character_names = iter_to_str( char.get_display_name(looker, **kwargs) for char in characters ) @@ -1346,7 +1351,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): thing = thinglist[0] singular, plural = thing.get_numbered_name(nthings, looker, key=thingname) thing_names.append(singular if nthings == 1 else plural) - thing_names = list_to_string(thing_names) + thing_names = iter_to_str(thing_names) return f"\n|wYou see:|n {thing_names}" if thing_names else "" def get_display_footer(self, looker, **kwargs): diff --git a/evennia/utils/utils.py b/evennia/utils/utils.py index 25265c0c96..4af0f34f0a 100644 --- a/evennia/utils/utils.py +++ b/evennia/utils/utils.py @@ -386,22 +386,22 @@ def iter_to_str(iterable, sep=",", endsep=", and", addquote=False): Examples: ```python - >>> list_to_string([1,2,3], endsep=',') + >>> iter_to_string([1,2,3], endsep=',') '1, 2, 3' - >>> list_to_string([1,2,3], endsep='') + >>> iter_to_string([1,2,3], endsep='') '1, 2 3' - >>> list_to_string([1,2,3], ensdep='and') + >>> iter_to_string([1,2,3], ensdep='and') '1, 2 and 3' - >>> list_to_string([1,2,3], sep=';', endsep=';') + >>> iter_to_string([1,2,3], sep=';', endsep=';') '1; 2; 3' - >>> list_to_string([1,2,3], addquote=True) + >>> iter_to_string([1,2,3], addquote=True) '"1", "2", and "3"' ``` """ + iterable = list(make_iter(iterable)) if not iterable: return "" - iterable = list(make_iter(iterable)) len_iter = len(iterable) if addquote: From 5b43a4bc1ff85aa6f92bc44becbd483ac91f18b1 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 24 Jul 2022 13:01:01 +0200 Subject: [PATCH 052/177] More dungeon code --- .../contrib/tutorials/evadventure/dungeon.py | 48 ++++++++++++------- .../contrib/tutorials/evadventure/rooms.py | 28 ++++++++++- .../evadventure/tests/test_dungeon.py | 4 +- evennia/objects/models.py | 8 ++-- 4 files changed, 64 insertions(+), 24 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/dungeon.py b/evennia/contrib/tutorials/evadventure/dungeon.py index af30168e05..717133b678 100644 --- a/evennia/contrib/tutorials/evadventure/dungeon.py +++ b/evennia/contrib/tutorials/evadventure/dungeon.py @@ -75,7 +75,12 @@ class EvAdventureDungeonExit(DefaultExit): """ - dungeon_orchestrator = AttributeProperty(None, autocreate=False) + def at_object_creation(self): + """ + We want to block progressing forward unless the room is clear. + + """ + self.locks.add("traverse:not tag(not_clear, dungeon_room)") def at_traverse(self, traversing_object, target_location, **kwargs): """ @@ -84,7 +89,9 @@ class EvAdventureDungeonExit(DefaultExit): """ if target_location == self.location: - self.destination = target_location = self.dungeon_orchestrator.new_room(self) + self.destination = target_location = self.location.db.dungeon_orchestrator.new_room( + self + ) super().at_traverse(traversing_object, target_location, **kwargs) @@ -129,14 +136,16 @@ class EvAdventureDungeonOrchestrator(DefaultScript): ) self.unvisited_exits.append(out_exit.id) - def _generate_room(self, depth, coords): + def _generate_dungeon_room(self, depth, coords): # TODO - determine what type of room to create here based on location and depth room_typeclass = EvAdventureDungeonRoom new_room = create.create_object( room_typeclass, key="Dungeon room", - tags=((self.key, "dungeon_room"),), - attributes=(("xy_coord", coords, "dungeon_xygrid"),), + attributes=( + ("xy_coords", coords, "dungeon_xygrid"), + ("dungeon_orchestrator", self), + ), ) return new_room @@ -170,7 +179,7 @@ class EvAdventureDungeonOrchestrator(DefaultScript): # depth achieved. depth = int(sqrt(new_x**2 + new_y**2)) - new_room = self._generate_room(depth, (new_x, new_y)) + new_room = self._generate_dungeon_room(depth, (new_x, new_y)) self.xy_grid[(new_x, new_y)] = new_room @@ -182,7 +191,14 @@ class EvAdventureDungeonOrchestrator(DefaultScript): aliases=_EXIT_ALIASES.get(back_exit_key, ()), location=new_room, destination=from_exit.location, - attributes=(("desc", "A dark passage."),), + attributes=( + ( + "desc", + "A dark passage.", + ), + ), + # we default to allowing back-tracking (also used for fleeing) + locks=("traverse: true()",), ) # figure out what other exits should be here, if any @@ -205,8 +221,8 @@ class EvAdventureDungeonOrchestrator(DefaultScript): direction = available_directions.pop(0) dx, dy = _EXIT_GRID_SHIFT[direction] target_coord = (new_x + dx, new_y + dy) - if target_coord not in self.xy_grid: - # no room there - make an exit to it + if target_coord not in self.xy_grid and target_coord != (0, 0): + # no room there (and not back to start room) - make an exit to it self.create_out_exit(new_room, direction) # we create this to avoid other rooms linking here, but don't create the # room yet @@ -215,6 +231,8 @@ class EvAdventureDungeonOrchestrator(DefaultScript): self.highest_depth = max(self.highest_depth, depth) + return new_room + # -------------------------------------------------- # Start room @@ -232,16 +250,11 @@ class EvAdventureStartRoomExit(DefaultExit): """ - # we store the orchestrator like this since we don't want to actually manipulate it, - # but only use the reference to know when to create a new room - dungeon_orchestrator = AttributeProperty(None, autocreate=False) - def reset_exit(self): """ Flush the exit, so next traversal creates a new dungeon branch. """ - self.dungeon_orchestrator = None self.destination = self.location def at_traverse(self, traversing_object, target_location, **kwargs): @@ -249,12 +262,13 @@ class EvAdventureStartRoomExit(DefaultExit): When traversing create a new orchestrator if one is not already assigned. """ - if target_location == self.location or self.dungeon_orchestrator is None: - self.dungeon_orchestrator = create.create_script( + if target_location == self.location: + # make a global orchestrator script for this dungeon branch + dungeon_orchestrator = create.create_script( EvAdventureDungeonOrchestrator, key=f"dungeon_orchestrator_{self.key}_{datetime.utcnow()}", ) - self.destination = target_location = self.dungeon_orchestrator.new_room(self) + self.destination = target_location = dungeon_orchestrator.new_room(self) super().at_traverse(traversing_object, target_location, **kwargs) diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py index 241b063633..f7be9c705a 100644 --- a/evennia/contrib/tutorials/evadventure/rooms.py +++ b/evennia/contrib/tutorials/evadventure/rooms.py @@ -5,7 +5,7 @@ EvAdventure rooms. """ -from evennia import DefaultRoom +from evennia import AttributeProperty, DefaultRoom, TagProperty class EvAdventureRoom(DefaultRoom): @@ -37,3 +37,29 @@ class EvAdventureDungeonRoom(EvAdventureRoom): allow_combat = True allow_death = True + + # dungeon generation attributes; set when room is created + back_exit = AttributeProperty(None, autocreate=False) + dungeon_orchestrator = AttributeProperty(None, autocreate=False) + xy_coords = AttributeProperty(None, autocreate=False) + + def at_object_creation(self): + """ + Set the `not_clear` tag on the room. This is removed when the room is + 'cleared', whatever that means for each room. + + We put this here rather than in the room-creation code so we can override + easier (for example we may want an empty room which auto-clears). + + """ + self.tags.add("not_clear") + + def get_display_footer(self, looker, **kwargs): + """ + Show if the room is 'cleared' or not as part of its description. + + """ + if self.tags.get("not_clear", "dungeon_room"): + # this tag is cleared when the room is resolved, whatever that means. + return "|rThe path forwards is blocked!|n" + return "" diff --git a/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py index 4b04743ad5..ec0f94947f 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py @@ -56,7 +56,7 @@ class TestDungeon(EvAdventureMixin, BaseEvenniaTest): if exi.key == direction: # by setting target to old-location we trigger the # special behavior of this Exit type - exi.at_traverse(self.character, old_location) + exi.at_traverse(self.character, exi.destination) break return self.character.location @@ -74,7 +74,7 @@ class TestDungeon(EvAdventureMixin, BaseEvenniaTest): self.assertTrue(inherits_from(new_room_north, EvAdventureDungeonRoom)) # check if Orchestrator was created - orchestrator = self.start_north.scripts.get(dungeon.EvAdventureDungeonOrchestrator) + orchestrator = new_room_north.db.dungeon_orchestrator self.assertTrue(bool(orchestrator)) self.assertTrue(orchestrator.key.startswith("dungeon_orchestrator_north_")) diff --git a/evennia/objects/models.py b/evennia/objects/models.py index e5efa66c58..a282bafe0f 100644 --- a/evennia/objects/models.py +++ b/evennia/objects/models.py @@ -14,15 +14,15 @@ the database object. Like everything else, they can be accessed transparently through the decorating TypeClass. """ from collections import defaultdict + from django.conf import settings -from django.db import models from django.core.exceptions import ObjectDoesNotExist from django.core.validators import validate_comma_separated_integer_list - -from evennia.typeclasses.models import TypedObject +from django.db import models from evennia.objects.manager import ObjectDBManager +from evennia.typeclasses.models import TypedObject from evennia.utils import logger -from evennia.utils.utils import make_iter, dbref, lazy_property +from evennia.utils.utils import dbref, lazy_property, make_iter class ContentsHandler: From b6533d07443d62c9acb381a43d87538cbc5bfd42 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 24 Jul 2022 20:26:41 +0200 Subject: [PATCH 053/177] Fix dungeon behavior --- .../tutorials/evadventure/build_techdemo.py | 75 +++++- .../contrib/tutorials/evadventure/dungeon.py | 246 +++++++++++++++--- .../contrib/tutorials/evadventure/rooms.py | 31 +-- .../evadventure/tests/test_dungeon.py | 6 +- evennia/locks/lockfuncs.py | 30 +++ 5 files changed, 314 insertions(+), 74 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/build_techdemo.py b/evennia/contrib/tutorials/evadventure/build_techdemo.py index e6a763e9bf..b7e2ad2bf8 100644 --- a/evennia/contrib/tutorials/evadventure/build_techdemo.py +++ b/evennia/contrib/tutorials/evadventure/build_techdemo.py @@ -20,16 +20,12 @@ You can also build/rebuild individiaul #CODE blocks in the `batchcode/interactiv # this is loaded at the top of every #CODE block from evennia import DefaultExit, create_object, search_object -from evennia.contrib.tutorials import evadventure from evennia.contrib.tutorials.evadventure import npcs -from evennia.contrib.tutorials.evadventure.combat_turnbased import EvAdventureCombatHandler -from evennia.contrib.tutorials.evadventure.objects import ( - EvAdventureConsumable, - EvAdventureObject, - EvAdventureObjectFiller, - EvAdventureRunestone, - EvAdventureWeapon, +from evennia.contrib.tutorials.evadventure.dungeon import ( + EvAdventureDungeonStartRoom, + EvAdventureDungeonStartRoomExit, ) +from evennia.contrib.tutorials.evadventure.objects import EvAdventureWeapon from evennia.contrib.tutorials.evadventure.rooms import EvAdventurePvPRoom, EvAdventureRoom # CODE @@ -66,7 +62,7 @@ create_object( # with a static enemy combat_room = create_object(EvAdventurePvPRoom, key="Combat Arena", aliases=("evtechdemo#01",)) -# link to/back to hub +# link to/back to/from hub hub_room = search_object("evtechdemo#00")[0] create_object( DefaultExit, key="combat test", aliases=("combat",), location=hub_room, destination=combat_room @@ -84,3 +80,64 @@ combat_room_enemy = create_object( ) weapon_stick = create_object(EvAdventureWeapon, key="stick", attributes=(("damage_roll", "1d2"),)) combat_room_enemy.weapon = weapon_stick + + +# CODE + +# A dungeon start room for testing the dynamic dungeon generation. + +dungeon_start_room = create_object( + EvAdventureDungeonStartRoom, + key="Dungeon start room", + aliases=("evtechdemo#02",), + attributes=(("desc", "A central room, with dark exits leading to mysterious fates."),), +) +# link to/back to/from hub +hub_room = search_object("evtechdemo#00")[0] +create_object( + DefaultExit, + key="dungeon test", + aliases=("dungeon",), + location=hub_room, + destination=dungeon_start_room, +) +create_object( + DefaultExit, + key="Back to Hub", + aliases=("back", "hub"), + location=dungeon_start_room, + destination=hub_room, +) + +# add special exits out of the dungeon start room. +# These must have one of the 8 cardinal directions +# we point these exits back to the same location, which +# is what the system will use to trigger generating a new room +create_object( + EvAdventureDungeonStartRoomExit, + key="north", + aliases=("n",), + location=dungeon_start_room, + destination=dungeon_start_room, +) +create_object( + EvAdventureDungeonStartRoomExit, + key="east", + aliases=("e",), + location=dungeon_start_room, + destination=dungeon_start_room, +) +create_object( + EvAdventureDungeonStartRoomExit, + key="south", + aliases=("s",), + location=dungeon_start_room, + destination=dungeon_start_room, +) +create_object( + EvAdventureDungeonStartRoomExit, + key="west", + aliases=("w",), + location=dungeon_start_room, + destination=dungeon_start_room, +) diff --git a/evennia/contrib/tutorials/evadventure/dungeon.py b/evennia/contrib/tutorials/evadventure/dungeon.py index 717133b678..de60178862 100644 --- a/evennia/contrib/tutorials/evadventure/dungeon.py +++ b/evennia/contrib/tutorials/evadventure/dungeon.py @@ -13,9 +13,14 @@ decided to go in that direction. Each room is tagged with the specific 'instance id of that particular branch of dungon. When no characters remain in the branch, the branch is deleted. +Each room in the dungeon starts with a Tag `not_clear`; while this is set, all exits out +of the room (not the one they came from) is blocked. When whatever problem the room +offers has been solved (such as a puzzle or a battle), the tag is removed and the player(s) +can choose which exit to leave through. + """ -from datetime import datetime +from datetime import datetime, timedelta from math import sqrt from random import randint, random, shuffle @@ -25,12 +30,21 @@ from evennia.typeclasses.attributes import AttributeProperty from evennia.utils import create, search from evennia.utils.utils import inherits_from -from .rooms import EvAdventureDungeonRoom +from .rooms import EvAdventureRoom # aliases for cardinal directions +_AVAILABLE_DIRECTIONS = [ + "north", + "east", + "south", + "west", + # commented out to make the dungeon simpler to navigate + # "northeast", "southeast", "southwest", "northwest", +] + _EXIT_ALIASES = { "north": ("n",), - "east": ("w",), + "east": ("e",), "south": ("s",), "west": ("w",), "northeast": ("ne",), @@ -64,10 +78,53 @@ _EXIT_GRID_SHIFT = { # -------------------------------------------------- -# Dungeon orchestrator and rooms +# Dungeon orchestrator and room / exits # -------------------------------------------------- +class EvAdventureDungeonRoom(EvAdventureRoom): + """ + Dangerous dungeon room. + + """ + + allow_combat = True + allow_death = True + + # dungeon generation attributes; set when room is created + back_exit = AttributeProperty(None, autocreate=False) + dungeon_orchestrator = AttributeProperty(None, autocreate=False) + xy_coords = AttributeProperty(None, autocreate=False) + + @property + def is_room_clear(self): + return not bool(self.tags.get("not_clear", category="dungeon_room")) + + def clear_room(self): + self.tags.remove("not_clear", category="dungeon_room") + + def at_object_creation(self): + """ + Set the `not_clear` tag on the room. This is removed when the room is + 'cleared', whatever that means for each room. + + We put this here rather than in the room-creation code so we can override + easier (for example we may want an empty room which auto-clears). + + """ + self.tags.add("not_clear", category="dungeon_room") + + def get_display_footer(self, looker, **kwargs): + """ + Show if the room is 'cleared' or not as part of its description. + + """ + if self.is_room_clear: + return "" + else: + return "|rThe path forwards is blocked!|n" + + class EvAdventureDungeonExit(DefaultExit): """ Dungeon exit. This will not create the target room until it's traversed. @@ -80,7 +137,7 @@ class EvAdventureDungeonExit(DefaultExit): We want to block progressing forward unless the room is clear. """ - self.locks.add("traverse:not tag(not_clear, dungeon_room)") + self.locks.add("traverse:not objloctag(not_clear, dungeon_room)") def at_traverse(self, traversing_object, target_location, **kwargs): """ @@ -92,8 +149,60 @@ class EvAdventureDungeonExit(DefaultExit): self.destination = target_location = self.location.db.dungeon_orchestrator.new_room( self ) + if self.id in self.location.dungeon_orchestrator.unvisited_exits: + self.location.dungeon_orchestrator.unvisited_exits.remove(self.id) + super().at_traverse(traversing_object, target_location, **kwargs) + def at_failed_traverse(self, traversing_object, **kwargs): + """ + Called when failing to traverse. + + """ + traversing_object.msg("You can't get through this way yet!") + + +def room_generator(dungeon_orchestrator, depth, coords): + """ + Plugin room generator + + This default one returns the same empty room. + + Args: + dungeon_orchestrator (EvAdventureDungeonOrchestrator): The current orchestrator. + depth (int): The 'depth' of the dungeon (radial distance from start room) this + new room will be placed at. + coords (tuple): The `(x,y)` coords that the new room will be created at. + + """ + room_typeclass = EvAdventureDungeonRoom + + # simple map of depth to name and desc of room + name_depth_map = { + 1: ("Water-logged passage", "This earth-walled passage is dripping of water."), + 2: ("Passage with roots", "Roots are pushing through the earth walls."), + 3: ("Hardened clay passage", "The walls of this passage is of hardened clay."), + 4: ("Clay with stones", "This passage has clay with pieces of stone embedded."), + 5: ("Stone passage", "Walls are crumbling stone, with roots passing through it."), + 6: ("Stone hallway", "Walls are cut from rough stone."), + 7: ("Stone rooms", "A stone room, built from crude and heavy blocks."), + 8: ("Granite hall", "The walls are of well-fitted granite blocks."), + 9: ("Marble passages", "The walls are blank and shiny marble."), + 10: ("Furnished rooms", "The marble walls have tapestries and furnishings."), + } + key, desc = name_depth_map.get(depth, ("Dark rooms", "There is very dark here.")) + + new_room = create.create_object( + room_typeclass, + key=key, + attributes=( + ("desc", desc), + ("xy_coords", coords), + ("dungeon_orchestrator", dungeon_orchestrator), + ), + ) + return new_room + class EvAdventureDungeonOrchestrator(DefaultScript): """ @@ -104,15 +213,22 @@ class EvAdventureDungeonOrchestrator(DefaultScript): """ # this determines how branching the dungeon will be - max_unexplored_exits = 5 - max_new_exits_per_room = 3 + max_unexplored_exits = 2 + max_new_exits_per_room = 2 rooms = AttributeProperty(list()) unvisited_exits = AttributeProperty(list()) highest_depth = AttributeProperty(0) + last_updated = AttributeProperty(datetime.utcnow()) + + # the room-generator function; copied from the same-name value on the start-room when the + # orchestrator is first created + room_generator = AttributeProperty(None, autocreate=False) + # (x,y): room coordinates used up by orchestrator xy_grid = AttributeProperty(dict()) + start_room = AttributeProperty(None, autocreate=False) def register_exit_traversed(self, exit): """ @@ -136,27 +252,29 @@ class EvAdventureDungeonOrchestrator(DefaultScript): ) self.unvisited_exits.append(out_exit.id) - def _generate_dungeon_room(self, depth, coords): - # TODO - determine what type of room to create here based on location and depth - room_typeclass = EvAdventureDungeonRoom - new_room = create.create_object( - room_typeclass, - key="Dungeon room", - attributes=( - ("xy_coords", coords, "dungeon_xygrid"), - ("dungeon_orchestrator", self), - ), - ) - return new_room - def delete(self): """ Clean up the entire dungeon along with the orchestrator. """ + # first secure all characters in this branch back to the start room + characters = search.search_object_by_tag(self.key, category="dungeon_character") + start_room = self.start_room + for character in characters: + start_room.msg_contents( + "Suddenly someone stumbles out of a dark exit, covered in dust!" + ) + character.location = start_room + character.msg( + "|rAfter a long time of silence, the room suddenly rumbles and then collapses! " + "All turns dark ...|n\n\nThen you realize you are back where you started." + ) + character.tags.remove(self.key, category="dungeon_character") + # next delete all rooms in the dungeon (this will also delete exits) rooms = search.search_object_by_tag(self.key, category="dungeon_room") for room in rooms: room.delete() + # finally delete the orchestrator itself super().delete() def new_room(self, from_exit): @@ -167,11 +285,12 @@ class EvAdventureDungeonOrchestrator(DefaultScript): from_exit (Exit): The exit leading to this new room. """ + self.last_updated = datetime.utcnow() # figure out coordinate of old room and figure out what coord the # new one would get source_location = from_exit.location - x, y = source_location.attributes.get("xy_coord", category="dungeon_xygrid", default=(0, 0)) - dx, dy = _EXIT_GRID_SHIFT.get(from_exit.key, (1, 0)) + x, y = source_location.attributes.get("xy_coords", default=(0, 0)) + dx, dy = _EXIT_GRID_SHIFT.get(from_exit.key, (0, 1)) new_x, new_y = (x + dx, y + dy) # the dungeon's depth acts as a measure of the current difficulty level. This is the radial @@ -179,7 +298,7 @@ class EvAdventureDungeonOrchestrator(DefaultScript): # depth achieved. depth = int(sqrt(new_x**2 + new_y**2)) - new_room = self._generate_dungeon_room(depth, (new_x, new_y)) + new_room = self.room_generator(self, depth, (new_x, new_y)) self.xy_grid[(new_x, new_y)] = new_room @@ -210,7 +329,7 @@ class EvAdventureDungeonOrchestrator(DefaultScript): if n_exits > 1: n_exits = randint(1, n_exits) available_directions = [ - direction for direction in _EXIT_ALIASES if direction != back_exit_key + direction for direction in _AVAILABLE_DIRECTIONS if direction != back_exit_key ] # randomize order of exits shuffle(available_directions) @@ -239,7 +358,7 @@ class EvAdventureDungeonOrchestrator(DefaultScript): # -------------------------------------------------- -class EvAdventureStartRoomExit(DefaultExit): +class EvAdventureDungeonStartRoomExit(DefaultExit): """ Traversing this exit will either lead to an existing dungeon branch or create a new one. @@ -264,11 +383,18 @@ class EvAdventureStartRoomExit(DefaultExit): """ if target_location == self.location: # make a global orchestrator script for this dungeon branch + self.location.room_generator dungeon_orchestrator = create.create_script( EvAdventureDungeonOrchestrator, key=f"dungeon_orchestrator_{self.key}_{datetime.utcnow()}", + attributes=( + ("start_room", self.location), + ("room_generator", self.location.room_generator), + ), ) self.destination = target_location = dungeon_orchestrator.new_room(self) + # make sure to tag character when entering so we can find them again later + traversing_object.tags.add(dungeon_orchestrator.key, category="dungeon_character") super().at_traverse(traversing_object, target_location, **kwargs) @@ -280,7 +406,7 @@ class EvAdventureStartRoomResetter(DefaultScript): """ def at_script_creation(self): - self.key = "evadventure_startroom_resetter" + self.key = "evadventure_dungeon_startroom_resetter" def at_repeat(self): """ @@ -289,21 +415,63 @@ class EvAdventureStartRoomResetter(DefaultScript): """ room = self.obj for exi in room.exits: - if inherits_from(exi, EvAdventureStartRoomExit) and random() < 0.5: + if inherits_from(exi, EvAdventureDungeonStartRoomExit) and random() < 0.5: exi.reset_exit() -class EvAdventureDungeonRoomStart(EvAdventureDungeonRoom): +class EvAdventureDungeonBranchDeleter(DefaultScript): """ - Exits leading out of the start room, (except one leading outside) will lead to a different - dungeon-branch, and after a certain time, the given exit will instead spawn a new branch. This - room is responsible for cycling these exits regularly. + Cleanup script. After some time a dungeon branch will 'collapse', forcing all players in it + back to the start room. + + """ + + # set at creation time when the start room is created + branch_max_life = AttributeProperty(0, autocreate=False) + + def at_script_creation(self): + self.key = "evadventure_dungeon_branch_deleter" + + def at_repeat(self): + """ + Go through all dungeon-orchestrators and find which ones are too old. + + """ + max_dt = timedelta(seconds=self.branch_max_life) + max_allowed_date = datetime.utcnow() - max_dt + + for orchestrator in EvAdventureDungeonOrchestrator.objects.all(): + if orchestrator.last_updated < max_allowed_date: + # orchestrator is too old; tell it to clean up and delete itself + orchestrator.delete() + + +class EvAdventureDungeonStartRoom(EvAdventureDungeonRoom): + """ + The start room is the only permanent part of the dungeon. Exits leading from this room (except + one leading back outside) each create/links to a separate dungeon branch/instance. + + - A script will reset each exit every 5 mins; after that time, entering the exit will spawn + a new branch-instance instead of leading to the one before. + - Another script will check age of branch instance every hour; once an instance has been + inactive for a week, it will 'collapse', forcing everyone inside back to the start room. The actual exits should be created in the build script. """ - recycle_time = 5 * 60 # seconds + recycle_time = 60 * 5 # 5 mins + branch_check_time = 60 * 60 # one hour + branch_max_life = 60 * 60 * 24 * 7 # 1 week + + # allow for a custom room_generator function + room_generator = AttributeProperty(room_generator, autocreate=False) + + def get_display_footer(self, looker, **kwargs): + return ( + "|yYou sense that if you want to team up, " + "you must all pick the same path from here ... or you'll quickly get separated.|n" + ) def at_object_creation(self): # want to set the script interval on creation time, so we use create_script with obj=self @@ -311,3 +479,17 @@ class EvAdventureDungeonRoomStart(EvAdventureDungeonRoom): create.create_script( EvAdventureStartRoomResetter, obj=self, interval=self.recycle_time, autostart=True ) + create.create_script( + EvAdventureDungeonBranchDeleter, + obj=self, + interval=self.branch_check_time, + autostart=True, + attributes=(("branch_max_life", self.branch_max_life),), + ) + + def at_object_receive(self, obj, source_location, **kwargs): + """ + Make sure to clean the dungeon branch-tag from characters when leaving a dungeon branch. + + """ + obj.tags.remove(category="dungeon_character") diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py index f7be9c705a..4bed2437db 100644 --- a/evennia/contrib/tutorials/evadventure/rooms.py +++ b/evennia/contrib/tutorials/evadventure/rooms.py @@ -28,38 +28,9 @@ class EvAdventurePvPRoom(DefaultRoom): allow_combat = True allow_pvp = True - -class EvAdventureDungeonRoom(EvAdventureRoom): - """ - Dangerous dungeon room. - - """ - - allow_combat = True - allow_death = True - - # dungeon generation attributes; set when room is created - back_exit = AttributeProperty(None, autocreate=False) - dungeon_orchestrator = AttributeProperty(None, autocreate=False) - xy_coords = AttributeProperty(None, autocreate=False) - - def at_object_creation(self): - """ - Set the `not_clear` tag on the room. This is removed when the room is - 'cleared', whatever that means for each room. - - We put this here rather than in the room-creation code so we can override - easier (for example we may want an empty room which auto-clears). - - """ - self.tags.add("not_clear") - def get_display_footer(self, looker, **kwargs): """ Show if the room is 'cleared' or not as part of its description. """ - if self.tags.get("not_clear", "dungeon_room"): - # this tag is cleared when the room is resolved, whatever that means. - return "|rThe path forwards is blocked!|n" - return "" + return "|yNon-lethal PvP combat is allowed here!|n" diff --git a/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py index ec0f94947f..a0290e8807 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py @@ -27,7 +27,7 @@ class TestDungeon(EvAdventureMixin, BaseEvenniaTest): """ super().setUp() - droomclass = dungeon.EvAdventureDungeonRoomStart + droomclass = dungeon.EvAdventureDungeonStartRoom droomclass.recycle_time = 0 # disable the tick self.start_room = create_object(droomclass, key="bottom of well") @@ -36,14 +36,14 @@ class TestDungeon(EvAdventureMixin, BaseEvenniaTest): self.start_room.scripts.get("evadventure_startroom_resetter")[0].interval, -1 ) self.start_north = create_object( - dungeon.EvAdventureStartRoomExit, + dungeon.EvAdventureDungeonStartRoomExit, key="north", location=self.start_room, destination=self.start_room, ) self.start_north self.start_south = create_object( - dungeon.EvAdventureStartRoomExit, + dungeon.EvAdventureDungeonStartRoomExit, key="south", location=self.start_room, destination=self.start_room, diff --git a/evennia/locks/lockfuncs.py b/evennia/locks/lockfuncs.py index b3d3de0a5e..da4d47b03f 100644 --- a/evennia/locks/lockfuncs.py +++ b/evennia/locks/lockfuncs.py @@ -15,6 +15,7 @@ a certain object type. from ast import literal_eval + from django.conf import settings from evennia.utils import utils @@ -466,6 +467,7 @@ def tag(accessing_obj, accessed_obj, *args, **kwargs): category. If accessing_obj has the ".obj" property (such as is the case for a command), then accessing_obj.obj is used instead. + """ if hasattr(accessing_obj, "obj"): accessing_obj = accessing_obj.obj @@ -474,6 +476,34 @@ def tag(accessing_obj, accessed_obj, *args, **kwargs): return bool(accessing_obj.tags.get(tagkey, category=category)) +def objtag(accessing_obj, accessed_obj, *args, **kwargs): + """ + Usage: + objtag(tagkey) + objtag(tagkey, category): + + Only true if `accessed_obj` has the given tag and optional category. + + """ + return tag(accessed_obj, None, *args, **kwargs) + + +def objloctag(accessing_obj, accessed_obj, *args, **kwargs): + """ + Usage: + objloctag(tagkey) + objloctag(tagkey, category): + + Only true if `accessed_obj.location` has the given tag and optional category. + If obj has no location, this lockfunc fails. + + """ + try: + return tag(accessed_obj.location, None, *args, **kwargs) + except AttributeError: + return False + + def is_ooc(accessing_obj, accessed_obj, *args, **kwargs): """ Usage: From 2f28c8982dc3299e9eda29af0c429dbdd1a4b28c Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 24 Jul 2022 22:30:13 +0200 Subject: [PATCH 054/177] Made simple map, start shops --- .../contrib/tutorials/evadventure/enums.py | 17 +++ .../contrib/tutorials/evadventure/objects.py | 132 ++++++++++++++---- .../contrib/tutorials/evadventure/rooms.py | 56 +++++++- .../contrib/tutorials/evadventure/shops.py | 36 +++++ evennia/objects/objects.py | 39 ++++-- 5 files changed, 242 insertions(+), 38 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/shops.py diff --git a/evennia/contrib/tutorials/evadventure/enums.py b/evennia/contrib/tutorials/evadventure/enums.py index 928aec3ed2..9253c79976 100644 --- a/evennia/contrib/tutorials/evadventure/enums.py +++ b/evennia/contrib/tutorials/evadventure/enums.py @@ -69,3 +69,20 @@ class WieldLocation(Enum): # combat-related OPTIMAL_DISTANCE = "optimal_distance" SUBOPTIMAL_DISTANCE = "suboptimal_distance" + + +class ObjType(Enum): + """ + Object types + + """ + + WEAPON = "weapon" + ARMOR = "armor" + SHIELD = "shield" + HELMET = "helmet" + CONSUMABLE = "consumable" + GEAR = "gear" + MAGIC = "magic" + QUEST = "quest" + TREASURE = "treasure" diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index 1e31c1600f..afd08d181e 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -3,14 +3,26 @@ All items in the game inherit from a base object. The properties (what you can d with an object, such as wear, wield, eat, drink, kill etc) are all controlled by Tags. +Every object has one of a few `obj_type`-category tags: +- weapon +- armor +- shield +- helmet +- consumable (potions, torches etc) +- magic (runestones, magic items) +- quest (quest-items) +- treasure (valuable to sell) +It's possible for an item to have more than one tag, such as a golden helmet (helmet+treasure) or +rune sword (weapon+quest). """ +from evennia import AttributeProperty, TagProperty from evennia.objects.objects import DefaultObject -from evennia.typeclasses.attributes import AttributeProperty +from evennia.utils.utils import make_iter -from .enums import Ability, WieldLocation +from .enums import Ability, ObjType, WieldLocation class EvAdventureObject(DefaultObject): @@ -23,15 +35,23 @@ class EvAdventureObject(DefaultObject): inventory_use_slot = AttributeProperty(WieldLocation.BACKPACK) # how many inventory slots it uses (can be a fraction) size = AttributeProperty(1) - armor = AttributeProperty(0) - # items that are usable (like potions) have a value larger than 0. Wieldable items - # like weapons, armor etc are not 'usable' in this respect. - uses = AttributeProperty(0) - # when 0, item is destroyed and is unusable - quality = AttributeProperty(1) value = AttributeProperty(0) - help_text = AttributeProperty("") + # can also be an iterable, for adding multiple obj-type tags + obj_type = ObjType.TREASURE.value + + def at_object_creation(self): + for obj_type in make_iter(self.obj_type): + self.tags.add(obj_type, category="obj_type") + + def has_obj_type(self, objtype): + """ + Check if object is of a particular type. + + typeobj_enum (enum.ObjType): A type to check, like enums.TypeObj.TREASURE. + + """ + return objtype.value in make_iter(self.obj_type) def get_help(self): """ @@ -93,9 +113,30 @@ class EvAdventureObjectFiller(EvAdventureObject): """ + obj_type = ObjType.QUEST.value # can't be sold quality = AttributeProperty(0) +class EvAdventureQuest(EvAdventureObject): + """ + A quest object. These cannot be sold and only be used for quest resolution. + + """ + + obj_type = ObjType.QUEST.value + value = AttributeProperty(0) + + +class EvAdventureTreasure(EvAdventureObject): + """ + A 'treasure' is mainly useful to sell for coin. + + """ + + obj_type = ObjType.TREASURE.value + value = AttributeProperty(100) + + class EvAdventureConsumable(EvAdventureObject): """ Item that can be 'used up', like a potion or food. Weapons, armor etc does not @@ -103,7 +144,7 @@ class EvAdventureConsumable(EvAdventureObject): """ - inventory_use_slot = AttributeProperty(WieldLocation.BACKPACK) + obj_type = ObjType.CONSUMABLE.value size = AttributeProperty(0.25) uses = AttributeProperty(1) @@ -134,25 +175,13 @@ class EvAdventureConsumable(EvAdventureObject): self.delete() -class EvAdventureWeapon(EvAdventureObject): - """ - Base weapon class for all EvAdventure weapons. - - """ - - inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND) - - attack_type = AttributeProperty(Ability.STR) - defense_type = AttributeProperty(Ability.ARMOR) - damage_roll = AttributeProperty("1d6") - - class WeaponEmptyHand: """ - This is used when you wield no weapons. We won't create any db-object for it. + This is a dummy-class loaded when you wield no weapons. We won't create any db-object for it. """ + obj_type = ObjType.WEAPON.value key = "Empty Fists" inventory_use_slot = WieldLocation.WEAPON_HAND attack_type = Ability.STR @@ -164,6 +193,23 @@ class WeaponEmptyHand: return "" +class EvAdventureWeapon(EvAdventureObject): + """ + Base weapon class for all EvAdventure weapons. + + """ + + obj_type = ObjType.WEAPON.value + inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND) + quality = AttributeProperty(3) + + # what ability used to attack with this weapon + attack_type = AttributeProperty(Ability.STR) + # what defense stat of the enemy it must defeat + defense_type = AttributeProperty(Ability.ARMOR) + damage_roll = AttributeProperty("1d6") + + class EvAdventureRunestone(EvAdventureWeapon): """ Base class for magic runestones. In _Knave_, every spell is represented by a rune stone @@ -173,8 +219,44 @@ class EvAdventureRunestone(EvAdventureWeapon): """ + obj_type = (ObjType.WEAPON.value, ObjType.MAGIC.value) inventory_use_slot = AttributeProperty(WieldLocation.TWO_HANDS) + quality = AttributeProperty(3) attack_type = AttributeProperty(Ability.INT) - defense_type = AttributeProperty(Ability.CON) + defense_type = AttributeProperty(Ability.DEX) damage_roll = AttributeProperty("1d8") + + +class EvAdventureArmor(EvAdventureObject): + """ + Base class for all wearable Armors. + + """ + + obj_type = ObjType.ARMOR.value + inventory_use_slot = AttributeProperty(WieldLocation.BODY) + armor = AttributeProperty(11) + quality = AttributeProperty(3) + + +class EvAdventureShield(EvAdventureArmor): + """ + Base class for all Shields. + + """ + + obj_type = ObjType.SHIELD.value + inventory_use_slot = AttributeProperty(WieldLocation.SHIELD_HAND) + armor = AttributeProperty(1) + + +class EvAdventureHelmet(EvAdventureArmor): + """ + Base class for all Helmets. + + """ + + obj_type = ObjType.HELMET.value + inventory_use_slot = AttributeProperty(WieldLocation.HEAD) + armor = AttributeProperty(1) diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py index 4bed2437db..63ea6240c0 100644 --- a/evennia/contrib/tutorials/evadventure/rooms.py +++ b/evennia/contrib/tutorials/evadventure/rooms.py @@ -5,7 +5,28 @@ EvAdventure rooms. """ -from evennia import AttributeProperty, DefaultRoom, TagProperty +from copy import deepcopy + +from evennia import AttributeProperty, DefaultCharacter, DefaultRoom, TagProperty +from evennia.utils.utils import inherits_from + +_MAP_GRID = [ + [" ", " ", " ", " ", " "], + [" ", " ", " ", " ", " "], + [" ", " ", "@", " ", " "], + [" ", " ", " ", " ", " "], + [" ", " ", " ", " ", " "], +] +_EXIT_GRID_SHIFT = { + "north": (0, 1, "|"), + "east": (1, 0, "-"), + "south": (0, -1, "|"), + "west": (-1, 0, "-"), + "northeast": (1, 1, "/"), + "southeast": (1, -1, "\\"), + "southwest": (-1, -1, "/"), + "northwest": (-1, 1, "\\"), +} class EvAdventureRoom(DefaultRoom): @@ -18,8 +39,39 @@ class EvAdventureRoom(DefaultRoom): allow_pvp = False allow_death = False + def format_appearance(self, appearance, looker, **kwargs): + """Don't left-strip the appearance string""" + return appearance.rstrip() -class EvAdventurePvPRoom(DefaultRoom): + def get_display_header(self, looker, **kwargs): + """ + Display the current location as a mini-map. + """ + if not inherits_from(looker, DefaultCharacter): + # we don't need a map for npcs/mobs + return "" + + # build a map + map_grid = deepcopy(_MAP_GRID) + dx0, dy0 = 2, 2 + map_grid[dy0][dx0] = "|w@|n" + for exi in self.exits: + dx, dy, symbol = _EXIT_GRID_SHIFT.get(exi.key, (None, None, None)) + if symbol is None: + # we have a non-cardinal direction to go to - mark us blue to indicate this + map_grid[dy0][dx0] = "|b>|n" + continue + map_grid[dy0 + dy][dx0 + dx] = symbol + if exi.destination != self: + map_grid[dy0 + dy + dy][dx0 + dx + dx] = "X" + + # Note that on the grid, dy is really going *downwards* (origo is + # in the top left), so we need to reverse the order at the end to mirror it + # vertically and have it come out right. + return " " + "\n ".join("".join(line) for line in reversed(map_grid)) + + +class EvAdventurePvPRoom(EvAdventureRoom): """ Room where PvP can happen, but noone gets killed. diff --git a/evennia/contrib/tutorials/evadventure/shops.py b/evennia/contrib/tutorials/evadventure/shops.py new file mode 100644 index 0000000000..0026710e68 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/shops.py @@ -0,0 +1,36 @@ +""" +EvAdventure Shop system. + + +A shop is run by an NPC. It can provide one or more of several possible services: + +- Buy from a pre-set list of (possibly randomized) items. Cost is based on the item's value, + adjusted by how stingy the shopkeeper is. When bought this way, the item is + generated on the fly and passed to the player character's inventory. Inventory files are + a list of prototypes, normally from a prototype-file. A random selection of items from each + inventory file is available. +- Sell items to the shop for a certain percent of their value. One could imagine being able + to buy back items again, but we will instead _destroy_ sold items, so as to remove them + from circulation. In-game we can say it's because the merchants collect the best stuff + to sell to collectors in the big city later. Each merchant buys a certain subset of items + based on their tags. +- Buy a service. For a cost, a certain action is performed for the character; this applies + immediately when bought. The most notable services are healing and converting coin to XP. +- Buy rumors - this is echoed to the player for a price. Different merchants could have + different rumors (or randomized ones). +- Quest - gain or hand in a quest for a merchant. + +All shops are menu-driven. One starts talking to the npc and will then end up in their shop +interface. + +""" + +from evennia.utils.evmenu import EvMenu + + +def start_npc_menu(caller, shopkeeper, **kwargs): + """ + Access function - start the NPC interaction/shop interface. + + + """ diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index d147e4e65f..f467b6d2e9 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -1367,6 +1367,20 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): """ return "" + def format_appearance(self, appearance, looker, **kwargs): + """ + Final processing of the entire appearance string. Called by `return_appearance`. + + Args: + appearance (str): The compiled appearance string. + looker (Object): Object doing the looking. + **kwargs: Arbitrary data for use when overriding. + Returns: + str: The final formatted output. + + """ + return appearance.strip() + def return_appearance(self, looker, **kwargs): """ Main callback used by 'look' for the object to describe itself. @@ -1398,17 +1412,20 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): if not looker: return "" - # populate the appearance_template string. It's a good idea to strip it and - # let the client add any extra spaces instead. - return self.appearance_template.format( - name=self.get_display_name(looker, **kwargs), - desc=self.get_display_desc(looker, **kwargs), - header=self.get_display_header(looker, **kwargs), - footer=self.get_display_footer(looker, **kwargs), - exits=self.get_display_exits(looker, **kwargs), - characters=self.get_display_characters(looker, **kwargs), - things=self.get_display_things(looker, **kwargs), - ).strip() + # populate the appearance_template string. + return self.format_appearance( + self.appearance_template.format( + name=self.get_display_name(looker, **kwargs), + desc=self.get_display_desc(looker, **kwargs), + header=self.get_display_header(looker, **kwargs), + footer=self.get_display_footer(looker, **kwargs), + exits=self.get_display_exits(looker, **kwargs), + characters=self.get_display_characters(looker, **kwargs), + things=self.get_display_things(looker, **kwargs), + ), + looker, + **kwargs, + ) # # Hook methods From d22b11c723d72df1bbba74eb506098ecf64905e9 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 24 Jul 2022 23:09:53 +0200 Subject: [PATCH 055/177] Add Account.uses_screenreader. Added evadventure mini-map --- CHANGELOG.md | 2 + evennia/accounts/accounts.py | 38 +++++++++++++------ .../contrib/tutorials/evadventure/rooms.py | 33 +++++++++++----- .../tutorials/evadventure/tests/mixins.py | 23 +++++++---- .../evadventure/tests/test_dungeon.py | 5 +-- 5 files changed, 69 insertions(+), 32 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e4d221010d..3a37e982ca 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -178,6 +178,8 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 move being done ('teleport', 'disembark', 'give' etc). (volund) - Made RPSystem contrib msg calls pass `pose` or `say` as msg-`type` for use in e.g. webclient pane filtering where desired. (volund) +- Added `Account.uses_screenreader(session=None)` as a quick shortcut for + finding if a user uses a screenreader (and adjust display accordingly). ## Evennia 0.9.5 diff --git a/evennia/accounts/accounts.py b/evennia/accounts/accounts.py index 4b566c7238..9eb9529c0f 100644 --- a/evennia/accounts/accounts.py +++ b/evennia/accounts/accounts.py @@ -12,32 +12,32 @@ instead for most things). """ import re import time +from random import getrandbits + from django.conf import settings from django.contrib.auth import authenticate, password_validation from django.core.exceptions import ImproperlyConfigured, ValidationError from django.utils import timezone from django.utils.module_loading import import_string -from evennia.typeclasses.models import TypeclassBase +from django.utils.translation import gettext as _ from evennia.accounts.manager import AccountManager from evennia.accounts.models import AccountDB -from evennia.objects.models import ObjectDB +from evennia.commands.cmdsethandler import CmdSetHandler from evennia.comms.models import ChannelDB +from evennia.objects.models import ObjectDB +from evennia.scripts.scripthandler import ScriptHandler from evennia.server.models import ServerConfig -from evennia.server.throttle import Throttle -from evennia.utils import class_from_module, create, logger -from evennia.utils.utils import lazy_property, to_str, make_iter, is_iter, variable_from_module from evennia.server.signals import ( SIGNAL_ACCOUNT_POST_CREATE, SIGNAL_OBJECT_POST_PUPPET, SIGNAL_OBJECT_POST_UNPUPPET, ) -from evennia.typeclasses.attributes import NickHandler, ModelAttributeBackend -from evennia.scripts.scripthandler import ScriptHandler -from evennia.commands.cmdsethandler import CmdSetHandler +from evennia.server.throttle import Throttle +from evennia.typeclasses.attributes import ModelAttributeBackend, NickHandler +from evennia.typeclasses.models import TypeclassBase +from evennia.utils import class_from_module, create, logger from evennia.utils.optionhandler import OptionHandler - -from django.utils.translation import gettext as _ -from random import getrandbits +from evennia.utils.utils import is_iter, lazy_property, make_iter, to_str, variable_from_module __all__ = ("DefaultAccount", "DefaultGuest") @@ -237,6 +237,22 @@ class DefaultAccount(AccountDB, metaclass=TypeclassBase): return objs + def uses_screenreader(self, session=None): + """ + Shortcut to determine if a session uses a screenreader. If no session given, + will return true if any of the sessions use a screenreader. + + Args: + session (Session, optional): The session to check for screen reader. + + """ + if session: + return bool(session.protocol_flags.get("SCREENREADER", False)) + else: + return any( + session.protocol_flags.get("SCREENREADER") for session in self.sessions.all() + ) + def get_display_name(self, looker, **kwargs): """ This is used by channels and other OOC communications methods to give a diff --git a/evennia/contrib/tutorials/evadventure/rooms.py b/evennia/contrib/tutorials/evadventure/rooms.py index 63ea6240c0..d8bfd61170 100644 --- a/evennia/contrib/tutorials/evadventure/rooms.py +++ b/evennia/contrib/tutorials/evadventure/rooms.py @@ -1,15 +1,24 @@ """ EvAdventure rooms. +The base EvAdventure room has a modified display header that shows a little mini-map. +All EvAdventure rooms inherit from this room, and it is integral to combat as well as +the dungeon generation. But one can also mix with other non-EvAdventure rooms (you will +just not be able to fight in them). """ from copy import deepcopy -from evennia import AttributeProperty, DefaultCharacter, DefaultRoom, TagProperty +from evennia import DefaultCharacter, DefaultRoom from evennia.utils.utils import inherits_from +CHAR_SYMBOL = "|w@|n" +CHAR_ALT_SYMBOL = "|w>|n" +ROOM_SYMBOL = "|bo|n" +LINK_COLOR = "|B" + _MAP_GRID = [ [" ", " ", " ", " ", " "], [" ", " ", " ", " ", " "], @@ -18,9 +27,9 @@ _MAP_GRID = [ [" ", " ", " ", " ", " "], ] _EXIT_GRID_SHIFT = { - "north": (0, 1, "|"), + "north": (0, 1, "||"), "east": (1, 0, "-"), - "south": (0, -1, "|"), + "south": (0, -1, "||"), "west": (-1, 0, "-"), "northeast": (1, 1, "/"), "southeast": (1, -1, "\\"), @@ -46,24 +55,28 @@ class EvAdventureRoom(DefaultRoom): def get_display_header(self, looker, **kwargs): """ Display the current location as a mini-map. + """ - if not inherits_from(looker, DefaultCharacter): - # we don't need a map for npcs/mobs + # make sure to not show make a map for users of screenreaders. + # for optimization we also don't show it to npcs/mobs + if not inherits_from(looker, DefaultCharacter) or ( + looker.account and looker.account.uses_screenreader() + ): return "" # build a map map_grid = deepcopy(_MAP_GRID) dx0, dy0 = 2, 2 - map_grid[dy0][dx0] = "|w@|n" + map_grid[dy0][dx0] = CHAR_SYMBOL for exi in self.exits: dx, dy, symbol = _EXIT_GRID_SHIFT.get(exi.key, (None, None, None)) if symbol is None: - # we have a non-cardinal direction to go to - mark us blue to indicate this - map_grid[dy0][dx0] = "|b>|n" + # we have a non-cardinal direction to go to - indicate this + map_grid[dy0][dx0] = CHAR_ALT_SYMBOL continue - map_grid[dy0 + dy][dx0 + dx] = symbol + map_grid[dy0 + dy][dx0 + dx] = f"{LINK_COLOR}{symbol}|n" if exi.destination != self: - map_grid[dy0 + dy + dy][dx0 + dx + dx] = "X" + map_grid[dy0 + dy + dy][dx0 + dx + dx] = ROOM_SYMBOL # Note that on the grid, dy is really going *downwards* (origo is # in the top left), so we need to reverse the order at the end to mirror it diff --git a/evennia/contrib/tutorials/evadventure/tests/mixins.py b/evennia/contrib/tutorials/evadventure/tests/mixins.py index 1bc4da2cde..f6f1747429 100644 --- a/evennia/contrib/tutorials/evadventure/tests/mixins.py +++ b/evennia/contrib/tutorials/evadventure/tests/mixins.py @@ -4,10 +4,17 @@ Helpers for testing evadventure modules. """ from evennia.utils import create -from ..characters import EvAdventureCharacter -from ..objects import EvAdventureObject -from ..rooms import EvAdventureRoom + from .. import enums +from ..characters import EvAdventureCharacter +from ..objects import ( + EvAdventureArmor, + EvAdventureHelmet, + EvAdventureObject, + EvAdventureShield, + EvAdventureWeapon, +) +from ..rooms import EvAdventureRoom class EvAdventureMixin: @@ -23,27 +30,27 @@ class EvAdventureMixin: EvAdventureCharacter, key="testchar", location=self.location ) self.helmet = create.create_object( - EvAdventureObject, + EvAdventureHelmet, key="helmet", attributes=[("inventory_use_slot", enums.WieldLocation.HEAD), ("armor", 1)], ) self.shield = create.create_object( - EvAdventureObject, + EvAdventureShield, key="shield", attributes=[("inventory_use_slot", enums.WieldLocation.SHIELD_HAND), ("armor", 1)], ) self.armor = create.create_object( - EvAdventureObject, + EvAdventureArmor, key="armor", attributes=[("inventory_use_slot", enums.WieldLocation.BODY), ("armor", 11)], ) self.weapon = create.create_object( - EvAdventureObject, + EvAdventureWeapon, key="weapon", attributes=[("inventory_use_slot", enums.WieldLocation.WEAPON_HAND)], ) self.big_weapon = create.create_object( - EvAdventureObject, + EvAdventureWeapon, key="big_weapon", attributes=[("inventory_use_slot", enums.WieldLocation.TWO_HANDS)], ) diff --git a/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py index a0290e8807..f96d82a2ff 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_dungeon.py @@ -10,7 +10,6 @@ from evennia.utils.test_resources import BaseEvenniaTest from evennia.utils.utils import inherits_from from .. import dungeon -from ..rooms import EvAdventureDungeonRoom from .mixins import EvAdventureMixin @@ -33,7 +32,7 @@ class TestDungeon(EvAdventureMixin, BaseEvenniaTest): self.start_room = create_object(droomclass, key="bottom of well") self.assertEqual( - self.start_room.scripts.get("evadventure_startroom_resetter")[0].interval, -1 + self.start_room.scripts.get("evadventure_dungeon_startroom_resetter")[0].interval, -1 ) self.start_north = create_object( dungeon.EvAdventureDungeonStartRoomExit, @@ -71,7 +70,7 @@ class TestDungeon(EvAdventureMixin, BaseEvenniaTest): # first go north, this should generate a new room new_room_north = self._move_character("north") self.assertNotEqual(self.start_room, new_room_north) - self.assertTrue(inherits_from(new_room_north, EvAdventureDungeonRoom)) + self.assertTrue(inherits_from(new_room_north, dungeon.EvAdventureDungeonRoom)) # check if Orchestrator was created orchestrator = new_room_north.db.dungeon_orchestrator From d97106948bd18d6424df38e77a8767fe0d9ac63d Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 2 Aug 2022 11:48:06 +0200 Subject: [PATCH 056/177] Prep for shopkeepers --- .../tutorials/evadventure/characters.py | 2 +- .../tutorials/evadventure/combat_turnbased.py | 2 - evennia/contrib/tutorials/evadventure/npcs.py | 134 +++++++++++++++++- .../contrib/tutorials/evadventure/shops.py | 27 +++- evennia/objects/objects.py | 4 +- 5 files changed, 157 insertions(+), 12 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index a63b02cf9e..9d866fa328 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -62,7 +62,7 @@ class LivingMixin: Called when attacked and taking damage. """ - pass + self.hp -= damage def at_defeat(self): """ diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 7788a5ee8d..25dbc0cf86 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -288,8 +288,6 @@ class CombatActionAttack(CombatAction): message = f" $You() $conj(hit) $You({defender.key}) for |r{dmg}|n damage!" self.msg(message) - defender.hp -= dmg - # call hook defender.at_damage(dmg, attacker=attacker) diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index 12e97d08e1..a0a3ba7551 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -6,6 +6,8 @@ from random import choice from evennia import DefaultCharacter from evennia.typeclasses.attributes import AttributeProperty +from evennia.utils.evmenu import EvMenu +from evennia.utils.utils import make_iter from .characters import LivingMixin from .enums import Ability, WieldLocation @@ -95,18 +97,140 @@ class EvAdventureNPC(LivingMixin, DefaultCharacter): pass -class EvAdventureShopKeeper(EvAdventureNPC): +class EvAdventureTalkativeNPC(EvAdventureNPC): + """ + Talkative NPCs can be addressed by `talk [to] `. This opens a chat menu with + communication options. The menu is created with the npc and we override the .create + to allow passing in the menu nodes. + + """ + + menudata = AttributeProperty(None, autocreate=False) + menu_kwargs = AttributeProperty(None, autocreate=False) + # text shown when greeting at the start of a conversation. If this is an + # iterable, a random reply will be chosen by the menu + hi_text = AttributeProperty("Hi!", autocreate=False) + + def at_damage(self, damage, attacker=None): + """ + Talkative NPCs are generally immortal (we don't deduct HP here by default)." + + """ + attacker.msg(f'{self.key} dodges the damage and shouts "|wHey! What are you doing?|n"') + + @classmethod + def create(cls, key, account=None, **kwargs): + """ + Overriding the creation of the NPC, allowing some extra `**kwargs`. + + Args: + key (str): Name of the new object. + account (Account, optional): Account to attribute this object to. + + Keyword Args: + description (str): Brief description for this object (same as default Evennia) + ip (str): IP address of creator (for object auditing) (same as default Evennia). + menudata (dict or str): The `menudata` argument to `EvMenu`. This is either a dict of + `{"nodename": ,...}` or the python-path to a module containing + such nodes (see EvMenu docs). This will be used to generate the chat menu + chat menu for the character that talks to the NPC (which means the `at_talk` hook + is called (by our custom `talk` command). + menu_kwargs (dict): This will be passed as `**kwargs` into `EvMenu` when it + is created. Make sure this dict can be pickled to an Attribute. + + Returns: + tuple: `(new_character, errors)`. On error, the `new_character` is `None` and + `errors` is a `list` of error strings (an empty list otherwise). + + + """ + menudata = kwargs.pop("menudata", None) + menu_kwargs = kwargs.pop("menu_kwargs", {}) + + # since this is a @classmethod we can't use super() here + new_object, errors = EvAdventureNPC.create( + key, account=account, attributes=(("menudata", menudata), ("menu_kwargs", menu_kwargs)) + ) + + return new_object, errors + + def at_talk(self, talker, startnode="node_start", session=None, **kwargs): + """ + Called by the `talk` command when another entity addresses us. + + Args: + talker (Object): The one talking to us. + startnode (str, optional): Allows to start in a different location in the menu tree. + The given node must exist in the tree. + session (Session, optional): The talker's current session, allows for routing + correctly in multi-session modes. + **kwargs: This will be passed into the `EvMenu` creation and appended and `menu_kwargs` + given to the NPC at creation. + + Notes: + We pass `npc=self` into the EvMenu for easy back-reference. This will appear in the + `**kwargs` of the start node. + + """ + menu_kwargs = {**self.menu_kwargs, **kwargs} + EvMenu(talker, self.menudata, startnode=startnode, session=session, npc=self, **menu_kwargs) + + +def node_start(caller, raw_string, **kwargs): + """ + This is the intended start menu node for the Talkative NPC interface. It will + use on-npc Attributes to build its message and will also pick its options + based on nodes named `node_start_*` are available in the node tree. + + """ + # we presume a back-reference to the npc this is added when the menu is created + npc = kwargs["npc"] + + # grab a (possibly random) welcome text + text = choice(make_iter(npc.hi_text)) + + # determine options based on `node_start_*` nodes available + toplevel_node_keys = [ + node_key for node_key in caller.ndb._evmenu._menutree if node_key.startswith("node_start_") + ] + options = [] + for node_key in toplevel_node_keys: + option_name = node_key[11:].replace("_", " ").capitalized() + + # we let the menu number the choices, so we don't use key here + options.append({"desc": option_name, "goto": node_key}) + + return text, options + + +class EvAdventureQuestGiver(EvAdventureTalkativeNPC): + """ + An NPC that acts as a dispenser of quests. + + """ + + +class EvAdventureShopKeeper(EvAdventureTalkativeNPC): """ ShopKeeper NPC. """ + # how much extra the shopkeeper adds on top of the item cost + upsell_factor = AttributePropert(1.0, autocreate=False) + # how much of the raw cost the shopkeep is willing to pay when buying from character + miser_factor = Attribute(0.5, autocreate=False) + common_ware_prototypes = AttributeProperty([], autocreate=False) -class EvAdventureQuestGiver(EvAdventureNPC): - """ - An NPC that acts as a dispenser of quests. + def at_damage(self, damage, attacker=None): + """ + Immortal - we don't deduct any damage here. - """ + """ + attacker.msg( + f"{self.key} brushes off the hit and shouts " + '"|wHey! This is not the way to get a discount!|n"' + ) class EvAdventureMob(EvAdventureNPC): diff --git a/evennia/contrib/tutorials/evadventure/shops.py b/evennia/contrib/tutorials/evadventure/shops.py index 0026710e68..fe00e24a57 100644 --- a/evennia/contrib/tutorials/evadventure/shops.py +++ b/evennia/contrib/tutorials/evadventure/shops.py @@ -23,14 +23,37 @@ A shop is run by an NPC. It can provide one or more of several possible services All shops are menu-driven. One starts talking to the npc and will then end up in their shop interface. + +This is a series of menu nodes meant to be added as a mapping via +`EvAdventureShopKeeper.create(menudata={},...)`. + +To make this pluggable, the shopkeeper start page will analyze the available nodes +and auto-add options to all nodes in the three named `node_start_*`. The last part of the +node name will be the name of the option capitalized, with underscores replaced by spaces, so +`node_start_sell_items` will become a top-level option `Sell items`. + + + """ +from random import choice + from evennia.utils.evmenu import EvMenu +from evennia.utils.utils import make_iter + +from .npcs import EvAdventureShopKeeper + +# shop menu nodes to use for building a Shopkeeper npc -def start_npc_menu(caller, shopkeeper, **kwargs): +def node_start_buy(caller, raw_string, **kwargs): """ - Access function - start the NPC interaction/shop interface. + Menu node for the caller to buy items from the shopkeep. This assumes `**kwargs` contains + a kwarg `npc` referencing the npc/shopkeep being talked to. + Items available to sell are a combination of items in the shopkeep's inventory and prototypes + the list of `prototypes` stored in the Shopkeep's "common_ware_prototypes` Attribute. In the + latter case, the properties will be extracted from the prototype when inspecting it (object will + only spawn when bought). """ diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index f467b6d2e9..1825cd9f8b 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -2419,8 +2419,8 @@ class DefaultCharacter(DefaultObject): All other kwargs will be passed into the create_object call. Returns: - character (Object): A newly created Character of the given typeclass. - errors (list): A list of errors in string form, if any. + tuple: `(new_character, errors)`. On error, the `new_character` is `None` and + `errors` is a `list` of error strings (an empty list otherwise). """ errors = [] From 7c8c8626e3f580812d14328b46b166545c2d42c1 Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 2 Aug 2022 21:35:53 +0200 Subject: [PATCH 057/177] Expand on shop management --- evennia/contrib/tutorials/evadventure/npcs.py | 1 + .../contrib/tutorials/evadventure/shops.py | 195 +++++++++++++++++- 2 files changed, 194 insertions(+), 2 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index a0a3ba7551..d02f0ea580 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -220,6 +220,7 @@ class EvAdventureShopKeeper(EvAdventureTalkativeNPC): upsell_factor = AttributePropert(1.0, autocreate=False) # how much of the raw cost the shopkeep is willing to pay when buying from character miser_factor = Attribute(0.5, autocreate=False) + # prototypes of common wares common_ware_prototypes = AttributeProperty([], autocreate=False) def at_damage(self, damage, attacker=None): diff --git a/evennia/contrib/tutorials/evadventure/shops.py b/evennia/contrib/tutorials/evadventure/shops.py index fe00e24a57..0d8c7a7e69 100644 --- a/evennia/contrib/tutorials/evadventure/shops.py +++ b/evennia/contrib/tutorials/evadventure/shops.py @@ -36,22 +36,213 @@ node name will be the name of the option capitalized, with underscores replaced """ +from dataclasses import dataclass from random import choice -from evennia.utils.evmenu import EvMenu +from evennia.prototypes.prototypes import search_prototype +from evennia.prototypes.spawner import flatten_prototype +from evennia.utils.evmenu import EvMenu, list_node +from evennia.utils.logger import log_err, log_trace from evennia.utils.utils import make_iter +from .enums import Ability, ObjType, WieldLocation from .npcs import EvAdventureShopKeeper + +@dataclass +class BuyItem: + """ + Storage container for storing generic info about an item for sale. This means it can be used + both for real objects and for prototypes without constantly having to track which is which. + + """ + + # skipping typehints here since we are not using them anywhere else + + # available for all buyable items + key = "" + desc = "" + obj_type = ObjType.GEAR + size = 1 + value = 0 + use_slot = WieldLocation.BACKPACK + + uses = None + quality = None + attack_type = None + defense_type = None + damage_roll = None + + # references the original (always only one of the two) + obj = None + prototype = None + + @staticmethod + def create_from_obj(obj, shopkeeper): + """ + Build a new BuyItem container from a real db obj. + + Args: + obj (EvAdventureObject): An object to analyze. + shopkeeper (EvAdventureShopKeeper): The shopkeeper. + + Returns: + BuyItem: A general representation of the original data. + + """ + try: + # mandatory + key = obj.key + desc = obj.db.desc + obj_type = obj.obj_type + size = obj.size + use_slot = obj.use_slot + value = obj.value * shopkeeper.upsell_factor + except AttributeError: + # not a buyable item + log_trace("Not a buyable item") + return None + + # getting optional properties + + return BuyItem( + key=key, + desc=desc, + obj_type=obj_type, + size=size, + use_slot=use_slot, + value=value, + # optional fields + uses=getattr(obj, "uses", None), + quality=getattr(obj, "quality", None), + attack_type=getattr(obj, "attack_type", None), + defense_type=getattr(obj, "defense_type", None), + damage_roll=getattr(obj, "damage_roll", None), + # back-reference (don't set prototype) + obj=obj, + ) + + @staticmethod + def create_from_prototype(self, prototype_or_key, shopkeeper): + """ + Build a new BuyItem container from a prototype. + + Args: + prototype (dict or key): An Evennia prototype dict or the key of one + registered with the system. This is assumed to be a full prototype, + including having parsed and included parentage. + + Returns: + BuyItem: A general representation of the original data. + + """ + + def _get_attr_value(key, prot, optional=True): + """ + We want the attribute's value, which is always in the `attrs` field of + the prototype. + + """ + attr = [tup for tup in prot.get("attrs", ()) if tup[0] == key] + try: + return attr[0][1] + except IndexError: + if optional: + return None + raise + + if isinstance(prototype_or_key, dict): + prototype = prototype_or_key + else: + # make sure to generate a 'full' prototype with all inheritance applied ('flattened'), + # otherwise we will not get inherited data when we analyze it. + prototype = flatten_prototype(search_prototype(key=prototype_or_key)) + + if not prototype: + log_err(f"No valid prototype '{prototype_or_key}' found") + return None + + try: + # at this point we should have a full, flattened prototype ready to spawn. It must + # contain all fields needed for buying + key = prototype["key"] + desc = _get_attr_value("desc", prototype, optional=False) + obj_type = _get_attr_value("obj_type", prototype, optional=False) + size = _get_attr_value("size", prototype, optional=False) + use_slot = _get_attr_value("use_slot", prototype, optional=False) + value = int(_get_attr_value("value", prototype, optional=False) + * shopkeeper.upsell_factor) + except (KeyError, IndexError): + # not a buyable item + log_trace("Not a buyable item") + return None + + return BuyItem( + key=key, + desc=desc, + obj_type=obj_type, + size=size, + use_slot=use_slot, + value=value, + # optional fields + uses=_get_attr_value("uses", prototype), + quality=_get_attr_value("quality", prototype), + attack_type=_get_attr_value("attack_type", prototype), + defense_type=_get_attr_value("defense_type", prototype), + damage_roll=_get_attr_value("damage_roll", prototype), + # back-reference (don't set obj) + prototype=prototype, + ) + + def get_sdesc(self): + """ + Get the short description to show in buy list. + + """ + return self.key + + def get_detail(self): + """ + Get more info when looking at the item. + + """ + return f""" + |c{self.key}|n + {self.desc} + + Slots: {self.size} Used from: {self.use_slot.value} + + + +# Helper functions for building the shop listings and select a ware to buy +def _get_all_wares_to_buy(caller, raw_string, **kwargs): + """ + This helper is used by `EvMenu.list_node` to build the list of items to buy. + + We rely on `**kwargs` being forwarded from `node_start_buy`, which in turns contains + the `npc` kwarg pointing to the shopkeeper (`caller` is the one doing the buying). + + """ + shopkeep = kwargs["npc"] + # items carried by the shopkeep are sellable (these are items already created, such as + # things sold to the shopkeep earlier). We + wares = [BuyItem.create_from_obj(obj) for obj in list(shopkeep.contents)] + [ + BuyItem.create_from_prototype(prototype) for prototype in shopkeep.common_ware_prototypes + ] + # clean out any ByItems that failed to create for some reason + wares = [ware for ware in wares if ware] + + # shop menu nodes to use for building a Shopkeeper npc +@list_node(_get_all_wares_to_buy, select=_select_ware_to_buy, pagesize=10) def node_start_buy(caller, raw_string, **kwargs): """ Menu node for the caller to buy items from the shopkeep. This assumes `**kwargs` contains a kwarg `npc` referencing the npc/shopkeep being talked to. - Items available to sell are a combination of items in the shopkeep's inventory and prototypes + Items available to sell are a combination of items in the shopkeep's inventory and the list of `prototypes` stored in the Shopkeep's "common_ware_prototypes` Attribute. In the latter case, the properties will be extracted from the prototype when inspecting it (object will only spawn when bought). From 37e90c3494d6f97967fc9cc36e2bff3948288c48 Mon Sep 17 00:00:00 2001 From: Johnny Date: Tue, 2 Aug 2022 23:47:52 +0000 Subject: [PATCH 058/177] AttributeProperty tries spawning child instances of default value (#2697). --- evennia/typeclasses/attributes.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index b8c68bb7ac..90492a13d2 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -202,6 +202,21 @@ class AttributeProperty: self._lockstring = lockstring self._autocreate = autocreate self._key = "" + + @property + def _default(self): + """ + Tries returning a new instance of default if callable. + + """ + try: + return self.__default() + except: + return self.__default + + @_default.setter + def _default(self, value): + self.__default = value def __set_name__(self, cls, name): """ From 16a351fe0dfd4342b875c9a4262944651f510cc6 Mon Sep 17 00:00:00 2001 From: Griatch Date: Wed, 3 Aug 2022 01:04:07 +0200 Subject: [PATCH 059/177] First design of shop menu nodes for plugging in --- .../contrib/tutorials/evadventure/commands.py | 39 ++- .../tutorials/evadventure/equipment.py | 43 ++- evennia/contrib/tutorials/evadventure/npcs.py | 6 +- .../contrib/tutorials/evadventure/shops.py | 291 ++++++++++++++++-- evennia/utils/evmenu.py | 21 +- 5 files changed, 361 insertions(+), 39 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/commands.py b/evennia/contrib/tutorials/evadventure/commands.py index 8d0cdb4f04..70d8dc4476 100644 --- a/evennia/contrib/tutorials/evadventure/commands.py +++ b/evennia/contrib/tutorials/evadventure/commands.py @@ -1,5 +1,15 @@ """ -nextEvAdventure commands and cmdsets. +EvAdventure commands and cmdsets. We don't need that many stand-alone new +commands since a lot of functionality is managed in menus. These commands +are in additional to normal Evennia commands and should be added +to the CharacterCmdSet + +New commands: + attack/hit [,...] + inventory + wield/wear + unwield/remove + give to """ @@ -65,3 +75,30 @@ class CmdAttackTurnBased(EvAdventureCommand): self.caller.msg(f"|r{err}|n") else: self.caller.msg("|rFound noone to attack.|n") + + +class CmdInventory(EvAdventureCommand): + """ + View your inventory + + Usage: + inventory + + """ + + key = "inventory" + aliases = ("i", "inv") + + def func(self): + self.caller.msg(self.caller.equipment.display_loadout()) + + +class CmdWield(EvAdventureCommand): + """ + Wield a weapon/shield or wear armor. + + Usage: + wield + wear + + """ diff --git a/evennia/contrib/tutorials/evadventure/equipment.py b/evennia/contrib/tutorials/evadventure/equipment.py index 57438864fc..fe045ea4da 100644 --- a/evennia/contrib/tutorials/evadventure/equipment.py +++ b/evennia/contrib/tutorials/evadventure/equipment.py @@ -55,7 +55,7 @@ class EquipmentHandler: """ self.obj.attributes.add(self.save_attribute, self.slots, category="inventory") - def _count_slots(self): + def count_slots(self): """ Count slot usage. This is fetched from the .size Attribute of the object. The size can also be partial slots. @@ -94,7 +94,7 @@ class EquipmentHandler: """ size = getattr(obj, "size", 0) max_slots = self.max_slots - current_slot_usage = self._count_slots() + current_slot_usage = self.count_slots() if current_slot_usage + size > max_slots: slots_left = max_slots - current_slot_usage raise EquipmentError( @@ -104,6 +104,26 @@ class EquipmentHandler: ) return True + def all(self): + """ + Get all objects in inventory, regardless of location. + + Returns: + list: A flat list of item tuples `[(item, WieldLocation),...]` + starting with the wielded ones, backpack content last. + + """ + slots = self.slots + lst = [ + (slots[WieldLocation.WEAPON_HAND], WieldLocation.WEAPON_HAND), + (slots[WieldLocation.SHIELD_HAND], WieldLocation.SHIELD_HAND), + (slots[WieldLocation.TWO_HANDS], WieldLocation.TWO_HANDS), + (slots[WieldLocation.BODY], WieldLocation.BODY), + (slots[WieldLocation.HEAD], WieldLocation.HEAD), + ] + [(item, WieldLocation.BACKPACK) for item in slots[WieldLocation.BACKPACK]] + # remove any None-results from empty slots + return [tup for tup in lst if item[0]] + @property def armor(self): """ @@ -333,3 +353,22 @@ class EquipmentHandler: """ character = self.obj return [obj for obj in self.slots[WieldLocation.BACKPACK] if obj.at_pre_use(character)] + + def get_obj_stats(self, obj): + """ + Get a string of stats about the object. + + """ + objmap = dict(self.all()) + carried = objmap.get(obj) + carried = f"Worn: [{carried.value}]" if carried else "" + + return f""" +|c{self.key}|n Value: |y{self.value}|n coins {carried} + +{self.desc} + +Slots: |w{self.size}|n Used from: |w{self.use_slot.value}|n +Quality: |w{self.quality}|n Uses: |wself.uses|n +Attacks using: |w{self.attack_type.value}|n against |w{self.defense_type.value}|n +Damage roll: |w{self.damage_roll}""" diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index d02f0ea580..c7313e63c2 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -217,9 +217,9 @@ class EvAdventureShopKeeper(EvAdventureTalkativeNPC): """ # how much extra the shopkeeper adds on top of the item cost - upsell_factor = AttributePropert(1.0, autocreate=False) + upsell_factor = AttributeProperty(1.0, autocreate=False) # how much of the raw cost the shopkeep is willing to pay when buying from character - miser_factor = Attribute(0.5, autocreate=False) + miser_factor = AttributeProperty(0.5, autocreate=False) # prototypes of common wares common_ware_prototypes = AttributeProperty([], autocreate=False) @@ -241,7 +241,7 @@ class EvAdventureMob(EvAdventureNPC): """ # chance (%) that this enemy will loot you when defeating you - loot_chance = AttributeProperty(75) + loot_chance = AttributeProperty(75, autocreate=False) def ai_combat_next_action(self, combathandler): """ diff --git a/evennia/contrib/tutorials/evadventure/shops.py b/evennia/contrib/tutorials/evadventure/shops.py index 0d8c7a7e69..dd02e42d64 100644 --- a/evennia/contrib/tutorials/evadventure/shops.py +++ b/evennia/contrib/tutorials/evadventure/shops.py @@ -37,16 +37,16 @@ node name will be the name of the option capitalized, with underscores replaced """ from dataclasses import dataclass -from random import choice from evennia.prototypes.prototypes import search_prototype -from evennia.prototypes.spawner import flatten_prototype -from evennia.utils.evmenu import EvMenu, list_node +from evennia.prototypes.spawner import flatten_prototype, spawn +from evennia.utils.evmenu import list_node from evennia.utils.logger import log_err, log_trace -from evennia.utils.utils import make_iter -from .enums import Ability, ObjType, WieldLocation -from .npcs import EvAdventureShopKeeper +from .enums import ObjType, WieldLocation +from .equipment import EquipmentError + +# ------------------------------------ Buying from an NPC @dataclass @@ -170,8 +170,9 @@ class BuyItem: obj_type = _get_attr_value("obj_type", prototype, optional=False) size = _get_attr_value("size", prototype, optional=False) use_slot = _get_attr_value("use_slot", prototype, optional=False) - value = int(_get_attr_value("value", prototype, optional=False) - * shopkeeper.upsell_factor) + value = int( + _get_attr_value("value", prototype, optional=False) * shopkeeper.upsell_factor + ) except (KeyError, IndexError): # not a buyable item log_trace("Not a buyable item") @@ -194,12 +195,12 @@ class BuyItem: prototype=prototype, ) - def get_sdesc(self): + def __str__(self): """ Get the short description to show in buy list. """ - return self.key + return f"{self.key} [|y{self.value}|n coins]" def get_detail(self): """ @@ -207,11 +208,48 @@ class BuyItem: """ return f""" - |c{self.key}|n - {self.desc} +|c{self.key}|n Cost: |y{self.value}|n coins - Slots: {self.size} Used from: {self.use_slot.value} +{self.desc} +Slots: |w{self.size}|n Used from: |w{self.use_slot.value}|n +Quality: |w{self.quality}|n Uses: |wself.uses|n +Attacks using: |w{self.attack_type.value}|n against |w{self.defense_type.value}|n +Damage roll: |w{self.damage_roll}""" + + def to_obj(self): + """ + Convert this into an actual database object that we can trade. This either means + using the stored `.prototype` to spawn a new instance of the object, or to + use the `.obj` reference to get the already existing object. + + """ + if self.obj: + return self.obj + return spawn(self.prototype) + + +def _get_or_create_buymap(caller, shopkeep): + """ + Helper that fetches or creates the mapping of `{"short description": BuyItem, ...}` + we need for the buy menu. We cache it on the `_evmenu` object on the caller. + + """ + if not caller.ndb._evmenu.buymap: + # buymap not in cache - build it and store in memory on _evmenu object - this way + # it will be removed automatically when the menu closes. We will need to reset this + # when the shopkeep buys new things. + # items carried by the shopkeep are sellable (these are items already created, such as + # things sold to the shopkeep earlier). We + obj_wares = [BuyItem.create_from_obj(obj) for obj in list(shopkeep.contents)] + prototype_wares = [ + BuyItem.create_from_prototype(prototype) + for prototype in shopkeep.common_ware_prototypes + ] + wares = obj_wares + prototype_wares + caller.ndb._evmenu.buymap = {str(ware): ware for ware in wares if ware} + + return caller.ndb._evmenu.buymap # Helper functions for building the shop listings and select a ware to buy @@ -224,19 +262,61 @@ def _get_all_wares_to_buy(caller, raw_string, **kwargs): """ shopkeep = kwargs["npc"] - # items carried by the shopkeep are sellable (these are items already created, such as - # things sold to the shopkeep earlier). We - wares = [BuyItem.create_from_obj(obj) for obj in list(shopkeep.contents)] + [ - BuyItem.create_from_prototype(prototype) for prototype in shopkeep.common_ware_prototypes - ] - # clean out any ByItems that failed to create for some reason - wares = [ware for ware in wares if ware] + buymap = _get_or_create_buymap(caller, shopkeep) + return [ware_desc for ware_desc in buymap] -# shop menu nodes to use for building a Shopkeeper npc +def _select_ware_to_buy(caller, selected_ware_desc, **kwargs): + """ + This helper is used by `EvMenu.list_node` to operate on what the user selected. + We return `item` in the kwargs to the `node_select_buy` node. + + """ + shopkeep = kwargs["npc"] + buymap = _get_or_create_buymap(caller, shopkeep) + kwargs["item"] = buymap[selected_ware_desc] + + return "node_confirm_buy", kwargs -@list_node(_get_all_wares_to_buy, select=_select_ware_to_buy, pagesize=10) +def _back_to_previous_node(caller, raw_string, **kwargs): + """ + Back to previous node is achieved by returning a node of None. + + """ + return None, kwargs + + +def _buy_ware(caller, raw_string, **kwargs): + """ + Complete the purchase of a ware. At this point the money is deducted + and the item is either spawned from a prototype or simply moved from + the sellers inventory to that of the buyer. + + We will have kwargs `item` and `npc` passed along to refer to the BuyItem we bought + and the shopkeep selling it. + + """ + item = kwargs["item"] # a BuyItem instance + shopkeep = kwargs["npc"] + + # exchange money + caller.coins -= item.value + shopkeep += item.value + + # get the item - if not enough room, dump it on the ground + obj = item.to_obj() + try: + caller.equipment.add(obj) + except EquipmentError as err: + obj.location = caller.location + caller.msg(err) + caller.msg(f"|w{obj.key} ends up on the ground.|n") + + caller.msg("|gYou bought |w{obj.key}|g for |y{item.value}|g coins.|n") + + +@list_node(_get_all_wares_to_buy, select=_select_ware_to_buy, pagesize=40) def node_start_buy(caller, raw_string, **kwargs): """ Menu node for the caller to buy items from the shopkeep. This assumes `**kwargs` contains @@ -248,3 +328,170 @@ def node_start_buy(caller, raw_string, **kwargs): only spawn when bought). """ + coins = caller.coins + used_slots = caller.equipment.count_slots() + max_slots = caller.equipment.max_slots + + text = ( + f'"Seeing something you like?" [you have |y{coins}|n coins, ' + f"using |b{used_slots}/{max_slots}|n slots]" + ) + # this will be in addition to the options generated by the list-node + extra_options = [{"key": ("[c]ancel", "b", "c", "cancel"), "goto": "node_start"}] + + return text, extra_options + + +def node_confirm_buy(caller, raw_string, **kwargs): + """ + Menu node reached when a user selects an item in the buy menu. The `item` passed + along in `**kwargs` is the selected item (see `_select_ware_to_buy`, where this is injected). + + """ + # this was injected in _select_ware_to_buy. This is an BuyItem instance. + item = kwargs["item"] + + coins = caller.coins + used_slots = caller.equipment.count_slots() + max_slots = caller.equipment.max_slots + + text = item.get_detail() + text += f"\n\n[You have |y{coins}|n coins] and are using |b{used_slots}/{max_slots}|n slots]" + + options = [] + + if caller.coins >= item.value and item.size <= (max_slots - used_slots): + options.append({"desc": f"Buy [{item.value} coins]", "goto": (_buy_ware, kwargs)}) + options.append({"desc": "Cancel", "goto": (_back_to_previous_node, kwargs)}) + + return text, options + + +# node tree to inject for buying things +node_tree_buy = {"node_start_buy": node_start_buy, "node_confirm_buy": node_confirm_buy} + + +# ------------------------------------------------- Selling to an NPC + + +def _get_or_create_sellmap(self, caller, shopkeep): + if not caller.ndb._evmenu.sellmap: + # no sellmap, build one anew + + sellmap = {} + for obj, wieldlocation in caller.equipment.all(): + key = obj.key + value = int(obj.value * shopkeep.miser_factor) + if value > 0 and obj.obj_type is not ObjType.QUEST: + sellmap[f"|w{key}|n [{wieldlocation.value}] - sell price |y{value}|n coins"] = ( + obj, + value, + ) + caller.ndb._evmenu.sellmap = sellmap + + sellmap = caller.ndb._evmenu.sellmap + + return sellmap + + +def _get_all_wares_to_sell(caller, raw_string, **kwargs): + """ + Get all wares available to sell from caller's inventory. We need to build a + mapping between the descriptors and the items. + + """ + shopkeep = kwargs["npc"] + sellmap = _get_or_create_sellmap(caller, shopkeep) + return [ware_desc for ware_desc in sellmap] + + +def _sell_ware(caller, raw_string, **kwargs): + """ + Complete the sale of a ware. This is were money is gained and the item is removed. + + We will have kwargs `item`, `value` and `npc` passed along to refer to the inventory item we + sold, its (adjusted) sales cost and the shopkeep buying it. + + """ + item = kwargs["item"] + value = kwargs["value"] + shopkeep = kwargs["npc"] + + # move item to shopkeep + obj = caller.equipment.remove(item) + obj.location = shopkeep + + # exchange money - shopkeep always have money to pay, so we don't deduct from them + caller.coins += value + + caller.msg("|gYou sold |w{obj.key}|g for |y{value}|g coins.|n") + + +def _select_ware_to_sell(caller, selected_ware_desc, **kwargs): + """ + Selected one ware to sell. Figure out which one it is using the sellmap. + Store the result as "item" kwarg. + + """ + shopkeep = kwargs["npc"] + sellmap = _get_or_create_sellmap(caller, shopkeep) + kwargs["item"], kwargs["value"] = sellmap[selected_ware_desc] + + return "node_examine_sell", kwargs + + +@list_node(_get_all_wares_to_sell, select=_select_ware_to_sell, pagesize=20) +def node_start_sell(caller, raw_string, **kwargs): + """ + The start-level node for selling items from the user's inventory. This assumes + `**kwargs` contains a kwarg `npc` referencing the npc/shopkeep being talked to. + + Items available to sell are all items in the player's equipment handler, including + things in their hands. + + """ + coins = caller.coins + used_slots = caller.equipment.count_slots() + max_slots = caller.equipment.max_slots + + text = ( + f'"Anything you want to sell?" [you have |y{coins}|n coins, ' + f"using |b{used_slots}/{max_slots}|n slots]" + ) + # this will be in addition to the options generated by the list-node + extra_options = [{"key": ("[c]ancel", "b", "c", "cancel"), "goto": "node_start"}] + + return text, extra_options + + +def node_confirm_sell(caller, raw_string, **kwargs): + """ + In this node we confirm the sell by first investigating the item we are about to sell. + + We have `item` and `value` available in kwargs here, added by `_select_ware_to_sell` earler. + + """ + item = kwargs["item"] + value = kwargs["value"] + + coins = caller.coins + used_slots = caller.equipment.count_slots() + max_slots = caller.equipment.max_slots + + text = caller.equipment.get_obj_stats(item) + text += f"\n\n[You have |y{coins}|n coins] and are using |b{used_slots}/{max_slots}|n slots]" + + options = ( + {"desc": f"Sell [{value} coins]", "goto": (_sell_ware, kwargs)}, + {"desc": "Cancel", "goto": (_back_to_previous_node, kwargs)}, + ) + + return text, options + + +# node tree to inject for selling things +node_tree_sell = {"node_start_sell": node_start_sell, "node_confirm_sell": node_confirm_sell} + + +# Full shopkeep node tree - inject into ShopKeep NPC menu to add buy/sell submenus +node_tree_shopkeep = {**node_tree_buy, **node_tree_sell} diff --git a/evennia/utils/evmenu.py b/evennia/utils/evmenu.py index 060d47c140..41df976a66 100644 --- a/evennia/utils/evmenu.py +++ b/evennia/utils/evmenu.py @@ -269,24 +269,23 @@ they will be tested in sequence. """ -import re import inspect - +import re from ast import literal_eval from fnmatch import fnmatch +from inspect import getargspec, isfunction from math import ceil -from inspect import isfunction, getargspec from django.conf import settings -from evennia import Command, CmdSet -from evennia.utils import logger -from evennia.utils.evtable import EvTable, EvColumn -from evennia.utils.ansi import strip_ansi -from evennia.utils.utils import mod_import, make_iter, pad, to_str, m_len, is_iter, dedent, crop -from evennia.commands import cmdhandler # i18n from django.utils.translation import gettext as _ +from evennia import CmdSet, Command +from evennia.commands import cmdhandler +from evennia.utils import logger +from evennia.utils.ansi import strip_ansi +from evennia.utils.evtable import EvColumn, EvTable +from evennia.utils.utils import crop, dedent, is_iter, m_len, make_iter, mod_import, pad, to_str # read from protocol NAWS later? _MAX_TEXT_WIDTH = settings.CLIENT_DEFAULT_WIDTH @@ -1394,9 +1393,9 @@ def list_node(option_generator, select=None, pagesize=10): # we assume a string was given, we inject the result into the kwargs # to pass on to the next node kwargs["selection"] = selection - return str(select) + return str(select), kwargs # this means the previous node will be re-run with these same kwargs - return None + return None, kwargs def _list_node(caller, raw_string, **kwargs): From 075fc996a370eb83cd114a4e0ba7a7b92613815b Mon Sep 17 00:00:00 2001 From: Brenden Tuck Date: Thu, 4 Aug 2022 10:22:38 -0400 Subject: [PATCH 060/177] Add inventory tagging --- evennia/commands/default/general.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/commands/default/general.py b/evennia/commands/default/general.py index 98ad671e7a..d3eb913a71 100644 --- a/evennia/commands/default/general.py +++ b/evennia/commands/default/general.py @@ -390,7 +390,7 @@ class CmdInventory(COMMAND_DEFAULT_CLASS): "{}|n".format(utils.crop(raw_ansi(item.db.desc or ""), width=50) or ""), ) string = f"|wYou are carrying:\n{table}" - self.caller.msg(string) + self.caller.msg(text=(string, {"type": "inventory"})) class CmdGet(COMMAND_DEFAULT_CLASS): From 252950eaa55f1b02cf7d8b287b941435d52b712b Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 4 Aug 2022 20:22:42 +0200 Subject: [PATCH 061/177] Add all needed evadventure commands --- evennia/commands/default/general.py | 7 +- .../tutorials/evadventure/characters.py | 26 +- .../tutorials/evadventure/combat_turnbased.py | 2 +- .../contrib/tutorials/evadventure/commands.py | 361 +++++++++++++++++- .../tutorials/evadventure/equipment.py | 106 +++-- evennia/contrib/tutorials/evadventure/npcs.py | 2 +- .../contrib/tutorials/evadventure/utils.py | 44 +++ evennia/utils/evmenu.py | 3 +- 8 files changed, 490 insertions(+), 61 deletions(-) diff --git a/evennia/commands/default/general.py b/evennia/commands/default/general.py index 98ad671e7a..7c5b05de1b 100644 --- a/evennia/commands/default/general.py +++ b/evennia/commands/default/general.py @@ -2,9 +2,10 @@ General Character commands usually available to all characters """ import re + from django.conf import settings -from evennia.utils import utils from evennia.typeclasses.attributes import NickTemplateInvalid +from evennia.utils import utils COMMAND_DEFAULT_CLASS = utils.class_from_module(settings.COMMAND_DEFAULT_CLASS) @@ -501,7 +502,7 @@ class CmdGive(COMMAND_DEFAULT_CLASS): Usage: give - Gives an items from your inventory to another character, + Gives an item from your inventory to another person, placing it in their inventory. """ @@ -538,7 +539,7 @@ class CmdGive(COMMAND_DEFAULT_CLASS): return # give object - success = to_give.move_to(target, quiet=True, move_type="get") + success = to_give.move_to(target, quiet=True, move_type="give") if not success: caller.msg("This could not be given.") else: diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 9d866fa328..50cce06d09 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -5,11 +5,14 @@ Character class. from evennia.objects.objects import DefaultCharacter from evennia.typeclasses.attributes import AttributeProperty +from evennia.utils.evmenu import ask_yes_no +from evennia.utils.logger import log_trace from evennia.utils.utils import lazy_property from . import rules -from .equipment import EquipmentHandler +from .equipment import EquipmentError, EquipmentHandler from .quests import EvAdventureQuestHandler +from .utils import get_obj_stats class LivingMixin: @@ -79,7 +82,7 @@ class LivingMixin: """ pass - def at_loot(self, looted): + def at_do_loot(self, looted): """ Called when looting another entity. @@ -87,9 +90,9 @@ class LivingMixin: looted: The thing to loot. """ - looted.get_loot() + looted.at_looted() - def get_loot(self, looter): + def at_looted(self, looter): """ Called when being looted (after defeat). @@ -186,12 +189,14 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): Args: moved_object (Object): Object to move into this one (that is, into inventory). source_location (Object): Source location moved from. - **kwargs: Passed from move operation; unused here. + **kwargs: Passed from move operation; the `move_type` is useful; if someone is giving + us something (`move_type=='give'`) we want to ask first. Returns: bool: If move should be allowed or not. """ + # this will raise EquipmentError if inventory is full return self.equipment.validate_slot_usage(moved_object) def at_object_receive(self, moved_object, source_location, **kwargs): @@ -205,15 +210,18 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): **kwargs: Passed from move operation; unused here. """ - self.equipment.add(moved_object) + try: + self.equipment.add(moved_object) + except EquipmentError as err: + log_trace(f"at_object_receive error: {err}") def at_pre_object_leave(self, leaving_object, destination, **kwargs): """ Hook called when dropping an item. We don't allow to drop weilded/worn items - (need to unwield/remove them first). + (need to unwield/remove them first). Return False to """ - return self.equipment.can_remove(leaving_object) + return True def at_object_leave(self, moved_object, destination, **kwargs): """ @@ -264,7 +272,7 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): # don't allow looting in pvp return not self.location.allow_pvp - def get_loot(self, looter): + def at_looted(self, looter): """ Called when being looted. diff --git a/evennia/contrib/tutorials/evadventure/combat_turnbased.py b/evennia/contrib/tutorials/evadventure/combat_turnbased.py index 25dbc0cf86..a84df2c577 100644 --- a/evennia/contrib/tutorials/evadventure/combat_turnbased.py +++ b/evennia/contrib/tutorials/evadventure/combat_turnbased.py @@ -765,7 +765,7 @@ class EvAdventureCombatHandler(DefaultScript): for enemy in defeated_enemies: try: if ally.pre_loot(enemy): - enemy.get_loot(ally) + enemy.at_looted(ally) ally.post_loot(enemy) except Exception: logger.log_trace() diff --git a/evennia/contrib/tutorials/evadventure/commands.py b/evennia/contrib/tutorials/evadventure/commands.py index 70d8dc4476..c4fcc82157 100644 --- a/evennia/contrib/tutorials/evadventure/commands.py +++ b/evennia/contrib/tutorials/evadventure/commands.py @@ -9,13 +9,35 @@ New commands: inventory wield/wear unwield/remove - give to + give to + talk +To install, add the `EvAdventureCmdSet` from this module to the default character cmdset: + +```python + # in mygame/commands/default_cmds.py + + from evennia.contrib.tutorials.evadventure.commands import EvAdventureCmdSet # <--- + + # ... + + class CharacterCmdSet(CmdSet): + def at_cmdset_creation(self): + # ... + self.add(EvAdventureCmdSet) # <----- + +``` """ -from evennia import Command, default_cmds +from evennia import CmdSet, Command, InterruptCommand +from evennia.utils.evmenu import EvMenu +from evennia.utils.utils import inherits_from from .combat_turnbased import CombatFailure, join_combat +from .enums import WieldLocation +from .equipment import EquipmentError +from .npcs import EvAdventureTalkativeNPC +from .utils import get_obj_stats class EvAdventureCommand(Command): @@ -93,12 +115,343 @@ class CmdInventory(EvAdventureCommand): self.caller.msg(self.caller.equipment.display_loadout()) -class CmdWield(EvAdventureCommand): +class CmdWieldOrWear(EvAdventureCommand): """ - Wield a weapon/shield or wear armor. + Wield a weapon/shield, or wear a piece of armor or a helmet. Usage: wield wear + The item will automatically end up in the suitable spot, replacing whatever + was there previously. + """ + + key = "wield" + aliases = ("wear",) + + out_txts = { + WieldLocation.BACKPACK: "You shuffle the position of {key} around in your backpack.", + WieldLocation.TWO_HANDS: "You hold {key} with both hands.", + WieldLocation.WEAPON_HAND: "You hold {key} in your strongest hand, ready for action.", + WieldLocation.SHIELD_HAND: "You hold {key} in your off hand, ready to protect you.", + WieldLocation.BODY: "You strap {key} on yourself.", + WieldLocation.HEAD: "You put {key} on your head.", + } + + def func(self): + # find the item among those in equipment + item = self.caller.search(self.args, candidates=self.caller.equipment.all(only_objs=True)) + if not item: + # An 'item not found' error will already have been reported; we add another line + # here for clarity. + self.caller.msg("You must carry the item you want to wield or wear.") + return + + use_slot = getattr(item, "inventory_use_slot", WieldLocation.BACKPACK) + + # check what is currently in this slot + current = self.caller.equipment.slots[use_slot] + + if current == item: + self.caller.msg(f"You are already using {item.key} here.") + return + + # move it to the right slot based on the type of object + self.caller.equipment.use(item) + + # inform the user of the change (and potential swap) + if current: + self.caller.msg(f"Returning {current.key} to the backpack.") + self.caller.msg(self.out_txts[use_slot].format(key=item.key)) + + +class CmdRemove(EvAdventureCommand): + """ + Remove a remove a weapon/shield, armor or helmet. + + Usage: + remove + unwield + unwear + + To remove an item from the backpack, use |wdrop|n instead. + + """ + + key = "remove" + aliases = ("unwield", "unwear") + + def func(self): + caller = self.caller + + # find the item among those in equipment + item = caller.search(self.args, candidates=caller.equipment.all(only_objs=True)) + if not item: + # An 'item not found' error will already have been reported + return + + current_slot = caller.equipment.get_current_slot(item) + + if current_slot is WieldLocation.BACKPACK: + # we don't allow dropping this way since it may be unexepected by users who forgot just + # where their item currently is. + caller.msg( + f"You already stashed away {item.key} in your backpack. Use 'drop' if " + "you want to get rid of it." + ) + return + + caller.equipment.remove(item) + caller.equipment.add(item) + caller.msg(f"You stash {item.key} in your backpack.") + + +# give / accept menu + + +def _rescind_gift(caller, raw_string, **kwargs): + """ + Called when giver rescinds their gift in `node_give` below. + It means they entered 'cancel' on the gift screen. + + """ + # kill the gift menu for the receiver immediately + receiver = kwargs["receiver"] + receiver.ndb._evmenu.close_menu() + receiver.msg("The offer was rescinded.") + return "node_end" + + +def node_give(caller, raw_string, **kwargs): + """ + This will show to the giver until receiver accepts/declines. It allows them + to rescind their offer. + + The `caller` here is the one giving the item. We also make sure to feed + the 'item' and 'receiver' into the Evmenu. + + """ + item = kwargs["item"] + receiver = kwargs["receiver"] + text = f""" +You are offering {item.key} to {receiver.get_display_name(looker=caller)}. +|wWaiting for them to accept or reject the offer ...|n +""".strip() + + options = { + "key": ("cancel", "abort"), + "desc": "Rescind your offer.", + "goto": (_rescind_gift, kwargs), + } + return text, options + + +def _accept_or_reject_gift(caller, raw_string, **kwargs): + """ + Called when receiver enters yes/no in `node_receive` below. We first need to + figure out which. + + """ + item = kwargs["item"] + giver = kwargs["giver"] + if raw_string.lower() in ("yes", "y"): + # they accepted - move the item! + item = giver.equipment.remove(item) + if item: + try: + # this will also add them to the equipment backpack, if possible + item.move_to(caller, quiet=True, move_type="give") + except EquipmentError: + caller.location.msg_contents( + f"$You({giver.key.key}) $conj(try) to give " + f"{item.key} to $You({caller.key}), but they can't accept it since their " + "inventory is full.", + mapping={giver.key: giver, caller.key: caller}, + ) + else: + caller.location.msg_contents( + f"$You({giver.key}) $conj(give) {item.key} to $You({caller.key}), " + "and they accepted the offer.", + mapping={giver.key: giver, caller.key: caller}, + ) + giver.ndb._evmenu.close_menu() + return "node_end" + + +def node_receive(caller, raw_string, **kwargs): + """ + Will show to the receiver and allow them to accept/decline the offer for + as long as the giver didn't rescind it. + + The `caller` here is the one receiving the item. We also make sure to feed + the 'item' and 'giver' into the EvMenu. + + """ + item = kwargs["item"] + giver = kwargs["giver"] + text = f""" +{giver.get_display_name()} is offering you {item.key}: + +{get_obj_stats(item)} + +[Your inventory usage: {caller.equipment.get_slot_usage_string()}] +|wDo you want to accept the given item? Y/[N] + """ + options = ({"key": "_default", "goto": (_accept_or_reject_gift, kwargs)},) + return text, options + + +def node_end(caller, raw_string, **kwargs): + return "", None + + +class CmdGive(EvAdventureCommand): + """ + Give item or money to another person. Items need to be accepted before + they change hands. Money changes hands immediately with no wait. + + Usage: + give to + give [coins] to receiver + + If item name includes ' to ', surround it in quotes. + + Examples: + give apple to ranger + give "road to happiness" to sad ranger + give 10 coins to ranger + give 12 to ranger + + """ + + key = "give" + + def parse(self): + """ + Parsing is a little more complex for this command. + + """ + super().parse() + args = self.args + if " to " not in args: + self.caller.msg( + "Usage: give to . Specify e.g. '10 coins' to pay money. " + "Use quotes around the item name it if includes the substring ' to '. " + ) + raise InterruptCommand + + self.item_name = "" + self.coins = 0 + + # make sure we can use '...' to include items with ' to ' in the name + if args.startswith('"') and args.count('"') > 1: + end_ind = args[1:].index('"') + 1 + item_name = args[:end_ind] + _, receiver_name = args.split(" to ", 1) + elif args.startswith("'") and args.count("'") > 1: + end_ind = args[1:].index("'") + 1 + item_name = args[:end_ind] + _, receiver_name = args.split(" to ", 1) + else: + item_name, receiver_name = args.split(" to ", 1) + + # a coin count rather than a normal name + if " coins" in item_name: + item_name = item_name[:-6] + if item_name.isnumeric(): + self.coins = max(0, int(item_name)) + + self.item_name = item_name + self.receiver_name = receiver_name + + def func(self): + caller = self.caller + + receiver = caller.search(self.receiver_name) + if not receiver: + return + + # giving of coins is always accepted + + if self.coins: + current_coins = caller.coins + if caller.coins < current_coins: + caller.msg("You only have |y{current_coins}|n to give.") + return + # do transaction + caller.coins -= self.coins + receiver.coins += self.coins + caller.location.msg_contents( + f"$You() $conj(give) $You(receiver.key) {self.coins} coins." + ) + return + + # giving of items require acceptance before it happens + + item = caller.search(self.item_name, candidates=caller.equipment.all(only_objs=True)) + if not item: + return + + # testing hook + if not item.at_pre_give(caller, receiver): + return + + # before we start menus, we must check so either part is not already in a menu, + # that would be annoying otherwise + if receiver.ndb._evmenu: + caller.msg( + f"{receiver.get_display_name(looker=caller)} seems busy talking to someone else." + ) + return + if caller.ndb._evmenu: + caller.msg("Close the current menu first.") + return + + # this starts evmenus for both parties + EvMenu( + receiver, {"node_receive": node_receive, "node_end": node_end}, item=item, giver=caller + ) + EvMenu(caller, {"node_give": node_give, "node_end": node_end}, item=item, receiver=receiver) + + +class CmdTalk(EvAdventureCommand): + """ + Start a conversations with shop keepers and other NPCs in the world. + + Args: + talk + + """ + + key = "talk" + + def func(self): + target = self.search(self.args) + if not target: + return + + if not inherits_from(target, EvAdventureTalkativeNPC): + self.caller.msg( + f"{target.get_display_name(looker=self.caller)} does not seem very talkative." + ) + return + target.at_talk(self.caller) + + +class EvAdventureCmdSet(CmdSet): + """ + Groups all commands in one cmdset which can be added in one go to the DefaultCharacter cmdset. + + """ + + key = "evadventure" + + def at_cmdset_creation(self): + self.add(CmdAttackTurnBased()) + self.add(CmdInventory()) + self.add(CmdWieldOrWear()) + self.add(CmdRemove()) + self.add(CmdGive()) + self.add(CmdTalk()) diff --git a/evennia/contrib/tutorials/evadventure/equipment.py b/evennia/contrib/tutorials/evadventure/equipment.py index fe045ea4da..04dec2c36a 100644 --- a/evennia/contrib/tutorials/evadventure/equipment.py +++ b/evennia/contrib/tutorials/evadventure/equipment.py @@ -3,8 +3,10 @@ Knave has a system of Slots for its inventory. """ +from evennia.utils.utils import inherits_from + from .enums import Ability, WieldLocation -from .objects import WeaponEmptyHand +from .objects import EvAdventureObject, WeaponEmptyHand class EquipmentError(TypeError): @@ -81,6 +83,16 @@ class EquipmentHandler: """ return getattr(self.obj, Ability.CON.value, 1) + 10 + def get_slot_usage_string(self): + """ + Get a slot usage/max string for display. + + Returns: + str: The usage string. + + """ + return f"|b{self.count_slots()}/{self.max_slots}|n" + def validate_slot_usage(self, obj): """ Check if obj can fit in equipment, based on its size. @@ -92,7 +104,10 @@ class EquipmentHandler: EquipmentError: If there's not enough room. """ - size = getattr(obj, "size", 0) + if not inherits_from(obj, EvAdventureObject): + raise EquipmentError(f"{obj.key} is not something that can be equipped.") + + size = obj.size max_slots = self.max_slots current_slot_usage = self.count_slots() if current_slot_usage + size > max_slots: @@ -104,25 +119,21 @@ class EquipmentHandler: ) return True - def all(self): + def get_current_slot(self, obj): """ - Get all objects in inventory, regardless of location. + Check which slot-type the given object is in. + + Args: + obj (EvAdventureObject): The object to check. Returns: - list: A flat list of item tuples `[(item, WieldLocation),...]` - starting with the wielded ones, backpack content last. + WieldLocation: A location the object is in. None if the object + is not in the inventory at all. """ - slots = self.slots - lst = [ - (slots[WieldLocation.WEAPON_HAND], WieldLocation.WEAPON_HAND), - (slots[WieldLocation.SHIELD_HAND], WieldLocation.SHIELD_HAND), - (slots[WieldLocation.TWO_HANDS], WieldLocation.TWO_HANDS), - (slots[WieldLocation.BODY], WieldLocation.BODY), - (slots[WieldLocation.HEAD], WieldLocation.HEAD), - ] + [(item, WieldLocation.BACKPACK) for item in slots[WieldLocation.BACKPACK]] - # remove any None-results from empty slots - return [tup for tup in lst if item[0]] + for equipment_item, slot in self.all(): + if obj == equipment_item: + return slot @property def armor(self): @@ -205,10 +216,10 @@ class EquipmentHandler: return f"{weapon_str}{shield_str}\n{armor_str}{helmet_str}" - def use(self, obj): + def move(self, obj): """ - Make use of item - this makes use of the object's wield slot to decide where - it goes. If it doesn't have any, it goes into backpack. + Moves item to the place it things it should be in - this makes use of the object's wield + slot to decide where it goes. If it doesn't have any, it goes into backpack. Args: obj (EvAdventureObject): Thing to use. @@ -238,7 +249,7 @@ class EquipmentHandler: slots[WieldLocation.WEAPON_HAND] = slots[WieldLocation.SHIELD_HAND] = None slots[use_slot] = obj elif use_slot in (WieldLocation.WEAPON_HAND, WieldLocation.SHIELD_HAND): - # can't keep a two-handed weapon if adding a one-handede weapon or shield + # can't keep a two-handed weapon if adding a one-handed weapon or shield slots[WieldLocation.TWO_HANDS] = None slots[use_slot] = obj elif use_slot is WieldLocation.BACKPACK: @@ -255,19 +266,19 @@ class EquipmentHandler: """ Put something in the backpack specifically (even if it could be wield/worn). + Args: + obj (EvAdventureObject): The object to add. + + Notes: + This will not change the object's `.location`, this must be done + by the calling code. + """ # check if we have room self.validate_slot_usage(obj) self.slots[WieldLocation.BACKPACK].append(obj) self._save() - def can_remove(self, leaving_object): - """ - Called to check if the object can be removed. - - """ - return True # TODO - some things may not be so easy, like mud - def remove(self, obj_or_slot): """ Remove specific object or objects from a slot. @@ -279,6 +290,10 @@ class EquipmentHandler: Returns: list: A list of 0, 1 or more objects emptied from the inventory. + Notes: + This will not change the object's `.location`, this must be done separately + by the calling code. + """ slots = self.slots ret = [] @@ -354,21 +369,28 @@ class EquipmentHandler: character = self.obj return [obj for obj in self.slots[WieldLocation.BACKPACK] if obj.at_pre_use(character)] - def get_obj_stats(self, obj): + def all(self, only_objs=False): """ - Get a string of stats about the object. + Get all objects in inventory, regardless of location. + + Keyword Args: + only_objs (bool): Only return a flat list of objects, not tuples. + + Returns: + list: A list of item tuples `[(item, WieldLocation),...]` + starting with the wielded ones, backpack content last. If `only_objs` is set, + this will just be a flat list of objects. """ - objmap = dict(self.all()) - carried = objmap.get(obj) - carried = f"Worn: [{carried.value}]" if carried else "" - - return f""" -|c{self.key}|n Value: |y{self.value}|n coins {carried} - -{self.desc} - -Slots: |w{self.size}|n Used from: |w{self.use_slot.value}|n -Quality: |w{self.quality}|n Uses: |wself.uses|n -Attacks using: |w{self.attack_type.value}|n against |w{self.defense_type.value}|n -Damage roll: |w{self.damage_roll}""" + slots = self.slots + lst = [ + (slots[WieldLocation.WEAPON_HAND], WieldLocation.WEAPON_HAND), + (slots[WieldLocation.SHIELD_HAND], WieldLocation.SHIELD_HAND), + (slots[WieldLocation.TWO_HANDS], WieldLocation.TWO_HANDS), + (slots[WieldLocation.BODY], WieldLocation.BODY), + (slots[WieldLocation.HEAD], WieldLocation.HEAD), + ] + [(item, WieldLocation.BACKPACK) for item in slots[WieldLocation.BACKPACK]] + # remove any None-results from empty slots + if only_objs: + return [tup[0] for tup in lst if tup[0]] + return [tup for tup in lst if tup[0]] diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index c7313e63c2..02f777a316 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -280,7 +280,7 @@ class EvAdventureMob(EvAdventureNPC): """ self.at_death() - def at_loot(self, looted): + def at_do_loot(self, looted): """ Called when mob gets to loot a PC. diff --git a/evennia/contrib/tutorials/evadventure/utils.py b/evennia/contrib/tutorials/evadventure/utils.py index 070f252ad5..1e9b6d9127 100644 --- a/evennia/contrib/tutorials/evadventure/utils.py +++ b/evennia/contrib/tutorials/evadventure/utils.py @@ -2,3 +2,47 @@ Various utilities. """ + +_OBJ_STATS = """ +|c{key}|n Value: approx. |y{value}|n coins {carried} + +{desc} + +Slots: |w{size}|n Used from: |w{use_slot_name}|n +Quality: |w{quality}|n Uses: |wuses|n +Attacks using: |w{attack_type_name}|n against |w{defense_type_value}|n +Damage roll: |w{damage_roll}""".strip() + + +def get_obj_stats(obj, owner=None): + """ + Get a string of stats about the object. + + Args: + obj (EvAdventureObject): The object to get stats for. + owner (EvAdventureCharacter, optional): If given, it allows us to + also get information about if the item is currently worn/wielded. + + Returns: + str: A stat string to show about the object. + + """ + carried = "" + if owner: + objmap = dict(owner.equipment.all()) + carried = objmap.get(obj) + carried = f"Worn: [{carried.value}]" if carried else "" + + return _OBJ_STATS.format( + key=obj.key, + value=obj.value, + carried=carried, + desc=obj.db.desc, + size=obj.size, + use_slot=obj.use_slot.value, + quality=obj.quality, + uses=obj.uses, + attack_type=obj.attack_type.value, + defense_type=obj.defense_type.value, + damage_roll=obj.damage_roll, + ) diff --git a/evennia/utils/evmenu.py b/evennia/utils/evmenu.py index 41df976a66..1111f8faea 100644 --- a/evennia/utils/evmenu.py +++ b/evennia/utils/evmenu.py @@ -1744,10 +1744,11 @@ def ask_yes_no( **kwargs, ): """ - A helper question for asking a simple yes/no question. This will cause + A helper function for asking a simple yes/no question. This will cause the system to pause and wait for input from the player. Args: + caller (Object): The entity being asked. prompt (str): The yes/no question to ask. This takes an optional formatting marker `{options}` which will be filled with 'Y/N', '[Y]/N' or 'Y/[N]' depending on the setting of `default`. If `allow_abort` is set, From 7a3a457ba3e2cef77b98a40bf9619de24101247a Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 4 Aug 2022 21:08:14 +0200 Subject: [PATCH 062/177] Evadventure commands, some tests --- .../contrib/tutorials/evadventure/commands.py | 8 +++-- .../tutorials/evadventure/equipment.py | 33 +++++++++++++------ .../contrib/tutorials/evadventure/objects.py | 9 ++++- .../evadventure/tests/test_commands.py | 30 +++++++++++++++++ 4 files changed, 67 insertions(+), 13 deletions(-) create mode 100644 evennia/contrib/tutorials/evadventure/tests/test_commands.py diff --git a/evennia/contrib/tutorials/evadventure/commands.py b/evennia/contrib/tutorials/evadventure/commands.py index c4fcc82157..3e7f8a28a6 100644 --- a/evennia/contrib/tutorials/evadventure/commands.py +++ b/evennia/contrib/tutorials/evadventure/commands.py @@ -112,7 +112,11 @@ class CmdInventory(EvAdventureCommand): aliases = ("i", "inv") def func(self): - self.caller.msg(self.caller.equipment.display_loadout()) + loadout = self.caller.equipment.display_loadout() + backpack = self.caller.equipment.display_backpack() + slot_usage = self.caller.equipment.display_slot_usage() + + self.caller.msg(f"{loadout}\n{backpack}\nYou use {slot_usage} equipment slots.") class CmdWieldOrWear(EvAdventureCommand): @@ -296,7 +300,7 @@ def node_receive(caller, raw_string, **kwargs): {get_obj_stats(item)} -[Your inventory usage: {caller.equipment.get_slot_usage_string()}] +[Your inventory usage: {caller.equipment.display_slot_usage()}] |wDo you want to accept the given item? Y/[N] """ options = ({"key": "_default", "goto": (_accept_or_reject_gift, kwargs)},) diff --git a/evennia/contrib/tutorials/evadventure/equipment.py b/evennia/contrib/tutorials/evadventure/equipment.py index 04dec2c36a..a0b04e5a11 100644 --- a/evennia/contrib/tutorials/evadventure/equipment.py +++ b/evennia/contrib/tutorials/evadventure/equipment.py @@ -83,16 +83,6 @@ class EquipmentHandler: """ return getattr(self.obj, Ability.CON.value, 1) + 10 - def get_slot_usage_string(self): - """ - Get a slot usage/max string for display. - - Returns: - str: The usage string. - - """ - return f"|b{self.count_slots()}/{self.max_slots}|n" - def validate_slot_usage(self, obj): """ Check if obj can fit in equipment, based on its size. @@ -216,6 +206,29 @@ class EquipmentHandler: return f"{weapon_str}{shield_str}\n{armor_str}{helmet_str}" + def display_backpack(self): + """ + Get a visual representation of the backpack's contents. + + """ + backpack = self.slots[WieldLocation.BACKPACK] + if not backpack: + return "Backpack is empty." + out = [] + for item in backpack: + out.append(f"{item.key} [|b{item.size}|n] slot(s)") + return "\n".join(out) + + def display_slot_usage(self): + """ + Get a slot usage/max string for display. + + Returns: + str: The usage string. + + """ + return f"|b{self.count_slots()}/{self.max_slots}|n" + def move(self, obj): """ Moves item to the place it things it should be in - this makes use of the object's wield diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index afd08d181e..2807671c61 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -18,11 +18,12 @@ rune sword (weapon+quest). """ -from evennia import AttributeProperty, TagProperty +from evennia import AttributeProperty from evennia.objects.objects import DefaultObject from evennia.utils.utils import make_iter from .enums import Ability, ObjType, WieldLocation +from .utils import get_obj_stats class EvAdventureObject(DefaultObject): @@ -44,6 +45,12 @@ class EvAdventureObject(DefaultObject): for obj_type in make_iter(self.obj_type): self.tags.add(obj_type, category="obj_type") + def get_display_header(self, looker, **kwargs): + return "" # this is handled by get_obj_stats + + def get_display_desc(self, looker, **kwargs): + return get_obj_stats(self, owner=looker) + def has_obj_type(self, objtype): """ Check if object is of a particular type. diff --git a/evennia/contrib/tutorials/evadventure/tests/test_commands.py b/evennia/contrib/tutorials/evadventure/tests/test_commands.py new file mode 100644 index 0000000000..807487c022 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/test_commands.py @@ -0,0 +1,30 @@ +""" +Test the EvAdventure commands. + +""" + +from unittest.mock import MagicMock, patch + +from evennia.utils.test_resources import BaseEvenniaCommandTest + +from .. import commands +from .mixins import EvAdventureMixin + + +class TestEvAdventureCommands(EvAdventureMixin, BaseEvenniaCommandTest): + def setUp(self): + super().setUp() + # needed for the .call mechanism + self.char1 = self.character + + def test_inventory(self): + self.call( + commands.CmdInventory(), + "inventory", + """ +You are fighting with your bare fists and have no shield. +You wear no armor and no helmet. +Backpack is empty. +You use 0/11 equipment slots. +""".strip(), + ) From efe41111be1f6539d45f2be0d6686892648d16f5 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 5 Aug 2022 16:02:53 +0200 Subject: [PATCH 063/177] Finish evadventure menu unit tests --- .../contrib/tutorials/evadventure/commands.py | 14 +-- evennia/contrib/tutorials/evadventure/npcs.py | 4 +- .../evadventure/tests/test_commands.py | 98 ++++++++++++++++++- 3 files changed, 107 insertions(+), 9 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/commands.py b/evennia/contrib/tutorials/evadventure/commands.py index 3e7f8a28a6..95cb71ca5e 100644 --- a/evennia/contrib/tutorials/evadventure/commands.py +++ b/evennia/contrib/tutorials/evadventure/commands.py @@ -159,11 +159,11 @@ class CmdWieldOrWear(EvAdventureCommand): current = self.caller.equipment.slots[use_slot] if current == item: - self.caller.msg(f"You are already using {item.key} here.") + self.caller.msg(f"You are already using {item.key}.") return # move it to the right slot based on the type of object - self.caller.equipment.use(item) + self.caller.equipment.move(item) # inform the user of the change (and potential swap) if current: @@ -381,14 +381,16 @@ class CmdGive(EvAdventureCommand): if self.coins: current_coins = caller.coins - if caller.coins < current_coins: - caller.msg("You only have |y{current_coins}|n to give.") + if self.coins > current_coins: + caller.msg(f"You only have |y{current_coins}|n coins to give.") return # do transaction caller.coins -= self.coins receiver.coins += self.coins caller.location.msg_contents( - f"$You() $conj(give) $You(receiver.key) {self.coins} coins." + f"$You() $conj(give) $You({receiver.key}) {self.coins} coins.", + from_obj=caller, + mapping={receiver.key: receiver}, ) return @@ -432,7 +434,7 @@ class CmdTalk(EvAdventureCommand): key = "talk" def func(self): - target = self.search(self.args) + target = self.caller.search(self.args) if not target: return diff --git a/evennia/contrib/tutorials/evadventure/npcs.py b/evennia/contrib/tutorials/evadventure/npcs.py index 02f777a316..2b717d5287 100644 --- a/evennia/contrib/tutorials/evadventure/npcs.py +++ b/evennia/contrib/tutorials/evadventure/npcs.py @@ -105,8 +105,8 @@ class EvAdventureTalkativeNPC(EvAdventureNPC): """ - menudata = AttributeProperty(None, autocreate=False) - menu_kwargs = AttributeProperty(None, autocreate=False) + menudata = AttributeProperty(dict(), autocreate=False) + menu_kwargs = AttributeProperty(dict(), autocreate=False) # text shown when greeting at the start of a conversation. If this is an # iterable, a random reply will be chosen by the menu hi_text = AttributeProperty("Hi!", autocreate=False) diff --git a/evennia/contrib/tutorials/evadventure/tests/test_commands.py b/evennia/contrib/tutorials/evadventure/tests/test_commands.py index 807487c022..1c06a4124e 100644 --- a/evennia/contrib/tutorials/evadventure/tests/test_commands.py +++ b/evennia/contrib/tutorials/evadventure/tests/test_commands.py @@ -3,11 +3,15 @@ Test the EvAdventure commands. """ -from unittest.mock import MagicMock, patch +from unittest.mock import call, patch +from anything import Something +from evennia.utils.create import create_object from evennia.utils.test_resources import BaseEvenniaCommandTest from .. import commands +from ..characters import EvAdventureCharacter +from ..npcs import EvAdventureMob, EvAdventureShopKeeper from .mixins import EvAdventureMixin @@ -28,3 +32,95 @@ Backpack is empty. You use 0/11 equipment slots. """.strip(), ) + + @patch("evennia.contrib.tutorials.evadventure.commands.join_combat") + def test_attack(self, mock_join_combat): + self.location.allow_combat = True + + target = create_object(EvAdventureMob, key="Ogre", location=self.location) + + self.call(commands.CmdAttackTurnBased(), "ogre", "") + + mock_join_combat.assert_called_with(self.char1, target, session=Something) + + target.delete() + + def test_wield_or_wear(self): + self.char1.equipment.add(self.helmet) + self.char1.equipment.add(self.weapon) + self.shield.location = self.location + + self.call(commands.CmdWieldOrWear(), "shield", "Could not find 'shield'") + self.call(commands.CmdWieldOrWear(), "helmet", "You put helmet on your head.") + self.call( + commands.CmdWieldOrWear(), + "weapon", + "You hold weapon in your strongest hand, ready for action.", + ) + self.call(commands.CmdWieldOrWear(), "helmet", "You are already using helmet.") + + def test_remove(self): + self.char1.equipment.add(self.helmet) + self.call(commands.CmdWieldOrWear(), "helmet", "You put helmet on your head.") + + self.call(commands.CmdRemove(), "helmet", "You stash helmet in your backpack.") + + def test_give__coins(self): + recipient = create_object(EvAdventureCharacter, key="Friend", location=self.location) + recipient.coins = 0 + self.char1.coins = 100 + + self.call(commands.CmdGive(), "40 coins to friend", "You give Friend 40 coins.") + self.assertEqual(self.char1.coins, 60) + self.assertEqual(recipient.coins, 40) + + self.call(commands.CmdGive(), "10 to friend", "You give Friend 10 coins.") + self.assertEqual(self.char1.coins, 50) + self.assertEqual(recipient.coins, 50) + + self.call(commands.CmdGive(), "60 to friend", "You only have 50 coins to give.") + + recipient.delete() + + @patch("evennia.contrib.tutorials.evadventure.commands.EvMenu") + def test_give__item(self, mock_EvMenu): + + self.char1.equipment.add(self.helmet) + recipient = create_object(EvAdventureCharacter, key="Friend", location=self.location) + + self.call(commands.CmdGive(), "helmet to friend", "") + + mock_EvMenu.assert_has_calls( + ( + call( + recipient, + {"node_receive": Something, "node_end": Something}, + item=self.helmet, + giver=self.char1, + ), + call( + self.char1, + {"node_give": Something, "node_end": Something}, + item=self.helmet, + receiver=recipient, + ), + ) + ) + + recipient.delete() + + @patch("evennia.contrib.tutorials.evadventure.npcs.EvMenu") + def test_talk(self, mock_EvMenu): + npc = create_object(EvAdventureShopKeeper, key="shopkeep", location=self.location) + + npc.menudata = {"foo": None, "bar": None} + + self.call(commands.CmdTalk(), "shopkeep", "") + + mock_EvMenu.assert_called_with( + self.char1, + {"foo": None, "bar": None}, + startnode="node_start", + session=None, + npc=npc, + ) From 2fa990bd2e1392ea126adf8e054e333f29c95af7 Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Fri, 5 Aug 2022 11:30:03 -0700 Subject: [PATCH 064/177] buff property that returns time left --- evennia/contrib/rpg/buffs/buff.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index 01640366f5..b8ad197e35 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -144,6 +144,16 @@ class BaseBuff: return None return self.handler.owner + @property + def timeleft(self): + """Returns how much time this buff has left""" + _tl = 0 + if not self.start: + _tl = self.duration + else: + _tl = self.duration - (time.time() - self.start) + return _tl + @property def ticking(self) -> bool: """Returns if this buff ticks or not (tickrate => 1)""" From c7372996e5ebe9b0004ea238b96bf46a78836d6d Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Fri, 5 Aug 2022 11:30:28 -0700 Subject: [PATCH 065/177] alter_cache helper method on buffs --- evennia/contrib/rpg/buffs/buff.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index b8ad197e35..9e70403963 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -232,8 +232,18 @@ class BaseBuff: def reset(self): """Resets the buff start time as though it were just applied; functionally identical to a refresh""" + self.start = time.time() self.handler.buffcache[self.buffkey]["start"] = time.time() + def alter_cache(self, to_cache: dict = None): + """Alters this buff's cache, both internally (this instance) and on the handler's buff cache.""" + if not isinstance(to_cache, dict): + raise TypeError + _cache = dict(self.handler.buffcache[self.buffkey]) + _cache.update(to_cache) + self.cache = _cache + self.handler.buffcache[self.buffkey] = _cache + # endregion # region hook methods From 2f10eaa876e10e627734c5e438d022a45a048e38 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 5 Aug 2022 20:33:22 +0200 Subject: [PATCH 066/177] Start documenting evadventure --- docs/source/Coding/Changelog.md | 18 + docs/source/Coding/Unit-Testing.md | 2 +- docs/source/Contribs/Contrib-Buffs.md | 371 ++++++++++++++++++ .../source/Contribs/Contrib-Name-Generator.md | 282 +++++++++++++ docs/source/Contribs/Contribs-Overview.md | 26 ++ .../Part3 => }/A-Sittable-Object.md | 8 +- .../Part3/Beginner-Tutorial-Characters.md | 0 .../Part3/Beginner-Tutorial-Commands.md | 0 .../Part3/Beginner-Tutorial-Dungeon.md | 0 .../Part3/Beginner-Tutorial-NPCs.md | 0 .../Part3/Beginner-Tutorial-Objects.md | 0 .../Part3/Beginner-Tutorial-Part3-Intro.md | 63 +-- .../Part3/Beginner-Tutorial-Quests.md | 0 .../Part3/Beginner-Tutorial-Rooms.md | 0 .../Part3/Beginner-Tutorial-Rule-System.md | 0 .../Part3/Beginner-Tutorial-Shops.md | 0 .../Part3/Beginner-Tutorial-Turnbased-Combat | 0 .../Part3/Beginner-Tutorial-Utilities.md | 351 +++++++++++++++++ .../Implementing-a-game-rule-system.md | 4 +- docs/source/Howtos/Static-In-Game-Map.md | 2 +- .../Part3 => }/Turn-based-Combat-System.md | 14 +- docs/source/Persistent-Handler.md | 4 +- docs/source/Setup/Settings-Default.md | 14 +- ...tutorials.evadventure.tests.test_utils.rst | 7 + .../contrib/tutorials/evadventure/enums.py | 13 - .../tutorials/evadventure/tests/test_utils.py | 34 ++ .../contrib/tutorials/evadventure/utils.py | 28 +- 27 files changed, 1164 insertions(+), 77 deletions(-) create mode 100644 docs/source/Contribs/Contrib-Buffs.md create mode 100644 docs/source/Contribs/Contrib-Name-Generator.md rename docs/source/Howtos/{Beginner-Tutorial/Part3 => }/A-Sittable-Object.md (98%) rename evennia/contrib/tutorials/evadventure/combat_twitch.py => docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Characters.md (100%) create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Commands.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Dungeon.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-NPCs.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Quests.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rooms.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rule-System.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Shops.md create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Turnbased-Combat create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md rename docs/source/Howtos/{Beginner-Tutorial/Part3 => }/Implementing-a-game-rule-system.md (98%) rename docs/source/Howtos/{Beginner-Tutorial/Part3 => }/Turn-based-Combat-System.md (96%) create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst create mode 100644 evennia/contrib/tutorials/evadventure/tests/test_utils.py diff --git a/docs/source/Coding/Changelog.md b/docs/source/Coding/Changelog.md index 6feaed180f..103053b325 100644 --- a/docs/source/Coding/Changelog.md +++ b/docs/source/Coding/Changelog.md @@ -174,6 +174,24 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 - Simplified `EvMenu.options_formatter` hook to use `EvColumn` and f-strings (inspectorcaracal) - Allow `# CODE`, `# HEADER` etc as well as `#CODE`/`#HEADER` in batchcode files - this works better with black linting. +- Added `move_type` str kwarg to `move_to()` calls, optionally identifying the type of + move being done ('teleport', 'disembark', 'give' etc). (volund) +- Made RPSystem contrib msg calls pass `pose` or `say` as msg-`type` for use in + e.g. webclient pane filtering where desired. (volund) +- Added `Account.uses_screenreader(session=None)` as a quick shortcut for + finding if a user uses a screenreader (and adjust display accordingly). +- Fixed bug in `cmdset.remove()` where a command could not be deleted by `key`, + even though doc suggested one could (ChrisLR) +- New contrib `name_generator` for building random real-world based or fantasy-names + based on phonetic rules. +- Enable proper serialization of dict subclasses in Attributes (aogier) +- `object.search` fuzzy-matching now uses `icontains` instead of `istartswith` + to better match how search works elsewhere (volund) +- The `.at_traverse` hook now receives a `exit_obj` kwarg, linking back to the + exit triggering the hook (volund) +- Contrib `buffs` for managing temporary and permanent RPG status buffs effects (tegiminis) +- New `at_server_init()` hook called before all other startup hooks for all + startup modes. Used for more generic overriding (volund) ## Evennia 0.9.5 diff --git a/docs/source/Coding/Unit-Testing.md b/docs/source/Coding/Unit-Testing.md index 8f35930bf3..d4b29f0efb 100644 --- a/docs/source/Coding/Unit-Testing.md +++ b/docs/source/Coding/Unit-Testing.md @@ -35,7 +35,7 @@ unexpected bug. If you have implemented your own tests for your game you can run them from your game dir with - evennia test . + evennia test --settings settings.py . The period (`.`) means to run all tests found in the current directory and all subdirectories. You could also specify, say, `typeclasses` or `world` if you wanted to just run tests in those subdirs. diff --git a/docs/source/Contribs/Contrib-Buffs.md b/docs/source/Contribs/Contrib-Buffs.md new file mode 100644 index 0000000000..1b09d19dd5 --- /dev/null +++ b/docs/source/Contribs/Contrib-Buffs.md @@ -0,0 +1,371 @@ +# Buffs + +Contribution by Tegiminis 2022 + +A buff is a timed object, attached to a game entity. It is capable of modifying values, triggering code, or both. +It is a common design pattern in RPGs, particularly action games. + +Features: + +- `BuffHandler`: A buff handler to apply to your objects. +- `BaseBuff`: A buff class to extend from to create your own buffs. +- `BuffableProperty`: A sample property class to show how to automatically check modifiers. +- `CmdBuff`: A command which applies buffs. +- `samplebuffs.py`: Some sample buffs to learn from. + +## Quick Start +Assign the handler to a property on the object, like so. + +```python +@lazy_property +def buffs(self) -> BuffHandler: + return BuffHandler(self) +``` + +You may then call the handler to add or manipulate buffs like so: `object.buffs`. See **Using the Handler**. + +### Customization + +If you want to customize the handler, you can feed the constructor two arguments: +- `dbkey`: The string you wish to use as the attribute key for the buff database. Defaults to "buffs". This allows you to keep separate buff pools - for example, "buffs" and "perks". +- `autopause`: If you want this handler to automatically pause playtime buffs when its owning object is unpuppeted. + +> **Note**: If you enable autopausing, you MUST initialize the property in your owning object's +> `at_init` hook. Otherwise, a hot reload can cause playtime buffs to not update properly +> on puppet/unpuppet. You have been warned! + +Let's say you want another handler for an object, `perks`, which has a separate database and +respects playtime buffs. You'd assign this new property as so: + +```python +class BuffableObject(Object): + @lazy_property + def perks(self) -> BuffHandler: + return BuffHandler(self, dbkey='perks', autopause=True) + + def at_init(self): + self.perks +``` + +## Using the Handler + +Here's how to make use of your new handler. + +### Apply a Buff + +Call the handler's `add` method. This requires a class reference, and also contains a number of +optional arguments to customize the buff's duration, stacks, and so on. You can also store any arbitrary value +in the buff's cache by passing a dictionary through the `to_cache` optional argument. This will not overwrite the normal +values on the cache. + +```python +self.buffs.add(StrengthBuff) # A single stack of StrengthBuff with normal duration +self.buffs.add(DexBuff, stacks=3, duration=60) # Three stacks of DexBuff, with a duration of 60 seconds +self.buffs.add(ReflectBuff, to_cache={'reflect': 0.5}) # A single stack of ReflectBuff, with an extra cache value +``` + +Two important attributes on the buff are checked when the buff is applied: `refresh` and `unique`. +- `refresh` (default: True) determines if a buff's timer is refreshed when it is reapplied. +- `unique` (default: True) determines if this buff is unique; that is, only one of it exists on the object. + +The combination of these two booleans creates one of three kinds of keys: +- `Unique is True, Refresh is True/False`: The buff's default key. +- `Unique is False, Refresh is True`: The default key mixed with the applier's dbref. This makes the buff "unique-per-player", so you can refresh through reapplication. +- `Unique is False, Refresh is False`: The default key mixed with a randomized number. + +### Get Buffs + +The handler has several getter methods which return instanced buffs. You won't need to use these for basic functionality, but if you want to manipulate +buffs after application, they are very useful. The handler's `check`/`trigger` methods utilize some of these getters, while others are just for developer convenience. + +`get(key)` is the most basic getter. It returns a single buff instance, or `None` if the buff doesn't exist on the handler. It is also the only getter +that returns a single buff instance, rather than a dictionary. + +Group getters, listed below, return a dictionary of values in the format `{buffkey: instance}`. If you want to iterate over all of these buffs, +you should do so via the `dict.values()` method. + +- `get_all()` returns all buffs on this handler. You can also use the `handler.all` property. +- `get_by_type(BuffClass)` returns buffs of the specified type. +- `get_by_stat(stat)` returns buffs with a `Mod` object of the specified `stat` string in their `mods` list. +- `get_by_trigger(string)` returns buffs with the specified string in their `triggers` list. +- `get_by_source(Object)` returns buffs applied by the specified `source` object. +- `get_by_cachevalue(key, value)` returns buffs with the matching `key: value` pair in their cache. `value` is optional. + +All group getters besides `get_all()` can "slice" an existing dictionary through the optional `to_filter` argument. + +```python +dict1 = handler.get_by_type(Burned) # This finds all "Burned" buffs on the handler +dict2 = handler.get_by_source(self, to_filter=dict1) # This filters dict1 to find buffs with the matching source +``` + +> **Note**: Most of these getters also have an associated handler property. For example, `handler.effects` returns all buffs that can be triggered, which +> is then iterated over by the `get_by_trigger` method. + +### Remove Buffs + +There are also a number of remover methods. Generally speaking, these follow the same format as the getters. + +- `remove(key)` removes the buff with the specified key. +- `clear()` removes all buffs. +- `remove_by_type(BuffClass)` removes buffs of the specified type. +- `remove_by_stat(stat)` removes buffs with a `Mod` object of the specified `stat` string in their `mods` list. +- `remove_by_trigger(string)` removes buffs with the specified string in their `triggers` list. +- `remove_by_source(Object)` removes buffs applied by the specified source +- `remove_by_cachevalue(key, value)` removes buffs with the matching `key: value` pair in their cache. `value` is optional. + +You can also remove a buff by calling the instance's `remove` helper method. You can do this on the dictionaries returned by the +getters listed above. + +```python +to_remove = handler.get_by_trigger(trigger) # Finds all buffs with the specified trigger +for buff in to_remove.values(): # Removes all buffs in the to_remove dictionary via helper methods + buff.remove() +``` + +### Check Modifiers + +Call the handler `check(value, stat)` method when you want to see the modified value. +This will return the `value`, modified by any relevant buffs on the handler's owner (identified by +the `stat` string). + +For example, let's say you want to modify how much damage you take. That might look something like this: + +```python +# The method we call to damage ourselves +def take_damage(self, source, damage): + _damage = self.buffs.check(damage, 'taken_damage') + self.db.health -= _damage +``` + +This method calls the `at_pre_check` and `at_post_check` methods at the relevant points in the process. You can use to this make +buffs that are reactive to being checked; for example, removing themselves, altering their values, or interacting with the game state. + +> **Note**: You can also trigger relevant buffs at the same time as you check them by ensuring the optional argument `trigger` is True in the `check` method. + +### Trigger Buffs + +Call the handler's `trigger(string)` method when you want an event call. This will call the `at_trigger` hook method on all buffs with the relevant trigger `string`. + +For example, let's say you want to trigger a buff to "detonate" when you hit your target with an attack. +You'd write a buff that might look like this: + +```python +class Detonate(BaseBuff): + ... + triggers = ['take_damage'] + def at_trigger(self, trigger, *args, **kwargs) + self.owner.take_damage(100) + self.remove() +``` + +And then call `handler.trigger('take_damage')` in the method you use to take damage. + +> **Note** You could also do this through mods and `at_post_check` if you like, depending on how to want to add the damage. + +### Ticking + +Ticking buffs are slightly special. They are similar to trigger buffs in that they run code, but instead of +doing so on an event trigger, they do so on a periodic tick. A common use case for a buff like this is a poison, +or a heal over time. + +```python +class Poison(BaseBuff): + ... + tickrate = 5 + def at_tick(self, initial=True, *args, **kwargs): + _dmg = self.dmg * self.stacks + if not initial: + self.owner.location.msg_contents( + "Poison courses through {actor}'s body, dealing {damage} damage.".format( + actor=self.owner.named, damage=_dmg + ) + ) +``` + +To make a buff ticking, ensure the `tickrate` is 1 or higher, and it has code in its `at_tick` +method. Once you add it to the handler, it starts ticking! + +> **Note**: Ticking buffs always tick on initial application, when `initial` is `True`. If you don't want your hook to fire at that time, +> make sure to check the value of `initial` in your `at_tick` method. + +### Context + +Every important handler method optionally accepts a `context` dictionary. + +Context is an important concept for this handler. Every method which checks, triggers, or ticks a buff passes this +dictionary (default: empty) to the buff hook methods as keyword arguments (`**kwargs`). It is used for nothing else. This allows you to make those +methods "event-aware" by storing relevant data in the dictionary you feed to the method. + +For example, let's say you want a "thorns" buff which damages enemies that attack you. Let's take our `take_damage` method +and add a context to the mix. + +```python +def take_damage(attacker, damage): + context = {'attacker': attacker, 'damage': damage} + _damage = self.buffs.check(damage, 'taken_damage', context=context) + self.buffs.trigger('taken_damage', context=context) + self.db.health -= _damage +``` +Now we use the values that context passes to the buff kwargs to customize our logic. +```python +class ThornsBuff(BaseBuff): + ... + triggers = ['taken_damage'] + # This is the hook method on our thorns buff + def at_trigger(self, trigger, attacker=None, damage=0, **kwargs): + if not attacker: + return + attacker.db.health -= damage * 0.2 +``` +Apply the buff, take damage, and watch the thorns buff do its work! + +## Creating New Buffs + +Creating a new buff is very easy: extend `BaseBuff` into a new class, and fill in all the relevant buff details. +However, there are a lot of individual moving parts to a buff. Here's a step-through of the important stuff. + +### Basics + +Regardless of any other functionality, all buffs have the following class attributes: + +- They have customizable `key`, `name`, and `flavor` strings. +- They have a `duration` (float), and automatically clean-up at the end. Use -1 for infinite duration, and 0 to clean-up immediately. (default: -1) +- They can stack, if `maxstacks` (int) is not equal to 1. If it's 0, the buff stacks forever. (default: 1) +- They can be `unique` (bool), which determines if they have a unique namespace or not. (default: True) +- They can `refresh` (bool), which resets the duration when stacked or reapplied. (default: True) +- They can be `playtime` (bool) buffs, where duration only counts down during active play. (default: False) + +They also always store some useful mutable information about themselves in the cache: + +- `ref` (class): The buff class path we use to construct the buff. +- `start` (float): The timestamp of when the buff was applied. +- `source` (Object): If specified; this allows you to track who or what applied the buff. +- `prevtick` (float): The timestamp of the previous tick. +- `duration` (float): The cached duration. This can vary from the class duration, depending on if the duration has been modified (paused, extended, shortened, etc). +- `stacks` (int): How many stacks they have. +- `paused` (bool): Paused buffs do not clean up, modify values, tick, or fire any hook methods. + +You can always access the raw cache dictionary through the `cache` attribute on an instanced buff. This is grabbed when you get the buff through +a handler method, so it may not always reflect recent changes you've made, depending on how you structure your buff calls. All of the above +mutable information can be found in this cache, as well as any arbitrary information you pass through the handler `add` method (via `to_cache`). + +### Modifiers + +Mods are stored in the `mods` list attribute. Buffs which have one or more Mod objects in them can modify stats. You can use the handler method to check all +mods of a specific stat string and apply their modifications to the value; however, you are encouraged to use `check` in a getter/setter, for easy access. + +Mod objects consist of only four values, assigned by the constructor in this order: + +- `stat`: The stat you want to modify. When `check` is called, this string is used to find all the mods that are to be collected. +- `mod`: The modifier. Defaults are 'add' and 'mult'. Modifiers are calculated additively, and in standard arithmetic order (see `_calculate_mods` for more) +- `value`: How much value the modifier gives regardless of stacks +- `perstack`: How much value the modifier grants per stack, INCLUDING the first. (default: 0) + +The most basic way to add a Mod to a buff is to do so in the buff class definition, like this: + +```python +class DamageBuff(BaseBuff): + mods = [Mod('damage', 'add', 10)] +``` + +No mods applied to the value are permanent in any way. All calculations are done at runtime, and the mod values are never stored +anywhere except on the buff in question. In other words: you don't need to track the origin of particular stat mods, and you will +never permanently change a stat modified by a buff. To remove the modification, simply remove the buff from the object. + +> **Note**: You can add your own modifier types by overloading the `_calculate_mods` method, which contains the basic modifier application logic. + +#### Generating Mods (Advanced) + +An advanced way to do mods is to generate them when the buff is initialized. This lets you create mods on the fly that are reactive to the game state. + +```python +class GeneratedStatBuff(BaseBuff): + ... + def __init__(self, handler, buffkey, cache={}) -> None: + super().__init__(handler, buffkey, cache) + # Finds our "modgen" cache value, and generates a mod from it + modgen = list(self.cache.get("modgen")) + if modgen: + self.mods = [Mod(*modgen)] +``` + +### Triggers + +Buffs which have one or more strings in the `triggers` attribute can be triggered by events. + +When the handler's `trigger` method is called, it searches all buffs on the handler for any with a matchingtrigger, +then calls their `at_trigger` hooks. Buffs can have multiple triggers, and you can tell which trigger was used by +the `trigger` argument in the hook. + +```python +class AmplifyBuff(BaseBuff): + triggers = ['damage', 'heal'] + + def at_trigger(self, trigger, **kwargs): + if trigger == 'damage': print('Damage trigger called!') + if trigger == 'heal': print('Heal trigger called!') +``` + +### Ticking + +A buff which ticks isn't much different than one which triggers. You're still executing arbitrary hooks on +the buff class. To tick, the buff must have a `tickrate` of 1 or higher. + +```python +class Poison(BaseBuff): + ... + # this buff will tick 6 times between application and cleanup. + duration = 30 + tickrate = 5 + def at_tick(self, initial, **kwargs): + self.owner.take_damage(10) +``` +> **Note**: The buff always ticks once when applied. For this **first tick only**, `initial` will be True in the `at_tick` hook method. `initial` will be False on subsequent ticks. + +Ticks utilize a persistent delay, so they should be pickleable. As long as you are not adding new properties to your buff class, this shouldn't be a concern. +If you **are** adding new properties, try to ensure they do not end up with a circular code path to their object or handler, as this will cause pickling errors. + +### Extras + +Buffs have a grab-bag of extra functionality to let you add complexity to your designs. + +#### Conditionals + +You can restrict whether or not the buff will `check`, `trigger`, or `tick` through defining the `conditional` hook. As long +as it returns a "truthy" value, the buff will apply itself. This is useful for making buffs dependent on game state - for +example, if you want a buff that makes the player take more damage when they are on fire: + +```python +class FireSick(BaseBuff): + ... + def conditional(self, *args, **kwargs): + if self.owner.buffs.get_by_type(FireBuff): + return True + return False +``` + +Conditionals for `check`/`trigger` are checked when the buffs are gathered by the handler methods for the respective operations. `Tick` +conditionals are checked each tick. + +#### Helper Methods + +Buff instances have a number of helper methods. + +- `remove`/`dispel`: Allows you to remove or dispel the buff. Calls `at_remove`/`at_dispel`, depending on optional arguments. +- `pause`/`unpause`: Pauses and unpauses the buff. Calls `at_pause`/`at_unpause`. +- `reset`: Resets the buff's start to the current time; same as "refreshing" it. + +#### Playtime Duration + +If your handler has `autopause` enabled, any buffs with truthy `playtime` value will automatically pause +and unpause when the object the handler is attached to is puppetted or unpuppetted. This even works with ticking buffs, +although if you have less than 1 second of tick duration remaining, it will round up to 1s. + +> **Note**: If you want more control over this process, you can comment out the signal subscriptions on the handler and move the autopause logic +> to your object's `at_pre/post_puppet/unpuppet` hooks. + + +---- + +This document page is generated from `evennia/contrib/rpg/buffs/README.md`. Changes to this +file will be overwritten, so edit that file rather than this one. diff --git a/docs/source/Contribs/Contrib-Name-Generator.md b/docs/source/Contribs/Contrib-Name-Generator.md new file mode 100644 index 0000000000..8772cdd537 --- /dev/null +++ b/docs/source/Contribs/Contrib-Name-Generator.md @@ -0,0 +1,282 @@ +# Random Name Generator + +Contribution by InspectorCaracal (2022) + +A module for generating random names, both real-world and fantasy. Real-world +names can be generated either as first (personal) names, family (last) names, or +full names (first, optional middles, and last). The name data is from [Behind the Name](https://www.behindthename.com/) +and used under the [CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/). + +Fantasy names are generated from basic phonetic rules, using CVC syllable syntax. + +Both real-world and fantasy name generation can be extended to include additional +information via your game's `settings.py` + +## Installation + +This is a stand-alone utility. Just import this module (`from evennia.contrib.utils import name_generator`) and use its functions wherever you like. + +## Usage + +Import the module where you need it with the following: +```py +from evennia.contrib.utils.name_generator import namegen +``` + +By default, all of the functions will return a string with one generated name. +If you specify more than one, or pass `return_list=True` as a keyword argument, the returned value will be a list of strings. + +The module is especially useful for naming newly-created NPCs, like so: +```py +npc_name = namegen.full_name() +npc_obj = create_object(key=npc_name, typeclass="typeclasses.characters.NPC") +``` + +## Available Settings + +These settings can all be defined in your game's `server/conf/settings.py` file. + +- `NAMEGEN_FIRST_NAMES` adds a new list of first (personal) names. +- `NAMEGEN_LAST_NAMES` adds a new list of last (family) names. +- `NAMEGEN_REPLACE_LISTS` - set to `True` if you want to use only the names defined in your settings. +- `NAMEGEN_FANTASY_RULES` lets you add new phonetic rules for generating entirely made-up names. See the section "Custom Fantasy Name style rules" for details on how this should look. + +Examples: +```py +NAMEGEN_FIRST_NAMES = [ + ("Evennia", 'mf'), + ("Green Tea", 'f'), + ] + +NAMEGEN_LAST_NAMES = [ "Beeblebrox", "Son of Odin" ] + +NAMEGEN_FANTASY_RULES = { + "example_style": { + "syllable": "(C)VC", + "consonants": [ 'z','z','ph','sh','r','n' ], + "start": ['m'], + "end": ['x','n'], + "vowels": [ "e","e","e","a","i","i","u","o", ], + "length": (2,4), + } +} +``` + + +## Generating Real Names + +The contrib offers three functions for generating random real-world names: +`first_name()`, `last_name()`, and `full_name()`. If you want more than one name +generated at once, you can use the `num` keyword argument to specify how many. + +Example: +``` +>>> namegen.first_name(num=5) +['Genesis', 'Tali', 'Budur', 'Dominykas', 'Kamau'] +>>> namegen.first_name(gender='m') +'Blanchard' +``` + +The `first_name` function also takes a `gender` keyword argument to filter names +by gender association. 'f' for feminine, 'm' for masculine, 'mf' for feminine +_and_ masculine, or the default `None` to match any gendering. + +The `full_name` function also takes the `gender` keyword, as well as `parts` which +defines how many names make up the full name. The minimum is two: a first name and +a last name. You can also generate names with the family name first by setting +the keyword arg `surname_first` to `True` + +Example: +``` +>>> namegen.full_name() +'Keeva Bernat' +>>> namegen.full_name(parts=4) +'Suzu Shabnam Kafka Baier' +>>> namegen.full_name(parts=3, surname_first=True) +'Ó Muircheartach Torunn Dyson' +>>> namegen.full_name(gender='f') +'Wikolia Ó Deasmhumhnaigh' +``` + +### Adding your own names + +You can add additional names with the settings `NAMEGEN_FIRST_NAMES` and +`NAMEGEN_LAST_NAMES` + +`NAMEGEN_FIRST_NAMES` should be a list of tuples, where the first value is the name +and then second value is the gender flag - 'm' for masculine-only, 'f' for feminine- +only, and 'mf' for either one. + +`NAMEGEN_LAST_NAMES` should be a list of strings, where each item is an available +surname. + +Examples: +```py +NAMEGEN_FIRST_NAMES = [ + ("Evennia", 'mf'), + ("Green Tea", 'f'), + ] + +NAMEGEN_LAST_NAMES = [ "Beeblebrox", "Son of Odin" ] +``` + +Set `NAMEGEN_REPLACE_LISTS = True` if you want your custom lists above to entirely replace the built-in lists rather than extend them. + +## Generating Fantasy Names + +Generating completely made-up names is done with the `fantasy_name` function. The +contrib comes with three built-in styles of names which you can use, or you can +put a dictionary of custom name rules into `settings.py` + +Generating a fantasy name takes the ruleset key as the "style" keyword, and can +return either a single name or multiple names. By default, it will return a +single name in the built-in "harsh" style. The contrib also comes with "fluid" and "alien" styles. + +```py +>>> namegen.fantasy_name() +'Vhon' +>>> namegen.fantasy_name(num=3, style="harsh") +['Kha', 'Kizdhu', 'Godögäk'] +>>> namegen.fantasy_name(num=3, style="fluid") +['Aewalisash', 'Ayi', 'Iaa'] +>>> namegen.fantasy_name(num=5, style="alien") +["Qz'vko'", "Xv'w'hk'hxyxyz", "Wxqv'hv'k", "Wh'k", "Xbx'qk'vz"] +``` + +### Multi-Word Fantasy Names + +The `fantasy_name` function will only generate one name-word at a time, so for multi-word names +you'll need to combine pieces together. Depending on what kind of end result you want, there are +several approaches. + + +#### The simple approach + +If all you need is for it to have multiple parts, you can generate multiple names at once and `join` them. + +```py +>>> name = " ".join(namegen.fantasy_name(num=2)) +>>> name +'Dezhvözh Khäk' +``` + +If you want a little more variation between first/last names, you can also generate names for +different styles and then combine them. + +```py +>>> first = namegen.fantasy_name(style="fluid") +>>> last = namegen.fantasy_name(style="harsh") +>>> name = f"{first} {last}" +>>> name +'Ofasa Käkudhu' +``` + +#### "Nakku Silversmith" + +One common fantasy name practice is profession- or title-based surnames. To achieve this effect, +you can use the `last_name` function with a custom list of last names and combine it with your generated +fantasy name. + +Example: +```py +NAMEGEN_LAST_NAMES = [ "Silversmith", "the Traveller", "Destroyer of Worlds" ] +NAMEGEN_REPLACE_LISTS = True + +>>> first = namegen.fantasy_name() +>>> last = namegen.last_name() +>>> name = f"{first} {last}" +>>> name +'Tözhkheko the Traveller' +``` + +#### Elarion d'Yrinea, Thror Obinson + +Another common flavor of fantasy names is to use a surname suffix or prefix. For that, you'll +need to add in the extra bit yourself. + +Examples: +```py +>>> names = namegen.fantasy_name(num=2) +>>> name = f"{names[0]} za'{names[1]}" +>>> name +"Tithe za'Dhudozkok" + +>>> names = namegen.fantasy_name(num=2) +>>> name = f"{names[0]} {names[1]}son" +>>> name +'Kön Ködhöddoson' +``` + + +### Custom Fantasy Name style rules + +The style rules are contained in a dictionary of dictionaries, where the style name +is the key and the style rules are the dictionary value. + +The following is how you would add a custom style to `settings.py`: +```py +NAMEGEN_FANTASY_RULES = { + "example_style": { + "syllable": "(C)VC", + "consonants": [ 'z','z','ph','sh','r','n' ], + "start": ['m'], + "end": ['x','n'], + "vowels": [ "e","e","e","a","i","i","u","o", ], + "length": (2,4), + } +} +``` + +Then you could generate names following that ruleset with `namegen.fantasy_name(style="example_style")`. + +The keys `syllable`, `consonants`, `vowels`, and `length` must be present, and `length` must be the minimum and maximum syllable counts. `start` and `end` are optional. + + +#### syllable +The "syllable" field defines the structure of each syllable. C is consonant, V is vowel, +and parentheses mean it's optional. So, the example `(C)VC` means that every syllable +will always have a vowel followed by a consonant, and will *sometimes* have another +consonant at the beginning. e.g. `en`, `bak` + +*Note:* While it's not standard, the contrib lets you nest parentheses, with each layer +being less likely to show up. Additionally, any other characters put into the syllable +structure - e.g. an apostrophe - will be read and inserted as written. The +"alien" style rules in the module gives an example of both: the syllable structure is `C(C(V))(')(C)` +which results in syllables such as `khq`, `xho'q`, and `q'` with a much lower frequency of vowels than +`C(C)(V)(')(C)` would have given. + +#### consonants +A simple list of consonant phonemes that can be chosen from. Multi-character strings are +perfectly acceptable, such as "th", but each one will be treated as a single consonant. + +The function uses a naive form of weighting, where you make a phoneme more likely to +occur by putting more copies of it into the list. + +#### start and end +These are **optional** lists for the first and last letters of a syllable, if they're +a consonant. You can add on additional consonants which can only occur at the beginning +or end of a syllable, or you can add extra copies of already-defined consonants to +increase the frequency of them at the start/end of syllables. + +For example, in the `example_style` above, we have a `start` of m, and `end` of x and n. +Taken with the rest of the consonants/vowels, this means you can have the syllables of `mez` +but not `zem`, and you can have `phex` or `phen` but not `xeph` or `neph`. + +They can be left out of custom rulesets entirely. + +#### vowels +Vowels is a simple list of vowel phonemes - exactly like consonants, but instead used for the +vowel selection. Single-or multi-character strings are equally fine. It uses the same naive weighting system +as consonants - you can increase the frequency of any given vowel by putting it into the list multiple times. + +#### length +A tuple with the minimum and maximum number of syllables a name can have. + +When setting this, keep in mind how long your syllables can get! 4 syllables might +not seem like very many, but if you have a (C)(V)VC structure with one- and +two-letter phonemes, you can get up to eight characters per syllable. + +---- + +This document page is generated from `evennia/contrib/utils/name_generator/README.md`. Changes to this +file will be overwritten, so edit that file rather than this one. diff --git a/docs/source/Contribs/Contribs-Overview.md b/docs/source/Contribs/Contribs-Overview.md index 5b004972c3..6ff630393b 100644 --- a/docs/source/Contribs/Contribs-Overview.md +++ b/docs/source/Contribs/Contribs-Overview.md @@ -458,6 +458,7 @@ and rule implementation like character traits, dice rolling and emoting._ ```{toctree} :maxdepth: 1 +Contrib-Buffs.md Contrib-Dice.md Contrib-Health-Bar.md Contrib-RPSystem.md @@ -465,6 +466,17 @@ Contrib-Traits.md ``` +### Contrib: `buffs` + +_Contribution by Tegiminis 2022_ + +A buff is a timed object, attached to a game entity. It is capable of modifying values, triggering code, or both. +It is a common design pattern in RPGs, particularly action games. + +[Read the documentation](./Contrib-Buffs.md) - [Browse the Code](evennia.contrib.rpg.buffs) + + + ### Contrib: `dice` _Contribution by Griatch, 2012_ @@ -643,6 +655,7 @@ and more._ Contrib-Auditing.md Contrib-Fieldfill.md +Contrib-Name-Generator.md Contrib-Random-String-Generator.md Contrib-Tree-Select.md ``` @@ -676,6 +689,19 @@ to any callable of your choice. +### Contrib: `name_generator` + +_Contribution by InspectorCaracal (2022)_ + +A module for generating random names, both real-world and fantasy. Real-world +names can be generated either as first (personal) names, family (last) names, or +full names (first, optional middles, and last). The name data is from [Behind the Name](https://www.behindthename.com/) +and used under the [CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/). + +[Read the documentation](./Contrib-Name-Generator.md) - [Browse the Code](evennia.contrib.utils.name_generator) + + + ### Contrib: `random_string_generator` _Contribution by Vincent Le Goff (vlgeoff), 2017_ diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/A-Sittable-Object.md b/docs/source/Howtos/A-Sittable-Object.md similarity index 98% rename from docs/source/Howtos/Beginner-Tutorial/Part3/A-Sittable-Object.md rename to docs/source/Howtos/A-Sittable-Object.md index b92e6e75ba..5dfc9d081c 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/A-Sittable-Object.md +++ b/docs/source/Howtos/A-Sittable-Object.md @@ -1,4 +1,4 @@ -[prev lesson](../../../Unimplemented.md) | [next lesson](../../../Unimplemented.md) +[prev lesson](../Unimplemented.md) | [next lesson](../Unimplemented.md) # Making a sittable object @@ -524,7 +524,7 @@ class CmdStand(Command): # ... ``` -We define a [Lock](../../../Components/Locks.md) on the command. The `cmd:` is in what situation Evennia will check +We define a [Lock](../Components/Locks.md) on the command. The `cmd:` is in what situation Evennia will check the lock. The `cmd` means that it will check the lock when determining if a user has access to this command or not. What will be checked is the `sitsonthis` _lock function_ which doesn't exist yet. @@ -753,7 +753,7 @@ class CmdStand2(Command): ``` This forced us to to use the full power of the `caller.search` method. If we wanted to search for something -more complex we would likely need to break out a [Django query](../Part1/Django-queries.md) to do it. The key here is that +more complex we would likely need to break out a [Django query](Beginner-Tutorial/Part1/Django-queries.md) to do it. The key here is that we know that the object we are looking for is a `Sittable` and that it must have an Attribute named `sitter` which should be set to us, the one sitting on/in the thing. Once we have that we just call `.do_stand` on it and let the Typeclass handle the rest. @@ -799,4 +799,4 @@ Eagle-eyed readers will notice that the `stand` command sitting "on" the chair ( together with the `sit` command sitting "on" the Character (variant 2). There is nothing stopping you from mixing them, or even try a third solution that better fits what you have in mind. -[prev lesson](../../../Unimplemented.md) | [next lesson](../../../Unimplemented.md) +[prev lesson](../Unimplemented.md) | [next lesson](../Unimplemented.md) diff --git a/evennia/contrib/tutorials/evadventure/combat_twitch.py b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Characters.md similarity index 100% rename from evennia/contrib/tutorials/evadventure/combat_twitch.py rename to docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Characters.md diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Commands.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Commands.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Dungeon.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Dungeon.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-NPCs.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-NPCs.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md index 9e22e70e2d..1b9f63acd1 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md @@ -17,47 +17,52 @@ Taking our new game online and let players try it out ``` -In part three of the Evennia Beginner tutorial we will go through the creation of several key parts of our tutorial -game _EvAdventure_. This is a pretty big part with plenty of examples. +In part three of the Evennia Beginner tutorial we will go through the actual creation of +our tutorial game _EvAdventure_, based on the [Knave](https://www.drivethrurpg.com/product/250888/Knave) +RPG ruleset. -If you followed the previous parts of this tutorial you will have some notions about Python and where to find -and make use of things in Evennia. We also have a good idea of the type of game we want. -Even if this is not the game-style you are interested in, following along will give you a lot of experience -with using Evennia. This be of much use when doing your own thing later. +This is a big part. You'll be seeing a lot of code and there are plenty of lessons to go through. +Take your time! +If you followed the previous parts of this tutorial you will have some notions about Python and where to +find and make use of things in Evennia. We also have a good idea of the type of game we want. +Even if this is not the game-style you are interested in, following along will give you a lot +of experience with using Evennia. This be _really_ helpful for doing your own thing later. + +Fully coded examples of all code we make in this part can be found in the +[evennia/contrib/tutorials/evadventure](evennia.contrib.tutorials.evadventure) package. ## Lessons -_TODO_ - ```{toctree} :maxdepth: 1 -Implementing-a-game-rule-system -Turn-based-Combat-System -A-Sittable-Object - -``` -1. [Changing settings](../../../Unimplemented.md) -1. [Applying contribs](../../../Unimplemented.md) -1. [Creating a rule module](../../../Unimplemented.md) -1. [Tweaking the base Typeclasses](../../../Unimplemented.md) -1. [Character creation menu](../../../Unimplemented.md) -1. [Wearing armor and wielding weapons](../../../Unimplemented.md) -1. [Two types of combat](../../../Unimplemented.md) -1. [Monsters and AI](../../../Unimplemented.md) -1. [Questing and rewards](../../../Unimplemented.md) -1. [Overview of Tech demo](../../../Unimplemented.md) +Beginner-Tutorial-Utilities +Beginner-Tutorial-Rule-System +Beginner-Tutorial-Characters +Beginner-Tuturial-Objects +Beginner-Tutorial-Rooms +Beginner-Tutorial-NPCs +Beginner-Tutorial-Turnbased-Combat +Beginner-Tutorial-Quests +Beginner-Tutorial-Shops +Beginner-Tutorial-Dungeon +Beginner-Tutorial-Commands ## Table of Contents -_TODO_ - ```{toctree} -:maxdepth: 1 -Implementing-a-game-rule-system -Turn-Based-Combat-System -A-Sittable-Object +Beginner-Tutorial-Utilities +Beginner-Tutorial-Rule-System +Beginner-Tutorial-Characters +Beginner-Tuturial-Objects +Beginner-Tutorial-Rooms +Beginner-Tutorial-NPCs +Beginner-Tutorial-Turnbased-Combat +Beginner-Tutorial-Quests +Beginner-Tutorial-Shops +Beginner-Tutorial-Dungeon +Beginner-Tutorial-Commands ``` diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Quests.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Quests.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rooms.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rooms.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rule-System.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rule-System.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Shops.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Shops.md new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Turnbased-Combat b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Turnbased-Combat new file mode 100644 index 0000000000..e69de29bb2 diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md new file mode 100644 index 0000000000..bab946e25e --- /dev/null +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md @@ -0,0 +1,351 @@ +# Code structure and Utilities + +In this lesson we will set up the file structure for _EvAdventure_. We will make some +utilities that will be useful later. We will also learn how to write _tests_. + +## Folder structure + +Create a new folder under your `mygame` folder, named `evadventure`. Inside it, create +another folder `tests/` and make sure to put empty `__init__.py` files in both. This turns both +folders into packages Python understands to import from. + +``` +mygame/ + commands/ + evadventure/ <--- + __init__.py <--- + tests/ <--- + __init__.py <--- + __init__.py + README.md + server/ + typeclasses/ + web/ + world/ + +``` + +Importing anything from inside this folder from anywhere else under `mygame` will be done by + +```python +# from anywhere in mygame/ +from evadventure.yourmodulename import whatever +``` + +This is the 'absolute path` type of import. + +Between two modules both in `evadventure/`, you can use a 'relative' import with `.`: + +```python +# from a module inside mygame/evadventure +from .yourmodulename import whatever +``` + +From e.g. inside `mygame/evadventure/tests/` you can import from one level above using `..`: + +```python +# from mygame/evadventure/tests/ +from ..yourmodulename import whatever +``` + + +## Enums + +```{sidebar} +A full example of the enum module is found in +[evennia/contrib/tutorials/evadventure/enums.py](evennia.contrib.tutorials.evadventure.enums). +``` +Create a new file `mygame/evadventure/enums.py`. + +An [enum](https://docs.python.org/3/library/enum.html) (enumeration) is a way to establish constants +in Python. Best is to show an example: + +```python +# in a file mygame/evadventure/enums.py + +from enum import Enum + +class Ability(Enum): + + STR = "strength" + +``` + +You access an enum like this: + +``` +# from another module in mygame/evadventure + +from .enums import Ability + +Ability.STR # the enum itself +Ability.STR.value # this is the string "strength" + +``` + +Having enums is recommended practice. With them set up, it means we can make sure to refer to the +same thing every time. Having all enums in one place also means you have a good overview of the +constants you are dealing with. + +The alternative would be to for example pass around a string `"constitution"`. If you mis-spell +this (`"consitution"`), you would not necessarily know it right away - the error would happen later +when the string is not recognized. If you make a typo getting `Ability.COM` instead of `Ability.CON`, +Python will immediately raise an error since this enum is not recognized. + +With enums you can also do nice direct comparisons like `if ability is Ability.WIS: `. + +Note that the `Ability.STR` enum does not have the actual _value_ of e.g. your Strength. +It's just a fixed label for the Strength ability. + +Here is the `enum.py` module needed for _Knave_. It covers the basic aspects of +rule systems we need to track (check out the _Knave_ rules. If you use another rule system you'll +likely gradually expand on your enums as you figure out what you'll need). + +```python +# mygame/evadventure/enums.py + +class Ability(Enum): + """ + The six base ability-bonuses and other + abilities + + """ + + STR = "strength" + DEX = "dexterity" + CON = "constitution" + INT = "intelligence" + WIS = "wisdom" + CHA = "charisma" + + ARMOR = "armor" + HP = "hp" + LEVEL = "level" + XP = "xp" + + CRITICAL_FAILURE = "critical_failure" + CRITICAL_SUCCESS = "critical_success" + + ALLEGIANCE_HOSTILE = "hostile" + ALLEGIANCE_NEUTRAL = "neutral" + ALLEGIANCE_FRIENDLY = "friendly" + + +class WieldLocation(Enum): + """ + Wield (or wear) locations. + + """ + + # wield/wear location + BACKPACK = "backpack" + WEAPON_HAND = "weapon_hand" + SHIELD_HAND = "shield_hand" + TWO_HANDS = "two_handed_weapons" + BODY = "body" # armor + HEAD = "head" # helmets + + +class ObjType(Enum): + """ + Object types. + + """ + + WEAPON = "weapon" + ARMOR = "armor" + SHIELD = "shield" + HELMET = "helmet" + CONSUMABLE = "consumable" + GEAR = "gear" + MAGIC = "magic" + QUEST = "quest" + TREASURE = "treasure" +``` + +Here the `Ability` class holds basic properties of a character sheet, while `WieldLocation` tracks +equipment and where a character would wield and wear things - since _Knave_ has these, it makes sense +to track it. Finally we have a set of different `ObjType`s, for differentiate game items. These are +extracted by reading the _Knave_ object lists and figuring out how they should be categorized. + + +## Utility module + +> Create a new module `mygame/evadventure/utils.py` + +```{sidebar} +An example of the utility module is found in +[evennia/contrib/tutorials/evadventure/utils.py](evennia.contrib.tutorials.evadventure.utils) +``` + +This is for general functions we may need from all over. In this case we only picture one utility, +a function that produces a pretty display of any object we pass to it. + +This is an example of the string we want to see: + +``` +Chipped Sword +Value: ~10 coins [wielded in Weapon hand] + +A simple sword used by mercenaries all over +the world. + +Slots: 1, Used from: weapon hand +Quality: 3, Uses: None +Attacks using strength against armor. +Damage roll: 1d6 +``` + +Here's the start of how the function could look: + +```python +# in mygame/evadventure/utils.py + +_OBJ_STATS = """ +|c{key}|n +Value: ~|y{value}|n coins{carried} + +{desc} + +Slots: |w{size}|n, Used from: |w{use_slot_name}|n +Quality: |w{quality}|n, Uses: |wuses|n +Attacks using |w{attack_type_name}|n against |w{defense_type_name}|n +Damage roll: |w{damage_roll}|n +""".strip() + + +def get_obj_stats(obj, owner=None): + """ + Get a string of stats about the object. + + Args: + obj (Object): The object to get stats for. + owner (Object): The one currently owning/carrying `obj`, if any. Can be + used to show e.g. where they are wielding it. + Returns: + str: A nice info string to display about the object. + + """ + return _OBJ_STATS.format( + key=obj.key, + value=10, + carried="[Not carried]", + desc=obj.db.desc, + size=1, + quality=3, + uses="infinite" + use_slot_name="backpack", + attack_type_name="strength" + defense_type_name="armor" + damage_roll="1d6" + ) +``` +Here we set up the string template with place holders for where every piece of info should go. +Study this string so you understand what it does. The `|c`, `|y`, `|w` and `|n` markers are +[Evennia color markup](../../../Concepts/Colors.md) for making the text cyan, yellow, white and neutral-color respectively. + +We can guess some things, such that `obj.key` is the name of the object, and that `obj.db.desc` will +hold its description (this is how it is in default Evennia). + +But so far we have not established how to get any of the other properties like `size` or `attack_type`. +So we just set them to dummy values. We'll need to get back to this when we have more code in place! + +## Testing + +> create a new module `mygame/evadventure/tests/test_utils.py` + +How do you know if you made a typo in the code above? You could _manually_ test it by reloading your +Evennia server and do the following from in-game: + + py from evadventure.utils import get_obj_stats;print(get_obj_stats(self)) + +You should get back a nice string about yourself! If that works, great! But you'll need to remember +doing that test when you change this code later. + +```{sidebar} +In [evennia/contrib/evadventure/tests/test_utils.py](evennia.contrib.evadventure.tests.test_utils) +is the final test module. To dive deeper into unit testing in Evennia, see the +[Unit testing](../../../Coding/Unit-Testing.md) documentation. +``` + +A _unit test_ allows you to set up automated testing of code. Once you've written your test you +can run it over and over and make sure later changes to your code didn't break things. + +In this particular case, we _expect_ to later have to update the test when `get_obj_stats` becomes more +complete and returns more reasonable data. + +Evennia comes with extensive functionality to help you test your code. Here's a module for +testing `get_obj_stats`. + +```python +# mygame/evadventure/tests/test_utils.py + +from evennia.utils import create +from evennia.utils.test_resources import BaseEvenniaTest + +from ..import utils + +class TestUtils(BaseEvenniaTest): + def test_get_obj_stats(self): + # make a simple object to test with + obj = create.create_object( + key="testobj", + attributes=(("desc", "A test object"),) + ) + # run it through the function + result = utils.get_obj_stats(obj) + # check that the result is what we expected + self.assertEqual( + result, + """ +|ctestobj|n +Value: ~|y10|n coins + +A test object + +Slots: |w1|n, Used from: |wbackpack|n +Quality: |w3|n, Uses: |winfinite|n +Attacks using |wstrength|n against |warmor|n +Damage roll: |w1d6|n +""".strip() +) + +``` + +What happens here is that we create a new test-class `TestUtils` that inherits from `BaseEvenniaTest`. +This inheritance is what makes this a testing class. + +We can have any number of methods on this class. To have a method recognized as one containing +code to test, its name _must_ start with `test_`. We have one - `test_get_obj_stats`. + +In this method we create a dummy `obj` and gives it a `key` "testobj". Note how we add the +`desc` [Attribute](../../../Components/Attributes.md) directly in the `create_object` call by specifying the attribute as a +tuple `(name, value)`! + +We then get the result of passing this dummy-object through `get_obj_stats` we imported earlier. + +The `assertEqual` method is available on all testing classes and checks that the `result` is equal +to the string we specify. If they are the same, the test _passes_, otherwise it _fails_ and we +need to investigate what went wrong. + +### Running your test + +To run your test you need to stand inside your `mygame` folder and execute the following command: + + evennia test --settings settings.py .evadventure.tests + +This will run all your `evadventure` tests (if you had more of them). To only run your utility tests +you could do + + evennia test --settings settings.py .evadventure.tests.test_utils + +If all goes well, you should get an `OK` back. Otherwise you need to check the failure, maybe +your return string doesn't quite match what you expected. + +## Summary + +It's very important to understand how you import code between modules in Python, so if this is still +confusing to you, it's worth to read up on this more. + +That said, many newcomers are confused with how to begin, so by creating the folder structure, some +small modules and even making your first unit test, you are off to a great start! \ No newline at end of file diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Implementing-a-game-rule-system.md b/docs/source/Howtos/Implementing-a-game-rule-system.md similarity index 98% rename from docs/source/Howtos/Beginner-Tutorial/Part3/Implementing-a-game-rule-system.md rename to docs/source/Howtos/Implementing-a-game-rule-system.md index 85e752d974..cc197b9be4 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Implementing-a-game-rule-system.md +++ b/docs/source/Howtos/Implementing-a-game-rule-system.md @@ -45,12 +45,12 @@ makes it easier to change and update things in one place later. values for Health, a list of skills etc, store those things on the Character - don't store how to roll or change them. - Next is to determine just how you want to store things on your Objects and Characters. You can -choose to either store things as individual [Attributes](../../../Components/Attributes.md), like `character.db.STR=34` and +choose to either store things as individual [Attributes](../Components/Attributes.md), like `character.db.STR=34` and `character.db.Hunting_skill=20`. But you could also use some custom storage method, like a dictionary `character.db.skills = {"Hunting":34, "Fishing":20, ...}`. A much more fancy solution is to look at the Ainneve [Trait handler](https://github.com/evennia/ainneve/blob/master/world/traits.py). Finally you could even go -with a [custom django model](../../../Concepts/New-Models.md). Which is the better depends on your game and the +with a [custom django model](../Concepts/New-Models.md). Which is the better depends on your game and the complexity of your system. - Make a clear [API](https://en.wikipedia.org/wiki/Application_programming_interface) into your rules. That is, make methods/functions that you feed with, say, your Character and which skill you diff --git a/docs/source/Howtos/Static-In-Game-Map.md b/docs/source/Howtos/Static-In-Game-Map.md index ce229b4699..bdf5b77d42 100644 --- a/docs/source/Howtos/Static-In-Game-Map.md +++ b/docs/source/Howtos/Static-In-Game-Map.md @@ -413,4 +413,4 @@ easily new game defining features can be added to Evennia. You can easily build from this tutorial by expanding the map and creating more rooms to explore. Why not add more features to your game by trying other tutorials: [Add weather to your world](Weather- Tutorial), [fill your world with NPC's](./Tutorial-Aggressive-NPCs.md) or -[implement a combat system](Beginner-Tutorial/Part3/Turn-based-Combat-System.md). +[implement a combat system](./Turn-based-Combat-System.md). diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Turn-based-Combat-System.md b/docs/source/Howtos/Turn-based-Combat-System.md similarity index 96% rename from docs/source/Howtos/Beginner-Tutorial/Part3/Turn-based-Combat-System.md rename to docs/source/Howtos/Turn-based-Combat-System.md index b00459a784..08a20ddcac 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Turn-based-Combat-System.md +++ b/docs/source/Howtos/Turn-based-Combat-System.md @@ -31,7 +31,7 @@ allows for emoting as part of combat which is an advantage for roleplay-heavy ga To implement a freeform combat system all you need is a dice roller and a roleplaying rulebook. See [contrib/dice.py](https://github.com/evennia/evennia/blob/master/evennia/contrib/dice.py) for an example dice roller. To implement at twitch-based system you basically need a few combat -[commands](../../../Components/Commands.md), possibly ones with a [cooldown](../../Command-Cooldown.md). You also need a [game rule +[commands](../Components/Commands.md), possibly ones with a [cooldown](./Command-Cooldown.md). You also need a [game rule module](./Implementing-a-game-rule-system.md) that makes use of it. We will focus on the turn-based variety here. @@ -61,22 +61,22 @@ reported. A new turn then begins. For creating the combat system we will need the following components: -- A combat handler. This is the main mechanic of the system. This is a [Script](../../../Components/Scripts.md) object +- A combat handler. This is the main mechanic of the system. This is a [Script](../Components/Scripts.md) object created for each combat. It is not assigned to a specific object but is shared by the combating characters and handles all the combat information. Since Scripts are database entities it also means that the combat will not be affected by a server reload. -- A combat [command set](../../../Components/Command-Sets.md) with the relevant commands needed for combat, such as the +- A combat [command set](../Components/Command-Sets.md) with the relevant commands needed for combat, such as the various attack/defend options and the `flee/disengage` command to leave the combat mode. - A rule resolution system. The basics of making such a module is described in the [rule system tutorial](./Implementing-a-game-rule-system.md). We will only sketch such a module here for our end-turn combat resolution. -- An `attack` [command](../../../Components/Commands.md) for initiating the combat mode. This is added to the default +- An `attack` [command](../Components/Commands.md) for initiating the combat mode. This is added to the default command set. It will create the combat handler and add the character(s) to it. It will also assign the combat command set to the characters. ## The combat handler -The _combat handler_ is implemented as a stand-alone [Script](../../../Components/Scripts.md). This Script is created when +The _combat handler_ is implemented as a stand-alone [Script](../Components/Scripts.md). This Script is created when the first Character decides to attack another and is deleted when no one is fighting any more. Each handler represents one instance of combat and one combat only. Each instance of combat can hold any number of characters but each character can only be part of one combat at a time (a player would @@ -89,7 +89,7 @@ don't use this very much here this might allow the combat commands on the charac update the combat handler state directly. _Note: Another way to implement a combat handler would be to use a normal Python object and handle -time-keeping with the [TickerHandler](../../../Components/TickerHandler.md). This would require either adding custom hook +time-keeping with the [TickerHandler](../Components/TickerHandler.md). This would require either adding custom hook methods on the character or to implement a custom child of the TickerHandler class to track turns. Whereas the TickerHandler is easy to use, a Script offers more power in this case._ @@ -507,7 +507,7 @@ class CmdAttack(Command): ``` The `attack` command will not go into the combat cmdset but rather into the default cmdset. See e.g. -the [Adding Command Tutorial](../Part1/Adding-Commands.md) if you are unsure about how to do this. +the [Adding Command Tutorial](Beginner-Tutorial/Part1/Adding-Commands.md) if you are unsure about how to do this. ## Expanding the example diff --git a/docs/source/Persistent-Handler.md b/docs/source/Persistent-Handler.md index d4838b0881..e95deabad0 100644 --- a/docs/source/Persistent-Handler.md +++ b/docs/source/Persistent-Handler.md @@ -110,7 +110,7 @@ class QuestHandler: ``` -The handler is just a normal Python class and has no database-storage on its own. But it has a link to `.obj`, which is assumed to be a full typeclased entity, on which we can create persistent [Attributes](Attributes) to store things however we like! +The handler is just a normal Python class and has no database-storage on its own. But it has a link to `.obj`, which is assumed to be a full typeclased entity, on which we can create persistent [Attributes](Components/Attributes.md) to store things however we like! We make two helper methods `_load` and `_save` that handles local fetches and saves `storage` to an Attribute on the object. To avoid saving more than necessary, we have a property `do_save`. This we will set in `Quest` below. @@ -160,7 +160,7 @@ class Quest: The `Quest.__init__` now takes `obj` as argument, to match what we pass to it in `QuestHandler.add`. We want to monitor the changing of `current_step`, so we make it into a `property`. When we edit that value, we set the `do_save` flag on the handler, which means it will save the status to database once it has checked progress on all its quests. -The `__serialize__dbobjs__` and `__deserialize_dbobjs__` methods are needed because `Attributes` can't store 'hidden' database objects (the `Quest.obj` property. The methods help Evennia serialize/deserialize `Quest` propertly when the handler saves it. For more information, see [Storing Single objects](Attributes#storing-single-objects) in the Attributes documentation. +The `__serialize__dbobjs__` and `__deserialize_dbobjs__` methods are needed because `Attributes` can't store 'hidden' database objects (the `Quest.obj` property. The methods help Evennia serialize/deserialize `Quest` propertly when the handler saves it. For more information, see [Storing Single objects](Components/Attributes.md#storing-single-objects) in the Attributes documentation. ### Tying it all together diff --git a/docs/source/Setup/Settings-Default.md b/docs/source/Setup/Settings-Default.md index 5567ce2052..baa2ee3c9e 100644 --- a/docs/source/Setup/Settings-Default.md +++ b/docs/source/Setup/Settings-Default.md @@ -31,12 +31,12 @@ value - which may change as Evennia is developed. This way you can always be sure of what you have changed and what is default behaviour. """ -from django.contrib.messages import constants as messages -from django.urls import reverse_lazy - import os import sys +from django.contrib.messages import constants as messages +from django.urls import reverse_lazy + ###################################################################### # Evennia base server config ###################################################################### @@ -405,9 +405,11 @@ INITIAL_SETUP_MODULE = "evennia.server.initial_setup" # the server's initial setup sequence (the very first startup of the system). # The check will fail quietly if module doesn't exist or fails to load. AT_INITIAL_SETUP_HOOK_MODULE = "server.conf.at_initial_setup" -# Module containing your custom at_server_start(), at_server_reload() and -# at_server_stop() methods. These methods will be called every time -# the server starts, reloads and resets/stops respectively. +# Module(s) containing custom at_server_init(), at_server_start(), +# at_server_reload() and at_server_stop() methods. These methods will be called +# every time the server starts, reloads and resets/stops +# respectively. Can be given as a single path or a list of paths. If a list, +# each module's hooks will be called in list order. AT_SERVER_STARTSTOP_MODULE = "server.conf.at_server_startstop" # List of one or more module paths to modules containing a function start_ # plugin_services(application). This module will be called with the main diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst new file mode 100644 index 0000000000..39d3aba676 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_utils module +============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_utils + :members: + :undoc-members: + :show-inheritance: diff --git a/evennia/contrib/tutorials/evadventure/enums.py b/evennia/contrib/tutorials/evadventure/enums.py index 9253c79976..59c24163a0 100644 --- a/evennia/contrib/tutorials/evadventure/enums.py +++ b/evennia/contrib/tutorials/evadventure/enums.py @@ -30,17 +30,8 @@ class Ability(Enum): WIS = "wisdom" CHA = "charisma" - STR_DEFENSE = "strength_defense" - DEX_DEFENSE = "dexterity_defense" - CON_DEFENSE = "constitution_defense" - INT_DEFENSE = "intelligence_defense" - WIS_DEFENSE = "wisdom_defense" - CHA_DEFENSE = "charisma_defense" - ARMOR = "armor" HP = "hp" - EXPLORATION_SPEED = "exploration_speed" - COMBAT_SPEED = "combat_speed" LEVEL = "level" XP = "xp" @@ -66,10 +57,6 @@ class WieldLocation(Enum): BODY = "body" # armor HEAD = "head" # helmets - # combat-related - OPTIMAL_DISTANCE = "optimal_distance" - SUBOPTIMAL_DISTANCE = "suboptimal_distance" - class ObjType(Enum): """ diff --git a/evennia/contrib/tutorials/evadventure/tests/test_utils.py b/evennia/contrib/tutorials/evadventure/tests/test_utils.py new file mode 100644 index 0000000000..192e6b44f6 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/test_utils.py @@ -0,0 +1,34 @@ +""" +Tests of the utils module. + +""" + +from evennia.utils import create +from evennia.utils.test_resources import BaseEvenniaTest + +from .. import utils +from ..objects import EvAdventureObject + + +class TestUtils(BaseEvenniaTest): + def test_get_obj_stats(self): + + obj = create.create_object( + EvAdventureObject, key="testobj", attributes=(("desc", "A test object"),) + ) + result = utils.get_obj_stats(obj) + + self.assertEqual( + result, + """ +|ctestobj|n +Value: ~|y0|n coins + +A test object + +Slots: |w1|n, Used from: |wbackpack|n +Quality: |wN/A|n, Uses: |wuses|n +Attacks using |wNo attack|n against |wNo defense|n +Damage roll: |wNone|n +""".strip(), + ) diff --git a/evennia/contrib/tutorials/evadventure/utils.py b/evennia/contrib/tutorials/evadventure/utils.py index 1e9b6d9127..d39e786e7d 100644 --- a/evennia/contrib/tutorials/evadventure/utils.py +++ b/evennia/contrib/tutorials/evadventure/utils.py @@ -4,14 +4,15 @@ Various utilities. """ _OBJ_STATS = """ -|c{key}|n Value: approx. |y{value}|n coins {carried} +|c{key}|n +Value: ~|y{value}|n coins{carried} {desc} -Slots: |w{size}|n Used from: |w{use_slot_name}|n -Quality: |w{quality}|n Uses: |wuses|n -Attacks using: |w{attack_type_name}|n against |w{defense_type_value}|n -Damage roll: |w{damage_roll}""".strip() +Slots: |w{size}|n, Used from: |w{use_slot_name}|n +Quality: |w{quality}|n, Uses: |wuses|n +Attacks using |w{attack_type_name}|n against |w{defense_type_name}|n +Damage roll: |w{damage_roll}|n""".strip() def get_obj_stats(obj, owner=None): @@ -31,7 +32,10 @@ def get_obj_stats(obj, owner=None): if owner: objmap = dict(owner.equipment.all()) carried = objmap.get(obj) - carried = f"Worn: [{carried.value}]" if carried else "" + carried = f", Worn: [{carried.value}]" if carried else "" + + attack_type = getattr(obj, "attack_type", None) + defense_type = getattr(obj, "attack_type", None) return _OBJ_STATS.format( key=obj.key, @@ -39,10 +43,10 @@ def get_obj_stats(obj, owner=None): carried=carried, desc=obj.db.desc, size=obj.size, - use_slot=obj.use_slot.value, - quality=obj.quality, - uses=obj.uses, - attack_type=obj.attack_type.value, - defense_type=obj.defense_type.value, - damage_roll=obj.damage_roll, + use_slot_name=obj.inventory_use_slot.value, + quality=getattr(obj, "quality", "N/A"), + uses=getattr(obj, "uses", "N/A"), + attack_type_name=attack_type.value if attack_type else "No attack", + defense_type_name=defense_type.value if defense_type else "No defense", + damage_roll=getattr(obj, "damage_roll", "None"), ) From 8486923ac9aa19ba4f8bb2b75c2c87062a5df915 Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 5 Aug 2022 20:37:09 +0200 Subject: [PATCH 067/177] Update md files --- .../api/evennia.contrib.rpg.buffs.buff.md | 10 +++++ docs/source/api/evennia.contrib.rpg.buffs.md | 19 ++++++++++ .../evennia.contrib.rpg.buffs.samplebuffs.md | 10 +++++ .../api/evennia.contrib.rpg.buffs.tests.md | 10 +++++ docs/source/api/evennia.contrib.rpg.md | 1 + ...ib.tutorials.evadventure.build_techdemo.md | 10 +++++ ...ntrib.tutorials.evadventure.build_world.md | 10 +++++ ...ontrib.tutorials.evadventure.characters.md | 10 +++++ ....tutorials.evadventure.combat_turnbased.md | 10 +++++ ....contrib.tutorials.evadventure.commands.md | 10 +++++ ...a.contrib.tutorials.evadventure.dungeon.md | 10 +++++ ...nia.contrib.tutorials.evadventure.enums.md | 10 +++++ ...contrib.tutorials.evadventure.equipment.md | 10 +++++ .../evennia.contrib.tutorials.evadventure.md | 38 +++++++++++++++++++ ...nnia.contrib.tutorials.evadventure.npcs.md | 10 +++++ ...a.contrib.tutorials.evadventure.objects.md | 10 +++++ ...ia.contrib.tutorials.evadventure.quests.md | 10 +++++ ...rib.tutorials.evadventure.random_tables.md | 10 +++++ ...nia.contrib.tutorials.evadventure.rooms.md | 10 +++++ ...nia.contrib.tutorials.evadventure.rules.md | 10 +++++ ...nia.contrib.tutorials.evadventure.shops.md | 10 +++++ ...nia.contrib.tutorials.evadventure.tests.md | 23 +++++++++++ ...trib.tutorials.evadventure.tests.mixins.md | 10 +++++ ...tutorials.evadventure.tests.test_combat.md | 10 +++++ ...torials.evadventure.tests.test_commands.md | 10 +++++ ...utorials.evadventure.tests.test_dungeon.md | 10 +++++ ...tutorials.evadventure.tests.test_quests.md | 10 +++++ ....tutorials.evadventure.tests.test_rules.md | 10 +++++ ...tutorials.evadventure.tests.test_utils.md} | 5 ++- ...nia.contrib.tutorials.evadventure.utils.md | 10 +++++ 30 files changed, 335 insertions(+), 1 deletion(-) create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.buff.md create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.md create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.tests.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.build_world.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.characters.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.commands.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.enums.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.equipment.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.npcs.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.objects.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.quests.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.rooms.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.rules.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.shops.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.md rename docs/source/api/{evennia.contrib.tutorials.evadventure.tests.test_utils.rst => evennia.contrib.tutorials.evadventure.tests.test_utils.md} (71%) create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.utils.md diff --git a/docs/source/api/evennia.contrib.rpg.buffs.buff.md b/docs/source/api/evennia.contrib.rpg.buffs.buff.md new file mode 100644 index 0000000000..826198c22e --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.buff.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.rpg.buffs.buff +===================================== + +.. automodule:: evennia.contrib.rpg.buffs.buff + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.buffs.md b/docs/source/api/evennia.contrib.rpg.buffs.md new file mode 100644 index 0000000000..114ecd8af4 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.md @@ -0,0 +1,19 @@ +```{eval-rst} +evennia.contrib.rpg.buffs +================================= + +.. automodule:: evennia.contrib.rpg.buffs + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.buffs.buff + evennia.contrib.rpg.buffs.samplebuffs + evennia.contrib.rpg.buffs.tests + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md b/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md new file mode 100644 index 0000000000..ecad1d62b3 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.rpg.buffs.samplebuffs +============================================ + +.. automodule:: evennia.contrib.rpg.buffs.samplebuffs + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.buffs.tests.md b/docs/source/api/evennia.contrib.rpg.buffs.tests.md new file mode 100644 index 0000000000..84b3076dfb --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.tests.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.rpg.buffs.tests +====================================== + +.. automodule:: evennia.contrib.rpg.buffs.tests + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.md b/docs/source/api/evennia.contrib.rpg.md index ea6607f239..f4ad7822e4 100644 --- a/docs/source/api/evennia.contrib.rpg.md +++ b/docs/source/api/evennia.contrib.rpg.md @@ -11,6 +11,7 @@ evennia.contrib.rpg .. toctree:: :maxdepth: 6 + evennia.contrib.rpg.buffs evennia.contrib.rpg.dice evennia.contrib.rpg.health_bar evennia.contrib.rpg.rpsystem diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.md b/docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.md new file mode 100644 index 0000000000..5f361e9be6 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.build\_techdemo +============================================================ + +.. automodule:: evennia.contrib.tutorials.evadventure.build_techdemo + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.build_world.md b/docs/source/api/evennia.contrib.tutorials.evadventure.build_world.md new file mode 100644 index 0000000000..f6af810ae9 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.build_world.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.build\_world +========================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.build_world + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.characters.md b/docs/source/api/evennia.contrib.tutorials.evadventure.characters.md new file mode 100644 index 0000000000..e71572143f --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.characters.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.characters +======================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.characters + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.md b/docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.md new file mode 100644 index 0000000000..ffccb7f735 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.combat\_turnbased +============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.combat_turnbased + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.commands.md b/docs/source/api/evennia.contrib.tutorials.evadventure.commands.md new file mode 100644 index 0000000000..6294691c6b --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.commands.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.commands +===================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.commands + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.md b/docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.md new file mode 100644 index 0000000000..7266f09588 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.dungeon +==================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.dungeon + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.enums.md b/docs/source/api/evennia.contrib.tutorials.evadventure.enums.md new file mode 100644 index 0000000000..5d7f579e68 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.enums.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.enums +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.enums + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.equipment.md b/docs/source/api/evennia.contrib.tutorials.evadventure.equipment.md new file mode 100644 index 0000000000..12930ccdf9 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.equipment.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.equipment +====================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.equipment + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.md b/docs/source/api/evennia.contrib.tutorials.evadventure.md new file mode 100644 index 0000000000..678a28c65d --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.md @@ -0,0 +1,38 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure +============================================= + +.. automodule:: evennia.contrib.tutorials.evadventure + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.evadventure.build_techdemo + evennia.contrib.tutorials.evadventure.build_world + evennia.contrib.tutorials.evadventure.characters + evennia.contrib.tutorials.evadventure.combat_turnbased + evennia.contrib.tutorials.evadventure.commands + evennia.contrib.tutorials.evadventure.dungeon + evennia.contrib.tutorials.evadventure.enums + evennia.contrib.tutorials.evadventure.equipment + evennia.contrib.tutorials.evadventure.npcs + evennia.contrib.tutorials.evadventure.objects + evennia.contrib.tutorials.evadventure.quests + evennia.contrib.tutorials.evadventure.random_tables + evennia.contrib.tutorials.evadventure.rooms + evennia.contrib.tutorials.evadventure.rules + evennia.contrib.tutorials.evadventure.shops + evennia.contrib.tutorials.evadventure.utils + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.evadventure.tests + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.npcs.md b/docs/source/api/evennia.contrib.tutorials.evadventure.npcs.md new file mode 100644 index 0000000000..0ed8c452fc --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.npcs.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.npcs +================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.npcs + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.objects.md b/docs/source/api/evennia.contrib.tutorials.evadventure.objects.md new file mode 100644 index 0000000000..9ce36e43f2 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.objects.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.objects +==================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.objects + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.quests.md b/docs/source/api/evennia.contrib.tutorials.evadventure.quests.md new file mode 100644 index 0000000000..99a1fc6bb4 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.quests.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.quests +=================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.quests + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.md b/docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.md new file mode 100644 index 0000000000..6fae231f93 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.random\_tables +=========================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.random_tables + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.rooms.md b/docs/source/api/evennia.contrib.tutorials.evadventure.rooms.md new file mode 100644 index 0000000000..d8e128de29 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.rooms.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.rooms +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.rooms + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.rules.md b/docs/source/api/evennia.contrib.tutorials.evadventure.rules.md new file mode 100644 index 0000000000..c30a834634 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.rules.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.rules +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.rules + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.shops.md b/docs/source/api/evennia.contrib.tutorials.evadventure.shops.md new file mode 100644 index 0000000000..22f53bee32 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.shops.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.shops +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.shops + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.md new file mode 100644 index 0000000000..93eae7ea5d --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.md @@ -0,0 +1,23 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests +=================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.evadventure.tests.mixins + evennia.contrib.tutorials.evadventure.tests.test_combat + evennia.contrib.tutorials.evadventure.tests.test_commands + evennia.contrib.tutorials.evadventure.tests.test_dungeon + evennia.contrib.tutorials.evadventure.tests.test_quests + evennia.contrib.tutorials.evadventure.tests.test_rules + evennia.contrib.tutorials.evadventure.tests.test_utils + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.md new file mode 100644 index 0000000000..ebc21b75bd --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.mixins +========================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.mixins + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.md new file mode 100644 index 0000000000..5a384854c5 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.test\_combat +=============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_combat + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.md new file mode 100644 index 0000000000..9c614b4222 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.test\_commands +================================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_commands + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.md new file mode 100644 index 0000000000..02b0598cf4 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.test\_dungeon +================================================================ + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_dungeon + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.md new file mode 100644 index 0000000000..2f1db7d67a --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.test\_quests +=============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_quests + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.md new file mode 100644 index 0000000000..5aa668a14c --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.test\_rules +============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_rules + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.md similarity index 71% rename from docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst rename to docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.md index 39d3aba676..2dfa6e0dd5 100644 --- a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.md @@ -1,7 +1,10 @@ -evennia.contrib.tutorials.evadventure.tests.test\_utils module +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.test\_utils ============================================================== .. automodule:: evennia.contrib.tutorials.evadventure.tests.test_utils :members: :undoc-members: :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.utils.md b/docs/source/api/evennia.contrib.tutorials.evadventure.utils.md new file mode 100644 index 0000000000..4dfb7e23c9 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.utils.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.utils +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.utils + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file From 9d1f35a8883a595ebf829cfbe47630b5d973d4ee Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 5 Aug 2022 20:39:45 +0200 Subject: [PATCH 068/177] Update doc sources with new contribs --- docs/source/Coding/Changelog.md | 16 + docs/source/Contribs/Contrib-Buffs.md | 371 ++++++++++++++++++ .../source/Contribs/Contrib-Name-Generator.md | 282 +++++++++++++ docs/source/Contribs/Contribs-Overview.md | 26 ++ docs/source/Setup/Settings-Default.md | 14 +- .../api/evennia.contrib.rpg.buffs.buff.md | 10 + docs/source/api/evennia.contrib.rpg.buffs.md | 19 + .../evennia.contrib.rpg.buffs.samplebuffs.md | 10 + .../api/evennia.contrib.rpg.buffs.tests.md | 10 + docs/source/api/evennia.contrib.rpg.md | 1 + 10 files changed, 753 insertions(+), 6 deletions(-) create mode 100644 docs/source/Contribs/Contrib-Buffs.md create mode 100644 docs/source/Contribs/Contrib-Name-Generator.md create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.buff.md create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.md create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.tests.md diff --git a/docs/source/Coding/Changelog.md b/docs/source/Coding/Changelog.md index be0527668a..2d15be0167 100644 --- a/docs/source/Coding/Changelog.md +++ b/docs/source/Coding/Changelog.md @@ -168,6 +168,22 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 now return `None` instead of `.db.desc` if no sdesc is set; fallback in hook (inspectorCaracal) - Reworked text2html parser to avoid problems with stateful color tags (inspectorCaracal) - Simplified `EvMenu.options_formatter` hook to use `EvColumn` and f-strings (inspectorcaracal) +- Added `move_type` str kwarg to `move_to()` calls, optionally identifying the type of + move being done ('teleport', 'disembark', 'give' etc). (volund) +- Made RPSystem contrib msg calls pass `pose` or `say` as msg-`type` for use in + e.g. webclient pane filtering where desired. (volund) +- Fixed bug in `cmdset.remove()` where a command could not be deleted by `key`, + even though doc suggested one could (ChrisLR) +- New contrib `name_generator` for building random real-world based or fantasy-names + based on phonetic rules. +- Enable proper serialization of dict subclasses in Attributes (aogier) +- `object.search` fuzzy-matching now uses `icontains` instead of `istartswith` + to better match how search works elsewhere (volund) +- The `.at_traverse` hook now receives a `exit_obj` kwarg, linking back to the + exit triggering the hook (volund) +- Contrib `buffs` for managing temporary and permanent RPG status buffs effects (tegiminis) +- New `at_server_init()` hook called before all other startup hooks for all + startup modes. Used for more generic overriding (volund) ## Evennia 0.9.5 diff --git a/docs/source/Contribs/Contrib-Buffs.md b/docs/source/Contribs/Contrib-Buffs.md new file mode 100644 index 0000000000..1b09d19dd5 --- /dev/null +++ b/docs/source/Contribs/Contrib-Buffs.md @@ -0,0 +1,371 @@ +# Buffs + +Contribution by Tegiminis 2022 + +A buff is a timed object, attached to a game entity. It is capable of modifying values, triggering code, or both. +It is a common design pattern in RPGs, particularly action games. + +Features: + +- `BuffHandler`: A buff handler to apply to your objects. +- `BaseBuff`: A buff class to extend from to create your own buffs. +- `BuffableProperty`: A sample property class to show how to automatically check modifiers. +- `CmdBuff`: A command which applies buffs. +- `samplebuffs.py`: Some sample buffs to learn from. + +## Quick Start +Assign the handler to a property on the object, like so. + +```python +@lazy_property +def buffs(self) -> BuffHandler: + return BuffHandler(self) +``` + +You may then call the handler to add or manipulate buffs like so: `object.buffs`. See **Using the Handler**. + +### Customization + +If you want to customize the handler, you can feed the constructor two arguments: +- `dbkey`: The string you wish to use as the attribute key for the buff database. Defaults to "buffs". This allows you to keep separate buff pools - for example, "buffs" and "perks". +- `autopause`: If you want this handler to automatically pause playtime buffs when its owning object is unpuppeted. + +> **Note**: If you enable autopausing, you MUST initialize the property in your owning object's +> `at_init` hook. Otherwise, a hot reload can cause playtime buffs to not update properly +> on puppet/unpuppet. You have been warned! + +Let's say you want another handler for an object, `perks`, which has a separate database and +respects playtime buffs. You'd assign this new property as so: + +```python +class BuffableObject(Object): + @lazy_property + def perks(self) -> BuffHandler: + return BuffHandler(self, dbkey='perks', autopause=True) + + def at_init(self): + self.perks +``` + +## Using the Handler + +Here's how to make use of your new handler. + +### Apply a Buff + +Call the handler's `add` method. This requires a class reference, and also contains a number of +optional arguments to customize the buff's duration, stacks, and so on. You can also store any arbitrary value +in the buff's cache by passing a dictionary through the `to_cache` optional argument. This will not overwrite the normal +values on the cache. + +```python +self.buffs.add(StrengthBuff) # A single stack of StrengthBuff with normal duration +self.buffs.add(DexBuff, stacks=3, duration=60) # Three stacks of DexBuff, with a duration of 60 seconds +self.buffs.add(ReflectBuff, to_cache={'reflect': 0.5}) # A single stack of ReflectBuff, with an extra cache value +``` + +Two important attributes on the buff are checked when the buff is applied: `refresh` and `unique`. +- `refresh` (default: True) determines if a buff's timer is refreshed when it is reapplied. +- `unique` (default: True) determines if this buff is unique; that is, only one of it exists on the object. + +The combination of these two booleans creates one of three kinds of keys: +- `Unique is True, Refresh is True/False`: The buff's default key. +- `Unique is False, Refresh is True`: The default key mixed with the applier's dbref. This makes the buff "unique-per-player", so you can refresh through reapplication. +- `Unique is False, Refresh is False`: The default key mixed with a randomized number. + +### Get Buffs + +The handler has several getter methods which return instanced buffs. You won't need to use these for basic functionality, but if you want to manipulate +buffs after application, they are very useful. The handler's `check`/`trigger` methods utilize some of these getters, while others are just for developer convenience. + +`get(key)` is the most basic getter. It returns a single buff instance, or `None` if the buff doesn't exist on the handler. It is also the only getter +that returns a single buff instance, rather than a dictionary. + +Group getters, listed below, return a dictionary of values in the format `{buffkey: instance}`. If you want to iterate over all of these buffs, +you should do so via the `dict.values()` method. + +- `get_all()` returns all buffs on this handler. You can also use the `handler.all` property. +- `get_by_type(BuffClass)` returns buffs of the specified type. +- `get_by_stat(stat)` returns buffs with a `Mod` object of the specified `stat` string in their `mods` list. +- `get_by_trigger(string)` returns buffs with the specified string in their `triggers` list. +- `get_by_source(Object)` returns buffs applied by the specified `source` object. +- `get_by_cachevalue(key, value)` returns buffs with the matching `key: value` pair in their cache. `value` is optional. + +All group getters besides `get_all()` can "slice" an existing dictionary through the optional `to_filter` argument. + +```python +dict1 = handler.get_by_type(Burned) # This finds all "Burned" buffs on the handler +dict2 = handler.get_by_source(self, to_filter=dict1) # This filters dict1 to find buffs with the matching source +``` + +> **Note**: Most of these getters also have an associated handler property. For example, `handler.effects` returns all buffs that can be triggered, which +> is then iterated over by the `get_by_trigger` method. + +### Remove Buffs + +There are also a number of remover methods. Generally speaking, these follow the same format as the getters. + +- `remove(key)` removes the buff with the specified key. +- `clear()` removes all buffs. +- `remove_by_type(BuffClass)` removes buffs of the specified type. +- `remove_by_stat(stat)` removes buffs with a `Mod` object of the specified `stat` string in their `mods` list. +- `remove_by_trigger(string)` removes buffs with the specified string in their `triggers` list. +- `remove_by_source(Object)` removes buffs applied by the specified source +- `remove_by_cachevalue(key, value)` removes buffs with the matching `key: value` pair in their cache. `value` is optional. + +You can also remove a buff by calling the instance's `remove` helper method. You can do this on the dictionaries returned by the +getters listed above. + +```python +to_remove = handler.get_by_trigger(trigger) # Finds all buffs with the specified trigger +for buff in to_remove.values(): # Removes all buffs in the to_remove dictionary via helper methods + buff.remove() +``` + +### Check Modifiers + +Call the handler `check(value, stat)` method when you want to see the modified value. +This will return the `value`, modified by any relevant buffs on the handler's owner (identified by +the `stat` string). + +For example, let's say you want to modify how much damage you take. That might look something like this: + +```python +# The method we call to damage ourselves +def take_damage(self, source, damage): + _damage = self.buffs.check(damage, 'taken_damage') + self.db.health -= _damage +``` + +This method calls the `at_pre_check` and `at_post_check` methods at the relevant points in the process. You can use to this make +buffs that are reactive to being checked; for example, removing themselves, altering their values, or interacting with the game state. + +> **Note**: You can also trigger relevant buffs at the same time as you check them by ensuring the optional argument `trigger` is True in the `check` method. + +### Trigger Buffs + +Call the handler's `trigger(string)` method when you want an event call. This will call the `at_trigger` hook method on all buffs with the relevant trigger `string`. + +For example, let's say you want to trigger a buff to "detonate" when you hit your target with an attack. +You'd write a buff that might look like this: + +```python +class Detonate(BaseBuff): + ... + triggers = ['take_damage'] + def at_trigger(self, trigger, *args, **kwargs) + self.owner.take_damage(100) + self.remove() +``` + +And then call `handler.trigger('take_damage')` in the method you use to take damage. + +> **Note** You could also do this through mods and `at_post_check` if you like, depending on how to want to add the damage. + +### Ticking + +Ticking buffs are slightly special. They are similar to trigger buffs in that they run code, but instead of +doing so on an event trigger, they do so on a periodic tick. A common use case for a buff like this is a poison, +or a heal over time. + +```python +class Poison(BaseBuff): + ... + tickrate = 5 + def at_tick(self, initial=True, *args, **kwargs): + _dmg = self.dmg * self.stacks + if not initial: + self.owner.location.msg_contents( + "Poison courses through {actor}'s body, dealing {damage} damage.".format( + actor=self.owner.named, damage=_dmg + ) + ) +``` + +To make a buff ticking, ensure the `tickrate` is 1 or higher, and it has code in its `at_tick` +method. Once you add it to the handler, it starts ticking! + +> **Note**: Ticking buffs always tick on initial application, when `initial` is `True`. If you don't want your hook to fire at that time, +> make sure to check the value of `initial` in your `at_tick` method. + +### Context + +Every important handler method optionally accepts a `context` dictionary. + +Context is an important concept for this handler. Every method which checks, triggers, or ticks a buff passes this +dictionary (default: empty) to the buff hook methods as keyword arguments (`**kwargs`). It is used for nothing else. This allows you to make those +methods "event-aware" by storing relevant data in the dictionary you feed to the method. + +For example, let's say you want a "thorns" buff which damages enemies that attack you. Let's take our `take_damage` method +and add a context to the mix. + +```python +def take_damage(attacker, damage): + context = {'attacker': attacker, 'damage': damage} + _damage = self.buffs.check(damage, 'taken_damage', context=context) + self.buffs.trigger('taken_damage', context=context) + self.db.health -= _damage +``` +Now we use the values that context passes to the buff kwargs to customize our logic. +```python +class ThornsBuff(BaseBuff): + ... + triggers = ['taken_damage'] + # This is the hook method on our thorns buff + def at_trigger(self, trigger, attacker=None, damage=0, **kwargs): + if not attacker: + return + attacker.db.health -= damage * 0.2 +``` +Apply the buff, take damage, and watch the thorns buff do its work! + +## Creating New Buffs + +Creating a new buff is very easy: extend `BaseBuff` into a new class, and fill in all the relevant buff details. +However, there are a lot of individual moving parts to a buff. Here's a step-through of the important stuff. + +### Basics + +Regardless of any other functionality, all buffs have the following class attributes: + +- They have customizable `key`, `name`, and `flavor` strings. +- They have a `duration` (float), and automatically clean-up at the end. Use -1 for infinite duration, and 0 to clean-up immediately. (default: -1) +- They can stack, if `maxstacks` (int) is not equal to 1. If it's 0, the buff stacks forever. (default: 1) +- They can be `unique` (bool), which determines if they have a unique namespace or not. (default: True) +- They can `refresh` (bool), which resets the duration when stacked or reapplied. (default: True) +- They can be `playtime` (bool) buffs, where duration only counts down during active play. (default: False) + +They also always store some useful mutable information about themselves in the cache: + +- `ref` (class): The buff class path we use to construct the buff. +- `start` (float): The timestamp of when the buff was applied. +- `source` (Object): If specified; this allows you to track who or what applied the buff. +- `prevtick` (float): The timestamp of the previous tick. +- `duration` (float): The cached duration. This can vary from the class duration, depending on if the duration has been modified (paused, extended, shortened, etc). +- `stacks` (int): How many stacks they have. +- `paused` (bool): Paused buffs do not clean up, modify values, tick, or fire any hook methods. + +You can always access the raw cache dictionary through the `cache` attribute on an instanced buff. This is grabbed when you get the buff through +a handler method, so it may not always reflect recent changes you've made, depending on how you structure your buff calls. All of the above +mutable information can be found in this cache, as well as any arbitrary information you pass through the handler `add` method (via `to_cache`). + +### Modifiers + +Mods are stored in the `mods` list attribute. Buffs which have one or more Mod objects in them can modify stats. You can use the handler method to check all +mods of a specific stat string and apply their modifications to the value; however, you are encouraged to use `check` in a getter/setter, for easy access. + +Mod objects consist of only four values, assigned by the constructor in this order: + +- `stat`: The stat you want to modify. When `check` is called, this string is used to find all the mods that are to be collected. +- `mod`: The modifier. Defaults are 'add' and 'mult'. Modifiers are calculated additively, and in standard arithmetic order (see `_calculate_mods` for more) +- `value`: How much value the modifier gives regardless of stacks +- `perstack`: How much value the modifier grants per stack, INCLUDING the first. (default: 0) + +The most basic way to add a Mod to a buff is to do so in the buff class definition, like this: + +```python +class DamageBuff(BaseBuff): + mods = [Mod('damage', 'add', 10)] +``` + +No mods applied to the value are permanent in any way. All calculations are done at runtime, and the mod values are never stored +anywhere except on the buff in question. In other words: you don't need to track the origin of particular stat mods, and you will +never permanently change a stat modified by a buff. To remove the modification, simply remove the buff from the object. + +> **Note**: You can add your own modifier types by overloading the `_calculate_mods` method, which contains the basic modifier application logic. + +#### Generating Mods (Advanced) + +An advanced way to do mods is to generate them when the buff is initialized. This lets you create mods on the fly that are reactive to the game state. + +```python +class GeneratedStatBuff(BaseBuff): + ... + def __init__(self, handler, buffkey, cache={}) -> None: + super().__init__(handler, buffkey, cache) + # Finds our "modgen" cache value, and generates a mod from it + modgen = list(self.cache.get("modgen")) + if modgen: + self.mods = [Mod(*modgen)] +``` + +### Triggers + +Buffs which have one or more strings in the `triggers` attribute can be triggered by events. + +When the handler's `trigger` method is called, it searches all buffs on the handler for any with a matchingtrigger, +then calls their `at_trigger` hooks. Buffs can have multiple triggers, and you can tell which trigger was used by +the `trigger` argument in the hook. + +```python +class AmplifyBuff(BaseBuff): + triggers = ['damage', 'heal'] + + def at_trigger(self, trigger, **kwargs): + if trigger == 'damage': print('Damage trigger called!') + if trigger == 'heal': print('Heal trigger called!') +``` + +### Ticking + +A buff which ticks isn't much different than one which triggers. You're still executing arbitrary hooks on +the buff class. To tick, the buff must have a `tickrate` of 1 or higher. + +```python +class Poison(BaseBuff): + ... + # this buff will tick 6 times between application and cleanup. + duration = 30 + tickrate = 5 + def at_tick(self, initial, **kwargs): + self.owner.take_damage(10) +``` +> **Note**: The buff always ticks once when applied. For this **first tick only**, `initial` will be True in the `at_tick` hook method. `initial` will be False on subsequent ticks. + +Ticks utilize a persistent delay, so they should be pickleable. As long as you are not adding new properties to your buff class, this shouldn't be a concern. +If you **are** adding new properties, try to ensure they do not end up with a circular code path to their object or handler, as this will cause pickling errors. + +### Extras + +Buffs have a grab-bag of extra functionality to let you add complexity to your designs. + +#### Conditionals + +You can restrict whether or not the buff will `check`, `trigger`, or `tick` through defining the `conditional` hook. As long +as it returns a "truthy" value, the buff will apply itself. This is useful for making buffs dependent on game state - for +example, if you want a buff that makes the player take more damage when they are on fire: + +```python +class FireSick(BaseBuff): + ... + def conditional(self, *args, **kwargs): + if self.owner.buffs.get_by_type(FireBuff): + return True + return False +``` + +Conditionals for `check`/`trigger` are checked when the buffs are gathered by the handler methods for the respective operations. `Tick` +conditionals are checked each tick. + +#### Helper Methods + +Buff instances have a number of helper methods. + +- `remove`/`dispel`: Allows you to remove or dispel the buff. Calls `at_remove`/`at_dispel`, depending on optional arguments. +- `pause`/`unpause`: Pauses and unpauses the buff. Calls `at_pause`/`at_unpause`. +- `reset`: Resets the buff's start to the current time; same as "refreshing" it. + +#### Playtime Duration + +If your handler has `autopause` enabled, any buffs with truthy `playtime` value will automatically pause +and unpause when the object the handler is attached to is puppetted or unpuppetted. This even works with ticking buffs, +although if you have less than 1 second of tick duration remaining, it will round up to 1s. + +> **Note**: If you want more control over this process, you can comment out the signal subscriptions on the handler and move the autopause logic +> to your object's `at_pre/post_puppet/unpuppet` hooks. + + +---- + +This document page is generated from `evennia/contrib/rpg/buffs/README.md`. Changes to this +file will be overwritten, so edit that file rather than this one. diff --git a/docs/source/Contribs/Contrib-Name-Generator.md b/docs/source/Contribs/Contrib-Name-Generator.md new file mode 100644 index 0000000000..8772cdd537 --- /dev/null +++ b/docs/source/Contribs/Contrib-Name-Generator.md @@ -0,0 +1,282 @@ +# Random Name Generator + +Contribution by InspectorCaracal (2022) + +A module for generating random names, both real-world and fantasy. Real-world +names can be generated either as first (personal) names, family (last) names, or +full names (first, optional middles, and last). The name data is from [Behind the Name](https://www.behindthename.com/) +and used under the [CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/). + +Fantasy names are generated from basic phonetic rules, using CVC syllable syntax. + +Both real-world and fantasy name generation can be extended to include additional +information via your game's `settings.py` + +## Installation + +This is a stand-alone utility. Just import this module (`from evennia.contrib.utils import name_generator`) and use its functions wherever you like. + +## Usage + +Import the module where you need it with the following: +```py +from evennia.contrib.utils.name_generator import namegen +``` + +By default, all of the functions will return a string with one generated name. +If you specify more than one, or pass `return_list=True` as a keyword argument, the returned value will be a list of strings. + +The module is especially useful for naming newly-created NPCs, like so: +```py +npc_name = namegen.full_name() +npc_obj = create_object(key=npc_name, typeclass="typeclasses.characters.NPC") +``` + +## Available Settings + +These settings can all be defined in your game's `server/conf/settings.py` file. + +- `NAMEGEN_FIRST_NAMES` adds a new list of first (personal) names. +- `NAMEGEN_LAST_NAMES` adds a new list of last (family) names. +- `NAMEGEN_REPLACE_LISTS` - set to `True` if you want to use only the names defined in your settings. +- `NAMEGEN_FANTASY_RULES` lets you add new phonetic rules for generating entirely made-up names. See the section "Custom Fantasy Name style rules" for details on how this should look. + +Examples: +```py +NAMEGEN_FIRST_NAMES = [ + ("Evennia", 'mf'), + ("Green Tea", 'f'), + ] + +NAMEGEN_LAST_NAMES = [ "Beeblebrox", "Son of Odin" ] + +NAMEGEN_FANTASY_RULES = { + "example_style": { + "syllable": "(C)VC", + "consonants": [ 'z','z','ph','sh','r','n' ], + "start": ['m'], + "end": ['x','n'], + "vowels": [ "e","e","e","a","i","i","u","o", ], + "length": (2,4), + } +} +``` + + +## Generating Real Names + +The contrib offers three functions for generating random real-world names: +`first_name()`, `last_name()`, and `full_name()`. If you want more than one name +generated at once, you can use the `num` keyword argument to specify how many. + +Example: +``` +>>> namegen.first_name(num=5) +['Genesis', 'Tali', 'Budur', 'Dominykas', 'Kamau'] +>>> namegen.first_name(gender='m') +'Blanchard' +``` + +The `first_name` function also takes a `gender` keyword argument to filter names +by gender association. 'f' for feminine, 'm' for masculine, 'mf' for feminine +_and_ masculine, or the default `None` to match any gendering. + +The `full_name` function also takes the `gender` keyword, as well as `parts` which +defines how many names make up the full name. The minimum is two: a first name and +a last name. You can also generate names with the family name first by setting +the keyword arg `surname_first` to `True` + +Example: +``` +>>> namegen.full_name() +'Keeva Bernat' +>>> namegen.full_name(parts=4) +'Suzu Shabnam Kafka Baier' +>>> namegen.full_name(parts=3, surname_first=True) +'Ó Muircheartach Torunn Dyson' +>>> namegen.full_name(gender='f') +'Wikolia Ó Deasmhumhnaigh' +``` + +### Adding your own names + +You can add additional names with the settings `NAMEGEN_FIRST_NAMES` and +`NAMEGEN_LAST_NAMES` + +`NAMEGEN_FIRST_NAMES` should be a list of tuples, where the first value is the name +and then second value is the gender flag - 'm' for masculine-only, 'f' for feminine- +only, and 'mf' for either one. + +`NAMEGEN_LAST_NAMES` should be a list of strings, where each item is an available +surname. + +Examples: +```py +NAMEGEN_FIRST_NAMES = [ + ("Evennia", 'mf'), + ("Green Tea", 'f'), + ] + +NAMEGEN_LAST_NAMES = [ "Beeblebrox", "Son of Odin" ] +``` + +Set `NAMEGEN_REPLACE_LISTS = True` if you want your custom lists above to entirely replace the built-in lists rather than extend them. + +## Generating Fantasy Names + +Generating completely made-up names is done with the `fantasy_name` function. The +contrib comes with three built-in styles of names which you can use, or you can +put a dictionary of custom name rules into `settings.py` + +Generating a fantasy name takes the ruleset key as the "style" keyword, and can +return either a single name or multiple names. By default, it will return a +single name in the built-in "harsh" style. The contrib also comes with "fluid" and "alien" styles. + +```py +>>> namegen.fantasy_name() +'Vhon' +>>> namegen.fantasy_name(num=3, style="harsh") +['Kha', 'Kizdhu', 'Godögäk'] +>>> namegen.fantasy_name(num=3, style="fluid") +['Aewalisash', 'Ayi', 'Iaa'] +>>> namegen.fantasy_name(num=5, style="alien") +["Qz'vko'", "Xv'w'hk'hxyxyz", "Wxqv'hv'k", "Wh'k", "Xbx'qk'vz"] +``` + +### Multi-Word Fantasy Names + +The `fantasy_name` function will only generate one name-word at a time, so for multi-word names +you'll need to combine pieces together. Depending on what kind of end result you want, there are +several approaches. + + +#### The simple approach + +If all you need is for it to have multiple parts, you can generate multiple names at once and `join` them. + +```py +>>> name = " ".join(namegen.fantasy_name(num=2)) +>>> name +'Dezhvözh Khäk' +``` + +If you want a little more variation between first/last names, you can also generate names for +different styles and then combine them. + +```py +>>> first = namegen.fantasy_name(style="fluid") +>>> last = namegen.fantasy_name(style="harsh") +>>> name = f"{first} {last}" +>>> name +'Ofasa Käkudhu' +``` + +#### "Nakku Silversmith" + +One common fantasy name practice is profession- or title-based surnames. To achieve this effect, +you can use the `last_name` function with a custom list of last names and combine it with your generated +fantasy name. + +Example: +```py +NAMEGEN_LAST_NAMES = [ "Silversmith", "the Traveller", "Destroyer of Worlds" ] +NAMEGEN_REPLACE_LISTS = True + +>>> first = namegen.fantasy_name() +>>> last = namegen.last_name() +>>> name = f"{first} {last}" +>>> name +'Tözhkheko the Traveller' +``` + +#### Elarion d'Yrinea, Thror Obinson + +Another common flavor of fantasy names is to use a surname suffix or prefix. For that, you'll +need to add in the extra bit yourself. + +Examples: +```py +>>> names = namegen.fantasy_name(num=2) +>>> name = f"{names[0]} za'{names[1]}" +>>> name +"Tithe za'Dhudozkok" + +>>> names = namegen.fantasy_name(num=2) +>>> name = f"{names[0]} {names[1]}son" +>>> name +'Kön Ködhöddoson' +``` + + +### Custom Fantasy Name style rules + +The style rules are contained in a dictionary of dictionaries, where the style name +is the key and the style rules are the dictionary value. + +The following is how you would add a custom style to `settings.py`: +```py +NAMEGEN_FANTASY_RULES = { + "example_style": { + "syllable": "(C)VC", + "consonants": [ 'z','z','ph','sh','r','n' ], + "start": ['m'], + "end": ['x','n'], + "vowels": [ "e","e","e","a","i","i","u","o", ], + "length": (2,4), + } +} +``` + +Then you could generate names following that ruleset with `namegen.fantasy_name(style="example_style")`. + +The keys `syllable`, `consonants`, `vowels`, and `length` must be present, and `length` must be the minimum and maximum syllable counts. `start` and `end` are optional. + + +#### syllable +The "syllable" field defines the structure of each syllable. C is consonant, V is vowel, +and parentheses mean it's optional. So, the example `(C)VC` means that every syllable +will always have a vowel followed by a consonant, and will *sometimes* have another +consonant at the beginning. e.g. `en`, `bak` + +*Note:* While it's not standard, the contrib lets you nest parentheses, with each layer +being less likely to show up. Additionally, any other characters put into the syllable +structure - e.g. an apostrophe - will be read and inserted as written. The +"alien" style rules in the module gives an example of both: the syllable structure is `C(C(V))(')(C)` +which results in syllables such as `khq`, `xho'q`, and `q'` with a much lower frequency of vowels than +`C(C)(V)(')(C)` would have given. + +#### consonants +A simple list of consonant phonemes that can be chosen from. Multi-character strings are +perfectly acceptable, such as "th", but each one will be treated as a single consonant. + +The function uses a naive form of weighting, where you make a phoneme more likely to +occur by putting more copies of it into the list. + +#### start and end +These are **optional** lists for the first and last letters of a syllable, if they're +a consonant. You can add on additional consonants which can only occur at the beginning +or end of a syllable, or you can add extra copies of already-defined consonants to +increase the frequency of them at the start/end of syllables. + +For example, in the `example_style` above, we have a `start` of m, and `end` of x and n. +Taken with the rest of the consonants/vowels, this means you can have the syllables of `mez` +but not `zem`, and you can have `phex` or `phen` but not `xeph` or `neph`. + +They can be left out of custom rulesets entirely. + +#### vowels +Vowels is a simple list of vowel phonemes - exactly like consonants, but instead used for the +vowel selection. Single-or multi-character strings are equally fine. It uses the same naive weighting system +as consonants - you can increase the frequency of any given vowel by putting it into the list multiple times. + +#### length +A tuple with the minimum and maximum number of syllables a name can have. + +When setting this, keep in mind how long your syllables can get! 4 syllables might +not seem like very many, but if you have a (C)(V)VC structure with one- and +two-letter phonemes, you can get up to eight characters per syllable. + +---- + +This document page is generated from `evennia/contrib/utils/name_generator/README.md`. Changes to this +file will be overwritten, so edit that file rather than this one. diff --git a/docs/source/Contribs/Contribs-Overview.md b/docs/source/Contribs/Contribs-Overview.md index a8138acfd3..343129062e 100644 --- a/docs/source/Contribs/Contribs-Overview.md +++ b/docs/source/Contribs/Contribs-Overview.md @@ -458,6 +458,7 @@ and rule implementation like character traits, dice rolling and emoting._ ```{toctree} :maxdepth: 1 +Contrib-Buffs.md Contrib-Dice.md Contrib-Health-Bar.md Contrib-RPSystem.md @@ -465,6 +466,17 @@ Contrib-Traits.md ``` +### Contrib: `buffs` + +_Contribution by Tegiminis 2022_ + +A buff is a timed object, attached to a game entity. It is capable of modifying values, triggering code, or both. +It is a common design pattern in RPGs, particularly action games. + +[Read the documentation](./Contrib-Buffs.md) - [Browse the Code](evennia.contrib.rpg.buffs) + + + ### Contrib: `dice` _Contribution by Griatch, 2012_ @@ -628,6 +640,7 @@ and more._ Contrib-Auditing.md Contrib-Fieldfill.md +Contrib-Name-Generator.md Contrib-Random-String-Generator.md Contrib-Tree-Select.md ``` @@ -661,6 +674,19 @@ to any callable of your choice. +### Contrib: `name_generator` + +_Contribution by InspectorCaracal (2022)_ + +A module for generating random names, both real-world and fantasy. Real-world +names can be generated either as first (personal) names, family (last) names, or +full names (first, optional middles, and last). The name data is from [Behind the Name](https://www.behindthename.com/) +and used under the [CC BY-SA 4.0 license](https://creativecommons.org/licenses/by-sa/4.0/). + +[Read the documentation](./Contrib-Name-Generator.md) - [Browse the Code](evennia.contrib.utils.name_generator) + + + ### Contrib: `random_string_generator` _Contribution by Vincent Le Goff (vlgeoff), 2017_ diff --git a/docs/source/Setup/Settings-Default.md b/docs/source/Setup/Settings-Default.md index 5567ce2052..baa2ee3c9e 100644 --- a/docs/source/Setup/Settings-Default.md +++ b/docs/source/Setup/Settings-Default.md @@ -31,12 +31,12 @@ value - which may change as Evennia is developed. This way you can always be sure of what you have changed and what is default behaviour. """ -from django.contrib.messages import constants as messages -from django.urls import reverse_lazy - import os import sys +from django.contrib.messages import constants as messages +from django.urls import reverse_lazy + ###################################################################### # Evennia base server config ###################################################################### @@ -405,9 +405,11 @@ INITIAL_SETUP_MODULE = "evennia.server.initial_setup" # the server's initial setup sequence (the very first startup of the system). # The check will fail quietly if module doesn't exist or fails to load. AT_INITIAL_SETUP_HOOK_MODULE = "server.conf.at_initial_setup" -# Module containing your custom at_server_start(), at_server_reload() and -# at_server_stop() methods. These methods will be called every time -# the server starts, reloads and resets/stops respectively. +# Module(s) containing custom at_server_init(), at_server_start(), +# at_server_reload() and at_server_stop() methods. These methods will be called +# every time the server starts, reloads and resets/stops +# respectively. Can be given as a single path or a list of paths. If a list, +# each module's hooks will be called in list order. AT_SERVER_STARTSTOP_MODULE = "server.conf.at_server_startstop" # List of one or more module paths to modules containing a function start_ # plugin_services(application). This module will be called with the main diff --git a/docs/source/api/evennia.contrib.rpg.buffs.buff.md b/docs/source/api/evennia.contrib.rpg.buffs.buff.md new file mode 100644 index 0000000000..826198c22e --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.buff.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.rpg.buffs.buff +===================================== + +.. automodule:: evennia.contrib.rpg.buffs.buff + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.buffs.md b/docs/source/api/evennia.contrib.rpg.buffs.md new file mode 100644 index 0000000000..114ecd8af4 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.md @@ -0,0 +1,19 @@ +```{eval-rst} +evennia.contrib.rpg.buffs +================================= + +.. automodule:: evennia.contrib.rpg.buffs + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.buffs.buff + evennia.contrib.rpg.buffs.samplebuffs + evennia.contrib.rpg.buffs.tests + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md b/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md new file mode 100644 index 0000000000..ecad1d62b3 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.rpg.buffs.samplebuffs +============================================ + +.. automodule:: evennia.contrib.rpg.buffs.samplebuffs + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.buffs.tests.md b/docs/source/api/evennia.contrib.rpg.buffs.tests.md new file mode 100644 index 0000000000..84b3076dfb --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.tests.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.rpg.buffs.tests +====================================== + +.. automodule:: evennia.contrib.rpg.buffs.tests + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.rpg.md b/docs/source/api/evennia.contrib.rpg.md index ea6607f239..f4ad7822e4 100644 --- a/docs/source/api/evennia.contrib.rpg.md +++ b/docs/source/api/evennia.contrib.rpg.md @@ -11,6 +11,7 @@ evennia.contrib.rpg .. toctree:: :maxdepth: 6 + evennia.contrib.rpg.buffs evennia.contrib.rpg.dice evennia.contrib.rpg.health_bar evennia.contrib.rpg.rpsystem From 4531f44ca03b2c2919f97a0484e71bb046f21755 Mon Sep 17 00:00:00 2001 From: Johnny Date: Fri, 5 Aug 2022 19:41:39 +0000 Subject: [PATCH 069/177] Changes bare try/except to callable check. --- evennia/typeclasses/attributes.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index 90492a13d2..3a3d8c7281 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -176,7 +176,7 @@ class AttributeProperty: attrhandler_name = "attributes" - def __init__(self, default=None, category=None, strattr=False, lockstring="", autocreate=True): + def __init__(self, default=None, default_factory=None, category=None, strattr=False, lockstring="", autocreate=True): """ Initialize an Attribute as a property descriptor. @@ -209,10 +209,10 @@ class AttributeProperty: Tries returning a new instance of default if callable. """ - try: + if callable(self.__default): return self.__default() - except: - return self.__default + + return self.__default @_default.setter def _default(self, value): From 7a8d1da5a9cdb41477f3d9fbf80aea3a9da56a1d Mon Sep 17 00:00:00 2001 From: Johnny Date: Fri, 5 Aug 2022 19:51:33 +0000 Subject: [PATCH 070/177] Removes unused default_factory arg. --- evennia/typeclasses/attributes.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/typeclasses/attributes.py b/evennia/typeclasses/attributes.py index 3a3d8c7281..785d849e0f 100644 --- a/evennia/typeclasses/attributes.py +++ b/evennia/typeclasses/attributes.py @@ -176,7 +176,7 @@ class AttributeProperty: attrhandler_name = "attributes" - def __init__(self, default=None, default_factory=None, category=None, strattr=False, lockstring="", autocreate=True): + def __init__(self, default=None, category=None, strattr=False, lockstring="", autocreate=True): """ Initialize an Attribute as a property descriptor. From 673c3e5f03649f8903d6b38ab64426fc4ef15218 Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Fri, 5 Aug 2022 14:40:48 -0700 Subject: [PATCH 071/177] added view_modifiers, altered view to accept a to_filter arg --- evennia/contrib/rpg/buffs/buff.py | 39 ++++++++++++++++++++++++++++--- 1 file changed, 36 insertions(+), 3 deletions(-) diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index 9e70403963..3f008f4d19 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -923,13 +923,46 @@ class BuffHandler: self.buffcache[key]["duration"] = value return - def view(self) -> dict: - """Returns a buff flavor text as a dictionary of tuples in the format {key: (name, flavor)}. Common use for this is a buff readout of some kind.""" + def view(self, to_filter=None) -> dict: + """Returns a buff flavor text as a dictionary of tuples in the format {key: (name, flavor)}. Common use for this is a buff readout of some kind. + + Args: + to_filter: (optional) The dictionary of buffs to iterate over. If none is provided, returns all buffs (default: None)""" + if not isinstance(to_filter, dict): + raise TypeError self.cleanup() - _cache = self.visible + _cache = self.visible if not to_filter else to_filter _flavor = {k: (buff.name, buff.flavor) for k, buff in _cache.items()} return _flavor + def view_modifiers(self, stat: str, context=None): + """Checks all modifiers of the specified stat without actually applying them. Hits the conditional hook for relevant buffs. + + Args: + stat: The mod identifier string to search for + context: (optional) A dictionary you wish to pass to the conditional hooks as kwargs + + Returns a nested dictionary. The first layer's keys represent the type of modifier ('add' and 'mult'), + and the second layer's keys represent the type of value ('total' and 'strongest').""" + # Buff cleanup to make sure all buffs are valid before processing + self.cleanup() + + # Find all buffs and traits related to the specified stat. + if not context: + context = {} + applied = self.get_by_stat(stat) + if not applied: + return None + + # Sift out buffs that won't be applying their mods (paused, conditional) + applied = { + k: buff for k, buff in applied.items() if buff.conditional(**context) if not buff.paused + } + + # Calculate and return our values dictionary + calc = self._calculate_mods(stat, applied) + return calc + def cleanup(self): """Removes expired buffs, ensures pause state is respected.""" self._validate_state() From bf06205edfcba4a9e43fd93924bed20a38fbf564 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 6 Aug 2022 01:23:07 +0200 Subject: [PATCH 072/177] Continue with tutorial writing --- docs/source/Coding/Changelog.md | 2 + ...System.md => Beginner-Tutorial-Chargen.md} | 0 .../Part3/Beginner-Tutorial-Part3-Intro.md | 6 +- .../Part3/Beginner-Tutorial-Rules.md | 580 ++++++++++++++++++ .../Part3/Beginner-Tutorial-Utilities.md | 3 - .../contrib/tutorials/evadventure/enums.py | 3 - .../contrib/tutorials/evadventure/rules.py | 7 +- 7 files changed, 589 insertions(+), 12 deletions(-) rename docs/source/Howtos/Beginner-Tutorial/Part3/{Beginner-Tutorial-Rule-System.md => Beginner-Tutorial-Chargen.md} (100%) create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md diff --git a/docs/source/Coding/Changelog.md b/docs/source/Coding/Changelog.md index 7017972553..103053b325 100644 --- a/docs/source/Coding/Changelog.md +++ b/docs/source/Coding/Changelog.md @@ -178,6 +178,8 @@ Up requirements to Django 4.0+, Twisted 22+, Python 3.9 or 3.10 move being done ('teleport', 'disembark', 'give' etc). (volund) - Made RPSystem contrib msg calls pass `pose` or `say` as msg-`type` for use in e.g. webclient pane filtering where desired. (volund) +- Added `Account.uses_screenreader(session=None)` as a quick shortcut for + finding if a user uses a screenreader (and adjust display accordingly). - Fixed bug in `cmdset.remove()` where a command could not be deleted by `key`, even though doc suggested one could (ChrisLR) - New contrib `name_generator` for building random real-world based or fantasy-names diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rule-System.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Chargen.md similarity index 100% rename from docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rule-System.md rename to docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Chargen.md diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md index 1b9f63acd1..c3e96d5c99 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md @@ -38,7 +38,8 @@ Fully coded examples of all code we make in this part can be found in the :maxdepth: 1 Beginner-Tutorial-Utilities -Beginner-Tutorial-Rule-System +Beginner-Tutorial-Rules +Beginner-Tutorial-Chargen Beginner-Tutorial-Characters Beginner-Tuturial-Objects Beginner-Tutorial-Rooms @@ -55,7 +56,8 @@ Beginner-Tutorial-Commands ```{toctree} Beginner-Tutorial-Utilities -Beginner-Tutorial-Rule-System +Beginner-Tutorial-Rules +Beginner-Tutorial-Chargen Beginner-Tutorial-Characters Beginner-Tuturial-Objects Beginner-Tutorial-Rooms diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md new file mode 100644 index 0000000000..6f8c1a3b5d --- /dev/null +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md @@ -0,0 +1,580 @@ +# Rules - summary and dice rolling + +In _EvAdventure_ we have decided to use the [Knave](https://www.drivethrurpg.com/product/250888/Knave) +RPG ruleset. This is commercial, but released under Creative Commons 4.0, meaning it's okay to share and +adapt _Knave_ for any purpose, even commercially. If you don't want to buy it but still follow +along, you can find a [free fan-version here](http://abominablefancy.blogspot.com/2018/10/knaves-fancypants.html). + +## Summary of _Knave_ rules + +Knave, being inspired by early Dungeons & Dragons, is very simple. + +- It uses six Ability bonuses +_Strength_ (STR), _Dexterity_ (DEX), _Constitution_ (CON), _Intelligence_ (INT), _Wisdom_ (WIS) +and _Charisma_ (CHA). These are rated from `+1` to `+10`. +- Rolls are made with a twenty-sided die (`1d20`), usually adding a suitable Ability bonus to the roll. +- If you roll _with advantage_, you roll `2d20` and pick the +_highest_ value, If you roll _with disadvantage_, you roll `2d20` and pick the _lowest_. +- Rolling a natural `1` is a _critical failure_. A natural `20` is a _critical success_. +- A _saving throw_ (trying to succeed against the environment) means making a roll to beat `15` (always). +So if you are lifting a heavy stone and have a strength of `+2`, you'd roll `1d20 + 2` and hope the result +is higher than `15`. +- An _opposed saving throw_ means beating the enemy's suitable Ability 'defense', which is always their +`Ability bonus + 10`. So if you have STR `+1` and are arm wrestling someone with STR `+2`, you roll +`1d20 + 1` and hope to roll higher than `2 + 10 = 12`. +- A special bonus is _Armor_, which is given by equipment. Melee attacks test STR versus the _Armor_ +defense value while ranged attacks uses WIS vs Armor. +- _Knave_ have no skills or classes. Everyone can use all items and using magic means having a special +'rune stone' in your hands; one spell per stone and day. +- A character has CON + 10 carry 'slots'. Most normal items uses one slot, armor and large weapons uses +two or three. +- Healing is random, usually `1d8` health healed roll after food and sleep. +- Monsters have a _morale rating_. When things go bad, they have a chance to panic and flee if +rolling `2d6` gives a value over their morale rating. +- All Characters in _Knave_ are mostly randomly generated. Normally HP is `1d8`, but we will start HP at +max value. We will also give everyone an even Ability bonus distribution to avoid people re-rolling +their characters over and over until happy. +- _Knave_ also have some random tables, such as for starting equipment and to see if dying when +hitting 0. Death, if it happens, is permanent. + + +## Making a rule module + +> Create a new module mygame/evadventure/rules.py + +```{sidebar} +A complete version of the rule module is found in +[evennia/contrib/tutorials/evadventure/rules.py](evennia.contrib.tutorials.evadventure.rules). +``` +There are three broad sets of rules for most RPGS: + +- Character generation rules, often only used during character creation +- Regular gameplay rules - rolling dice and resolving game situations +- Character improvement - getting and spending experience to improve the character + +We want our `rules` module to cover as many aspeects of what we'd otherwise would have to look up +in a rulebook. + + +## Rolling dice + +We will start by making a dice roller. Let's group all of our dice rolling into a structure like this +(not functional code yet): + +```python +class EvAdventureRollEngine: + + def roll(...): + # get result of one generic roll, for any type and number of dice + + def roll_with_advantage_or_disadvantage(...) + # get result of normal d20 roll, with advantage/disadvantage (or not) + + def saving_throw(...): + # do a saving throw against a specific target number + + def opposed_saving_throw(...): + # do an opposed saving throw against a target's defense + + def roll_random_table(...): + # make a roll against a random table (loaded elsewere) + + def morale_check(...): + # roll a 2d6 morale check for a target + + def heal_from_rest(...): + # heal 1d8 when resting+eating, but not more than max value. + + def roll_death(...): + # roll to determine penalty when hitting 0 HP. + + +dice = EvAdventureRollEngine() + +``` +```{sidebar} +This groups all dice-related code into one 'container' that is easy to import. But it's mostly a matter +of taste. You _could_ also break up the class' methods into normal functions at the top-level of the +module if you wanted. +``` + +This structure (called a _singleton_) means we group all dice rolls into one class that we then initiate +into a variable `dice` at the end of the module. This means that we can do the following from other +modules: + +```python + from .rules import dice + + dice.roll("1d8") +``` + +### Generic dice roller + +We want to be able to do `roll("1d20")` and get a random result back from the roll. + +```python +# in mygame/evadventure/rules.py + +from random import randint + +class EvAdventureRollEngine: + + def roll(self, roll_string): + """ + Roll XdY dice, where X is the number of dice + and Y the number of sides per die. + + Args: + roll_string (str): A dice string on the form XdY. + Returns: + int: The result of the roll. + + """ + + # split the XdY input on the 'd' one time + number, diesize = roll_string.split("d", 1) + + # convert from string to integers + number = int(number) + diesize = int(diesize) + + # make the roll + return sum(randint(1, diesize) for _ in range(number)) +``` + +```{sidebar} +For this tutorial we have opted to not use any contribs, so we create +our own dice roller. But normally you could instead use the [dice](../../../Contribs/Contrib-Dice.md) contrib for this. +We'll point out possible helpful contribs in sidebars as we proceed. +``` + +The `randint` standard Python library module produces a random integer +in a specific range. The line + +```python +sum(randint(1, diesize) for _ in range(number)) +``` +works like this: + +- For a certain `number` of times ... +- ... create a random integer between `1` and `diesize` ... +- ... and `sum` all those integers together. + +You could write the same thing less compactly like this: + +```python +rolls = [] +for _ in range(number): + random_result = randint(1, diesize) + rolls.append(random_result) +return sum(rolls) +``` + +```{sidebar} +Note that `range` generates a value `0...number-1`. We use `_` in the `for` loop to +indicate we don't really care what this value is - we just want to repeat the loop +a certain amount of times. +``` + +We don't ever expect end users to call this method; if we did, we would have to validate the inputs +much more - We would have to make sure that `number` or `diesize` are valid inputs and not +crazy big so the loop takes forever! + +### Rolling with advantage + +Now that we have the generic roller, we can start using it to do a more complex roll. + +``` +# in mygame/evadventure/rules.py + +# ... + +class EvAdventureRollEngine: + + def roll(roll_string): + # ... + + def roll_with_advantage_or_disadvantage(self, advantage=False, disadvantage=False): + + if not (advantage or disadvantage) or (advantage and disadvantage): + # normal roll - advantage/disadvantage not set or they cancel + # each other out + return self.roll("1d20") + elif advantage: + # highest of two d20 rolls + return max(self.roll("1d20"), self.roll("1d20")) + else: + # disadvantage - lowest of two d20 rolls + return min(self.roll("1d20"), self.roll("1d20")) +``` + +The `min()` and `max()` functions are standard Python fare for getting the biggest/smallest +of two arguments. + +### Saving throws + +We want the saving throw to itself figure out if it succeeded or not. This means it needs to know +the Ability bonus (like STR `+1`). It would be convenient if we could just pass the entity +doing the saving throw to this method, tell it what type of save was needed, and then +have it figure things out: + +```python +result, quality = dice.saving_throw(character, Ability.STR) +``` +The return will be a boolean `True/False` if they pass, as well as a `quality` that tells us if +a perfect fail/success was rolled or not. + +To make the saving throw method this clever, we need to think some more about how we want to store our +data on the character. + +For our purposes it sounds reasonable that we will be using [Attributes](../../../Components/Attributes.md) for storing +the Ability scores. To make it easy, we will name them the same as the +[Enum values](./Beginner-Tutorial-Utilities.md#enums) we set up in the previous lesson. So if we have +an enum `STR = "strength"`, we want to store the Ability on the character as an Attribute `strength`. + +From the Attribute documentation, we can see that we can use `AttributeProperty` to make it so the +Attribute is available as `character.strength`, and this is what we will do. + +So, in short, we'll create the saving throws method with the assumption that we will be able to do +`character.strength`, `character.constitution`, `character.charisma` etc to get the relevant Abilities. + +```python +# in mygame/evadventure/rules.py +# ... +from .enums import Ability + +class EvAdventureRollEngine: + + def roll(...) + # ... + + def roll_with_advantage_or_disadvantage(...) + # ... + + def saving_throw(self, character, bonus_type=Ability.STR, target=15, + advantage=False, disadvantage=False): + """ + Do a saving throw, trying to beat a target. + + Args: + character (Character): A character (assumed to have Ability bonuses + stored on itself as Attributes). + bonus_type (Ability): A valid Ability bonus enum. + target (int): The target number to beat. Always 15 in Knave. + advantage (bool): If character has advantage on this roll. + disadvantage (bool): If character has disadvantage on this roll. + + Returns: + tuple: A tuple (bool, Ability), showing if the throw succeeded and + the quality is one of None or Ability.CRITICAL_FAILURE/SUCCESS + + """ + + # make a roll + dice_roll = self.roll_with_advantage_or_disadvantage(advantage, disadvantage) + + # figure out if we had critical failure/success + quality = None + if dice_roll == 1: + quality = Ability.CRITICAL_FAILURE + elif dice_roll == 20: + quality = Ability.CRITICAL_SUCCESS + + # figure out bonus + bonus = getattr(character, bonus_type.value, 1) + + # return a tuple (bool, quality) + return (dice_roll + bonus) > target, quality +``` + +The `getattr(obj, attrname, default)` function is a very useful Python tool for getting an attribute +off an object and getting a default value if the attribute is not defined. + +### Opposed saving throw + +With the building pieces we already created, this method is simple. Remember that the defense you have +to beat is always the relevant bonus + 10 in _Knave_. So if the enemy defends with `STR +3`, you must +roll higher than `13`. + +```python +# in mygame/evadventure/rules.py + +from .enums import Ability + +class EvAdventureRollEngine: + + def roll(...): + # ... + + def roll_with_advantage_or_disadvantage(...): + # ... + + def saving_throw(...): + # ... + + def opposed_saving_throw(self, attacker, defender, + attack_type=Ability.STR, defense_type=Ability.ARMOR, + advantage=False, disadvantage=False): + defender_defense = getattr(defender, defense_type.value, 1) + 10 + result, quality = self.saving_throw(attacker, bonus_type=attack_type, + target=defender_defense, + advantage=advantave, disadvantage=disadvantage) + + return result, quality +``` + +### Morale check + +We will make the assumption that the `morale` value is available from the creature simply as +`monster.morale` - we need to remember to make this so later! + +In _Knave_, a creature have roll with `2d6` equal or under its morale to not flee or surrender +when things go south. The standard morale value is 9. + +```python +# in mygame/evadventure/rules.py + +class EvAdventureRollEngine: + + # ... + + def morale_check(self, defender): + return self.roll("2d6") <= getattr(defender, "morale", 9) + +``` + +### Roll for Healing + +To be able to handle healing, we need to make some more assumptions about how we store +health on game entities. We will need `hp_max` (the total amount of available HP) and `hp` +(the current health value). We again assume these will be available as `obj.hp` and `obj.hp_max`. + +According to the rules, after consuming a ration and having a full night's sleep, a character regains +`1d8 + CON` HP. + +```python +# in mygame/evadventure/rules.py + +from .enums import Ability + +class EvAdventureRollEngine: + + # ... + + def heal(character, amount): + """ + Heal a certain amount of health, but not more + than character's `hp_max`. + + """ + + hp = character.hp + hp_max = character.hp_max + + damage = hp_max - hp + character.hp += min(damage, amount) + + def heal_from_rest(self, character): + """ + A night's rest retains 1d8 + CON HP + + """ + con_bonus = getattr(character, Ability.CON.value, 1) + self.heal(character, self.roll("1d8") + con_bonus) +``` + +By splitting this into two methods, we get a free convenient `heal` method we can use for healing +also outside of sleeping. + + +### Rolling on a table + +We occasionally need to roll on a 'table' - a selection of choices. There are two main table-types +we need to support: + +Simply one element per row of the table (same odds to get each result). + +| Result | +|:------:| +| item1 | +| item2 | +| item3 | +| item4 | + +This we will simply represent as a plain list + +```python +["item1", "item2", "item3", "item4"] +``` + +Ranges per item (varying odds per result): + +| Range | Result | +|:-----:|:------:| +| 1-5 | item1 | +| 6-15 | item2 | +| 16-19 | item3 | +| 20 | item4 | + +This we will represent as a list of tuples: + +```python +[("1-5", "item1"), ("6-15", "item2"), ("16-19", "item4"), ("20", "item5")] +``` + +We also need to know what die to roll to get a result on the table (it may not always +be obvious, and in some games you could be asked to roll a lower dice to only get +early table results, for example). + +```python +# in mygame/evadventure/rules.py + +from random import randint, choice + +class EvAdventureRollEngine: + + # ... + + def roll_random_table(self, dieroll, table_choices): + """ + Args: + dieroll (str): A die roll string, like "1d20". + table_choices (iterable): A list of either single elements or + of tuples. + Returns: + Any: A random result from the given list of choices. + + Raises: + RuntimeError: If rolling dice giving results outside the table. + + """ + roll_result = self.roll(dieroll) + + if isinstance(table_choices[0], (tuple, list)): + # the first element is a tuple/list; treat as on the form [("1-5", "item"),...] + for (valrange, choice) in table_choices: + minval, *maxval = valrange.split("-", 1) + minval = abs(int(minval)) + maxval = abs(int(maxval[0]) if maxval else minval) + + if minval <= roll_result <= maxval: + return choice + + # if we get here we must have set a dieroll producing a value + # outside of the table boundaries - raise error + raise RuntimeError("roll_random_table: Invalid die roll") + else: + # a simple regular list + roll_result = max(1, min(len(table_choices), roll_result)) + return table_choices[roll_result - 1] +``` +Check that you understand what this does. + +This may be confusing: +```python +minval, *maxval = valrange.split("-", 1) +minval = abs(int(minval)) +maxval = abs(int(maxval[0]) if maxval else minval) +``` + +If `valrange` is the string `1-5`, then `valrange.split("-", 1)` would result in a tuple `("1", "5")`. +But if the string was in fact just `"20"` (possible for a single entry in an RPG table), this would +lead to an error since it would only split out a single element - and we expected two. + +By using `*maxval` (with the `*`), `maxval` is told to expect _0 or more_ elements in a tuple. +So the result for `1-5` will be `("1", ("5",))` and for `20` it will become `("20", ())`. In the line + +```python +maxval = abs(int(maxval[0]) if maxval else minval) +``` + +we check if `maxval` actually has a value `("5",)` or if its empty `()`. The result is either +`"5"` or the value of `minval`. + + +### Roll for death + +While original Knave suggests hitting 0 HP means insta-death, we will grab the optional "death table" +from the "prettified" Knave's optional rules to make it a little less punishing. We also changed the +result of `2` to 'dead' since we don't simulate 'dismemberment' in this tutorial: + +| Roll | Result | -1d4 Loss of Ability | +|:---: |:--------:|:--------------------:| +| 1-2 | dead | - +| 3 | weakened | STR | +|4 | unsteady | DEX | +| 5 | sickly | CON | +| 6 | addled | INT | +| 7 | rattled | WIS | +| 8 | disfigured | CHA | + +All the non-dead values map to a loss of 1d4 in one of the six Abilities (but you get HP back). +We need to map back to this from the above table. One also cannot have less than -10 Ability bonus, +if you do, you die too. + +```python +# in mygame/evadventure/rules.py + +death_table = ( + ("1-2", "dead"), + ("3": "strength", + ("4": "dexterity"), + ("5": "constitution"), + ("6": "intelligence"), + ("7": "wisdom"), + ("8": "charisma"), +) + + +class EvAdventureRollEngine: + + # ... + + def roll_random_table(...) + # ... + + def roll_death(self, character): + ability_name = self.roll_random_table("1d8", death_table) + + if ability_name == "dead": + # TODO - kill the character! + pass + else: + loss = self.roll("1d4") + + current_ability = getattr(character, ability_name) + current_ability -= loss + + if current_ability < -10: + # TODO - kill the character! + pass + else: + # refresh 1d4 health, but suffer 1d4 ability loss + self.heal(character, self.roll("1d4") + setattr(character, ability_name, current_ability) + + character.msg( + "You survive your brush with death, and while you recover " + f"some health, you permanently lose {loss} {ability_name} instead." + ) + +dice = EvAdventureRollEngine() +``` + +Here we roll on the 'death table' from the rules to see what happens. We give the character +a message if they survive, to let them know what happened. + +We don't yet know what 'killing the character' technically means, so we mark this as `TODO` and +return to it in a later lesson. We just know that we need to do _something_ here to kill off the +character! + +## Summary + +This concludes all the core rule mechanics of _Knave_ - the rules used during play. We noticed here +that we are going to soon need to establish how our _Character_ actually stores data. So we will +address that next, before we get to the character generation itself. + + + + + diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md index bab946e25e..2a99811c82 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md @@ -119,9 +119,6 @@ class Ability(Enum): CHA = "charisma" ARMOR = "armor" - HP = "hp" - LEVEL = "level" - XP = "xp" CRITICAL_FAILURE = "critical_failure" CRITICAL_SUCCESS = "critical_success" diff --git a/evennia/contrib/tutorials/evadventure/enums.py b/evennia/contrib/tutorials/evadventure/enums.py index 59c24163a0..a5a7130a5b 100644 --- a/evennia/contrib/tutorials/evadventure/enums.py +++ b/evennia/contrib/tutorials/evadventure/enums.py @@ -31,9 +31,6 @@ class Ability(Enum): CHA = "charisma" ARMOR = "armor" - HP = "hp" - LEVEL = "level" - XP = "xp" CRITICAL_FAILURE = "critical_failure" CRITICAL_SUCCESS = "critical_success" diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 391bc1e939..17f1e2753e 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -346,13 +346,12 @@ class EvAdventureRollEngine: character.at_death() else: # refresh health, but get permanent ability loss - new_hp = max(character.hp_max, self.roll("1d4")) + self.heal(character, self.roll("1d4")) setattr(character, abi, current_abi) - character.hp = new_hp character.msg( "~" * 78 + "\n|yYou survive your brush with death, " - f"but are |r{result.upper()}|y and permenently |rlose {loss} {abi}|y.|n\n" + f"but are |r{result.upper()}|y and permanently |rlose {loss} {abi}|y.|n\n" f"|GYou recover |g{new_hp}|G health|.\n" + "~" * 78 ) @@ -532,7 +531,7 @@ class EvAdventureCharacterGeneration: for item in self.backpack: # TODO create here - character.equipment.add(item) + character.equipment.store(item) # character improvement From 6a6a7b13a86c8888cb0553bfe8abdda9e76dcd83 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sat, 6 Aug 2022 22:50:53 +0200 Subject: [PATCH 073/177] Made several tutorial doc pages --- .../Part3/Beginner-Tutorial-Characters.md | 354 ++++++++++++++++++ .../Part3/Beginner-Tutorial-Equipment.md | 120 ++++++ .../Part3/Beginner-Tutorial-Objects.md | 334 +++++++++++++++++ .../Part3/Beginner-Tutorial-Part3-Intro.md | 46 +-- .../Part3/Beginner-Tutorial-Rules.md | 85 ++++- .../Part3/Beginner-Tutorial-Utilities.md | 35 +- .../Tutorial-Persistent-Handler.md} | 7 +- docs/source/api/evennia-api.rst | 7 + docs/source/api/evennia.accounts.accounts.rst | 7 + docs/source/api/evennia.accounts.bots.rst | 7 + docs/source/api/evennia.accounts.manager.rst | 7 + docs/source/api/evennia.accounts.models.rst | 7 + docs/source/api/evennia.accounts.rst | 17 + .../api/evennia.commands.cmdhandler.rst | 7 + .../source/api/evennia.commands.cmdparser.rst | 7 + docs/source/api/evennia.commands.cmdset.rst | 7 + .../api/evennia.commands.cmdsethandler.rst | 7 + docs/source/api/evennia.commands.command.rst | 7 + .../api/evennia.commands.default.account.rst | 7 + .../api/evennia.commands.default.admin.rst | 7 + .../evennia.commands.default.batchprocess.rst | 7 + .../api/evennia.commands.default.building.rst | 7 + ...vennia.commands.default.cmdset_account.rst | 7 + ...nnia.commands.default.cmdset_character.rst | 7 + ...vennia.commands.default.cmdset_session.rst | 7 + ...nia.commands.default.cmdset_unloggedin.rst | 7 + .../api/evennia.commands.default.comms.rst | 7 + .../api/evennia.commands.default.general.rst | 7 + .../api/evennia.commands.default.help.rst | 7 + .../evennia.commands.default.muxcommand.rst | 7 + docs/source/api/evennia.commands.default.rst | 29 ++ .../evennia.commands.default.syscommands.rst | 7 + .../api/evennia.commands.default.system.rst | 7 + .../api/evennia.commands.default.tests.rst | 7 + .../evennia.commands.default.unloggedin.rst | 7 + docs/source/api/evennia.commands.rst | 24 ++ docs/source/api/evennia.comms.comms.rst | 7 + docs/source/api/evennia.comms.managers.rst | 7 + docs/source/api/evennia.comms.models.rst | 7 + docs/source/api/evennia.comms.rst | 16 + ...rib.base_systems.awsstorage.aws_s3_cdn.rst | 7 + ...vennia.contrib.base_systems.awsstorage.rst | 15 + ....contrib.base_systems.awsstorage.tests.rst | 7 + ...se_systems.building_menu.building_menu.rst | 7 + ...nia.contrib.base_systems.building_menu.rst | 15 + ...ntrib.base_systems.building_menu.tests.rst | 7 + ...se_systems.color_markups.color_markups.rst | 7 + ...nia.contrib.base_systems.color_markups.rst | 15 + ...ntrib.base_systems.color_markups.tests.rst | 7 + ...trib.base_systems.components.component.rst | 7 + ...ontrib.base_systems.components.dbfield.rst | 7 + ...contrib.base_systems.components.holder.rst | 7 + ...vennia.contrib.base_systems.components.rst | 18 + ...ontrib.base_systems.components.signals.rst | 7 + ....contrib.base_systems.components.tests.rst | 7 + ...ystems.custom_gametime.custom_gametime.rst | 7 + ...a.contrib.base_systems.custom_gametime.rst | 15 + ...rib.base_systems.custom_gametime.tests.rst | 7 + ...systems.email_login.connection_screens.rst | 7 + ...b.base_systems.email_login.email_login.rst | 7 + ...ennia.contrib.base_systems.email_login.rst | 16 + ...contrib.base_systems.email_login.tests.rst | 7 + ..._systems.ingame_python.callbackhandler.rst | 7 + ...ib.base_systems.ingame_python.commands.rst | 7 + ....base_systems.ingame_python.eventfuncs.rst | 7 + ...nia.contrib.base_systems.ingame_python.rst | 20 + ...rib.base_systems.ingame_python.scripts.rst | 7 + ...ntrib.base_systems.ingame_python.tests.rst | 7 + ...base_systems.ingame_python.typeclasses.rst | 7 + ...ntrib.base_systems.ingame_python.utils.rst | 7 + ..._systems.menu_login.connection_screens.rst | 7 + ...rib.base_systems.menu_login.menu_login.rst | 7 + ...vennia.contrib.base_systems.menu_login.rst | 16 + ....contrib.base_systems.menu_login.tests.rst | 7 + ..._systems.mux_comms_cmds.mux_comms_cmds.rst | 7 + ...ia.contrib.base_systems.mux_comms_cmds.rst | 15 + ...trib.base_systems.mux_comms_cmds.tests.rst | 7 + .../api/evennia.contrib.base_systems.rst | 22 ++ ...ennia.contrib.base_systems.unixcommand.rst | 15 + ...contrib.base_systems.unixcommand.tests.rst | 7 + ...b.base_systems.unixcommand.unixcommand.rst | 7 + ...trib.full_systems.evscaperoom.commands.rst | 7 + ....contrib.full_systems.evscaperoom.menu.rst | 7 + ...ntrib.full_systems.evscaperoom.objects.rst | 7 + ....contrib.full_systems.evscaperoom.room.rst | 7 + ...ennia.contrib.full_systems.evscaperoom.rst | 21 ++ ...ntrib.full_systems.evscaperoom.scripts.rst | 7 + ...contrib.full_systems.evscaperoom.state.rst | 7 + ...contrib.full_systems.evscaperoom.tests.rst | 7 + ...contrib.full_systems.evscaperoom.utils.rst | 7 + .../api/evennia.contrib.full_systems.rst | 13 + ...nia.contrib.game_systems.barter.barter.rst | 7 + .../evennia.contrib.game_systems.barter.rst | 15 + ...nnia.contrib.game_systems.barter.tests.rst | 7 + ...contrib.game_systems.clothing.clothing.rst | 7 + .../evennia.contrib.game_systems.clothing.rst | 15 + ...ia.contrib.game_systems.clothing.tests.rst | 7 + ...ntrib.game_systems.cooldowns.cooldowns.rst | 7 + ...evennia.contrib.game_systems.cooldowns.rst | 15 + ...a.contrib.game_systems.cooldowns.tests.rst | 7 + ...contrib.game_systems.crafting.crafting.rst | 7 + ....game_systems.crafting.example_recipes.rst | 7 + .../evennia.contrib.game_systems.crafting.rst | 16 + ...ia.contrib.game_systems.crafting.tests.rst | 7 + ...ntrib.game_systems.gendersub.gendersub.rst | 7 + ...evennia.contrib.game_systems.gendersub.rst | 15 + ...a.contrib.game_systems.gendersub.tests.rst | 7 + ...evennia.contrib.game_systems.mail.mail.rst | 7 + .../api/evennia.contrib.game_systems.mail.rst | 15 + ...vennia.contrib.game_systems.mail.tests.rst | 7 + ...b.game_systems.multidescer.multidescer.rst | 7 + ...ennia.contrib.game_systems.multidescer.rst | 15 + ...contrib.game_systems.multidescer.tests.rst | 7 + ...a.contrib.game_systems.puzzles.puzzles.rst | 7 + .../evennia.contrib.game_systems.puzzles.rst | 15 + ...nia.contrib.game_systems.puzzles.tests.rst | 7 + .../api/evennia.contrib.game_systems.rst | 21 ++ ...vennia.contrib.game_systems.turnbattle.rst | 19 + ...ntrib.game_systems.turnbattle.tb_basic.rst | 7 + ...ntrib.game_systems.turnbattle.tb_equip.rst | 7 + ...ntrib.game_systems.turnbattle.tb_items.rst | 7 + ...ntrib.game_systems.turnbattle.tb_magic.rst | 7 + ...ntrib.game_systems.turnbattle.tb_range.rst | 7 + ....contrib.game_systems.turnbattle.tests.rst | 7 + ...ntrib.grid.extended_room.extended_room.rst | 7 + .../evennia.contrib.grid.extended_room.rst | 15 + ...ennia.contrib.grid.extended_room.tests.rst | 7 + ...nia.contrib.grid.mapbuilder.mapbuilder.rst | 7 + .../api/evennia.contrib.grid.mapbuilder.rst | 15 + .../evennia.contrib.grid.mapbuilder.tests.rst | 7 + docs/source/api/evennia.contrib.grid.rst | 18 + .../api/evennia.contrib.grid.simpledoor.rst | 15 + ...nia.contrib.grid.simpledoor.simpledoor.rst | 7 + .../evennia.contrib.grid.simpledoor.tests.rst | 7 + .../api/evennia.contrib.grid.slow_exit.rst | 15 + ...ennia.contrib.grid.slow_exit.slow_exit.rst | 7 + .../evennia.contrib.grid.slow_exit.tests.rst | 7 + .../api/evennia.contrib.grid.wilderness.rst | 15 + .../evennia.contrib.grid.wilderness.tests.rst | 7 + ...nia.contrib.grid.wilderness.wilderness.rst | 7 + .../evennia.contrib.grid.xyzgrid.commands.rst | 7 + .../evennia.contrib.grid.xyzgrid.example.rst | 7 + ...evennia.contrib.grid.xyzgrid.launchcmd.rst | 7 + ...vennia.contrib.grid.xyzgrid.prototypes.rst | 7 + .../api/evennia.contrib.grid.xyzgrid.rst | 23 ++ .../evennia.contrib.grid.xyzgrid.tests.rst | 7 + .../evennia.contrib.grid.xyzgrid.utils.rst | 7 + .../evennia.contrib.grid.xyzgrid.xymap.rst | 7 + ...nnia.contrib.grid.xyzgrid.xymap_legend.rst | 7 + .../evennia.contrib.grid.xyzgrid.xyzgrid.rst | 7 + .../evennia.contrib.grid.xyzgrid.xyzroom.rst | 7 + .../api/evennia.contrib.rpg.buffs.buff.rst | 7 + docs/source/api/evennia.contrib.rpg.buffs.rst | 16 + .../evennia.contrib.rpg.buffs.samplebuffs.rst | 7 + .../api/evennia.contrib.rpg.buffs.tests.rst | 7 + .../api/evennia.contrib.rpg.dice.dice.rst | 7 + docs/source/api/evennia.contrib.rpg.dice.rst | 15 + .../api/evennia.contrib.rpg.dice.tests.rst | 7 + ...nnia.contrib.rpg.health_bar.health_bar.rst | 7 + .../api/evennia.contrib.rpg.health_bar.rst | 15 + .../evennia.contrib.rpg.health_bar.tests.rst | 7 + ...vennia.contrib.rpg.rpsystem.rplanguage.rst | 7 + .../evennia.contrib.rpg.rpsystem.rpsystem.rst | 7 + .../api/evennia.contrib.rpg.rpsystem.rst | 16 + .../evennia.contrib.rpg.rpsystem.tests.rst | 7 + docs/source/api/evennia.contrib.rpg.rst | 17 + .../source/api/evennia.contrib.rpg.traits.rst | 15 + .../api/evennia.contrib.rpg.traits.tests.rst | 7 + .../api/evennia.contrib.rpg.traits.traits.rst | 7 + docs/source/api/evennia.contrib.rst | 19 + ...ials.batchprocessor.example_batch_code.rst | 7 + ...ennia.contrib.tutorials.batchprocessor.rst | 14 + ....tutorials.bodyfunctions.bodyfunctions.rst | 7 + ...vennia.contrib.tutorials.bodyfunctions.rst | 15 + ....contrib.tutorials.bodyfunctions.tests.rst | 7 + ...b.tutorials.evadventure.build_techdemo.rst | 7 + ...trib.tutorials.evadventure.build_world.rst | 7 + ...ntrib.tutorials.evadventure.characters.rst | 7 + ...tutorials.evadventure.combat_turnbased.rst | 7 + ...contrib.tutorials.evadventure.commands.rst | 7 + ....contrib.tutorials.evadventure.dungeon.rst | 7 + ...ia.contrib.tutorials.evadventure.enums.rst | 7 + ...ontrib.tutorials.evadventure.equipment.rst | 7 + ...nia.contrib.tutorials.evadventure.npcs.rst | 7 + ....contrib.tutorials.evadventure.objects.rst | 7 + ...a.contrib.tutorials.evadventure.quests.rst | 7 + ...ib.tutorials.evadventure.random_tables.rst | 7 + ...ia.contrib.tutorials.evadventure.rooms.rst | 7 + .../evennia.contrib.tutorials.evadventure.rst | 35 ++ ...ia.contrib.tutorials.evadventure.rules.rst | 7 + ...ia.contrib.tutorials.evadventure.shops.rst | 7 + ...nia.contrib.tutorials.evadventure.tests.md | 1 + ...rib.tutorials.evadventure.tests.mixins.rst | 7 + ...ia.contrib.tutorials.evadventure.tests.rst | 21 ++ ...rials.evadventure.tests.test_characters.md | 10 + ...ials.evadventure.tests.test_characters.rst | 7 + ...utorials.evadventure.tests.test_combat.rst | 7 + ...orials.evadventure.tests.test_commands.rst | 7 + ...torials.evadventure.tests.test_dungeon.rst | 7 + ...utorials.evadventure.tests.test_quests.rst | 7 + ...tutorials.evadventure.tests.test_rules.rst | 7 + ...tutorials.evadventure.tests.test_utils.rst | 7 + ...ia.contrib.tutorials.evadventure.utils.rst | 7 + ...vennia.contrib.tutorials.mirror.mirror.rst | 7 + .../api/evennia.contrib.tutorials.mirror.rst | 14 + ...ontrib.tutorials.red_button.red_button.rst | 7 + .../evennia.contrib.tutorials.red_button.rst | 14 + docs/source/api/evennia.contrib.tutorials.rst | 19 + .../evennia.contrib.tutorials.talking_npc.rst | 15 + ...trib.tutorials.talking_npc.talking_npc.rst | 7 + ...ia.contrib.tutorials.talking_npc.tests.rst | 7 + ...ib.tutorials.tutorial_world.intro_menu.rst | 7 + ...a.contrib.tutorials.tutorial_world.mob.rst | 7 + ...ntrib.tutorials.tutorial_world.objects.rst | 7 + ...contrib.tutorials.tutorial_world.rooms.rst | 7 + ...ennia.contrib.tutorials.tutorial_world.rst | 18 + ...contrib.tutorials.tutorial_world.tests.rst | 7 + ...evennia.contrib.utils.auditing.outputs.rst | 7 + .../api/evennia.contrib.utils.auditing.rst | 16 + .../evennia.contrib.utils.auditing.server.rst | 7 + .../evennia.contrib.utils.auditing.tests.rst | 7 + ...nnia.contrib.utils.fieldfill.fieldfill.rst | 7 + .../api/evennia.contrib.utils.fieldfill.rst | 14 + ...ring_generator.random_string_generator.rst | 7 + ....contrib.utils.random_string_generator.rst | 15 + ...ib.utils.random_string_generator.tests.rst | 7 + docs/source/api/evennia.contrib.utils.rst | 16 + .../api/evennia.contrib.utils.tree_select.rst | 15 + ...vennia.contrib.utils.tree_select.tests.rst | 7 + ....contrib.utils.tree_select.tree_select.rst | 7 + docs/source/api/evennia.help.filehelp.rst | 7 + docs/source/api/evennia.help.manager.rst | 7 + docs/source/api/evennia.help.models.rst | 7 + docs/source/api/evennia.help.rst | 17 + docs/source/api/evennia.help.utils.rst | 7 + docs/source/api/evennia.locks.lockfuncs.rst | 7 + docs/source/api/evennia.locks.lockhandler.rst | 7 + docs/source/api/evennia.locks.rst | 15 + docs/source/api/evennia.objects.manager.rst | 7 + docs/source/api/evennia.objects.models.rst | 7 + docs/source/api/evennia.objects.objects.rst | 7 + docs/source/api/evennia.objects.rst | 16 + docs/source/api/evennia.prototypes.menus.rst | 7 + .../api/evennia.prototypes.protfuncs.rst | 7 + .../api/evennia.prototypes.prototypes.rst | 7 + docs/source/api/evennia.prototypes.rst | 17 + .../source/api/evennia.prototypes.spawner.rst | 7 + docs/source/api/evennia.rst | 32 ++ docs/source/api/evennia.scripts.manager.rst | 7 + docs/source/api/evennia.scripts.models.rst | 7 + .../api/evennia.scripts.monitorhandler.rst | 7 + docs/source/api/evennia.scripts.rst | 20 + .../api/evennia.scripts.scripthandler.rst | 7 + docs/source/api/evennia.scripts.scripts.rst | 7 + .../api/evennia.scripts.taskhandler.rst | 7 + .../api/evennia.scripts.tickerhandler.rst | 7 + docs/source/api/evennia.server.amp_client.rst | 7 + .../api/evennia.server.connection_wizard.rst | 7 + .../api/evennia.server.deprecations.rst | 7 + .../api/evennia.server.evennia_launcher.rst | 7 + ...vennia.server.game_index_client.client.rst | 7 + .../api/evennia.server.game_index_client.rst | 15 + ...ennia.server.game_index_client.service.rst | 7 + .../api/evennia.server.initial_setup.rst | 7 + docs/source/api/evennia.server.inputfuncs.rst | 7 + docs/source/api/evennia.server.manager.rst | 7 + docs/source/api/evennia.server.models.rst | 7 + docs/source/api/evennia.server.portal.amp.rst | 7 + .../api/evennia.server.portal.amp_server.rst | 7 + .../api/evennia.server.portal.grapevine.rst | 7 + docs/source/api/evennia.server.portal.irc.rst | 7 + .../source/api/evennia.server.portal.mccp.rst | 7 + .../source/api/evennia.server.portal.mssp.rst | 7 + docs/source/api/evennia.server.portal.mxp.rst | 7 + .../source/api/evennia.server.portal.naws.rst | 7 + .../api/evennia.server.portal.portal.rst | 7 + ...nia.server.portal.portalsessionhandler.rst | 7 + docs/source/api/evennia.server.portal.rss.rst | 7 + docs/source/api/evennia.server.portal.rst | 34 ++ docs/source/api/evennia.server.portal.ssh.rst | 7 + docs/source/api/evennia.server.portal.ssl.rst | 7 + .../api/evennia.server.portal.suppress_ga.rst | 7 + .../api/evennia.server.portal.telnet.rst | 7 + .../api/evennia.server.portal.telnet_oob.rst | 7 + .../api/evennia.server.portal.telnet_ssl.rst | 7 + .../api/evennia.server.portal.tests.rst | 7 + .../api/evennia.server.portal.ttype.rst | 7 + .../api/evennia.server.portal.webclient.rst | 7 + .../evennia.server.portal.webclient_ajax.rst | 7 + .../evennia.server.profiling.dummyrunner.rst | 7 + ....server.profiling.dummyrunner_settings.rst | 7 + .../api/evennia.server.profiling.memplot.rst | 7 + docs/source/api/evennia.server.profiling.rst | 20 + ...vennia.server.profiling.settings_mixin.rst | 7 + .../evennia.server.profiling.test_queries.rst | 7 + .../api/evennia.server.profiling.tests.rst | 7 + .../evennia.server.profiling.timetrace.rst | 7 + docs/source/api/evennia.server.rst | 37 ++ docs/source/api/evennia.server.server.rst | 7 + .../api/evennia.server.serversession.rst | 7 + docs/source/api/evennia.server.session.rst | 7 + .../api/evennia.server.sessionhandler.rst | 7 + docs/source/api/evennia.server.signals.rst | 7 + docs/source/api/evennia.server.throttle.rst | 7 + docs/source/api/evennia.server.validators.rst | 7 + docs/source/api/evennia.server.webserver.rst | 7 + docs/source/api/evennia.settings_default.rst | 7 + .../api/evennia.typeclasses.attributes.rst | 7 + .../api/evennia.typeclasses.managers.rst | 7 + .../source/api/evennia.typeclasses.models.rst | 7 + docs/source/api/evennia.typeclasses.rst | 17 + docs/source/api/evennia.typeclasses.tags.rst | 7 + docs/source/api/evennia.utils.ansi.rst | 7 + .../api/evennia.utils.batchprocessors.rst | 7 + docs/source/api/evennia.utils.containers.rst | 7 + docs/source/api/evennia.utils.create.rst | 7 + docs/source/api/evennia.utils.dbserialize.rst | 7 + docs/source/api/evennia.utils.eveditor.rst | 7 + docs/source/api/evennia.utils.evform.rst | 7 + docs/source/api/evennia.utils.evmenu.rst | 7 + docs/source/api/evennia.utils.evmore.rst | 7 + docs/source/api/evennia.utils.evtable.rst | 7 + docs/source/api/evennia.utils.funcparser.rst | 7 + docs/source/api/evennia.utils.gametime.rst | 7 + .../api/evennia.utils.idmapper.manager.rst | 7 + .../api/evennia.utils.idmapper.models.rst | 7 + docs/source/api/evennia.utils.idmapper.rst | 16 + .../api/evennia.utils.idmapper.tests.rst | 7 + docs/source/api/evennia.utils.logger.rst | 7 + .../api/evennia.utils.optionclasses.rst | 7 + .../api/evennia.utils.optionhandler.rst | 7 + docs/source/api/evennia.utils.picklefield.rst | 7 + docs/source/api/evennia.utils.rst | 41 ++ docs/source/api/evennia.utils.search.rst | 7 + .../api/evennia.utils.test_resources.rst | 7 + docs/source/api/evennia.utils.text2html.rst | 7 + docs/source/api/evennia.utils.utils.rst | 7 + .../api/evennia.utils.validatorfuncs.rst | 7 + ...ennia.utils.verb_conjugation.conjugate.rst | 7 + ...vennia.utils.verb_conjugation.pronouns.rst | 7 + .../api/evennia.utils.verb_conjugation.rst | 16 + .../evennia.utils.verb_conjugation.tests.rst | 7 + .../source/api/evennia.web.admin.accounts.rst | 7 + .../api/evennia.web.admin.attributes.rst | 7 + docs/source/api/evennia.web.admin.comms.rst | 7 + .../api/evennia.web.admin.frontpage.rst | 7 + docs/source/api/evennia.web.admin.help.rst | 7 + docs/source/api/evennia.web.admin.objects.rst | 7 + docs/source/api/evennia.web.admin.rst | 24 ++ docs/source/api/evennia.web.admin.scripts.rst | 7 + docs/source/api/evennia.web.admin.server.rst | 7 + docs/source/api/evennia.web.admin.tags.rst | 7 + docs/source/api/evennia.web.admin.urls.rst | 7 + docs/source/api/evennia.web.admin.utils.rst | 7 + docs/source/api/evennia.web.api.filters.rst | 7 + .../api/evennia.web.api.permissions.rst | 7 + docs/source/api/evennia.web.api.root.rst | 7 + docs/source/api/evennia.web.api.rst | 20 + .../api/evennia.web.api.serializers.rst | 7 + docs/source/api/evennia.web.api.tests.rst | 7 + docs/source/api/evennia.web.api.urls.rst | 7 + docs/source/api/evennia.web.api.views.rst | 7 + docs/source/api/evennia.web.rst | 25 ++ .../api/evennia.web.templatetags.addclass.rst | 7 + docs/source/api/evennia.web.templatetags.rst | 14 + docs/source/api/evennia.web.urls.rst | 7 + .../api/evennia.web.utils.adminsite.rst | 7 + .../source/api/evennia.web.utils.backends.rst | 7 + .../api/evennia.web.utils.general_context.rst | 7 + .../api/evennia.web.utils.middleware.rst | 7 + docs/source/api/evennia.web.utils.rst | 18 + docs/source/api/evennia.web.utils.tests.rst | 7 + docs/source/api/evennia.web.webclient.rst | 15 + .../source/api/evennia.web.webclient.urls.rst | 7 + .../api/evennia.web.webclient.views.rst | 7 + docs/source/api/evennia.web.website.forms.rst | 7 + docs/source/api/evennia.web.website.rst | 22 ++ docs/source/api/evennia.web.website.tests.rst | 7 + docs/source/api/evennia.web.website.urls.rst | 7 + .../evennia.web.website.views.accounts.rst | 7 + .../evennia.web.website.views.channels.rst | 7 + .../evennia.web.website.views.characters.rst | 7 + .../api/evennia.web.website.views.errors.rst | 7 + .../api/evennia.web.website.views.help.rst | 7 + .../api/evennia.web.website.views.index.rst | 7 + .../api/evennia.web.website.views.mixins.rst | 7 + .../api/evennia.web.website.views.objects.rst | 7 + docs/source/api/evennia.web.website.views.rst | 21 ++ .../tutorials/evadventure/characters.py | 45 ++- .../tutorials/evadventure/equipment.py | 2 +- .../contrib/tutorials/evadventure/objects.py | 86 ++--- .../contrib/tutorials/evadventure/rules.py | 14 +- .../evadventure/tests/test_characters.py | 46 +++ 393 files changed, 4534 insertions(+), 170 deletions(-) create mode 100644 docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md rename docs/source/{Persistent-Handler.md => Howtos/Tutorial-Persistent-Handler.md} (96%) create mode 100644 docs/source/api/evennia-api.rst create mode 100644 docs/source/api/evennia.accounts.accounts.rst create mode 100644 docs/source/api/evennia.accounts.bots.rst create mode 100644 docs/source/api/evennia.accounts.manager.rst create mode 100644 docs/source/api/evennia.accounts.models.rst create mode 100644 docs/source/api/evennia.accounts.rst create mode 100644 docs/source/api/evennia.commands.cmdhandler.rst create mode 100644 docs/source/api/evennia.commands.cmdparser.rst create mode 100644 docs/source/api/evennia.commands.cmdset.rst create mode 100644 docs/source/api/evennia.commands.cmdsethandler.rst create mode 100644 docs/source/api/evennia.commands.command.rst create mode 100644 docs/source/api/evennia.commands.default.account.rst create mode 100644 docs/source/api/evennia.commands.default.admin.rst create mode 100644 docs/source/api/evennia.commands.default.batchprocess.rst create mode 100644 docs/source/api/evennia.commands.default.building.rst create mode 100644 docs/source/api/evennia.commands.default.cmdset_account.rst create mode 100644 docs/source/api/evennia.commands.default.cmdset_character.rst create mode 100644 docs/source/api/evennia.commands.default.cmdset_session.rst create mode 100644 docs/source/api/evennia.commands.default.cmdset_unloggedin.rst create mode 100644 docs/source/api/evennia.commands.default.comms.rst create mode 100644 docs/source/api/evennia.commands.default.general.rst create mode 100644 docs/source/api/evennia.commands.default.help.rst create mode 100644 docs/source/api/evennia.commands.default.muxcommand.rst create mode 100644 docs/source/api/evennia.commands.default.rst create mode 100644 docs/source/api/evennia.commands.default.syscommands.rst create mode 100644 docs/source/api/evennia.commands.default.system.rst create mode 100644 docs/source/api/evennia.commands.default.tests.rst create mode 100644 docs/source/api/evennia.commands.default.unloggedin.rst create mode 100644 docs/source/api/evennia.commands.rst create mode 100644 docs/source/api/evennia.comms.comms.rst create mode 100644 docs/source/api/evennia.comms.managers.rst create mode 100644 docs/source/api/evennia.comms.models.rst create mode 100644 docs/source/api/evennia.comms.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.awsstorage.aws_s3_cdn.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.awsstorage.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.awsstorage.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.building_menu.building_menu.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.building_menu.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.building_menu.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.color_markups.color_markups.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.color_markups.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.color_markups.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.components.component.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.components.dbfield.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.components.holder.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.components.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.components.signals.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.components.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.custom_gametime.custom_gametime.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.custom_gametime.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.custom_gametime.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.email_login.connection_screens.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.email_login.email_login.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.email_login.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.email_login.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.callbackhandler.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.commands.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.eventfuncs.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.scripts.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.typeclasses.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.ingame_python.utils.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.menu_login.connection_screens.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.menu_login.menu_login.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.menu_login.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.menu_login.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.unixcommand.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.unixcommand.tests.rst create mode 100644 docs/source/api/evennia.contrib.base_systems.unixcommand.unixcommand.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.commands.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.menu.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.objects.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.room.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.scripts.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.state.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.tests.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.evscaperoom.utils.rst create mode 100644 docs/source/api/evennia.contrib.full_systems.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.barter.barter.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.barter.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.barter.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.clothing.clothing.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.clothing.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.clothing.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.cooldowns.cooldowns.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.cooldowns.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.cooldowns.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.crafting.crafting.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.crafting.example_recipes.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.crafting.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.crafting.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.gendersub.gendersub.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.gendersub.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.gendersub.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.mail.mail.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.mail.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.mail.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.multidescer.multidescer.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.multidescer.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.multidescer.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.puzzles.puzzles.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.puzzles.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.puzzles.tests.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.turnbattle.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.turnbattle.tb_basic.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.turnbattle.tb_equip.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.turnbattle.tb_items.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.turnbattle.tb_magic.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.turnbattle.tb_range.rst create mode 100644 docs/source/api/evennia.contrib.game_systems.turnbattle.tests.rst create mode 100644 docs/source/api/evennia.contrib.grid.extended_room.extended_room.rst create mode 100644 docs/source/api/evennia.contrib.grid.extended_room.rst create mode 100644 docs/source/api/evennia.contrib.grid.extended_room.tests.rst create mode 100644 docs/source/api/evennia.contrib.grid.mapbuilder.mapbuilder.rst create mode 100644 docs/source/api/evennia.contrib.grid.mapbuilder.rst create mode 100644 docs/source/api/evennia.contrib.grid.mapbuilder.tests.rst create mode 100644 docs/source/api/evennia.contrib.grid.rst create mode 100644 docs/source/api/evennia.contrib.grid.simpledoor.rst create mode 100644 docs/source/api/evennia.contrib.grid.simpledoor.simpledoor.rst create mode 100644 docs/source/api/evennia.contrib.grid.simpledoor.tests.rst create mode 100644 docs/source/api/evennia.contrib.grid.slow_exit.rst create mode 100644 docs/source/api/evennia.contrib.grid.slow_exit.slow_exit.rst create mode 100644 docs/source/api/evennia.contrib.grid.slow_exit.tests.rst create mode 100644 docs/source/api/evennia.contrib.grid.wilderness.rst create mode 100644 docs/source/api/evennia.contrib.grid.wilderness.tests.rst create mode 100644 docs/source/api/evennia.contrib.grid.wilderness.wilderness.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.commands.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.example.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.launchcmd.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.prototypes.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.tests.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.utils.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.xymap.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.xymap_legend.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.xyzgrid.rst create mode 100644 docs/source/api/evennia.contrib.grid.xyzgrid.xyzroom.rst create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.buff.rst create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.rst create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.rst create mode 100644 docs/source/api/evennia.contrib.rpg.buffs.tests.rst create mode 100644 docs/source/api/evennia.contrib.rpg.dice.dice.rst create mode 100644 docs/source/api/evennia.contrib.rpg.dice.rst create mode 100644 docs/source/api/evennia.contrib.rpg.dice.tests.rst create mode 100644 docs/source/api/evennia.contrib.rpg.health_bar.health_bar.rst create mode 100644 docs/source/api/evennia.contrib.rpg.health_bar.rst create mode 100644 docs/source/api/evennia.contrib.rpg.health_bar.tests.rst create mode 100644 docs/source/api/evennia.contrib.rpg.rpsystem.rplanguage.rst create mode 100644 docs/source/api/evennia.contrib.rpg.rpsystem.rpsystem.rst create mode 100644 docs/source/api/evennia.contrib.rpg.rpsystem.rst create mode 100644 docs/source/api/evennia.contrib.rpg.rpsystem.tests.rst create mode 100644 docs/source/api/evennia.contrib.rpg.rst create mode 100644 docs/source/api/evennia.contrib.rpg.traits.rst create mode 100644 docs/source/api/evennia.contrib.rpg.traits.tests.rst create mode 100644 docs/source/api/evennia.contrib.rpg.traits.traits.rst create mode 100644 docs/source/api/evennia.contrib.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.batchprocessor.example_batch_code.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.batchprocessor.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.bodyfunctions.bodyfunctions.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.bodyfunctions.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.bodyfunctions.tests.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.build_world.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.characters.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.commands.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.enums.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.equipment.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.npcs.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.objects.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.quests.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.rooms.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.rules.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.shops.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.md create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.evadventure.utils.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.mirror.mirror.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.mirror.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.red_button.red_button.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.red_button.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.talking_npc.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.talking_npc.talking_npc.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.talking_npc.tests.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.tutorial_world.intro_menu.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.tutorial_world.mob.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.tutorial_world.objects.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.tutorial_world.rooms.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.tutorial_world.rst create mode 100644 docs/source/api/evennia.contrib.tutorials.tutorial_world.tests.rst create mode 100644 docs/source/api/evennia.contrib.utils.auditing.outputs.rst create mode 100644 docs/source/api/evennia.contrib.utils.auditing.rst create mode 100644 docs/source/api/evennia.contrib.utils.auditing.server.rst create mode 100644 docs/source/api/evennia.contrib.utils.auditing.tests.rst create mode 100644 docs/source/api/evennia.contrib.utils.fieldfill.fieldfill.rst create mode 100644 docs/source/api/evennia.contrib.utils.fieldfill.rst create mode 100644 docs/source/api/evennia.contrib.utils.random_string_generator.random_string_generator.rst create mode 100644 docs/source/api/evennia.contrib.utils.random_string_generator.rst create mode 100644 docs/source/api/evennia.contrib.utils.random_string_generator.tests.rst create mode 100644 docs/source/api/evennia.contrib.utils.rst create mode 100644 docs/source/api/evennia.contrib.utils.tree_select.rst create mode 100644 docs/source/api/evennia.contrib.utils.tree_select.tests.rst create mode 100644 docs/source/api/evennia.contrib.utils.tree_select.tree_select.rst create mode 100644 docs/source/api/evennia.help.filehelp.rst create mode 100644 docs/source/api/evennia.help.manager.rst create mode 100644 docs/source/api/evennia.help.models.rst create mode 100644 docs/source/api/evennia.help.rst create mode 100644 docs/source/api/evennia.help.utils.rst create mode 100644 docs/source/api/evennia.locks.lockfuncs.rst create mode 100644 docs/source/api/evennia.locks.lockhandler.rst create mode 100644 docs/source/api/evennia.locks.rst create mode 100644 docs/source/api/evennia.objects.manager.rst create mode 100644 docs/source/api/evennia.objects.models.rst create mode 100644 docs/source/api/evennia.objects.objects.rst create mode 100644 docs/source/api/evennia.objects.rst create mode 100644 docs/source/api/evennia.prototypes.menus.rst create mode 100644 docs/source/api/evennia.prototypes.protfuncs.rst create mode 100644 docs/source/api/evennia.prototypes.prototypes.rst create mode 100644 docs/source/api/evennia.prototypes.rst create mode 100644 docs/source/api/evennia.prototypes.spawner.rst create mode 100644 docs/source/api/evennia.rst create mode 100644 docs/source/api/evennia.scripts.manager.rst create mode 100644 docs/source/api/evennia.scripts.models.rst create mode 100644 docs/source/api/evennia.scripts.monitorhandler.rst create mode 100644 docs/source/api/evennia.scripts.rst create mode 100644 docs/source/api/evennia.scripts.scripthandler.rst create mode 100644 docs/source/api/evennia.scripts.scripts.rst create mode 100644 docs/source/api/evennia.scripts.taskhandler.rst create mode 100644 docs/source/api/evennia.scripts.tickerhandler.rst create mode 100644 docs/source/api/evennia.server.amp_client.rst create mode 100644 docs/source/api/evennia.server.connection_wizard.rst create mode 100644 docs/source/api/evennia.server.deprecations.rst create mode 100644 docs/source/api/evennia.server.evennia_launcher.rst create mode 100644 docs/source/api/evennia.server.game_index_client.client.rst create mode 100644 docs/source/api/evennia.server.game_index_client.rst create mode 100644 docs/source/api/evennia.server.game_index_client.service.rst create mode 100644 docs/source/api/evennia.server.initial_setup.rst create mode 100644 docs/source/api/evennia.server.inputfuncs.rst create mode 100644 docs/source/api/evennia.server.manager.rst create mode 100644 docs/source/api/evennia.server.models.rst create mode 100644 docs/source/api/evennia.server.portal.amp.rst create mode 100644 docs/source/api/evennia.server.portal.amp_server.rst create mode 100644 docs/source/api/evennia.server.portal.grapevine.rst create mode 100644 docs/source/api/evennia.server.portal.irc.rst create mode 100644 docs/source/api/evennia.server.portal.mccp.rst create mode 100644 docs/source/api/evennia.server.portal.mssp.rst create mode 100644 docs/source/api/evennia.server.portal.mxp.rst create mode 100644 docs/source/api/evennia.server.portal.naws.rst create mode 100644 docs/source/api/evennia.server.portal.portal.rst create mode 100644 docs/source/api/evennia.server.portal.portalsessionhandler.rst create mode 100644 docs/source/api/evennia.server.portal.rss.rst create mode 100644 docs/source/api/evennia.server.portal.rst create mode 100644 docs/source/api/evennia.server.portal.ssh.rst create mode 100644 docs/source/api/evennia.server.portal.ssl.rst create mode 100644 docs/source/api/evennia.server.portal.suppress_ga.rst create mode 100644 docs/source/api/evennia.server.portal.telnet.rst create mode 100644 docs/source/api/evennia.server.portal.telnet_oob.rst create mode 100644 docs/source/api/evennia.server.portal.telnet_ssl.rst create mode 100644 docs/source/api/evennia.server.portal.tests.rst create mode 100644 docs/source/api/evennia.server.portal.ttype.rst create mode 100644 docs/source/api/evennia.server.portal.webclient.rst create mode 100644 docs/source/api/evennia.server.portal.webclient_ajax.rst create mode 100644 docs/source/api/evennia.server.profiling.dummyrunner.rst create mode 100644 docs/source/api/evennia.server.profiling.dummyrunner_settings.rst create mode 100644 docs/source/api/evennia.server.profiling.memplot.rst create mode 100644 docs/source/api/evennia.server.profiling.rst create mode 100644 docs/source/api/evennia.server.profiling.settings_mixin.rst create mode 100644 docs/source/api/evennia.server.profiling.test_queries.rst create mode 100644 docs/source/api/evennia.server.profiling.tests.rst create mode 100644 docs/source/api/evennia.server.profiling.timetrace.rst create mode 100644 docs/source/api/evennia.server.rst create mode 100644 docs/source/api/evennia.server.server.rst create mode 100644 docs/source/api/evennia.server.serversession.rst create mode 100644 docs/source/api/evennia.server.session.rst create mode 100644 docs/source/api/evennia.server.sessionhandler.rst create mode 100644 docs/source/api/evennia.server.signals.rst create mode 100644 docs/source/api/evennia.server.throttle.rst create mode 100644 docs/source/api/evennia.server.validators.rst create mode 100644 docs/source/api/evennia.server.webserver.rst create mode 100644 docs/source/api/evennia.settings_default.rst create mode 100644 docs/source/api/evennia.typeclasses.attributes.rst create mode 100644 docs/source/api/evennia.typeclasses.managers.rst create mode 100644 docs/source/api/evennia.typeclasses.models.rst create mode 100644 docs/source/api/evennia.typeclasses.rst create mode 100644 docs/source/api/evennia.typeclasses.tags.rst create mode 100644 docs/source/api/evennia.utils.ansi.rst create mode 100644 docs/source/api/evennia.utils.batchprocessors.rst create mode 100644 docs/source/api/evennia.utils.containers.rst create mode 100644 docs/source/api/evennia.utils.create.rst create mode 100644 docs/source/api/evennia.utils.dbserialize.rst create mode 100644 docs/source/api/evennia.utils.eveditor.rst create mode 100644 docs/source/api/evennia.utils.evform.rst create mode 100644 docs/source/api/evennia.utils.evmenu.rst create mode 100644 docs/source/api/evennia.utils.evmore.rst create mode 100644 docs/source/api/evennia.utils.evtable.rst create mode 100644 docs/source/api/evennia.utils.funcparser.rst create mode 100644 docs/source/api/evennia.utils.gametime.rst create mode 100644 docs/source/api/evennia.utils.idmapper.manager.rst create mode 100644 docs/source/api/evennia.utils.idmapper.models.rst create mode 100644 docs/source/api/evennia.utils.idmapper.rst create mode 100644 docs/source/api/evennia.utils.idmapper.tests.rst create mode 100644 docs/source/api/evennia.utils.logger.rst create mode 100644 docs/source/api/evennia.utils.optionclasses.rst create mode 100644 docs/source/api/evennia.utils.optionhandler.rst create mode 100644 docs/source/api/evennia.utils.picklefield.rst create mode 100644 docs/source/api/evennia.utils.rst create mode 100644 docs/source/api/evennia.utils.search.rst create mode 100644 docs/source/api/evennia.utils.test_resources.rst create mode 100644 docs/source/api/evennia.utils.text2html.rst create mode 100644 docs/source/api/evennia.utils.utils.rst create mode 100644 docs/source/api/evennia.utils.validatorfuncs.rst create mode 100644 docs/source/api/evennia.utils.verb_conjugation.conjugate.rst create mode 100644 docs/source/api/evennia.utils.verb_conjugation.pronouns.rst create mode 100644 docs/source/api/evennia.utils.verb_conjugation.rst create mode 100644 docs/source/api/evennia.utils.verb_conjugation.tests.rst create mode 100644 docs/source/api/evennia.web.admin.accounts.rst create mode 100644 docs/source/api/evennia.web.admin.attributes.rst create mode 100644 docs/source/api/evennia.web.admin.comms.rst create mode 100644 docs/source/api/evennia.web.admin.frontpage.rst create mode 100644 docs/source/api/evennia.web.admin.help.rst create mode 100644 docs/source/api/evennia.web.admin.objects.rst create mode 100644 docs/source/api/evennia.web.admin.rst create mode 100644 docs/source/api/evennia.web.admin.scripts.rst create mode 100644 docs/source/api/evennia.web.admin.server.rst create mode 100644 docs/source/api/evennia.web.admin.tags.rst create mode 100644 docs/source/api/evennia.web.admin.urls.rst create mode 100644 docs/source/api/evennia.web.admin.utils.rst create mode 100644 docs/source/api/evennia.web.api.filters.rst create mode 100644 docs/source/api/evennia.web.api.permissions.rst create mode 100644 docs/source/api/evennia.web.api.root.rst create mode 100644 docs/source/api/evennia.web.api.rst create mode 100644 docs/source/api/evennia.web.api.serializers.rst create mode 100644 docs/source/api/evennia.web.api.tests.rst create mode 100644 docs/source/api/evennia.web.api.urls.rst create mode 100644 docs/source/api/evennia.web.api.views.rst create mode 100644 docs/source/api/evennia.web.rst create mode 100644 docs/source/api/evennia.web.templatetags.addclass.rst create mode 100644 docs/source/api/evennia.web.templatetags.rst create mode 100644 docs/source/api/evennia.web.urls.rst create mode 100644 docs/source/api/evennia.web.utils.adminsite.rst create mode 100644 docs/source/api/evennia.web.utils.backends.rst create mode 100644 docs/source/api/evennia.web.utils.general_context.rst create mode 100644 docs/source/api/evennia.web.utils.middleware.rst create mode 100644 docs/source/api/evennia.web.utils.rst create mode 100644 docs/source/api/evennia.web.utils.tests.rst create mode 100644 docs/source/api/evennia.web.webclient.rst create mode 100644 docs/source/api/evennia.web.webclient.urls.rst create mode 100644 docs/source/api/evennia.web.webclient.views.rst create mode 100644 docs/source/api/evennia.web.website.forms.rst create mode 100644 docs/source/api/evennia.web.website.rst create mode 100644 docs/source/api/evennia.web.website.tests.rst create mode 100644 docs/source/api/evennia.web.website.urls.rst create mode 100644 docs/source/api/evennia.web.website.views.accounts.rst create mode 100644 docs/source/api/evennia.web.website.views.channels.rst create mode 100644 docs/source/api/evennia.web.website.views.characters.rst create mode 100644 docs/source/api/evennia.web.website.views.errors.rst create mode 100644 docs/source/api/evennia.web.website.views.help.rst create mode 100644 docs/source/api/evennia.web.website.views.index.rst create mode 100644 docs/source/api/evennia.web.website.views.mixins.rst create mode 100644 docs/source/api/evennia.web.website.views.objects.rst create mode 100644 docs/source/api/evennia.web.website.views.rst create mode 100644 evennia/contrib/tutorials/evadventure/tests/test_characters.py diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Characters.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Characters.md index e69de29bb2..ee7b053338 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Characters.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Characters.md @@ -0,0 +1,354 @@ +# Player Characters + +In the [previous lesson about rules and dice rolling](Beginner-Gutorial-Rules) we made some assumptions +about the "Player Character" entity: + +- It should store Abilities on itself as `character.strength`, `character.constitution` etc. +- It should have a `.heal(amount)` method. + +So we have some guidelines of how it should look! A Character is a database entity with values that +should be able to be changed over time. It makes sense to base it off Evennia's +[DefaultCharacter Typeclass](../../../Components/Typeclasses.md). The Character class is like a 'character sheet' in a tabletop +RPG, it will hold everything relevant to that PC. + +## Inheritance structure + +Player Characters (PCs) are not the only "living" things in our world. We also have _NPCs_ +(like shopkeepers and other friendlies) as well as _monsters_ (mobs) that can attack us. + +In code, there are a few ways we could structure this. If NPCs/monsters were just special cases of PCs, +we could use a class inheritance like this: + +```python +from evennia import DefaultCharacter + +class EvAdventureCharacter(DefaultCharacter): + # stuff + +class EvAdventureNPC(EvAdventureCharacter): + # more stuff + +class EvAdventureMob(EvAdventureNPC): + # more stuff +``` + +All code we put on the `Character` class would now be inherited to `NPC` and `Mob` automatically. + +However, in _Knave_, NPCs and particularly monsters are _not_ using the same rules as PCs - they are +simplified to use a Hit-Die (HD) concept. So while still character-like, NPCs should be separate from +PCs like this: + +```python +from evennia import DefaultCharacter + +class EvAdventureCharacter(DefaultCharacter): + # stuff + +class EvAdventureNPC(DefaultCharacter): + # separate stuff + +class EvAdventureMob(EvadventureNPC): + # more separate stuff +``` + +Nevertheless, there are some things that _should_ be common for all 'living things': + +- All can take damage. +- All can die. +- All can heal +- All can hold and lose coins +- All can loot their fallen foes. +- All can get looted when defeated. + +We don't want to code this separately for every class but we no longer have a common parent +class to put it on. So instead we'll use the concept of a _mixin_ class: + +```python +from evennia import DefaultCharacter + +class LivingMixin: + # stuff common for all living things + +class EvAdventureCharacter(LivingMixin, DefaultCharacter): + # stuff + +class EvAdventureNPC(LivingMixin, DefaultCharacter): + # stuff + +class EvAdventureMob(LivingMixin, EvadventureNPC): + # more stuff +``` + +```{sidebar} +In [evennia/contrib/tutorials/evadventure/characters.py](evennia.contrib.tutorials.evadventure.characters) +is an example of a character class structure. +``` +Above, the `LivingMixin` class cannot work on its own - it just 'patches' the other classes with some +extra functionality all living things should be able to do. This is an example of +_multiple inheritance_. It's useful to know about, but one should not over-do multiple inheritance +since it can also get confusing to follow the code. + +## Living mixin class + +> Create a new module `mygame/evadventure/characters.py` + +Let's get some useful common methods all living things should have in our game. + +```python +# in mygame/evadventure/characters.py + +from .rules import dice + +class LivingMixin: + + # makes it easy for mobs to know to attack PCs + is_pc = False + + def heal(self, hp): + """ + Heal hp amount of health, not allowing to exceed our max hp + + """ + damage = self.hp_max - self.hp + healed = min(damage, hp) + self.hp += healed + + self.msg("You heal for {healed} HP.") + + def at_pay(self, amount): + """When paying coins, make sure to never detract more than we have""" + amount = min(amount, self.coins) + self.coins -= amount + return amount + + def at_damage(self, damage, attacker=None): + """Called when attacked and taking damage.""" + self.hp -= damage + + def at_defeat(self): + """Called when defeated. By default this means death.""" + self.at_death() + + def at_death(self): + """Called when this thing dies.""" + # this will mean different things for different living things + pass + + def at_do_loot(self, looted): + """Called when looting another entity""" + looted.at_looted(self) + + def at_looted(self, looter): + """Called when looted by another entity""" + + # default to stealing some coins + max_steal = dice.roll("1d10") + stolen = self.at_pay(max_steal) + looter.coins += stolen + +``` +Most of these are empty since they will behave differently for characters and npcs. But having them +in the mixin means we can expect these methods to be available for all living things. + + +## Character class + +We will now start making the basic Character class, based on what we need from _Knave_. + +```python +# in mygame/evadventure/characters.py + +from evennia import DefaultCharacter, AttributeProperty +from .rules import dice + +class LivingMixin: + # ... + + +class EvAdventureCharacter(LivingMixin, DefaultCharacter): + """ + A character to use for EvAdventure. + """ + is_pc = True + + strength = AttributeProperty(1) + dexterity = AttributeProperty(1) + constitution = AttributeProperty(1) + intelligence = AttributeProperty(1) + wisdom = AttributeProperty(1) + charisma = AttributeProperty(1) + + hp = AttributeProperty(8) + hp_max = AttributeProperty(8) + + level = AttributeProperty(1) + xp = AttributeProperty(0) + coins = AttributeProperty(0) + + def at_defeat(self): + """Characters roll on the death table""" + if self.location.allow_death: + # this allow rooms to have non-lethal battles + dice.roll_death(self) + else: + self.location.msg_contents( + "$You() $conj(collapse) in a heap, alive but beaten.", + from_obj=self) + self.heal(self.hp_max) + + def at_death(self): + """We rolled 'dead' on the death table.""" + self.location.msg_contents( + "$You() collapse in a heap, embraced by death.", + from_obj=self) + # TODO - go back into chargen to make a new character! +``` + +We make an assumption about our rooms here - that they have a property `.allow_death`. We need +to make a note to actually add such a property to rooms later! + +In our `Character` class we implement all attributes we want to simulate from the _Knave_ ruleset. +The `AttributeProperty` is one way to add an Attribute in a field-like way; these will be accessible +on every character in several ways: + +- As `character.strength` +- As `character.db.strength` +- As `character.attributes.get("strength")` + +See [Attributes](../../../Components/Attributes.md) for seeing how Attributes work. + +Unlike in base _Knave_, we store `coins` as a separate Attribute rather than as items in the inventory, +this makes it easier to handle barter and trading later. + +We implement the Player Character versions of `at_defeat` and `at_death`. We also make use of `.heal()` +from the `LivingMixin` class. + +### Funcparser inlines + +This piece of code is worth some more explanation: + +```python +self.location.msg_contents( + "$You() $conj(collapse) in a heap, alive but beaten.", + from_obj=self) +``` + +Remember that `self` is the Character instance here. So `self.location.msg_contents` means "send a +message to everything inside my current location". In other words, send a message to everyone +in the same place as the character. + +The `$You() $conj(collapse)` are [Funcparser inlines](Funcparser). These are functions that execute +in the string. The resulting string may look different for different audiences. The `$You()` inline +function will use `from_obj` to figure out who 'you' are and either show your name or 'You'. +The `$conj()` (verb conjugator) will tweak the (English) verb to match. + +- You will see: `"You collapse in a heap, alive but beaten."` +- Others in the room will see: `"Thomas collapses in a heap, alive but beaten."` + +Note how `$conj()` chose `collapse/collapses` to make the sentences grammatically correct. + +### Backtracking + +We make our first use of the `rules.dice` roller to roll on the death table! As you may recall, in the +previous lesson, we didn't know just what to do when rolling 'dead' on this table. Now we know - we +should be calling `at_death` on the character. So let's add that where we had TODOs before: + +```python +# mygame/evadventure/rules.py + +class EvAdventureRollEngine: + + # ... + + def roll_death(self, character): + ability_name = self.roll_random_table("1d8", death_table) + + if ability_name == "dead": + # kill the character! + character.at_death() # <------ TODO no more + else: + # ... + + if current_ability < -10: + # kill the character! + character.at_death() # <------- TODO no more + else: + # ... +``` + + +## Unit Testing + +> Create a new module `mygame/evadventure/tests/test_characters.py` + +For testing, we just need to create a new EvAdventure character and check +that calling the methods on it doesn't error out. + +```python +# mygame/evadventure/tests/test_characters.py + +from evennia.utils import create +from evennia.utils.test_resources import BaseEvenniaTest + +from ..characters import EvAdventureCharacter + +class TestCharacters(BaseEvenniaTest): + def setUp(self): + super().setUp() + self.character = create.create_object(EvAdventureCharacter, key="testchar") + + def test_heal(self): + self.character.hp = 0 + self.character.hp_max = 8 + + self.character.heal(1) + self.assertEqual(self.character.hp, 1) + # make sure we can't heal more than max + self.character.heal(100) + self.assertEqual(self.character.hp, 8) + + def test_at_pay(self): + self.character.coins = 100 + + result = self.character.at_pay(60) + self.assertEqual(result, 60) + self.assertEqual(self.character.coins, 40) + + # can't get more coins than we have + result = self.character.at_pay(100) + self.assertEqual(result, 40) + self.assertEqual(self.character.coins, 0) + + # tests for other methods ... + +``` +If you followed the previous lessons, these tests should look familiar. Consider adding +tests for other methods as practice. Refer to previous lessons for details. + +For running the tests you do: + + evennia test --settings settings.py .evadventure.tests.test_character + +## Summary + + +With the `EvAdventureCharacter` class in place, we have a better understanding of how our PCs will look +like under _Knave_. + +For now, we only have bits and pieces and haven't been testing this code in-game. But if you want +you can swap yourself into `EvAdventureCharacter` right now. Log into your game and run +the command + + type self = evadventure.characters.EvAdventureCharacter + +If all went well, `ex self` will now show your typeclass as being `EvAdventureCharacter`. +Check out your strength with + + py self.strength = 3 + +```{important} +When doing `ex self` you will _not_ see all your Abilities listed yet. That's because +Attributes added with `AttributeProperty` are not available until they have been accessed at +least once. So once you set (or look at) `.strength` above, `strength` will show in `examine` from +then on. +``` diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md new file mode 100644 index 0000000000..1ca872da88 --- /dev/null +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md @@ -0,0 +1,120 @@ +# Handling Equipment + +In _Knave_, you have a certain number of inventory "slots". The amount of slots is given by `CON + 10`. +All items (except coins) have a `size`, indicating how many slots it uses. You can't carry more items +than you have slot-space for. Also items wielded or worn count towards the slots. + +We still need to track what the character is using however: What weapon they have readied affects the damage +they can do. The shield, helmet and armor they use affects their defense. + +We have already set up the possible 'wear/wield locations' when we defined our Objects +[in the previous lesson](Beginner-Tutorial-Objects). This is what we have in `enums.py`: + +```python +# mygame/evadventure/enums.py + +# ... + +class WieldLocation(Enum): + + BACKPACK = "backpack" + WEAPON_HAND = "weapon_hand" + SHIELD_HAND = "shield_hand" + TWO_HANDS = "two_handed_weapons" + BODY = "body" # armor + HEAD = "head" # helmets +``` + +Basically, all the weapon/armor locations are exclusive - you can only have one item in each (or none). +The BACKPACK is special - it contains any number of items (up to the maximum slot usage). + +## EquipmentHandler + +> Create a new module `mygame/evadventure/equipment.py`. + +In default Evennia, everything you pick up will end up "inside" your character object (that is, have +you as its `.location`). This is called your _inventory_ and has no limit. We will keep 'moving items into us' +when we pick them up, but we will add more functionality using an _Equipment handler_. + +```{sidebar} +If you want to understand more about behind how Evennia uses handlers, there is a +[dedicated tutorial](Tutorial-Persistent-Handler) talking about the principle. +``` + +A handler is (for our purposes) an object that sits "on" another entity, containing functionality +for doing one specific thing (managing equipment, in our case). + +This is the start of our handler: + +```python +# in mygame/evadventure/equipment.py + +from .enums import WieldLocation + +class EquipmentHandler: + save_attribute = "inventory_slots" + + def __init__(self, obj): + # here obj is the character we store the handler on + self.obj = obj + self._load() + + def _load(self): + """Load our data from an Attribute on `self.obj`""" + self.slots = self.obj.attributes.get( + self.save_attribute, + category="inventory", + default={ + WieldLocation.WEAPON_HAND: None, + WieldLocation.SHIELD_HAND: None, + WieldLocation.TWO_HANDS: None, + WieldLocation.BODY: None, + WieldLocation.HEAD: None, + WieldLocation.BACKPACK: [] + } + ) + + def _save(self): + """Save our data back to the same Attribute""" + self.obj.attributes.add(self.save_attribute, self.slots, category="inventory") +``` + +This is a compact and functioning little handler. Before analyzing how it works, this is how +we will add it to the Character: + +```python +# mygame/evadventure/characters.py + +# ... + +from evennia.utils.utils import lazy_property +from .equipment import EquipmentHandler + +# ... + +class EvAdventureCharacter(LivingMixin, DefaultCharacter): + + # ... + + @lazy_property + def equipment(self): + return EquipmentHandler(self) +``` + +After reloading the server, the equipment-handler will now be accessible on the character as + + character.equipment + +The `@lazy_property` works such that it will not load the handler until it is first accessed. When that +happens, we start up the handler and feed it `self` (the Character itself). This is what enters `__init__` +as `.obj` in the `EquipmentHandler` code above. + +So we now have a handler on the character, and the handler has a back-reference to the character it sits +on. + +Since the handler itself is just a regular Python object, we need to use the `Character` to store +our data - our _Knave_ slots. We must save them to the database, because we want the server to remember +them even after reloading. + +Using `self.obj.attributes.add()` and `.get()` we save the data to the Character in a specially named +[Attribute](Attributes). Since we use a `category`, we are unlikely to collide with other Attributes. \ No newline at end of file diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md index e69de29bb2..acc153f36d 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Objects.md @@ -0,0 +1,334 @@ +# In-game Objects and items + +In the previous lesson we established what a 'Character' is in our game. Before we continue +we also need to have a notion what an 'item' or 'object' is. + +Looking at _Knave_'s item lists, we can get some ideas of what we need to track: + +- `size` - this is how many 'slots' the item uses in the character's inventory. +- `value` - a base value if we want to sell or buy the item. +- `inventory_use_slot` - some items can be worn or wielded. For example, a helmet needs to be +worn on the head and a shield in the shield hand. Some items can't be used this way at all, but +only belong in the backpack. +- `obj_type` - Which 'type' of item this is. + + +## New Enums + +We added a few enumberations for Abilities back in the [Utilities tutorial](./Beginner-Tutorial-Utilities.md). +Before we continue, let's expand with enums for use-slots and object types. + +```python +# mygame/evadventure/enums.py + +# ... + +class WieldLocation(Enum): + + BACKPACK = "backpack" + WEAPON_HAND = "weapon_hand" + SHIELD_HAND = "shield_hand" + TWO_HANDS = "two_handed_weapons" + BODY = "body" # armor + HEAD = "head" # helmets + +class ObjType(Enum): + + WEAPON = "weapon" + ARMOR = "armor" + SHIELD = "shield" + HELMET = "helmet" + CONSUMABLE = "consumable" + GEAR = "gear" + MAGIC = "magic" + QUEST = "quest" + TREASURE = "treasure" +``` + +Once we have these enums, we will use them for referencing things. + +## The base object + +> Create a new module `mygame/evadventure/objects.py` + +```{sidebar} +[evennia/contrib/tutorials/evadventure/objects.py](evennia.contrib.tutorials.evadventure.objects) has +a full set of objects implemented. +``` +

    + +We will make a base `EvAdventureObject` class off Evennia's standard `DefaultObject`. We will then add +child classes to represent the relevant types: + +```python +# mygame/evadventure/objects.py + +from evennia import AttributeProperty, DefaultObject +from evennia.utils.utils import make_iter +from .utils import get_obj_stats +from .enums import WieldLocation, ObjType + + +class EvAdventureObject(DefaultObject): + """ + Base for all evadventure objects. + + """ + inventory_use_slot = WieldLocation.BACKPACK + size = AttributeProperty(1, autocreate=False) + value = AttributeProperty(0, autocreate=False) + + # this can be either a single type or a list of types (for objects able to be + # act as multiple). This is used to tag this object during creation. + obj_type = ObjType.GEAR + + def at_object_creation(self): + """Called when this object is first created. We convert the .obj_type + property to a database tag.""" + + for obj_type in make_iter(self.obj_type): + self.tags.add(self.obj_type.value, category="obj_type") + + def get_help(self): + """Get any help text for this item""" + return "No help for this item" +``` + +### Using Attributes or not + +In theory, `size` and `value` does not change and _could_ also be just set as a regular Python +property on the class: + +```python +class EvAdventureObject(DefaultObject): + inventory_use_slot = WieldLocation.BACKPACK + size = 1 + value = 0 +``` + +The problem with this is that if we want to make a new object of `size 3` and `value 20`, we have to +make a new class for it. We can't change it on the fly because the change would only be in memory and +be lost on next server reload. + +Because we use `AttributeProperties`, we can set `size` and `value` to whatever we like when we +create the object (or later), and the Attributes will remember our changes to that object indefinitely. + +To make this a little more efficient, we use `autocreate=False`. Normally when you create a +new object with defined `AttributeProperties`, a matching `Attribute` is immediately created at +the same time. So normally, the object would be created along with two Attributes `size` and `value`. +With `autocreate=False`, no Attribute will be created _unless the default is changed_. That is, as +long as your object has `size=1` no database `Attribute` will be created at all. This saves time and +resources when creating large number of objects. + +The drawback is that since no Attribute is created you can't refer to it +with `obj.db.size` or `obj.attributes.get("size")` _unless you change its default_. You also can't query +the database for all objects with `size=1`, since most objects would not yet have an in-database +`size` Attribute to search for. + +In our case, we'll only refer to these properties as `obj.size` etc, and have no need to find +all objects of a particular size. So we should be safe. + +### Creating tags in `at_object_creation` + +The `at_object_creation` is a method Evennia calls on every child of `DefaultObject` whenever it is +first created. + +We do a tricky thing here, converting our `.obj_type` to one or more [Tags](../../../Components/Tags.md). Tagging the +object like this means you can later efficiently find all objects of a given type (or combination of +types) with Evennia's search functions: + +```python + from .enums import ObjType + from evennia.utils import search + + # get all shields in the game + all_shields = search.search_object_by_tag(ObjType.SHIELD.value, category="obj_type") +``` + +We allow `.obj_type` to be given as a single value or a list of values. We use `make_iter` from the +evennia utility library to make sure we don't balk at either. This means you could have a Shield that +is also Magical, for example. + +## Other object types + +Some of the other object types are very simple so far. + +```python +# mygame/evadventure/objects.py + +from evennia import AttributeProperty, DefaultObject +from .enums import ObjType + +class EvAdventureObject(DefaultObject): + # ... + + +class EvAdventureQuestObject(EvAdventureObject): + """Quest objects should usually not be possible to sell or trade.""" + obj_type = ObjType.QUEST + +class EvAdventureTreasure(EvAdventureObject): + """Treasure is usually just for selling for coin""" + obj_type = ObjType.TREASURE + value = AttributeProperty(100, autocreate=False) + +``` + +## Consumables + +A 'consumable' is an item that has a certain number of 'uses'. Once fully consumed, it can't be used +anymore. An example would be a health potion. + + +```python +# mygame/evadventure/objects.py + +# ... + +class EvAdventureConsumable(EvAdventureObject): + """An item that can be used up""" + + obj_type = ObjType.CONSUMABLE + value = AttributeProperty(0.25, autocreate=False) + uses = AttributeProperty(1, autocreate=False) + + def at_pre_use(self, user, *args, **kwargs): + """Called before using. If returning False, abort use.""" + return uses > 0 + + def at_use(self, user, *args, **kwargs): + """Called when using the item""" + pass + + def at_post_use(self. user, *args, **kwargs): + """Called after using the item""" + # detract a usage, deleting the item if used up. + self.uses -= 1 + if self.uses <= 0: + user.msg(f"{self.key} was used up.") + self.delete() +``` + +What exactly each consumable does will vary - we will need to implement children of this class +later, overriding `at_use` with different effects. + +## Weapons + +All weapons need properties that describe how efficient they are in battle. + +```python +# mygame/evadventure/objects.py + +from .enums import WieldLocation, ObjType, Ability + +# ... + +class EvAdventureWeapon(EvAdventureObject): + """Base class for all weapons""" + + obj_type = ObjType.WEAPON + inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND, autocreate=False) + quality = AttributeProperty(3, autocreate=False) + + attack_type = AttibuteProperty(Ability.STR, autocreate=False) + defend_type = AttibuteProperty(Ability.ARMOR, autocreate=False) + + damage_roll = AttibuteProperty("1d6", autocreate=False) +``` + +The `quality` is something we need to track in _Knave_. When getting critical failures on attacks, +a weapon's quality will go down. When it reaches 0, it will break. + +The attack/defend type tracks how we resolve attacks with the weapon, like `roll + STR vs ARMOR + 10`. + +## Magic + +In _Knave_, anyone can use magic if they are wielding a rune stone (our name for spell books) in both +hands. You can only use a rune stone once per rest. So a rune stone is an example of a 'magical weapon' +that is also a 'consumable' of sorts. + + +```python +# mygame/evadventure/objects.py + +# ... +class EvAdventureConsumable(EvAdventureObject): + # ... + +class EvAdventureWeapon(EvAdventureObject): + # ... + +class EvAdventureRuneStone(EvAdventureWeapon, EvAdventureConsumable): + """Base for all magical rune stones""" + + obj_type = (ObjType.WEAPON, ObjType.MAGIC) + inventory_use_slot = WieldLocation.TWO_HANDS # always two hands for magic + quality = AttributeProperty(3, autocreate=False) + + attack_type = AttibuteProperty(Ability.INT, autocreate=False) + defend_type = AttibuteProperty(Ability.DEX, autocreate=False) + + damage_roll = AttibuteProperty("1d8", autocreate=False) + + def at_post_use(self, user, *args, **kwargs): + """Called after usage/spell was cast""" + self.uses -= 1 + # we don't delete the rune stone here, but + # it must be reset on next rest. + + def refresh(self): + """Refresh the rune stone (normally after rest)""" + self.uses = 1 +``` + +We make the rune stone a mix of weapon and consumable. Note that we don't have to add `.uses` +again, it's inherited from `EvAdventureConsumable` parent. The `at_pre_use` and `at_use` methods +are also inherited; we only override `at_post_use` since we don't want the runestone to be deleted +when it runs out of uses. + +We add a little convenience method `refresh` - we should call this when the character rests, to +make the runestone active again. + +Exactly what rune stones _do_ will be implemented in the `at_use` methods of subclasses to this +base class. Since magic in _Knave_ tends to be pretty custom, it makes sense that it will lead to a lot +of custom code. + + +## Armor + +Armor, shields and helmets increase the `ARMOR` stat of the character. In _Knave_, what is stored is the +defense value of the armor (values 11-20). We will instead store the 'armor bonus' (1-10). As we know, +defending is always `bonus + 10`, so the result will be the same - this means +we can use `Ability.ARMOR` as any other defensive ability without worrying about a special case. + +`` +```python +# mygame/evadventure/objects.py + +# ... + +class EvAdventureAmor(EvAdventureObject): + obj_type = ObjType.ARMOR + inventory_use_slot = WieldLocation.BODY + + armor = AttributeProperty(1, autocreate=False) + quality = AttributeProperty(3, autocreate=False) + + +class EvAdventureShield(EvAdventureArmor): + obj_type = ObjType.SHIELD + inventory_use_slot = WieldLocation.SHIELD_HAND + + +class EvAdventureHelmet(EvAdventureArmor): + obj_type = ObjType.HELMET + inventory_use_slot = WieldLocation.HEAD +``` + + + + + + + + diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md index c3e96d5c99..f3746411c5 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Part3-Intro.md @@ -25,9 +25,11 @@ This is a big part. You'll be seeing a lot of code and there are plenty of lesso Take your time! If you followed the previous parts of this tutorial you will have some notions about Python and where to -find and make use of things in Evennia. We also have a good idea of the type of game we want. +find and make use of things in Evennia. We also have a good idea of the type of game we will +create. + Even if this is not the game-style you are interested in, following along will give you a lot -of experience with using Evennia. This be _really_ helpful for doing your own thing later. +of experience using Evennia and be really helpful for doing your own thing later! Fully coded examples of all code we make in this part can be found in the [evennia/contrib/tutorials/evadventure](evennia.contrib.tutorials.evadventure) package. @@ -39,27 +41,29 @@ Fully coded examples of all code we make in this part can be found in the Beginner-Tutorial-Utilities Beginner-Tutorial-Rules -Beginner-Tutorial-Chargen Beginner-Tutorial-Characters -Beginner-Tuturial-Objects -Beginner-Tutorial-Rooms -Beginner-Tutorial-NPCs -Beginner-Tutorial-Turnbased-Combat -Beginner-Tutorial-Quests -Beginner-Tutorial-Shops -Beginner-Tutorial-Dungeon -Beginner-Tutorial-Commands - - -## Table of Contents - -```{toctree} - -Beginner-Tutorial-Utilities -Beginner-Tutorial-Rules +Beginner-Tutorial-Objects +Beginner-Tutorial-Equipment +Beginner-Tutorial-Chargen +Beginner-Tutorial-Rooms +Beginner-Tutorial-NPCs +Beginner-Tutorial-Turnbased-Combat +Beginner-Tutorial-Quests +Beginner-Tutorial-Shops +Beginner-Tutorial-Dungeon +Beginner-Tutorial-Commands +``` + +## Table of Contents + +```{toctree} + +Beginner-Tutorial-Utilities +Beginner-Tutorial-Rules +Beginner-Tutorial-Characters +Beginner-Tutorial-Objects +Beginner-Tutorial-Equipment Beginner-Tutorial-Chargen -Beginner-Tutorial-Characters -Beginner-Tuturial-Objects Beginner-Tutorial-Rooms Beginner-Tutorial-NPCs Beginner-Tutorial-Turnbased-Combat diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md index 6f8c1a3b5d..7ebbbc7539 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md @@ -361,30 +361,21 @@ class EvAdventureRollEngine: # ... - def heal(character, amount): - """ - Heal a certain amount of health, but not more - than character's `hp_max`. - - """ - - hp = character.hp - hp_max = character.hp_max - - damage = hp_max - hp - character.hp += min(damage, amount) - def heal_from_rest(self, character): """ A night's rest retains 1d8 + CON HP """ con_bonus = getattr(character, Ability.CON.value, 1) - self.heal(character, self.roll("1d8") + con_bonus) + character.heal(self.roll("1d8") + con_bonus) ``` -By splitting this into two methods, we get a free convenient `heal` method we can use for healing -also outside of sleeping. +We make another assumption here - that `character.heal()` is a thing. We tell this function how +much the character should heal, and it will do so, making sure to not heal more than its max +number of HPs + +> Knowing what is available on the character and what rule rolls we need is a bit of a chicken-and-egg +> problem. We will make sure to implement the matching _Character_ class next lesson. ### Rolling on a table @@ -568,11 +559,71 @@ We don't yet know what 'killing the character' technically means, so we mark thi return to it in a later lesson. We just know that we need to do _something_ here to kill off the character! +## Testing + +> Make a new module `mygame/evadventure/tests/test_rules.py` + +Testing the `rules` module will also showcase some very useful tools when testing. + +```python +# mygame/evadventure/tests/test_rules.py + +from unittest.mock import patch +from evennia.utils.test_resources import BaseEvenniaTest +from .. import rules + +class TestEvAdventureRuleEngine(BaseEvenniaTest): + + def setUp(self): + """Called before every test method""" + super().setUp() + self.roll_engine = rules.EvAdventureRollEngine() + + @patch("evadventure.rules.randint") + def test_roll(self, mock_randint): + mock_randint.return_value = 4 + self.assertEqual(self.roll_engine.roll("1d6", 4) + self.assertEqual(self.roll_engine.roll("2d6", 2 * 4) + + # test of the other rule methods below ... +``` + +As before, run the specific test with + + evennia test --settings settings.py .evadventure.tests.test_rules + +### Mocking and patching + +```{sidebar} +In [evennia/contrib/tutorials/evadventure/tests/test_rules.py](evennia.contrib.tutorials.evadventure.tests.test_rules) +has a complete example of rule testing. +``` +The `setUp` method is a special method of the testing class. It will be run before every +test method. We use `super().setUp()` to make sure the parent class' version of this method +always fire. Then we create a fresh `EvAdventureRollEngine` we can test with. + +In our test, we import `patch` from the `unittest.mock` library. This is a very useful tool for testing. +Normally the `randint` function we imported in `rules` will return a random value. That's very hard to +test for, since the value will be different every test. + +With `@patch` (this is called a _decorator_), we temporarily replace `rules.randint` with a 'mock' - a +dummy entity. This mock is passed into the testing method. We then take this `mock_randint` and set +`.return_value = 4` on it. + +Adding `return_value` to the mock means that every time this mock is called, it will return 4. For the +duration of the test we can now check with `self.assertEqual` that our `roll` method always returns a +result as-if the random result was 4. + +There are [many resources for understanding mock](https://realpython.com/python-mock-library/), refer to +them for further help. + +> The `EvAdventureRollEngine` have many methods to test. We leave this as an extra exercise! + ## Summary This concludes all the core rule mechanics of _Knave_ - the rules used during play. We noticed here that we are going to soon need to establish how our _Character_ actually stores data. So we will -address that next, before we get to the character generation itself. +address that next. diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md index 2a99811c82..cbe83da468 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Utilities.md @@ -128,42 +128,9 @@ class Ability(Enum): ALLEGIANCE_FRIENDLY = "friendly" -class WieldLocation(Enum): - """ - Wield (or wear) locations. - - """ - - # wield/wear location - BACKPACK = "backpack" - WEAPON_HAND = "weapon_hand" - SHIELD_HAND = "shield_hand" - TWO_HANDS = "two_handed_weapons" - BODY = "body" # armor - HEAD = "head" # helmets - - -class ObjType(Enum): - """ - Object types. - - """ - - WEAPON = "weapon" - ARMOR = "armor" - SHIELD = "shield" - HELMET = "helmet" - CONSUMABLE = "consumable" - GEAR = "gear" - MAGIC = "magic" - QUEST = "quest" - TREASURE = "treasure" ``` -Here the `Ability` class holds basic properties of a character sheet, while `WieldLocation` tracks -equipment and where a character would wield and wear things - since _Knave_ has these, it makes sense -to track it. Finally we have a set of different `ObjType`s, for differentiate game items. These are -extracted by reading the _Knave_ object lists and figuring out how they should be categorized. +Here the `Ability` class holds basic properties of a character sheet. ## Utility module diff --git a/docs/source/Persistent-Handler.md b/docs/source/Howtos/Tutorial-Persistent-Handler.md similarity index 96% rename from docs/source/Persistent-Handler.md rename to docs/source/Howtos/Tutorial-Persistent-Handler.md index e95deabad0..cf9bd3cc6f 100644 --- a/docs/source/Persistent-Handler.md +++ b/docs/source/Howtos/Tutorial-Persistent-Handler.md @@ -1,10 +1,11 @@ +# Making a Persistent object Handler + A _handler_ is a convenient way to group functionality on an object. This allows you to logically group all actions related to that thing in one place. This tutorial expemplifies how to make your own handlers and make sure data you store in them survives a reload. For example, when you do `obj.attributes.get("key")` or `obj.tags.add('tagname')` you are evoking handlers stored as `.attributes` and `tags` on the `obj`. On these handlers are methods (`get()` and `add()` in this example). ## Base Handler example - Here is a base way to set up an on-object handler: ```python @@ -110,7 +111,7 @@ class QuestHandler: ``` -The handler is just a normal Python class and has no database-storage on its own. But it has a link to `.obj`, which is assumed to be a full typeclased entity, on which we can create persistent [Attributes](Components/Attributes.md) to store things however we like! +The handler is just a normal Python class and has no database-storage on its own. But it has a link to `.obj`, which is assumed to be a full typeclased entity, on which we can create persistent [Attributes](../Components/Attributes.md) to store things however we like! We make two helper methods `_load` and `_save` that handles local fetches and saves `storage` to an Attribute on the object. To avoid saving more than necessary, we have a property `do_save`. This we will set in `Quest` below. @@ -160,7 +161,7 @@ class Quest: The `Quest.__init__` now takes `obj` as argument, to match what we pass to it in `QuestHandler.add`. We want to monitor the changing of `current_step`, so we make it into a `property`. When we edit that value, we set the `do_save` flag on the handler, which means it will save the status to database once it has checked progress on all its quests. -The `__serialize__dbobjs__` and `__deserialize_dbobjs__` methods are needed because `Attributes` can't store 'hidden' database objects (the `Quest.obj` property. The methods help Evennia serialize/deserialize `Quest` propertly when the handler saves it. For more information, see [Storing Single objects](Components/Attributes.md#storing-single-objects) in the Attributes documentation. +The `__serialize__dbobjs__` and `__deserialize_dbobjs__` methods are needed because `Attributes` can't store 'hidden' database objects (the `Quest.obj` property. The methods help Evennia serialize/deserialize `Quest` propertly when the handler saves it. For more information, see [Storing Single objects](../Components/Attributes.md#storing-single-objects) in the Attributes documentation. ### Tying it all together diff --git a/docs/source/api/evennia-api.rst b/docs/source/api/evennia-api.rst new file mode 100644 index 0000000000..27caffe4e4 --- /dev/null +++ b/docs/source/api/evennia-api.rst @@ -0,0 +1,7 @@ +evennia +======= + +.. toctree:: + :maxdepth: 6 + + evennia diff --git a/docs/source/api/evennia.accounts.accounts.rst b/docs/source/api/evennia.accounts.accounts.rst new file mode 100644 index 0000000000..9be2b22d8d --- /dev/null +++ b/docs/source/api/evennia.accounts.accounts.rst @@ -0,0 +1,7 @@ +evennia.accounts.accounts module +================================ + +.. automodule:: evennia.accounts.accounts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.accounts.bots.rst b/docs/source/api/evennia.accounts.bots.rst new file mode 100644 index 0000000000..f6253d9855 --- /dev/null +++ b/docs/source/api/evennia.accounts.bots.rst @@ -0,0 +1,7 @@ +evennia.accounts.bots module +============================ + +.. automodule:: evennia.accounts.bots + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.accounts.manager.rst b/docs/source/api/evennia.accounts.manager.rst new file mode 100644 index 0000000000..4b69aae7ed --- /dev/null +++ b/docs/source/api/evennia.accounts.manager.rst @@ -0,0 +1,7 @@ +evennia.accounts.manager module +=============================== + +.. automodule:: evennia.accounts.manager + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.accounts.models.rst b/docs/source/api/evennia.accounts.models.rst new file mode 100644 index 0000000000..5b4ad56484 --- /dev/null +++ b/docs/source/api/evennia.accounts.models.rst @@ -0,0 +1,7 @@ +evennia.accounts.models module +============================== + +.. automodule:: evennia.accounts.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.accounts.rst b/docs/source/api/evennia.accounts.rst new file mode 100644 index 0000000000..1c51f7e86a --- /dev/null +++ b/docs/source/api/evennia.accounts.rst @@ -0,0 +1,17 @@ +evennia.accounts package +======================== + +.. automodule:: evennia.accounts + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.accounts.accounts + evennia.accounts.bots + evennia.accounts.manager + evennia.accounts.models diff --git a/docs/source/api/evennia.commands.cmdhandler.rst b/docs/source/api/evennia.commands.cmdhandler.rst new file mode 100644 index 0000000000..d029279afe --- /dev/null +++ b/docs/source/api/evennia.commands.cmdhandler.rst @@ -0,0 +1,7 @@ +evennia.commands.cmdhandler module +================================== + +.. automodule:: evennia.commands.cmdhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.cmdparser.rst b/docs/source/api/evennia.commands.cmdparser.rst new file mode 100644 index 0000000000..28f65c11d6 --- /dev/null +++ b/docs/source/api/evennia.commands.cmdparser.rst @@ -0,0 +1,7 @@ +evennia.commands.cmdparser module +================================= + +.. automodule:: evennia.commands.cmdparser + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.cmdset.rst b/docs/source/api/evennia.commands.cmdset.rst new file mode 100644 index 0000000000..03a0b4ee7e --- /dev/null +++ b/docs/source/api/evennia.commands.cmdset.rst @@ -0,0 +1,7 @@ +evennia.commands.cmdset module +============================== + +.. automodule:: evennia.commands.cmdset + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.cmdsethandler.rst b/docs/source/api/evennia.commands.cmdsethandler.rst new file mode 100644 index 0000000000..22e0c25c47 --- /dev/null +++ b/docs/source/api/evennia.commands.cmdsethandler.rst @@ -0,0 +1,7 @@ +evennia.commands.cmdsethandler module +===================================== + +.. automodule:: evennia.commands.cmdsethandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.command.rst b/docs/source/api/evennia.commands.command.rst new file mode 100644 index 0000000000..2d792c1bef --- /dev/null +++ b/docs/source/api/evennia.commands.command.rst @@ -0,0 +1,7 @@ +evennia.commands.command module +=============================== + +.. automodule:: evennia.commands.command + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.account.rst b/docs/source/api/evennia.commands.default.account.rst new file mode 100644 index 0000000000..6a85919da2 --- /dev/null +++ b/docs/source/api/evennia.commands.default.account.rst @@ -0,0 +1,7 @@ +evennia.commands.default.account module +======================================= + +.. automodule:: evennia.commands.default.account + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.admin.rst b/docs/source/api/evennia.commands.default.admin.rst new file mode 100644 index 0000000000..5c6bebec11 --- /dev/null +++ b/docs/source/api/evennia.commands.default.admin.rst @@ -0,0 +1,7 @@ +evennia.commands.default.admin module +===================================== + +.. automodule:: evennia.commands.default.admin + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.batchprocess.rst b/docs/source/api/evennia.commands.default.batchprocess.rst new file mode 100644 index 0000000000..7b8e819974 --- /dev/null +++ b/docs/source/api/evennia.commands.default.batchprocess.rst @@ -0,0 +1,7 @@ +evennia.commands.default.batchprocess module +============================================ + +.. automodule:: evennia.commands.default.batchprocess + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.building.rst b/docs/source/api/evennia.commands.default.building.rst new file mode 100644 index 0000000000..2f5f43cabb --- /dev/null +++ b/docs/source/api/evennia.commands.default.building.rst @@ -0,0 +1,7 @@ +evennia.commands.default.building module +======================================== + +.. automodule:: evennia.commands.default.building + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.cmdset_account.rst b/docs/source/api/evennia.commands.default.cmdset_account.rst new file mode 100644 index 0000000000..c518041bc1 --- /dev/null +++ b/docs/source/api/evennia.commands.default.cmdset_account.rst @@ -0,0 +1,7 @@ +evennia.commands.default.cmdset\_account module +=============================================== + +.. automodule:: evennia.commands.default.cmdset_account + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.cmdset_character.rst b/docs/source/api/evennia.commands.default.cmdset_character.rst new file mode 100644 index 0000000000..b4dff3406c --- /dev/null +++ b/docs/source/api/evennia.commands.default.cmdset_character.rst @@ -0,0 +1,7 @@ +evennia.commands.default.cmdset\_character module +================================================= + +.. automodule:: evennia.commands.default.cmdset_character + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.cmdset_session.rst b/docs/source/api/evennia.commands.default.cmdset_session.rst new file mode 100644 index 0000000000..2f5ed3d177 --- /dev/null +++ b/docs/source/api/evennia.commands.default.cmdset_session.rst @@ -0,0 +1,7 @@ +evennia.commands.default.cmdset\_session module +=============================================== + +.. automodule:: evennia.commands.default.cmdset_session + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.cmdset_unloggedin.rst b/docs/source/api/evennia.commands.default.cmdset_unloggedin.rst new file mode 100644 index 0000000000..4ccc5c52ac --- /dev/null +++ b/docs/source/api/evennia.commands.default.cmdset_unloggedin.rst @@ -0,0 +1,7 @@ +evennia.commands.default.cmdset\_unloggedin module +================================================== + +.. automodule:: evennia.commands.default.cmdset_unloggedin + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.comms.rst b/docs/source/api/evennia.commands.default.comms.rst new file mode 100644 index 0000000000..9e6304398f --- /dev/null +++ b/docs/source/api/evennia.commands.default.comms.rst @@ -0,0 +1,7 @@ +evennia.commands.default.comms module +===================================== + +.. automodule:: evennia.commands.default.comms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.general.rst b/docs/source/api/evennia.commands.default.general.rst new file mode 100644 index 0000000000..3a992a34b0 --- /dev/null +++ b/docs/source/api/evennia.commands.default.general.rst @@ -0,0 +1,7 @@ +evennia.commands.default.general module +======================================= + +.. automodule:: evennia.commands.default.general + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.help.rst b/docs/source/api/evennia.commands.default.help.rst new file mode 100644 index 0000000000..475266e1ac --- /dev/null +++ b/docs/source/api/evennia.commands.default.help.rst @@ -0,0 +1,7 @@ +evennia.commands.default.help module +==================================== + +.. automodule:: evennia.commands.default.help + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.muxcommand.rst b/docs/source/api/evennia.commands.default.muxcommand.rst new file mode 100644 index 0000000000..bfe0f8055a --- /dev/null +++ b/docs/source/api/evennia.commands.default.muxcommand.rst @@ -0,0 +1,7 @@ +evennia.commands.default.muxcommand module +========================================== + +.. automodule:: evennia.commands.default.muxcommand + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.rst b/docs/source/api/evennia.commands.default.rst new file mode 100644 index 0000000000..605b697420 --- /dev/null +++ b/docs/source/api/evennia.commands.default.rst @@ -0,0 +1,29 @@ +evennia.commands.default package +================================ + +.. automodule:: evennia.commands.default + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.commands.default.account + evennia.commands.default.admin + evennia.commands.default.batchprocess + evennia.commands.default.building + evennia.commands.default.cmdset_account + evennia.commands.default.cmdset_character + evennia.commands.default.cmdset_session + evennia.commands.default.cmdset_unloggedin + evennia.commands.default.comms + evennia.commands.default.general + evennia.commands.default.help + evennia.commands.default.muxcommand + evennia.commands.default.syscommands + evennia.commands.default.system + evennia.commands.default.tests + evennia.commands.default.unloggedin diff --git a/docs/source/api/evennia.commands.default.syscommands.rst b/docs/source/api/evennia.commands.default.syscommands.rst new file mode 100644 index 0000000000..4d1ef77f6b --- /dev/null +++ b/docs/source/api/evennia.commands.default.syscommands.rst @@ -0,0 +1,7 @@ +evennia.commands.default.syscommands module +=========================================== + +.. automodule:: evennia.commands.default.syscommands + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.system.rst b/docs/source/api/evennia.commands.default.system.rst new file mode 100644 index 0000000000..3fd11fed5c --- /dev/null +++ b/docs/source/api/evennia.commands.default.system.rst @@ -0,0 +1,7 @@ +evennia.commands.default.system module +====================================== + +.. automodule:: evennia.commands.default.system + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.tests.rst b/docs/source/api/evennia.commands.default.tests.rst new file mode 100644 index 0000000000..407cf01c81 --- /dev/null +++ b/docs/source/api/evennia.commands.default.tests.rst @@ -0,0 +1,7 @@ +evennia.commands.default.tests module +===================================== + +.. automodule:: evennia.commands.default.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.default.unloggedin.rst b/docs/source/api/evennia.commands.default.unloggedin.rst new file mode 100644 index 0000000000..c4b22e3123 --- /dev/null +++ b/docs/source/api/evennia.commands.default.unloggedin.rst @@ -0,0 +1,7 @@ +evennia.commands.default.unloggedin module +========================================== + +.. automodule:: evennia.commands.default.unloggedin + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.commands.rst b/docs/source/api/evennia.commands.rst new file mode 100644 index 0000000000..dd98fed278 --- /dev/null +++ b/docs/source/api/evennia.commands.rst @@ -0,0 +1,24 @@ +evennia.commands package +======================== + +.. automodule:: evennia.commands + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.commands.cmdhandler + evennia.commands.cmdparser + evennia.commands.cmdset + evennia.commands.cmdsethandler + evennia.commands.command + + +.. toctree:: + :maxdepth: 6 + + evennia.commands.default diff --git a/docs/source/api/evennia.comms.comms.rst b/docs/source/api/evennia.comms.comms.rst new file mode 100644 index 0000000000..a7157d5199 --- /dev/null +++ b/docs/source/api/evennia.comms.comms.rst @@ -0,0 +1,7 @@ +evennia.comms.comms module +========================== + +.. automodule:: evennia.comms.comms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.comms.managers.rst b/docs/source/api/evennia.comms.managers.rst new file mode 100644 index 0000000000..3d20492f19 --- /dev/null +++ b/docs/source/api/evennia.comms.managers.rst @@ -0,0 +1,7 @@ +evennia.comms.managers module +============================= + +.. automodule:: evennia.comms.managers + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.comms.models.rst b/docs/source/api/evennia.comms.models.rst new file mode 100644 index 0000000000..4fd7dcc9d9 --- /dev/null +++ b/docs/source/api/evennia.comms.models.rst @@ -0,0 +1,7 @@ +evennia.comms.models module +=========================== + +.. automodule:: evennia.comms.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.comms.rst b/docs/source/api/evennia.comms.rst new file mode 100644 index 0000000000..00ef04e075 --- /dev/null +++ b/docs/source/api/evennia.comms.rst @@ -0,0 +1,16 @@ +evennia.comms package +===================== + +.. automodule:: evennia.comms + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.comms.comms + evennia.comms.managers + evennia.comms.models diff --git a/docs/source/api/evennia.contrib.base_systems.awsstorage.aws_s3_cdn.rst b/docs/source/api/evennia.contrib.base_systems.awsstorage.aws_s3_cdn.rst new file mode 100644 index 0000000000..61046a67bb --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.awsstorage.aws_s3_cdn.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.awsstorage.aws\_s3\_cdn module +============================================================ + +.. automodule:: evennia.contrib.base_systems.awsstorage.aws_s3_cdn + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.awsstorage.rst b/docs/source/api/evennia.contrib.base_systems.awsstorage.rst new file mode 100644 index 0000000000..d1629083ca --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.awsstorage.rst @@ -0,0 +1,15 @@ +evennia.contrib.base\_systems.awsstorage package +================================================ + +.. automodule:: evennia.contrib.base_systems.awsstorage + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.awsstorage.aws_s3_cdn + evennia.contrib.base_systems.awsstorage.tests diff --git a/docs/source/api/evennia.contrib.base_systems.awsstorage.tests.rst b/docs/source/api/evennia.contrib.base_systems.awsstorage.tests.rst new file mode 100644 index 0000000000..30fb435288 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.awsstorage.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.awsstorage.tests module +===================================================== + +.. automodule:: evennia.contrib.base_systems.awsstorage.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.building_menu.building_menu.rst b/docs/source/api/evennia.contrib.base_systems.building_menu.building_menu.rst new file mode 100644 index 0000000000..da110c96e2 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.building_menu.building_menu.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.building\_menu.building\_menu module +================================================================== + +.. automodule:: evennia.contrib.base_systems.building_menu.building_menu + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.building_menu.rst b/docs/source/api/evennia.contrib.base_systems.building_menu.rst new file mode 100644 index 0000000000..8a840fef42 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.building_menu.rst @@ -0,0 +1,15 @@ +evennia.contrib.base\_systems.building\_menu package +==================================================== + +.. automodule:: evennia.contrib.base_systems.building_menu + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.building_menu.building_menu + evennia.contrib.base_systems.building_menu.tests diff --git a/docs/source/api/evennia.contrib.base_systems.building_menu.tests.rst b/docs/source/api/evennia.contrib.base_systems.building_menu.tests.rst new file mode 100644 index 0000000000..ef3171d87b --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.building_menu.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.building\_menu.tests module +========================================================= + +.. automodule:: evennia.contrib.base_systems.building_menu.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.color_markups.color_markups.rst b/docs/source/api/evennia.contrib.base_systems.color_markups.color_markups.rst new file mode 100644 index 0000000000..1c70e3754f --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.color_markups.color_markups.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.color\_markups.color\_markups module +================================================================== + +.. automodule:: evennia.contrib.base_systems.color_markups.color_markups + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.color_markups.rst b/docs/source/api/evennia.contrib.base_systems.color_markups.rst new file mode 100644 index 0000000000..ea28bd224f --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.color_markups.rst @@ -0,0 +1,15 @@ +evennia.contrib.base\_systems.color\_markups package +==================================================== + +.. automodule:: evennia.contrib.base_systems.color_markups + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.color_markups.color_markups + evennia.contrib.base_systems.color_markups.tests diff --git a/docs/source/api/evennia.contrib.base_systems.color_markups.tests.rst b/docs/source/api/evennia.contrib.base_systems.color_markups.tests.rst new file mode 100644 index 0000000000..f3f6c4c679 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.color_markups.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.color\_markups.tests module +========================================================= + +.. automodule:: evennia.contrib.base_systems.color_markups.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.components.component.rst b/docs/source/api/evennia.contrib.base_systems.components.component.rst new file mode 100644 index 0000000000..0fe68cbdac --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.components.component.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.components.component module +========================================================= + +.. automodule:: evennia.contrib.base_systems.components.component + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.components.dbfield.rst b/docs/source/api/evennia.contrib.base_systems.components.dbfield.rst new file mode 100644 index 0000000000..f80a709d4c --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.components.dbfield.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.components.dbfield module +======================================================= + +.. automodule:: evennia.contrib.base_systems.components.dbfield + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.components.holder.rst b/docs/source/api/evennia.contrib.base_systems.components.holder.rst new file mode 100644 index 0000000000..77b811ebfa --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.components.holder.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.components.holder module +====================================================== + +.. automodule:: evennia.contrib.base_systems.components.holder + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.components.rst b/docs/source/api/evennia.contrib.base_systems.components.rst new file mode 100644 index 0000000000..d6ecc2b764 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.components.rst @@ -0,0 +1,18 @@ +evennia.contrib.base\_systems.components package +================================================ + +.. automodule:: evennia.contrib.base_systems.components + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.components.component + evennia.contrib.base_systems.components.dbfield + evennia.contrib.base_systems.components.holder + evennia.contrib.base_systems.components.signals + evennia.contrib.base_systems.components.tests diff --git a/docs/source/api/evennia.contrib.base_systems.components.signals.rst b/docs/source/api/evennia.contrib.base_systems.components.signals.rst new file mode 100644 index 0000000000..abc557bc7a --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.components.signals.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.components.signals module +======================================================= + +.. automodule:: evennia.contrib.base_systems.components.signals + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.components.tests.rst b/docs/source/api/evennia.contrib.base_systems.components.tests.rst new file mode 100644 index 0000000000..4c9afd89b4 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.components.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.components.tests module +===================================================== + +.. automodule:: evennia.contrib.base_systems.components.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.custom_gametime.custom_gametime.rst b/docs/source/api/evennia.contrib.base_systems.custom_gametime.custom_gametime.rst new file mode 100644 index 0000000000..dedce30d07 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.custom_gametime.custom_gametime.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.custom\_gametime.custom\_gametime module +====================================================================== + +.. automodule:: evennia.contrib.base_systems.custom_gametime.custom_gametime + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.custom_gametime.rst b/docs/source/api/evennia.contrib.base_systems.custom_gametime.rst new file mode 100644 index 0000000000..823aeed66e --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.custom_gametime.rst @@ -0,0 +1,15 @@ +evennia.contrib.base\_systems.custom\_gametime package +====================================================== + +.. automodule:: evennia.contrib.base_systems.custom_gametime + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.custom_gametime.custom_gametime + evennia.contrib.base_systems.custom_gametime.tests diff --git a/docs/source/api/evennia.contrib.base_systems.custom_gametime.tests.rst b/docs/source/api/evennia.contrib.base_systems.custom_gametime.tests.rst new file mode 100644 index 0000000000..a98267602b --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.custom_gametime.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.custom\_gametime.tests module +=========================================================== + +.. automodule:: evennia.contrib.base_systems.custom_gametime.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.email_login.connection_screens.rst b/docs/source/api/evennia.contrib.base_systems.email_login.connection_screens.rst new file mode 100644 index 0000000000..dacc9c3f45 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.email_login.connection_screens.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.email\_login.connection\_screens module +===================================================================== + +.. automodule:: evennia.contrib.base_systems.email_login.connection_screens + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.email_login.email_login.rst b/docs/source/api/evennia.contrib.base_systems.email_login.email_login.rst new file mode 100644 index 0000000000..1ff73c13e7 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.email_login.email_login.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.email\_login.email\_login module +============================================================== + +.. automodule:: evennia.contrib.base_systems.email_login.email_login + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.email_login.rst b/docs/source/api/evennia.contrib.base_systems.email_login.rst new file mode 100644 index 0000000000..f51e9c2c89 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.email_login.rst @@ -0,0 +1,16 @@ +evennia.contrib.base\_systems.email\_login package +================================================== + +.. automodule:: evennia.contrib.base_systems.email_login + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.email_login.connection_screens + evennia.contrib.base_systems.email_login.email_login + evennia.contrib.base_systems.email_login.tests diff --git a/docs/source/api/evennia.contrib.base_systems.email_login.tests.rst b/docs/source/api/evennia.contrib.base_systems.email_login.tests.rst new file mode 100644 index 0000000000..c99aea7965 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.email_login.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.email\_login.tests module +======================================================= + +.. automodule:: evennia.contrib.base_systems.email_login.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.callbackhandler.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.callbackhandler.rst new file mode 100644 index 0000000000..e36d4c5c3f --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.callbackhandler.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.ingame\_python.callbackhandler module +=================================================================== + +.. automodule:: evennia.contrib.base_systems.ingame_python.callbackhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.commands.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.commands.rst new file mode 100644 index 0000000000..c313631410 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.commands.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.ingame\_python.commands module +============================================================ + +.. automodule:: evennia.contrib.base_systems.ingame_python.commands + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.eventfuncs.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.eventfuncs.rst new file mode 100644 index 0000000000..963fe527e6 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.eventfuncs.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.ingame\_python.eventfuncs module +============================================================== + +.. automodule:: evennia.contrib.base_systems.ingame_python.eventfuncs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.rst new file mode 100644 index 0000000000..4985511010 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.rst @@ -0,0 +1,20 @@ +evennia.contrib.base\_systems.ingame\_python package +==================================================== + +.. automodule:: evennia.contrib.base_systems.ingame_python + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.ingame_python.callbackhandler + evennia.contrib.base_systems.ingame_python.commands + evennia.contrib.base_systems.ingame_python.eventfuncs + evennia.contrib.base_systems.ingame_python.scripts + evennia.contrib.base_systems.ingame_python.tests + evennia.contrib.base_systems.ingame_python.typeclasses + evennia.contrib.base_systems.ingame_python.utils diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.scripts.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.scripts.rst new file mode 100644 index 0000000000..11f3a8e453 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.scripts.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.ingame\_python.scripts module +=========================================================== + +.. automodule:: evennia.contrib.base_systems.ingame_python.scripts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.tests.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.tests.rst new file mode 100644 index 0000000000..f65977f106 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.ingame\_python.tests module +========================================================= + +.. automodule:: evennia.contrib.base_systems.ingame_python.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.typeclasses.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.typeclasses.rst new file mode 100644 index 0000000000..5ef3613860 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.typeclasses.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.ingame\_python.typeclasses module +=============================================================== + +.. automodule:: evennia.contrib.base_systems.ingame_python.typeclasses + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.ingame_python.utils.rst b/docs/source/api/evennia.contrib.base_systems.ingame_python.utils.rst new file mode 100644 index 0000000000..3d5bbb8230 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.ingame_python.utils.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.ingame\_python.utils module +========================================================= + +.. automodule:: evennia.contrib.base_systems.ingame_python.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.menu_login.connection_screens.rst b/docs/source/api/evennia.contrib.base_systems.menu_login.connection_screens.rst new file mode 100644 index 0000000000..9fc0eb1487 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.menu_login.connection_screens.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.menu\_login.connection\_screens module +==================================================================== + +.. automodule:: evennia.contrib.base_systems.menu_login.connection_screens + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.menu_login.menu_login.rst b/docs/source/api/evennia.contrib.base_systems.menu_login.menu_login.rst new file mode 100644 index 0000000000..24437a5aea --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.menu_login.menu_login.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.menu\_login.menu\_login module +============================================================ + +.. automodule:: evennia.contrib.base_systems.menu_login.menu_login + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.menu_login.rst b/docs/source/api/evennia.contrib.base_systems.menu_login.rst new file mode 100644 index 0000000000..3ca2a496ee --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.menu_login.rst @@ -0,0 +1,16 @@ +evennia.contrib.base\_systems.menu\_login package +================================================= + +.. automodule:: evennia.contrib.base_systems.menu_login + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.menu_login.connection_screens + evennia.contrib.base_systems.menu_login.menu_login + evennia.contrib.base_systems.menu_login.tests diff --git a/docs/source/api/evennia.contrib.base_systems.menu_login.tests.rst b/docs/source/api/evennia.contrib.base_systems.menu_login.tests.rst new file mode 100644 index 0000000000..c4ca10b447 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.menu_login.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.menu\_login.tests module +====================================================== + +.. automodule:: evennia.contrib.base_systems.menu_login.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.rst b/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.rst new file mode 100644 index 0000000000..c247a5ef6a --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.mux\_comms\_cmds.mux\_comms\_cmds module +====================================================================== + +.. automodule:: evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.rst b/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.rst new file mode 100644 index 0000000000..1b07bfbde7 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.rst @@ -0,0 +1,15 @@ +evennia.contrib.base\_systems.mux\_comms\_cmds package +====================================================== + +.. automodule:: evennia.contrib.base_systems.mux_comms_cmds + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.mux_comms_cmds.mux_comms_cmds + evennia.contrib.base_systems.mux_comms_cmds.tests diff --git a/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.tests.rst b/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.tests.rst new file mode 100644 index 0000000000..6586189617 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.mux_comms_cmds.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.mux\_comms\_cmds.tests module +=========================================================== + +.. automodule:: evennia.contrib.base_systems.mux_comms_cmds.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.rst b/docs/source/api/evennia.contrib.base_systems.rst new file mode 100644 index 0000000000..7874657ea6 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.rst @@ -0,0 +1,22 @@ +evennia.contrib.base\_systems package +===================================== + +.. automodule:: evennia.contrib.base_systems + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.awsstorage + evennia.contrib.base_systems.building_menu + evennia.contrib.base_systems.color_markups + evennia.contrib.base_systems.components + evennia.contrib.base_systems.custom_gametime + evennia.contrib.base_systems.email_login + evennia.contrib.base_systems.ingame_python + evennia.contrib.base_systems.menu_login + evennia.contrib.base_systems.mux_comms_cmds + evennia.contrib.base_systems.unixcommand diff --git a/docs/source/api/evennia.contrib.base_systems.unixcommand.rst b/docs/source/api/evennia.contrib.base_systems.unixcommand.rst new file mode 100644 index 0000000000..8a1de9cf14 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.unixcommand.rst @@ -0,0 +1,15 @@ +evennia.contrib.base\_systems.unixcommand package +================================================= + +.. automodule:: evennia.contrib.base_systems.unixcommand + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems.unixcommand.tests + evennia.contrib.base_systems.unixcommand.unixcommand diff --git a/docs/source/api/evennia.contrib.base_systems.unixcommand.tests.rst b/docs/source/api/evennia.contrib.base_systems.unixcommand.tests.rst new file mode 100644 index 0000000000..0141185396 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.unixcommand.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.unixcommand.tests module +====================================================== + +.. automodule:: evennia.contrib.base_systems.unixcommand.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.base_systems.unixcommand.unixcommand.rst b/docs/source/api/evennia.contrib.base_systems.unixcommand.unixcommand.rst new file mode 100644 index 0000000000..cd892e6970 --- /dev/null +++ b/docs/source/api/evennia.contrib.base_systems.unixcommand.unixcommand.rst @@ -0,0 +1,7 @@ +evennia.contrib.base\_systems.unixcommand.unixcommand module +============================================================ + +.. automodule:: evennia.contrib.base_systems.unixcommand.unixcommand + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.commands.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.commands.rst new file mode 100644 index 0000000000..45a3c74cc4 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.commands.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.commands module +========================================================= + +.. automodule:: evennia.contrib.full_systems.evscaperoom.commands + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.menu.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.menu.rst new file mode 100644 index 0000000000..ca37a3a627 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.menu.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.menu module +===================================================== + +.. automodule:: evennia.contrib.full_systems.evscaperoom.menu + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.objects.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.objects.rst new file mode 100644 index 0000000000..7d45c26d57 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.objects.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.objects module +======================================================== + +.. automodule:: evennia.contrib.full_systems.evscaperoom.objects + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.room.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.room.rst new file mode 100644 index 0000000000..cfd6a1dfb7 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.room.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.room module +===================================================== + +.. automodule:: evennia.contrib.full_systems.evscaperoom.room + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.rst new file mode 100644 index 0000000000..e68e38fa8b --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.rst @@ -0,0 +1,21 @@ +evennia.contrib.full\_systems.evscaperoom package +================================================= + +.. automodule:: evennia.contrib.full_systems.evscaperoom + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.full_systems.evscaperoom.commands + evennia.contrib.full_systems.evscaperoom.menu + evennia.contrib.full_systems.evscaperoom.objects + evennia.contrib.full_systems.evscaperoom.room + evennia.contrib.full_systems.evscaperoom.scripts + evennia.contrib.full_systems.evscaperoom.state + evennia.contrib.full_systems.evscaperoom.tests + evennia.contrib.full_systems.evscaperoom.utils diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.scripts.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.scripts.rst new file mode 100644 index 0000000000..18e0e891e1 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.scripts.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.scripts module +======================================================== + +.. automodule:: evennia.contrib.full_systems.evscaperoom.scripts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.state.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.state.rst new file mode 100644 index 0000000000..ef411c3b0d --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.state.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.state module +====================================================== + +.. automodule:: evennia.contrib.full_systems.evscaperoom.state + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.tests.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.tests.rst new file mode 100644 index 0000000000..89549b3db8 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.tests module +====================================================== + +.. automodule:: evennia.contrib.full_systems.evscaperoom.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.evscaperoom.utils.rst b/docs/source/api/evennia.contrib.full_systems.evscaperoom.utils.rst new file mode 100644 index 0000000000..d1e389de85 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.evscaperoom.utils.rst @@ -0,0 +1,7 @@ +evennia.contrib.full\_systems.evscaperoom.utils module +====================================================== + +.. automodule:: evennia.contrib.full_systems.evscaperoom.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.full_systems.rst b/docs/source/api/evennia.contrib.full_systems.rst new file mode 100644 index 0000000000..e8c321d8b4 --- /dev/null +++ b/docs/source/api/evennia.contrib.full_systems.rst @@ -0,0 +1,13 @@ +evennia.contrib.full\_systems package +===================================== + +.. automodule:: evennia.contrib.full_systems + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.full_systems.evscaperoom diff --git a/docs/source/api/evennia.contrib.game_systems.barter.barter.rst b/docs/source/api/evennia.contrib.game_systems.barter.barter.rst new file mode 100644 index 0000000000..a5da1f27fe --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.barter.barter.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.barter.barter module +================================================== + +.. automodule:: evennia.contrib.game_systems.barter.barter + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.barter.rst b/docs/source/api/evennia.contrib.game_systems.barter.rst new file mode 100644 index 0000000000..04cb483bb9 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.barter.rst @@ -0,0 +1,15 @@ +evennia.contrib.game\_systems.barter package +============================================ + +.. automodule:: evennia.contrib.game_systems.barter + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.barter.barter + evennia.contrib.game_systems.barter.tests diff --git a/docs/source/api/evennia.contrib.game_systems.barter.tests.rst b/docs/source/api/evennia.contrib.game_systems.barter.tests.rst new file mode 100644 index 0000000000..70d565871a --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.barter.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.barter.tests module +================================================= + +.. automodule:: evennia.contrib.game_systems.barter.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.clothing.clothing.rst b/docs/source/api/evennia.contrib.game_systems.clothing.clothing.rst new file mode 100644 index 0000000000..2753e9a1cf --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.clothing.clothing.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.clothing.clothing module +====================================================== + +.. automodule:: evennia.contrib.game_systems.clothing.clothing + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.clothing.rst b/docs/source/api/evennia.contrib.game_systems.clothing.rst new file mode 100644 index 0000000000..546dc1b71f --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.clothing.rst @@ -0,0 +1,15 @@ +evennia.contrib.game\_systems.clothing package +============================================== + +.. automodule:: evennia.contrib.game_systems.clothing + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.clothing.clothing + evennia.contrib.game_systems.clothing.tests diff --git a/docs/source/api/evennia.contrib.game_systems.clothing.tests.rst b/docs/source/api/evennia.contrib.game_systems.clothing.tests.rst new file mode 100644 index 0000000000..df2b16c377 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.clothing.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.clothing.tests module +=================================================== + +.. automodule:: evennia.contrib.game_systems.clothing.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.cooldowns.cooldowns.rst b/docs/source/api/evennia.contrib.game_systems.cooldowns.cooldowns.rst new file mode 100644 index 0000000000..86911974c1 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.cooldowns.cooldowns.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.cooldowns.cooldowns module +======================================================== + +.. automodule:: evennia.contrib.game_systems.cooldowns.cooldowns + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.cooldowns.rst b/docs/source/api/evennia.contrib.game_systems.cooldowns.rst new file mode 100644 index 0000000000..1489a76ccb --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.cooldowns.rst @@ -0,0 +1,15 @@ +evennia.contrib.game\_systems.cooldowns package +=============================================== + +.. automodule:: evennia.contrib.game_systems.cooldowns + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.cooldowns.cooldowns + evennia.contrib.game_systems.cooldowns.tests diff --git a/docs/source/api/evennia.contrib.game_systems.cooldowns.tests.rst b/docs/source/api/evennia.contrib.game_systems.cooldowns.tests.rst new file mode 100644 index 0000000000..3673da29a7 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.cooldowns.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.cooldowns.tests module +==================================================== + +.. automodule:: evennia.contrib.game_systems.cooldowns.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.crafting.crafting.rst b/docs/source/api/evennia.contrib.game_systems.crafting.crafting.rst new file mode 100644 index 0000000000..4771da56b0 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.crafting.crafting.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.crafting.crafting module +====================================================== + +.. automodule:: evennia.contrib.game_systems.crafting.crafting + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.crafting.example_recipes.rst b/docs/source/api/evennia.contrib.game_systems.crafting.example_recipes.rst new file mode 100644 index 0000000000..4a29537b58 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.crafting.example_recipes.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.crafting.example\_recipes module +============================================================== + +.. automodule:: evennia.contrib.game_systems.crafting.example_recipes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.crafting.rst b/docs/source/api/evennia.contrib.game_systems.crafting.rst new file mode 100644 index 0000000000..a425dbd2a5 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.crafting.rst @@ -0,0 +1,16 @@ +evennia.contrib.game\_systems.crafting package +============================================== + +.. automodule:: evennia.contrib.game_systems.crafting + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.crafting.crafting + evennia.contrib.game_systems.crafting.example_recipes + evennia.contrib.game_systems.crafting.tests diff --git a/docs/source/api/evennia.contrib.game_systems.crafting.tests.rst b/docs/source/api/evennia.contrib.game_systems.crafting.tests.rst new file mode 100644 index 0000000000..0e0f67864d --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.crafting.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.crafting.tests module +=================================================== + +.. automodule:: evennia.contrib.game_systems.crafting.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.gendersub.gendersub.rst b/docs/source/api/evennia.contrib.game_systems.gendersub.gendersub.rst new file mode 100644 index 0000000000..b5711e8f08 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.gendersub.gendersub.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.gendersub.gendersub module +======================================================== + +.. automodule:: evennia.contrib.game_systems.gendersub.gendersub + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.gendersub.rst b/docs/source/api/evennia.contrib.game_systems.gendersub.rst new file mode 100644 index 0000000000..9012d6781b --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.gendersub.rst @@ -0,0 +1,15 @@ +evennia.contrib.game\_systems.gendersub package +=============================================== + +.. automodule:: evennia.contrib.game_systems.gendersub + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.gendersub.gendersub + evennia.contrib.game_systems.gendersub.tests diff --git a/docs/source/api/evennia.contrib.game_systems.gendersub.tests.rst b/docs/source/api/evennia.contrib.game_systems.gendersub.tests.rst new file mode 100644 index 0000000000..fa35254118 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.gendersub.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.gendersub.tests module +==================================================== + +.. automodule:: evennia.contrib.game_systems.gendersub.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.mail.mail.rst b/docs/source/api/evennia.contrib.game_systems.mail.mail.rst new file mode 100644 index 0000000000..1cd1eb8b0c --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.mail.mail.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.mail.mail module +============================================== + +.. automodule:: evennia.contrib.game_systems.mail.mail + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.mail.rst b/docs/source/api/evennia.contrib.game_systems.mail.rst new file mode 100644 index 0000000000..c96aaef865 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.mail.rst @@ -0,0 +1,15 @@ +evennia.contrib.game\_systems.mail package +========================================== + +.. automodule:: evennia.contrib.game_systems.mail + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.mail.mail + evennia.contrib.game_systems.mail.tests diff --git a/docs/source/api/evennia.contrib.game_systems.mail.tests.rst b/docs/source/api/evennia.contrib.game_systems.mail.tests.rst new file mode 100644 index 0000000000..28679f1994 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.mail.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.mail.tests module +=============================================== + +.. automodule:: evennia.contrib.game_systems.mail.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.multidescer.multidescer.rst b/docs/source/api/evennia.contrib.game_systems.multidescer.multidescer.rst new file mode 100644 index 0000000000..7ec51bac20 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.multidescer.multidescer.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.multidescer.multidescer module +============================================================ + +.. automodule:: evennia.contrib.game_systems.multidescer.multidescer + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.multidescer.rst b/docs/source/api/evennia.contrib.game_systems.multidescer.rst new file mode 100644 index 0000000000..a00318ea21 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.multidescer.rst @@ -0,0 +1,15 @@ +evennia.contrib.game\_systems.multidescer package +================================================= + +.. automodule:: evennia.contrib.game_systems.multidescer + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.multidescer.multidescer + evennia.contrib.game_systems.multidescer.tests diff --git a/docs/source/api/evennia.contrib.game_systems.multidescer.tests.rst b/docs/source/api/evennia.contrib.game_systems.multidescer.tests.rst new file mode 100644 index 0000000000..5d30372a1e --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.multidescer.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.multidescer.tests module +====================================================== + +.. automodule:: evennia.contrib.game_systems.multidescer.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.puzzles.puzzles.rst b/docs/source/api/evennia.contrib.game_systems.puzzles.puzzles.rst new file mode 100644 index 0000000000..d53c8df3b5 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.puzzles.puzzles.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.puzzles.puzzles module +==================================================== + +.. automodule:: evennia.contrib.game_systems.puzzles.puzzles + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.puzzles.rst b/docs/source/api/evennia.contrib.game_systems.puzzles.rst new file mode 100644 index 0000000000..b3fca6bb32 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.puzzles.rst @@ -0,0 +1,15 @@ +evennia.contrib.game\_systems.puzzles package +============================================= + +.. automodule:: evennia.contrib.game_systems.puzzles + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.puzzles.puzzles + evennia.contrib.game_systems.puzzles.tests diff --git a/docs/source/api/evennia.contrib.game_systems.puzzles.tests.rst b/docs/source/api/evennia.contrib.game_systems.puzzles.tests.rst new file mode 100644 index 0000000000..968695094e --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.puzzles.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.puzzles.tests module +================================================== + +.. automodule:: evennia.contrib.game_systems.puzzles.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.rst b/docs/source/api/evennia.contrib.game_systems.rst new file mode 100644 index 0000000000..d84b996c3f --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.rst @@ -0,0 +1,21 @@ +evennia.contrib.game\_systems package +===================================== + +.. automodule:: evennia.contrib.game_systems + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.barter + evennia.contrib.game_systems.clothing + evennia.contrib.game_systems.cooldowns + evennia.contrib.game_systems.crafting + evennia.contrib.game_systems.gendersub + evennia.contrib.game_systems.mail + evennia.contrib.game_systems.multidescer + evennia.contrib.game_systems.puzzles + evennia.contrib.game_systems.turnbattle diff --git a/docs/source/api/evennia.contrib.game_systems.turnbattle.rst b/docs/source/api/evennia.contrib.game_systems.turnbattle.rst new file mode 100644 index 0000000000..b3e0bd3f4f --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.turnbattle.rst @@ -0,0 +1,19 @@ +evennia.contrib.game\_systems.turnbattle package +================================================ + +.. automodule:: evennia.contrib.game_systems.turnbattle + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.game_systems.turnbattle.tb_basic + evennia.contrib.game_systems.turnbattle.tb_equip + evennia.contrib.game_systems.turnbattle.tb_items + evennia.contrib.game_systems.turnbattle.tb_magic + evennia.contrib.game_systems.turnbattle.tb_range + evennia.contrib.game_systems.turnbattle.tests diff --git a/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_basic.rst b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_basic.rst new file mode 100644 index 0000000000..75b085fa8d --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_basic.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.turnbattle.tb\_basic module +========================================================= + +.. automodule:: evennia.contrib.game_systems.turnbattle.tb_basic + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_equip.rst b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_equip.rst new file mode 100644 index 0000000000..b9e48e1282 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_equip.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.turnbattle.tb\_equip module +========================================================= + +.. automodule:: evennia.contrib.game_systems.turnbattle.tb_equip + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_items.rst b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_items.rst new file mode 100644 index 0000000000..ef3ae5e1c4 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_items.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.turnbattle.tb\_items module +========================================================= + +.. automodule:: evennia.contrib.game_systems.turnbattle.tb_items + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_magic.rst b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_magic.rst new file mode 100644 index 0000000000..4e9f746e84 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_magic.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.turnbattle.tb\_magic module +========================================================= + +.. automodule:: evennia.contrib.game_systems.turnbattle.tb_magic + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_range.rst b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_range.rst new file mode 100644 index 0000000000..a960b46d10 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.turnbattle.tb_range.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.turnbattle.tb\_range module +========================================================= + +.. automodule:: evennia.contrib.game_systems.turnbattle.tb_range + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.game_systems.turnbattle.tests.rst b/docs/source/api/evennia.contrib.game_systems.turnbattle.tests.rst new file mode 100644 index 0000000000..86cc3f0a07 --- /dev/null +++ b/docs/source/api/evennia.contrib.game_systems.turnbattle.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.game\_systems.turnbattle.tests module +===================================================== + +.. automodule:: evennia.contrib.game_systems.turnbattle.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.extended_room.extended_room.rst b/docs/source/api/evennia.contrib.grid.extended_room.extended_room.rst new file mode 100644 index 0000000000..8dd90e644a --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.extended_room.extended_room.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.extended\_room.extended\_room module +========================================================= + +.. automodule:: evennia.contrib.grid.extended_room.extended_room + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.extended_room.rst b/docs/source/api/evennia.contrib.grid.extended_room.rst new file mode 100644 index 0000000000..ce6f6a8de1 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.extended_room.rst @@ -0,0 +1,15 @@ +evennia.contrib.grid.extended\_room package +=========================================== + +.. automodule:: evennia.contrib.grid.extended_room + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.grid.extended_room.extended_room + evennia.contrib.grid.extended_room.tests diff --git a/docs/source/api/evennia.contrib.grid.extended_room.tests.rst b/docs/source/api/evennia.contrib.grid.extended_room.tests.rst new file mode 100644 index 0000000000..8cd23ae52e --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.extended_room.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.extended\_room.tests module +================================================ + +.. automodule:: evennia.contrib.grid.extended_room.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.mapbuilder.mapbuilder.rst b/docs/source/api/evennia.contrib.grid.mapbuilder.mapbuilder.rst new file mode 100644 index 0000000000..fb1471eec7 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.mapbuilder.mapbuilder.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.mapbuilder.mapbuilder module +================================================= + +.. automodule:: evennia.contrib.grid.mapbuilder.mapbuilder + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.mapbuilder.rst b/docs/source/api/evennia.contrib.grid.mapbuilder.rst new file mode 100644 index 0000000000..a810761e44 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.mapbuilder.rst @@ -0,0 +1,15 @@ +evennia.contrib.grid.mapbuilder package +======================================= + +.. automodule:: evennia.contrib.grid.mapbuilder + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.grid.mapbuilder.mapbuilder + evennia.contrib.grid.mapbuilder.tests diff --git a/docs/source/api/evennia.contrib.grid.mapbuilder.tests.rst b/docs/source/api/evennia.contrib.grid.mapbuilder.tests.rst new file mode 100644 index 0000000000..51f2b3ddd8 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.mapbuilder.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.mapbuilder.tests module +============================================ + +.. automodule:: evennia.contrib.grid.mapbuilder.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.rst b/docs/source/api/evennia.contrib.grid.rst new file mode 100644 index 0000000000..5dcb1410d3 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.rst @@ -0,0 +1,18 @@ +evennia.contrib.grid package +============================ + +.. automodule:: evennia.contrib.grid + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.grid.extended_room + evennia.contrib.grid.mapbuilder + evennia.contrib.grid.simpledoor + evennia.contrib.grid.slow_exit + evennia.contrib.grid.wilderness + evennia.contrib.grid.xyzgrid diff --git a/docs/source/api/evennia.contrib.grid.simpledoor.rst b/docs/source/api/evennia.contrib.grid.simpledoor.rst new file mode 100644 index 0000000000..d2417a996e --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.simpledoor.rst @@ -0,0 +1,15 @@ +evennia.contrib.grid.simpledoor package +======================================= + +.. automodule:: evennia.contrib.grid.simpledoor + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.grid.simpledoor.simpledoor + evennia.contrib.grid.simpledoor.tests diff --git a/docs/source/api/evennia.contrib.grid.simpledoor.simpledoor.rst b/docs/source/api/evennia.contrib.grid.simpledoor.simpledoor.rst new file mode 100644 index 0000000000..e77ff0f80b --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.simpledoor.simpledoor.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.simpledoor.simpledoor module +================================================= + +.. automodule:: evennia.contrib.grid.simpledoor.simpledoor + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.simpledoor.tests.rst b/docs/source/api/evennia.contrib.grid.simpledoor.tests.rst new file mode 100644 index 0000000000..39cca9dd6b --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.simpledoor.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.simpledoor.tests module +============================================ + +.. automodule:: evennia.contrib.grid.simpledoor.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.slow_exit.rst b/docs/source/api/evennia.contrib.grid.slow_exit.rst new file mode 100644 index 0000000000..f87494bd1e --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.slow_exit.rst @@ -0,0 +1,15 @@ +evennia.contrib.grid.slow\_exit package +======================================= + +.. automodule:: evennia.contrib.grid.slow_exit + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.grid.slow_exit.slow_exit + evennia.contrib.grid.slow_exit.tests diff --git a/docs/source/api/evennia.contrib.grid.slow_exit.slow_exit.rst b/docs/source/api/evennia.contrib.grid.slow_exit.slow_exit.rst new file mode 100644 index 0000000000..5fc04f05cc --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.slow_exit.slow_exit.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.slow\_exit.slow\_exit module +================================================= + +.. automodule:: evennia.contrib.grid.slow_exit.slow_exit + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.slow_exit.tests.rst b/docs/source/api/evennia.contrib.grid.slow_exit.tests.rst new file mode 100644 index 0000000000..9ac2966cfd --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.slow_exit.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.slow\_exit.tests module +============================================ + +.. automodule:: evennia.contrib.grid.slow_exit.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.wilderness.rst b/docs/source/api/evennia.contrib.grid.wilderness.rst new file mode 100644 index 0000000000..ff22335b66 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.wilderness.rst @@ -0,0 +1,15 @@ +evennia.contrib.grid.wilderness package +======================================= + +.. automodule:: evennia.contrib.grid.wilderness + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.grid.wilderness.tests + evennia.contrib.grid.wilderness.wilderness diff --git a/docs/source/api/evennia.contrib.grid.wilderness.tests.rst b/docs/source/api/evennia.contrib.grid.wilderness.tests.rst new file mode 100644 index 0000000000..b2e7a66c1c --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.wilderness.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.wilderness.tests module +============================================ + +.. automodule:: evennia.contrib.grid.wilderness.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.wilderness.wilderness.rst b/docs/source/api/evennia.contrib.grid.wilderness.wilderness.rst new file mode 100644 index 0000000000..1c2a53cb22 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.wilderness.wilderness.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.wilderness.wilderness module +================================================= + +.. automodule:: evennia.contrib.grid.wilderness.wilderness + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.commands.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.commands.rst new file mode 100644 index 0000000000..1c29c88845 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.commands.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.commands module +============================================ + +.. automodule:: evennia.contrib.grid.xyzgrid.commands + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.example.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.example.rst new file mode 100644 index 0000000000..fd2671fe53 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.example.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.example module +=========================================== + +.. automodule:: evennia.contrib.grid.xyzgrid.example + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.launchcmd.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.launchcmd.rst new file mode 100644 index 0000000000..cb8e660fe0 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.launchcmd.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.launchcmd module +============================================= + +.. automodule:: evennia.contrib.grid.xyzgrid.launchcmd + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.prototypes.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.prototypes.rst new file mode 100644 index 0000000000..d7c08c3413 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.prototypes.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.prototypes module +============================================== + +.. automodule:: evennia.contrib.grid.xyzgrid.prototypes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.rst new file mode 100644 index 0000000000..8da0e720f7 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.rst @@ -0,0 +1,23 @@ +evennia.contrib.grid.xyzgrid package +==================================== + +.. automodule:: evennia.contrib.grid.xyzgrid + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.grid.xyzgrid.commands + evennia.contrib.grid.xyzgrid.example + evennia.contrib.grid.xyzgrid.launchcmd + evennia.contrib.grid.xyzgrid.prototypes + evennia.contrib.grid.xyzgrid.tests + evennia.contrib.grid.xyzgrid.utils + evennia.contrib.grid.xyzgrid.xymap + evennia.contrib.grid.xyzgrid.xymap_legend + evennia.contrib.grid.xyzgrid.xyzgrid + evennia.contrib.grid.xyzgrid.xyzroom diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.tests.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.tests.rst new file mode 100644 index 0000000000..182bc3d674 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.tests module +========================================= + +.. automodule:: evennia.contrib.grid.xyzgrid.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.utils.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.utils.rst new file mode 100644 index 0000000000..2560076037 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.utils.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.utils module +========================================= + +.. automodule:: evennia.contrib.grid.xyzgrid.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.xymap.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.xymap.rst new file mode 100644 index 0000000000..3ffdbe2d74 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.xymap.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.xymap module +========================================= + +.. automodule:: evennia.contrib.grid.xyzgrid.xymap + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.xymap_legend.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.xymap_legend.rst new file mode 100644 index 0000000000..beabfa713d --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.xymap_legend.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.xymap\_legend module +================================================= + +.. automodule:: evennia.contrib.grid.xyzgrid.xymap_legend + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.xyzgrid.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.xyzgrid.rst new file mode 100644 index 0000000000..eedf1020f1 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.xyzgrid.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.xyzgrid module +=========================================== + +.. automodule:: evennia.contrib.grid.xyzgrid.xyzgrid + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.grid.xyzgrid.xyzroom.rst b/docs/source/api/evennia.contrib.grid.xyzgrid.xyzroom.rst new file mode 100644 index 0000000000..816c1073d3 --- /dev/null +++ b/docs/source/api/evennia.contrib.grid.xyzgrid.xyzroom.rst @@ -0,0 +1,7 @@ +evennia.contrib.grid.xyzgrid.xyzroom module +=========================================== + +.. automodule:: evennia.contrib.grid.xyzgrid.xyzroom + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.buffs.buff.rst b/docs/source/api/evennia.contrib.rpg.buffs.buff.rst new file mode 100644 index 0000000000..aea46662c9 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.buff.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.buffs.buff module +===================================== + +.. automodule:: evennia.contrib.rpg.buffs.buff + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.buffs.rst b/docs/source/api/evennia.contrib.rpg.buffs.rst new file mode 100644 index 0000000000..701c236892 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.rst @@ -0,0 +1,16 @@ +evennia.contrib.rpg.buffs package +================================= + +.. automodule:: evennia.contrib.rpg.buffs + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.buffs.buff + evennia.contrib.rpg.buffs.samplebuffs + evennia.contrib.rpg.buffs.tests diff --git a/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.rst b/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.rst new file mode 100644 index 0000000000..b3cd14a4b3 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.samplebuffs.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.buffs.samplebuffs module +============================================ + +.. automodule:: evennia.contrib.rpg.buffs.samplebuffs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.buffs.tests.rst b/docs/source/api/evennia.contrib.rpg.buffs.tests.rst new file mode 100644 index 0000000000..1d6174500c --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.buffs.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.buffs.tests module +====================================== + +.. automodule:: evennia.contrib.rpg.buffs.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.dice.dice.rst b/docs/source/api/evennia.contrib.rpg.dice.dice.rst new file mode 100644 index 0000000000..907ed2eb3f --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.dice.dice.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.dice.dice module +==================================== + +.. automodule:: evennia.contrib.rpg.dice.dice + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.dice.rst b/docs/source/api/evennia.contrib.rpg.dice.rst new file mode 100644 index 0000000000..e97b14e4aa --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.dice.rst @@ -0,0 +1,15 @@ +evennia.contrib.rpg.dice package +================================ + +.. automodule:: evennia.contrib.rpg.dice + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.dice.dice + evennia.contrib.rpg.dice.tests diff --git a/docs/source/api/evennia.contrib.rpg.dice.tests.rst b/docs/source/api/evennia.contrib.rpg.dice.tests.rst new file mode 100644 index 0000000000..2a310141c3 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.dice.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.dice.tests module +===================================== + +.. automodule:: evennia.contrib.rpg.dice.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.health_bar.health_bar.rst b/docs/source/api/evennia.contrib.rpg.health_bar.health_bar.rst new file mode 100644 index 0000000000..91c7a57be9 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.health_bar.health_bar.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.health\_bar.health\_bar module +================================================== + +.. automodule:: evennia.contrib.rpg.health_bar.health_bar + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.health_bar.rst b/docs/source/api/evennia.contrib.rpg.health_bar.rst new file mode 100644 index 0000000000..799605f789 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.health_bar.rst @@ -0,0 +1,15 @@ +evennia.contrib.rpg.health\_bar package +======================================= + +.. automodule:: evennia.contrib.rpg.health_bar + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.health_bar.health_bar + evennia.contrib.rpg.health_bar.tests diff --git a/docs/source/api/evennia.contrib.rpg.health_bar.tests.rst b/docs/source/api/evennia.contrib.rpg.health_bar.tests.rst new file mode 100644 index 0000000000..e6cf8f63a9 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.health_bar.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.health\_bar.tests module +============================================ + +.. automodule:: evennia.contrib.rpg.health_bar.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.rpsystem.rplanguage.rst b/docs/source/api/evennia.contrib.rpg.rpsystem.rplanguage.rst new file mode 100644 index 0000000000..22756ef7ce --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.rpsystem.rplanguage.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.rpsystem.rplanguage module +============================================== + +.. automodule:: evennia.contrib.rpg.rpsystem.rplanguage + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.rpsystem.rpsystem.rst b/docs/source/api/evennia.contrib.rpg.rpsystem.rpsystem.rst new file mode 100644 index 0000000000..2a3b870976 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.rpsystem.rpsystem.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.rpsystem.rpsystem module +============================================ + +.. automodule:: evennia.contrib.rpg.rpsystem.rpsystem + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.rpsystem.rst b/docs/source/api/evennia.contrib.rpg.rpsystem.rst new file mode 100644 index 0000000000..0e6d60f88e --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.rpsystem.rst @@ -0,0 +1,16 @@ +evennia.contrib.rpg.rpsystem package +==================================== + +.. automodule:: evennia.contrib.rpg.rpsystem + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.rpsystem.rplanguage + evennia.contrib.rpg.rpsystem.rpsystem + evennia.contrib.rpg.rpsystem.tests diff --git a/docs/source/api/evennia.contrib.rpg.rpsystem.tests.rst b/docs/source/api/evennia.contrib.rpg.rpsystem.tests.rst new file mode 100644 index 0000000000..f48cd2c9a5 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.rpsystem.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.rpsystem.tests module +========================================= + +.. automodule:: evennia.contrib.rpg.rpsystem.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.rst b/docs/source/api/evennia.contrib.rpg.rst new file mode 100644 index 0000000000..cf7f5d961d --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.rst @@ -0,0 +1,17 @@ +evennia.contrib.rpg package +=========================== + +.. automodule:: evennia.contrib.rpg + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.buffs + evennia.contrib.rpg.dice + evennia.contrib.rpg.health_bar + evennia.contrib.rpg.rpsystem + evennia.contrib.rpg.traits diff --git a/docs/source/api/evennia.contrib.rpg.traits.rst b/docs/source/api/evennia.contrib.rpg.traits.rst new file mode 100644 index 0000000000..9664bca8f9 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.traits.rst @@ -0,0 +1,15 @@ +evennia.contrib.rpg.traits package +================================== + +.. automodule:: evennia.contrib.rpg.traits + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.rpg.traits.tests + evennia.contrib.rpg.traits.traits diff --git a/docs/source/api/evennia.contrib.rpg.traits.tests.rst b/docs/source/api/evennia.contrib.rpg.traits.tests.rst new file mode 100644 index 0000000000..0a90321dd5 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.traits.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.traits.tests module +======================================= + +.. automodule:: evennia.contrib.rpg.traits.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rpg.traits.traits.rst b/docs/source/api/evennia.contrib.rpg.traits.traits.rst new file mode 100644 index 0000000000..b51d825c37 --- /dev/null +++ b/docs/source/api/evennia.contrib.rpg.traits.traits.rst @@ -0,0 +1,7 @@ +evennia.contrib.rpg.traits.traits module +======================================== + +.. automodule:: evennia.contrib.rpg.traits.traits + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.rst b/docs/source/api/evennia.contrib.rst new file mode 100644 index 0000000000..a7fb965905 --- /dev/null +++ b/docs/source/api/evennia.contrib.rst @@ -0,0 +1,19 @@ +evennia.contrib package +======================= + +.. automodule:: evennia.contrib + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.base_systems + evennia.contrib.full_systems + evennia.contrib.game_systems + evennia.contrib.grid + evennia.contrib.rpg + evennia.contrib.tutorials + evennia.contrib.utils diff --git a/docs/source/api/evennia.contrib.tutorials.batchprocessor.example_batch_code.rst b/docs/source/api/evennia.contrib.tutorials.batchprocessor.example_batch_code.rst new file mode 100644 index 0000000000..2a909aff2e --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.batchprocessor.example_batch_code.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.batchprocessor.example\_batch\_code module +==================================================================== + +.. automodule:: evennia.contrib.tutorials.batchprocessor.example_batch_code + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.batchprocessor.rst b/docs/source/api/evennia.contrib.tutorials.batchprocessor.rst new file mode 100644 index 0000000000..61939ca5f1 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.batchprocessor.rst @@ -0,0 +1,14 @@ +evennia.contrib.tutorials.batchprocessor package +================================================ + +.. automodule:: evennia.contrib.tutorials.batchprocessor + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.batchprocessor.example_batch_code diff --git a/docs/source/api/evennia.contrib.tutorials.bodyfunctions.bodyfunctions.rst b/docs/source/api/evennia.contrib.tutorials.bodyfunctions.bodyfunctions.rst new file mode 100644 index 0000000000..e539bf7e08 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.bodyfunctions.bodyfunctions.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.bodyfunctions.bodyfunctions module +============================================================ + +.. automodule:: evennia.contrib.tutorials.bodyfunctions.bodyfunctions + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.bodyfunctions.rst b/docs/source/api/evennia.contrib.tutorials.bodyfunctions.rst new file mode 100644 index 0000000000..43c1726d19 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.bodyfunctions.rst @@ -0,0 +1,15 @@ +evennia.contrib.tutorials.bodyfunctions package +=============================================== + +.. automodule:: evennia.contrib.tutorials.bodyfunctions + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.bodyfunctions.bodyfunctions + evennia.contrib.tutorials.bodyfunctions.tests diff --git a/docs/source/api/evennia.contrib.tutorials.bodyfunctions.tests.rst b/docs/source/api/evennia.contrib.tutorials.bodyfunctions.tests.rst new file mode 100644 index 0000000000..0fe4b768bf --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.bodyfunctions.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.bodyfunctions.tests module +==================================================== + +.. automodule:: evennia.contrib.tutorials.bodyfunctions.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.rst new file mode 100644 index 0000000000..162911450a --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.build_techdemo.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.build\_techdemo module +============================================================ + +.. automodule:: evennia.contrib.tutorials.evadventure.build_techdemo + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.build_world.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.build_world.rst new file mode 100644 index 0000000000..2a22e04974 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.build_world.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.build\_world module +========================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.build_world + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.characters.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.characters.rst new file mode 100644 index 0000000000..7981266660 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.characters.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.characters module +======================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.characters + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.rst new file mode 100644 index 0000000000..f057acb4f1 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.combat_turnbased.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.combat\_turnbased module +============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.combat_turnbased + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.commands.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.commands.rst new file mode 100644 index 0000000000..dbd6e31069 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.commands.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.commands module +===================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.commands + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.rst new file mode 100644 index 0000000000..e9df318075 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.dungeon.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.dungeon module +==================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.dungeon + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.enums.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.enums.rst new file mode 100644 index 0000000000..63b6c852ac --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.enums.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.enums module +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.enums + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.equipment.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.equipment.rst new file mode 100644 index 0000000000..9e3280927e --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.equipment.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.equipment module +====================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.equipment + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.npcs.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.npcs.rst new file mode 100644 index 0000000000..49d29135b9 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.npcs.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.npcs module +================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.npcs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.objects.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.objects.rst new file mode 100644 index 0000000000..4852550680 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.objects.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.objects module +==================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.objects + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.quests.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.quests.rst new file mode 100644 index 0000000000..560a68212d --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.quests.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.quests module +=================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.quests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.rst new file mode 100644 index 0000000000..e6a3eba526 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.random_tables.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.random\_tables module +=========================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.random_tables + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.rooms.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.rooms.rst new file mode 100644 index 0000000000..b4851491c6 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.rooms.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.rooms module +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.rooms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.rst new file mode 100644 index 0000000000..7f4925a71a --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.rst @@ -0,0 +1,35 @@ +evennia.contrib.tutorials.evadventure package +============================================= + +.. automodule:: evennia.contrib.tutorials.evadventure + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.evadventure.build_techdemo + evennia.contrib.tutorials.evadventure.build_world + evennia.contrib.tutorials.evadventure.characters + evennia.contrib.tutorials.evadventure.combat_turnbased + evennia.contrib.tutorials.evadventure.commands + evennia.contrib.tutorials.evadventure.dungeon + evennia.contrib.tutorials.evadventure.enums + evennia.contrib.tutorials.evadventure.equipment + evennia.contrib.tutorials.evadventure.npcs + evennia.contrib.tutorials.evadventure.objects + evennia.contrib.tutorials.evadventure.quests + evennia.contrib.tutorials.evadventure.random_tables + evennia.contrib.tutorials.evadventure.rooms + evennia.contrib.tutorials.evadventure.rules + evennia.contrib.tutorials.evadventure.shops + evennia.contrib.tutorials.evadventure.utils + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.evadventure.tests diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.rules.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.rules.rst new file mode 100644 index 0000000000..a47b67eae1 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.rules.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.rules module +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.rules + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.shops.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.shops.rst new file mode 100644 index 0000000000..6895f95604 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.shops.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.shops module +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.shops + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.md index 93eae7ea5d..f1147ca9e8 100644 --- a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.md +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.md @@ -13,6 +13,7 @@ evennia.contrib.tutorials.evadventure.tests :maxdepth: 6 evennia.contrib.tutorials.evadventure.tests.mixins + evennia.contrib.tutorials.evadventure.tests.test_characters evennia.contrib.tutorials.evadventure.tests.test_combat evennia.contrib.tutorials.evadventure.tests.test_commands evennia.contrib.tutorials.evadventure.tests.test_dungeon diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.rst new file mode 100644 index 0000000000..9971ff0281 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.mixins.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.mixins module +========================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.mixins + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.rst new file mode 100644 index 0000000000..41bd8553d4 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.rst @@ -0,0 +1,21 @@ +evennia.contrib.tutorials.evadventure.tests package +=================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.evadventure.tests.mixins + evennia.contrib.tutorials.evadventure.tests.test_characters + evennia.contrib.tutorials.evadventure.tests.test_combat + evennia.contrib.tutorials.evadventure.tests.test_commands + evennia.contrib.tutorials.evadventure.tests.test_dungeon + evennia.contrib.tutorials.evadventure.tests.test_quests + evennia.contrib.tutorials.evadventure.tests.test_rules + evennia.contrib.tutorials.evadventure.tests.test_utils diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.md b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.md new file mode 100644 index 0000000000..df42c7515d --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.md @@ -0,0 +1,10 @@ +```{eval-rst} +evennia.contrib.tutorials.evadventure.tests.test\_characters +=================================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_characters + :members: + :undoc-members: + :show-inheritance: + +``` \ No newline at end of file diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.rst new file mode 100644 index 0000000000..cfffdb7b67 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_characters.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_characters module +=================================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_characters + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.rst new file mode 100644 index 0000000000..a3d6713ab7 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_combat.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_combat module +=============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_combat + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.rst new file mode 100644 index 0000000000..d94c8730a7 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_commands.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_commands module +================================================================= + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_commands + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.rst new file mode 100644 index 0000000000..d00a1291a2 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_dungeon.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_dungeon module +================================================================ + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_dungeon + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.rst new file mode 100644 index 0000000000..0397f0bd11 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_quests.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_quests module +=============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_quests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.rst new file mode 100644 index 0000000000..3fc6eb9d97 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_rules.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_rules module +============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_rules + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst new file mode 100644 index 0000000000..39d3aba676 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.tests.test_utils.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.tests.test\_utils module +============================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.tests.test_utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.evadventure.utils.rst b/docs/source/api/evennia.contrib.tutorials.evadventure.utils.rst new file mode 100644 index 0000000000..bf410e4770 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.evadventure.utils.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.evadventure.utils module +================================================== + +.. automodule:: evennia.contrib.tutorials.evadventure.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.mirror.mirror.rst b/docs/source/api/evennia.contrib.tutorials.mirror.mirror.rst new file mode 100644 index 0000000000..be050f2fb4 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.mirror.mirror.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.mirror.mirror module +============================================== + +.. automodule:: evennia.contrib.tutorials.mirror.mirror + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.mirror.rst b/docs/source/api/evennia.contrib.tutorials.mirror.rst new file mode 100644 index 0000000000..59d4a44097 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.mirror.rst @@ -0,0 +1,14 @@ +evennia.contrib.tutorials.mirror package +======================================== + +.. automodule:: evennia.contrib.tutorials.mirror + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.mirror.mirror diff --git a/docs/source/api/evennia.contrib.tutorials.red_button.red_button.rst b/docs/source/api/evennia.contrib.tutorials.red_button.red_button.rst new file mode 100644 index 0000000000..1b1be56930 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.red_button.red_button.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.red\_button.red\_button module +======================================================== + +.. automodule:: evennia.contrib.tutorials.red_button.red_button + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.red_button.rst b/docs/source/api/evennia.contrib.tutorials.red_button.rst new file mode 100644 index 0000000000..8d2f10812e --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.red_button.rst @@ -0,0 +1,14 @@ +evennia.contrib.tutorials.red\_button package +============================================= + +.. automodule:: evennia.contrib.tutorials.red_button + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.red_button.red_button diff --git a/docs/source/api/evennia.contrib.tutorials.rst b/docs/source/api/evennia.contrib.tutorials.rst new file mode 100644 index 0000000000..0d978ea018 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.rst @@ -0,0 +1,19 @@ +evennia.contrib.tutorials package +================================= + +.. automodule:: evennia.contrib.tutorials + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.batchprocessor + evennia.contrib.tutorials.bodyfunctions + evennia.contrib.tutorials.evadventure + evennia.contrib.tutorials.mirror + evennia.contrib.tutorials.red_button + evennia.contrib.tutorials.talking_npc + evennia.contrib.tutorials.tutorial_world diff --git a/docs/source/api/evennia.contrib.tutorials.talking_npc.rst b/docs/source/api/evennia.contrib.tutorials.talking_npc.rst new file mode 100644 index 0000000000..8ca55a58f1 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.talking_npc.rst @@ -0,0 +1,15 @@ +evennia.contrib.tutorials.talking\_npc package +============================================== + +.. automodule:: evennia.contrib.tutorials.talking_npc + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.talking_npc.talking_npc + evennia.contrib.tutorials.talking_npc.tests diff --git a/docs/source/api/evennia.contrib.tutorials.talking_npc.talking_npc.rst b/docs/source/api/evennia.contrib.tutorials.talking_npc.talking_npc.rst new file mode 100644 index 0000000000..5205935812 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.talking_npc.talking_npc.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.talking\_npc.talking\_npc module +========================================================== + +.. automodule:: evennia.contrib.tutorials.talking_npc.talking_npc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.talking_npc.tests.rst b/docs/source/api/evennia.contrib.tutorials.talking_npc.tests.rst new file mode 100644 index 0000000000..66395a2d4a --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.talking_npc.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.talking\_npc.tests module +=================================================== + +.. automodule:: evennia.contrib.tutorials.talking_npc.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.tutorial_world.intro_menu.rst b/docs/source/api/evennia.contrib.tutorials.tutorial_world.intro_menu.rst new file mode 100644 index 0000000000..9714358cb0 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.tutorial_world.intro_menu.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.tutorial\_world.intro\_menu module +============================================================ + +.. automodule:: evennia.contrib.tutorials.tutorial_world.intro_menu + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.tutorial_world.mob.rst b/docs/source/api/evennia.contrib.tutorials.tutorial_world.mob.rst new file mode 100644 index 0000000000..94fded7116 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.tutorial_world.mob.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.tutorial\_world.mob module +==================================================== + +.. automodule:: evennia.contrib.tutorials.tutorial_world.mob + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.tutorial_world.objects.rst b/docs/source/api/evennia.contrib.tutorials.tutorial_world.objects.rst new file mode 100644 index 0000000000..bcf874d7be --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.tutorial_world.objects.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.tutorial\_world.objects module +======================================================== + +.. automodule:: evennia.contrib.tutorials.tutorial_world.objects + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.tutorial_world.rooms.rst b/docs/source/api/evennia.contrib.tutorials.tutorial_world.rooms.rst new file mode 100644 index 0000000000..bffd71dce1 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.tutorial_world.rooms.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.tutorial\_world.rooms module +====================================================== + +.. automodule:: evennia.contrib.tutorials.tutorial_world.rooms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.tutorials.tutorial_world.rst b/docs/source/api/evennia.contrib.tutorials.tutorial_world.rst new file mode 100644 index 0000000000..b81db86cb8 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.tutorial_world.rst @@ -0,0 +1,18 @@ +evennia.contrib.tutorials.tutorial\_world package +================================================= + +.. automodule:: evennia.contrib.tutorials.tutorial_world + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.tutorials.tutorial_world.intro_menu + evennia.contrib.tutorials.tutorial_world.mob + evennia.contrib.tutorials.tutorial_world.objects + evennia.contrib.tutorials.tutorial_world.rooms + evennia.contrib.tutorials.tutorial_world.tests diff --git a/docs/source/api/evennia.contrib.tutorials.tutorial_world.tests.rst b/docs/source/api/evennia.contrib.tutorials.tutorial_world.tests.rst new file mode 100644 index 0000000000..16d88cf6e4 --- /dev/null +++ b/docs/source/api/evennia.contrib.tutorials.tutorial_world.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.tutorials.tutorial\_world.tests module +====================================================== + +.. automodule:: evennia.contrib.tutorials.tutorial_world.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.auditing.outputs.rst b/docs/source/api/evennia.contrib.utils.auditing.outputs.rst new file mode 100644 index 0000000000..5d348fdbbb --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.auditing.outputs.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.auditing.outputs module +============================================= + +.. automodule:: evennia.contrib.utils.auditing.outputs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.auditing.rst b/docs/source/api/evennia.contrib.utils.auditing.rst new file mode 100644 index 0000000000..a0297059b2 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.auditing.rst @@ -0,0 +1,16 @@ +evennia.contrib.utils.auditing package +====================================== + +.. automodule:: evennia.contrib.utils.auditing + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.utils.auditing.outputs + evennia.contrib.utils.auditing.server + evennia.contrib.utils.auditing.tests diff --git a/docs/source/api/evennia.contrib.utils.auditing.server.rst b/docs/source/api/evennia.contrib.utils.auditing.server.rst new file mode 100644 index 0000000000..53aeaa214b --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.auditing.server.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.auditing.server module +============================================ + +.. automodule:: evennia.contrib.utils.auditing.server + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.auditing.tests.rst b/docs/source/api/evennia.contrib.utils.auditing.tests.rst new file mode 100644 index 0000000000..de177d2714 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.auditing.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.auditing.tests module +=========================================== + +.. automodule:: evennia.contrib.utils.auditing.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.fieldfill.fieldfill.rst b/docs/source/api/evennia.contrib.utils.fieldfill.fieldfill.rst new file mode 100644 index 0000000000..fc7dfa3a35 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.fieldfill.fieldfill.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.fieldfill.fieldfill module +================================================ + +.. automodule:: evennia.contrib.utils.fieldfill.fieldfill + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.fieldfill.rst b/docs/source/api/evennia.contrib.utils.fieldfill.rst new file mode 100644 index 0000000000..de5b345a0e --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.fieldfill.rst @@ -0,0 +1,14 @@ +evennia.contrib.utils.fieldfill package +======================================= + +.. automodule:: evennia.contrib.utils.fieldfill + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.utils.fieldfill.fieldfill diff --git a/docs/source/api/evennia.contrib.utils.random_string_generator.random_string_generator.rst b/docs/source/api/evennia.contrib.utils.random_string_generator.random_string_generator.rst new file mode 100644 index 0000000000..625f4f1f98 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.random_string_generator.random_string_generator.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.random\_string\_generator.random\_string\_generator module +================================================================================ + +.. automodule:: evennia.contrib.utils.random_string_generator.random_string_generator + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.random_string_generator.rst b/docs/source/api/evennia.contrib.utils.random_string_generator.rst new file mode 100644 index 0000000000..7034519c48 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.random_string_generator.rst @@ -0,0 +1,15 @@ +evennia.contrib.utils.random\_string\_generator package +======================================================= + +.. automodule:: evennia.contrib.utils.random_string_generator + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.utils.random_string_generator.random_string_generator + evennia.contrib.utils.random_string_generator.tests diff --git a/docs/source/api/evennia.contrib.utils.random_string_generator.tests.rst b/docs/source/api/evennia.contrib.utils.random_string_generator.tests.rst new file mode 100644 index 0000000000..e32af2917f --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.random_string_generator.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.random\_string\_generator.tests module +============================================================ + +.. automodule:: evennia.contrib.utils.random_string_generator.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.rst b/docs/source/api/evennia.contrib.utils.rst new file mode 100644 index 0000000000..e157f0937d --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.rst @@ -0,0 +1,16 @@ +evennia.contrib.utils package +============================= + +.. automodule:: evennia.contrib.utils + :members: + :undoc-members: + :show-inheritance: + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.utils.auditing + evennia.contrib.utils.fieldfill + evennia.contrib.utils.random_string_generator + evennia.contrib.utils.tree_select diff --git a/docs/source/api/evennia.contrib.utils.tree_select.rst b/docs/source/api/evennia.contrib.utils.tree_select.rst new file mode 100644 index 0000000000..0b30d36be2 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.tree_select.rst @@ -0,0 +1,15 @@ +evennia.contrib.utils.tree\_select package +========================================== + +.. automodule:: evennia.contrib.utils.tree_select + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.contrib.utils.tree_select.tests + evennia.contrib.utils.tree_select.tree_select diff --git a/docs/source/api/evennia.contrib.utils.tree_select.tests.rst b/docs/source/api/evennia.contrib.utils.tree_select.tests.rst new file mode 100644 index 0000000000..7aec68524b --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.tree_select.tests.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.tree\_select.tests module +=============================================== + +.. automodule:: evennia.contrib.utils.tree_select.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.contrib.utils.tree_select.tree_select.rst b/docs/source/api/evennia.contrib.utils.tree_select.tree_select.rst new file mode 100644 index 0000000000..4f089494a0 --- /dev/null +++ b/docs/source/api/evennia.contrib.utils.tree_select.tree_select.rst @@ -0,0 +1,7 @@ +evennia.contrib.utils.tree\_select.tree\_select module +====================================================== + +.. automodule:: evennia.contrib.utils.tree_select.tree_select + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.help.filehelp.rst b/docs/source/api/evennia.help.filehelp.rst new file mode 100644 index 0000000000..8febe4e120 --- /dev/null +++ b/docs/source/api/evennia.help.filehelp.rst @@ -0,0 +1,7 @@ +evennia.help.filehelp module +============================ + +.. automodule:: evennia.help.filehelp + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.help.manager.rst b/docs/source/api/evennia.help.manager.rst new file mode 100644 index 0000000000..46b62b695c --- /dev/null +++ b/docs/source/api/evennia.help.manager.rst @@ -0,0 +1,7 @@ +evennia.help.manager module +=========================== + +.. automodule:: evennia.help.manager + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.help.models.rst b/docs/source/api/evennia.help.models.rst new file mode 100644 index 0000000000..18c3dfccd5 --- /dev/null +++ b/docs/source/api/evennia.help.models.rst @@ -0,0 +1,7 @@ +evennia.help.models module +========================== + +.. automodule:: evennia.help.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.help.rst b/docs/source/api/evennia.help.rst new file mode 100644 index 0000000000..1054d0a90e --- /dev/null +++ b/docs/source/api/evennia.help.rst @@ -0,0 +1,17 @@ +evennia.help package +==================== + +.. automodule:: evennia.help + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.help.filehelp + evennia.help.manager + evennia.help.models + evennia.help.utils diff --git a/docs/source/api/evennia.help.utils.rst b/docs/source/api/evennia.help.utils.rst new file mode 100644 index 0000000000..788f281ce2 --- /dev/null +++ b/docs/source/api/evennia.help.utils.rst @@ -0,0 +1,7 @@ +evennia.help.utils module +========================= + +.. automodule:: evennia.help.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.locks.lockfuncs.rst b/docs/source/api/evennia.locks.lockfuncs.rst new file mode 100644 index 0000000000..edb024f28e --- /dev/null +++ b/docs/source/api/evennia.locks.lockfuncs.rst @@ -0,0 +1,7 @@ +evennia.locks.lockfuncs module +============================== + +.. automodule:: evennia.locks.lockfuncs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.locks.lockhandler.rst b/docs/source/api/evennia.locks.lockhandler.rst new file mode 100644 index 0000000000..0d5334e56d --- /dev/null +++ b/docs/source/api/evennia.locks.lockhandler.rst @@ -0,0 +1,7 @@ +evennia.locks.lockhandler module +================================ + +.. automodule:: evennia.locks.lockhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.locks.rst b/docs/source/api/evennia.locks.rst new file mode 100644 index 0000000000..c3661ed277 --- /dev/null +++ b/docs/source/api/evennia.locks.rst @@ -0,0 +1,15 @@ +evennia.locks package +===================== + +.. automodule:: evennia.locks + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.locks.lockfuncs + evennia.locks.lockhandler diff --git a/docs/source/api/evennia.objects.manager.rst b/docs/source/api/evennia.objects.manager.rst new file mode 100644 index 0000000000..802bea6c37 --- /dev/null +++ b/docs/source/api/evennia.objects.manager.rst @@ -0,0 +1,7 @@ +evennia.objects.manager module +============================== + +.. automodule:: evennia.objects.manager + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.objects.models.rst b/docs/source/api/evennia.objects.models.rst new file mode 100644 index 0000000000..dd33d05d0a --- /dev/null +++ b/docs/source/api/evennia.objects.models.rst @@ -0,0 +1,7 @@ +evennia.objects.models module +============================= + +.. automodule:: evennia.objects.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.objects.objects.rst b/docs/source/api/evennia.objects.objects.rst new file mode 100644 index 0000000000..7061bed07a --- /dev/null +++ b/docs/source/api/evennia.objects.objects.rst @@ -0,0 +1,7 @@ +evennia.objects.objects module +============================== + +.. automodule:: evennia.objects.objects + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.objects.rst b/docs/source/api/evennia.objects.rst new file mode 100644 index 0000000000..7532d1ac11 --- /dev/null +++ b/docs/source/api/evennia.objects.rst @@ -0,0 +1,16 @@ +evennia.objects package +======================= + +.. automodule:: evennia.objects + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.objects.manager + evennia.objects.models + evennia.objects.objects diff --git a/docs/source/api/evennia.prototypes.menus.rst b/docs/source/api/evennia.prototypes.menus.rst new file mode 100644 index 0000000000..6f80f77bd6 --- /dev/null +++ b/docs/source/api/evennia.prototypes.menus.rst @@ -0,0 +1,7 @@ +evennia.prototypes.menus module +=============================== + +.. automodule:: evennia.prototypes.menus + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.prototypes.protfuncs.rst b/docs/source/api/evennia.prototypes.protfuncs.rst new file mode 100644 index 0000000000..b6b9ce4616 --- /dev/null +++ b/docs/source/api/evennia.prototypes.protfuncs.rst @@ -0,0 +1,7 @@ +evennia.prototypes.protfuncs module +=================================== + +.. automodule:: evennia.prototypes.protfuncs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.prototypes.prototypes.rst b/docs/source/api/evennia.prototypes.prototypes.rst new file mode 100644 index 0000000000..bb1ed1014f --- /dev/null +++ b/docs/source/api/evennia.prototypes.prototypes.rst @@ -0,0 +1,7 @@ +evennia.prototypes.prototypes module +==================================== + +.. automodule:: evennia.prototypes.prototypes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.prototypes.rst b/docs/source/api/evennia.prototypes.rst new file mode 100644 index 0000000000..7efa2bafbc --- /dev/null +++ b/docs/source/api/evennia.prototypes.rst @@ -0,0 +1,17 @@ +evennia.prototypes package +========================== + +.. automodule:: evennia.prototypes + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.prototypes.menus + evennia.prototypes.protfuncs + evennia.prototypes.prototypes + evennia.prototypes.spawner diff --git a/docs/source/api/evennia.prototypes.spawner.rst b/docs/source/api/evennia.prototypes.spawner.rst new file mode 100644 index 0000000000..e94c8bc5d6 --- /dev/null +++ b/docs/source/api/evennia.prototypes.spawner.rst @@ -0,0 +1,7 @@ +evennia.prototypes.spawner module +================================= + +.. automodule:: evennia.prototypes.spawner + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.rst b/docs/source/api/evennia.rst new file mode 100644 index 0000000000..96692c5117 --- /dev/null +++ b/docs/source/api/evennia.rst @@ -0,0 +1,32 @@ +evennia package +=============== + +.. automodule:: evennia + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.settings_default + + +.. toctree:: + :maxdepth: 6 + + evennia.accounts + evennia.commands + evennia.comms + evennia.contrib + evennia.help + evennia.locks + evennia.objects + evennia.prototypes + evennia.scripts + evennia.server + evennia.typeclasses + evennia.utils + evennia.web diff --git a/docs/source/api/evennia.scripts.manager.rst b/docs/source/api/evennia.scripts.manager.rst new file mode 100644 index 0000000000..74b306ed8d --- /dev/null +++ b/docs/source/api/evennia.scripts.manager.rst @@ -0,0 +1,7 @@ +evennia.scripts.manager module +============================== + +.. automodule:: evennia.scripts.manager + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.scripts.models.rst b/docs/source/api/evennia.scripts.models.rst new file mode 100644 index 0000000000..f7a1417fae --- /dev/null +++ b/docs/source/api/evennia.scripts.models.rst @@ -0,0 +1,7 @@ +evennia.scripts.models module +============================= + +.. automodule:: evennia.scripts.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.scripts.monitorhandler.rst b/docs/source/api/evennia.scripts.monitorhandler.rst new file mode 100644 index 0000000000..56b124ddc8 --- /dev/null +++ b/docs/source/api/evennia.scripts.monitorhandler.rst @@ -0,0 +1,7 @@ +evennia.scripts.monitorhandler module +===================================== + +.. automodule:: evennia.scripts.monitorhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.scripts.rst b/docs/source/api/evennia.scripts.rst new file mode 100644 index 0000000000..8a11356c9d --- /dev/null +++ b/docs/source/api/evennia.scripts.rst @@ -0,0 +1,20 @@ +evennia.scripts package +======================= + +.. automodule:: evennia.scripts + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.scripts.manager + evennia.scripts.models + evennia.scripts.monitorhandler + evennia.scripts.scripthandler + evennia.scripts.scripts + evennia.scripts.taskhandler + evennia.scripts.tickerhandler diff --git a/docs/source/api/evennia.scripts.scripthandler.rst b/docs/source/api/evennia.scripts.scripthandler.rst new file mode 100644 index 0000000000..2b249b3a17 --- /dev/null +++ b/docs/source/api/evennia.scripts.scripthandler.rst @@ -0,0 +1,7 @@ +evennia.scripts.scripthandler module +==================================== + +.. automodule:: evennia.scripts.scripthandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.scripts.scripts.rst b/docs/source/api/evennia.scripts.scripts.rst new file mode 100644 index 0000000000..f23529fb57 --- /dev/null +++ b/docs/source/api/evennia.scripts.scripts.rst @@ -0,0 +1,7 @@ +evennia.scripts.scripts module +============================== + +.. automodule:: evennia.scripts.scripts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.scripts.taskhandler.rst b/docs/source/api/evennia.scripts.taskhandler.rst new file mode 100644 index 0000000000..194d9f4639 --- /dev/null +++ b/docs/source/api/evennia.scripts.taskhandler.rst @@ -0,0 +1,7 @@ +evennia.scripts.taskhandler module +================================== + +.. automodule:: evennia.scripts.taskhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.scripts.tickerhandler.rst b/docs/source/api/evennia.scripts.tickerhandler.rst new file mode 100644 index 0000000000..cf1992afb4 --- /dev/null +++ b/docs/source/api/evennia.scripts.tickerhandler.rst @@ -0,0 +1,7 @@ +evennia.scripts.tickerhandler module +==================================== + +.. automodule:: evennia.scripts.tickerhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.amp_client.rst b/docs/source/api/evennia.server.amp_client.rst new file mode 100644 index 0000000000..9aa130109f --- /dev/null +++ b/docs/source/api/evennia.server.amp_client.rst @@ -0,0 +1,7 @@ +evennia.server.amp\_client module +================================= + +.. automodule:: evennia.server.amp_client + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.connection_wizard.rst b/docs/source/api/evennia.server.connection_wizard.rst new file mode 100644 index 0000000000..52ad626510 --- /dev/null +++ b/docs/source/api/evennia.server.connection_wizard.rst @@ -0,0 +1,7 @@ +evennia.server.connection\_wizard module +======================================== + +.. automodule:: evennia.server.connection_wizard + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.deprecations.rst b/docs/source/api/evennia.server.deprecations.rst new file mode 100644 index 0000000000..aacb232c1f --- /dev/null +++ b/docs/source/api/evennia.server.deprecations.rst @@ -0,0 +1,7 @@ +evennia.server.deprecations module +================================== + +.. automodule:: evennia.server.deprecations + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.evennia_launcher.rst b/docs/source/api/evennia.server.evennia_launcher.rst new file mode 100644 index 0000000000..70821160b8 --- /dev/null +++ b/docs/source/api/evennia.server.evennia_launcher.rst @@ -0,0 +1,7 @@ +evennia.server.evennia\_launcher module +======================================= + +.. automodule:: evennia.server.evennia_launcher + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.game_index_client.client.rst b/docs/source/api/evennia.server.game_index_client.client.rst new file mode 100644 index 0000000000..1faec15410 --- /dev/null +++ b/docs/source/api/evennia.server.game_index_client.client.rst @@ -0,0 +1,7 @@ +evennia.server.game\_index\_client.client module +================================================ + +.. automodule:: evennia.server.game_index_client.client + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.game_index_client.rst b/docs/source/api/evennia.server.game_index_client.rst new file mode 100644 index 0000000000..46d81e24d9 --- /dev/null +++ b/docs/source/api/evennia.server.game_index_client.rst @@ -0,0 +1,15 @@ +evennia.server.game\_index\_client package +========================================== + +.. automodule:: evennia.server.game_index_client + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.server.game_index_client.client + evennia.server.game_index_client.service diff --git a/docs/source/api/evennia.server.game_index_client.service.rst b/docs/source/api/evennia.server.game_index_client.service.rst new file mode 100644 index 0000000000..d6061f642c --- /dev/null +++ b/docs/source/api/evennia.server.game_index_client.service.rst @@ -0,0 +1,7 @@ +evennia.server.game\_index\_client.service module +================================================= + +.. automodule:: evennia.server.game_index_client.service + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.initial_setup.rst b/docs/source/api/evennia.server.initial_setup.rst new file mode 100644 index 0000000000..f03c870f24 --- /dev/null +++ b/docs/source/api/evennia.server.initial_setup.rst @@ -0,0 +1,7 @@ +evennia.server.initial\_setup module +==================================== + +.. automodule:: evennia.server.initial_setup + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.inputfuncs.rst b/docs/source/api/evennia.server.inputfuncs.rst new file mode 100644 index 0000000000..60a771f777 --- /dev/null +++ b/docs/source/api/evennia.server.inputfuncs.rst @@ -0,0 +1,7 @@ +evennia.server.inputfuncs module +================================ + +.. automodule:: evennia.server.inputfuncs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.manager.rst b/docs/source/api/evennia.server.manager.rst new file mode 100644 index 0000000000..69f687203b --- /dev/null +++ b/docs/source/api/evennia.server.manager.rst @@ -0,0 +1,7 @@ +evennia.server.manager module +============================= + +.. automodule:: evennia.server.manager + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.models.rst b/docs/source/api/evennia.server.models.rst new file mode 100644 index 0000000000..c5fadb43a9 --- /dev/null +++ b/docs/source/api/evennia.server.models.rst @@ -0,0 +1,7 @@ +evennia.server.models module +============================ + +.. automodule:: evennia.server.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.amp.rst b/docs/source/api/evennia.server.portal.amp.rst new file mode 100644 index 0000000000..bd11c4ba75 --- /dev/null +++ b/docs/source/api/evennia.server.portal.amp.rst @@ -0,0 +1,7 @@ +evennia.server.portal.amp module +================================ + +.. automodule:: evennia.server.portal.amp + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.amp_server.rst b/docs/source/api/evennia.server.portal.amp_server.rst new file mode 100644 index 0000000000..c401deb66f --- /dev/null +++ b/docs/source/api/evennia.server.portal.amp_server.rst @@ -0,0 +1,7 @@ +evennia.server.portal.amp\_server module +======================================== + +.. automodule:: evennia.server.portal.amp_server + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.grapevine.rst b/docs/source/api/evennia.server.portal.grapevine.rst new file mode 100644 index 0000000000..f264ff5c58 --- /dev/null +++ b/docs/source/api/evennia.server.portal.grapevine.rst @@ -0,0 +1,7 @@ +evennia.server.portal.grapevine module +====================================== + +.. automodule:: evennia.server.portal.grapevine + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.irc.rst b/docs/source/api/evennia.server.portal.irc.rst new file mode 100644 index 0000000000..8600dfd321 --- /dev/null +++ b/docs/source/api/evennia.server.portal.irc.rst @@ -0,0 +1,7 @@ +evennia.server.portal.irc module +================================ + +.. automodule:: evennia.server.portal.irc + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.mccp.rst b/docs/source/api/evennia.server.portal.mccp.rst new file mode 100644 index 0000000000..07b1b59ba4 --- /dev/null +++ b/docs/source/api/evennia.server.portal.mccp.rst @@ -0,0 +1,7 @@ +evennia.server.portal.mccp module +================================= + +.. automodule:: evennia.server.portal.mccp + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.mssp.rst b/docs/source/api/evennia.server.portal.mssp.rst new file mode 100644 index 0000000000..1c11924208 --- /dev/null +++ b/docs/source/api/evennia.server.portal.mssp.rst @@ -0,0 +1,7 @@ +evennia.server.portal.mssp module +================================= + +.. automodule:: evennia.server.portal.mssp + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.mxp.rst b/docs/source/api/evennia.server.portal.mxp.rst new file mode 100644 index 0000000000..4388abb641 --- /dev/null +++ b/docs/source/api/evennia.server.portal.mxp.rst @@ -0,0 +1,7 @@ +evennia.server.portal.mxp module +================================ + +.. automodule:: evennia.server.portal.mxp + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.naws.rst b/docs/source/api/evennia.server.portal.naws.rst new file mode 100644 index 0000000000..cb037f8ee4 --- /dev/null +++ b/docs/source/api/evennia.server.portal.naws.rst @@ -0,0 +1,7 @@ +evennia.server.portal.naws module +================================= + +.. automodule:: evennia.server.portal.naws + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.portal.rst b/docs/source/api/evennia.server.portal.portal.rst new file mode 100644 index 0000000000..0d2ec92400 --- /dev/null +++ b/docs/source/api/evennia.server.portal.portal.rst @@ -0,0 +1,7 @@ +evennia.server.portal.portal module +=================================== + +.. automodule:: evennia.server.portal.portal + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.portalsessionhandler.rst b/docs/source/api/evennia.server.portal.portalsessionhandler.rst new file mode 100644 index 0000000000..f5287f88b8 --- /dev/null +++ b/docs/source/api/evennia.server.portal.portalsessionhandler.rst @@ -0,0 +1,7 @@ +evennia.server.portal.portalsessionhandler module +================================================= + +.. automodule:: evennia.server.portal.portalsessionhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.rss.rst b/docs/source/api/evennia.server.portal.rss.rst new file mode 100644 index 0000000000..e7dde8bf7f --- /dev/null +++ b/docs/source/api/evennia.server.portal.rss.rst @@ -0,0 +1,7 @@ +evennia.server.portal.rss module +================================ + +.. automodule:: evennia.server.portal.rss + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.rst b/docs/source/api/evennia.server.portal.rst new file mode 100644 index 0000000000..07e2590206 --- /dev/null +++ b/docs/source/api/evennia.server.portal.rst @@ -0,0 +1,34 @@ +evennia.server.portal package +============================= + +.. automodule:: evennia.server.portal + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.server.portal.amp + evennia.server.portal.amp_server + evennia.server.portal.grapevine + evennia.server.portal.irc + evennia.server.portal.mccp + evennia.server.portal.mssp + evennia.server.portal.mxp + evennia.server.portal.naws + evennia.server.portal.portal + evennia.server.portal.portalsessionhandler + evennia.server.portal.rss + evennia.server.portal.ssh + evennia.server.portal.ssl + evennia.server.portal.suppress_ga + evennia.server.portal.telnet + evennia.server.portal.telnet_oob + evennia.server.portal.telnet_ssl + evennia.server.portal.tests + evennia.server.portal.ttype + evennia.server.portal.webclient + evennia.server.portal.webclient_ajax diff --git a/docs/source/api/evennia.server.portal.ssh.rst b/docs/source/api/evennia.server.portal.ssh.rst new file mode 100644 index 0000000000..6cd0d8b114 --- /dev/null +++ b/docs/source/api/evennia.server.portal.ssh.rst @@ -0,0 +1,7 @@ +evennia.server.portal.ssh module +================================ + +.. automodule:: evennia.server.portal.ssh + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.ssl.rst b/docs/source/api/evennia.server.portal.ssl.rst new file mode 100644 index 0000000000..76a9344833 --- /dev/null +++ b/docs/source/api/evennia.server.portal.ssl.rst @@ -0,0 +1,7 @@ +evennia.server.portal.ssl module +================================ + +.. automodule:: evennia.server.portal.ssl + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.suppress_ga.rst b/docs/source/api/evennia.server.portal.suppress_ga.rst new file mode 100644 index 0000000000..3dc234d103 --- /dev/null +++ b/docs/source/api/evennia.server.portal.suppress_ga.rst @@ -0,0 +1,7 @@ +evennia.server.portal.suppress\_ga module +========================================= + +.. automodule:: evennia.server.portal.suppress_ga + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.telnet.rst b/docs/source/api/evennia.server.portal.telnet.rst new file mode 100644 index 0000000000..debd283f04 --- /dev/null +++ b/docs/source/api/evennia.server.portal.telnet.rst @@ -0,0 +1,7 @@ +evennia.server.portal.telnet module +=================================== + +.. automodule:: evennia.server.portal.telnet + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.telnet_oob.rst b/docs/source/api/evennia.server.portal.telnet_oob.rst new file mode 100644 index 0000000000..a882430740 --- /dev/null +++ b/docs/source/api/evennia.server.portal.telnet_oob.rst @@ -0,0 +1,7 @@ +evennia.server.portal.telnet\_oob module +======================================== + +.. automodule:: evennia.server.portal.telnet_oob + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.telnet_ssl.rst b/docs/source/api/evennia.server.portal.telnet_ssl.rst new file mode 100644 index 0000000000..694f99dd2a --- /dev/null +++ b/docs/source/api/evennia.server.portal.telnet_ssl.rst @@ -0,0 +1,7 @@ +evennia.server.portal.telnet\_ssl module +======================================== + +.. automodule:: evennia.server.portal.telnet_ssl + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.tests.rst b/docs/source/api/evennia.server.portal.tests.rst new file mode 100644 index 0000000000..d763f3d333 --- /dev/null +++ b/docs/source/api/evennia.server.portal.tests.rst @@ -0,0 +1,7 @@ +evennia.server.portal.tests module +================================== + +.. automodule:: evennia.server.portal.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.ttype.rst b/docs/source/api/evennia.server.portal.ttype.rst new file mode 100644 index 0000000000..3851ee81c1 --- /dev/null +++ b/docs/source/api/evennia.server.portal.ttype.rst @@ -0,0 +1,7 @@ +evennia.server.portal.ttype module +================================== + +.. automodule:: evennia.server.portal.ttype + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.webclient.rst b/docs/source/api/evennia.server.portal.webclient.rst new file mode 100644 index 0000000000..67ef7c1934 --- /dev/null +++ b/docs/source/api/evennia.server.portal.webclient.rst @@ -0,0 +1,7 @@ +evennia.server.portal.webclient module +====================================== + +.. automodule:: evennia.server.portal.webclient + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.portal.webclient_ajax.rst b/docs/source/api/evennia.server.portal.webclient_ajax.rst new file mode 100644 index 0000000000..ea74aa238c --- /dev/null +++ b/docs/source/api/evennia.server.portal.webclient_ajax.rst @@ -0,0 +1,7 @@ +evennia.server.portal.webclient\_ajax module +============================================ + +.. automodule:: evennia.server.portal.webclient_ajax + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.profiling.dummyrunner.rst b/docs/source/api/evennia.server.profiling.dummyrunner.rst new file mode 100644 index 0000000000..510fc8061b --- /dev/null +++ b/docs/source/api/evennia.server.profiling.dummyrunner.rst @@ -0,0 +1,7 @@ +evennia.server.profiling.dummyrunner module +=========================================== + +.. automodule:: evennia.server.profiling.dummyrunner + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.profiling.dummyrunner_settings.rst b/docs/source/api/evennia.server.profiling.dummyrunner_settings.rst new file mode 100644 index 0000000000..20c4a9ccbe --- /dev/null +++ b/docs/source/api/evennia.server.profiling.dummyrunner_settings.rst @@ -0,0 +1,7 @@ +evennia.server.profiling.dummyrunner\_settings module +===================================================== + +.. automodule:: evennia.server.profiling.dummyrunner_settings + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.profiling.memplot.rst b/docs/source/api/evennia.server.profiling.memplot.rst new file mode 100644 index 0000000000..671fe70e00 --- /dev/null +++ b/docs/source/api/evennia.server.profiling.memplot.rst @@ -0,0 +1,7 @@ +evennia.server.profiling.memplot module +======================================= + +.. automodule:: evennia.server.profiling.memplot + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.profiling.rst b/docs/source/api/evennia.server.profiling.rst new file mode 100644 index 0000000000..61d427e041 --- /dev/null +++ b/docs/source/api/evennia.server.profiling.rst @@ -0,0 +1,20 @@ +evennia.server.profiling package +================================ + +.. automodule:: evennia.server.profiling + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.server.profiling.dummyrunner + evennia.server.profiling.dummyrunner_settings + evennia.server.profiling.memplot + evennia.server.profiling.settings_mixin + evennia.server.profiling.test_queries + evennia.server.profiling.tests + evennia.server.profiling.timetrace diff --git a/docs/source/api/evennia.server.profiling.settings_mixin.rst b/docs/source/api/evennia.server.profiling.settings_mixin.rst new file mode 100644 index 0000000000..ddadc21b48 --- /dev/null +++ b/docs/source/api/evennia.server.profiling.settings_mixin.rst @@ -0,0 +1,7 @@ +evennia.server.profiling.settings\_mixin module +=============================================== + +.. automodule:: evennia.server.profiling.settings_mixin + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.profiling.test_queries.rst b/docs/source/api/evennia.server.profiling.test_queries.rst new file mode 100644 index 0000000000..a7ea4eeeb6 --- /dev/null +++ b/docs/source/api/evennia.server.profiling.test_queries.rst @@ -0,0 +1,7 @@ +evennia.server.profiling.test\_queries module +============================================= + +.. automodule:: evennia.server.profiling.test_queries + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.profiling.tests.rst b/docs/source/api/evennia.server.profiling.tests.rst new file mode 100644 index 0000000000..58d2c0a678 --- /dev/null +++ b/docs/source/api/evennia.server.profiling.tests.rst @@ -0,0 +1,7 @@ +evennia.server.profiling.tests module +===================================== + +.. automodule:: evennia.server.profiling.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.profiling.timetrace.rst b/docs/source/api/evennia.server.profiling.timetrace.rst new file mode 100644 index 0000000000..07a19a4b25 --- /dev/null +++ b/docs/source/api/evennia.server.profiling.timetrace.rst @@ -0,0 +1,7 @@ +evennia.server.profiling.timetrace module +========================================= + +.. automodule:: evennia.server.profiling.timetrace + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.rst b/docs/source/api/evennia.server.rst new file mode 100644 index 0000000000..1f5ac39e0a --- /dev/null +++ b/docs/source/api/evennia.server.rst @@ -0,0 +1,37 @@ +evennia.server package +====================== + +.. automodule:: evennia.server + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.server.amp_client + evennia.server.connection_wizard + evennia.server.deprecations + evennia.server.evennia_launcher + evennia.server.initial_setup + evennia.server.inputfuncs + evennia.server.manager + evennia.server.models + evennia.server.server + evennia.server.serversession + evennia.server.session + evennia.server.sessionhandler + evennia.server.signals + evennia.server.throttle + evennia.server.validators + evennia.server.webserver + + +.. toctree:: + :maxdepth: 6 + + evennia.server.game_index_client + evennia.server.portal + evennia.server.profiling diff --git a/docs/source/api/evennia.server.server.rst b/docs/source/api/evennia.server.server.rst new file mode 100644 index 0000000000..f19e598541 --- /dev/null +++ b/docs/source/api/evennia.server.server.rst @@ -0,0 +1,7 @@ +evennia.server.server module +============================ + +.. automodule:: evennia.server.server + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.serversession.rst b/docs/source/api/evennia.server.serversession.rst new file mode 100644 index 0000000000..9a34500eac --- /dev/null +++ b/docs/source/api/evennia.server.serversession.rst @@ -0,0 +1,7 @@ +evennia.server.serversession module +=================================== + +.. automodule:: evennia.server.serversession + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.session.rst b/docs/source/api/evennia.server.session.rst new file mode 100644 index 0000000000..724de92312 --- /dev/null +++ b/docs/source/api/evennia.server.session.rst @@ -0,0 +1,7 @@ +evennia.server.session module +============================= + +.. automodule:: evennia.server.session + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.sessionhandler.rst b/docs/source/api/evennia.server.sessionhandler.rst new file mode 100644 index 0000000000..2ecede5faa --- /dev/null +++ b/docs/source/api/evennia.server.sessionhandler.rst @@ -0,0 +1,7 @@ +evennia.server.sessionhandler module +==================================== + +.. automodule:: evennia.server.sessionhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.signals.rst b/docs/source/api/evennia.server.signals.rst new file mode 100644 index 0000000000..ab1f13cb8b --- /dev/null +++ b/docs/source/api/evennia.server.signals.rst @@ -0,0 +1,7 @@ +evennia.server.signals module +============================= + +.. automodule:: evennia.server.signals + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.throttle.rst b/docs/source/api/evennia.server.throttle.rst new file mode 100644 index 0000000000..95832cdda4 --- /dev/null +++ b/docs/source/api/evennia.server.throttle.rst @@ -0,0 +1,7 @@ +evennia.server.throttle module +============================== + +.. automodule:: evennia.server.throttle + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.validators.rst b/docs/source/api/evennia.server.validators.rst new file mode 100644 index 0000000000..3aa6cd87c5 --- /dev/null +++ b/docs/source/api/evennia.server.validators.rst @@ -0,0 +1,7 @@ +evennia.server.validators module +================================ + +.. automodule:: evennia.server.validators + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.server.webserver.rst b/docs/source/api/evennia.server.webserver.rst new file mode 100644 index 0000000000..286f51a9da --- /dev/null +++ b/docs/source/api/evennia.server.webserver.rst @@ -0,0 +1,7 @@ +evennia.server.webserver module +=============================== + +.. automodule:: evennia.server.webserver + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.settings_default.rst b/docs/source/api/evennia.settings_default.rst new file mode 100644 index 0000000000..2c990344db --- /dev/null +++ b/docs/source/api/evennia.settings_default.rst @@ -0,0 +1,7 @@ +evennia.settings\_default module +================================ + +.. automodule:: evennia.settings_default + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.typeclasses.attributes.rst b/docs/source/api/evennia.typeclasses.attributes.rst new file mode 100644 index 0000000000..46239c9424 --- /dev/null +++ b/docs/source/api/evennia.typeclasses.attributes.rst @@ -0,0 +1,7 @@ +evennia.typeclasses.attributes module +===================================== + +.. automodule:: evennia.typeclasses.attributes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.typeclasses.managers.rst b/docs/source/api/evennia.typeclasses.managers.rst new file mode 100644 index 0000000000..2cf9c78593 --- /dev/null +++ b/docs/source/api/evennia.typeclasses.managers.rst @@ -0,0 +1,7 @@ +evennia.typeclasses.managers module +=================================== + +.. automodule:: evennia.typeclasses.managers + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.typeclasses.models.rst b/docs/source/api/evennia.typeclasses.models.rst new file mode 100644 index 0000000000..32307e4315 --- /dev/null +++ b/docs/source/api/evennia.typeclasses.models.rst @@ -0,0 +1,7 @@ +evennia.typeclasses.models module +================================= + +.. automodule:: evennia.typeclasses.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.typeclasses.rst b/docs/source/api/evennia.typeclasses.rst new file mode 100644 index 0000000000..9609d8f468 --- /dev/null +++ b/docs/source/api/evennia.typeclasses.rst @@ -0,0 +1,17 @@ +evennia.typeclasses package +=========================== + +.. automodule:: evennia.typeclasses + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.typeclasses.attributes + evennia.typeclasses.managers + evennia.typeclasses.models + evennia.typeclasses.tags diff --git a/docs/source/api/evennia.typeclasses.tags.rst b/docs/source/api/evennia.typeclasses.tags.rst new file mode 100644 index 0000000000..bc091ae2a8 --- /dev/null +++ b/docs/source/api/evennia.typeclasses.tags.rst @@ -0,0 +1,7 @@ +evennia.typeclasses.tags module +=============================== + +.. automodule:: evennia.typeclasses.tags + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.ansi.rst b/docs/source/api/evennia.utils.ansi.rst new file mode 100644 index 0000000000..d49406af94 --- /dev/null +++ b/docs/source/api/evennia.utils.ansi.rst @@ -0,0 +1,7 @@ +evennia.utils.ansi module +========================= + +.. automodule:: evennia.utils.ansi + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.batchprocessors.rst b/docs/source/api/evennia.utils.batchprocessors.rst new file mode 100644 index 0000000000..c6f59c7292 --- /dev/null +++ b/docs/source/api/evennia.utils.batchprocessors.rst @@ -0,0 +1,7 @@ +evennia.utils.batchprocessors module +==================================== + +.. automodule:: evennia.utils.batchprocessors + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.containers.rst b/docs/source/api/evennia.utils.containers.rst new file mode 100644 index 0000000000..dc37c47de9 --- /dev/null +++ b/docs/source/api/evennia.utils.containers.rst @@ -0,0 +1,7 @@ +evennia.utils.containers module +=============================== + +.. automodule:: evennia.utils.containers + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.create.rst b/docs/source/api/evennia.utils.create.rst new file mode 100644 index 0000000000..4245a2a902 --- /dev/null +++ b/docs/source/api/evennia.utils.create.rst @@ -0,0 +1,7 @@ +evennia.utils.create module +=========================== + +.. automodule:: evennia.utils.create + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.dbserialize.rst b/docs/source/api/evennia.utils.dbserialize.rst new file mode 100644 index 0000000000..5858563eb2 --- /dev/null +++ b/docs/source/api/evennia.utils.dbserialize.rst @@ -0,0 +1,7 @@ +evennia.utils.dbserialize module +================================ + +.. automodule:: evennia.utils.dbserialize + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.eveditor.rst b/docs/source/api/evennia.utils.eveditor.rst new file mode 100644 index 0000000000..80651e5f87 --- /dev/null +++ b/docs/source/api/evennia.utils.eveditor.rst @@ -0,0 +1,7 @@ +evennia.utils.eveditor module +============================= + +.. automodule:: evennia.utils.eveditor + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.evform.rst b/docs/source/api/evennia.utils.evform.rst new file mode 100644 index 0000000000..60321c7eda --- /dev/null +++ b/docs/source/api/evennia.utils.evform.rst @@ -0,0 +1,7 @@ +evennia.utils.evform module +=========================== + +.. automodule:: evennia.utils.evform + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.evmenu.rst b/docs/source/api/evennia.utils.evmenu.rst new file mode 100644 index 0000000000..8ffb7f29d5 --- /dev/null +++ b/docs/source/api/evennia.utils.evmenu.rst @@ -0,0 +1,7 @@ +evennia.utils.evmenu module +=========================== + +.. automodule:: evennia.utils.evmenu + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.evmore.rst b/docs/source/api/evennia.utils.evmore.rst new file mode 100644 index 0000000000..e403887f77 --- /dev/null +++ b/docs/source/api/evennia.utils.evmore.rst @@ -0,0 +1,7 @@ +evennia.utils.evmore module +=========================== + +.. automodule:: evennia.utils.evmore + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.evtable.rst b/docs/source/api/evennia.utils.evtable.rst new file mode 100644 index 0000000000..a83c49745c --- /dev/null +++ b/docs/source/api/evennia.utils.evtable.rst @@ -0,0 +1,7 @@ +evennia.utils.evtable module +============================ + +.. automodule:: evennia.utils.evtable + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.funcparser.rst b/docs/source/api/evennia.utils.funcparser.rst new file mode 100644 index 0000000000..ad0694beac --- /dev/null +++ b/docs/source/api/evennia.utils.funcparser.rst @@ -0,0 +1,7 @@ +evennia.utils.funcparser module +=============================== + +.. automodule:: evennia.utils.funcparser + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.gametime.rst b/docs/source/api/evennia.utils.gametime.rst new file mode 100644 index 0000000000..d2675d3f27 --- /dev/null +++ b/docs/source/api/evennia.utils.gametime.rst @@ -0,0 +1,7 @@ +evennia.utils.gametime module +============================= + +.. automodule:: evennia.utils.gametime + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.idmapper.manager.rst b/docs/source/api/evennia.utils.idmapper.manager.rst new file mode 100644 index 0000000000..f3a49a13cd --- /dev/null +++ b/docs/source/api/evennia.utils.idmapper.manager.rst @@ -0,0 +1,7 @@ +evennia.utils.idmapper.manager module +===================================== + +.. automodule:: evennia.utils.idmapper.manager + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.idmapper.models.rst b/docs/source/api/evennia.utils.idmapper.models.rst new file mode 100644 index 0000000000..61af1a2f79 --- /dev/null +++ b/docs/source/api/evennia.utils.idmapper.models.rst @@ -0,0 +1,7 @@ +evennia.utils.idmapper.models module +==================================== + +.. automodule:: evennia.utils.idmapper.models + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.idmapper.rst b/docs/source/api/evennia.utils.idmapper.rst new file mode 100644 index 0000000000..b8b5e8cee8 --- /dev/null +++ b/docs/source/api/evennia.utils.idmapper.rst @@ -0,0 +1,16 @@ +evennia.utils.idmapper package +============================== + +.. automodule:: evennia.utils.idmapper + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.utils.idmapper.manager + evennia.utils.idmapper.models + evennia.utils.idmapper.tests diff --git a/docs/source/api/evennia.utils.idmapper.tests.rst b/docs/source/api/evennia.utils.idmapper.tests.rst new file mode 100644 index 0000000000..7c0b427d65 --- /dev/null +++ b/docs/source/api/evennia.utils.idmapper.tests.rst @@ -0,0 +1,7 @@ +evennia.utils.idmapper.tests module +=================================== + +.. automodule:: evennia.utils.idmapper.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.logger.rst b/docs/source/api/evennia.utils.logger.rst new file mode 100644 index 0000000000..185538cfe6 --- /dev/null +++ b/docs/source/api/evennia.utils.logger.rst @@ -0,0 +1,7 @@ +evennia.utils.logger module +=========================== + +.. automodule:: evennia.utils.logger + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.optionclasses.rst b/docs/source/api/evennia.utils.optionclasses.rst new file mode 100644 index 0000000000..7982b36a5b --- /dev/null +++ b/docs/source/api/evennia.utils.optionclasses.rst @@ -0,0 +1,7 @@ +evennia.utils.optionclasses module +================================== + +.. automodule:: evennia.utils.optionclasses + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.optionhandler.rst b/docs/source/api/evennia.utils.optionhandler.rst new file mode 100644 index 0000000000..ff1a7f03ab --- /dev/null +++ b/docs/source/api/evennia.utils.optionhandler.rst @@ -0,0 +1,7 @@ +evennia.utils.optionhandler module +================================== + +.. automodule:: evennia.utils.optionhandler + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.picklefield.rst b/docs/source/api/evennia.utils.picklefield.rst new file mode 100644 index 0000000000..a7039a1681 --- /dev/null +++ b/docs/source/api/evennia.utils.picklefield.rst @@ -0,0 +1,7 @@ +evennia.utils.picklefield module +================================ + +.. automodule:: evennia.utils.picklefield + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.rst b/docs/source/api/evennia.utils.rst new file mode 100644 index 0000000000..05d05e6a7d --- /dev/null +++ b/docs/source/api/evennia.utils.rst @@ -0,0 +1,41 @@ +evennia.utils package +===================== + +.. automodule:: evennia.utils + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.utils.ansi + evennia.utils.batchprocessors + evennia.utils.containers + evennia.utils.create + evennia.utils.dbserialize + evennia.utils.eveditor + evennia.utils.evform + evennia.utils.evmenu + evennia.utils.evmore + evennia.utils.evtable + evennia.utils.funcparser + evennia.utils.gametime + evennia.utils.logger + evennia.utils.optionclasses + evennia.utils.optionhandler + evennia.utils.picklefield + evennia.utils.search + evennia.utils.test_resources + evennia.utils.text2html + evennia.utils.utils + evennia.utils.validatorfuncs + + +.. toctree:: + :maxdepth: 6 + + evennia.utils.idmapper + evennia.utils.verb_conjugation diff --git a/docs/source/api/evennia.utils.search.rst b/docs/source/api/evennia.utils.search.rst new file mode 100644 index 0000000000..5602e68ddd --- /dev/null +++ b/docs/source/api/evennia.utils.search.rst @@ -0,0 +1,7 @@ +evennia.utils.search module +=========================== + +.. automodule:: evennia.utils.search + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.test_resources.rst b/docs/source/api/evennia.utils.test_resources.rst new file mode 100644 index 0000000000..1d5708d5aa --- /dev/null +++ b/docs/source/api/evennia.utils.test_resources.rst @@ -0,0 +1,7 @@ +evennia.utils.test\_resources module +==================================== + +.. automodule:: evennia.utils.test_resources + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.text2html.rst b/docs/source/api/evennia.utils.text2html.rst new file mode 100644 index 0000000000..1d2feefceb --- /dev/null +++ b/docs/source/api/evennia.utils.text2html.rst @@ -0,0 +1,7 @@ +evennia.utils.text2html module +============================== + +.. automodule:: evennia.utils.text2html + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.utils.rst b/docs/source/api/evennia.utils.utils.rst new file mode 100644 index 0000000000..d6eb2ca10d --- /dev/null +++ b/docs/source/api/evennia.utils.utils.rst @@ -0,0 +1,7 @@ +evennia.utils.utils module +========================== + +.. automodule:: evennia.utils.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.validatorfuncs.rst b/docs/source/api/evennia.utils.validatorfuncs.rst new file mode 100644 index 0000000000..1e723a11a9 --- /dev/null +++ b/docs/source/api/evennia.utils.validatorfuncs.rst @@ -0,0 +1,7 @@ +evennia.utils.validatorfuncs module +=================================== + +.. automodule:: evennia.utils.validatorfuncs + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.verb_conjugation.conjugate.rst b/docs/source/api/evennia.utils.verb_conjugation.conjugate.rst new file mode 100644 index 0000000000..e7b880e4ce --- /dev/null +++ b/docs/source/api/evennia.utils.verb_conjugation.conjugate.rst @@ -0,0 +1,7 @@ +evennia.utils.verb\_conjugation.conjugate module +================================================ + +.. automodule:: evennia.utils.verb_conjugation.conjugate + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.verb_conjugation.pronouns.rst b/docs/source/api/evennia.utils.verb_conjugation.pronouns.rst new file mode 100644 index 0000000000..a45ebc13e3 --- /dev/null +++ b/docs/source/api/evennia.utils.verb_conjugation.pronouns.rst @@ -0,0 +1,7 @@ +evennia.utils.verb\_conjugation.pronouns module +=============================================== + +.. automodule:: evennia.utils.verb_conjugation.pronouns + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.utils.verb_conjugation.rst b/docs/source/api/evennia.utils.verb_conjugation.rst new file mode 100644 index 0000000000..f818f7e333 --- /dev/null +++ b/docs/source/api/evennia.utils.verb_conjugation.rst @@ -0,0 +1,16 @@ +evennia.utils.verb\_conjugation package +======================================= + +.. automodule:: evennia.utils.verb_conjugation + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.utils.verb_conjugation.conjugate + evennia.utils.verb_conjugation.pronouns + evennia.utils.verb_conjugation.tests diff --git a/docs/source/api/evennia.utils.verb_conjugation.tests.rst b/docs/source/api/evennia.utils.verb_conjugation.tests.rst new file mode 100644 index 0000000000..e0e008719d --- /dev/null +++ b/docs/source/api/evennia.utils.verb_conjugation.tests.rst @@ -0,0 +1,7 @@ +evennia.utils.verb\_conjugation.tests module +============================================ + +.. automodule:: evennia.utils.verb_conjugation.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.accounts.rst b/docs/source/api/evennia.web.admin.accounts.rst new file mode 100644 index 0000000000..1560e9824f --- /dev/null +++ b/docs/source/api/evennia.web.admin.accounts.rst @@ -0,0 +1,7 @@ +evennia.web.admin.accounts module +================================= + +.. automodule:: evennia.web.admin.accounts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.attributes.rst b/docs/source/api/evennia.web.admin.attributes.rst new file mode 100644 index 0000000000..f3f26036b1 --- /dev/null +++ b/docs/source/api/evennia.web.admin.attributes.rst @@ -0,0 +1,7 @@ +evennia.web.admin.attributes module +=================================== + +.. automodule:: evennia.web.admin.attributes + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.comms.rst b/docs/source/api/evennia.web.admin.comms.rst new file mode 100644 index 0000000000..91f4e8b473 --- /dev/null +++ b/docs/source/api/evennia.web.admin.comms.rst @@ -0,0 +1,7 @@ +evennia.web.admin.comms module +============================== + +.. automodule:: evennia.web.admin.comms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.frontpage.rst b/docs/source/api/evennia.web.admin.frontpage.rst new file mode 100644 index 0000000000..b3e67346bd --- /dev/null +++ b/docs/source/api/evennia.web.admin.frontpage.rst @@ -0,0 +1,7 @@ +evennia.web.admin.frontpage module +================================== + +.. automodule:: evennia.web.admin.frontpage + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.help.rst b/docs/source/api/evennia.web.admin.help.rst new file mode 100644 index 0000000000..d7aeeb1b65 --- /dev/null +++ b/docs/source/api/evennia.web.admin.help.rst @@ -0,0 +1,7 @@ +evennia.web.admin.help module +============================= + +.. automodule:: evennia.web.admin.help + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.objects.rst b/docs/source/api/evennia.web.admin.objects.rst new file mode 100644 index 0000000000..ddbe501c8d --- /dev/null +++ b/docs/source/api/evennia.web.admin.objects.rst @@ -0,0 +1,7 @@ +evennia.web.admin.objects module +================================ + +.. automodule:: evennia.web.admin.objects + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.rst b/docs/source/api/evennia.web.admin.rst new file mode 100644 index 0000000000..badbc7cc27 --- /dev/null +++ b/docs/source/api/evennia.web.admin.rst @@ -0,0 +1,24 @@ +evennia.web.admin package +========================= + +.. automodule:: evennia.web.admin + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.admin.accounts + evennia.web.admin.attributes + evennia.web.admin.comms + evennia.web.admin.frontpage + evennia.web.admin.help + evennia.web.admin.objects + evennia.web.admin.scripts + evennia.web.admin.server + evennia.web.admin.tags + evennia.web.admin.urls + evennia.web.admin.utils diff --git a/docs/source/api/evennia.web.admin.scripts.rst b/docs/source/api/evennia.web.admin.scripts.rst new file mode 100644 index 0000000000..837270273b --- /dev/null +++ b/docs/source/api/evennia.web.admin.scripts.rst @@ -0,0 +1,7 @@ +evennia.web.admin.scripts module +================================ + +.. automodule:: evennia.web.admin.scripts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.server.rst b/docs/source/api/evennia.web.admin.server.rst new file mode 100644 index 0000000000..8d48b56084 --- /dev/null +++ b/docs/source/api/evennia.web.admin.server.rst @@ -0,0 +1,7 @@ +evennia.web.admin.server module +=============================== + +.. automodule:: evennia.web.admin.server + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.tags.rst b/docs/source/api/evennia.web.admin.tags.rst new file mode 100644 index 0000000000..660153842d --- /dev/null +++ b/docs/source/api/evennia.web.admin.tags.rst @@ -0,0 +1,7 @@ +evennia.web.admin.tags module +============================= + +.. automodule:: evennia.web.admin.tags + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.urls.rst b/docs/source/api/evennia.web.admin.urls.rst new file mode 100644 index 0000000000..0be8897db9 --- /dev/null +++ b/docs/source/api/evennia.web.admin.urls.rst @@ -0,0 +1,7 @@ +evennia.web.admin.urls module +============================= + +.. automodule:: evennia.web.admin.urls + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.admin.utils.rst b/docs/source/api/evennia.web.admin.utils.rst new file mode 100644 index 0000000000..c1d3998706 --- /dev/null +++ b/docs/source/api/evennia.web.admin.utils.rst @@ -0,0 +1,7 @@ +evennia.web.admin.utils module +============================== + +.. automodule:: evennia.web.admin.utils + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.api.filters.rst b/docs/source/api/evennia.web.api.filters.rst new file mode 100644 index 0000000000..744719403a --- /dev/null +++ b/docs/source/api/evennia.web.api.filters.rst @@ -0,0 +1,7 @@ +evennia.web.api.filters module +============================== + +.. automodule:: evennia.web.api.filters + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.api.permissions.rst b/docs/source/api/evennia.web.api.permissions.rst new file mode 100644 index 0000000000..688838decf --- /dev/null +++ b/docs/source/api/evennia.web.api.permissions.rst @@ -0,0 +1,7 @@ +evennia.web.api.permissions module +================================== + +.. automodule:: evennia.web.api.permissions + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.api.root.rst b/docs/source/api/evennia.web.api.root.rst new file mode 100644 index 0000000000..6783ac550d --- /dev/null +++ b/docs/source/api/evennia.web.api.root.rst @@ -0,0 +1,7 @@ +evennia.web.api.root module +=========================== + +.. automodule:: evennia.web.api.root + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.api.rst b/docs/source/api/evennia.web.api.rst new file mode 100644 index 0000000000..55fada4570 --- /dev/null +++ b/docs/source/api/evennia.web.api.rst @@ -0,0 +1,20 @@ +evennia.web.api package +======================= + +.. automodule:: evennia.web.api + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.api.filters + evennia.web.api.permissions + evennia.web.api.root + evennia.web.api.serializers + evennia.web.api.tests + evennia.web.api.urls + evennia.web.api.views diff --git a/docs/source/api/evennia.web.api.serializers.rst b/docs/source/api/evennia.web.api.serializers.rst new file mode 100644 index 0000000000..d9b4769f32 --- /dev/null +++ b/docs/source/api/evennia.web.api.serializers.rst @@ -0,0 +1,7 @@ +evennia.web.api.serializers module +================================== + +.. automodule:: evennia.web.api.serializers + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.api.tests.rst b/docs/source/api/evennia.web.api.tests.rst new file mode 100644 index 0000000000..a606ea56ef --- /dev/null +++ b/docs/source/api/evennia.web.api.tests.rst @@ -0,0 +1,7 @@ +evennia.web.api.tests module +============================ + +.. automodule:: evennia.web.api.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.api.urls.rst b/docs/source/api/evennia.web.api.urls.rst new file mode 100644 index 0000000000..14e05a5bea --- /dev/null +++ b/docs/source/api/evennia.web.api.urls.rst @@ -0,0 +1,7 @@ +evennia.web.api.urls module +=========================== + +.. automodule:: evennia.web.api.urls + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.api.views.rst b/docs/source/api/evennia.web.api.views.rst new file mode 100644 index 0000000000..3bbff42175 --- /dev/null +++ b/docs/source/api/evennia.web.api.views.rst @@ -0,0 +1,7 @@ +evennia.web.api.views module +============================ + +.. automodule:: evennia.web.api.views + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.rst b/docs/source/api/evennia.web.rst new file mode 100644 index 0000000000..02e4610a68 --- /dev/null +++ b/docs/source/api/evennia.web.rst @@ -0,0 +1,25 @@ +evennia.web package +=================== + +.. automodule:: evennia.web + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.urls + + +.. toctree:: + :maxdepth: 6 + + evennia.web.admin + evennia.web.api + evennia.web.templatetags + evennia.web.utils + evennia.web.webclient + evennia.web.website diff --git a/docs/source/api/evennia.web.templatetags.addclass.rst b/docs/source/api/evennia.web.templatetags.addclass.rst new file mode 100644 index 0000000000..d6d9347ebf --- /dev/null +++ b/docs/source/api/evennia.web.templatetags.addclass.rst @@ -0,0 +1,7 @@ +evennia.web.templatetags.addclass module +======================================== + +.. automodule:: evennia.web.templatetags.addclass + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.templatetags.rst b/docs/source/api/evennia.web.templatetags.rst new file mode 100644 index 0000000000..0fe07514c7 --- /dev/null +++ b/docs/source/api/evennia.web.templatetags.rst @@ -0,0 +1,14 @@ +evennia.web.templatetags package +================================ + +.. automodule:: evennia.web.templatetags + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.templatetags.addclass diff --git a/docs/source/api/evennia.web.urls.rst b/docs/source/api/evennia.web.urls.rst new file mode 100644 index 0000000000..61de474486 --- /dev/null +++ b/docs/source/api/evennia.web.urls.rst @@ -0,0 +1,7 @@ +evennia.web.urls module +======================= + +.. automodule:: evennia.web.urls + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.utils.adminsite.rst b/docs/source/api/evennia.web.utils.adminsite.rst new file mode 100644 index 0000000000..32eb3ea6a6 --- /dev/null +++ b/docs/source/api/evennia.web.utils.adminsite.rst @@ -0,0 +1,7 @@ +evennia.web.utils.adminsite module +================================== + +.. automodule:: evennia.web.utils.adminsite + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.utils.backends.rst b/docs/source/api/evennia.web.utils.backends.rst new file mode 100644 index 0000000000..92492878ed --- /dev/null +++ b/docs/source/api/evennia.web.utils.backends.rst @@ -0,0 +1,7 @@ +evennia.web.utils.backends module +================================= + +.. automodule:: evennia.web.utils.backends + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.utils.general_context.rst b/docs/source/api/evennia.web.utils.general_context.rst new file mode 100644 index 0000000000..d561fc68ac --- /dev/null +++ b/docs/source/api/evennia.web.utils.general_context.rst @@ -0,0 +1,7 @@ +evennia.web.utils.general\_context module +========================================= + +.. automodule:: evennia.web.utils.general_context + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.utils.middleware.rst b/docs/source/api/evennia.web.utils.middleware.rst new file mode 100644 index 0000000000..88faf3dc32 --- /dev/null +++ b/docs/source/api/evennia.web.utils.middleware.rst @@ -0,0 +1,7 @@ +evennia.web.utils.middleware module +=================================== + +.. automodule:: evennia.web.utils.middleware + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.utils.rst b/docs/source/api/evennia.web.utils.rst new file mode 100644 index 0000000000..f2cfe08d8b --- /dev/null +++ b/docs/source/api/evennia.web.utils.rst @@ -0,0 +1,18 @@ +evennia.web.utils package +========================= + +.. automodule:: evennia.web.utils + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.utils.adminsite + evennia.web.utils.backends + evennia.web.utils.general_context + evennia.web.utils.middleware + evennia.web.utils.tests diff --git a/docs/source/api/evennia.web.utils.tests.rst b/docs/source/api/evennia.web.utils.tests.rst new file mode 100644 index 0000000000..830eca0c82 --- /dev/null +++ b/docs/source/api/evennia.web.utils.tests.rst @@ -0,0 +1,7 @@ +evennia.web.utils.tests module +============================== + +.. automodule:: evennia.web.utils.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.webclient.rst b/docs/source/api/evennia.web.webclient.rst new file mode 100644 index 0000000000..25c4f8fd47 --- /dev/null +++ b/docs/source/api/evennia.web.webclient.rst @@ -0,0 +1,15 @@ +evennia.web.webclient package +============================= + +.. automodule:: evennia.web.webclient + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.webclient.urls + evennia.web.webclient.views diff --git a/docs/source/api/evennia.web.webclient.urls.rst b/docs/source/api/evennia.web.webclient.urls.rst new file mode 100644 index 0000000000..c1838e45b7 --- /dev/null +++ b/docs/source/api/evennia.web.webclient.urls.rst @@ -0,0 +1,7 @@ +evennia.web.webclient.urls module +================================= + +.. automodule:: evennia.web.webclient.urls + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.webclient.views.rst b/docs/source/api/evennia.web.webclient.views.rst new file mode 100644 index 0000000000..936aa320e1 --- /dev/null +++ b/docs/source/api/evennia.web.webclient.views.rst @@ -0,0 +1,7 @@ +evennia.web.webclient.views module +================================== + +.. automodule:: evennia.web.webclient.views + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.forms.rst b/docs/source/api/evennia.web.website.forms.rst new file mode 100644 index 0000000000..b9feb6871c --- /dev/null +++ b/docs/source/api/evennia.web.website.forms.rst @@ -0,0 +1,7 @@ +evennia.web.website.forms module +================================ + +.. automodule:: evennia.web.website.forms + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.rst b/docs/source/api/evennia.web.website.rst new file mode 100644 index 0000000000..343c59b4d0 --- /dev/null +++ b/docs/source/api/evennia.web.website.rst @@ -0,0 +1,22 @@ +evennia.web.website package +=========================== + +.. automodule:: evennia.web.website + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.website.forms + evennia.web.website.tests + evennia.web.website.urls + + +.. toctree:: + :maxdepth: 6 + + evennia.web.website.views diff --git a/docs/source/api/evennia.web.website.tests.rst b/docs/source/api/evennia.web.website.tests.rst new file mode 100644 index 0000000000..02d7fdb626 --- /dev/null +++ b/docs/source/api/evennia.web.website.tests.rst @@ -0,0 +1,7 @@ +evennia.web.website.tests module +================================ + +.. automodule:: evennia.web.website.tests + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.urls.rst b/docs/source/api/evennia.web.website.urls.rst new file mode 100644 index 0000000000..44aa148911 --- /dev/null +++ b/docs/source/api/evennia.web.website.urls.rst @@ -0,0 +1,7 @@ +evennia.web.website.urls module +=============================== + +.. automodule:: evennia.web.website.urls + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.accounts.rst b/docs/source/api/evennia.web.website.views.accounts.rst new file mode 100644 index 0000000000..a8d3d405e3 --- /dev/null +++ b/docs/source/api/evennia.web.website.views.accounts.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.accounts module +========================================= + +.. automodule:: evennia.web.website.views.accounts + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.channels.rst b/docs/source/api/evennia.web.website.views.channels.rst new file mode 100644 index 0000000000..a37e9a155a --- /dev/null +++ b/docs/source/api/evennia.web.website.views.channels.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.channels module +========================================= + +.. automodule:: evennia.web.website.views.channels + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.characters.rst b/docs/source/api/evennia.web.website.views.characters.rst new file mode 100644 index 0000000000..0b79f02d9d --- /dev/null +++ b/docs/source/api/evennia.web.website.views.characters.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.characters module +=========================================== + +.. automodule:: evennia.web.website.views.characters + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.errors.rst b/docs/source/api/evennia.web.website.views.errors.rst new file mode 100644 index 0000000000..02ac7d7f26 --- /dev/null +++ b/docs/source/api/evennia.web.website.views.errors.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.errors module +======================================= + +.. automodule:: evennia.web.website.views.errors + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.help.rst b/docs/source/api/evennia.web.website.views.help.rst new file mode 100644 index 0000000000..6fdec19532 --- /dev/null +++ b/docs/source/api/evennia.web.website.views.help.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.help module +===================================== + +.. automodule:: evennia.web.website.views.help + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.index.rst b/docs/source/api/evennia.web.website.views.index.rst new file mode 100644 index 0000000000..febe26d613 --- /dev/null +++ b/docs/source/api/evennia.web.website.views.index.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.index module +====================================== + +.. automodule:: evennia.web.website.views.index + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.mixins.rst b/docs/source/api/evennia.web.website.views.mixins.rst new file mode 100644 index 0000000000..d4c2f3fcdc --- /dev/null +++ b/docs/source/api/evennia.web.website.views.mixins.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.mixins module +======================================= + +.. automodule:: evennia.web.website.views.mixins + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.objects.rst b/docs/source/api/evennia.web.website.views.objects.rst new file mode 100644 index 0000000000..d5c3b8f867 --- /dev/null +++ b/docs/source/api/evennia.web.website.views.objects.rst @@ -0,0 +1,7 @@ +evennia.web.website.views.objects module +======================================== + +.. automodule:: evennia.web.website.views.objects + :members: + :undoc-members: + :show-inheritance: diff --git a/docs/source/api/evennia.web.website.views.rst b/docs/source/api/evennia.web.website.views.rst new file mode 100644 index 0000000000..ed0580e44b --- /dev/null +++ b/docs/source/api/evennia.web.website.views.rst @@ -0,0 +1,21 @@ +evennia.web.website.views package +================================= + +.. automodule:: evennia.web.website.views + :members: + :undoc-members: + :show-inheritance: + + + +.. toctree:: + :maxdepth: 6 + + evennia.web.website.views.accounts + evennia.web.website.views.channels + evennia.web.website.views.characters + evennia.web.website.views.errors + evennia.web.website.views.help + evennia.web.website.views.index + evennia.web.website.views.mixins + evennia.web.website.views.objects diff --git a/evennia/contrib/tutorials/evadventure/characters.py b/evennia/contrib/tutorials/evadventure/characters.py index 50cce06d09..77c6b0370c 100644 --- a/evennia/contrib/tutorials/evadventure/characters.py +++ b/evennia/contrib/tutorials/evadventure/characters.py @@ -57,8 +57,10 @@ class LivingMixin: if healer is self: self.msg(f"|gYou heal yourself for {healed} health.|n") - else: + elif healer: self.msg(f"|g{healer.key} heals you for {healed} health.|n") + else: + self.msg(f"You are healed for {healed} health.") def at_damage(self, damage, attacker=None): """ @@ -82,15 +84,14 @@ class LivingMixin: """ pass - def at_do_loot(self, looted): + def at_pay(self, amount): """ - Called when looting another entity. - - Args: - looted: The thing to loot. + Get coins, but no more than we actually have. """ - looted.at_looted() + amount = min(amount, self.coins) + self.coins -= amount + return amount def at_looted(self, looter): """ @@ -101,9 +102,8 @@ class LivingMixin: """ max_steal = rules.dice.roll("1d10") - owned = self.coin - stolen = max(max_steal, owned) - self.coins -= stolen + stolen = self.at_pay(max_steal) + looter.coins += stolen self.location.msg_contents( @@ -125,6 +125,16 @@ class LivingMixin: """ pass + def at_do_loot(self, defeated_enemy): + """ + Called when looting another entity. + + Args: + defeated_enemy: The thing to loot. + + """ + defeated_enemy.at_looted(self) + def post_loot(self, defeated_enemy): """ Called just after having looted an enemy. @@ -138,8 +148,7 @@ class LivingMixin: class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ - A Character for use with EvAdventure. This also works fine for - monsters and NPCS. + A Character for use with EvAdventure. """ @@ -153,17 +162,12 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): wisdom = AttributeProperty(default=1) charisma = AttributeProperty(default=1) - exploration_speed = AttributeProperty(default=120) - combat_speed = AttributeProperty(default=40) - hp = AttributeProperty(default=4) hp_max = AttributeProperty(default=4) level = AttributeProperty(default=1) xp = AttributeProperty(default=0) coins = AttributeProperty(default=0) # copper coins - morale = AttributeProperty(default=9) # only used for NPC/monster morale checks - @lazy_property def equipment(self): """Allows to access equipment like char.equipment.worn""" @@ -244,13 +248,6 @@ class EvAdventureCharacter(LivingMixin, DefaultCharacter): """ if self.location.allow_death: rules.dice.roll_death(self) - if self.hp > 0: - # still alive, but lost some stats - self.location.msg_contents( - "|y$You() $conj(stagger) back and fall to the ground - alive, " - "but unable to move.|n", - from_obj=self, - ) else: self.location.msg_contents("|y$You() $conj(yield), beaten and out of the fight.|n") self.hp = self.hp_max diff --git a/evennia/contrib/tutorials/evadventure/equipment.py b/evennia/contrib/tutorials/evadventure/equipment.py index a0b04e5a11..c806d37573 100644 --- a/evennia/contrib/tutorials/evadventure/equipment.py +++ b/evennia/contrib/tutorials/evadventure/equipment.py @@ -144,7 +144,7 @@ class EquipmentHandler: ( # armor is listed using its defense, so we remove 10 from it # (11 is base no-armor value in Knave) - getattr(slots[WieldLocation.BODY], "armor", 11) - 10, + getattr(slots[WieldLocation.BODY], "armor", 1), # shields and helmets are listed by their bonus to armor getattr(slots[WieldLocation.SHIELD_HAND], "armor", 0), getattr(slots[WieldLocation.HEAD], "armor", 0), diff --git a/evennia/contrib/tutorials/evadventure/objects.py b/evennia/contrib/tutorials/evadventure/objects.py index 2807671c61..6ce919cea6 100644 --- a/evennia/contrib/tutorials/evadventure/objects.py +++ b/evennia/contrib/tutorials/evadventure/objects.py @@ -39,11 +39,11 @@ class EvAdventureObject(DefaultObject): value = AttributeProperty(0) # can also be an iterable, for adding multiple obj-type tags - obj_type = ObjType.TREASURE.value + obj_type = ObjType.GEAR def at_object_creation(self): for obj_type in make_iter(self.obj_type): - self.tags.add(obj_type, category="obj_type") + self.tags.add(obj_type.value, category="obj_type") def get_display_header(self, looker, **kwargs): return "" # this is handled by get_obj_stats @@ -68,43 +68,7 @@ class EvAdventureObject(DefaultObject): str: The help text, by default taken from the `.help_text` property. """ - return self.help_text - - def at_pre_use(self, user, *args, **kwargs): - """ - Called before this item is used. - - Args: - user (Object): The one using the item. - *args, **kwargs: Optional arguments. - - Return: - bool: False to stop usage. - - """ - return self.uses > 0 - - def at_use(self, user, *args, **kwargs): - """ - Called when this item is used. - - Args: - user (Object): The one using the item. - *args, **kwargs: Optional arguments. - - """ - pass - - def at_post_use(self, user, *args, **kwargs): - """ - Called after this item was used. - - Args: - user (Object): The one using the item. - *args, **kwargs: Optional arguments. - - """ - self.uses -= 1 + return "No help for this item." class EvAdventureObjectFiller(EvAdventureObject): @@ -124,13 +88,13 @@ class EvAdventureObjectFiller(EvAdventureObject): quality = AttributeProperty(0) -class EvAdventureQuest(EvAdventureObject): +class EvAdventureQuestObject(EvAdventureObject): """ A quest object. These cannot be sold and only be used for quest resolution. """ - obj_type = ObjType.QUEST.value + obj_type = ObjType.QUEST value = AttributeProperty(0) @@ -140,7 +104,7 @@ class EvAdventureTreasure(EvAdventureObject): """ - obj_type = ObjType.TREASURE.value + obj_type = ObjType.TREASURE value = AttributeProperty(100) @@ -151,7 +115,7 @@ class EvAdventureConsumable(EvAdventureObject): """ - obj_type = ObjType.CONSUMABLE.value + obj_type = ObjType.CONSUMABLE size = AttributeProperty(0.25) uses = AttributeProperty(1) @@ -188,7 +152,7 @@ class WeaponEmptyHand: """ - obj_type = ObjType.WEAPON.value + obj_type = ObjType.WEAPON key = "Empty Fists" inventory_use_slot = WieldLocation.WEAPON_HAND attack_type = Ability.STR @@ -206,7 +170,7 @@ class EvAdventureWeapon(EvAdventureObject): """ - obj_type = ObjType.WEAPON.value + obj_type = ObjType.WEAPON inventory_use_slot = AttributeProperty(WieldLocation.WEAPON_HAND) quality = AttributeProperty(3) @@ -217,7 +181,7 @@ class EvAdventureWeapon(EvAdventureObject): damage_roll = AttributeProperty("1d6") -class EvAdventureRunestone(EvAdventureWeapon): +class EvAdventureRunestone(EvAdventureWeapon, EvAdventureConsumable): """ Base class for magic runestones. In _Knave_, every spell is represented by a rune stone that takes up an inventory slot. It is wielded as a weapon in order to create the specific @@ -226,14 +190,23 @@ class EvAdventureRunestone(EvAdventureWeapon): """ - obj_type = (ObjType.WEAPON.value, ObjType.MAGIC.value) - inventory_use_slot = AttributeProperty(WieldLocation.TWO_HANDS) + obj_type = (ObjType.WEAPON, ObjType.MAGIC) + inventory_use_slot = WieldLocation.TWO_HANDS quality = AttributeProperty(3) attack_type = AttributeProperty(Ability.INT) defense_type = AttributeProperty(Ability.DEX) damage_roll = AttributeProperty("1d8") + def at_post_use(self, user, *args, **kwargs): + """Called after the spell was cast""" + self.uses -= 1 + # the rune stone is not deleted after use, but + # it needs to be refreshed after resting. + + def refresh(self): + self.uses = 1 + class EvAdventureArmor(EvAdventureObject): """ @@ -241,9 +214,10 @@ class EvAdventureArmor(EvAdventureObject): """ - obj_type = ObjType.ARMOR.value - inventory_use_slot = AttributeProperty(WieldLocation.BODY) - armor = AttributeProperty(11) + obj_type = ObjType.ARMOR + inventory_use_slot = WieldLocation.BODY + + armor = AttributeProperty(1) quality = AttributeProperty(3) @@ -253,9 +227,8 @@ class EvAdventureShield(EvAdventureArmor): """ - obj_type = ObjType.SHIELD.value - inventory_use_slot = AttributeProperty(WieldLocation.SHIELD_HAND) - armor = AttributeProperty(1) + obj_type = ObjType.SHIELD + inventory_use_slot = WieldLocation.SHIELD_HAND class EvAdventureHelmet(EvAdventureArmor): @@ -264,6 +237,5 @@ class EvAdventureHelmet(EvAdventureArmor): """ - obj_type = ObjType.HELMET.value - inventory_use_slot = AttributeProperty(WieldLocation.HEAD) - armor = AttributeProperty(1) + obj_type = ObjType.HELMET + inventory_use_slot = WieldLocation.HEAD diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 17f1e2753e..46b90a8ec7 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -289,18 +289,6 @@ class EvAdventureRollEngine: """ return self.roll("2d6") <= defender.morale - def heal(self, character, amount): - """ - Heal specific amount, but not more than our max. - - Args: - character (EvAdventureCharacter): The character to heal - amount (int): How many HP to heal. - - """ - damage = character.hp_max - character.hp - character.hp += min(damage, amount) - def heal_from_rest(self, character): """ A meal and a full night's rest allow for regaining 1d8 + Const bonus HP. @@ -312,7 +300,7 @@ class EvAdventureRollEngine: int: How much HP was healed. This is never more than how damaged we are. """ - self.heal(character, self.roll("1d8") + character.constitution) + character.heal(self.roll("1d8") + character.constitution) death_map = { "weakened": "strength", diff --git a/evennia/contrib/tutorials/evadventure/tests/test_characters.py b/evennia/contrib/tutorials/evadventure/tests/test_characters.py new file mode 100644 index 0000000000..d8ed026939 --- /dev/null +++ b/evennia/contrib/tutorials/evadventure/tests/test_characters.py @@ -0,0 +1,46 @@ +""" +Test characters. + +""" + +from evennia.utils import create +from evennia.utils.test_resources import BaseEvenniaTest + +from ..characters import EvAdventureCharacter + + +class TestCharacters(BaseEvenniaTest): + def setUp(self): + super().setUp() + self.character = create.create_object(EvAdventureCharacter, key="testchar") + + def test_abilities(self): + self.character.strength += 2 + self.assertEqual(self.character.strength, 3) + + def test_heal(self): + """Make sure we don't heal too much""" + self.character.hp = 0 + self.character.hp_max = 8 + + self.character.heal(1) + self.assertEqual(self.character.hp, 1) + self.character.heal(100) + self.assertEqual(self.character.hp, 8) + + def test_at_damage(self): + self.character.hp = 8 + self.character.at_damage(5) + self.assertEqual(self.character.hp, 3) + + def test_at_pay(self): + self.character.coins = 100 + + result = self.character.at_pay(60) + self.assertEqual(result, 60) + self.assertEqual(self.character.coins, 40) + + # can't get more coins than we have + result = self.character.at_pay(100) + self.assertEqual(result, 40) + self.assertEqual(self.characer.coins, 0) From 99bee05c1b939661b3746e5429c6905daedaebf6 Mon Sep 17 00:00:00 2001 From: Griatch Date: Sun, 7 Aug 2022 00:11:38 +0200 Subject: [PATCH 074/177] More work on tutorial text --- .../Part3/Beginner-Tutorial-Equipment.md | 6 ++-- .../Part3/Beginner-Tutorial-Rules.md | 30 ++++++++++--------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md index 1ca872da88..77e9b5012f 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md @@ -8,7 +8,7 @@ We still need to track what the character is using however: What weapon they hav they can do. The shield, helmet and armor they use affects their defense. We have already set up the possible 'wear/wield locations' when we defined our Objects -[in the previous lesson](Beginner-Tutorial-Objects). This is what we have in `enums.py`: +[in the previous lesson](./Beginner-Tutorial-Objects.md). This is what we have in `enums.py`: ```python # mygame/evadventure/enums.py @@ -38,7 +38,7 @@ when we pick them up, but we will add more functionality using an _Equipment han ```{sidebar} If you want to understand more about behind how Evennia uses handlers, there is a -[dedicated tutorial](Tutorial-Persistent-Handler) talking about the principle. +[dedicated tutorial](../../Tutorial-Persistent-Handler.md) talking about the principle. ``` A handler is (for our purposes) an object that sits "on" another entity, containing functionality @@ -117,4 +117,4 @@ our data - our _Knave_ slots. We must save them to the database, because we want them even after reloading. Using `self.obj.attributes.add()` and `.get()` we save the data to the Character in a specially named -[Attribute](Attributes). Since we use a `category`, we are unlikely to collide with other Attributes. \ No newline at end of file +[Attribute](../../../Components/Attributes.md). Since we use a `category`, we are unlikely to collide with other Attributes. \ No newline at end of file diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md index 7ebbbc7539..4b6fa78141 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Rules.md @@ -1,4 +1,4 @@ -# Rules - summary and dice rolling +# Rules and dice rolling In _EvAdventure_ we have decided to use the [Knave](https://www.drivethrurpg.com/product/250888/Knave) RPG ruleset. This is commercial, but released under Creative Commons 4.0, meaning it's okay to share and @@ -15,26 +15,28 @@ and _Charisma_ (CHA). These are rated from `+1` to `+10`. - Rolls are made with a twenty-sided die (`1d20`), usually adding a suitable Ability bonus to the roll. - If you roll _with advantage_, you roll `2d20` and pick the _highest_ value, If you roll _with disadvantage_, you roll `2d20` and pick the _lowest_. -- Rolling a natural `1` is a _critical failure_. A natural `20` is a _critical success_. +- Rolling a natural `1` is a _critical failure_. A natural `20` is a _critical success_. Rolling such +in combat means your weapon or armor loses quality, which will eventually destroy it. - A _saving throw_ (trying to succeed against the environment) means making a roll to beat `15` (always). -So if you are lifting a heavy stone and have a strength of `+2`, you'd roll `1d20 + 2` and hope the result +So if you are lifting a heavy stone and have `STR +2`, you'd roll `1d20 + 2` and hope the result is higher than `15`. - An _opposed saving throw_ means beating the enemy's suitable Ability 'defense', which is always their -`Ability bonus + 10`. So if you have STR `+1` and are arm wrestling someone with STR `+2`, you roll +`Ability bonus + 10`. So if you have `STR +1` and are arm wrestling someone with `STR +2`, you roll `1d20 + 1` and hope to roll higher than `2 + 10 = 12`. -- A special bonus is _Armor_, which is given by equipment. Melee attacks test STR versus the _Armor_ -defense value while ranged attacks uses WIS vs Armor. -- _Knave_ have no skills or classes. Everyone can use all items and using magic means having a special +- A special bonus is `Armor`, `+1` is unarmored, additional armor is given by equipment. Melee attacks +test `STR` versus the `Armor` defense value while ranged attacks uses `WIS` vs `Armor`. +- _Knave_ has no skills or classes. Everyone can use all items and using magic means having a special 'rune stone' in your hands; one spell per stone and day. -- A character has CON + 10 carry 'slots'. Most normal items uses one slot, armor and large weapons uses +- A character has `CON + 10` carry 'slots'. Most normal items uses one slot, armor and large weapons uses two or three. -- Healing is random, usually `1d8` health healed roll after food and sleep. +- Healing is random, `1d8 + CON` health healed after food and sleep. +- Monster difficulty is listed by hy many 1d8 HP they have; this is called their "hit die" or HD. If +needing to test Abilities, monsters have HD bonus in every Ability. - Monsters have a _morale rating_. When things go bad, they have a chance to panic and flee if -rolling `2d6` gives a value over their morale rating. -- All Characters in _Knave_ are mostly randomly generated. Normally HP is `1d8`, but we will start HP at -max value. We will also give everyone an even Ability bonus distribution to avoid people re-rolling -their characters over and over until happy. -- _Knave_ also have some random tables, such as for starting equipment and to see if dying when +rolling `2d6` over their morale rating. +- All Characters in _Knave_ are mostly randomly generated. HP is `d8` but we give every +new character max HP to start. +- _Knave_ also have random tables, such as for starting equipment and to see if dying when hitting 0. Death, if it happens, is permanent. From adea728e25da735fc0b08e5b4b5db8f356e5a151 Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Fri, 5 Aug 2022 14:41:49 -0700 Subject: [PATCH 075/177] added missing div references to readme (+2 squashed commit) Squashed commit: [b8a311b07] readme and test updates to support new features [70c12b74e] added "div" default modifier, altered how mods are calculated to enable view_modifiers, split modifier application into separate method --- evennia/contrib/rpg/buffs/README.md | 58 +++++++++++++++++++++- evennia/contrib/rpg/buffs/buff.py | 77 ++++++++++++++++++++++------- evennia/contrib/rpg/buffs/tests.py | 22 ++++++++- 3 files changed, 137 insertions(+), 20 deletions(-) diff --git a/evennia/contrib/rpg/buffs/README.md b/evennia/contrib/rpg/buffs/README.md index aa2729db58..34f7ea94ef 100644 --- a/evennia/contrib/rpg/buffs/README.md +++ b/evennia/contrib/rpg/buffs/README.md @@ -142,6 +142,44 @@ buffs that are reactive to being checked; for example, removing themselves, alte > **Note**: You can also trigger relevant buffs at the same time as you check them by ensuring the optional argument `trigger` is True in the `check` method. +Modifiers are calculated additively - that is, all modifiers of the same type are added together before being applied. They are then +applied through the following formula. + +```python +(base + total_add) / max(1, 1.0 + total_div) * max(0, 1.0 + total_mult) +``` + +#### Multiplicative Buffs (Advanced) + +Multiply/divide modifiers in this buff system are additive by default. This means that two +50% modifiers will equal a +100% modifier. But what if you want to apply mods multiplicatively? + +First, you should carefully consider if you truly want multiplicative modifiers. Here's some things to consider. + +- They are unintuitive to the average user, as two +50% damage buffs equal +125% instead of +100%. +- They lead to "power explosion", where stacking buffs in the right way can turn characters into unstoppable forces + +Doing purely-additive multipliers allows you to better control the balance of your game. Conversely, doing multiplicative multipliers enables very fun build-crafting where smart usage of buffs and skills can turn you into a one-shot powerhouse. Each has its place. + +The best design practice for multiplicative buffs is to divide your multipliers into "tiers", where each tier is applied separately. You can easily do this with multiple `check` calls. + +```python +damage = damage +damage = handler.check(damage, 'damage') +damage = handler.check(damage, 'empower') +damage = handler.check(damage, 'radiant') +damage = handler.check(damage, 'overpower') +``` + +#### Buff Strength Priority (Advanced) + +Sometimes you only want to apply the strongest modifier to a stat. This is supported by the optional `strongest` bool arg in the handler's check method + +```python +def take_damage(self, source, damage): + _damage = self.buffs.check(damage, 'taken_damage', strongest=True) + self.db.health -= _damage +``` + ### Trigger Buffs Call the handler's `trigger(string)` method when you want an event call. This will call the `at_trigger` hook method on all buffs with the relevant trigger `string`. @@ -219,6 +257,15 @@ class ThornsBuff(BaseBuff): ``` Apply the buff, take damage, and watch the thorns buff do its work! +### Viewing + +There are two helper methods on the handler that allow you to get useful buff information back. + +- `view`: Returns a dictionary of tuples in the format `{buffkey: (buff.name, buff.flavor)}`. Finds all buffs by default, but optionally accepts a dictionary of buffs to filter as well. Useful for basic buff readouts. +- `view_modifiers(stat)`: Returns a nested dictionary of information on modifiers that affect the specified stat. The first layer is the modifier type (`add/mult/div`) and the second layer is the value type (`total/strongest`). Does not return the buffs that cause these modifiers, just the modifiers themselves (akin to using `handler.check` but without actually modifying a value). Useful for stat sheets. + +You can also create your own custom viewing methods through the various handler getters, which will always return the entire buff object. + ## Creating New Buffs Creating a new buff is very easy: extend `BaseBuff` into a new class, and fill in all the relevant buff details. @@ -230,6 +277,7 @@ Regardless of any other functionality, all buffs have the following class attrib - They have customizable `key`, `name`, and `flavor` strings. - They have a `duration` (float), and automatically clean-up at the end. Use -1 for infinite duration, and 0 to clean-up immediately. (default: -1) +- They have a `tickrate` (float), and automatically tick if it is greater than 1 (default: 0) - They can stack, if `maxstacks` (int) is not equal to 1. If it's 0, the buff stacks forever. (default: 1) - They can be `unique` (bool), which determines if they have a unique namespace or not. (default: True) - They can `refresh` (bool), which resets the duration when stacked or reapplied. (default: True) @@ -249,6 +297,13 @@ You can always access the raw cache dictionary through the `cache` attribute on a handler method, so it may not always reflect recent changes you've made, depending on how you structure your buff calls. All of the above mutable information can be found in this cache, as well as any arbitrary information you pass through the handler `add` method (via `to_cache`). +Buffs also have a few useful properties: + +- `owner`: The object this buff is attached to +- `ticknum`: How many ticks the buff has gone through +- `timeleft`: How much time is remaining on the buff +- `ticking`/`stacking`: If this buff ticks/stacks (checks `tickrate` and `maxstacks`) + ### Modifiers Mods are stored in the `mods` list attribute. Buffs which have one or more Mod objects in them can modify stats. You can use the handler method to check all @@ -257,7 +312,7 @@ mods of a specific stat string and apply their modifications to the value; howev Mod objects consist of only four values, assigned by the constructor in this order: - `stat`: The stat you want to modify. When `check` is called, this string is used to find all the mods that are to be collected. -- `mod`: The modifier. Defaults are 'add' and 'mult'. Modifiers are calculated additively, and in standard arithmetic order (see `_calculate_mods` for more) +- `mod`: The modifier. Defaults are `add` (addition/subtraction), `mult` (multiply), and `div` (divide). Modifiers are calculated additively (see `_calculate_mods` for more) - `value`: How much value the modifier gives regardless of stacks - `perstack`: How much value the modifier grants per stack, INCLUDING the first. (default: 0) @@ -354,6 +409,7 @@ Buff instances have a number of helper methods. - `remove`/`dispel`: Allows you to remove or dispel the buff. Calls `at_remove`/`at_dispel`, depending on optional arguments. - `pause`/`unpause`: Pauses and unpauses the buff. Calls `at_pause`/`at_unpause`. - `reset`: Resets the buff's start to the current time; same as "refreshing" it. +- `alter_cache`: Updates the buff's cache with the `{key:value}` pairs in the provided dictionary. Can overwrite default values, so be careful! #### Playtime Duration diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index 3f008f4d19..98e3b165a9 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -98,7 +98,6 @@ You can see all the features of the `BaseBuff` class below, or browse `samplebuf many attributes and hook methods you can overload to create complex, interrelated buffs. """ - from random import random import time from evennia import Command @@ -235,8 +234,11 @@ class BaseBuff: self.start = time.time() self.handler.buffcache[self.buffkey]["start"] = time.time() - def alter_cache(self, to_cache: dict = None): - """Alters this buff's cache, both internally (this instance) and on the handler's buff cache.""" + def alter_cache(self, to_cache: dict): + """Alters this buff's cache, both internally (this instance) and on the handler's buff cache. + + Args: + to_cache: The dictionary of values you want to add to the cache""" if not isinstance(to_cache, dict): raise TypeError _cache = dict(self.handler.buffcache[self.buffkey]) @@ -331,6 +333,7 @@ class BuffHandler: self.dbkey = dbkey self.autopause = autopause if autopause: + self._validate_state() signals.SIGNAL_OBJECT_POST_UNPUPPET.connect(self._pause_playtime) signals.SIGNAL_OBJECT_POST_PUPPET.connect(self._unpause_playtime) @@ -769,7 +772,9 @@ class BuffHandler: return True return False - def check(self, value: float, stat: str, loud=True, context=None, trigger=False): + def check( + self, value: float, stat: str, loud=True, context=None, trigger=False, strongest=False + ): """Finds all buffs and perks related to a stat and applies their effects. Args: @@ -778,6 +783,7 @@ class BuffHandler: loud: (optional) Call the buff's at_post_check method after checking (default: True) context: (optional) A dictionary you wish to pass to the at_pre_check/at_post_check and conditional methods as kwargs trigger: (optional) Trigger buffs with the `stat` string as well. (default: False) + strongest: (optional) Applies only the strongest mods of the corresponding stat value (default: False) Returns the value modified by relevant buffs.""" # Buff cleanup to make sure all buffs are valid before processing @@ -789,15 +795,21 @@ class BuffHandler: applied = self.get_by_stat(stat) if not applied: return value + + # Run pre-check hooks on related buffs for buff in applied.values(): buff.at_pre_check(**context) + # Sift out buffs that won't be applying their mods (paused, conditional) applied = { k: buff for k, buff in applied.items() if buff.conditional(**context) if not buff.paused } - # The final result - final = self._calculate_mods(value, stat, applied) + # The mod totals + calc = self._calculate_mods(stat, applied) + + # The calculated final value + final = self._apply_mods(value, calc, strongest=strongest) # Run the "after check" functions on all relevant buffs for buff in applied.values(): @@ -999,29 +1011,58 @@ class BuffHandler: buff.unpause() pass - def _calculate_mods(self, value, stat: str, buffs: dict): - """Calculates a return value from a base value, a stat string, and a dictionary of instanced buffs with associated mods. + def _calculate_mods(self, stat: str, buffs: dict): + """Calculates the total value of applicable mods. Args: - value: The base value to modify stat: The string identifier to search mods for - buffs: The dictionary of buffs to apply""" + buffs: The dictionary of buffs to calculate mods from + + Returns a nested dictionary. The first layer's keys represent the type of modifier ('add' and 'mult'), + and the second layer's keys represent the type of value ('total' and 'strongest').""" + + # The base return dictionary. If you update how modifiers are calculated, make sure to update this too, or you will get key errors! + calculated = { + "add": {"total": 0, "strongest": 0}, + "mult": {"total": 0, "strongest": 0}, + "div": {"total": 0, "strongest": 0}, + } if not buffs: - return value - add = 0 - mult = 0 + return calculated for buff in buffs.values(): for mod in buff.mods: buff: BaseBuff mod: Mod if mod.stat == stat: - if mod.modifier == "add": - add += mod.value + ((buff.stacks) * mod.perstack) - if mod.modifier == "mult": - mult += mod.value + ((buff.stacks) * mod.perstack) + _modval = mod.value + ((buff.stacks) * mod.perstack) + calculated[mod.modifier]["total"] += _modval + if _modval > calculated[mod.modifier]["strongest"]: + calculated[mod.modifier]["strongest"] = _modval + return calculated - final = (value + add) * max(0, 1.0 + mult) + def _apply_mods(self, value, calc: dict, strongest=False): + """Applies modifiers to a value. + + Args: + value: The value to modify + calc: The dictionary of calculated modifier values (see _calculate_mods) + strongest: (optional) Applies only the strongest mods of the corresponding stat value (default: False) + + Returns value modified by the relevant mods.""" + final = value + if strongest: + final = ( + (value + calc["add"]["strongest"]) + / max(1, 1.0 + calc["div"]["strongest"]) + * max(0, 1.0 + calc["mult"]["strongest"]) + ) + else: + final = ( + (value + calc["add"]["total"]) + / max(1, 1.0 + calc["div"]["total"]) + * max(0, 1.0 + calc["mult"]["total"]) + ) return final def _remove_via_dict(self, buffs: dict, loud=True, dispel=False, expire=False, context=None): diff --git a/evennia/contrib/rpg/buffs/tests.py b/evennia/contrib/rpg/buffs/tests.py index 824888b361..04a1fd038f 100644 --- a/evennia/contrib/rpg/buffs/tests.py +++ b/evennia/contrib/rpg/buffs/tests.py @@ -16,6 +16,13 @@ class _EmptyBuff(BaseBuff): pass +class _TestDivBuff(BaseBuff): + key = "tdb" + name = "tdb" + flavor = "divverbuff" + mods = [Mod("stat1", "div", 1)] + + class _TestModBuff(BaseBuff): key = "tmb" name = "tmb" @@ -190,12 +197,19 @@ class TestBuffsAndHandler(EvenniaTest): @patch("evennia.contrib.rpg.buffs.buff.utils.delay", new=Mock()) def test_details(self): - """tests that buff details like name and flavor are correct""" + """tests that buff details like name and flavor are correct; also test modifier viewing""" handler: BuffHandler = self.testobj.buffs handler.add(_TestModBuff) handler.add(_TestTrigBuff) self.assertEqual(handler.get("tmb").flavor, "modderbuff") self.assertEqual(handler.get("ttb").name, "ttb") + mods = handler.view_modifiers("stat1") + _testmods = { + "add": {"total": 15, "strongest": 15}, + "mult": {"total": 0, "strongest": 0}, + "div": {"total": 0, "strongest": 0}, + } + self.assertDictEqual(mods, _testmods) @patch("evennia.contrib.rpg.buffs.buff.utils.delay", new=Mock()) def test_modify(self): @@ -228,9 +242,15 @@ class TestBuffsAndHandler(EvenniaTest): handler.add(_TestModBuff2) self.assertEqual(handler.check(_stat1, "stat1"), 100) self.assertEqual(handler.check(_stat2, "stat2"), 30) + # apply only the strongest value + self.assertEqual(handler.check(_stat1, "stat1", strongest=True), 80) + # removing mod properly reduces value, doesn't affect other mods handler.remove_by_type(_TestModBuff) self.assertEqual(handler.check(_stat1, "stat1"), 30) self.assertEqual(handler.check(_stat2, "stat2"), 20) + # divider mod test + handler.add(_TestDivBuff) + self.assertEqual(handler.check(_stat1, "stat1"), 15) @patch("evennia.contrib.rpg.buffs.buff.utils.delay", new=Mock()) def test_trigger(self): From 17d709da681efd526ee617705d2e757def058f58 Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Sun, 7 Aug 2022 18:07:28 -0700 Subject: [PATCH 076/177] readme update to support new cache interface (+3 squashed commit) Squashed commit: [872cb2621] added instance-cache link (thanks aogier!) added tests for cache link fix poison samplebuff fix min tickrate [6bd6ce3e6] fixed infinite-duration ticking buffs [2dbc0594d] tickrate improvements, init hook --- evennia/contrib/rpg/buffs/README.md | 39 +++++++++++++--------- evennia/contrib/rpg/buffs/buff.py | 42 ++++++++++++++---------- evennia/contrib/rpg/buffs/samplebuffs.py | 6 ++-- evennia/contrib/rpg/buffs/tests.py | 12 +++++++ 4 files changed, 63 insertions(+), 36 deletions(-) diff --git a/evennia/contrib/rpg/buffs/README.md b/evennia/contrib/rpg/buffs/README.md index 34f7ea94ef..62c76d1143 100644 --- a/evennia/contrib/rpg/buffs/README.md +++ b/evennia/contrib/rpg/buffs/README.md @@ -283,20 +283,6 @@ Regardless of any other functionality, all buffs have the following class attrib - They can `refresh` (bool), which resets the duration when stacked or reapplied. (default: True) - They can be `playtime` (bool) buffs, where duration only counts down during active play. (default: False) -They also always store some useful mutable information about themselves in the cache: - -- `ref` (class): The buff class path we use to construct the buff. -- `start` (float): The timestamp of when the buff was applied. -- `source` (Object): If specified; this allows you to track who or what applied the buff. -- `prevtick` (float): The timestamp of the previous tick. -- `duration` (float): The cached duration. This can vary from the class duration, depending on if the duration has been modified (paused, extended, shortened, etc). -- `stacks` (int): How many stacks they have. -- `paused` (bool): Paused buffs do not clean up, modify values, tick, or fire any hook methods. - -You can always access the raw cache dictionary through the `cache` attribute on an instanced buff. This is grabbed when you get the buff through -a handler method, so it may not always reflect recent changes you've made, depending on how you structure your buff calls. All of the above -mutable information can be found in this cache, as well as any arbitrary information you pass through the handler `add` method (via `to_cache`). - Buffs also have a few useful properties: - `owner`: The object this buff is attached to @@ -304,6 +290,29 @@ Buffs also have a few useful properties: - `timeleft`: How much time is remaining on the buff - `ticking`/`stacking`: If this buff ticks/stacks (checks `tickrate` and `maxstacks`) +#### Buff Cache (Advanced) + +Buffs always store some useful mutable information about themselves in the cache (what is stored on the owning object's database attribute). A buff's cache corresponds to `{buffkey: buffcache}`, where `buffcache` is a dictionary containing __at least__ the mutable information below.: + +- `ref` (class): The buff class path we use to construct the buff. +- `start` (float): The timestamp of when the buff was applied. +- `source` (Object): If specified; this allows you to track who or what applied the buff. +- `prevtick` (float): The timestamp of the previous tick. +- `duration` (float): The cached duration. This can vary from the class duration, depending on if the duration has been modified (paused, extended, shortened, etc). +- `tickrate` (float): The buff's tick rate. Cannot go below 0. Altering the tickrate on an applied buff will not cause it to start ticking if it wasn't ticking before. (pause and unpause to start/stop ticking on existing buffs) +- `stacks` (int): How many stacks they have. +- `paused` (bool): Paused buffs do not clean up, modify values, tick, or fire any hook methods. + +Sometimes you will want to dynamically update a buff's cache at runtime, such as changing a tickrate in a hook method, or altering a buff's duration. +You can do so by using the interface `buff.cachekey`. As long as the attribute name matches a key in the cache dictionary, +it will update the stored cache with the new value. + +> **Example**: You want to increase a buff's duration by 30 seconds. You use `buff.duration += 30`. This new duration is now reflected on both the instance and the cache. + +All of the above mutable information can be found in this cache, as well as any arbitrary information you pass through the handler `add` method (via `to_cache`). + +> **Example**: You store `damage` as a value in the buff cache and use it for your poison buff. You want to increase it over time, so you use `buff.damage += 1` in the tick method. + ### Modifiers Mods are stored in the `mods` list attribute. Buffs which have one or more Mod objects in them can modify stats. You can use the handler method to check all @@ -418,4 +427,4 @@ and unpause when the object the handler is attached to is puppetted or unpuppett although if you have less than 1 second of tick duration remaining, it will round up to 1s. > **Note**: If you want more control over this process, you can comment out the signal subscriptions on the handler and move the autopause logic -> to your object's `at_pre/post_puppet/unpuppet` hooks. +> to your object's `at_pre/post_puppet/unpuppet` hooks. \ No newline at end of file diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index 98e3b165a9..f360bf00d6 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -116,9 +116,8 @@ class BaseBuff: handler = None start = 0 - # Default buff duration; -1 or lower for permanent, 0 for "instant" (removed immediately) - duration = -1 + duration = -1 # Default buff duration; -1 for permanent, 0 for "instant", >0 normal playtime = False # Does this buff autopause when owning object is unpuppeted? refresh = True # Does the buff refresh its timer on application? @@ -133,7 +132,7 @@ class BaseBuff: @property def ticknum(self): """Returns how many ticks this buff has gone through as an integer.""" - x = (time.time() - self.start) / self.tickrate + x = (time.time() - self.start) / max(1, self.tickrate) return int(x) @property @@ -145,12 +144,12 @@ class BaseBuff: @property def timeleft(self): - """Returns how much time this buff has left""" + """Returns how much time this buff has left. If -1, it is permanent.""" _tl = 0 if not self.start: _tl = self.duration else: - _tl = self.duration - (time.time() - self.start) + _tl = max(-1, self.duration - (time.time() - self.start)) return _tl @property @@ -169,17 +168,18 @@ class BaseBuff: handler: The handler this buff is attached to buffkey: The key this buff uses on the cache cache: The cache dictionary (what you get if you use `handler.buffcache.get(key)`)""" - self.handler: BuffHandler = handler - self.buffkey = buffkey - # Cache assignment - self.cache = cache - # Default system cache values - self.start = self.cache.get("start") - self.duration = self.cache.get("duration") - self.prevtick = self.cache.get("prevtick") - self.paused = self.cache.get("paused") - self.stacks = self.cache.get("stacks") - self.source = self.cache.get("source") + required = {"handler": handler, "buffkey": buffkey, "cache": cache} + self.__dict__.update(cache) + self.__dict__.update(required) + # Init hook + self.at_init() + + def __setattr__(self, attr, value): + if attr in self.cache: + if attr == "tickrate": + value = max(0, value) + self.handler.buffcache[self.buffkey][attr] = value + super().__setattr__(attr, value) def conditional(self, *args, **kwargs): """Hook function for conditional evaluation. @@ -249,6 +249,10 @@ class BaseBuff: # endregion # region hook methods + def at_init(self, *args, **kwargs): + """Hook function called when this buff object is initialized.""" + pass + def at_apply(self, *args, **kwargs): """Hook function to run when this buff is applied to an object.""" pass @@ -461,6 +465,7 @@ class BuffHandler: "ref": buff, "start": time.time(), "duration": buff.duration, + "tickrate": buff.tickrate, "prevtick": time.time(), "paused": False, "stacks": stacks, @@ -1159,7 +1164,7 @@ def tick_buff(handler: BuffHandler, buffkey: str, context=None, initial=True): # Instantiate the buff and tickrate buff: BaseBuff = handler.get(buffkey) - tr = buff.tickrate + tr = max(1, buff.tickrate) # This stops the old ticking process if you refresh/stack the buff if tr > time.time() - buff.prevtick and initial != True: @@ -1172,7 +1177,7 @@ def tick_buff(handler: BuffHandler, buffkey: str, context=None, initial=True): buff.at_tick(initial, **context) # Tick this buff one last time, then remove - if buff.duration <= time.time() - buff.start: + if buff.duration > -1 and buff.duration <= time.time() - buff.start: if tr < time.time() - buff.prevtick: buff.at_tick(initial, **context) buff.remove(expire=True) @@ -1183,6 +1188,7 @@ def tick_buff(handler: BuffHandler, buffkey: str, context=None, initial=True): buff.at_tick(initial, **context) handler.buffcache[buffkey]["prevtick"] = time.time() + tr = max(1, buff.tickrate) # Recur this function at the tickrate interval, if it didn't stop/fail utils.delay( diff --git a/evennia/contrib/rpg/buffs/samplebuffs.py b/evennia/contrib/rpg/buffs/samplebuffs.py index 457e647805..60e3239275 100644 --- a/evennia/contrib/rpg/buffs/samplebuffs.py +++ b/evennia/contrib/rpg/buffs/samplebuffs.py @@ -84,13 +84,13 @@ class Poison(BaseBuff): def at_pause(self, *args, **kwargs): self.owner.db.prelogout_location.msg_contents( - "{actor} stops twitching, their flesh a deathly pallor.".format(actor=self.owner.named) + "{actor} stops twitching, their flesh a deathly pallor.".format(actor=self.owner) ) def at_unpause(self, *args, **kwargs): self.owner.location.msg_contents( "{actor} begins to twitch again, their cheeks flushing red with blood.".format( - actor=self.owner.named + actor=self.owner ) ) @@ -99,7 +99,7 @@ class Poison(BaseBuff): if not initial: self.owner.location.msg_contents( "Poison courses through {actor}'s body, dealing {damage} damage.".format( - actor=self.owner.named, damage=_dmg + actor=self.owner, damage=_dmg ) ) diff --git a/evennia/contrib/rpg/buffs/tests.py b/evennia/contrib/rpg/buffs/tests.py index 04a1fd038f..0fa115269a 100644 --- a/evennia/contrib/rpg/buffs/tests.py +++ b/evennia/contrib/rpg/buffs/tests.py @@ -13,6 +13,7 @@ from evennia.contrib.rpg.buffs import buff class _EmptyBuff(BaseBuff): + key = "empty" pass @@ -372,6 +373,17 @@ class TestBuffsAndHandler(EvenniaTest): handler.cleanup() self.assertFalse(handler.get("ttib"), None) + @patch("evennia.contrib.rpg.buffs.buff.utils.delay", new=Mock()) + def test_cacheattrlink(self): + """tests the link between the instance attribute and the cache attribute""" + # setup + handler: BuffHandler = self.testobj.buffs + handler.add(_EmptyBuff) + self.assertEqual(handler.buffcache["empty"]["duration"], -1) + empty: _EmptyBuff = handler.get("empty") + empty.duration = 30 + self.assertEqual(handler.buffcache["empty"]["duration"], 30) + @patch("evennia.contrib.rpg.buffs.buff.utils.delay", new=Mock()) def test_buffableproperty(self): """tests buffable properties""" From f98672541f74f8b91d171db7ffd6cf34b0e1793b Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Tue, 9 Aug 2022 01:15:27 -0700 Subject: [PATCH 077/177] remove deprecated helper method change alter_cache to update_cache to better match what the method does (+1 squashed commits) Squashed commits: [23d61e14d] fix test --- evennia/contrib/rpg/buffs/buff.py | 14 ++------------ evennia/contrib/rpg/buffs/tests.py | 2 +- 2 files changed, 3 insertions(+), 13 deletions(-) diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index f360bf00d6..f21786763d 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -234,8 +234,8 @@ class BaseBuff: self.start = time.time() self.handler.buffcache[self.buffkey]["start"] = time.time() - def alter_cache(self, to_cache: dict): - """Alters this buff's cache, both internally (this instance) and on the handler's buff cache. + def update_cache(self, to_cache: dict): + """Updates this buff's cache using the given values, both internally (this instance) and on the handler. Args: to_cache: The dictionary of values you want to add to the cache""" @@ -930,16 +930,6 @@ class BuffHandler: ) return - def set_duration(self, key, value): - """Sets the duration of the specified buff. - - Args: - key: The key of the buff whose duration you want to set - value: The value you want the new duration to be""" - if key in self.buffcache.keys(): - self.buffcache[key]["duration"] = value - return - def view(self, to_filter=None) -> dict: """Returns a buff flavor text as a dictionary of tuples in the format {key: (name, flavor)}. Common use for this is a buff readout of some kind. diff --git a/evennia/contrib/rpg/buffs/tests.py b/evennia/contrib/rpg/buffs/tests.py index 0fa115269a..0d6b0f36b5 100644 --- a/evennia/contrib/rpg/buffs/tests.py +++ b/evennia/contrib/rpg/buffs/tests.py @@ -368,7 +368,7 @@ class TestBuffsAndHandler(EvenniaTest): _instance.at_tick() self.assertTrue(self.testobj.db.ticktest) # test duration modification and cleanup - handler.set_duration("ttib", 0) + _instance.duration = 0 self.assertEqual(handler.get("ttib").duration, 0) handler.cleanup() self.assertFalse(handler.get("ttib"), None) From 739c7379a58632bb4e173ade74bad8bf013d2d45 Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Tue, 9 Aug 2022 03:50:39 -0700 Subject: [PATCH 078/177] can now pause infinite duration buffs --- evennia/contrib/rpg/buffs/buff.py | 42 ++++++++++++++++++------------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index f21786763d..a4f76af508 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -877,23 +877,25 @@ class BuffHandler: start = buff["start"] # Start duration = buff["duration"] # Duration prevtick = buff["prevtick"] # Previous tick timestamp - tickrate = buff["ref"].tickrate # Buff's tick rate - - # Original buff ending, and new duration + tickrate = buff["tickrate"] # Buff's tick rate end = start + duration # End - newduration = end - current # New duration - # Apply the new duration - if newduration > 0: - buff["duration"] = newduration - if buff["ref"].ticking: - buff["tickleft"] = max(1, tickrate - (current - prevtick)) - self.buffcache[key] = buff - instance: BaseBuff = buff["ref"](self, key, buff) - instance.at_pause(**context) - else: - self.remove(key) - return + # Setting "tickleft" + if buff["ref"].ticking: + buff["tickleft"] = max(1, tickrate - (current - prevtick)) + + # Setting the new duration (if applicable) + if duration > -1: + newduration = end - current # New duration + if newduration > 0: + buff["duration"] = newduration + else: + self.remove(key) + + # Apply new cache info, call pause hook + self.buffcache[key] = buff + instance: BaseBuff = buff["ref"](self, key, buff) + instance.at_pause(**context) def unpause(self, key: str, context=None): """Unpauses a buff. This makes it visible to the various buff systems again. @@ -920,15 +922,19 @@ class BuffHandler: buff["start"] = current if buff["ref"].ticking: buff["prevtick"] = current - (tickrate - tickleft) + + # Apply new cache info, call hook self.buffcache[key] = buff instance: BaseBuff = buff["ref"](self, key, buff) instance.at_unpause(**context) - utils.delay(buff["duration"], cleanup_buffs, self, persistent=True) + + # Set up typical delays (cleanup/ticking) + if instance.duration > -1: + utils.delay(buff["duration"], cleanup_buffs, self, persistent=True) if instance.ticking: utils.delay( tickrate, tick_buff, handler=self, buffkey=key, initial=False, persistent=True ) - return def view(self, to_filter=None) -> dict: """Returns a buff flavor text as a dictionary of tuples in the format {key: (name, flavor)}. Common use for this is a buff readout of some kind. @@ -1157,7 +1163,7 @@ def tick_buff(handler: BuffHandler, buffkey: str, context=None, initial=True): tr = max(1, buff.tickrate) # This stops the old ticking process if you refresh/stack the buff - if tr > time.time() - buff.prevtick and initial != True: + if (tr > time.time() - buff.prevtick and initial != True) or buff.paused: return # Only fire the at_tick methods if the conditional is truthy From a3eb3124d2688fb3ec2327447dc0ed369d75a01c Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Tue, 9 Aug 2022 04:04:37 -0700 Subject: [PATCH 079/177] comments --- evennia/contrib/rpg/buffs/buff.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/evennia/contrib/rpg/buffs/buff.py b/evennia/contrib/rpg/buffs/buff.py index a4f76af508..c7f76154fd 100644 --- a/evennia/contrib/rpg/buffs/buff.py +++ b/evennia/contrib/rpg/buffs/buff.py @@ -123,7 +123,7 @@ class BaseBuff: refresh = True # Does the buff refresh its timer on application? unique = True # Does the buff overwrite existing buffs with the same key on the same target? maxstacks = 1 # The maximum number of stacks the buff can have. If >1, this buff will stack. - stacks = 1 # If >1, used as the default when applying this buff + stacks = 1 # Used as the default when applying this buff if no or negative stacks were specified (min: 1) tickrate = 0 # How frequent does this buff tick, in seconds (cannot be lower than 1) mods = [] # List of mod objects. See Mod class below for more detail @@ -452,10 +452,14 @@ class BuffHandler: context = {} b = {} _context = dict(context) + + # Initial cache updating, starting with the class cache attribute and/or to_cache if buff.cache: b = dict(buff.cache) if to_cache: b.update(dict(to_cache)) + + # Guarantees we stack either at least 1 stack or whatever the class stacks attribute is if stacks < 1: stacks = min(1, buff.stacks) From 12d7ee3c3cfd02628b86deee49c7346ee9b645c3 Mon Sep 17 00:00:00 2001 From: homeofpoe <1144217+homeofpoe@users.noreply.github.com> Date: Tue, 9 Aug 2022 08:42:29 -0700 Subject: [PATCH 080/177] Update objects.py Typo in comment. --- evennia/objects/objects.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/objects/objects.py b/evennia/objects/objects.py index dcd7fc9d2b..def8ba0843 100644 --- a/evennia/objects/objects.py +++ b/evennia/objects/objects.py @@ -1636,7 +1636,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase): now in. Args: - source_location (Object): Wwhere we came from. This may be `None`. + source_location (Object): Where we came from. This may be `None`. move_type (str): The type of move. "give", "traverse", etc. This is an arbitrary string provided to obj.move_to(). Useful for altering messages or altering logic depending From 96264d192d796aebeaa5555b8447bf82f6fbd46c Mon Sep 17 00:00:00 2001 From: Griatch Date: Tue, 9 Aug 2022 19:16:06 +0200 Subject: [PATCH 081/177] Further tutorial text writing --- .../Part2/Planning-The-Tutorial-Game.md | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md b/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md index 76cfbcf607..f73a41b566 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part2/Planning-The-Tutorial-Game.md @@ -431,12 +431,11 @@ Perma-death means that once your character dies, it's gone and you have to make Perma-death comes with some severe disadvantages however. -- It's impopular. Many players will just not play a game where they risk losing their beloved character just like that. - Many players say they like the _idea_ of permadeath except when it could happen to them. -- It can limit roleplaying freedom and make people refuse to take any risks. +- Some players refuse to take any risks if death is permanent. - It may make players even more reluctant to play conflict-driving 'bad guys'. -- Game balance is much, much more important when results are "final". This escalates the severity of 'unfairness' - a hundred-fold. Things like bugs or exploits can also lead to much more server effects. +- Balancing PvP becomes very hard. Fairness and avoiding exploits becomes critical when the outcome +is permanent. For these reasons, it's very common to do hybrid systems. Some tried variations: @@ -450,7 +449,10 @@ For these reasons, it's very common to do hybrid systems. Some tried variations: **EvAdventure Answer** -In _Knave_, when you hit 0 HP, you roll on a death table, with a 1/6 chance of immediate death (otherwise you lose points in a random stat). We will offer an "Insurance" that allows you to resurrect if you carry enough coin on you when you die. If not, you are perma-dead and have to create a new character (which is easy and quick since it's mostly randomized). +In _Knave_, when you hit 0 HP, you roll on a death table, with a 1/8 chance of immediate death (otherwise you lose +points in a random stat). We will offer an "Insurance" that allows you to resurrect if you carry enough coin on you when +you die. If not, you are perma-dead and have to create a new character (which is easy and quick since it's mostly +randomized). ## Conclusions From b08808975a52d8b70200355f010c3eeb2bd9ca34 Mon Sep 17 00:00:00 2001 From: Tegiminis Date: Tue, 9 Aug 2022 11:49:33 -0700 Subject: [PATCH 082/177] i can't stop updating my readme!!! --- evennia/contrib/rpg/buffs/README.md | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/evennia/contrib/rpg/buffs/README.md b/evennia/contrib/rpg/buffs/README.md index 62c76d1143..8e082cede5 100644 --- a/evennia/contrib/rpg/buffs/README.md +++ b/evennia/contrib/rpg/buffs/README.md @@ -81,6 +81,8 @@ buffs after application, they are very useful. The handler's `check`/`trigger` m `get(key)` is the most basic getter. It returns a single buff instance, or `None` if the buff doesn't exist on the handler. It is also the only getter that returns a single buff instance, rather than a dictionary. +> **Note**: The handler method `has(buff)` allows you to check if a matching key (if a string) or buff class (if a class) is present on the handler cache, without actually instantiating the buff. You should use this method for basic "is this buff present?" checks. + Group getters, listed below, return a dictionary of values in the format `{buffkey: instance}`. If you want to iterate over all of these buffs, you should do so via the `dict.values()` method. @@ -292,24 +294,28 @@ Buffs also have a few useful properties: #### Buff Cache (Advanced) -Buffs always store some useful mutable information about themselves in the cache (what is stored on the owning object's database attribute). A buff's cache corresponds to `{buffkey: buffcache}`, where `buffcache` is a dictionary containing __at least__ the mutable information below.: +Buffs always store some useful mutable information about themselves in the cache (what is stored on the owning object's database attribute). A buff's cache corresponds to `{buffkey: buffcache}`, where `buffcache` is a dictionary containing __at least__ the information below: - `ref` (class): The buff class path we use to construct the buff. - `start` (float): The timestamp of when the buff was applied. - `source` (Object): If specified; this allows you to track who or what applied the buff. - `prevtick` (float): The timestamp of the previous tick. - `duration` (float): The cached duration. This can vary from the class duration, depending on if the duration has been modified (paused, extended, shortened, etc). -- `tickrate` (float): The buff's tick rate. Cannot go below 0. Altering the tickrate on an applied buff will not cause it to start ticking if it wasn't ticking before. (pause and unpause to start/stop ticking on existing buffs) +- `tickrate` (float): The buff's tick rate. Cannot go below 0. Altering the tickrate on an applied buff will not cause it to start ticking if it wasn't ticking before. (`pause` and `unpause` to start/stop ticking on existing buffs) - `stacks` (int): How many stacks they have. - `paused` (bool): Paused buffs do not clean up, modify values, tick, or fire any hook methods. Sometimes you will want to dynamically update a buff's cache at runtime, such as changing a tickrate in a hook method, or altering a buff's duration. -You can do so by using the interface `buff.cachekey`. As long as the attribute name matches a key in the cache dictionary, -it will update the stored cache with the new value. +You can do so by using the interface `buff.cachekey`. As long as the attribute name matches a key in the cache dictionary, it will update the stored +cache with the new value. + +If there is no matching key, it will do nothing. If you wish to add a new key to the cache, you must use the `buff.update_cache(dict)` method, +which will properly update the cache (including adding new keys) using the dictionary provided. > **Example**: You want to increase a buff's duration by 30 seconds. You use `buff.duration += 30`. This new duration is now reflected on both the instance and the cache. -All of the above mutable information can be found in this cache, as well as any arbitrary information you pass through the handler `add` method (via `to_cache`). +The buff cache can also store arbitrary information. To do so, pass a dictionary through the handler `add` method (`handler.add(BuffClass, to_cache=dict)`), +set the `cache` dictionary attribute on your buff class, or use the aforementioned `buff.update_cache(dict)` method. > **Example**: You store `damage` as a value in the buff cache and use it for your poison buff. You want to increase it over time, so you use `buff.damage += 1` in the tick method. @@ -323,7 +329,7 @@ Mod objects consist of only four values, assigned by the constructor in this ord - `stat`: The stat you want to modify. When `check` is called, this string is used to find all the mods that are to be collected. - `mod`: The modifier. Defaults are `add` (addition/subtraction), `mult` (multiply), and `div` (divide). Modifiers are calculated additively (see `_calculate_mods` for more) - `value`: How much value the modifier gives regardless of stacks -- `perstack`: How much value the modifier grants per stack, INCLUDING the first. (default: 0) +- `perstack`: How much value the modifier grants per stack, **INCLUDING** the first. (default: 0) The most basic way to add a Mod to a buff is to do so in the buff class definition, like this: @@ -345,8 +351,7 @@ An advanced way to do mods is to generate them when the buff is initialized. Thi ```python class GeneratedStatBuff(BaseBuff): ... - def __init__(self, handler, buffkey, cache={}) -> None: - super().__init__(handler, buffkey, cache) + def at_init(self, *args, **kwargs) -> None: # Finds our "modgen" cache value, and generates a mod from it modgen = list(self.cache.get("modgen")) if modgen: @@ -403,7 +408,7 @@ example, if you want a buff that makes the player take more damage when they are class FireSick(BaseBuff): ... def conditional(self, *args, **kwargs): - if self.owner.buffs.get_by_type(FireBuff): + if self.owner.buffs.has(FireBuff): return True return False ``` From 267fb1eb9dceb70ef175e272264942aed2683cd2 Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 11 Aug 2022 09:05:29 +0200 Subject: [PATCH 083/177] Started equipment docs --- .../Part3/Beginner-Tutorial-Equipment.md | 54 ++++++++++++++-- .../contrib/tutorials/evadventure/rules.py | 63 +++++++++---------- 2 files changed, 81 insertions(+), 36 deletions(-) diff --git a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md index 77e9b5012f..de28f42575 100644 --- a/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md +++ b/docs/source/Howtos/Beginner-Tutorial/Part3/Beginner-Tutorial-Equipment.md @@ -28,7 +28,7 @@ class WieldLocation(Enum): Basically, all the weapon/armor locations are exclusive - you can only have one item in each (or none). The BACKPACK is special - it contains any number of items (up to the maximum slot usage). -## EquipmentHandler +## EquipmentHandler that saves > Create a new module `mygame/evadventure/equipment.py`. @@ -79,7 +79,7 @@ class EquipmentHandler: self.obj.attributes.add(self.save_attribute, self.slots, category="inventory") ``` -This is a compact and functioning little handler. Before analyzing how it works, this is how +This is a compact and functional little handler. Before analyzing how it works, this is how we will add it to the Character: ```python @@ -113,8 +113,54 @@ So we now have a handler on the character, and the handler has a back-reference on. Since the handler itself is just a regular Python object, we need to use the `Character` to store -our data - our _Knave_ slots. We must save them to the database, because we want the server to remember +our data - our _Knave_ "slots". We must save them to the database, because we want the server to remember them even after reloading. Using `self.obj.attributes.add()` and `.get()` we save the data to the Character in a specially named -[Attribute](../../../Components/Attributes.md). Since we use a `category`, we are unlikely to collide with other Attributes. \ No newline at end of file +[Attribute](../../../Components/Attributes.md). Since we use a `category`, we are unlikely to collide with +other Attributes. + +Our storage structure is a `dict` with keys after our available `WieldLocation` enums. Each can only +have one item except `WieldLocation.BACKPACK`, which is a list. + +## Connecting the EquipmentHandler + +We already made `EquipmentHandler` available on the Character as `.equipment`. Now we want it to come into +play automatically whenever we pick up or drop something. To do this we need to override two hooks +on the Character class: + +```python +# mygame/evadventure/character.py + +# ... + +class EvAdventureCharacter(LivingMixin, DefaultCharacter): + + # ... + + def at_pre_object_receive(self, moved_object, source_location, **kwargs): + """Called by Evennia before object arrives 'in' this character (that is, + if they pick up something). If it returns False, move is aborted. + + """ + # we haven't written this yet! + return self.equipment.validate_slot_usage(moved_object) + + def at_object_receive(self, moved_object, source_location, **kwargs): + """ + Called by Evennia when an object arrives 'in' the character. + + """ + self.equipment.add(moved_object) + + def at_object_leave(self, moved_object, destination, **kwargs): + """ + Called by Evennia when object leaves the Character. + + """ + self.equipment.remove(moved_object) +``` + + + + diff --git a/evennia/contrib/tutorials/evadventure/rules.py b/evennia/contrib/tutorials/evadventure/rules.py index 46b90a8ec7..a719e33386 100644 --- a/evennia/contrib/tutorials/evadventure/rules.py +++ b/evennia/contrib/tutorials/evadventure/rules.py @@ -593,41 +593,42 @@ class EvAdventureImprovement: # character sheet visualization -class EvAdventureCharacterSheet: +_SHEET = """ + +----------------------------------------------------------------------------+ + | Name: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + +----------------------------------------------------------------------------+ + | STR: x2xxxxx DEX: x3xxxxx CON: x4xxxxx WIS: x5xxxxx CHA: x6xxxxx | + +----------------------------------------------------------------------------+ + | HP: x7xxxxx XP: x8xxxxx Exploration speed: x9x Combat speed: xAx | + +----------------------------------------------------------------------------+ + | Desc: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | + +----------------------------------------------------------------------------+ + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccc1ccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | + +----------------------------------------------------------------------------+ + """ + + +def get_character_sheet(character): """ Generate a character sheet. This is grouped in a class in order to make it easier to override the look of the sheet. """ - sheet = """ - +----------------------------------------------------------------------------+ - | Name: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx1xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | - +----------------------------------------------------------------------------+ - | STR: x2xxxxx DEX: x3xxxxx CON: x4xxxxx WIS: x5xxxxx CHA: x6xxxxx | - +----------------------------------------------------------------------------+ - | HP: x7xxxxx XP: x8xxxxx Exploration speed: x9x Combat speed: xAx | - +----------------------------------------------------------------------------+ - | Desc: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | - | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxBxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | - | xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx | - +----------------------------------------------------------------------------+ - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccc1ccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - | cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc | - +----------------------------------------------------------------------------+ - """ - @staticmethod def get(character): """ @@ -639,7 +640,7 @@ class EvAdventureCharacterSheet: equipment_table = EvTable( table=[equipment[i : i + 10] for i in range(0, len(equipment), 10)] ) - form = EvForm({"FORMCHAR": "x", "TABLECHAR": "c", "SHEET": EvAdventureCharacterSheet.sheet}) + form = EvForm({"FORMCHAR": "x", "TABLECHAR": "c", "SHEET": _SHEET}) form.map( cells={ 1: character.key, @@ -663,8 +664,6 @@ class EvAdventureCharacterSheet: # singletons -# access sheet as rules.character_sheet.get(character) -character_sheet = EvAdventureCharacterSheet() # access rolls e.g. with rules.dice.opposed_saving_throw(...) dice = EvAdventureRollEngine() # access improvement e.g. with rules.improvement.add_xp(character, xp) From f2c59ed324b293941c8cbbba5df7745acbac8e4a Mon Sep 17 00:00:00 2001 From: Griatch Date: Thu, 11 Aug 2022 09:09:49 +0200 Subject: [PATCH 084/177] Note about urls in upgrade docs --- docs/source/Setup/Installation-Upgrade.md | 27 +++++++++++++---------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/docs/source/Setup/Installation-Upgrade.md b/docs/source/Setup/Installation-Upgrade.md index 348378a989..50f952f0ad 100644 --- a/docs/source/Setup/Installation-Upgrade.md +++ b/docs/source/Setup/Installation-Upgrade.md @@ -1,13 +1,13 @@ # Upgrading an existing installation -## Evennia v0.9.5 to 1.0 +## Evennia v0.9.5 to 1.0 Prior to 1.0, all Evennia installs were [Git-installs](./Installation-Git.md). These instructions assume that you have a cloned `evennia` repo and use a virtualenv (best practices). - Make sure to stop Evennia 0.9.5 entirely with `evennia stop`. - `deactivate` to leave your active virtualenv. -- Make a _backup_ of your entire `mygame` folder, just to be sure! +- Make a _backup_ of your entire `mygame` folder, just to be sure! - Delete the old `evenv` folder, or rename it (in case you want to keep using 0.9.5 for a while). - Install Python 3.10 (recommended) or 3.9. Follow the [Git-installation](./Installation-Git.md) for your OS if needed. - If using virtualenv, make a _new_ one with `python3.10 -m venv evenv`, then activate with `source evenv/bin/activate` @@ -15,28 +15,31 @@ assume that you have a cloned `evennia` repo and use a virtualenv (best practice - `cd` into your `evennia/` folder (you want to see the `docs/`, `bin/` directories as well as a nested `evennia/` folder) - **Prior to 1.0 release only** - do `git checkout develop` to switch to the develop branch. After release, this will be found on the default master branch. -- `git pull` +- `git pull` - `pip install -e .` - If you want the optional extra libs, do `pip install -r requirements_extra.txt`. - Test that you can run the `evennia` command. -If you don't have anything you want to keep in your existing game dir, you can just start a new onew -using the normal [install instructions](./Installation.md). If you want to keep/convert your existing +If you don't have anything you want to keep in your existing game dir, you can just start a new onew +using the normal [install instructions](./Installation.md). If you want to keep/convert your existing game dir, continue below. - First, make a backup of your exising game dir! If you use version control, make sure to commit your current state. - `cd` to your existing 0.9.5-based game folder (like `mygame`.) -- If you have changed `mygame/web`, _rename_ the folder to `web_0.9.5`. If you didn't change anything (or don't have +- If you have changed `mygame/web`, _rename_ the folder to `web_0.9.5`. If you didn't change anything (or don't have anything you want to keep), you can _delete_ it entirely. - Copy `evennia/evennia/game_template/web` to `mygame/` (e.g. using `cp -Rf` or a file manager). This new `web` folder replaces the old one and has a very different structure. -- `evennia migrate` -- `evennia start` +- It's possible you need to replace/comment out import and calls to the deprecated +[`django.conf.urls`](https://docs.djangoproject.com/en/3.2/ref/urls/#url). The new way to call it is +[available here](https://docs.djangoproject.com/en/4.0/ref/urls/#django.urls.re_path). +- Run `evennia migrate` +- Run `evennia start` -If you made extensive work in your game dir, you may well find that you need to do some (hopefully minor) -changes to your code before it will start with Evennia 1.0. Some important points: +If you made extensive work in your game dir, you may well find that you need to do some (hopefully minor) +changes to your code before it will start with Evennia 1.0. Some important points: -- The `evennia/contrib/` folder changed structure - there are now categorized sub-folders, so you have to update +- The `evennia/contrib/` folder changed structure - there are now categorized sub-folders, so you have to update your imports. - Any `web` changes need to be moved back from your backup into the new structure of `web/` manually. -- See the [Evennia 1.0 Changelog](../Coding/Changelog.md) for all changes. \ No newline at end of file +- See the [Evennia 1.0 Changelog](../Coding/Changelog.md) for all changes. From 90059f82b100fcc12e9bc9da6f2be20b5a955df6 Mon Sep 17 00:00:00 2001 From: Brenden Tuck Date: Sat, 13 Aug 2022 21:11:46 -0400 Subject: [PATCH 085/177] Add a simple raw HTML message renderer --- .../web/static/webclient/js/plugins/html.js | 63 ++++ .../static/webclient/js/plugins/text2html.js | 348 ++++++++++++++++++ evennia/web/templates/webclient/base.html | 2 + 3 files changed, 413 insertions(+) create mode 100644 evennia/web/static/webclient/js/plugins/html.js create mode 100644 evennia/web/static/webclient/js/plugins/text2html.js diff --git a/evennia/web/static/webclient/js/plugins/html.js b/evennia/web/static/webclient/js/plugins/html.js new file mode 100644 index 0000000000..3ae2666cbf --- /dev/null +++ b/evennia/web/static/webclient/js/plugins/html.js @@ -0,0 +1,63 @@ +/* + * Evennia server-side-generated "raw" HTML message handler plugin + * + * PLUGIN ORDER PREREQS: + * loaded after: + * webclient_gui.js + * option2.js + * loaded before: + * + * + * To use, at minimum, in evennia python code: + * target.msg( html="
    ...etc...
    " ) + * + * or, if you prefer tagged routing (RECOMMENDED): + * target.msg( html=("
    ...etc...
    ",{'type':'tag'}) ) + * + */ +let html_plugin = (function () { + // + var html = function (args, kwargs) { + let options = window.options; + if( !("html" in options) || options["html"] === false ) { return; } + + var mwins = window.plugins["goldenlayout"].routeMessage(args, kwargs); + mwins.forEach( function (mwin) { + mwin.append(args[0]); + mwin.scrollTop(mwin[0].scrollHeight); + }); + } + + // + var onOptionsUI = function (parentdiv) { + let options = window.options; + var checked; + + checked = options["html"] ? "checked='checked'" : ""; + var mmHtml = $( [ "" + ].join("") ); + mmHtml.on("change", window.plugins["options2"].onOptionCheckboxChanged); + + parentdiv.append(mmHtml); + } + + // + // Mandatory plugin init function + var init = function () { + let options = window.options; + options["html"] = true; + + let Evennia = window.Evennia; + Evennia.emitter.on("html", html); // capture "image" commands + console.log('HTML plugin initialized'); + } + + return { + init: init, + onOptionsUI: onOptionsUI, + } +})(); +plugin_handler.add("html_plugin", html_plugin); diff --git a/evennia/web/static/webclient/js/plugins/text2html.js b/evennia/web/static/webclient/js/plugins/text2html.js new file mode 100644 index 0000000000..f0593b1d46 --- /dev/null +++ b/evennia/web/static/webclient/js/plugins/text2html.js @@ -0,0 +1,348 @@ + +/* + * + * Evennia Webclient text2html component + * + * This is used in conjunction with the main evennia.js library, which + * handles all the communication with the Server. + * + */ + +// +// Global Parser for text2html +// +var text2html_plugin = (function () { + "use strict" + + let asciiESC = String.fromCharCode(27); // string literal for ASCII ESC bytes + + let foreground = "color-102"; // state tracker for foreground css + let background = ""; // state tracker for background css + let underline = ""; // state tracker for underlines css + + let pipecodes = /^(\|\[?[0-5][0-5][0-5])|(\|\[[0-9][0-9]?m)|(\|\[?=[a-z])|(\|[![]?[unrgybmcwxhRGYBMCWXH_/>*^-])/; + // example ^|000 or ^|[22m or ^|=a or ^|_ + + let csslookup = { + "|n": "normal", + "|r": "color-009", + "|g": "color-010", + "|y": "color-011", + "|b": "color-012", + "|m": "color-013", + "|c": "color-014", + "|w": "color-015", + "|x": "color-008", + "|R": "color-001", + "|G": "color-002", + "|Y": "color-003", + "|B": "color-004", + "|M": "color-005", + "|C": "color-006", + "|W": "color-007", + "|X": "color-000", + "|[r": "bgcolor-196", + "|[g": "bgcolor-046", + "|[y": "bgcolor-226", + "|[b": "bgcolor-021", + "|[m": "bgcolor-201", + "|[c": "bgcolor-051", + "|[w": "bgcolor-231", + "|[x": "bgcolor-102", + "|[R": "bgcolor-001", + "|[G": "bgcolor-002", + "|[Y": "bgcolor-003", + "|[B": "bgcolor-004", + "|[M": "bgcolor-005", + "|[C": "bgcolor-006", + "|[W": "bgcolor-007", + "|[X": "bgcolor-000", + "|=a": "color-016", + "|=b": "color-232", + "|=c": "color-233", + "|=d": "color-234", + "|=e": "color-235", + "|=f": "color-236", + "|=g": "color-237", + "|=h": "color-238", + "|=i": "color-239", + "|=j": "color-240", + "|=k": "color-241", + "|=l": "color-242", + "|=m": "color-243", + "|=n": "color-244", + "|=o": "color-245", + "|=p": "color-246", + "|=q": "color-247", + "|=r": "color-248", + "|=s": "color-249", + "|=t": "color-250", + "|=u": "color-251", + "|=v": "color-252", + "|=w": "color-253", + "|=x": "color-254", + "|=y": "color-255", + "|=z": "color-231", + "|[=a": "bgcolor-016", + "|[=b": "bgcolor-232", + "|[=c": "bgcolor-233", + "|[=d": "bgcolor-234", + "|[=e": "bgcolor-235", + "|[=f": "bgcolor-236", + "|[=g": "bgcolor-237", + "|[=h": "bgcolor-238", + "|[=i": "bgcolor-239", + "|[=j": "bgcolor-240", + "|[=k": "bgcolor-241", + "|[=l": "bgcolor-242", + "|[=m": "bgcolor-243", + "|[=n": "bgcolor-244", + "|[=o": "bgcolor-245", + "|[=p": "bgcolor-246", + "|[=q": "bgcolor-247", + "|[=r": "bgcolor-248", + "|[=s": "bgcolor-249", + "|[=t": "bgcolor-250", + "|[=u": "bgcolor-251", + "|[=v": "bgcolor-252", + "|[=w": "bgcolor-253", + "|[=x": "bgcolor-254", + "|[=y": "bgcolor-255", + "|[=z": "bgcolor-231", + // not sure what these nexts ones are actually supposed to map to + "|[0m": "normal", + "|[1m": "normal", + "|[22m": "normal", + "|[36m": "color-006", + "|[37m": "color-015", + } + + function ascii (l) { + let a = new String(l); // force string + return a.charCodeAt(0); + } + + // dumb convert any leading or trailing spaces/tabs to   sequences + var handleSpaces = function (text) { + // TODO should probably get smart about replacing spaces inside "normal" text + return text.replace( /\t/g, "    ").replace( / /g, " "); + } + + + // javascript doesn't have a native sprintf-like function + function zfill(string, size) { + while (string.length < size) string = "0" + string; + return string; + } + + + // given string starting with a pipecode |xx + // return the css (if any) and text remainder + var pipe2css = function(pipecode) { + let regx = ""; + let css = "color-102"; + + regx = /^(\|\[?[nrgybmcwxhRGYBMCWX])/; + css = pipecode.match( regx ); + if( css != null ) { + return csslookup[ css[1] ]; + } + + regx = /^(\|\[?=[a-z])/; + css = pipecode.match( regx ); + if( css != null ) { + return csslookup[ css[1] ]; + } + + regx = /^(\|\[[0-9][0-9]?m)/; + css = pipecode.match( regx ); + if( css != null ) { + return csslookup[ css[1] ]; + } + + regx = /^(\|n)/; + css = pipecode.match( regx ); + if( css != null ) { + return "normal"; + } + + regx = /^(\|u)/; + css = pipecode.match( regx ); + if( css != null ) { + return "underline"; + } + + regx = /^\|([0-5][0-5][0-5])/; + css = pipecode.match( regx ); + if( css != null ) { + return "color-" + zfill( (parseInt(css[1], 6) + 16).toString(), 3); + } + + regx = /^\|\[([0-5][0-5][0-5])/; + css = pipecode.match( regx ); + if( css != null ) { + return "bgcolor-" + zfill( (parseInt(css[1], 6) + 16).toString(), 3); + } + + return css; + } + + + // convert any HTML sensitive characters to &code; format + var htmlEscape = function (text) { + text = text.replace(/&/g, "&"); + text = text.replace(//g, ">"); + text = text.replace(/"/g, """); + text = text.replace(/'/g, "'"); + text = handleSpaces(text); + return text; + } + + + // track stateful CSS + var trackCSS = function (css) { + if( (typeof css !== 'string') && ! (css instanceof String) ) { + css = ""; + } + + if( css.startsWith( "color-" ) ) { + foreground = css; + } + + if( css.startsWith( "bgcolor-" ) ) { + background = css; + } + + if( css === "underline" ) { + underline = css; + } + + if( css === "normal" ) { + foreground = "color-102"; + background = ""; + underline = ""; + } + + return foreground + " " + background + " " + underline ; + } + + + /* + * + */ + var parse2HTML = function (text) { + let html = ""; + foreground = "color-102"; // state tracker for foreground css + background = ""; // state tracker for background css + underline = ""; // state tracker for underlines css + + // HACK: parse TELNET ASCII byte-by-byte, convert ESC's to |'s -- serverside "raw" bug? + // Bug is further proven out by the fact that |'s don't come through as doubles. + let hack = new RegExp( String.fromCharCode(27) ); + if( text.match( hack ) ) { + let chars = text.split(''); // to characters + for( let n=0; n's with no HTML height + if( string === "" ) { + html += "
     
    "; + continue; + } + + html += "
    "; + + let spans = string.split( "|" ); + + // this split means there are 2 possible cases + + // possibly-0-length leading span with "default" styling (may be the ONLY span) + let span = spans[0].replaceAll("|", "|"); // avoid htmlEscape mangling literal |'s + if( span.length > 0 ) { + html += "" + htmlEscape(span) + ""; + } + + // "standard" span array of [xxxtext1, xxtext2, xxtext3], where x's are pipe-codes + for( let n=1; n" + htmlEscape(remainder) + ""; + } + + html += "
    "; + } + + return html; + } + + // The Main text2html message capture fuction -- calls parse2HTML() + var text2html = function (args, kwargs) { + let options = window.options; + if( !("text2html" in options) || options["text2html"] === false ) { return; } + + var mwins = window.plugins["goldenlayout"].routeMessage(args, kwargs); + mwins.forEach( function (mwin) { + mwin.append( parse2HTML( args[0]) ); // the heavy workload + mwin.scrollTop(mwin[0].scrollHeight); + }); + } + + // + var onOptionsUI = function (parentdiv) { + let options = window.options; + var checked; + + checked = options["text2html"] ? "checked='checked'" : ""; + var text2html = $( [ "" + ].join("") ); + text2html.on("change", window.plugins["options2"].onOptionCheckboxChanged); + + parentdiv.append(text2html); + } + + // + // Mandatory plugin init function + var init = function () { + let options = window.options; + options["text2html"] = true; + + let Evennia = window.Evennia; + Evennia.emitter.on("text2html", text2html); // capture "text2html" outfunc events + + console.log('Text2Html plugin initialized'); + } + + return { + init: init, + onOptionsUI: onOptionsUI, + parse2HTML: parse2HTML, + } +})(); +plugin_handler.add("text2html_plugin", text2html_plugin); diff --git a/evennia/web/templates/webclient/base.html b/evennia/web/templates/webclient/base.html index 96af22340c..ca8460c242 100644 --- a/evennia/web/templates/webclient/base.html +++ b/evennia/web/templates/webclient/base.html @@ -100,6 +100,8 @@ JQuery available. + + {% endblock %} From cb2cb94082b5f8d0e3d9bd03ecd2656680a65f3f Mon Sep 17 00:00:00 2001 From: InspectorCaracal Date: Fri, 19 Aug 2022 17:30:50 -0600 Subject: [PATCH 086/177] init --- .../base_systems/character_creator/README.md | 87 ++++ .../character_creator/character_creator.py | 205 ++++++++ .../character_creator/example_menu.py | 446 ++++++++++++++++++ .../base_systems/character_creator/tests.py | 32 ++ 4 files changed, 770 insertions(+) create mode 100644 evennia/contrib/base_systems/character_creator/README.md create mode 100644 evennia/contrib/base_systems/character_creator/character_creator.py create mode 100644 evennia/contrib/base_systems/character_creator/example_menu.py create mode 100644 evennia/contrib/base_systems/character_creator/tests.py diff --git a/evennia/contrib/base_systems/character_creator/README.md b/evennia/contrib/base_systems/character_creator/README.md new file mode 100644 index 0000000000..f45f957b82 --- /dev/null +++ b/evennia/contrib/base_systems/character_creator/README.md @@ -0,0 +1,87 @@ +# Character Creator contrib +by InspectorCaracal + +This contrib is designed to be used in MULTISESSION_MODE = 2 or higher, where characters are not automatically created to match the account. + +## Installation + +In your game folder `commands/default_cmdsets.py`, import and add `ContribCmdCharCreate` to your `AccountCmdSet`. + +Example: +```py +from evennia.contrib.base_systems.character_creator.character_creator import ContribCmdCharCreate + +class AccountCmdSet(default_cmds.AccountCmdSet): + + def at_cmdset_creation(self): + super().at_cmdset_creation() + self.add(ContribCmdCharCreate) +``` + +In your game folder `typeclasses/accounts.py`, import and inherit from `ContribChargenAccount` on your Account class. + +(Alternatively, you can copy the `at_look` method directly into your own class.) + +Example: +```py +from evennia.contrib.base_systems.character_creator.character_creator import ContribChargenAccount + +class Account(ContribChargenAccount): + # your Account class code +``` + +Lastly, in your `settings.py` file, define `CHARGEN_MENU` to your character creation menu module's location. + +Example: +```py +CHARGEN_MENU = "evennia.contrib.base_systems.character_creator.example_menu" +``` + +## Usage + +### The EvMenu + +In order to use the contrib, you will need to create your own chargen EvMenu. The included `example_menu.py` gives a number of useful menu node techniques with basic attribute examples for you to reference. It can be run as-is as a tutorial for yourself/your devs, or used as base for your own menu. + +The example menu includes code, tips, and instructions for the following types of decision nodes: + +#### Informational Pages + +A small set of nodes that let you page through information on different choices before committing to one. + +#### Option Categories + +A pair of nodes which let you divide an arbitrary number of options into separate categories. + +The base node has a list of categories as the options, and the child node displays the actual character choices. + +#### Multiple Choice + +Allows players to select and deselect options from the list in order to choose more than one. + +#### Starting Objects + +Allows players to choose from a selection of starting objects, which are then created on chargen completion. + +#### Choosing a Name + +The contrib assumes the player will choose their name during character creation, so the necessary code for doing so is of course included! + + +### `charcreate` command + +The contrib overrides the character creation command - `charcreate` - to use a character creator menu, as well as supporting exiting/resuming the process. In addition, unlike the core command, it's designed for the character name to be chosen later on via the menu, so it won't parse any arguments passed to it. + +### Changes to `Account.at_look` + +The contrib version works mostly the same as core evennia, but adds an additional check to recognize an in-progress character. If you've modified your own `at_look` hook, it's an easy addition to make: just add this section to the playable character list loop. +```py + for char in characters: + # contrib code starts here + if char.db.chargen_step: + # currently in-progress character; don't display placeholder names + result.append("\n - |Yin progress|n (|wcharcreate|n to continue)") + continue + # the rest of your code continues here +``` + diff --git a/evennia/contrib/base_systems/character_creator/character_creator.py b/evennia/contrib/base_systems/character_creator/character_creator.py new file mode 100644 index 0000000000..2749d5dfe7 --- /dev/null +++ b/evennia/contrib/base_systems/character_creator/character_creator.py @@ -0,0 +1,205 @@ +""" +Character Creator contrib, by InspectorCaracal + +This contrib is designed to be used in MULTISESSION_MODE = 2 or higher, +where characters are not automatically created to match the account. + +# Features + +The primary feature of this contrib is defining the name and attributes +of a new character through an EvMenu. It provides an alternate `charcreate` +command as well as a modified `at_look` method for your Account class. + +# Usage + +In order to use the contrib, you will need to create your own chargen +EvMenu. The included `example_menu.py` gives a number of useful techniques +and examples, including how to allow players to choose and confirm +character names from within the menu. + +""" +from random import choices +import string + +from django.conf import settings +from evennia.commands.default.muxcommand import MuxAccountCommand +from evennia.objects.models import ObjectDB +from evennia.utils import create, search +from evennia.utils.evmenu import EvMenu + + +class ContribCmdCharCreate(MuxAccountCommand): + """ + create a new character + + Begin creating a new character, or resume character creation for + an existing in-progress character. + + You can stop character creation at any time and resume where + you left off later. + """ + key = "charcreate" + locks = "cmd:pperm(Player) and is_ooc()" + help_category = "General" + + def func(self): + "create the new character" + account = self.account + session = self.session + + # only one character should be in progress at a time, so we check for WIPs first + in_progress = [chara for chara in account.playable if chara.db.chargen_step] + + if len(in_progress): + # we're continuing chargen for a WIP character + new_character = in_progress[0] + else: + # we're making a new character + charmax = settings.MAX_NR_CHARACTERS if settings.MULTISESSION_MODE > 1 else 1 + + if not account.is_superuser and ( + account.db._playable_characters and len(account.db._playable_characters) >= charmax + ): + plural = "" if charmax == 1 else "s" + self.msg(f"You may only create a maximum of {charmax} character{plural}.") + return + + # create the new character object, with default settings + start_location = ObjectDB.objects.get_id(settings.START_LOCATION) + default_home = ObjectDB.objects.get_id(settings.DEFAULT_HOME) + permissions = settings.PERMISSION_ACCOUNT_DEFAULT + # generate a randomized key so the player can choose a character name later + key = ''.join(choices(string.ascii_letters + string.digits, k=10) + new_character = create.create_object(Character, key=key, + location=None, + home=home, + permissions=permissions) + # only allow creator (and developers) to puppet this char + new_character.locks.add( + f"puppet:pid({account.id}) or perm(Developer) or pperm(Developer);delete:id({account.id}) or perm(Admin)" + ) + # initalize the new character to the beginning of the chargen menu + new_character.db.chargen_step = "menunode_welcome" + account.db._playable_characters.append(new_character) + + # set the menu node to start at to the character's last saved step + startnode = new_character.db.chargen_step + # attach the character to the session, so the chargen menu can access it + session.new_char = new_character + + # this gets called every time the player exits the chargen menu + def finish_char_callback(session, menu): + char = session.new_char + if not char.db.chargen_step: + # this means character creation was completed - start playing! + # any additional first-time-playing code can go here as well + # e.g. creating generic default gear, + # changing the pre-logout location of the character so they log in to a specific spot, + # notifying admins of a new player, etc. + + # execute the ic command as the session to start puppeting the character + session.execute_cmd("ic {}".format(char.key)) + + EvMenu(session, + settings.CHARGEN_MENU, + startnode=startnode, + cmd_on_exit=finish_char_callback) + + +from django.conf import settings +from evennia import DefaultAccount + + +class ContribChargenAccount(DefaultAccount): + """ + A modified Account class that makes minor changes to the OOC look + output, to incorporate in-progress characters. + """ + + def at_look(self, target=None, session=None, **kwargs): + """ + Called by the OOC look command. It displays a list of playable + characters and should be mostly identical to the core method. + + Args: + target (Object or list, optional): An object or a list + objects to inspect. + session (Session, optional): The session doing this look. + **kwargs (dict): Arbitrary, optional arguments for users + overriding the call (unused by default). + + Returns: + look_string (str): A prepared look string, ready to send + off to any recipient (usually to ourselves) + """ + + # list of targets - make list to disconnect from db + characters = list(tar for tar in target if tar) if target else [] + sessions = self.sessions.all() + is_su = self.is_superuser + + # text shown when looking in the ooc area + result = [f"Account |g{self.key}|n (you are Out-of-Character)"] + + nsess = len(sessions) + if nsess == 1: + result.append("\n\n|wConnected session:|n") + elif nsess > 1: + result.append(f"\n\n|wConnected sessions ({nsess}):|n") + for isess, sess in enumerate(sessions): + csessid = sess.sessid + addr = "{protocol} ({address})".format( + protocol=sess.protocol_key, + address=isinstance(sess.address, tuple) and str(sess.address[0]) or str(sess.address), + ) + if session.sessid == csessid: + result.append(f"\n |w* {isess+1}|n {addr}") + else + result.append(f"\n {isess+1} {addr}") + + result.append("\n\n |whelp|n - more commands") + result.append("\n |wpublic |n - talk on public channel") + + charmax = settings.MAX_NR_CHARACTERS + + if is_su or len(characters) < charmax: + result.append("\n |wcharcreate|n - create a new character") + + if characters: + result.append( + "\n |wdchardelete |n - delete a character (cannot be undone!)" + ) + plural = "" if len(characters) == 1 else "s" + result.append("\n |wic |n - enter the game (|wooc|n to return here)") + if is_su: + result.append( + f"\n\nAvailable character{plural} ({len(characters)}/unlimited):" + ) + else: + result.append( + f"\n\nAvailable character{plural} ({len(characters)}/{charmax}):" + ) + + for char in characters: + if char.db.chargen_step: + # currently in-progress character; don't display placeholder names + result.append("\n - |Yin progress|n (|wcharcreate|n to continue)") + continue + csessions = char.sessions.all() + if csessions: + for sess in csessions: + # character is already puppeted + sid = sess in sessions and sessions.index(sess) + 1 + if sess and sid: + result.append( + f"\n - |G{char.key}|n [{', '.join(char.permissions.all())}] (played by you in session {sid})" + ) + else: + result.append( + f"\n - |R{char.key}|n [{', '.join(char.permissions.all())}] (played by someone else)" + ) + else: + # character is available + result.append(f"\n - {char.key} [{', '.join(char.permissions.all())}]") + look_string = ("-" * 68) + "\n" + "".join(result) + "\n" + ("-" * 68) + return look_string diff --git a/evennia/contrib/base_systems/character_creator/example_menu.py b/evennia/contrib/base_systems/character_creator/example_menu.py new file mode 100644 index 0000000000..b4d5c6b5af --- /dev/null +++ b/evennia/contrib/base_systems/character_creator/example_menu.py @@ -0,0 +1,446 @@ +""" +An example EvMenu for the character creator contrib. + +This menu is not intended to be a full character creator, but to demonstrate +several different useful node types for your own creator. Any of the different +techniques demonstrated here can be combined into a single decision point. + +## Informational Pages + +A set of nodes that let you page through information on different choices. + +The example shows how to have a single informational page for each option, but +you can expand that into sub-categories by setting the values to dictionaries +instead of simple strings and referencing the "Option Categories" nodes. + +## Option Categories + +A pair of nodes which let you divide your options into separate categories. +The base node has a list of categories as the options, which is passed to the +child node. That child node then presents the options for that category and +allows the player to choose one. + +## Multiple Choice + +Allows players to select and deselect options from the list in order to choose +more than one. The example has a requirement of choosing exactly 3 options, +but you can change it to a maximum or minimum number of required options - +or remove the requirement check entirely. + +## Starting Objects + +Allows players to choose from a selection of starting objects. + +When creating starting objects e.g. gear, it's best to actually create them +at the end, so you don't have to patch checks in for orphaned objects or +infinite-object player exploits. + +## Choosing a Name + +The contrib character create command assumes the player will choose their name +during character creation. This section validates name choices before confirming +them. + +## The End + +It might not seem like an important part, since the players don't make a decision +here, but the final node of character creation is where you finalize all of +the decisions players made earlier. Initializing skills, creating starting gear, +and other one-time method calls and set-up should be put here. +""" + +from evennia import create_object +from evennia.utils import dedent +from evennia.utils.evtable import EvTable +from evennia.prototypes.spawner import spawn + +import inflect +_INFLECT = inflect.engine() + +from typeclasses.characters import Character + +######################################################### +# Welcome Page +######################################################### + +def menunode_welcome(caller): + """Starting page.""" + text = dedent("""\ + |wWelcome to Character Creation!|n + + This is the starting node for all brand new characters. It's a good place to + remind players that they can exit the character creator and resume later, + especially if you're going to have a really long chargen process. + + A brief overview of the game could be a good idea here, too, or a link to your + game wiki if you have one. + """) + help = "You can explain the commands for exiting and resuming more specifically here." + options = [{"desc": "Let's begin!", "goto": "menunode_info_base"}] + return (text, help), options + + +######################################################### +# Informational Pages +######################################################### + +# Storing your information in a dictionary like this makes the menu nodes much cleaner, +# as well as making info easier to update. You can even import it from a different module, +# e.g. wherever you have the classes actually defined, so later updates only happen in one place. +_CLASS_INFO_DICT = { + # The keys here are the different options you can choose, and the values are the info pages + "warrior": dedent("""\ + Most warriors specialize in melee weapons, although ranged combat + is not unheard of. + + Warriors like to compete by beating each other up for fun. + """), + }, + "mage": dedent("""\ + Mages prefer less combative lines of work, such as showmanship or + selling enchanted charms. Those who choose to be a battle mage are + highly sought after by adventuring parties. + + Mage schools, being led by the most academic-minded of mages, are + notorious for intellectual snobbery. + """), + }, +} + +def menunode_info_base(caller): + """Base node for the informational choices.""" + # this is a base node for a decision, so we want to save the character's progress here + caller.new_char.db.chargen_step = "menunode_info_base" + + text = dedent("""\ + |wInformational Pages|n + + Sometimes you'll want to let players read more about options before choosing + one of them. This is especially useful for big choices like race or class. + """) + help = "A link to your wiki for more information on classes could be useful here." + options = [] + # Build your options from your info dict so you don't need to update this to add new options + for pclass in _CLASS_INFO_DICT.keys(): + options.append({"desc": f"Learn about the |c{pclass}|n class", "goto": ("menunode_info_class", { "selected_class": pclass })}) + return (text, help), options + +# putting your kwarg in the menu declaration helps keep track of what variables the node needs +def menunode_info_class(caller, raw_string, selected_class=None, **kwargs): + """Informational overview of a particular class""" + + # sometimes weird bugs happen - it's best to check for them rather than let the game break + if not selected_class: + # reset back to the previous step + caller.new_char.db.chargen_step = "menunode_welcome" + # print error to player and quit the menu + return "Something went wrong. Please try again." + + # Since you have all the info in a nice dict, you can just grab it to display here + text = _CLASS_INFO_DICT[pclass] + help = "If you want option-specific help, you can define it in your info dict and reference it." + options = [] + + # set an option for players to choose this class + options.append({"desc": f"Become {_INFLECT.an(selected_class)}", "goto": (_set_class, { "selected_class": selected_class })}) + + # once again build your options from the same info dict + for pclass in _CLASS_INFO_DICT.keys(): + # make sure you don't print the currently displayed page as an option + if pclass != selected_class: + options.append({"desc": f"Learn about the |c{pclass}|n class", "goto": ("menunode_info_class", { "selected_class": pclass })}) + return (text, help), options + + +def _set_class(caller, raw_string, selected_class=None, **kwargs): + """Set the character's species and define their available features.""" + # a class should always be selected here + if not selected_class: + # go back to the base node for this decision + return "menunode_info_base" + + char = caller.new_char + # any special code for setting this option would go here! + # but we'll just set an attribute + char.db.player_class = selected_class + + # move on to the next step! + return "menunode_categories" + + +######################################################### +# Option Categories +######################################################### + +# for these subcategory options, we make a dict of categories and option lists +_APPEARANCE_DICT = { + # the key is your category; the value is a list of options, in the order you want them to appear + "body type": [ "skeletal", "skinny", "slender", "slim", "athletic", "muscular", "broad", "round", "curvy", "stout", "chubby" ], + "height": [ "diminutive", "short", "average", "tall", "towering" ], + } + +def menunode_categories(caller, **kwargs): + """Base node for categorized options.""" + # this is a new decision step, so save your resume point here + caller.new_char.db.chargen_step = "menunode_categories" + + text = dedent("""\ + |wOption Categories|n + + Some character attributes are part of the same mechanic or decision, + but need to be divided up into sub-categories. Character appearance + details are an example of where this can be useful. + """) + + help = "Some helpful extra information on what's affected by these choices works well here." + options = [] + + # just like for informational categories, build the options off of a dictionary to make it easier to manage + for category in _APPEARANCE_DICT.keys(): + options.append({"desc": f"Choose your |c{category}|n", "goto": ("menunode_category_options", { "category": category })}) + + # since this node goes in and out of sub-nodes, you need an option to proceed to the next step + options.append({"key": "(Next)", "next", "n"), "desc": "Continue to the next step.", "goto": "menunode_multi_choice"}) + # once past the first decision, it's also a good idea to include a "back to previous step" option + options.append({"key": ("(Back)", "back", "b"), "desc": "Go back to the previous step", "goto": "menunode_info_base"}) + return (text, help), options + +def menunode_category_options(caller, raw_string, category=None, **kwargs): + """Choosing an option within the categories.""" + if not category: + # this shouldn't have happened, so quit and retry + return "Something went wrong. Please try again." + + # for mechanics-related choices, you can combine this with the + # informational options approach to give specific info + text = "Choose your {category}:" + help = "This will define your {category}." + + options = [] + # build the list of options from the right category of your dictionary + for option in _APPEARANCE_DICT[category]: + options.append({"desc": option, "goto": (_set_category_opt, { "category": category, "value": option})}) + # always include a "back" option in case they aren't ready to pick yet + options.append({"key": ("(Back)", "back", "b"), "desc": f"Don't change {category}", "goto": "menunode_categories"}) + return (text, help), options + +def _set_category_opt(caller, raw_string, category, value, **kwargs): + """Set the option for a category""" + + # this is where you would put any more complex code involved in setting the option, + # but we're just doing simple attributes + caller.new_char.attributes.add(category, value) + + # go back to the base node for the categories choice to pick another + return "menunode_categories" + + +######################################################### +# Multiple Choice +######################################################### + +# it's not as important to make this a separate list, but like all the others, +# it's easier to read and to update if you do! +_SKILL_OPTIONS = [ "alchemy", "archery", "blacksmithing", "brawling", "dancing", "fencing", "pottery", "tailoring", "weaving" ] + +def menunode_multi_choice(caller, raw_string, **kwargs): + """A multiple-choice menu node.""" + char = caller.new_char + + # another decision, so save the resume point + char.db.chargen_step = "menunode_multi_choice" + + # in order to support picking up from where we left off, get the options from the character + # if they weren't passed in + # this is again just a simple attribute, but you could retrieve this list however + selected = kwargs.get("selected") or char.attributes.get("skill_list", []) + + text = dedent("""\ + |wMultiple Choice|n + + Sometimes you want players to be able to pick more than one option - + for example, starting skills. + + You can easily define it as a minimum, maximum, or exact number of + selected options. + """) + + help = "This is a good place to specify how many choices are allowed or required." + + options = [] + for option in _SKILL_OPTIONS: + # check if the option has been selected + if option in selected: + # if it's been selected, we want to highlight that + opt_desc = f"|y({option}) (selected)|n" + else: + opt_desc = option + options.append({"desc": opt_desc, "goto": ( _set_multichoice, {"selected": selected, "option": option, "add": add})}) + + # only display the Next option if the requirements are met! + # for this example, you need exactly 3 choices, but you can use an inequality for "no more than X", or "at least X" + if len(selected) == 3: + options.append({"key": ("(Next)", "next", "n"), "desc": "Continue to the next step", "goto": "menunode_choose_objects"}) + options.append({"key": ("(Back)", "back", "b"), "desc": "Go back to the previous step", "goto": "menunode_categories"}) + + return (text, help), options + +def _set_multichoice(caller, raw_string, selected=[], **kwargs): + """saves the current choices to the character""" + # get the option being chosen + if option := kwargs.get("option"): + # if the option is already in the list, then we want to remove it + if option in selected: + selected.remove(option) + # otherwise, we're adding it + else: + selected.add(option) + + # now that the options are updated, save it to the character + # this is just setting an attribute but it could be anything + caller.new_char.attributes.add("skill_list", selected) + + # pass the list back so we don't need to retrieve it again + return ("menunode_multi_choice", {"selected": selected}) + + +######################################################### +# Starting Objects +######################################################### + +# for a real game, you would most likely want to build this list from +# your existing game prototypes module(s), but for a demo this'll do! +_EXAMPLE_PROTOTYPES = [ + # starter sword prototype + { + "key": "basic sword", + "desc": "This sword will do fine for stabbing things.", + "tags": [("sword", "weapon")], + }, + # starter staff prototype + { + "key": "basic staff", + "desc": "You could hit things with it, or maybe use it as a spell focus.", + "tags": [("staff", "weapon"),("staff", "focus")], + } +] + +# this method will be run to create the starting objects +def create_objects(character): + """do the actual object spawning""" + # since our example chargen saves the starting prototype to an attribute, we retrieve that here + proto = dict(character.db.starter_weapon) + # set the location to our character, so they actually have it + proto["location"] = character + # create the object + spawn(proto) + + +def menunode_choose_objects(caller, raw_string, **kwargs): + """Selecting objects to start with""" + char = caller.new_char + + # another decision, so save the resume point + char.db.chargen_step = "menunode_choose_objects" + + text = dedent("""\ + |wStarting Objects|n + + Whether it's a cosmetic outfit, a starting weapon, or a professional + tool kit, you probably want to let your players have a choice in + what objects they start out with. + """) + + help = "An overview of what the choice affects - whether it's purely aesthetic or mechanical, and whether you can change it later - are good here." + + options = [] + + for proto in _EXAMPLE_PROTOTYPES: + # use the key as the option description, but pass the whole prototype + options.append({"desc": f"Choose {_INFLECT.an(option['key'])", "goto": ( _set_object_choice, {"proto": proto})}) + + options.append({"key": ("(Back)", "back", "b"), "desc": "Go back to the previous step", "goto": "menunode_multi_choice"}) + + return (text, help), options + +def _set_object_choice(caller, raw_string, proto, **kwargs): + """Save the selected starting object(s)""" + + # we DON'T want to actually create the object, yet! that way players can still go back and change their mind + # instead, we save what object was chosen - in this case, by saving the prototype dict to the character + caller.new_char.db.starter_weapon = proto + + # continue to the next step + return "menunode_select_name" + + +######################################################### +# Choosing a Name +######################################################### + +def menunode_choose_name(caller, raw_string, **kwargs): + """Name selection""" + + # another decision, so save the resume point + char.db.chargen_step = "menunode_choose_name" + + text = dedent("""/ + |wChoosing a Name|n + + Especially for roleplaying-centric games, being able to choose your + character's name after deciding everything else, instead of before, + is really useful. + + Enter a name here to check if it's available. + """) + help = "You'll have a chance to change your mind before confirming, even if the name is free." + # since this is a free-text field, we just have the one + options = [ { "key": "_default", "goto": "menunode_check_charname" } ] + return (text, help), options + +def menunode_check_charname(caller, raw_string, **kwargs): + """Check and confirm name choice""" + + # strip any extraneous whitespace from the raw text + # if you want to do any other validation on the name, e.g. no punctuation allowed, this is the place! + charname = raw_string.strip() + + # check to make sure that the name doesn't already exist + candidates = Character.objects.filter_family(db_key__iexact=charname) + if len(candidates): + # the name is already taken - loop this node with new input to enter another name + text = f"|w{charname}|n is unavailable.\n\nEnter a different name." + options = [ { "key": "_default", "goto": "menunode_check_charname" } ] + return text, options + else: + # it's free! set the character's key to the name to reserve it + caller.new_char.key = charname + text = f"|w{charname}|n is available! Confirm?" + # let players change their mind and go back to the name choice, if they want + options = [ + { "key": "Yes", "goto": "menunode_end" }, + { "key": "No", "goto": "menunode_choose_name" }, + ] + return text, options + + + +######################################################### +# The End +######################################################### + +def menunode_end(caller, raw_string): + """End-of-chargen cleanup.""" + char = caller.new_char + # since everything is finished and confirmed, we actually create the starting objects now + create_objects(char) + + # clear in-progress status + caller.new_char.attributes.remove("chargen_step") + text = dedent(""" + Congratulations! + + You have completed character creation. Enjoy the game! + """) + return text, None + diff --git a/evennia/contrib/base_systems/character_creator/tests.py b/evennia/contrib/base_systems/character_creator/tests.py new file mode 100644 index 0000000000..8e8bf4fba2 --- /dev/null +++ b/evennia/contrib/base_systems/character_creator/tests.py @@ -0,0 +1,32 @@ +from evennia.utils.test_resources import ( + BaseEvenniaTest, + BaseEvenniaCommandTest, + EvenniaCommandTest, +) # noqa +from . import character_creator + +class TestAccount(BaseEvenniaCommandTest): + def test_ooc_look(self): + if settings.MULTISESSION_MODE < 2: + self.call( + account.CmdOOCLook(), "", "You are out-of-character (OOC).", caller=self.account + ) + if settings.MULTISESSION_MODE == 2: + # with no playable characters + self.call( + account.CmdOOCLook(), + "", + "Account TestAccount (you are Out-of-Character)", + caller=self.account, + ) + # with in-progress character + + + def test_char_create(self): + self.call( + character_creator.ContribCmdCharCreate(), + "Test1=Test char", + "Created new character Test1. Use ic Test1 to enter the game", + caller=self.account, + ) + From f3589e5f0378ebdda0ba9b83e8cbaf484ab572a5 Mon Sep 17 00:00:00 2001 From: InspectorCaracal Date: Fri, 19 Aug 2022 23:11:28 -0600 Subject: [PATCH 087/177] ready to try it --- .../character_creator/character_creator.py | 20 +++++-------- .../base_systems/character_creator/tests.py | 29 ++++++++++--------- 2 files changed, 24 insertions(+), 25 deletions(-) diff --git a/evennia/contrib/base_systems/character_creator/character_creator.py b/evennia/contrib/base_systems/character_creator/character_creator.py index 2749d5dfe7..aa20cb87cd 100644 --- a/evennia/contrib/base_systems/character_creator/character_creator.py +++ b/evennia/contrib/base_systems/character_creator/character_creator.py @@ -27,6 +27,7 @@ from evennia.objects.models import ObjectDB from evennia.utils import create, search from evennia.utils.evmenu import EvMenu +_CHARACTER_TYPECLASS = settings.BASE_CHARACTER_TYPECLASS class ContribCmdCharCreate(MuxAccountCommand): """ @@ -48,7 +49,7 @@ class ContribCmdCharCreate(MuxAccountCommand): session = self.session # only one character should be in progress at a time, so we check for WIPs first - in_progress = [chara for chara in account.playable if chara.db.chargen_step] + in_progress = [chara for chara in account.db._playable_characters if chara.db.chargen_step] if len(in_progress): # we're continuing chargen for a WIP character @@ -70,7 +71,7 @@ class ContribCmdCharCreate(MuxAccountCommand): permissions = settings.PERMISSION_ACCOUNT_DEFAULT # generate a randomized key so the player can choose a character name later key = ''.join(choices(string.ascii_letters + string.digits, k=10) - new_character = create.create_object(Character, key=key, + new_character = create.create_object(_CHARACTER_TYPECLASS, key=key, location=None, home=home, permissions=permissions) @@ -92,18 +93,13 @@ class ContribCmdCharCreate(MuxAccountCommand): char = session.new_char if not char.db.chargen_step: # this means character creation was completed - start playing! - # any additional first-time-playing code can go here as well - # e.g. creating generic default gear, - # changing the pre-logout location of the character so they log in to a specific spot, - # notifying admins of a new player, etc. - - # execute the ic command as the session to start puppeting the character - session.execute_cmd("ic {}".format(char.key)) + # execute the ic command to start puppeting the character + account.execute_cmd("ic {}".format(char.key)) EvMenu(session, - settings.CHARGEN_MENU, - startnode=startnode, - cmd_on_exit=finish_char_callback) + settings.CHARGEN_MENU, + startnode=startnode, + cmd_on_exit=finish_char_callback) from django.conf import settings diff --git a/evennia/contrib/base_systems/character_creator/tests.py b/evennia/contrib/base_systems/character_creator/tests.py index 8e8bf4fba2..45076d7162 100644 --- a/evennia/contrib/base_systems/character_creator/tests.py +++ b/evennia/contrib/base_systems/character_creator/tests.py @@ -1,8 +1,6 @@ -from evennia.utils.test_resources import ( - BaseEvenniaTest, - BaseEvenniaCommandTest, - EvenniaCommandTest, -) # noqa +from django.test import override_settings +from evennia.utils import inherits_from +from evennia.utils.test_resources import BaseEvenniaCommandTest from . import character_creator class TestAccount(BaseEvenniaCommandTest): @@ -12,21 +10,26 @@ class TestAccount(BaseEvenniaCommandTest): account.CmdOOCLook(), "", "You are out-of-character (OOC).", caller=self.account ) if settings.MULTISESSION_MODE == 2: - # with no playable characters - self.call( + # test both normal output and also inclusion of in-progress character + account.db._playable_characters = [self.char1] + self.char1.db.chargen_step = "start" + output = self.call( account.CmdOOCLook(), "", "Account TestAccount (you are Out-of-Character)", caller=self.account, ) - # with in-progress character - + self.assertIn("|Yin progress|n", output) + @override_settings(CHARGEN_MENU="evennia.contrib.base_systems.example_menu") def test_char_create(self): + account = self.account + session = self.session self.call( character_creator.ContribCmdCharCreate(), - "Test1=Test char", - "Created new character Test1. Use ic Test1 to enter the game", - caller=self.account, + "", + caller=account, ) - + menu = session.ndb._menutree + self.assertNotNone(menu) + self.assertTrue(inherits_from(session.new_char, DefaultCharacter) ) From cb2f75e2764ad1e163073baf586710f1bc757210 Mon Sep 17 00:00:00 2001 From: Brenden Tuck Date: Wed, 17 Aug 2022 18:58:41 -0400 Subject: [PATCH 088/177] Fix the webclient pathing and include new html/text2html docs --- docs/source/Components/Webclient.md | 68 ++++++++++++++++++++++++----- 1 file changed, 56 insertions(+), 12 deletions(-) diff --git a/docs/source/Components/Webclient.md b/docs/source/Components/Webclient.md index da2e3a5506..ea24a81972 100644 --- a/docs/source/Components/Webclient.md +++ b/docs/source/Components/Webclient.md @@ -2,7 +2,7 @@ Evennia comes with a MUD client accessible from a normal web browser. During development you can try it at `http://localhost:4001/webclient`. The client consists of several parts, all under -`evennia/web/webclient/`: +`evennia/web`: `templates/webclient/webclient.html` and `templates/webclient/base.html` are the very simplistic django html templates describing the webclient layout. @@ -18,7 +18,7 @@ be used also if swapping out the gui front end. various plugins, and uses the Evennia object library for all in/out. `static/webclient/js/plugins` provides a default set of plugins that implement a "telnet-like" -interface. +interface, and a couple of example plugins to show how you could implement new plugin features. `static/webclient/css/webclient.css` is the CSS file for the client; it also defines things like how to display ANSI/Xterm256 colors etc. @@ -30,17 +30,17 @@ these. ## Customizing the web client Like was the case for the website, you override the webclient from your game directory. You need to -add/modify a file in the matching directory location within one of the _overrides directories. -These _override directories are NOT directly used by the web server when the game is running, the -server copies everything web related in the Evennia folder over to `mygame/web/static/` and then -copies in all of your _overrides. This can cause some cases were you edit a file, but it doesn't +add/modify a file in the matching directory locations within your project's `mygame/web/` directories. +These directories are NOT directly used by the web server when the game is running, the +server copies everything web related in the Evennia folder over to `mygame/server/.static/` and then +copies in all of your `mygame/web/` files. This can cause some cases were you edit a file, but it doesn't seem to make any difference in the servers behavior. **Before doing anything else, try shutting down the game and running `evennia collectstatic` from the command line then start it back up, clear your browser cache, and see if your edit shows up.** -Example: To change the utilized plugin list, you need to override base.html by copying -`evennia/web/webclient/templates/webclient/base.html` to -`mygame/web/template_overrides/webclient/base.html` and editing it to add your new plugin. +Example: To change the list of in-use plugins, you need to override base.html by copying +`evennia/web/templates/webclient/base.html` to +`mygame/web/templates/webclient/base.html` and editing it to add your new plugin. # Evennia Web Client API (from evennia.js) * `Evennia.init( opts )` @@ -96,6 +96,8 @@ manager for drag-n-drop windows, text routing and more. keys to peruse. * `hotbuttons.js` Defines onGotOptions. A Disabled-by-default plugin that defines a button bar with user-assignable commands. +* `html.js` A basic plugin to allow the client to handle "raw html" messages from the server, this +allows the server to send native HTML messages like >div style='s'<styled text>/div< * `iframe.js` Defines onOptionsUI. A goldenlayout-only plugin to create a restricted browsing sub- window for a side-by-side web/text interface, mostly an example of how to build new HTML "components" for goldenlayout. @@ -108,8 +110,50 @@ from the server and display them as inline HTML. while the tab is hidden. * `oob.js` Defines onSend. Allows the user to test/send Out Of Band json messages to the server. * `options.js` Defines most callbacks. Provides a popup-based UI to coordinate options settings with the server. -* `options2.js` Defines most callbacks. Provides a goldenlayout-based version of the options/settings tab. Integrates with other plugins via the custom onOptionsUI callback. +* `options2.js` Defines most callbacks. Provides a goldenlayout-based version of the options/settings tab. +Integrates with other plugins via the custom onOptionsUI callback. * `popups.js` Provides default popups/Dialog UI for other plugins to use. +* `text2html.js` Provides a new message handler type: `text2html`, similar to the multimedia and html +plugins. This plugin provides a way to offload rendering the regular pipe-styled ASCII messages +to the client. This allows the server to do less work, while also allowing the client a place to +customize this conversion process. To use this plugin you will need to override the current commands +in Evennia, changing any place where a raw text output message is generated and turn it into a +`text2html` message. For example: `target.msg("my text")` becomes: `target.msg(text2html=("my text"))` +(even better, use a webclient pane routing tag: `target.msg(text2html=("my text", {"type": "sometag"}))`) +`text2html` messages should format and behave identically to the server-side generated text2html() output. + +# A side note on html messages vrs text2html messages + +So...lets say you have a desire to make your webclient output more like standard webpages... +For telnet clients, you could collect a bunch of text lines together, with ASCII formatted borders, etc. +Then send the results to be rendered client-side via the text2html plugin. + +But for webclients, you could format a message directly with the html plugin to render the whole thing as an +HTML table, like so: +``` + # Server Side Python Code: + + if target.is_webclient(): + # This can be styled however you like using CSS, just add the CSS file to web/static/webclient/css/... + table = [ + "", + "", + "", + "
    123
    456
    " + ] + target.msg( html=( "".join(table), {"type": "mytag"}) ) + else: + # This will use the client to render this as "plain, simple" ASCII text, the same + # as if it was rendered server-side via the Portal's text2html() functions + table = [ + "#############", + "# 1 # 2 # 3 #", + "#############", + "# 4 # 5 # 6 #", + "#############" + ] + target.msg( html2html=( "\n".join(table), {"type": "mytag"}) ) +``` # Writing your own Plugins @@ -131,7 +175,7 @@ output and the one starting input window. This is done by modifying your server goldenlayout_default_config.js. Start by creating a new -`mygame/web/static_overrides/webclient/js/plugins/goldenlayout_default_config.js` file, and adding +`mygame/web/static/webclient/js/plugins/goldenlayout_default_config.js` file, and adding the following JSON variable: ``` @@ -222,7 +266,7 @@ type="text/javascript"> Remember, plugins are load-order dependent, so make sure the new ` + {% block jquery_import %} From b0f24f9975e14fddeabef06a19b5b61575957b1c Mon Sep 17 00:00:00 2001 From: Griatch Date: Fri, 7 Oct 2022 00:07:21 +0200 Subject: [PATCH 171/177] Fix pre-emptive import bug introduced in container --- evennia/contrib/tutorials/evadventure/README.md | 7 +++++++ evennia/utils/containers.py | 16 ++++++++++------ 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/evennia/contrib/tutorials/evadventure/README.md b/evennia/contrib/tutorials/evadventure/README.md index 6e308c37d6..d500ea836d 100644 --- a/evennia/contrib/tutorials/evadventure/README.md +++ b/evennia/contrib/tutorials/evadventure/README.md @@ -2,6 +2,13 @@ Contrib by Griatch 2022 + +```{warning} +NOTE - this tutorial is WIP and NOT complete! It was put on hold to focus on +releasing Evennia 1.0. You will still learn things from it, but don't expect +perfection. +``` + A complete example MUD using Evennia. This is the final result of what is implemented if you follow the Getting-Started tutorial. It's recommended that you follow the tutorial step by step and write your own code. But if diff --git a/evennia/utils/containers.py b/evennia/utils/containers.py index a94a92454b..fbce2a3299 100644 --- a/evennia/utils/containers.py +++ b/evennia/utils/containers.py @@ -12,13 +12,14 @@ evennia.OPTION_CLASSES from pickle import dumps -from django.db.utils import OperationalError, ProgrammingError -from django.conf import settings -from evennia.utils.utils import class_from_module, callables_from_module -from evennia.utils import logger +from django.conf import settings +from django.db.utils import OperationalError, ProgrammingError +from evennia.utils import logger +from evennia.utils.utils import callables_from_module, class_from_module SCRIPTDB = None +_BASE_SCRIPT_TYPECLASS = None class Container: @@ -106,7 +107,6 @@ class GlobalScriptContainer(Container): callables from settings but a custom dict of tuples. """ - __BASE_SCRIPT_TYPECLASS = class_from_module(settings.BASE_SCRIPT_TYPECLASS) def __init__(self): """ @@ -201,13 +201,17 @@ class GlobalScriptContainer(Container): initialized. """ + global _BASE_SCRIPT_TYPECLASS + if not _BASE_SCRIPT_TYPECLASS: + _BASE_SCRIPT_TYPECLASS = class_from_module(settings.BASE_SCRIPT_TYPECLASS) + if self.typeclass_storage is None: self.typeclass_storage = {} for key, data in list(self.loaded_data.items()): try: typeclass = data.get("typeclass", settings.BASE_SCRIPT_TYPECLASS) script_typeclass = class_from_module(typeclass) - assert issubclass(script_typeclass, self.__BASE_SCRIPT_TYPECLASS) + assert issubclass(script_typeclass, _BASE_SCRIPT_TYPECLASS) self.typeclass_storage[key] = script_typeclass except Exception: logger.log_trace( From 8f15eb820773ecb8614f9c2f4bdfab1ddb9b91a3 Mon Sep 17 00:00:00 2001 From: selberhad Date: Thu, 6 Oct 2022 20:47:51 -0400 Subject: [PATCH 172/177] remove lodash dependency and add once helper --- .../webclient/js/plugins/goldenlayout.js | 22 +++++++++++++++---- evennia/web/templates/webclient/base.html | 3 --- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/evennia/web/static/webclient/js/plugins/goldenlayout.js b/evennia/web/static/webclient/js/plugins/goldenlayout.js index b64a9d9e8a..e0147c4b36 100644 --- a/evennia/web/static/webclient/js/plugins/goldenlayout.js +++ b/evennia/web/static/webclient/js/plugins/goldenlayout.js @@ -32,6 +32,20 @@ let goldenlayout = (function () { id: "inputComponent", }; + // helper function: only allow a function to be called once + function once(func) { + function _f() { + if (!_f.isCalled) { + _f.isCalled = true; + _f.res = func.apply(this, arguments); + } + return _f.res; + } + _f.prototype = func.prototype; + _f.isCalled = false; + return _f; + } + // helper function: filter vals out of array function filter (vals, array) { if( Array.isArray( vals ) && Array.isArray( array ) ) { @@ -248,8 +262,8 @@ let goldenlayout = (function () { } // - // ensure only one handler is set up on the parent with _.once - var registerInputTabChangeHandler = _.once(function (tab) { + // ensure only one handler is set up on the parent with once + var registerInputTabChangeHandler = once(function (tab) { tab.header.parent.on( "activeContentItemChanged", onActiveInputTabChange ); }); @@ -261,8 +275,8 @@ let goldenlayout = (function () { } // - // ensure only one handler is set up on the parent with _.once - var registerMainTabChangeHandler = _.once(function (tab) { + // ensure only one handler is set up on the parent with once + var registerMainTabChangeHandler = once(function (tab) { tab.header.parent.on( "activeContentItemChanged", onActiveMainTabChange ); }); diff --git a/evennia/web/templates/webclient/base.html b/evennia/web/templates/webclient/base.html index 4914195f2e..ca8460c242 100644 --- a/evennia/web/templates/webclient/base.html +++ b/evennia/web/templates/webclient/base.html @@ -21,9 +21,6 @@ JQuery available. - - - {% block jquery_import %} From 5cbe03b5e519d01efbd632d35c64a01c6e65e201 Mon Sep 17 00:00:00 2001 From: selberhad Date: Thu, 6 Oct 2022 20:53:37 -0400 Subject: [PATCH 173/177] feat: consolidate input tab close buttons --- .../web/static/webclient/css/goldenlayout.css | 1 + .../webclient/js/plugins/goldenlayout.js | 27 +++++++++---------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/evennia/web/static/webclient/css/goldenlayout.css b/evennia/web/static/webclient/css/goldenlayout.css index 4c0e77d254..7fee79654c 100644 --- a/evennia/web/static/webclient/css/goldenlayout.css +++ b/evennia/web/static/webclient/css/goldenlayout.css @@ -46,6 +46,7 @@ label { .lm_title { text-align: center; margin-right: 2px; + padding-right: 8px; } .lm_tab.lm_active { diff --git a/evennia/web/static/webclient/js/plugins/goldenlayout.js b/evennia/web/static/webclient/js/plugins/goldenlayout.js index e0147c4b36..f1acec6d94 100644 --- a/evennia/web/static/webclient/js/plugins/goldenlayout.js +++ b/evennia/web/static/webclient/js/plugins/goldenlayout.js @@ -264,7 +264,19 @@ let goldenlayout = (function () { // // ensure only one handler is set up on the parent with once var registerInputTabChangeHandler = once(function (tab) { - tab.header.parent.on( "activeContentItemChanged", onActiveInputTabChange ); + // Set up the control to add new tabs + let splitControl = $( + "+" + ); + + // Handler for adding a new tab + splitControl.click( tab, function (evnt) { + evnt.data.header.parent.addChild( newInputConfig ); + }); + + // Position it after the tab list + $('ul.lm_tabs', tab.header.element).after(splitControl).css("position", "relative"); + tab.header.parent.on( "activeContentItemChanged", onActiveInputTabChange ); }); // @@ -382,19 +394,6 @@ let goldenlayout = (function () { // // var onInputCreate = function (tab) { - //HTML for the typeDropdown - let splitControl = $( - "+" - ); - - // track adding a new tab - splitControl.click( tab, function (evnt) { - evnt.data.header.parent.addChild( newInputConfig ); - }); - - // Add the typeDropdown to the header - tab.element.append( splitControl ); - registerInputTabChangeHandler(tab); } From 929ddb304e37d6b8210912a8f4f795ab49771c50 Mon Sep 17 00:00:00 2001 From: InspectorCaracal Date: Fri, 7 Oct 2022 18:30:16 -0600 Subject: [PATCH 174/177] use result rather than iterate --- evennia/typeclasses/tags.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/evennia/typeclasses/tags.py b/evennia/typeclasses/tags.py index 2a0b24d786..12d30433c3 100644 --- a/evennia/typeclasses/tags.py +++ b/evennia/typeclasses/tags.py @@ -419,7 +419,7 @@ class TagHandler(object): if key: for tag_str in make_iter(key): tag_str = tag_str.strip().lower() - ret.extend(bool(tag) for tag in self._getcache(tag_str, category)) + ret.append(bool(self._getcache(tag_str, category))) elif category: ret.extend(bool(tag) for tag in self._getcache(category=category)) else: From ee1f26380caedfee88d2793de261d7c4fcfeccf1 Mon Sep 17 00:00:00 2001 From: selberhad Date: Mon, 3 Oct 2022 14:50:18 -0400 Subject: [PATCH 175/177] fix: improve convert_urls --- evennia/utils/tests/test_tagparsing.py | 22 +++++++++++----------- evennia/utils/text2html.py | 19 +++++++++++++++---- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/evennia/utils/tests/test_tagparsing.py b/evennia/utils/tests/test_tagparsing.py index c684ab9e3b..44d1cf9681 100644 --- a/evennia/utils/tests/test_tagparsing.py +++ b/evennia/utils/tests/test_tagparsing.py @@ -250,13 +250,13 @@ class TestTextToHTMLparser(TestCase): def test_url_scheme_ftp(self): self.assertEqual( self.parser.convert_urls("ftp.example.com"), - '
    ftp.example.com', + 'ftp.example.com', ) def test_url_scheme_www(self): self.assertEqual( self.parser.convert_urls("www.example.com"), - 'www.example.com', + 'www.example.com', ) def test_url_scheme_ftpproto(self): @@ -280,7 +280,7 @@ class TestTextToHTMLparser(TestCase): def test_url_chars_slash(self): self.assertEqual( self.parser.convert_urls("www.example.com/homedir"), - 'www.example.com/homedir', + 'www.example.com/homedir', ) def test_url_chars_colon(self): @@ -313,22 +313,16 @@ class TestTextToHTMLparser(TestCase): ' target="_blank">https://groups.google.com/forum/?fromgroups#!categories/evennia/ainneve', ) - def test_url_edge_leadingw(self): - self.assertEqual( - self.parser.convert_urls("wwww.example.com"), - 'wwww.example.com', - ) - def test_url_edge_following_period_eol(self): self.assertEqual( self.parser.convert_urls("www.example.com."), - 'www.example.com.', + 'www.example.com.', ) def test_url_edge_following_period(self): self.assertEqual( self.parser.convert_urls("see www.example.com. "), - 'see www.example.com. ', + 'see www.example.com. ', ) def test_url_edge_brackets(self): @@ -356,3 +350,9 @@ class TestTextToHTMLparser(TestCase): '' 'http://example.com/', ) + + def test_non_url_with_www(self): + self.assertEqual( + self.parser.convert_urls('Awwww.this should not be highlighted'), + 'Awwww.this should not be highlighted' + ) diff --git a/evennia/utils/text2html.py b/evennia/utils/text2html.py index 1a0b2bf6cc..e2fedc835f 100644 --- a/evennia/utils/text2html.py +++ b/evennia/utils/text2html.py @@ -88,8 +88,9 @@ class TextToHTMLparser(object): re.S | re.M | re.I, ) re_url = re.compile( - r'(?\[\]\s])+)(\.(?:\s|$)|&\w+;|)' + r'(?\[\]\s])+)(\.(?:\s|$)|&\w+;|)' ) + re_protocol = re.compile(r'^(?:ftp|https?)://') re_mxplink = re.compile(r"\|lc(.*?)\|lt(.*?)\|le", re.DOTALL) re_mxpurl = re.compile(r"\|lu(.*?)\|lt(.*?)\|le", re.DOTALL) @@ -147,9 +148,19 @@ class TextToHTMLparser(object): text (str): Processed text. """ - # -> added target to output prevent the web browser from attempting to - # change pages (and losing our webclient session). - return self.re_url.sub(r'\1\2', text) + m = self.re_url.search(text) + if m: + href = m.group(1) + label = href + # if there is no protocol (i.e. starts with www) prefix with // so the link isn't treated as relative + if not self.re_protocol.match(href): + href = "//" + href + rest = m.group(2) + # -> added target to output prevent the web browser from attempting to + # change pages (and losing our webclient session). + return text[:m.start()] + f'{label}{rest}' + text[m.end():] + else: + return text def sub_mxp_links(self, match): """ From 39ae5973e75b8a8335b4f0052c998303965fc54f Mon Sep 17 00:00:00 2001 From: selberhad Date: Mon, 3 Oct 2022 20:49:44 -0400 Subject: [PATCH 176/177] prevent urls with no protocol that are too short from being highlighted --- evennia/utils/tests/test_tagparsing.py | 6 ++++++ evennia/utils/text2html.py | 6 +++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/evennia/utils/tests/test_tagparsing.py b/evennia/utils/tests/test_tagparsing.py index 44d1cf9681..933d38d3f2 100644 --- a/evennia/utils/tests/test_tagparsing.py +++ b/evennia/utils/tests/test_tagparsing.py @@ -356,3 +356,9 @@ class TestTextToHTMLparser(TestCase): self.parser.convert_urls('Awwww.this should not be highlighted'), 'Awwww.this should not be highlighted' ) + + def test_invalid_www_url(self): + self.assertEqual( + self.parser.convert_urls('www.t'), + 'www.t' + ) diff --git a/evennia/utils/text2html.py b/evennia/utils/text2html.py index e2fedc835f..d10c1c5d39 100644 --- a/evennia/utils/text2html.py +++ b/evennia/utils/text2html.py @@ -91,6 +91,7 @@ class TextToHTMLparser(object): r'(?\[\]\s])+)(\.(?:\s|$)|&\w+;|)' ) re_protocol = re.compile(r'^(?:ftp|https?)://') + re_valid_no_protocol = re.compile(r'^(?:www|ftp)\.[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6}\b[-a-zA-Z0-9@:%_\+.~#?&//=]*') re_mxplink = re.compile(r"\|lc(.*?)\|lt(.*?)\|le", re.DOTALL) re_mxpurl = re.compile(r"\|lu(.*?)\|lt(.*?)\|le", re.DOTALL) @@ -152,8 +153,11 @@ class TextToHTMLparser(object): if m: href = m.group(1) label = href - # if there is no protocol (i.e. starts with www) prefix with // so the link isn't treated as relative + # if there is no protocol (i.e. starts with www or ftp) + # prefix with // so the link isn't treated as relative if not self.re_protocol.match(href): + if not self.re_valid_no_protocol.match(href): + return text href = "//" + href rest = m.group(2) # -> added target to output prevent the web browser from attempting to From 7f1aa222d050e831d9db7fea4ff6d1c5e75ede9d Mon Sep 17 00:00:00 2001 From: selberhad Date: Fri, 7 Oct 2022 22:19:58 -0400 Subject: [PATCH 177/177] change protocol-relative urls to http --- evennia/utils/tests/test_tagparsing.py | 10 +++++----- evennia/utils/text2html.py | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/evennia/utils/tests/test_tagparsing.py b/evennia/utils/tests/test_tagparsing.py index 933d38d3f2..76cc9dd801 100644 --- a/evennia/utils/tests/test_tagparsing.py +++ b/evennia/utils/tests/test_tagparsing.py @@ -250,13 +250,13 @@ class TestTextToHTMLparser(TestCase): def test_url_scheme_ftp(self): self.assertEqual( self.parser.convert_urls("ftp.example.com"), - 'ftp.example.com', + 'ftp.example.com', ) def test_url_scheme_www(self): self.assertEqual( self.parser.convert_urls("www.example.com"), - 'www.example.com', + 'www.example.com', ) def test_url_scheme_ftpproto(self): @@ -280,7 +280,7 @@ class TestTextToHTMLparser(TestCase): def test_url_chars_slash(self): self.assertEqual( self.parser.convert_urls("www.example.com/homedir"), - 'www.example.com/homedir', + 'www.example.com/homedir', ) def test_url_chars_colon(self): @@ -316,13 +316,13 @@ class TestTextToHTMLparser(TestCase): def test_url_edge_following_period_eol(self): self.assertEqual( self.parser.convert_urls("www.example.com."), - 'www.example.com.', + 'www.example.com.', ) def test_url_edge_following_period(self): self.assertEqual( self.parser.convert_urls("see www.example.com. "), - 'see www.example.com. ', + 'see www.example.com. ', ) def test_url_edge_brackets(self): diff --git a/evennia/utils/text2html.py b/evennia/utils/text2html.py index d10c1c5d39..9ea74bf269 100644 --- a/evennia/utils/text2html.py +++ b/evennia/utils/text2html.py @@ -154,11 +154,11 @@ class TextToHTMLparser(object): href = m.group(1) label = href # if there is no protocol (i.e. starts with www or ftp) - # prefix with // so the link isn't treated as relative + # prefix with http:// so the link isn't treated as relative if not self.re_protocol.match(href): if not self.re_valid_no_protocol.match(href): return text - href = "//" + href + href = "http://" + href rest = m.group(2) # -> added target to output prevent the web browser from attempting to # change pages (and losing our webclient session).