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.")
|
self.msg("You cannot edit this event created by someone else.")
|
||||||
return
|
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
|
# Check the definition of the event
|
||||||
definition = types.get(event_name, (None, "Chained event"))
|
definition = types.get(event_name, (None, "Chained event"))
|
||||||
description = definition[1]
|
description = definition[1]
|
||||||
|
|
@ -407,6 +413,11 @@ class CmdEvent(COMMAND_DEFAULT_CLASS):
|
||||||
self.msg("You cannot delete this event created by someone else.")
|
self.msg("You cannot delete this event created by someone else.")
|
||||||
return
|
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
|
# Delete the event
|
||||||
self.handler.del_event(obj, event_name, parameters)
|
self.handler.del_event(obj, event_name, parameters)
|
||||||
self.msg("The event {} {} of {} was deleted.".format(
|
self.msg("The event {} {} of {} was deleted.".format(
|
||||||
|
|
@ -505,6 +516,10 @@ def _ev_save(caller, buf):
|
||||||
caller.msg("Couldn't save this event.")
|
caller.msg("Couldn't save this event.")
|
||||||
return False
|
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,
|
handler.edit_event(event["obj"], event["name"], event["number"], buf,
|
||||||
caller, valid=autovalid)
|
caller, valid=autovalid)
|
||||||
return True
|
return True
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,7 @@ class EventHandler(DefaultScript):
|
||||||
# Permanent data to be stored
|
# Permanent data to be stored
|
||||||
self.db.events = {}
|
self.db.events = {}
|
||||||
self.db.to_valid = []
|
self.db.to_valid = []
|
||||||
|
self.db.locked = []
|
||||||
|
|
||||||
# Tasks
|
# Tasks
|
||||||
self.db.task_id = 0
|
self.db.task_id = 0
|
||||||
|
|
@ -167,6 +168,10 @@ class EventHandler(DefaultScript):
|
||||||
obj_events[event_name] = []
|
obj_events[event_name] = []
|
||||||
events = 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
|
# Edit the event
|
||||||
events[number].update({
|
events[number].update({
|
||||||
"updated_on": datetime.now(),
|
"updated_on": datetime.now(),
|
||||||
|
|
@ -195,6 +200,10 @@ class EventHandler(DefaultScript):
|
||||||
obj_events = self.db.events.get(obj, {})
|
obj_events = self.db.events.get(obj, {})
|
||||||
events = obj_events.get(event_name, [])
|
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
|
# Delete the event itself
|
||||||
try:
|
try:
|
||||||
code = events[number]["code"]
|
code = events[number]["code"]
|
||||||
|
|
@ -221,6 +230,13 @@ class EventHandler(DefaultScript):
|
||||||
del self.db.to_valid[i + 1]
|
del self.db.to_valid[i + 1]
|
||||||
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
|
# Delete time-related events associated with this object
|
||||||
for script in list(obj.scripts.all()):
|
for script in list(obj.scripts.all()):
|
||||||
if isinstance(script, TimeEventScript):
|
if isinstance(script, TimeEventScript):
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ class PatchedExit(object):
|
||||||
is_character = inherits_from(traversing_object, DefaultCharacter)
|
is_character = inherits_from(traversing_object, DefaultCharacter)
|
||||||
script = ScriptDB.objects.get(db_key="event_handler")
|
script = ScriptDB.objects.get(db_key="event_handler")
|
||||||
if is_character:
|
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)
|
exit, exit.location)
|
||||||
if not allow:
|
if not allow:
|
||||||
return
|
return
|
||||||
|
|
@ -41,7 +41,7 @@ class PatchedExit(object):
|
||||||
|
|
||||||
# After traversing
|
# After traversing
|
||||||
if is_character:
|
if is_character:
|
||||||
script.call_event(exit, "traverse", None, traversing_object,
|
script.call_event(exit, "traverse", traversing_object,
|
||||||
exit, exit.location, exit.destination)
|
exit, exit.location, exit.destination)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue