Add a lock on editing events
This commit is contained in:
parent
ccdb56c139
commit
9fc163df57
3 changed files with 33 additions and 2 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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):
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue