diff --git a/evennia/typeclasses/models.py b/evennia/typeclasses/models.py index 341dd02df..9f6926189 100644 --- a/evennia/typeclasses/models.py +++ b/evennia/typeclasses/models.py @@ -307,12 +307,26 @@ class TypedObject(SharedMemoryModel): return self.key def __name_set(self, value): + oldname = str(self.key) self.key = value + self.at_rename(oldname, value) def __name_del(self): raise Exception("Cannot delete name") name = property(__name_get, __name_set, __name_del) + # key property (overrides's the idmapper's db_key for the at_rename hook) + @property + def key(self): + return self.db_key + + @key.setter + def key(self, value): + oldname = str(self.db_key) + self.db_key = value + self.save(update_fields=["db_key"]) + self.at_rename(oldname, value) + # # # TypedObject main class methods and properties @@ -677,3 +691,15 @@ class TypedObject(SharedMemoryModel): if self.location == looker: return " (carried)" return "" + + def at_rename(self, oldname, newname): + """ + This Hook is called by @name on a successful rename. + + Args: + oldname (str): The instance's original name. + newname (str): The new name for the instance. + + Returns: Nothing. + """ + pass \ No newline at end of file