diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 403dfd40498..65b4eefc805 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -76,7 +76,8 @@ var/list/admin_verbs_admin = list( /client/proc/response_team, // Response Teams admin verb /client/proc/toggle_antagHUD_use, /client/proc/toggle_antagHUD_restrictions, - /client/proc/allow_character_respawn /* Allows a ghost to respawn */ + /client/proc/allow_character_respawn, /* Allows a ghost to respawn */ + /client/proc/event_manager_panel ) var/list/admin_verbs_ban = list( /client/proc/unban_panel, diff --git a/code/modules/events/event_manager.dm b/code/modules/events/event_manager.dm index 204f66f1517..35091ef12f5 100644 --- a/code/modules/events/event_manager.dm +++ b/code/modules/events/event_manager.dm @@ -8,6 +8,8 @@ #define ASSIGNMENT_SCIENTIST "Scientist" #define ASSIGNMENT_SECURITY "Security" +var/global/list/severity_to_string = list(EVENT_LEVEL_MUNDANE = "Mundane", EVENT_LEVEL_MODERATE = "Moderate", EVENT_LEVEL_MAJOR = "Major") + /datum/event_manager var/list/available_events = list( EVENT_LEVEL_MUNDANE = list( @@ -55,7 +57,7 @@ var/list/datum/event/allEvents var/list/last_event_time = list() - var/list/next_event_time = list(EVENT_LEVEL_MUNDANE = 1, EVENT_LEVEL_MODERATE = 0, EVENT_LEVEL_MAJOR = 0) + var/list/next_event_time = list(EVENT_LEVEL_MUNDANE = 0, EVENT_LEVEL_MODERATE = 0, EVENT_LEVEL_MAJOR = 0) var/list/delay_modifier = list(EVENT_LEVEL_MUNDANE = 1, EVENT_LEVEL_MODERATE = 1, EVENT_LEVEL_MAJOR = 1) /datum/event_manager/New() @@ -81,12 +83,16 @@ next_event_time[severity] = next_event_time[severity] + (60 * 10) return - log_debug("Starting event of severity [severity].") - new EM.event_type(EM) + // Set when the event of this type was last fired and when to fire the next event + last_event_time[EM] = world.timeofday + set_event_delay(severity) // Remove the event meta data from the list of available events available_events[severity] -= EM + log_debug("Starting event of severity [severity].") + new EM.event_type(EM) // Events are added and removed from the processing queue in New/Del + /datum/event_manager/proc/acquire_event(var/list/events) if(events.len == 0) return @@ -99,7 +105,7 @@ possible_events[EM] = event_weight for(var/event_meta in last_event_time) if(possible_events[event_meta]) - var/time_passed = world.time - event_last_fired[event_meta] + var/time_passed = world.timeofday - event_last_fired[event_meta] var/weight_modifier = max(0, (config.expected_round_length - time_passed) / 300) var/new_weight = max(possible_events[event_meta] - weight_modifier, 0) @@ -112,8 +118,6 @@ return null var/picked_event = pickweight(possible_events) - last_event_time[picked_event] = world.time - return picked_event /datum/event_manager/proc/set_event_delay(var/severity) @@ -157,6 +161,54 @@ log_debug("Event '[E.name]' has completed.") + +/datum/event_manager/proc/Interact(var/mob/living/user) + var/window_x = 370 + var/window_y = 470 + + var/html = GetInteractWindow() + + var/datum/browser/popup = new(user, "event_manager", "Event Manager", window_x, window_y) + popup.set_content(html) + popup.open() + +/datum/event_manager/proc/GetInteractWindow() + var/table_options = " align='center'" + var/row_options1 = " width='80px'" + var/row_options2 = " width='260px'" + + var/html = "
| Severity | Time | Until start | |
| [severity_to_string[severity]] | " + html += "[worldtime2text(station_time)] | " + html += "[station_time / 600] | " + html += "" + html += "---" + html += "--" + html += "-" + html += "+" + html += "++" + html += "+++" + html += " | " + html += "