GLOBAL_VAR_INIT(hsboxspawn, TRUE) /mob var/datum/hSB/sandbox = null /mob/proc/CanBuild() sandbox = new/datum/hSB sandbox.owner = src.ckey if(src.client.holder) sandbox.admin = 1 verbs += new/mob/proc/sandbox_panel /mob/proc/sandbox_panel() set name = "Sandbox Panel" if(sandbox) sandbox.update() /datum/hSB var/owner = null var/admin = 0 var/static/clothinfo = null var/static/reaginfo = null var/static/objinfo = null var/canisterinfo = null var/hsbinfo = null //items that shouldn't spawn on the floor because they would bug or act weird var/global/list/spawn_forbidden = list( /obj/item/tk_grab, /obj/item/implant, // not implanter, the actual thing that is inside you /obj/item/assembly, /obj/item/device/onetankbomb, /obj/item/radio, /obj/item/device/pda/ai, /obj/item/device/uplink, /obj/item/smallDelivery, /obj/item/projectile, /obj/item/borg/sight, /obj/item/borg/stun, /obj/item/robot_module) /datum/hSB/proc/update() var/global/list/hrefs = list( "Space Gear", "Suit Up (Space Travel Gear)" = "hsbsuit", "Spawn Gas Mask" = "hsbspawn&path=[/obj/item/clothing/mask/gas]", "Spawn Emergency Air Tank" = "hsbspawn&path=[/obj/item/tank/internals/emergency_oxygen/double]", "Standard Tools", "Spawn Flashlight" = "hsbspawn&path=[/obj/item/device/flashlight]", "Spawn Toolbox" = "hsbspawn&path=[/obj/item/storage/toolbox/mechanical]", "Spawn Light Replacer" = "hsbspawn&path=[/obj/item/device/lightreplacer]", "Spawn Medical Kit" = "hsbspawn&path=[/obj/item/storage/firstaid/regular]", "Spawn All-Access ID" = "hsbaaid", "Building Supplies", "Spawn 50 Wood" = "hsbwood", "Spawn 50 Metal" = "hsbmetal", "Spawn 50 Plasteel" = "hsbplasteel", "Spawn 50 Reinforced Glass" = "hsbrglass", "Spawn 50 Glass" = "hsbglass", "Spawn Full Cable Coil" = "hsbspawn&path=[/obj/item/stack/cable_coil]", "Spawn Hyper Capacity Power Cell" = "hsbspawn&path=[/obj/item/stock_parts/cell/hyper]", "Spawn Inf. Capacity Power Cell" = "hsbspawn&path=[/obj/item/stock_parts/cell/infinite]", "Spawn Rapid Construction Device" = "hsbrcd", "Spawn RCD Ammo" = "hsb_safespawn&path=[/obj/item/rcd_ammo]", "Spawn Airlock" = "hsbairlock", "Miscellaneous", "Spawn Air Scrubber" = "hsbscrubber", "Spawn Welding Fuel Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/fueltank]", "Spawn Water Tank" = "hsbspawn&path=[/obj/structure/reagent_dispensers/watertank]", "Bots", "Spawn Cleanbot" = "hsbspawn&path=[/mob/living/simple_animal/bot/cleanbot]", "Spawn Floorbot" = "hsbspawn&path=[/mob/living/simple_animal/bot/floorbot]", "Spawn Medbot" = "hsbspawn&path=[/mob/living/simple_animal/bot/medbot]", "Canisters", "Spawn O2 Canister" = "hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/oxygen]", "Spawn Air Canister" = "hsbspawn&path=[/obj/machinery/portable_atmospherics/canister/air]") if(!hsbinfo) hsbinfo = "
Sandbox Panel

" if(admin) hsbinfo += "Administration
" hsbinfo += "- Toggle Object Spawning
" hsbinfo += "- Toggle Item Spawn Panel Auto-close
" hsbinfo += "Canister Spawning
" hsbinfo += "- Spawn Plasma Canister
" hsbinfo += "- Spawn CO2 Canister
" hsbinfo += "- Spawn Nitrogen Canister
" hsbinfo += "- Spawn N2O Canister
" else hsbinfo += "Some item spawning may be disabled by the administrators.
" hsbinfo += "Only administrators may spawn dangerous canisters.
" for(var/T in hrefs) var/href = hrefs[T] if(href) hsbinfo += "- [T]
" else hsbinfo += "
[T]
" hsbinfo += "
" hsbinfo += "- Spawn Clothing...
" hsbinfo += "- Spawn Reagent Container...
" hsbinfo += "- Spawn Other Item...

" usr << browse(hsbinfo, "window=hsbpanel") /datum/hSB/Topic(href, href_list) if(!usr || !src || !(src.owner == usr.ckey)) if(usr) usr << browse(null,"window=sandbox") return if(href_list["hsb"]) switch(href_list["hsb"]) // // Admin: toggle spawning // if("hsbtobj") if(!admin) return if(GLOB.hsboxspawn) to_chat(world, "Sandbox: \black[usr.key] has disabled object spawning!") GLOB.hsboxspawn = FALSE return else to_chat(world, "Sandbox: \black[usr.key] has enabled object spawning!") GLOB.hsboxspawn = TRUE return // // Admin: Toggle auto-close // if("hsbtac") if(!admin) return if(config.sandbox_autoclose) to_chat(world, "Sandbox: \black [usr.key] has removed the object spawn limiter.") config.sandbox_autoclose = FALSE else to_chat(world, "Sandbox: \black [usr.key] has added a limiter to object spawning. The window will now auto-close after use.") config.sandbox_autoclose = TRUE return // // Spacesuit with full air jetpack set as internals // if("hsbsuit") var/mob/living/carbon/human/P = usr if(!istype(P)) return if(P.wear_suit) P.wear_suit.loc = P.loc P.wear_suit.layer = initial(P.wear_suit.layer) P.wear_suit.plane = initial(P.wear_suit.plane) P.wear_suit = null P.wear_suit = new/obj/item/clothing/suit/space(P) P.wear_suit.layer = ABOVE_HUD_LAYER P.wear_suit.plane = ABOVE_HUD_PLANE P.update_inv_wear_suit() if(P.head) P.head.loc = P.loc P.head.layer = initial(P.head.layer) P.head.plane = initial(P.head.plane) P.head = null P.head = new/obj/item/clothing/head/helmet/space(P) P.head.layer = ABOVE_HUD_LAYER P.head.plane = ABOVE_HUD_PLANE P.update_inv_head() if(P.wear_mask) P.wear_mask.loc = P.loc P.wear_mask.layer = initial(P.wear_mask.layer) P.wear_mask.plane = initial(P.wear_mask.plane) P.wear_mask = null P.wear_mask = new/obj/item/clothing/mask/gas(P) P.wear_mask.layer = ABOVE_HUD_LAYER P.wear_mask.plane = ABOVE_HUD_PLANE P.update_inv_wear_mask() if(P.back) P.back.loc = P.loc P.back.layer = initial(P.back.layer) P.back.plane = initial(P.back.plane) P.back = null P.back = new/obj/item/tank/jetpack/oxygen(P) P.back.layer = ABOVE_HUD_LAYER P.back.plane = ABOVE_HUD_PLANE P.update_inv_back() P.internal = P.back P.update_internals_hud_icon(1) if("hsbscrubber") // This is beyond its normal capability but this is sandbox and you spawned one, I assume you need it var/obj/hsb = new/obj/machinery/portable_atmospherics/scrubber{volume_rate=50*ONE_ATMOSPHERE;on=1}(usr.loc) hsb.update_icon() // hackish but it wasn't meant to be spawned I guess? // // Stacked Materials // if("hsbrglass") new/obj/item/stack/sheet/rglass{amount=50}(usr.loc) if("hsbmetal") new/obj/item/stack/sheet/metal{amount=50}(usr.loc) if("hsbplasteel") new/obj/item/stack/sheet/plasteel{amount=50}(usr.loc) if("hsbglass") new/obj/item/stack/sheet/glass{amount=50}(usr.loc) if("hsbwood") new/obj/item/stack/sheet/mineral/wood{amount=50}(usr.loc) // // All access ID // if("hsbaaid") var/obj/item/card/id/gold/ID = new(usr.loc) ID.registered_name = usr.real_name ID.assignment = "Sandbox" ID.access = get_all_accesses() ID.update_label() // // RCD - starts with full clip // Spawn check due to grief potential (destroying floors, walls, etc) // if("hsbrcd") if(!GLOB.hsboxspawn) return new/obj/item/construction/rcd/combat(usr.loc) // // New sandbox airlock maker // if("hsbairlock") new /datum/airlock_maker(usr.loc) // // Object spawn window // // Clothing if("hsbcloth") if(!GLOB.hsboxspawn) return if(!clothinfo) clothinfo = "Clothing (Reagent Containers) (Other Items)

" var/list/all_items = subtypesof(/obj/item/clothing) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) for(var/O in reverseRange(all_items)) clothinfo += "[O]
" usr << browse(clothinfo,"window=sandbox") // Reagent containers if("hsbreag") if(!GLOB.hsboxspawn) return if(!reaginfo) reaginfo = "Reagent Containers (Clothing) (Other Items)

" var/list/all_items = subtypesof(/obj/item/reagent_containers) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) for(var/O in reverseRange(all_items)) reaginfo += "[O]
" usr << browse(reaginfo,"window=sandbox") // Other items if("hsbobj") if(!GLOB.hsboxspawn) return if(!objinfo) objinfo = "Other Items (Clothing) (Reagent Containers)

" var/list/all_items = subtypesof(/obj/item/) - typesof(/obj/item/clothing) - typesof(/obj/item/reagent_containers) for(var/typekey in spawn_forbidden) all_items -= typesof(typekey) for(var/O in reverseRange(all_items)) objinfo += "[O]
" usr << browse(objinfo,"window=sandbox") // // Safespawn checks to see if spawning is disabled. // if("hsb_safespawn") if(!GLOB.hsboxspawn) usr << browse(null,"window=sandbox") return var/typepath = text2path(href_list["path"]) if(!typepath) to_chat(usr, "Bad path: \"[href_list["path"]]\"") return new typepath(usr.loc) if(config.sandbox_autoclose) usr << browse(null,"window=sandbox") // // For everything else in the href list // if("hsbspawn") var/typepath = text2path(href_list["path"]) if(!typepath) to_chat(usr, "Bad path: \"[href_list["path"]]\"") return new typepath(usr.loc) if(config.sandbox_autoclose) usr << browse(null,"window=sandbox")