var/datum/event_controller/random_events /datum/event_controller var/list/events = list() var/events_begin = 18000 // 30m var/time_between_events_lower = 6600 // 11m var/time_between_events_upper = 12000 // 20m var/events_enabled = 1 var/announce_events = 1 var/next_event = 0 var/event_cycle_count = 0 var/list/minor_events = list() var/minor_events_begin = 6000 // 10m var/time_between_minor_events_lower = 4000 // roughly 8m var/time_between_minor_events_upper = 8000 // roughly 14m var/minor_events_enabled = 1 var/next_minor_event = 0 var/minor_event_cycle_count = 0 var/time_lock = 1 var/list/special_events = list() var/minimum_population = 15 // Minimum amount of players connected for event to occur New() for (var/X in childrentypesof(/datum/random_event/major)) var/datum/random_event/RE = new X events += RE for (var/X in childrentypesof(/datum/random_event/minor)) var/datum/random_event/RE = new X minor_events += RE for (var/X in childrentypesof(/datum/random_event/special)) var/datum/random_event/RE = new X special_events += RE proc/event_cycle() event_cycle_count++ var/num_players = 0 for(var/mob/players in mobs) if(players.client) num_players++ if (events_enabled && (num_players >= minimum_population)) do_random_event(events) else message_admins("A random event would have happened now, but they are disabled!") var/event_timer = rand(time_between_events_lower,time_between_events_upper) next_event = ticker.round_elapsed_ticks + event_timer message_admins("Next event will occur at [round(next_event / 600)] minutes into the round.") SPAWN_DBG(event_timer) event_cycle() proc/minor_event_cycle() minor_event_cycle_count++ if (minor_events_enabled) do_random_event(minor_events) var/event_timer = rand(time_between_minor_events_lower,time_between_minor_events_upper) next_minor_event = ticker.round_elapsed_ticks + event_timer SPAWN_DBG(event_timer) minor_event_cycle() proc/do_random_event(var/list/event_bank) if (!event_bank || event_bank.len < 1) logTheThing("debug", null, null, "Random Events: do_random_event proc was passed a bad event bank") return var/list/eligible = list() var/list/weights = list() for (var/datum/random_event/RE in event_bank) if (RE.is_event_available()) eligible += RE weights += RE.weight if (eligible.len > 0) var/datum/random_event/this = weightedprob(eligible, weights) this.event_effect() else logTheThing("debug", null, null, "Random Events: do_random_event couldn't find any eligible events") proc/force_event(var/string,var/reason) if (!string) return if (!reason) reason = "coded instance (undefined)" var/list/allevents = events | minor_events | special_events for (var/datum/random_event/RE in allevents) if (RE.name == string) RE.event_effect(string,reason) break /////////////////// // CONFIGURATION // /////////////////// proc/event_config() var/dat = "Random Events Controller" dat += "Random Event Controls
" if (current_state <= GAME_STATE_PREGAME) dat += "Random Events begin at: [round(events_begin / 600)] minutes
" dat += "Minor Events begin at: [round(minor_events_begin / 600)] minutes
" else dat += "Next random event at [round(next_event / 600)] minutes into the round.
" dat += "Next minor event at [round(next_minor_event / 600)] minutes into the round.
" dat += "Random Events Enabled: [events_enabled ? "Yes" : "No"]
" dat += "Minor Events Enabled: [minor_events_enabled ? "Yes" : "No"]
" dat += "Announce Events to Station: [announce_events ? "Yes" : "No"]
" dat += "Time Locking: [time_lock ? "Yes" : "No"]
" dat += "Minimum Population for Events: [minimum_population] players
" dat += "Time Between Events: [round(time_between_events_lower / 600)]m /" dat += " [round(time_between_events_upper / 600)]m
" dat += "Time Between Minor Events: [round(time_between_minor_events_lower / 600)]m /" dat += " [round(time_between_minor_events_upper / 600)]m" dat += "
" dat += "Normal Random Events
" for(var/datum/random_event/RE in events) dat += "[RE.name]" dat += " ([RE.disabled ? "Disabled" : "Enabled"])" if (RE.is_event_available()) dat += " (Active)" dat += "
" dat += "
" dat += "Minor Random Events
" for(var/datum/random_event/RE in minor_events) dat += "[RE.name]" dat += " ([RE.disabled ? "Disabled" : "Enabled"])" if (RE.is_event_available()) dat += " (Active)" dat += "
" dat += "
" dat += "Gimmick Events
" for(var/datum/random_event/RE in special_events) dat += "[RE.name]
" dat += "
" dat += "" usr.Browse(dat,"window=reconfig;size=450x450") Topic(href, href_list[]) //So we have not had any validation on the admin random events panel since its inception. Argh. /Spy if(usr && usr.client && !usr.client.holder) {boutput(usr, "Only administrators may use this command."); return} if(href_list["TriggerEvent"]) var/datum/random_event/RE = locate(href_list["TriggerEvent"]) in events if (!istype(RE,/datum/random_event/)) return var/choice = alert("Trigger a [RE.name] event?","Random Events","Yes","No") if (choice == "Yes") if (RE.customization_available) var/choice2 = alert("Random or custom variables?","[RE.name]","Random","Custom") if (choice2 == "Custom") RE.admin_call(key_name(usr, 1)) else RE.event_effect("Triggered by [key_name(usr)]") else RE.event_effect("Triggered by [key_name(usr)]") else if(href_list["TriggerMEvent"]) var/datum/random_event/RE = locate(href_list["TriggerMEvent"]) in minor_events if (!istype(RE,/datum/random_event/)) return var/choice = alert("Trigger a [RE.name] event?","Random Events","Yes","No") if (choice == "Yes") RE.event_effect("Triggered by [key_name(usr)]") else if(href_list["TriggerSEvent"]) var/datum/random_event/RE = locate(href_list["TriggerSEvent"]) in special_events if (!istype(RE,/datum/random_event/)) return var/choice = alert("Trigger a [RE.name] event?","Random Events","Yes","No") if (choice == "Yes") if (RE.customization_available) var/choice2 = alert("Random or custom variables?","[RE.name]","Random","Custom") if (choice2 == "Custom") RE.admin_call(key_name(usr, 1)) else RE.event_effect("Triggered by [key_name(usr)]") else RE.event_effect("Triggered by [key_name(usr)]") else if(href_list["DisableEvent"]) var/datum/random_event/RE = locate(href_list["DisableEvent"]) in events if (!istype(RE,/datum/random_event/)) return RE.disabled = !RE.disabled message_admins("Admin [key_name(usr)] switched [RE.name] event [RE.disabled ? "Off" : "On"]") logTheThing("admin", usr, null, "switched [RE.name] event [RE.disabled ? "Off" : "On"]") logTheThing("diary", usr, null, "switched [RE.name] event [RE.disabled ? "Off" : "On"]", "admin") else if(href_list["DisableMEvent"]) var/datum/random_event/RE = locate(href_list["DisableMEvent"]) in minor_events if (!istype(RE,/datum/random_event/)) return RE.disabled = !RE.disabled message_admins("Admin [key_name(usr)] switched [RE.name] event [RE.disabled ? "Off" : "On"]") logTheThing("admin", usr, null, "switched [RE.name] event [RE.disabled ? "Off" : "On"]") logTheThing("diary", usr, null, "switched [RE.name] event [RE.disabled ? "Off" : "On"]", "admin") else if(href_list["MinPop"]) var/new_min = input("How many players need to be connected before events will occur?","Random Events",minimum_population) as num if (new_min == minimum_population) return if (new_min < 1) boutput(usr, "Well that doesn't even make sense.") return else minimum_population = new_min message_admins("Admin [key_name(usr)] set the minimum population for events to [minimum_population]") logTheThing("admin", usr, null, "set the minimum population for events to [minimum_population]") logTheThing("diary", usr, null, "set the minimum population for events to [minimum_population]", "admin") else if(href_list["EventBegin"]) var/time = input("How many minutes into the round until events begin?","Random Events") as num events_begin = time * 600 message_admins("Admin [key_name(usr)] set random events to begin at [time] minutes") logTheThing("admin", usr, null, "set random events to begin at [time] minutes") logTheThing("diary", usr, null, "set random events to begin at [time] minutes", "admin") else if(href_list["MEventBegin"]) var/time = input("How many minutes into the round until minor events begin?","Random Events") as num minor_events_begin = time * 600 message_admins("Admin [key_name(usr)] set minor events to begin at [time] minutes") logTheThing("admin", usr, null, "set minor events to begin at [time] minutes") logTheThing("diary", usr, null, "set minor events to begin at [time] minutes", "admin") else if(href_list["EnableEvents"]) events_enabled = !events_enabled message_admins("Admin [key_name(usr)] [events_enabled ? "enabled" : "disabled"] random events") logTheThing("admin", usr, null, "[events_enabled ? "enabled" : "disabled"] random events") logTheThing("diary", usr, null, "[events_enabled ? "enabled" : "disabled"] random events", "admin") else if(href_list["EnableMEvents"]) minor_events_enabled = !minor_events_enabled message_admins("Admin [key_name(usr)] [minor_events_enabled ? "enabled" : "disabled"] minor events") logTheThing("admin", usr, null, "[minor_events_enabled ? "enabled" : "disabled"] minor events") logTheThing("diary", usr, null, "[minor_events_enabled ? "enabled" : "disabled"] minor events", "admin") else if(href_list["AnnounceEvents"]) announce_events = !announce_events message_admins("Admin [key_name(usr)] [announce_events ? "enabled" : "disabled"] random event announcements") logTheThing("admin", usr, null, "[announce_events ? "enabled" : "disabled"] random event announcements") logTheThing("diary", usr, null, "[announce_events ? "enabled" : "disabled"] random event announcements", "admin") else if(href_list["TimeLocks"]) time_lock = !time_lock message_admins("Admin [key_name(usr)] [time_lock ? "enabled" : "disabled"] random event time locks") logTheThing("admin", usr, null, "[time_lock ? "enabled" : "disabled"] random event time locks") logTheThing("diary", usr, null, "[time_lock ? "enabled" : "disabled"] random event time locks", "admin") else if(href_list["TimeLower"]) var/time = input("Set the lower bound to how many minutes?","Random Events") as num if (time < 1) boutput(usr, "The fuck is that supposed to mean???? Knock it off!") return time *= 600 if (time > time_between_events_upper) boutput(usr, "You cannot set the lower bound higher than the upper bound.") else time_between_events_lower = time message_admins("Admin [key_name(usr)] set event lower interval bound to [time_between_events_lower / 600] minutes") logTheThing("admin", usr, null, "set event lower interval bound to [time_between_events_lower / 600] minutes") logTheThing("diary", usr, null, "set event lower interval bound to [time_between_events_lower / 600] minutes", "admin") else if(href_list["TimeUpper"]) var/time = input("Set the upper bound to how many minutes?","Random Events") as num if (time > 100) boutput(usr, "That's a bit much.") return time *= 600 if (time < time_between_events_lower) boutput(usr, "You cannot set the upper bound lower than the lower bound.") else time_between_events_upper = time message_admins("Admin [key_name(usr)] set event upper interval bound to [time_between_events_upper / 600] minutes") logTheThing("admin", usr, null, "set event upper interval bound to [time_between_events_upper / 600] minutes") logTheThing("diary", usr, null, "set event upper interval bound to [time_between_events_upper / 600] minutes", "admin") else if(href_list["MTimeLower"]) var/time = input("Set the lower bound to how many minutes?","Random Events") as num if (time < 1) boutput(usr, "The fuck is that supposed to mean???? Knock it off!") return time *= 600 if (time > time_between_minor_events_upper) boutput(usr, "You cannot set the lower bound higher than the upper bound.") else time_between_minor_events_lower = time message_admins("Admin [key_name(usr)] set minor event lower interval bound to [time_between_minor_events_lower / 600] minutes") logTheThing("admin", usr, null, "set minor event lower interval bound to [time_between_minor_events_lower / 600] minutes") logTheThing("diary", usr, null, "set minor event lower interval bound to [time_between_minor_events_lower / 600] minutes", "admin") else if(href_list["MTimeUpper"]) var/time = input("Set the upper bound to how many minutes?","Random Events") as num if (time > 100) boutput(usr, "That's a bit much.") return time *= 600 if (time < time_between_events_lower) boutput(usr, "You cannot set the upper bound lower than the lower bound.") else time_between_minor_events_upper = time message_admins("Admin [key_name(usr)] set minor event upper interval bound to [time_between_minor_events_upper / 600] minutes") logTheThing("admin", usr, null, "set minor event upper interval bound to [time_between_minor_events_upper / 600] minutes") logTheThing("diary", usr, null, "set minor event upper interval bound to [time_between_minor_events_upper / 600] minutes", "admin") src.event_config()