Moved 'drink' command from cups to people

This handles better error messages.
This commit is contained in:
Howard Abrams 2025-05-31 07:41:47 -07:00
parent 2994ecf255
commit ddcb0f0306
4 changed files with 55 additions and 32 deletions

View file

@ -36,19 +36,6 @@ class CmdSetEat(CmdSet):
self.add(CmdEat) 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): class CmdMakeTea(Command):
""" """
make [tea-type] make [tea-type]
@ -83,11 +70,6 @@ class CmdFillTeacup(Command):
self.obj.do_fill(self.caller) self.obj.do_fill(self.caller)
class CmdSetCup(CmdSet):
def at_cmdset_creation(self):
self.add(CmdDrink)
class CmdSetTeapot(CmdSet): class CmdSetTeapot(CmdSet):
def at_cmdset_creation(self): def at_cmdset_creation(self):
self.add(CmdMakeTea) self.add(CmdMakeTea)

View file

@ -20,7 +20,7 @@ from evennia.contrib.game_systems.gendersub import SetGender
from evennia.contrib.rpg.rpsystem import RPSystemCmdSet from evennia.contrib.rpg.rpsystem import RPSystemCmdSet
from evennia.contrib.rpg.character_creator.character_creator import ContribChargenCmdSet from evennia.contrib.rpg.character_creator.character_creator import ContribChargenCmdSet
from commands.sittables import CmdNoSitStand 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 from commands.wizards import CmdGM, CmdSpell, CmdGMTrigger, CmdMakeCocktail
class CharacterCmdSet(default_cmds.CharacterCmdSet): class CharacterCmdSet(default_cmds.CharacterCmdSet):
@ -38,6 +38,7 @@ class CharacterCmdSet(default_cmds.CharacterCmdSet):
""" """
super().at_cmdset_creation() super().at_cmdset_creation()
self.add(CmdNoSitStand) self.add(CmdNoSitStand)
self.add(CmdDrink)
self.add(CmdTake) self.add(CmdTake)
self.add(CmdThink) self.add(CmdThink)
self.add(SetGender) self.add(SetGender)

View file

@ -309,3 +309,52 @@ class CmdTake(Command, NumberedTargetCommand):
self.caller.msg(f"You want to take {self.lhs}, but from whom?") self.caller.msg(f"You want to take {self.lhs}, but from whom?")
else: else:
self.caller.do_take(self.lhs, self.rhs) 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()

View file

@ -4,7 +4,7 @@ from evennia.prototypes.spawner import spawn
from evennia.utils import logger from evennia.utils import logger
from typeclasses.objects import Object from typeclasses.objects import Object
from commands.consumables import CmdSetTeapot, CmdSetCup from commands.consumables import CmdSetTeapot
from utils.word_list import routput, choices from utils.word_list import routput, choices
import re import re
@ -57,9 +57,6 @@ class TeaCup(Object):
fill_amount = 4 fill_amount = 4
sip_amount = 1 sip_amount = 1
def at_object_creation(self):
self.cmdset.add_default(CmdSetCup)
def do_drink(self, drinker): def do_drink(self, drinker):
amount = self.db.amount or 0 amount = self.db.amount or 0
tea_type = self.db.tea_type or "tea" tea_type = self.db.tea_type or "tea"
@ -345,12 +342,6 @@ class Cocktail(Object):
drink.db.cocktail_type, char) drink.db.cocktail_type, char)
theroom.msg_contents(msg, exclude=owner) 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): def do_drink(self, drinker):
""" """
Called when owner calls the 'drink' command. Called when owner calls the 'drink' command.
@ -365,10 +356,10 @@ class Cocktail(Object):
elif amount > 0: elif amount > 0:
drinker.msg(choices(self.db.effects, self.key, cocktail_type)) drinker.msg(choices(self.db.effects, self.key, cocktail_type))
else: else:
drinker.msg(choices(EMPTY_COCKTAIL_MSGS, self.key, cocktail_type)) self.key = f"{self.db.cocktail_type} glass"
self.key = "cocktail glass"
self.aliases.add('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 self.db.amount = self.db.amount - self.sip_amount