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):
|
def del_event(self):
|
||||||
"""Delete an event."""
|
"""Delete an event."""
|
||||||
obj = self.obj
|
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):
|
def accept_event(self):
|
||||||
"""Accept an event."""
|
"""Accept an event."""
|
||||||
|
|
|
||||||
|
|
@ -217,7 +217,7 @@ def create_time_event(obj, event_name, number, parameters):
|
||||||
seconds, key = get_next_wait(parameters)
|
seconds, key = get_next_wait(parameters)
|
||||||
script = create_script("evennia.contrib.events.scripts.TimeEventScript", interval=seconds, obj=obj)
|
script = create_script("evennia.contrib.events.scripts.TimeEventScript", interval=seconds, obj=obj)
|
||||||
script.key = key
|
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.time_format = parameters
|
||||||
script.db.number = number
|
script.db.number = number
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -178,6 +178,57 @@ class EventHandler(DefaultScript):
|
||||||
# If not valid, set it in 'to_valid'
|
# If not valid, set it in 'to_valid'
|
||||||
if not valid and (obj, event_name, number) not in self.db.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))
|
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):
|
def accept_event(self, obj, event_name, number):
|
||||||
"""
|
"""
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue