From 830350b4578d5aaf55755978494504d69c609484 Mon Sep 17 00:00:00 2001 From: scyfris Date: Mon, 11 Dec 2023 10:23:08 -0600 Subject: [PATCH] Fix issue with helper func _on_monitor_change This changes causes _on_monitor_change to first separate out the category from the attribute field name in order to properly reference the attribute on the object. This fixes errors such as: File "C:\Users\Scyfris\Projects\norn\evennia\evennia\scripts\monitorhandler.py", line 118, in at_update callback(obj=obj, fieldname=fieldname, **kwargs) File "C:\Users\Scyfris\Projects\norn\evennia\evennia\server\inputfuncs.py", line 425, in _on_monitor_change callsign = {outputfunc_name: {"name": name, "value": _GA(obj, fieldname)}} AttributeError: 'Attribute' object has no attribute 'db_value[base]' --- evennia/server/inputfuncs.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/evennia/server/inputfuncs.py b/evennia/server/inputfuncs.py index 3ffab3b9e1..8f8693a362 100644 --- a/evennia/server/inputfuncs.py +++ b/evennia/server/inputfuncs.py @@ -417,12 +417,27 @@ def _on_monitor_change(**kwargs): name = kwargs["name"] session = kwargs["session"] outputfunc_name = kwargs["outputfunc_name"] + category = None + + # Attributes stored in the MonitorHandler with categories are + # stored as fieldname "db_value[category_name]", but we need to + # separate [category_name] because the actual attribute is stored on + # the object as "db_value" with a separate "category" field. + if hasattr(obj, "db_category") and obj.db_category != None: + category = obj.db_category + fieldname = fieldname.replace("[{}]".format(obj.db_category), '') # the session may be None if the char quits and someone # else then edits the object if session: - callsign = {outputfunc_name: {"name": name, "value": _GA(obj, fieldname)}} + callsign = { + outputfunc_name: { + "name": name, + **({"category": category} if category is not None else {}), + "value": _GA(obj, fieldname) + } + } session.msg(**callsign)