mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-31 12:01:47 +00:00
134 lines
4.1 KiB
Plaintext
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()
|