diff --git a/code/defines/procs/admin.dm b/code/defines/procs/admin.dm
index 5943ada459b..44d79a38930 100644
--- a/code/defines/procs/admin.dm
+++ b/code/defines/procs/admin.dm
@@ -1,3 +1,7 @@
proc/log_and_message_admins(var/message as text)
log_admin("[usr]([usr.ckey]) " + message)
message_admins("[usr]([usr.ckey]) " + message)
+
+proc/admin_log_and_message_admins(var/message as text)
+ log_admin("[key_name(usr)] " + message)
+ message_admins("[key_name_admin(usr)] " + message, 1)
\ No newline at end of file
diff --git a/code/game/gamemodes/calamity/calamity.dm b/code/game/gamemodes/calamity/calamity.dm
index 8120153b561..6ddd3d70a59 100644
--- a/code/game/gamemodes/calamity/calamity.dm
+++ b/code/game/gamemodes/calamity/calamity.dm
@@ -82,6 +82,7 @@
return 1
/datum/game_mode/calamity/post_setup()
+ event_manager.report_at_round_end = 1
// Reduce the interval between moderate/major events
var/datum/event_container/EModerate = event_manager.event_containers[EVENT_LEVEL_MODERATE]
var/datum/event_container/EMajor = event_manager.event_containers[EVENT_LEVEL_MAJOR]
diff --git a/code/modules/events/event.dm b/code/modules/events/event.dm
index f2e0e890f32..25d7cad6f0e 100644
--- a/code/modules/events/event.dm
+++ b/code/modules/events/event.dm
@@ -56,6 +56,8 @@
var/severity = 0 //Severity. Lower means less severe, higher means more severe. Does not have to be supported. Is set on New().
var/activeFor = 0 //How long the event has existed. You don't need to change this.
var/isRunning = 1 //If this event is currently running. You should not change this.
+ var/started = 0 //When this event started.
+ var/ended = 0 //When this event ended.
var/datum/event_meta/event_meta = null
/datum/event/nothing
@@ -127,6 +129,7 @@
isRunning = 0
end()
+ ended = world.timeofday
event_manager.active_events -= src
event_manager.event_complete(src)
@@ -139,5 +142,7 @@
if(severity < EVENT_LEVEL_MUNDANE) severity = EVENT_LEVEL_MUNDANE
if(severity > EVENT_LEVEL_MAJOR) severity = EVENT_LEVEL_MAJOR
+ started = world.timeofday
+
setup()
..()
diff --git a/code/modules/events/event_container.dm b/code/modules/events/event_container.dm
index 0220ea17cbd..3aeec6f2f22 100644
--- a/code/modules/events/event_container.dm
+++ b/code/modules/events/event_container.dm
@@ -117,6 +117,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
available_events += next_event
available_events -= EM
next_event = EM
+ return EM
/datum/event_container/mundane
severity = EVENT_LEVEL_MUNDANE
@@ -132,7 +133,7 @@ var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Lost Carp", /datum/event/carp_migration, 20, list(ASSIGNMENT_SECURITY = 10), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Brand Intelligence",/datum/event/brand_intelligence,20, list(ASSIGNMENT_JANITOR = 25), 1),
new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Vermin Infestation",/datum/event/infestation, 100, list(ASSIGNMENT_JANITOR = 100)),
- new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wall root", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)),
+ new /datum/event_meta(EVENT_LEVEL_MUNDANE, "Wall rot", /datum/event/wallrot, 0, list(ASSIGNMENT_ENGINEER = 30, ASSIGNMENT_GARDENER = 50)),
)
/datum/event_container/moderate
diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm
index e01b835352c..fdfdb2396bb 100644
--- a/code/modules/events/event_manager.dm
+++ b/code/modules/events/event_manager.dm
@@ -1,6 +1,7 @@
/datum/event_manager
var/window_x = 700
var/window_y = 600
+ var/report_at_round_end = 0
var/table_options = " align='center'"
var/row_options1 = " width='85px'"
var/row_options2 = " width='260px'"
@@ -8,7 +9,7 @@
var/datum/event_container/selected_event_container = null
var/list/datum/event/active_events = list()
- var/list/datum/event/finished_events = list()
+ var/list/events_finished = list()
var/list/datum/event/allEvents
var/list/datum/event_container/event_containers = list(
@@ -35,7 +36,7 @@
log_debug("Event of '[E.type]' with missing meta-data has completed.")
return
- finished_events += E
+ events_finished += E
// Add the event back to the list of available events
var/datum/event_container/EC = event_containers[E.severity]
@@ -60,7 +61,7 @@
html += "Back
"
html += "Time till start: [round(event_time / 600, 0.1)]
"
html += "
"
- html += "
Available [severity_to_string[selected_event_container.severity]] Events (queued events will not be displayed)
"
+ html += "
Available [severity_to_string[selected_event_container.severity]] Events (queued & running events will not be displayed)
"
html += "
"
html += "| Name | Weight | MinWeight | MaxWeight | OneShot | Enabled | CurrWeight | Remove |
"
for(var/datum/event_meta/EM in selected_event_container.available_events)
@@ -91,7 +92,7 @@
html += "Add
"
html += ""
else
- html += "
"
+ html += "Round End Report: [report_at_round_end ? "On": "Off"]
"
html += ""
html += "
Event Start
"
@@ -138,14 +139,16 @@
html += "
"
html += "
Running Events
"
html += "
"
- html += "| Severity | Name | Stop |
"
+ html += "| Severity | Name | Ends In | Stop |
"
for(var/datum/event/E in active_events)
if(!E.event_meta)
continue
var/datum/event_meta/EM = E.event_meta
+ var/ends_in = max(0, round((E.started + (E.endWhen * 10) - world.timeofday) / 600, 0.1))
html += ""
html += "| [severity_to_string[EM.severity]] | "
html += "[EM.name] | "
+ html += "[ends_in] | "
html += "Stop | "
html += "
"
html += "
"
@@ -159,25 +162,35 @@
if(href_list["dec_timer"])
var/datum/event_container/EC = locate(href_list["event"])
- EC.next_event_time -= (60 * RaiseToPower(10, text2num(href_list["dec_timer"])))
+ var/decrease = (60 * RaiseToPower(10, text2num(href_list["dec_timer"])))
+ EC.next_event_time -= decrease
+ admin_log_and_message_admins("decreased timer for [severity_to_string[EC.severity]] events by [decrease/600] minute(s).")
else if(href_list["inc_timer"])
var/datum/event_container/EC = locate(href_list["event"])
- EC.next_event_time += (60 * RaiseToPower(10, text2num(href_list["inc_timer"])))
+ var/increase = (60 * RaiseToPower(10, text2num(href_list["inc_timer"])))
+ EC.next_event_time += increase
+ admin_log_and_message_admins("increased timer for [severity_to_string[EC.severity]] events by [increase/600] minute(s).")
else if(href_list["select_event"])
var/datum/event_container/EC = locate(href_list["select_event"])
- EC.SelectEvent()
+ var/datum/event_meta/EM = EC.SelectEvent()
+ if(EM)
+ admin_log_and_message_admins("has queued the [severity_to_string[EC.severity]] event '[EM.name]'.")
else if(href_list["pause"])
var/datum/event_container/EC = locate(href_list["pause"])
EC.delayed = !EC.delayed
+ admin_log_and_message_admins("has [EC.delayed ? "paused" : "resumed"] countdown for [severity_to_string[EC.severity]] events.")
else if(href_list["interval"])
var/delay = input("Enter delay modifier. A value less than one means events fire more often, higher than one less often.", "Set Interval Modifier") as num|null
if(delay && delay > 0)
var/datum/event_container/EC = locate(href_list["interval"])
EC.delay_modifier = delay
+ admin_log_and_message_admins("has set the interval modifier for [severity_to_string[EC.severity]] events to [EC.delay_modifier].")
else if(href_list["stop"])
if(alert("Stopping an event may have unintended side-effects. Continue?","Stopping Event!","Yes","No") != "Yes")
return
var/datum/event/E = locate(href_list["stop"])
+ var/datum/event_meta/EM = E.event_meta
+ admin_log_and_message_admins("has stopped the [severity_to_string[EM.severity]] event '[EM.name]'.")
E.kill()
else if(href_list["view_events"])
selected_event_container = locate(href_list["view_events"])
@@ -198,35 +211,43 @@
if(weight && weight > 0)
var/datum/event_meta/EM = locate(href_list["set_weight"])
EM.weight = weight
+ if(EM != new_event)
+ admin_log_and_message_admins("has changed the weight of the [severity_to_string[EM.severity]] event '[EM.name]' to [EM.weight].")
else if(href_list["set_oneshot"])
var/datum/event_meta/EM = locate(href_list["set_oneshot"])
EM.one_shot = !EM.one_shot
+ if(EM != new_event)
+ admin_log_and_message_admins("has [EM.one_shot ? "set" : "unset"] the oneshot flag for the [severity_to_string[EM.severity]] event '[EM.name]'.")
else if(href_list["set_enabled"])
var/datum/event_meta/EM = locate(href_list["set_enabled"])
EM.enabled = !EM.enabled
+ admin_log_and_message_admins("has [EM.enabled ? "enabled" : "disabled"] the [severity_to_string[EM.severity]] event '[EM.name]'.")
else if(href_list["remove"])
if(alert("This will remove the event from rotation. Continue?","Removing Event!","Yes","No") != "Yes")
return
var/datum/event_meta/EM = locate(href_list["remove"])
var/datum/event_container/EC = locate(href_list["EC"])
EC.available_events -= EM
+ admin_log_and_message_admins("has removed the [severity_to_string[EM.severity]] event '[EM.name]'.")
else if(href_list["add"])
if(!new_event.name || !new_event.event_type)
return
if(alert("This will add a new event to the rotation. Continue?","Add Event!","Yes","No") != "Yes")
return
selected_event_container.available_events += new_event
+ admin_log_and_message_admins("has added \a [severity_to_string[new_event.severity]] event '[new_event.name]' of type [new_event.event_type] with weight [new_event.weight].")
new_event = new
else if(href_list["clear"])
var/datum/event_container/EC = locate(href_list["clear"])
- EC.next_event = null
+ if(EC.next_event)
+ admin_log_and_message_admins("has unqueued the [severity_to_string[EC.severity]] event '[EC.next_event.name]'.")
+ EC.next_event = null
+ else if(href_list["report"])
+ report_at_round_end = !report_at_round_end
+ admin_log_and_message_admins("has [report_at_round_end ? "enabled" : "disabled"] the round end event report.")
Interact(usr)
-/proc/debugStartEvent(var/severity)
- var/datum/event_container/EC = event_manager.event_containers[severity]
- EC.start_event()
-
/client/proc/forceEvent(var/type in event_manager.allEvents)
set name = "Trigger Event (Debug Only)"
set category = "Debug"
diff --git a/code/modules/events/wallrot.dm b/code/modules/events/wallrot.dm
index d54aa7c4ac0..6e263aaf12e 100644
--- a/code/modules/events/wallrot.dm
+++ b/code/modules/events/wallrot.dm
@@ -1,5 +1,5 @@
datum/event/wallrot/setup()
- name = "Wallroot"
+ name = "Wall rot"
announceWhen = rand(0, 300)
endWhen = announceWhen + 1