/proc/reagentsforbeakers() . = list() for(var/t in subtypesof(/datum/reagent)) var/datum/reagent/R = t . += list(list("id" = t, "text" = initial(R.name))) . = json_encode(.) /proc/beakersforbeakers() . = list() for(var/t in subtypesof(/obj/item/reagent_containers)) var/obj/item/reagent_containers/C = t . += list(list("id" = t, "text" = initial(C.name), "volume" = initial(C.volume))) . = json_encode(.) /datum/admins/proc/beaker_panel_act(list/href_list) switch (href_list["beakerpanel"]) if ("spawncontainer") var/containerdata = json_decode(href_list["container"]) var/obj/item/reagent_containers/container = beaker_panel_create_container(containerdata, get_turf(usr)) log_game("[key_name(usr)] spawned a [container] containing [pretty_string_from_reagent_list(container.reagents.reagent_list)]") if ("spawngrenade") var/obj/item/grenade/chem_grenade/grenade = new(get_turf(usr)) var/containersdata = json_decode(href_list["containers"]) var/reagent_string for (var/i in 1 to 2) grenade.beakers += beaker_panel_create_container(containersdata[i], grenade) reagent_string += " ([grenade.beakers[i].name] [i] : " + pretty_string_from_reagent_list(grenade.beakers[i].reagents.reagent_list) + ");" grenade.stage_change(GRENADE_READY) var/grenadedata = json_decode(href_list["grenadedata"]) switch (href_list["grenadetype"]) if ("normal") // Regular cable coil-timed grenade var/det_time = text2num(grenadedata["grenade-timer"]) if (det_time) grenade.det_time = det_time log_game("[key_name(usr)] spawned a [grenade] containing: [reagent_string]") /datum/admins/proc/beaker_panel_prep_assembly(obj/item/assembly/towrap, grenade) var/obj/item/assembly/igniter/igniter = new igniter.secured = FALSE var/obj/item/assembly_holder/assholder = new(grenade) towrap.forceMove(assholder) igniter.forceMove(assholder) assholder.assemble(igniter, towrap, usr) assholder.master = grenade return assholder /datum/admins/proc/beaker_panel_create_container(list/containerdata, location) var/containertype = text2path(containerdata["container"]) var/obj/item/reagent_containers/container = new containertype(location) var/datum/reagents/reagents = container.reagents for(var/datum/reagent/R in reagents.reagent_list) // clear the container of reagents reagents.remove_reagent(R.type,R.volume) for (var/list/item in containerdata["reagents"]) var/datum/reagent/reagenttype = text2path(item["reagent"]) var/amount = text2num(item["volume"]) if ((reagents.total_volume + amount) > reagents.maximum_volume) reagents.maximum_volume = reagents.total_volume + amount reagents.add_reagent(reagenttype, amount) return container /datum/admins/proc/beaker_panel() set category = "Admin.Fun" set name = "Spawn reagent container" if(!check_rights()) return var/datum/asset/asset_datum = get_asset_datum(/datum/asset/simple/namespaced/common) asset_datum.send() //Could somebody tell me why this isn't using the browser datum, given that it copypastes all of browser datum's html var/dat = {"
Beaker panel

note: beakers recommended, other containers may have issues
"} for (var/i in 1 to 2 ) dat += {"

Container [i]:




       
  •   
"} dat += {"
"} usr << browse(dat, "window=beakerpanel;size=1100x720")