Files
Bubberstation/code/datums/station_traits/admin_panel.dm

134 lines
4.1 KiB
Plaintext

/// Opens the station traits admin panel
/datum/admins/proc/station_traits_panel()
set name = "Modify Station Traits"
set category = "Admin.Events"
var/static/datum/station_traits_panel/station_traits_panel = new
station_traits_panel.ui_interact(usr)
/datum/station_traits_panel
var/static/list/future_traits
/datum/station_traits_panel/ui_data(mob/user)
var/list/data = list()
data["too_late_to_revert"] = too_late_to_revert()
var/list/current_station_traits = list()
for (var/datum/station_trait/station_trait as anything in SSstation.station_traits)
current_station_traits += list(list(
"name" = station_trait.name,
"can_revert" = station_trait.can_revert,
"ref" = REF(station_trait),
))
data["current_traits"] = current_station_traits
data["future_station_traits"] = future_traits
return data
/datum/station_traits_panel/ui_static_data(mob/user)
var/list/data = list()
var/list/valid_station_traits = list()
for (var/datum/station_trait/station_trait_path as anything in subtypesof(/datum/station_trait))
valid_station_traits += list(list(
"name" = initial(station_trait_path.name),
"path" = station_trait_path,
))
data["valid_station_traits"] = valid_station_traits
return data
/datum/station_traits_panel/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
. = ..()
if (.)
return
switch (action)
if ("revert")
var/ref = params["ref"]
if (!ref)
return TRUE
var/datum/station_trait/station_trait = locate(ref)
if (!istype(station_trait))
return TRUE
if (too_late_to_revert())
to_chat(usr, span_warning("It's too late to revert station traits, the round has already started!"))
return TRUE
if (!station_trait.can_revert)
stack_trace("[station_trait.type] can't be reverted, but was requested anyway.")
return TRUE
var/message = "[key_name(usr)] reverted the station trait [station_trait.name] ([station_trait.type])"
log_admin(message)
message_admins(message)
station_trait.revert()
return TRUE
if ("setup_future_traits")
if (too_late_for_future_traits())
to_chat(usr, span_warning("It's too late to add future station traits, the round is already over!"))
return TRUE
var/list/new_future_traits = list()
var/list/station_trait_names = list()
for (var/station_trait_text in params["station_traits"])
var/datum/station_trait/station_trait_path = text2path(station_trait_text)
if (!ispath(station_trait_path, /datum/station_trait) || station_trait_path == /datum/station_trait)
log_admin("[key_name(usr)] tried to set an invalid future station trait: [station_trait_text]")
to_chat(usr, span_warning("Invalid future station trait: [station_trait_text]"))
return TRUE
station_trait_names += initial(station_trait_path.name)
new_future_traits += list(list(
"name" = initial(station_trait_path.name),
"path" = station_trait_path,
))
var/message = "[key_name(usr)] has prepared the following station traits for next round: [station_trait_names.Join(", ") || "None"]"
log_admin(message)
message_admins(message)
future_traits = new_future_traits
rustg_file_write(json_encode(params["station_traits"]), FUTURE_STATION_TRAITS_FILE)
return TRUE
if ("clear_future_traits")
if (!future_traits)
to_chat(usr, span_warning("There are no future station traits."))
return TRUE
var/message = "[key_name(usr)] has cleared the station traits for next round."
log_admin(message)
message_admins(message)
fdel(FUTURE_STATION_TRAITS_FILE)
future_traits = null
return TRUE
/datum/station_traits_panel/proc/too_late_for_future_traits()
return SSticker.current_state >= GAME_STATE_FINISHED
/datum/station_traits_panel/proc/too_late_to_revert()
return SSticker.current_state >= GAME_STATE_PLAYING
/datum/station_traits_panel/ui_status(mob/user, datum/ui_state/state)
return check_rights_for(user.client, R_FUN) ? UI_INTERACTIVE : UI_CLOSE
/datum/station_traits_panel/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "StationTraitsPanel")
ui.open()