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()