mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-01-12 09:54:03 +00:00
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.
81 lines
2.1 KiB
Plaintext
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
|