mirror of
https://github.com/Aurorastation/Aurora.3.git
synced 2026-07-21 12:56:10 +01:00
Destroy several sources of lag (#21422)
Destroys a ton of sources of lag: - /obj/machinery/biogenerator/interact and /obj/machinery/computer/rdconsole/attack_hand Both of these call REF(src) constantly on their UI update, which also happens constantly. Death by a thousand cuts - /obj/machinery/button/ignition/attack_hand and /obj/machinery/button/switch/holosign/attack_hand Sleeps rather than timers, iterating the entire machinery list rather than just storing the IDs we need at roundstart - /obj/machinery/telecomms/update_icon and /obj/machinery/meter/process Calling overlay updates WAY TOO MUCH. UpdateOverlays is a significant overhead for the server at this point and the two of these combined are responsible for a little over 20% of updates. They now should only update overlays when necessary rather than every tick. - NEW! /obj/machinery/disposal/proc/update and /obj/machinery/portable_atmospherics/hydroponics/update_icon These two were also offenders, worse than telecomms but better than meters. They have also been brought into line. - /mob/living/carbon/slime Hard-del'd if grinded into slime extract less than two minutes after being "born". Fixed by adding TIMER_DELETE_ME flag. --------- Co-authored-by: Matt Atlas <liermattia@gmail.com>
This commit is contained in:
@@ -531,6 +531,9 @@ GLOBAL_LIST_INIT(localhost_addresses, list(
|
||||
holder.owner = null
|
||||
GLOB.staff -= src
|
||||
|
||||
if(mob)
|
||||
mob.clear_important_client_contents()
|
||||
|
||||
SSping.currentrun -= src
|
||||
|
||||
QDEL_NULL(tooltips)
|
||||
|
||||
@@ -400,6 +400,7 @@
|
||||
name = "drill head"
|
||||
desc = "A replaceable drill head usually used in exosuit drills."
|
||||
icon_state = "drill_head"
|
||||
var/obj/item/mecha_equipment/drill/mounted_drill
|
||||
|
||||
/obj/item/material/drill_head/condition_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
@@ -419,6 +420,12 @@
|
||||
/obj/item/material/drill_head/Initialize(newloc, material_key)
|
||||
. = ..()
|
||||
durability = 2 * material.integrity
|
||||
if(istype(newloc, /obj/item/mecha_equipment/drill))
|
||||
mounted_drill = newloc
|
||||
|
||||
/obj/item/material/drill_head/Destroy()
|
||||
mounted_drill = null
|
||||
. = ..()
|
||||
|
||||
/obj/item/material/drill_head/proc/get_durability_percentage()
|
||||
return (durability * 100) / (2 * material.integrity)
|
||||
@@ -445,6 +452,10 @@
|
||||
. = ..()
|
||||
drill_head = new /obj/item/material/drill_head(src, DEFAULT_WALL_MATERIAL)//You start with a basic steel head
|
||||
|
||||
/obj/item/mecha_equipment/drill/Destroy()
|
||||
QDEL_NULL(drill_head)
|
||||
. = ..()
|
||||
|
||||
/obj/item/mecha_equipment/drill/attack_self(var/mob/user)
|
||||
. = ..()
|
||||
if(.)
|
||||
@@ -469,8 +480,10 @@
|
||||
if(drill_head)
|
||||
owner.visible_message(SPAN_NOTICE("\The [owner] detaches the [drill_head] mounted on the [src]."))
|
||||
drill_head.forceMove(owner.loc)
|
||||
drill_head.mounted_drill = null
|
||||
DH.forceMove(src)
|
||||
drill_head = DH
|
||||
drill_head.mounted_drill = src
|
||||
owner.visible_message(SPAN_NOTICE("\The [owner] mounts the [drill_head] on the [src]."))
|
||||
return
|
||||
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
#define TRAY_LOW_HEALTH BITFLAG(0)
|
||||
#define TRAY_LOW_WATER BITFLAG(1)
|
||||
#define TRAY_LOW_NUT BITFLAG(2)
|
||||
#define TRAY_ALERT BITFLAG(3)
|
||||
#define TRAY_STASIS BITFLAG(4)
|
||||
#define TRAY_COVERED BITFLAG(5)
|
||||
#define TRAY_PLANT_DEAD BITFLAG(6)
|
||||
#define TRAY_PLANT_LIVE BITFLAG(7)
|
||||
#define TRAY_PLANT_HARVEST BITFLAG(8)
|
||||
#define TRAY_HARVEST BITFLAG(9)
|
||||
@@ -80,6 +80,11 @@
|
||||
|
||||
/// Seed details/line data.
|
||||
var/datum/seed/seed = null // The currently planted seed
|
||||
/// BITFLAG of TRAY_ defines, set in update_icon. Used to determine if we need to update.
|
||||
var/icon_status = 0
|
||||
/// Currently displayed growth stage, set in update_icon.
|
||||
var/displayed_stage
|
||||
|
||||
|
||||
/**
|
||||
Reagent information for process(), consider moving this to a controller along
|
||||
@@ -308,6 +313,7 @@
|
||||
if(GET_SEED_TRAIT(seed, TRAIT_SPOROUS) && !closed_system)
|
||||
seed.create_spores(get_turf(src))
|
||||
visible_message(SPAN_DANGER("\The [src] releases its spores!"))
|
||||
update_icon()
|
||||
|
||||
/// Process reagents being input into the tray.
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/process_reagents()
|
||||
@@ -482,6 +488,7 @@
|
||||
else
|
||||
health = 0
|
||||
dead = FALSE
|
||||
update_icon()
|
||||
|
||||
mutation_level = max(0,min(mutation_level,100))
|
||||
nutrilevel = max(0,min(nutrilevel,10))
|
||||
|
||||
@@ -1,3 +1,87 @@
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/need_update_icon()
|
||||
. = 0
|
||||
var/overlay_stage
|
||||
if (seed)
|
||||
if (mechanical && health <= (GET_SEED_TRAIT(seed, TRAIT_ENDURANCE) / 2))
|
||||
. |= TRAY_LOW_HEALTH
|
||||
|
||||
if (dead)
|
||||
. |= TRAY_PLANT_DEAD
|
||||
else
|
||||
. |= TRAY_PLANT_LIVE
|
||||
if (harvest)
|
||||
. |= TRAY_PLANT_HARVEST
|
||||
|
||||
if (. & TRAY_PLANT_LIVE)
|
||||
if(!seed.growth_stages)
|
||||
seed.update_growth_stages()
|
||||
overlay_stage = 1
|
||||
if(age >= GET_SEED_TRAIT(seed, TRAIT_MATURATION))
|
||||
overlay_stage = seed.growth_stages
|
||||
else
|
||||
var/maturation = GET_SEED_TRAIT(seed, TRAIT_MATURATION)/seed.growth_stages
|
||||
if(maturation < 1)
|
||||
maturation = 1
|
||||
overlay_stage = maturation ? max(1,round(age/maturation)) : 1
|
||||
|
||||
if (mechanical)
|
||||
if (waterlevel <= 10)
|
||||
. |= TRAY_LOW_WATER
|
||||
if (nutrilevel <= 2)
|
||||
. |= TRAY_LOW_NUT
|
||||
if (pestlevel >= 5 || toxins >= 40)
|
||||
. |= TRAY_ALERT
|
||||
if (harvest)
|
||||
. |= TRAY_HARVEST
|
||||
if (stasis)
|
||||
. |= TRAY_STASIS
|
||||
|
||||
if (closed_system)
|
||||
. |= TRAY_COVERED
|
||||
|
||||
if (. != icon_status)
|
||||
do_update_icon(., overlay_stage)
|
||||
|
||||
/obj/machinery/portable_atmospherics/hydroponics/proc/do_update_icon(var/needed_state, var/plant_stage)
|
||||
. = list()
|
||||
if (needed_state & TRAY_PLANT_DEAD)
|
||||
var/ikey = "[GET_SEED_TRAIT(seed, TRAIT_PLANT_ICON)]"
|
||||
var/image/dead_overlay = SSplants.plant_icon_cache["[ikey]"]
|
||||
if(!dead_overlay)
|
||||
dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
|
||||
dead_overlay.color = DEAD_PLANT_COLOUR
|
||||
. += dead_overlay
|
||||
else if (needed_state & TRAY_PLANT_LIVE)
|
||||
var/image/plant_overlay = seed.get_icon(plant_stage ? plant_stage : displayed_stage)
|
||||
. += plant_overlay
|
||||
if (plant_stage) displayed_stage = plant_stage
|
||||
if (needed_state & TRAY_PLANT_HARVEST)
|
||||
var/ikey = "[GET_SEED_TRAIT(seed, TRAIT_PRODUCT_ICON)]"
|
||||
var/image/harvest_overlay = SSplants.plant_icon_cache["product-[ikey]-[GET_SEED_TRAIT(seed, TRAIT_PLANT_COLOUR)]"]
|
||||
if(!harvest_overlay)
|
||||
harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]")
|
||||
harvest_overlay.color = GET_SEED_TRAIT(seed, TRAIT_PRODUCT_COLOUR)
|
||||
SSplants.plant_icon_cache["product-[ikey]-[GET_SEED_TRAIT(seed, TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
|
||||
. += harvest_overlay
|
||||
if (mechanical)
|
||||
if (needed_state & TRAY_LOW_HEALTH)
|
||||
. += "over_lowhealth3"
|
||||
if (needed_state & TRAY_LOW_WATER)
|
||||
. += "over_lowwater3"
|
||||
if (needed_state & TRAY_LOW_NUT)
|
||||
. += "over_lownutri3"
|
||||
if (needed_state & TRAY_ALERT)
|
||||
. += "over_alert3"
|
||||
if (needed_state & TRAY_HARVEST)
|
||||
. += "over_harvest3"
|
||||
if (needed_state & TRAY_STASIS)
|
||||
. += "stasis"
|
||||
if (needed_state & TRAY_COVERED)
|
||||
. += "hydrocover"
|
||||
|
||||
SetOverlays(.)
|
||||
icon_status = .
|
||||
|
||||
/// Refreshes the icon and sets the luminosity.
|
||||
/obj/machinery/portable_atmospherics/hydroponics/update_icon()
|
||||
// Update name.
|
||||
@@ -12,62 +96,7 @@
|
||||
if(labelled)
|
||||
name += " ([labelled])"
|
||||
|
||||
ClearOverlays()
|
||||
// Updates the plant overlay.
|
||||
if(!isnull(seed))
|
||||
|
||||
if(mechanical && health <= (GET_SEED_TRAIT(seed, TRAIT_ENDURANCE) / 2))
|
||||
AddOverlays("over_lowhealth3")
|
||||
|
||||
if(dead)
|
||||
var/ikey = "[GET_SEED_TRAIT(seed, TRAIT_PLANT_ICON)]-dead"
|
||||
var/image/dead_overlay = SSplants.plant_icon_cache["[ikey]"]
|
||||
if(!dead_overlay)
|
||||
dead_overlay = image('icons/obj/hydroponics_growing.dmi', "[ikey]")
|
||||
dead_overlay.color = DEAD_PLANT_COLOUR
|
||||
AddOverlays(dead_overlay)
|
||||
else
|
||||
if(!seed.growth_stages)
|
||||
seed.update_growth_stages()
|
||||
if(!seed.growth_stages)
|
||||
to_world(SPAN_DANGER("Seed type [GET_SEED_TRAIT(seed, TRAIT_PLANT_ICON)] cannot find a growth stage value."))
|
||||
return
|
||||
var/overlay_stage = 1
|
||||
if(age >= GET_SEED_TRAIT(seed, TRAIT_MATURATION))
|
||||
overlay_stage = seed.growth_stages
|
||||
else
|
||||
var/maturation = GET_SEED_TRAIT(seed, TRAIT_MATURATION)/seed.growth_stages
|
||||
if(maturation < 1)
|
||||
maturation = 1
|
||||
overlay_stage = maturation ? max(1,round(age/maturation)) : 1
|
||||
var/image/plant_overlay = seed.get_icon(overlay_stage)
|
||||
AddOverlays(plant_overlay)
|
||||
|
||||
if(harvest && overlay_stage == seed.growth_stages)
|
||||
var/ikey = "[GET_SEED_TRAIT(seed, TRAIT_PRODUCT_ICON)]"
|
||||
var/image/harvest_overlay = SSplants.plant_icon_cache["product-[ikey]-[GET_SEED_TRAIT(seed, TRAIT_PLANT_COLOUR)]"]
|
||||
if(!harvest_overlay)
|
||||
harvest_overlay = image('icons/obj/hydroponics_products.dmi', "[ikey]")
|
||||
harvest_overlay.color = GET_SEED_TRAIT(seed, TRAIT_PRODUCT_COLOUR)
|
||||
SSplants.plant_icon_cache["product-[ikey]-[GET_SEED_TRAIT(seed, TRAIT_PRODUCT_COLOUR)]"] = harvest_overlay
|
||||
AddOverlays(harvest_overlay)
|
||||
|
||||
//Draw the cover.
|
||||
if(closed_system)
|
||||
AddOverlays("hydrocover")
|
||||
|
||||
//Updated the various alert icons.
|
||||
if(mechanical)
|
||||
if(waterlevel <= 10)
|
||||
AddOverlays("over_lowwater3")
|
||||
if(nutrilevel <= 2)
|
||||
AddOverlays("over_lownutri3")
|
||||
if(pestlevel >= 5 || toxins >= 40) // Hydroponics trays no longer face issues with weeds. GET OUTTA HERE.
|
||||
AddOverlays("over_alert3")
|
||||
if(harvest)
|
||||
AddOverlays("over_harvest3")
|
||||
if(stasis)
|
||||
AddOverlays("stasis")
|
||||
need_update_icon()
|
||||
|
||||
// Apply density and opacity if a large plant is growing in the plot. Exempt mechanical trays from density alterations, since they're always dense.
|
||||
if(seed && GET_SEED_TRAIT(seed, TRAIT_LARGE))
|
||||
@@ -96,3 +125,13 @@
|
||||
set_light(0)
|
||||
last_biolum = null
|
||||
return
|
||||
|
||||
#undef TRAY_LOW_HEALTH
|
||||
#undef TRAY_LOW_WATER
|
||||
#undef TRAY_LOW_NUT
|
||||
#undef TRAY_ALERT
|
||||
#undef TRAY_STASIS
|
||||
#undef TRAY_COVERED
|
||||
#undef TRAY_PLANT_DEAD
|
||||
#undef TRAY_PLANT_LIVE
|
||||
#undef TRAY_HARVEST
|
||||
|
||||
@@ -167,7 +167,7 @@
|
||||
M.mutation_chance = clamp(mutation_chance + rand(-3, 3), 0, 100)
|
||||
babies += M
|
||||
M.set_content(TRUE)
|
||||
addtimer(CALLBACK(M, TYPE_PROC_REF(/mob/living/carbon/slime, set_content), FALSE), 1200) // You get two minutes of safety
|
||||
addtimer(CALLBACK(M, TYPE_PROC_REF(/mob/living/carbon/slime, set_content), FALSE), 1200, TIMER_DELETE_ME) // You get two minutes of safety
|
||||
feedback_add_details("slime_babies_born", "slimebirth_[replacetext(M.colour," ","_")]")
|
||||
|
||||
var/mob/living/carbon/slime/new_slime = pick(babies)
|
||||
|
||||
@@ -951,7 +951,6 @@ default behaviour is:
|
||||
qdel(M)
|
||||
|
||||
QDEL_NULL(reagents)
|
||||
clear_from_target_grid()
|
||||
|
||||
if(auras)
|
||||
for(var/a in auras)
|
||||
|
||||
@@ -97,8 +97,8 @@
|
||||
winset(src, null, "mainwindow.macro=macro hotkey_toggle.is-checked=false input.focus=true")
|
||||
MOB_STOP_THINKING(src)
|
||||
|
||||
clear_important_client_contents(client)
|
||||
enable_client_mobs_in_contents(client)
|
||||
clear_important_client_contents()
|
||||
enable_client_mobs_in_contents()
|
||||
|
||||
AddDefaultRenderers()
|
||||
update_client_color()
|
||||
|
||||
@@ -11,8 +11,7 @@
|
||||
log_access("Logout: [key_name(src)]")
|
||||
SSstatistics.update_status()
|
||||
ClearRenderers()
|
||||
if(client)
|
||||
clear_important_client_contents(client)
|
||||
clear_important_client_contents()
|
||||
|
||||
my_client = null
|
||||
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
GLOB.living_mob_list -= src
|
||||
unset_machine()
|
||||
QDEL_NULL(hud_used)
|
||||
lose_hearing_sensitivity()
|
||||
|
||||
QDEL_LIST(spell_masters)
|
||||
remove_screen_obj_references()
|
||||
|
||||
@@ -436,7 +436,10 @@ INITIALIZE_IMMEDIATE(/obj/item/organ)
|
||||
var/obj/item/organ/external/affected = owner.get_organ(parent_organ)
|
||||
if(affected) affected.internal_organs -= src
|
||||
|
||||
loc = get_turf(owner)
|
||||
var/turf/T = get_turf(owner)
|
||||
// to avoid brains and things like that getting put into nullspace and thus entering spatial grids
|
||||
if(!isnull(T))
|
||||
loc = T
|
||||
START_PROCESSING(SSprocessing, src)
|
||||
rejecting = null
|
||||
if (!reagents)
|
||||
|
||||
@@ -8,6 +8,11 @@
|
||||
var/ammo_type // the type of ammo this ammo pile accepts
|
||||
var/max_ammo = 5
|
||||
|
||||
/obj/item/ammo_pile/Destroy()
|
||||
ammo.Cut()
|
||||
ammo_overlays.Cut()
|
||||
. = ..()
|
||||
|
||||
/obj/item/ammo_pile/feedback_hints(mob/user, distance, is_adjacent)
|
||||
. += ..()
|
||||
if(is_adjacent)
|
||||
@@ -136,6 +141,7 @@
|
||||
/obj/item/ammo_pile/proc/add_ammo(var/obj/item/ammo_casing/bullet)
|
||||
if(!bullet.BB)
|
||||
return
|
||||
RegisterSignal(bullet, COMSIG_QDELETING, PROC_REF(clear_ammo))
|
||||
if(ismob(bullet.loc))
|
||||
var/mob/gunman = bullet.loc
|
||||
gunman.drop_from_inventory(bullet, src)
|
||||
@@ -150,12 +156,20 @@
|
||||
ammo_overlays[bullet] = ammo_picture
|
||||
AddOverlays(ammo_overlays[bullet])
|
||||
|
||||
/// Called when one of our contained bullets is qdel'd -- why does this happen? it is a mystery
|
||||
/obj/item/ammo_pile/proc/clear_ammo(datum/source)
|
||||
SIGNAL_HANDLER
|
||||
CutOverlays(ammo_overlays[source])
|
||||
ammo -= source
|
||||
UnregisterSignal(source, COMSIG_QDELETING)
|
||||
|
||||
/obj/item/ammo_pile/proc/remove_ammo(var/atom/target)
|
||||
var/obj/bullet = ammo[1]
|
||||
if(target)
|
||||
bullet.forceMove(target)
|
||||
CutOverlays(ammo_overlays[bullet])
|
||||
ammo -= bullet
|
||||
UnregisterSignal(bullet, COMSIG_QDELETING)
|
||||
check_ammo()
|
||||
|
||||
/obj/item/ammo_pile/proc/scatter()
|
||||
|
||||
@@ -235,6 +235,7 @@ Pins Below.
|
||||
/obj/item/device/firing_pin/Destroy()
|
||||
if(gun)
|
||||
gun.pin = null
|
||||
gun = null
|
||||
return ..()
|
||||
|
||||
//this firing pin checks for access
|
||||
|
||||
@@ -33,6 +33,10 @@
|
||||
/// Internal reservoir
|
||||
var/datum/gas_mixture/air_contents
|
||||
var/mode = MODE_PRESSURIZING
|
||||
/// MODE_X define that was set when we last updated overlays.
|
||||
var/mode_icon
|
||||
/// Whether or not we are currently indicating as occupied.
|
||||
var/showing_full = FALSE
|
||||
/// Controlled by flush wire status
|
||||
var/can_flush = TRUE
|
||||
/// TRUE if flush handle is pulled
|
||||
@@ -436,30 +440,43 @@
|
||||
* Update the icon & overlays to reflect mode & status
|
||||
*/
|
||||
/obj/machinery/disposal/proc/update()
|
||||
ClearOverlays()
|
||||
if(stat & BROKEN)
|
||||
if(!isnull(mode_icon) && (stat & BROKEN))
|
||||
ClearOverlays()
|
||||
icon_state = "[icon_state]-broken"
|
||||
mode_icon = null
|
||||
mode = MODE_OFF
|
||||
flush = 0
|
||||
return
|
||||
|
||||
var/has_contents = !!length(contents)
|
||||
|
||||
if (mode_icon == mode && showing_full == has_contents)
|
||||
return
|
||||
|
||||
// if we're here, we must rebuild...
|
||||
ClearOverlays()
|
||||
|
||||
// flush handle
|
||||
if(flush)
|
||||
AddOverlays("[icon_state]-handle")
|
||||
|
||||
// only handle is shown if no power
|
||||
if(stat & NOPOWER || mode == MODE_OFF)
|
||||
mode_icon = MODE_OFF
|
||||
return
|
||||
|
||||
// check for items in disposal - occupied light
|
||||
if(length(contents))
|
||||
if(has_contents)
|
||||
AddOverlays("[icon_state]-full")
|
||||
showing_full = has_contents
|
||||
|
||||
// charging and ready light
|
||||
if(mode == MODE_PRESSURIZING)
|
||||
AddOverlays("[icon_state]-charge")
|
||||
mode_icon = MODE_PRESSURIZING
|
||||
else if(mode == MODE_READY)
|
||||
AddOverlays("[icon_state]-ready")
|
||||
mode_icon = MODE_READY
|
||||
|
||||
/**
|
||||
* Timed process. Charge the gas reservoir and perform flush if ready.
|
||||
@@ -1731,8 +1748,3 @@
|
||||
dirs = GLOB.alldirs.Copy()
|
||||
|
||||
src.streak(dirs)
|
||||
|
||||
#undef MODE_OFF
|
||||
#undef MODE_PRESSURIZING
|
||||
#undef MODE_READY
|
||||
#undef MODE_FLUSHING
|
||||
|
||||
@@ -260,16 +260,17 @@
|
||||
|
||||
/obj/item/device/destTagger/proc/openwindow(mob/user)
|
||||
var/dat = "<tt><center><h1><b>TagMaster 2.3</b></h1></center>"
|
||||
var/ui_ref = REF(src)
|
||||
|
||||
dat += "<table style='width:100%; padding:4px;'><tr>"
|
||||
for(var/i = 1, i <= SSdisposals.tagger_locations.len, i++)
|
||||
dat += "<td><a href='byond://?src=[REF(src)];nextTag=[html_encode(SSdisposals.tagger_locations[i])]'>[SSdisposals.tagger_locations[i]]</a></td>"
|
||||
dat += "<td><a href='byond://?src=[ui_ref];nextTag=[html_encode(SSdisposals.tagger_locations[i])]'>[SSdisposals.tagger_locations[i]]</a></td>"
|
||||
|
||||
if (i % 4==0)
|
||||
dat += "</tr><tr>"
|
||||
|
||||
dat += "</tr></table><br>Current Selection: [currTag ? currTag : "None"]</tt>"
|
||||
dat += "<br><a href='byond://?src=[REF(src)];nextTag=CUSTOM'>Enter custom location.</a>"
|
||||
dat += "<br><a href='byond://?src=[ui_ref];nextTag=CUSTOM'>Enter custom location.</a>"
|
||||
user << browse(HTML_SKELETON(dat), "window=destTagScreen;size=450x375")
|
||||
onclose(user, "destTagScreen")
|
||||
|
||||
@@ -353,8 +354,8 @@
|
||||
flushing = FALSE
|
||||
// now reset disposal state
|
||||
flush = 0
|
||||
if(mode == 2) // if was ready,
|
||||
mode = 1 // switch to charging
|
||||
if(mode == MODE_READY) // if was ready,
|
||||
mode = MODE_PRESSURIZING // switch to charging
|
||||
update()
|
||||
return
|
||||
|
||||
@@ -399,3 +400,8 @@
|
||||
if(trunk)
|
||||
trunk.linked = null
|
||||
return ..()
|
||||
|
||||
#undef MODE_OFF
|
||||
#undef MODE_PRESSURIZING
|
||||
#undef MODE_READY
|
||||
#undef MODE_FLUSHING
|
||||
|
||||
@@ -10,12 +10,12 @@
|
||||
build_path = /obj/item/circuitboard/rig_assembly/civilian/industrial
|
||||
|
||||
/datum/design/circuit/hardsuit/eva
|
||||
name = "EVA suit central circuit Board"
|
||||
name = "EVA Suit Central Circuit Board"
|
||||
req_tech = list(TECH_DATA = 3)
|
||||
build_path = /obj/item/circuitboard/rig_assembly/civilian/eva
|
||||
|
||||
/datum/design/circuit/hardsuit/eva/pilot
|
||||
name = "pilot suit central circuit Board"
|
||||
name = "Pilot Suit Central Circuit Board"
|
||||
req_tech = list(TECH_DATA = 3)
|
||||
build_path = /obj/item/circuitboard/rig_assembly/civilian/eva/pilot
|
||||
|
||||
|
||||
@@ -147,22 +147,22 @@
|
||||
build_path = /obj/item/circuitboard/candymachine
|
||||
|
||||
/datum/design/circuit/machine/portgen
|
||||
name = "portable generator"
|
||||
name = "Portable Generator"
|
||||
req_tech = list(TECH_DATA = 3, TECH_PHORON = 3, TECH_POWER = 3, TECH_ENGINEERING = 3)
|
||||
build_path = /obj/item/circuitboard/portgen
|
||||
|
||||
/datum/design/circuit/machine/advancedportgen
|
||||
name = "advanced portable generator"
|
||||
name = "Advanced Portable Generator"
|
||||
req_tech = list(TECH_DATA = 3, TECH_POWER = 4, TECH_ENGINEERING = 4)
|
||||
build_path = /obj/item/circuitboard/portgen/advanced
|
||||
|
||||
/datum/design/circuit/machine/superportgen
|
||||
name = "super portable generator"
|
||||
name = "Super Portable Generator"
|
||||
req_tech = list(TECH_DATA = 3, TECH_POWER = 5, TECH_ENGINEERING = 5)
|
||||
build_path = /obj/item/circuitboard/portgen/super
|
||||
|
||||
/datum/design/circuit/machine/fusionportgen
|
||||
name = "miniature fusion reactor"
|
||||
name = "Miniature Fusion Reactor"
|
||||
req_tech = list(TECH_DATA = 3, TECH_POWER = 6, TECH_ENGINEERING = 6)
|
||||
build_path = /obj/item/circuitboard/portgen/fusion
|
||||
|
||||
@@ -238,12 +238,12 @@
|
||||
build_path = /obj/item/circuitboard/slime_extractor
|
||||
|
||||
/datum/design/circuit/machine/iv_drip
|
||||
name = "IV drip"
|
||||
name = "IV Drip"
|
||||
req_tech = list(TECH_DATA = 1, TECH_BIO = 2)
|
||||
build_path = /obj/item/circuitboard/iv_drip
|
||||
|
||||
/datum/design/circuit/oxyregenerator
|
||||
name = "oxygen regenerator"
|
||||
name = "Oxygen Regenerator"
|
||||
req_tech = list(TECH_MAGNET = 2, TECH_ENGINEERING = 2)
|
||||
build_path = /obj/item/circuitboard/oxyregenerator
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@
|
||||
materials = list(MATERIAL_ALUMINIUM = 12500, MATERIAL_GLASS = 12500, DEFAULT_WALL_MATERIAL = 7000, MATERIAL_LEAD = 5500)
|
||||
|
||||
/datum/design/rig/eva/pilot
|
||||
name = "pilot Suit Control Module Assembly"
|
||||
name = "Pilot Suit Control Module Assembly"
|
||||
desc = "An assembly for a light hardsuit that is designed for pilots. It features a plasteel lining that offers excellent protection from shrapnel."
|
||||
build_path = /obj/item/rig_assembly/eva/pilot
|
||||
materials = list(DEFAULT_WALL_MATERIAL = 25000, MATERIAL_GLASS = 12500, MATERIAL_PLASTEEL = 5500)
|
||||
|
||||
@@ -55,6 +55,8 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
var/protolathe_category = "All"
|
||||
var/imprinter_category = "All"
|
||||
|
||||
var/ref_for_ui
|
||||
|
||||
req_access = list(ACCESS_TOX) //Data and setting manipulation requires scientist access.
|
||||
|
||||
/obj/machinery/computer/rdconsole/proc/CallMaterialName(var/ID)
|
||||
@@ -134,6 +136,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
S.setup()
|
||||
break
|
||||
SyncRDevices()
|
||||
ref_for_ui = "[REF(src)]"
|
||||
return INITIALIZE_HINT_LATELOAD
|
||||
|
||||
/obj/machinery/computer/rdconsole/LateInitialize()
|
||||
@@ -505,7 +508,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
|
||||
if(0.2)
|
||||
dat += "SYSTEM LOCKED<BR><BR>"
|
||||
dat += "<A href='byond://?src=[REF(src)];lock=1.6'>Unlock</A>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];lock=1.6'>Unlock</A>"
|
||||
|
||||
if(0.3)
|
||||
dat += "Constructing Prototype. Please Wait..."
|
||||
@@ -521,70 +524,70 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "Loaded disk: "
|
||||
dat += (t_disk || d_disk) ? (t_disk ? "technology storage disk" : "design storage disk") : "None"
|
||||
dat += "<HR><UL>"
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=1.1'>Current Research Levels</A>"
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=5.0'>View Researched Technologies</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=1.1'>Current Research Levels</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=5.0'>View Researched Technologies</A>"
|
||||
if(t_disk)
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=1.2'>Disk Operations</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=1.2'>Disk Operations</A>"
|
||||
else if(d_disk)
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=1.4'>Disk Operations</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=1.4'>Disk Operations</A>"
|
||||
else
|
||||
dat += "<LI><div class='no-build'>Disk Operations</div>"
|
||||
if(linked_destroy)
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=2.2'>Destructive Analyzer Menu</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=2.2'>Destructive Analyzer Menu</A>"
|
||||
if(linked_lathe)
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=3.1'>Protolathe Construction Menu</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=3.1'>Protolathe Construction Menu</A>"
|
||||
if(linked_imprinter)
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=4.1'>Circuit Construction Menu</A>"
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=1.6'>Settings</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=4.1'>Circuit Construction Menu</A>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=1.6'>Settings</A>"
|
||||
dat += "</UL>"
|
||||
dat += "</div>"
|
||||
|
||||
if(1.1) //Research viewer
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];print=1'>Print This Page</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];print=1'>Print This Page</A><HR>"
|
||||
dat += "<b><u>Current Research Levels:</u></b><HR>"
|
||||
dat += GetResearchLevelsInfo()
|
||||
dat += "</UL>"
|
||||
|
||||
if(1.2) //Technology Disk Menu
|
||||
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "Disk Contents: (Technology Data Disk)<BR><BR>"
|
||||
dat += "<div class='menu'>"
|
||||
if(t_disk.stored == null)
|
||||
dat += "The disk has no data stored on it.<HR>"
|
||||
dat += "Operations: "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.3'>Load Tech to Disk</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.3'>Load Tech to Disk</A> || "
|
||||
else
|
||||
dat += "Name: [t_disk.stored.name]<BR>"
|
||||
dat += "Level: [t_disk.stored.level]<BR>"
|
||||
dat += "Description: [t_disk.stored.desc]<HR>"
|
||||
dat += "Operations: "
|
||||
dat += "<A href='byond://?src=[REF(src)];updt_tech=1'>Upload to Database</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];clear_tech=1'>Clear Disk</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];eject_tech=1'>Eject Disk</A>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];updt_tech=1'>Upload to Database</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];clear_tech=1'>Clear Disk</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];eject_tech=1'>Eject Disk</A>"
|
||||
dat += "</div>"
|
||||
|
||||
if(1.3) //Technology Disk submenu
|
||||
dat += "<BR><A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.2'>Return to Disk Operations</A><HR>"
|
||||
dat += "<BR><A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.2'>Return to Disk Operations</A><HR>"
|
||||
dat += "<div class='menu'>"
|
||||
dat += "Load Technology to Disk:<BR><BR>"
|
||||
dat += "<UL>"
|
||||
for(var/tech_id in files.known_tech)
|
||||
var/datum/tech/T = files.known_tech[tech_id]
|
||||
dat += "<LI>[T.name] "
|
||||
dat += "\[<A href='byond://?src=[REF(src)];copy_tech=1;copy_tech_sent=[T.id]'>copy to disk</A>\]"
|
||||
dat += "\[<A href='byond://?src=[ref_for_ui];copy_tech=1;copy_tech_sent=[T.id]'>copy to disk</A>\]"
|
||||
dat += "</UL>"
|
||||
dat += "</div>"
|
||||
|
||||
if(1.4) //Design Disk menu.
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<div class='menu'>"
|
||||
if(d_disk.blueprint == null)
|
||||
dat += "The disk has no data stored on it.<HR>"
|
||||
dat += "Operations: "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.5'>Load Design to Disk</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.5'>Load Design to Disk</A> || "
|
||||
else
|
||||
dat += "Name: [d_disk.blueprint.name]<BR>"
|
||||
switch(d_disk.blueprint.build_type)
|
||||
@@ -595,14 +598,14 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(copytext(M, 1, 2) == "$") dat += "* [copytext(M, 2)] x [d_disk.blueprint.materials[M]]<BR>"
|
||||
else dat += "* [M] x [d_disk.blueprint.materials[M]]<BR>"
|
||||
dat += "<HR>Operations: "
|
||||
dat += "<A href='byond://?src=[REF(src)];updt_design=1'>Upload to Database</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];clear_design=1'>Clear Disk</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];eject_design=1'>Eject Disk</A>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];updt_design=1'>Upload to Database</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];clear_design=1'>Clear Disk</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];eject_design=1'>Eject Disk</A>"
|
||||
dat += "</div>"
|
||||
|
||||
if(1.5) //Technology disk submenu
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.4'>Return to Disk Operations</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.4'>Return to Disk Operations</A><HR>"
|
||||
dat += "<div class='menu'>"
|
||||
dat += "Load Design to Disk:<BR><BR>"
|
||||
dat += "<UL>"
|
||||
@@ -610,50 +613,50 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
var/datum/design/D = files.known_designs[path]
|
||||
if(D.build_path)
|
||||
dat += "<LI>[D.name] "
|
||||
dat += "<A href='byond://?src=[REF(src)];copy_design=1;copy_design_sent=[D.type]'>\[copy to disk\]</A>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];copy_design=1;copy_design_sent=[D.type]'>\[copy to disk\]</A>"
|
||||
dat += "</UL>"
|
||||
dat += "</div>"
|
||||
|
||||
if(1.6) //R&D console settings
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<b><u>R&D Console Setting:</u></b><HR>"
|
||||
dat += "<div class='menu'>"
|
||||
dat += "<UL>"
|
||||
if(sync)
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];sync=1'>Sync Database with Network</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];togglesync=1'>Disconnect from Research Network</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];sync=1'>Sync Database with Network</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];togglesync=1'>Disconnect from Research Network</A><BR>"
|
||||
else
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];togglesync=1'>Connect to Research Network</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];menu=1.7'>Device Linkage Menu</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];lock=0.2'>Lock Console</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[REF(src)];reset=1'>Reset R&D Database</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];togglesync=1'>Connect to Research Network</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];menu=1.7'>Device Linkage Menu</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];lock=0.2'>Lock Console</A><BR>"
|
||||
dat += "<LI><A href='byond://?src=[ref_for_ui];reset=1'>Reset R&D Database</A><BR>"
|
||||
dat += "<UL>"
|
||||
dat += "</div>"
|
||||
|
||||
if(1.7) //R&D device linkage
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.6'>Settings Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.6'>Settings Menu</A><HR>"
|
||||
dat += "<b><u>R&D Console Device Linkage Menu:</u></b><HR>"
|
||||
dat += "<div class='menu'>"
|
||||
dat += "<A href='byond://?src=[REF(src)];find_device=1'>Re-sync with Nearby Devices</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];find_device=1'>Re-sync with Nearby Devices</A><HR>"
|
||||
dat += "Linked Devices:"
|
||||
dat += "<UL>"
|
||||
|
||||
if(allow_analyzer)
|
||||
if(linked_destroy)
|
||||
dat += "<LI>Destructive Analyzer <A href='byond://?src=[REF(src)];disconnect=destroy'>Disconnect</A>"
|
||||
dat += "<LI>Destructive Analyzer <A href='byond://?src=[ref_for_ui];disconnect=destroy'>Disconnect</A>"
|
||||
else
|
||||
dat += "<LI>(No Destructive Analyzer Linked)"
|
||||
|
||||
if(allow_lathe)
|
||||
if(linked_lathe)
|
||||
dat += "<LI>Protolathe <A href='byond://?src=[REF(src)];disconnect=lathe'>Disconnect</A>"
|
||||
dat += "<LI>Protolathe <A href='byond://?src=[ref_for_ui];disconnect=lathe'>Disconnect</A>"
|
||||
else
|
||||
dat += "<LI>(No Protolathe Linked)"
|
||||
|
||||
if(allow_imprinter)
|
||||
if(linked_imprinter)
|
||||
dat += "<LI>Circuit Imprinter <A href='byond://?src=[REF(src)];disconnect=imprinter'>Disconnect</A>"
|
||||
dat += "<LI>Circuit Imprinter <A href='byond://?src=[ref_for_ui];disconnect=imprinter'>Disconnect</A>"
|
||||
else
|
||||
dat += "<LI>(No Circuit Imprinter Linked)"
|
||||
dat += "</UL>"
|
||||
@@ -661,44 +664,44 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
|
||||
////////////////////DESTRUCTIVE ANALYZER SCREENS////////////////////////////
|
||||
if(2.0)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "NO DESTRUCTIVE ANALYZER LINKED TO CONSOLE<BR><BR>"
|
||||
|
||||
if(2.1)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "No Item Loaded. Standing-by...<BR><HR>"
|
||||
|
||||
if(2.2)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<b><u>Deconstruction Menu</u></b><HR>"
|
||||
dat += "Name: [linked_destroy.loaded_item.name]<BR>"
|
||||
dat += "Origin Tech:"
|
||||
dat += "<UL>"
|
||||
for(var/tech_id in linked_destroy.loaded_item.origin_tech)
|
||||
var/datum/tech/T = files.known_tech[tech_id]
|
||||
dat += "<LI>[capitalize_first_letters(T.name)]: \[Level: [linked_destroy.loaded_item.origin_tech[tech_id]] || Progress Contribution: [files.get_level_value(linked_destroy.loaded_item.origin_tech[tech_id])]\]"
|
||||
dat += "<LI>[T.name]: \[Level: [linked_destroy.loaded_item.origin_tech[tech_id]] || Progress Contribution: [files.get_level_value(linked_destroy.loaded_item.origin_tech[tech_id])]\]"
|
||||
dat += " (Current Level: [T.level] || Current Progress: [T.next_level_progress]/[T.next_level_threshold])"
|
||||
dat += "</UL>"
|
||||
if(!istype(linked_destroy.loaded_item, /obj/item/stack))
|
||||
dat += "<HR><A href='byond://?src=[REF(src)];deconstruct=1'>Deconstruct Item</A> || "
|
||||
dat += "<HR><A href='byond://?src=[ref_for_ui];deconstruct=1'>Deconstruct Item</A> || "
|
||||
else
|
||||
dat += "<HR><A href='byond://?src=[REF(src)];deconstruct=1'>Deconstruct One In Stack</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];eject_item=1'>Eject Item</A>"
|
||||
dat += "<HR><A href='byond://?src=[ref_for_ui];deconstruct=1'>Deconstruct One In Stack</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];eject_item=1'>Eject Item</A>"
|
||||
|
||||
/////////////////////PROTOLATHE SCREENS/////////////////////////
|
||||
if(3.0)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "NO PROTOLATHE LINKED TO CONSOLE<BR><BR>"
|
||||
|
||||
if(3.1)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=3.4'>View Queue</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=3.2'>Material Storage</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=3.3'>Chemical Storage</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=3.4'>View Queue</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=3.2'>Material Storage</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=3.3'>Chemical Storage</A><HR>"
|
||||
dat += "<b><u>Protolathe Menu:</u></b><HR>"
|
||||
dat += "<B>Material Amount:</B> [linked_lathe.TotalMaterials()] cm<sup>3</sup> (MAX: [linked_lathe.max_material_storage])<BR>"
|
||||
dat += "<B>Chemical Volume:</B> [linked_lathe.reagents.total_volume] (MAX: [linked_lathe.reagents.maximum_volume])<HR>"
|
||||
dat += "<font size='3'; color='#5c87a8'><b>Category:</b></font> <a href='byond://?src=[REF(src)];protolathe_category=1'>[protolathe_category]</a><hr>"
|
||||
dat += "<font size='3'; color='#5c87a8'><b>Category:</b></font> <a href='byond://?src=[ref_for_ui];protolathe_category=1'>[protolathe_category]</a><hr>"
|
||||
dat += "<div class='rdconsole-build'>"
|
||||
dat += "<ul>"
|
||||
var/last_category = ""
|
||||
@@ -719,16 +722,16 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(temp_dat)
|
||||
temp_dat = " \[[copytext(temp_dat, 3)]\]"
|
||||
if(linked_lathe.canBuild(D))
|
||||
dat += "<li class='highlight'><b><a href='byond://?src=[REF(src)];build=[D.type]'>[capitalize_first_letters(D.name)]</a></b>"
|
||||
dat += "<li class='highlight'><b><a href='byond://?src=[ref_for_ui];build=[D.type]'>[D.name]</a></b>"
|
||||
else
|
||||
dat += "<li class='highlight'><b><div class='no-build'>[capitalize_first_letters(D.name)]</div></b>"
|
||||
dat += "<li class='highlight'><b><div class='no-build'>[D.name]</div></b>"
|
||||
dat += "[temp_dat]<br><i>[D.desc]</i>"
|
||||
dat += "</ul>"
|
||||
dat += "</div>"
|
||||
|
||||
if(3.2) //Protolathe Material Storage Sub-menu
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=3.1'>Protolathe Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=3.1'>Protolathe Menu</A><HR>"
|
||||
dat += "<b><u>Material Storage</u></b><BR><HR>"
|
||||
dat += "<UL>"
|
||||
for(var/M in linked_lathe.materials)
|
||||
@@ -739,25 +742,25 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
|
||||
if(amount < C * SHEET_MATERIAL_AMOUNT)
|
||||
break
|
||||
dat += "[C > 1 ? ", " : ""]<A href='byond://?src=[REF(src)];lathe_ejectsheet=[M];amount=[C]'>[C]</A> "
|
||||
dat += "[C > 1 ? ", " : ""]<A href='byond://?src=[ref_for_ui];lathe_ejectsheet=[M];amount=[C]'>[C]</A> "
|
||||
|
||||
dat += " or <A href='byond://?src=[REF(src)];lathe_ejectsheet=[M];amount=50'>max</A> sheets"
|
||||
dat += " or <A href='byond://?src=[ref_for_ui];lathe_ejectsheet=[M];amount=50'>max</A> sheets"
|
||||
dat += ""
|
||||
dat += "</UL>"
|
||||
|
||||
if(3.3) //Protolathe Chemical Storage Submenu
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=3.1'>Protolathe Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=3.1'>Protolathe Menu</A><HR>"
|
||||
dat += "<b><u>Chemical Storage</u></b><BR><HR>"
|
||||
for(var/_R in linked_lathe.reagents.reagent_volumes)
|
||||
var/singleton/reagent/R = GET_SINGLETON(_R)
|
||||
dat += "Name: [R.name] | Units: [linked_lathe.reagents.reagent_volumes[_R]] "
|
||||
dat += "<A href='byond://?src=[REF(src)];disposeP=[_R]'>(Purge)</A><BR>"
|
||||
dat += "<A href='byond://?src=[REF(src)];disposeallP=1'><U>Disposal All Chemicals in Storage</U></A><BR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];disposeP=[_R]'>(Purge)</A><BR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];disposeallP=1'><U>Disposal All Chemicals in Storage</U></A><BR>"
|
||||
|
||||
if(3.4) // Protolathe queue
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=3.1'>Protolathe Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=3.1'>Protolathe Menu</A><HR>"
|
||||
dat += "<b><u>Queue</u></b><BR><HR>"
|
||||
if(!linked_lathe.queue.len)
|
||||
dat += "Empty"
|
||||
@@ -768,25 +771,25 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(linked_lathe.busy)
|
||||
dat += "<B>1: [D.name]</B><BR>"
|
||||
else
|
||||
dat += "<B>1: [D.name]</B> (Awaiting materials) <A href='byond://?src=[REF(src)];removeP=[tmp]'>Remove</A><BR>"
|
||||
dat += "<B>1: [D.name]</B> (Awaiting materials) <A href='byond://?src=[ref_for_ui];removeP=[tmp]'>Remove</A><BR>"
|
||||
else
|
||||
dat += "[tmp]: [D.name] <A href='byond://?src=[REF(src)];removeP=[tmp]'>Remove</A><BR>"
|
||||
dat += "[tmp]: [D.name] <A href='byond://?src=[ref_for_ui];removeP=[tmp]'>Remove</A><BR>"
|
||||
++tmp
|
||||
|
||||
///////////////////CIRCUIT IMPRINTER SCREENS////////////////////
|
||||
if(4.0)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A><HR>"
|
||||
dat += "NO CIRCUIT IMPRINTER LINKED TO CONSOLE<BR><BR>"
|
||||
|
||||
if(4.1)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=4.4'>View Queue</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=4.3'>Material Storage</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=4.2'>Chemical Storage</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=4.4'>View Queue</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=4.3'>Material Storage</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=4.2'>Chemical Storage</A><HR>"
|
||||
dat += "<b><u>Circuit Imprinter Menu:</u></b><BR><HR>"
|
||||
dat += "Material Amount: [linked_imprinter.TotalMaterials()] cm<sup>3</sup><BR>"
|
||||
dat += "Chemical Volume: [linked_imprinter.reagents.total_volume]<HR>"
|
||||
dat += "<font size='3'; color='#5c87a8'><b>Category:</b></font> <a href='byond://?src=[REF(src)];imprinter_category=1'>[imprinter_category]</a><hr>"
|
||||
dat += "<font size='3'; color='#5c87a8'><b>Category:</b></font> <a href='byond://?src=[ref_for_ui];imprinter_category=1'>[imprinter_category]</a><hr>"
|
||||
dat += "<div class='rdconsole-build'>"
|
||||
dat += "<ul>"
|
||||
var/last_category = ""
|
||||
@@ -807,7 +810,7 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(temp_dat)
|
||||
temp_dat = " \[[copytext(temp_dat,3)]\]"
|
||||
if(linked_imprinter.canBuild(D))
|
||||
dat += "<li class='highlight'><b><a href='byond://?src=[REF(src)];imprint=[D.type]'>[D.name]</a></b>"
|
||||
dat += "<li class='highlight'><b><a href='byond://?src=[ref_for_ui];imprint=[D.type]'>[D.name]</a></b>"
|
||||
else
|
||||
dat += "<li class='highlight'><b><div class='no-build'>[D.name]</div></b>"
|
||||
dat += "[temp_dat]<br><i>[D.desc]</i>"
|
||||
@@ -815,18 +818,18 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
dat += "</div>"
|
||||
|
||||
if(4.2)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=4.1'>Imprinter Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=4.1'>Imprinter Menu</A><HR>"
|
||||
dat += "<b><u>Chemical Storage</u></b><BR><HR>"
|
||||
for(var/_R in linked_imprinter.reagents.reagent_volumes)
|
||||
var/singleton/reagent/R = GET_SINGLETON(_R)
|
||||
dat += "Name: [R.name] | Units: [linked_imprinter.reagents.reagent_volumes[_R]] "
|
||||
dat += "<A href='byond://?src=[REF(src)];disposeI=[_R]'>(Purge)</A><BR>"
|
||||
dat += "<A href='byond://?src=[REF(src)];disposeallI=1'><U>Disposal All Chemicals in Storage</U></A><BR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];disposeI=[_R]'>(Purge)</A><BR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];disposeallI=1'><U>Disposal All Chemicals in Storage</U></A><BR>"
|
||||
|
||||
if(4.3)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=4.1'>Circuit Imprinter Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=4.1'>Circuit Imprinter Menu</A><HR>"
|
||||
dat += "<b><u>Material Storage</u></b><BR><HR>"
|
||||
dat += "<UL>"
|
||||
for(var/M in linked_imprinter.materials)
|
||||
@@ -837,15 +840,15 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
for (var/C in list(1, 3, 5, 10, 15, 20, 25, 30, 40))
|
||||
if(amount < C * SHEET_MATERIAL_AMOUNT)
|
||||
break
|
||||
dat += "[C > 1 ? ", " : ""]<A href='byond://?src=[REF(src)];imprinter_ejectsheet=[M];amount=[C]'>[C]</A> "
|
||||
dat += "[C > 1 ? ", " : ""]<A href='byond://?src=[ref_for_ui];imprinter_ejectsheet=[M];amount=[C]'>[C]</A> "
|
||||
|
||||
dat += " or <A href='byond://?src=[REF(src)];imprinter_ejectsheet=[M];amount=50'>max</A> sheets"
|
||||
dat += " or <A href='byond://?src=[ref_for_ui];imprinter_ejectsheet=[M];amount=50'>max</A> sheets"
|
||||
dat += ""
|
||||
dat += "</UL>"
|
||||
|
||||
if(4.4)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=4.1'>Circuit Imprinter Menu</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=4.1'>Circuit Imprinter Menu</A><HR>"
|
||||
dat += "<b><u>Queue</u></b><BR><HR>"
|
||||
if(linked_imprinter.queue.len == 0)
|
||||
dat += "Empty"
|
||||
@@ -855,13 +858,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
|
||||
if(tmp == 1)
|
||||
dat += "<B>1: [D.name]</B><BR>"
|
||||
else
|
||||
dat += "[tmp]: [D.name] <A href='byond://?src=[REF(src)];removeI=[tmp]'>Remove</A><BR>"
|
||||
dat += "[tmp]: [D.name] <A href='byond://?src=[ref_for_ui];removeI=[tmp]'>Remove</A><BR>"
|
||||
++tmp
|
||||
|
||||
///////////////////Research Information Browser////////////////////
|
||||
if(5.0)
|
||||
dat += "<A href='byond://?src=[REF(src)];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[REF(src)];print=2'>Print This Page</A><HR>"
|
||||
dat += "<A href='byond://?src=[ref_for_ui];menu=1.0'>Main Menu</A> || "
|
||||
dat += "<A href='byond://?src=[ref_for_ui];print=2'>Print This Page</A><HR>"
|
||||
dat += "<b><u>List of Researched Technologies and Designs:</u></b><HR>"
|
||||
dat += GetResearchListInfo()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user