Files
Bubberstation/code/modules/admin/verbs/spawnobjasmob.dm
LemonInTheDark a0a07e9f40 Unfucks /datum/browse code (#89994)
## About The Pull Request

What it was doing was by and large fine, HOW it was doing it SUCKED 
I've cleaned it up and the nearby code some, notable hits include: 
- random if check in secrets ui that was totally unused
- proc called add that actually set 
- lists not defined as such
- stupid var names
- proc args which did nothing
- code which did nothing
- oververbose code
- proc/var names with no spacing at all

Note: This might have changed behavior accidentally, I've done my best
to test but we'll need to look out for issue reports in coming days.

## Why It's Good For The Game

I was working on bitflag code and saw red, now it's 2 hours later.

## Changelog
🆑
code: Brought browser code up to standard with the rest of the codebase
admin: Hey lads, I cleaned up how non TGUI windows work on the backend,
please let me know if anything is broken! PING ME MOTHERFUCKER
/🆑
2025-04-25 17:36:34 -04:00

110 lines
3.3 KiB
Plaintext

ADMIN_VERB(spawn_obj_as_mob, R_SPAWN, "Spawn Object-Mob", "Spawn an object as if it were a mob.", ADMIN_CATEGORY_DEBUG, object as text)
var/chosen = pick_closest_path(object, make_types_fancy(subtypesof(/obj)))
if (!chosen)
return
var/mob/living/basic/mimic/copy/basemob = /mob/living/basic/mimic/copy
var/obj/chosen_obj = text2path(chosen)
var/list/settings = list("mainsettings" = list(
"name" = list(
"desc" = "Name",
"type" = "string",
"value" = "Bob",
),
"maxhealth" = list(
"desc" = "Max. health",
"type" = "number",
"value" = 100,
),
"access" = list(
"desc" = "Access ID",
"type" = "datum",
"path" = "/obj/item/card/id",
"value" = "Default",
),
"objtype" = list(
"desc" = "Base obj type",
"type" = "datum",
"path" = "/obj",
"value" = "[chosen]",
),
"googlyeyes" = list(
"desc" = "Googly eyes",
"type" = "boolean",
"value" = "No",
),
"disableai" = list(
"desc" = "Disable AI",
"type" = "boolean",
"value" = "Yes",
),
"idledamage" = list(
"desc" = "Damaged while idle",
"type" = "boolean",
"value" = "No",
),
"dropitem" = list(
"desc" = "Drop obj on death",
"type" = "boolean",
"value" = "Yes",
),
"mobtype" = list(
"desc" = "Base mob type",
"type" = "datum",
"path" = "/mob/living/basic/mimic/copy",
"value" = "/mob/living/basic/mimic/copy",
),
"ckey" = list(
"desc" = "ckey",
"type" = "ckey",
"value" = "none",
),
))
var/list/pref_return = present_pref_like_picker(user.mob, "Customize mob", "Customize mob", width = 450, timeout = 0, settings = settings)
if (pref_return["button"] != 1)
return
settings = pref_return["settings"]
var/mainsettings = settings["mainsettings"]
chosen_obj = text2path(mainsettings["objtype"]["value"])
basemob = text2path(mainsettings["mobtype"]["value"])
if (!ispath(basemob, /mob/living/basic/mimic/copy) || !ispath(chosen_obj, /obj))
to_chat(user.mob, "Mob or object path invalid", confidential = TRUE)
basemob = new basemob(get_turf(user.mob), new chosen_obj(get_turf(user.mob)), user.mob, mainsettings["dropitem"]["value"] == "Yes" ? FALSE : TRUE, (mainsettings["googlyeyes"]["value"] == "Yes" ? FALSE : TRUE))
if (mainsettings["disableai"]["value"] == "Yes")
qdel(basemob.ai_controller)
basemob.ai_controller = null
if (mainsettings["idledamage"]["value"] == "No")
basemob.idledamage = FALSE
if (mainsettings["access"])
var/newaccess = text2path(mainsettings["access"]["value"])
if (ispath(newaccess))
var/obj/item/card/id/id = new newaccess //cant do initial on lists
basemob.AddComponent(/datum/component/simple_access, id.access)
qdel(id)
if (mainsettings["maxhealth"]["value"])
if (!isnum(mainsettings["maxhealth"]["value"]))
mainsettings["maxhealth"]["value"] = text2num(mainsettings["maxhealth"]["value"])
if (mainsettings["maxhealth"]["value"] > 0)
basemob.maxHealth = basemob.maxHealth = mainsettings["maxhealth"]["value"]
if (mainsettings["name"]["value"])
basemob.name = basemob.real_name = html_decode(mainsettings["name"]["value"])
if (mainsettings["ckey"]["value"] != "none")
basemob.ckey = mainsettings["ckey"]["value"]
log_admin("[key_name(user.mob)] spawned a sentient object-mob [basemob] from [chosen_obj] at [AREACOORD(user.mob)]")
BLACKBOX_LOG_ADMIN_VERB("Spawn object-mob")