Я строю текстовую игру в Evennia. Я добавил новый класс под названием Prop
. На данный момент он имеет одну команду wear
. Затем я создал пару Props
в качестве прототипов и построил их с использованием @spawn
. Когда я держу только одну опору, ее команда на износ отлично работает: wear glove
возвращает «Ты теперь в перчатке». Но как только у меня есть несколько реквизитов, все, что я получаю, это меню значений .search()
, и ничего, что я набираю, кажется, действительно делает неоднозначность.Почему я получаю несколько результатов для команды в Evenion?
Я уверен, что это связано с слиянием cmdset, но это насколько я понял. Что я делаю не так?
грязевые/команды/prop_commands.py
"""
Prop commands
"""
from evennia import CmdSet
from command import Command
class CmdWear(Command):
"""
Wear or remove a prop
Usage:
wear <prop>
don <prop>
doff <prop>
Causes you to wear or remove the prop. {wdon{n and {wdoff{n will only put the prop on or off; {wwear{n form will toggle between worn and unworn.
"""
key = "wear"
aliases = ["don", "doff"]
locks = "cmd:holds()"
help_category = "Objects"
def parse(self):
"""Trivial parser"""
self.target = self.args.strip()
def func(self):
caller = self.caller
if not self.target:
caller.msg("Wear what?")
return
target = caller.search(self.target)
if not target:
caller.msg("Couldn't find any %s." % self.target)
return
# assumes it's a Prop typeclass, so assumes it has this attribute
if not target.db.wearable:
caller.msg("That doesn't make any sense.")
return
if self.cmdstring in ("don", "doff"):
should_wear = True if self.cmdstring == "don" else False
else:
should_wear = not target.db.worn
if target.db.worn^should_wear:
target.db.worn = should_wear
caller.msg("You're %s wearing %s." % (
"now" if target.db.worn else "no longer",
target))
else:
caller.msg("You're %s wearing %s." % (
"already" if target.db.worn else "not",
target))
class PropCmdSet(CmdSet):
def at_cmdset_creation(self):
self.add(CmdWear())
грязь/классы типов/props.py
"""
Props are items that can be held, worn, etc.
"""
from evennia import DefaultObject
from commands import prop_commands
class Prop(DefaultObject):
"""
Props are items that can be held, worn, stood on, and more.
"""
def at_object_creation(self):
self.cmdset.add(prop_commands.PropCmdSet, permanent=True)
self.db.wearable = True
self.db.worn = False