Files
Bubberstation/code/datums/spawners_menu.dm
Arkatos1 0b6bcbe711 Integrates spider eggs into the mob spawners (#59727)
Integrates spider egg clusters into the mob spawners instead of them being their own thing, which cleans up a code a fair bit, and gives players an overview of all available types of clusters in the ghost spawners menu, example image below. This also means players banned from ROLE_ALIEN will not be able to spawn as one, as they are very similiar antagonists in concept and it is probably wiser than using default ROLE_LAVALAND on mob spawners for restriction of this role.
Expanded mob spawners code to accomodate for a situations where spawners are using radials for handling mob choosing, and also for when spawners have special conditions for when they are available (like until eggs are mature, for example).
Mob spawners now support giving their mobs multiple factions membership, instead of being limited to only one.
Spider egg clusters now stop processing when they mature, as there is no need for them to do that anymore by that point.
Cleaned up and updated some spider variant radial info boxes, so players have better idea about each variant individual strengths and weaknesses.
2021-06-25 00:09:19 -03:00

81 lines
2.1 KiB
Plaintext

/datum/spawners_menu
var/mob/dead/observer/owner
/datum/spawners_menu/New(mob/dead/observer/new_owner)
if(!istype(new_owner))
qdel(src)
owner = new_owner
/datum/spawners_menu/Destroy()
owner = null
return ..()
/datum/spawners_menu/ui_state(mob/user)
return GLOB.observer_state
/datum/spawners_menu/ui_interact(mob/user, datum/tgui/ui)
ui = SStgui.try_update_ui(user, src, ui)
if(!ui)
ui = new(user, src, "SpawnersMenu")
ui.open()
/datum/spawners_menu/ui_data(mob/user)
var/list/data = list()
data["spawners"] = list()
for(var/spawner in GLOB.mob_spawners)
var/list/this = list()
this["name"] = spawner
this["short_desc"] = ""
this["flavor_text"] = ""
this["important_warning"] = ""
this["amount_left"] = 0
this["refs"] = list()
for(var/spawner_obj in GLOB.mob_spawners[spawner])
if(!this["desc"])
if(istype(spawner_obj, /obj/effect/mob_spawn))
var/obj/effect/mob_spawn/mob_spawner = spawner_obj
if(!mob_spawner.ready)
continue
this["short_desc"] = mob_spawner.short_desc
this["flavor_text"] = mob_spawner.flavour_text
this["important_info"] = mob_spawner.important_info
else
var/obj/object = spawner_obj
this["desc"] = object.desc
this["refs"] += "[REF(spawner_obj)]"
this["amount_left"] += 1
if(this["amount_left"] > 0)
data["spawners"] += list(this)
return data
/datum/spawners_menu/ui_act(action, params, datum/tgui/ui)
. = ..()
if(.)
return
var/group_name = params["name"]
if(!group_name || !(group_name in GLOB.mob_spawners))
return
var/list/spawnerlist = GLOB.mob_spawners[group_name]
for(var/obj/effect/mob_spawn/current_spawner as anything in spawnerlist)
if(!current_spawner.ready)
spawnerlist -= current_spawner
if(!spawnerlist.len)
return
var/obj/effect/mob_spawn/mob_spawner = pick(spawnerlist)
if(!istype(mob_spawner) || !(mob_spawner in GLOB.poi_list))
return
switch(action)
if("jump")
if(mob_spawner)
owner.forceMove(get_turf(mob_spawner))
return TRUE
if("spawn")
if(mob_spawner)
if(mob_spawner.radial_based)
owner.ManualFollow(mob_spawner)
ui.close()
mob_spawner.attack_ghost(owner)
return TRUE