Merge pull request #3633 from count-infinity/3617-Default-object-descriptions
Allow simple customization of default object descriptions
This commit is contained in:
commit
0004dc5f7c
4 changed files with 57 additions and 19 deletions
|
|
@ -705,6 +705,7 @@ class CmdCreate(ObjManipCommand):
|
||||||
)
|
)
|
||||||
if errors:
|
if errors:
|
||||||
self.msg(errors)
|
self.msg(errors)
|
||||||
|
|
||||||
if not obj:
|
if not obj:
|
||||||
continue
|
continue
|
||||||
|
|
||||||
|
|
@ -714,9 +715,7 @@ class CmdCreate(ObjManipCommand):
|
||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
string = f"You create a new {obj.typename}: {obj.name}."
|
string = f"You create a new {obj.typename}: {obj.name}."
|
||||||
# set a default desc
|
|
||||||
if not obj.db.desc:
|
|
||||||
obj.db.desc = "You see nothing special."
|
|
||||||
if "drop" in self.switches:
|
if "drop" in self.switches:
|
||||||
if caller.location:
|
if caller.location:
|
||||||
obj.home = caller.location
|
obj.home = caller.location
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ class EvAdventureRoomTest(EvenniaTestCase):
|
||||||
/|\
|
/|\
|
||||||
o o o
|
o o o
|
||||||
room_center
|
room_center
|
||||||
You see nothing special.
|
This is a room.
|
||||||
Exits: north, northeast, east, southeast, south, southwest, west, and northwest"""
|
Exits: north, northeast, east, southeast, south, southwest, west, and northwest"""
|
||||||
|
|
||||||
result = "\n".join(part.rstrip() for part in strip_ansi(desc).split("\n"))
|
result = "\n".join(part.rstrip() for part in strip_ansi(desc).split("\n"))
|
||||||
|
|
|
||||||
|
|
@ -399,6 +399,9 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
|
||||||
|
|
||||||
objects = ObjectManager()
|
objects = ObjectManager()
|
||||||
|
|
||||||
|
# Used by get_display_desc when self.db.desc is None
|
||||||
|
default_description = _("You see nothing special.")
|
||||||
|
|
||||||
# populated by `return_appearance`
|
# populated by `return_appearance`
|
||||||
appearance_template = """
|
appearance_template = """
|
||||||
{header}
|
{header}
|
||||||
|
|
@ -1468,10 +1471,9 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
|
||||||
if account:
|
if account:
|
||||||
obj.db.creator_id = account.id
|
obj.db.creator_id = account.id
|
||||||
|
|
||||||
# Set description if there is none, or update it if provided
|
# Set description if provided
|
||||||
if description or not obj.db.desc:
|
if description:
|
||||||
desc = description if description else "You see nothing special."
|
obj.db.desc = description
|
||||||
obj.db.desc = desc
|
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
errors.append(f"An error occurred while creating this '{key}' object: {e}")
|
errors.append(f"An error occurred while creating this '{key}' object: {e}")
|
||||||
|
|
@ -1749,7 +1751,7 @@ class DefaultObject(ObjectDB, metaclass=TypeclassBase):
|
||||||
str: The desc display string.
|
str: The desc display string.
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return self.db.desc or "You see nothing special."
|
return self.db.desc or self.default_description
|
||||||
|
|
||||||
def get_display_exits(self, looker, **kwargs):
|
def get_display_exits(self, looker, **kwargs):
|
||||||
"""
|
"""
|
||||||
|
|
@ -3020,6 +3022,9 @@ class DefaultCharacter(DefaultObject):
|
||||||
"edit:pid({account_id}) or perm(Admin)"
|
"edit:pid({account_id}) or perm(Admin)"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
# Used by get_display_desc when self.db.desc is None
|
||||||
|
default_description = _("This is a character.")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def get_default_lockstring(
|
def get_default_lockstring(
|
||||||
cls, account: "DefaultAccount" = None, caller: "DefaultObject" = None, **kwargs
|
cls, account: "DefaultAccount" = None, caller: "DefaultObject" = None, **kwargs
|
||||||
|
|
@ -3133,9 +3138,9 @@ class DefaultCharacter(DefaultObject):
|
||||||
if locks:
|
if locks:
|
||||||
obj.locks.add(locks)
|
obj.locks.add(locks)
|
||||||
|
|
||||||
# If no description is set, set a default description
|
# Set description if provided
|
||||||
if description or not obj.db.desc:
|
if description:
|
||||||
obj.db.desc = description if description else _("This is a character.")
|
obj.db.desc = description
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
errors.append(f"An error occurred while creating object '{key} object: {e}")
|
errors.append(f"An error occurred while creating object '{key} object: {e}")
|
||||||
|
|
@ -3346,6 +3351,9 @@ class DefaultRoom(DefaultObject):
|
||||||
# Generally, a room isn't expected to HAVE a location, but maybe in some games?
|
# Generally, a room isn't expected to HAVE a location, but maybe in some games?
|
||||||
_content_types = ("room",)
|
_content_types = ("room",)
|
||||||
|
|
||||||
|
# Used by get_display_desc when self.db.desc is None
|
||||||
|
default_description = _("This is a room.")
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def create(
|
def create(
|
||||||
cls,
|
cls,
|
||||||
|
|
@ -3416,9 +3424,9 @@ class DefaultRoom(DefaultObject):
|
||||||
if account:
|
if account:
|
||||||
obj.db.creator_id = account.id
|
obj.db.creator_id = account.id
|
||||||
|
|
||||||
# If no description is set, set a default description
|
# Set description if provided
|
||||||
if description or not obj.db.desc:
|
if description:
|
||||||
obj.db.desc = description if description else _("This is a room.")
|
obj.db.desc = description
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
errors.append(f"An error occurred while creating this '{key}' object: {e}")
|
errors.append(f"An error occurred while creating this '{key}' object: {e}")
|
||||||
|
|
@ -3511,6 +3519,9 @@ class DefaultExit(DefaultObject):
|
||||||
exit_command = ExitCommand
|
exit_command = ExitCommand
|
||||||
priority = 101
|
priority = 101
|
||||||
|
|
||||||
|
# Used by get_display_desc when self.db.desc is None
|
||||||
|
default_description = _("This is an exit.")
|
||||||
|
|
||||||
# Helper classes and methods to implement the Exit. These need not
|
# Helper classes and methods to implement the Exit. These need not
|
||||||
# be overloaded unless one want to change the foundation for how
|
# be overloaded unless one want to change the foundation for how
|
||||||
# Exits work. See the end of the class for hook methods to overload.
|
# Exits work. See the end of the class for hook methods to overload.
|
||||||
|
|
@ -3625,9 +3636,9 @@ class DefaultExit(DefaultObject):
|
||||||
if account:
|
if account:
|
||||||
obj.db.creator_id = account.id
|
obj.db.creator_id = account.id
|
||||||
|
|
||||||
# If no description is set, set a default description
|
# Set description if provided
|
||||||
if description or not obj.db.desc:
|
if description:
|
||||||
obj.db.desc = description if description else _("This is an exit.")
|
obj.db.desc = description
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
errors.append(f"An error occurred while creating this '{key}' object: {e}")
|
errors.append(f"An error occurred while creating this '{key}' object: {e}")
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,13 @@ class DefaultObjectTest(BaseEvenniaTest):
|
||||||
self.assertEqual(obj.db.creator_ip, self.ip)
|
self.assertEqual(obj.db.creator_ip, self.ip)
|
||||||
self.assertEqual(obj.db_home, self.room1)
|
self.assertEqual(obj.db_home, self.room1)
|
||||||
|
|
||||||
|
def test_object_default_description(self):
|
||||||
|
obj, errors = DefaultObject.create("void")
|
||||||
|
self.assertTrue(obj, errors)
|
||||||
|
self.assertFalse(errors, errors)
|
||||||
|
self.assertIsNone(obj.db.desc)
|
||||||
|
self.assertEqual(obj.default_description, obj.get_display_desc(obj))
|
||||||
|
|
||||||
def test_character_create(self):
|
def test_character_create(self):
|
||||||
description = "A furry green monster, reeking of garbage."
|
description = "A furry green monster, reeking of garbage."
|
||||||
home = self.room1.dbref
|
home = self.room1.dbref
|
||||||
|
|
@ -57,6 +64,13 @@ class DefaultObjectTest(BaseEvenniaTest):
|
||||||
self.assertFalse(errors, errors)
|
self.assertFalse(errors, errors)
|
||||||
self.assertEqual(obj.name, "SigurXurXorarinsson")
|
self.assertEqual(obj.name, "SigurXurXorarinsson")
|
||||||
|
|
||||||
|
def test_character_default_description(self):
|
||||||
|
obj, errors = DefaultCharacter.create("dementor")
|
||||||
|
self.assertTrue(obj, errors)
|
||||||
|
self.assertFalse(errors, errors)
|
||||||
|
self.assertIsNone(obj.db.desc)
|
||||||
|
self.assertEqual(obj.default_description, obj.get_display_desc(obj))
|
||||||
|
|
||||||
def test_room_create(self):
|
def test_room_create(self):
|
||||||
description = "A dimly-lit alley behind the local Chinese restaurant."
|
description = "A dimly-lit alley behind the local Chinese restaurant."
|
||||||
obj, errors = DefaultRoom.create("alley", self.account, description=description, ip=self.ip)
|
obj, errors = DefaultRoom.create("alley", self.account, description=description, ip=self.ip)
|
||||||
|
|
@ -65,6 +79,13 @@ class DefaultObjectTest(BaseEvenniaTest):
|
||||||
self.assertEqual(description, obj.db.desc)
|
self.assertEqual(description, obj.db.desc)
|
||||||
self.assertEqual(obj.db.creator_ip, self.ip)
|
self.assertEqual(obj.db.creator_ip, self.ip)
|
||||||
|
|
||||||
|
def test_room_default_description(self):
|
||||||
|
obj, errors = DefaultRoom.create("black hole")
|
||||||
|
self.assertTrue(obj, errors)
|
||||||
|
self.assertFalse(errors, errors)
|
||||||
|
self.assertIsNone(obj.db.desc)
|
||||||
|
self.assertEqual(obj.default_description, obj.get_display_desc(obj))
|
||||||
|
|
||||||
def test_exit_create(self):
|
def test_exit_create(self):
|
||||||
description = (
|
description = (
|
||||||
"The steaming depths of the dumpster, ripe with refuse in various states of"
|
"The steaming depths of the dumpster, ripe with refuse in various states of"
|
||||||
|
|
@ -78,6 +99,13 @@ class DefaultObjectTest(BaseEvenniaTest):
|
||||||
self.assertEqual(description, obj.db.desc)
|
self.assertEqual(description, obj.db.desc)
|
||||||
self.assertEqual(obj.db.creator_ip, self.ip)
|
self.assertEqual(obj.db.creator_ip, self.ip)
|
||||||
|
|
||||||
|
def test_exit_default_description(self):
|
||||||
|
obj, errors = DefaultExit.create("the nothing")
|
||||||
|
self.assertTrue(obj, errors)
|
||||||
|
self.assertFalse(errors, errors)
|
||||||
|
self.assertIsNone(obj.db.desc)
|
||||||
|
self.assertEqual(obj.default_description, obj.get_display_desc(obj))
|
||||||
|
|
||||||
def test_exit_get_return_exit(self):
|
def test_exit_get_return_exit(self):
|
||||||
ex1, _ = DefaultExit.create("north", self.room1, self.room2, account=self.account)
|
ex1, _ = DefaultExit.create("north", self.room1, self.room2, account=self.account)
|
||||||
single_return_exit = ex1.get_return_exit()
|
single_return_exit = ex1.get_return_exit()
|
||||||
|
|
@ -266,7 +294,7 @@ class TestObjectManager(BaseEvenniaTest):
|
||||||
query = ObjectDB.objects.get_objs_with_key_or_alias("")
|
query = ObjectDB.objects.get_objs_with_key_or_alias("")
|
||||||
self.assertFalse(query)
|
self.assertFalse(query)
|
||||||
query = ObjectDB.objects.get_objs_with_key_or_alias("", exact=False)
|
query = ObjectDB.objects.get_objs_with_key_or_alias("", exact=False)
|
||||||
self.assertEqual(list(query), list(ObjectDB.objects.all().order_by('id')))
|
self.assertEqual(list(query), list(ObjectDB.objects.all().order_by("id")))
|
||||||
|
|
||||||
query = ObjectDB.objects.get_objs_with_key_or_alias(
|
query = ObjectDB.objects.get_objs_with_key_or_alias(
|
||||||
"", exact=False, typeclasses="evennia.objects.objects.DefaultCharacter"
|
"", exact=False, typeclasses="evennia.objects.objects.DefaultCharacter"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue