Files
Paradise/code/datums/spawners_menu.dm
kyunkyunkyun 10f2e67e65 Cleanups and tweaks observer code (#30250)
* observer cleanup

* this

* bit more

* Update tgui.bundle.js
2025-09-05 05:54:22 +00:00

60 lines
1.9 KiB
Plaintext

GLOBAL_DATUM_INIT(ghost_spawners_menu, /datum/spawners_menu, new)
/datum/spawners_menu
/datum/spawners_menu/ui_state(mob/user)
return GLOB.observer_state
/datum/spawners_menu/ui_interact(mob/user, datum/tgui/ui = null)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "SpawnersMenu", "Spawners Menu")
ui.open()
/datum/spawners_menu/ui_data(mob/user)
var/list/data = list()
data["spawners"] = list()
for(var/spawner in GLOB.mob_spawners)
var/is_perm_spawner = FALSE
var/list/this = list()
this["name"] = spawner
this["desc"] = ""
this["important_info"] = ""
this["fluff"] = ""
this["uids"] = list()
for(var/obj/effect/mob_spawn/spawner_obj as anything in GLOB.mob_spawners[spawner]) // each spawner can contain multiple actual spawners, we use only one desc/info
this["uids"] += "[spawner_obj.UID()]"
if(!this["desc"]) // haven't set descriptions yet
if(istype(spawner_obj, /obj/effect/mob_spawn))
var/obj/effect/mob_spawn/MS = spawner_obj
this["desc"] = MS.description
this["important_info"] = MS.important_info
this["fluff"] = MS.flavour_text
if(MS.permanent)
is_perm_spawner = TRUE
else
var/obj/O = spawner_obj
this["desc"] = O.desc
this["amount_left"] = is_perm_spawner ? "Infinite uses" : LAZYLEN(GLOB.mob_spawners[spawner])
data["spawners"] += list(this)
return data
/datum/spawners_menu/ui_act(action, params)
if(..())
return
var/list/possible_spawners = params["ID"]
if(!length(possible_spawners))
return
var/obj/effect/mob_spawn/MS = locate(pick(possible_spawners))
if(!MS || !istype(MS))
CRASH("A ghost tried to interact with an invalid spawner, or the spawner didn't exist.")
switch(action)
if("jump")
var/mob/dead/observer/ghost = usr
ghost.abstract_move(get_turf(MS))
. = TRUE
if("spawn")
if(MS.attack_ghost(usr))
SSblackbox.record_feedback("tally", "ghost_spawns", 1, "[MS.assignedrole]")
. = TRUE