diff --git a/evennia/contrib/events/commands.py b/evennia/contrib/events/commands.py index 6abd353283..355427db4b 100644 --- a/evennia/contrib/events/commands.py +++ b/evennia/contrib/events/commands.py @@ -367,6 +367,41 @@ class CmdEvent(COMMAND_DEFAULT_CLASS): obj = self.obj event_name = self.event_name parameters = self.parameters + + # If no object, display the list of events to be checked + if obj is None: + table = EvTable("ID", "Type", "Object", "Name", "Updated by", + "On", width=78) + table.reformat_column(0, align="r") + now = datetime.now() + for obj, name, number in self.handler.db.to_valid: + events = self.handler.db.events.get(obj, {}).get(name) + if events is None: + continue + + try: + event = events[number] + except IndexError: + continue + + type_name = obj.typeclass_path.split(".")[-1] + by = event.get("updated_by") + by = by.key if by else "|gUnknown|n" + updated_on = event.get("updated_on") + if updated_on is None: + updated_on = event.get("created_on") + + if updated_on: + updated_on = time_format( + (now - updated_on).total_seconds(), 1) + else: + updated_on = "|gUnknown|n" + + table.add_row(obj.id, type_name, obj, name, by, updated_on) + self.msg(table) + return + + # An object was specified events = self.handler.get_events(obj) types = self.handler.get_event_types(obj) @@ -400,7 +435,7 @@ class CmdEvent(COMMAND_DEFAULT_CLASS): if event["valid"]: self.msg("This event has already been accepted.") else: - event["valid"] = True + self.handler.accept_event(obj, event_name, parameters) self.msg("The event {} {} of {} has been accepted.".format( event_name, parameters, obj)) diff --git a/evennia/contrib/events/scripts.py b/evennia/contrib/events/scripts.py index a1b3b2d549..ce87046c80 100644 --- a/evennia/contrib/events/scripts.py +++ b/evennia/contrib/events/scripts.py @@ -23,6 +23,7 @@ class EventHandler(DefaultScript): # Permanent data to be stored self.db.events = {} + self.db.to_valid = [] def at_start(self): """Set up the event system.""" @@ -95,6 +96,11 @@ class EventHandler(DefaultScript): "code": code, }) + # If not valid, set it in 'to_valid' + if not valid: + self.db.to_valid.append((obj, event_name, len(events) - 1)) + + # Build the definition to return (a dictionary) definition = dict(events[-1]) definition["obj"] = obj definition["name"] = event_name @@ -135,6 +141,28 @@ class EventHandler(DefaultScript): "code": code, }) + # If not valid, set it in 'to_valid' + if not valid and (obj, event_name, number) not in self.db.to_valid: + self.db.to_valid.append((obj, event_name, number)) + + def accept_event(self, obj, event_name, number): + """ + Valid an event. + + Args: + obj (Object): the object containing the event. + event_name (str): the name of the event. + number (int): the number of the event. + + """ + obj_events = self.db.events.get(obj, {}) + events = obj_events.get(event_name, []) + + # Accept and connect the event + events[number].update({"valid": True}) + if (obj, event_name, number) in self.db.to_valid: + self.db.to_valid.remove((obj, event_name, number)) + def call_event(self, obj, event_name, *args): """ Call the event.