From 8df53693b49e1a3c3155701c92c510dfdcbd23ef Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Wed, 5 Nov 2014 17:19:04 +0100 Subject: [PATCH] Admin event panel taking shape. --- code/modules/admin/admin_verbs.dm | 3 +- code/modules/events/event_manager.dm | 72 +++++++++++++++++++++++++--- 2 files changed, 68 insertions(+), 7 deletions(-) diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 403dfd4049..65b4eefc80 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 204f66f151..35091ef12f 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 = "
" + html += "

Event Manager

" + html += "Refresh
" + html += "" + + html += "SeverityTimeUntil start" + for(var/severity = EVENT_LEVEL_MUNDANE to EVENT_LEVEL_MAJOR) + var/station_time = max(0, next_event_time[severity] - world.timeofday) + html += "" + html += "[severity_to_string[severity]]" + html += "[worldtime2text(station_time)]" + html += "[station_time / 600]" + html += "" + html += "---" + html += "--" + html += "-" + html += "+" + html += "++" + html += "+++" + html += "" + html += "" + html += "" + html += "
" + + return html + +/datum/event_manager/Topic(href, href_list) + if(..()) + return + + Interact(usr) + /proc/debugStartEvent(var/severity) event_manager.start_event(severity) @@ -171,6 +223,14 @@ new type(new /datum/event_meta(EVENT_LEVEL_MAJOR)) message_admins("[key_name_admin(usr)] has triggered an event. ([type])", 1) +/client/proc/event_manager_panel() + set name = "Event Manager Panel" + set category = "Admin" + if(event_manager) + event_manager.Interact(usr) + feedback_add_details("admin_verb","EMP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return + #undef ASSIGNMENT_ANY #undef ASSIGNMENT_AI #undef ASSIGNMENT_CYBORG