mirror of
https://github.com/evennia/evennia.git
synced 2026-03-22 15:56:30 +01:00
Add the @event/del switch to delete events
This commit is contained in:
parent
8dc5c69d00
commit
ccdb56c139
3 changed files with 99 additions and 2 deletions
|
|
@ -364,7 +364,53 @@ class CmdEvent(COMMAND_DEFAULT_CLASS):
|
|||
def del_event(self):
|
||||
"""Delete an event."""
|
||||
obj = self.obj
|
||||
self.msg("Calling del.")
|
||||
event_name = self.event_name
|
||||
parameters = self.parameters
|
||||
events = self.handler.get_events(obj)
|
||||
types = self.handler.get_event_types(obj)
|
||||
|
||||
# If no event name is specified, display the list of events
|
||||
if not event_name:
|
||||
self.list_events()
|
||||
return
|
||||
|
||||
# Check that the event exists
|
||||
if not event_name in events:
|
||||
self.msg("The event name {} can't be found in {}.".format(
|
||||
event_name, obj))
|
||||
return
|
||||
|
||||
# If there's only one event, just delete it
|
||||
if len(events[event_name]) == 1:
|
||||
parameters = 0
|
||||
event = events[event_name][0]
|
||||
else:
|
||||
if not parameters:
|
||||
self.msg("Which event do you wish to delete? Specify " \
|
||||
"a number.")
|
||||
self.list_events()
|
||||
return
|
||||
|
||||
# Check that the parameter points to an existing event
|
||||
try:
|
||||
parameters = int(parameters) - 1
|
||||
assert parameters >= 0
|
||||
event = events[event_name][parameters]
|
||||
except (AssertionError, ValueError):
|
||||
self.msg("The event {} {} cannot be found in {}.".format(
|
||||
event_name, parameters, obj))
|
||||
return
|
||||
|
||||
# If caller can't edit without validation, forbid deleting
|
||||
# others' works
|
||||
if not self.autovalid and event["author"] is not self.caller:
|
||||
self.msg("You cannot delete this event created by someone else.")
|
||||
return
|
||||
|
||||
# Delete the event
|
||||
self.handler.del_event(obj, event_name, parameters)
|
||||
self.msg("The event {} {} of {} was deleted.".format(
|
||||
obj, event_name, parameters + 1))
|
||||
|
||||
def accept_event(self):
|
||||
"""Accept an event."""
|
||||
|
|
|
|||
|
|
@ -217,7 +217,7 @@ def create_time_event(obj, event_name, number, parameters):
|
|||
seconds, key = get_next_wait(parameters)
|
||||
script = create_script("evennia.contrib.events.scripts.TimeEventScript", interval=seconds, obj=obj)
|
||||
script.key = key
|
||||
script.desc = "time event called regularly on {}".format(key)
|
||||
script.desc = "event on {}".format(key)
|
||||
script.db.time_format = parameters
|
||||
script.db.number = number
|
||||
|
||||
|
|
|
|||
|
|
@ -178,6 +178,57 @@ class EventHandler(DefaultScript):
|
|||
# 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))
|
||||
elif valid and (obj, event_name, number) in self.db.to_valid:
|
||||
self.db.to_valid.remove((obj, event_name, number))
|
||||
|
||||
|
||||
def del_event(self, obj, event_name, number):
|
||||
"""
|
||||
Delete the specified event.
|
||||
|
||||
Args:
|
||||
obj (Object): the typeclassed object containing the event.
|
||||
event_name (str): the name of the event to delete.
|
||||
number (int): the number of the event to delete.
|
||||
|
||||
"""
|
||||
obj_events = self.db.events.get(obj, {})
|
||||
events = obj_events.get(event_name, [])
|
||||
|
||||
# Delete the event itself
|
||||
try:
|
||||
code = events[number]["code"]
|
||||
except IndexError:
|
||||
return
|
||||
else:
|
||||
logger.log_info("Deleting event {} {} of {}:\n{}".format(
|
||||
event_name, number, obj, code))
|
||||
del events[number]
|
||||
|
||||
# Change IDs of events to be validated
|
||||
i = 0
|
||||
while i < len(self.db.to_valid):
|
||||
t_obj, t_event_name, t_number = self.db.to_valid[i]
|
||||
if obj is t_obj and event_name == t_event_name:
|
||||
if t_number == number:
|
||||
# Strictly equal, delete the event
|
||||
del self.db.to_valid[i]
|
||||
i -= 1
|
||||
elif t_number > number:
|
||||
# Change the ID for this event
|
||||
self.db.to_valid.insert(i, (t_obj, t_event_name,
|
||||
t_number - 1))
|
||||
del self.db.to_valid[i + 1]
|
||||
i += 1
|
||||
|
||||
# Delete time-related events associated with this object
|
||||
for script in list(obj.scripts.all()):
|
||||
if isinstance(script, TimeEventScript):
|
||||
if script.obj is obj and script.db.event_name == event_name:
|
||||
if script.db.number == number:
|
||||
script.stop()
|
||||
elif script.db.number > number:
|
||||
script.db.number -= 1
|
||||
|
||||
def accept_event(self, obj, event_name, number):
|
||||
"""
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue