diff --git a/commands/consumables.py b/commands/consumables.py index c965793..a74e692 100755 --- a/commands/consumables.py +++ b/commands/consumables.py @@ -36,19 +36,6 @@ class CmdSetEat(CmdSet): self.add(CmdEat) -class CmdDrink(Command): - """ - If you are holding a teacup, and it has a liquid, you may drink your tea. - - This doesn't tell others of this particular activity. - """ - key = "drink" - aliases = "sip" - - def func(self): - self.obj.do_drink(self.caller) - - class CmdMakeTea(Command): """ make [tea-type] @@ -83,11 +70,6 @@ class CmdFillTeacup(Command): self.obj.do_fill(self.caller) -class CmdSetCup(CmdSet): - def at_cmdset_creation(self): - self.add(CmdDrink) - - class CmdSetTeapot(CmdSet): def at_cmdset_creation(self): self.add(CmdMakeTea) diff --git a/commands/default_cmdsets.py b/commands/default_cmdsets.py index 2e95bf1..26f7075 100644 --- a/commands/default_cmdsets.py +++ b/commands/default_cmdsets.py @@ -20,7 +20,7 @@ from evennia.contrib.game_systems.gendersub import SetGender from evennia.contrib.rpg.rpsystem import RPSystemCmdSet from evennia.contrib.rpg.character_creator.character_creator import ContribChargenCmdSet from commands.sittables import CmdNoSitStand -from commands.everyone import CmdTake, CmdThink, CmdSay, CmdWhisper, CmdRead +from commands.everyone import CmdTake, CmdThink, CmdSay, CmdWhisper, CmdRead, CmdDrink from commands.wizards import CmdGM, CmdSpell, CmdGMTrigger, CmdMakeCocktail class CharacterCmdSet(default_cmds.CharacterCmdSet): @@ -38,6 +38,7 @@ class CharacterCmdSet(default_cmds.CharacterCmdSet): """ super().at_cmdset_creation() self.add(CmdNoSitStand) + self.add(CmdDrink) self.add(CmdTake) self.add(CmdThink) self.add(SetGender) diff --git a/commands/everyone.py b/commands/everyone.py index 07e8604..a77a046 100755 --- a/commands/everyone.py +++ b/commands/everyone.py @@ -309,3 +309,52 @@ class CmdTake(Command, NumberedTargetCommand): self.caller.msg(f"You want to take {self.lhs}, but from whom?") else: self.caller.do_take(self.lhs, self.rhs) + + +class CmdDrink(Command): + """ + Drink a beverage in your inventory. + + Usage: + + drink [ container ] + + If you are holding a teacup, or cocktail, and it is not empty, + you may drink. + + This doesn't tell others of this particular activity. + """ + key = "drink" + aliases = ["sip", "quaff"] + + def drinkable(self, item): + return hasattr(item, 'do_drink') and callable(item.do_drink) + + def not_empty(self, item): + return (item.db.amount or 0) > 0 + + def drink_item(self, name): + item = self.caller.search(name, location=self.caller, + nofound_string=f"You don't have {name} in your inventory.") + if item: + if self.drinkable(item): + item.do_drink(self.caller) + else: + self.caller.msg(f"The {item.name} is not drinkable.") + + def drink_anything(self): + containers = [item for item in self.caller.contents + if self.drinkable(item) and self.not_empty(item)] + if len(containers) == 1: + containers[0].do_drink(self.caller) + elif len(containers) > 1: + self.caller.msg("You have two many things you can drink. Which one do you want?") + else: + self.caller.msg("You have nothing to drink.") + + def func(self): + goal = self.args.strip() + if goal and goal != "": + self.drink_item(goal) + else: + self.drink_anything() diff --git a/typeclasses/drinkables.py b/typeclasses/drinkables.py index 115591d..3af7657 100755 --- a/typeclasses/drinkables.py +++ b/typeclasses/drinkables.py @@ -4,7 +4,7 @@ from evennia.prototypes.spawner import spawn from evennia.utils import logger from typeclasses.objects import Object -from commands.consumables import CmdSetTeapot, CmdSetCup +from commands.consumables import CmdSetTeapot from utils.word_list import routput, choices import re @@ -57,9 +57,6 @@ class TeaCup(Object): fill_amount = 4 sip_amount = 1 - def at_object_creation(self): - self.cmdset.add_default(CmdSetCup) - def do_drink(self, drinker): amount = self.db.amount or 0 tea_type = self.db.tea_type or "tea" @@ -345,12 +342,6 @@ class Cocktail(Object): drink.db.cocktail_type, char) theroom.msg_contents(msg, exclude=owner) - def at_object_creation(self): - """ - Add the 'drink' command. - """ - self.cmdset.add_default(CmdSetCup) - def do_drink(self, drinker): """ Called when owner calls the 'drink' command. @@ -365,10 +356,10 @@ class Cocktail(Object): elif amount > 0: drinker.msg(choices(self.db.effects, self.key, cocktail_type)) else: - drinker.msg(choices(EMPTY_COCKTAIL_MSGS, self.key, cocktail_type)) - self.key = "cocktail glass" + self.key = f"{self.db.cocktail_type} glass" self.aliases.add('glass') - self.db.desc = "An empty cocktail glass" + self.db.desc = f"An empty {self.db.cocktail_type} glass" + drinker.msg(choices(EMPTY_COCKTAIL_MSGS, self.key, cocktail_type)) self.db.amount = self.db.amount - self.sip_amount