Add a lock on editing events

This commit is contained in:
Vincent Le Goff 2017-03-18 17:28:02 -07:00 committed by Griatch
parent ccdb56c139
commit 9fc163df57
3 changed files with 33 additions and 2 deletions

View file

@ -346,6 +346,12 @@ class CmdEvent(COMMAND_DEFAULT_CLASS):
self.msg("You cannot edit this event created by someone else.")
return
# If the event is locked (edited by someone else)
if (obj, event_name, parameters) in self.handler.db.locked:
self.msg("This event is locked, you cannot edit it.")
return
self.handler.db.locked.append((obj, event_name, parameters))
# Check the definition of the event
definition = types.get(event_name, (None, "Chained event"))
description = definition[1]
@ -407,6 +413,11 @@ class CmdEvent(COMMAND_DEFAULT_CLASS):
self.msg("You cannot delete this event created by someone else.")
return
# If the event is locked (edited by someone else)
if (obj, event_name, parameters) in self.handler.db.locked:
self.msg("This event is locked, you cannot delete it.")
return
# Delete the event
self.handler.del_event(obj, event_name, parameters)
self.msg("The event {} {} of {} was deleted.".format(
@ -505,6 +516,10 @@ def _ev_save(caller, buf):
caller.msg("Couldn't save this event.")
return False
if (event["obj"], event["name"], event["number"]) in handler.db.locked:
handler.db.locked.remove((event["obj"], event["name"],
event["number"]))
handler.edit_event(event["obj"], event["name"], event["number"], buf,
caller, valid=autovalid)
return True

View file

@ -27,6 +27,7 @@ class EventHandler(DefaultScript):
# Permanent data to be stored
self.db.events = {}
self.db.to_valid = []
self.db.locked = []
# Tasks
self.db.task_id = 0
@ -167,6 +168,10 @@ class EventHandler(DefaultScript):
obj_events[event_name] = []
events = obj_events[event_name]
# If locked, don't edit it
if (obj, event_name, number) in self.db.locked:
raise RunTimeError("this event is locked.")
# Edit the event
events[number].update({
"updated_on": datetime.now(),
@ -195,6 +200,10 @@ class EventHandler(DefaultScript):
obj_events = self.db.events.get(obj, {})
events = obj_events.get(event_name, [])
# If locked, don't edit it
if (obj, event_name, number) in self.db.locked:
raise RunTimeError("this event is locked.")
# Delete the event itself
try:
code = events[number]["code"]
@ -221,6 +230,13 @@ class EventHandler(DefaultScript):
del self.db.to_valid[i + 1]
i += 1
# Update locked event
for line in self.db.locked:
t_obj, t_event_name, t_number = line
if obj is t_obj and event_name == t_event_name:
if number > t_number:
line[2] -= 1
# Delete time-related events associated with this object
for script in list(obj.scripts.all()):
if isinstance(script, TimeEventScript):

View file

@ -32,7 +32,7 @@ class PatchedExit(object):
is_character = inherits_from(traversing_object, DefaultCharacter)
script = ScriptDB.objects.get(db_key="event_handler")
if is_character:
allow = script.call_event(exit, "can_traverse", None, traversing_object,
allow = script.call_event(exit, "can_traverse", traversing_object,
exit, exit.location)
if not allow:
return
@ -41,7 +41,7 @@ class PatchedExit(object):
# After traversing
if is_character:
script.call_event(exit, "traverse", None, traversing_object,
script.call_event(exit, "traverse", traversing_object,
exit, exit.location, exit.destination)