def oob_report(session, *args, **kwargs): """ Called with the `REPORT PROPNAME` MSDP command. Monitors the changes of given property name. Assumes reporting happens on an object controlled by the session. Args: session (Session): The Session doing the monitoring. The property is assumed to sit on the entity currently controlled by the Session. If puppeting, this is an Object, otherwise the object will be the Player the Session belongs to. args (str or list): One or more property names to monitor changes in. If a name starts with `db_`, the property is assumed to be a field, otherwise an Attribute of the given name will be monitored (if it exists). Notes: When the property updates, the monitor will send a MSDP_ARRAY to the session of the form `(SEND, fieldname, new_value)` Examples: ("REPORT", "CHARACTER_NAME") ("MSDP_TABLE", "CHARACTER_NAME", "Amanda") """ obj = session.get_puppet_or_player() if obj: ret = [] for name in args: propname = OOB_REPORTABLE.get(name, None) if not propname: oob_error( session, "No Reportable property '%s'. Use LIST REPORTABLE_VARIABLES." % propname) # the field_monitors require an oob function as a callback when they report a change. elif propname.startswith("db_"): OOB_HANDLER.add_field_monitor(obj, session.sessid, propname, "return_field_report") ret.append(to_str(_GA(obj, propname), force_string=True)) else: OOB_HANDLER.add_attribute_monitor(obj, session.sessid, propname, "return_attribute_report") ret.append(_GA(obj, "db_value")) #print "ret:", ret session.msg(oob=("MSDP_ARRAY", ret)) else: oob_error(session, "You must log in first.")
def oob_report(session, *args, **kwargs): """ Called with the `REPORT PROPNAME` MSDP command. Monitors the changes of given property name. Assumes reporting happens on an object controlled by the session. Args: session (Session): The Session doing the monitoring. The property is assumed to sit on the entity currently controlled by the Session. If puppeting, this is an Object, otherwise the object will be the Player the Session belongs to. args (str or list): One or more property names to monitor changes in. If a name starts with `db_`, the property is assumed to be a field, otherwise an Attribute of the given name will be monitored (if it exists). Notes: When the property updates, the monitor will send a MSDP_ARRAY to the session of the form `(SEND, fieldname, new_value)` Examples: ("REPORT", "CHARACTER_NAME") ("MSDP_TABLE", "CHARACTER_NAME", "Amanda") """ obj = session.get_puppet_or_player() if obj: ret = [] for name in args: propname = OOB_REPORTABLE.get(name, None) if not propname: oob_error(session, "No Reportable property '%s'. Use LIST REPORTABLE_VARIABLES." % propname) # the field_monitors require an oob function as a callback when they report a change. elif propname.startswith("db_"): OOB_HANDLER.add_field_monitor(obj, session.sessid, propname, "return_field_report") ret.append(to_str(_GA(obj, propname), force_string=True)) else: OOB_HANDLER.add_attribute_monitor(obj, session.sessid, propname, "return_attribute_report") ret.append(_GA(obj, "db_value")) #print "ret:", ret session.msg(oob=("MSDP_ARRAY", ret)) else: oob_error(session, "You must log in first.")