From 961eeea661aa24bcb6bdedc04414fa856446f0df Mon Sep 17 00:00:00 2001 From: Bjorn Neergaard Date: Sun, 24 Jan 2016 18:41:28 -0600 Subject: [PATCH] Rewrite SSUs, tweak newly added UIs --- .../components/unary_devices/cryo.dm | 6 +- code/datums/wires/suit_storage_unit.dm | 42 + code/game/machinery/suit_storage_unit.dm | 828 ++++++------------ code/game/objects/items/devices/aicard.dm | 39 +- code/modules/power/apc.dm | 2 +- .../security levels/keycard authentication.dm | 3 + icons/obj/suitstorage.dmi | Bin 9734 -> 11160 bytes tgstation.dme | 1 + tgui/assets/tgui.js | 20 +- tgui/src/interfaces/suit_storage.ract | 97 +- 10 files changed, 401 insertions(+), 637 deletions(-) create mode 100644 code/datums/wires/suit_storage_unit.dm diff --git a/code/ATMOSPHERICS/components/unary_devices/cryo.dm b/code/ATMOSPHERICS/components/unary_devices/cryo.dm index 2d7b771243d..3e562c8d91c 100644 --- a/code/ATMOSPHERICS/components/unary_devices/cryo.dm +++ b/code/ATMOSPHERICS/components/unary_devices/cryo.dm @@ -123,8 +123,8 @@ ..() update_icon() -/obj/machinery/atmospherics/components/unary/cryo_cell/relaymove(mob/user) // Prevent ventcrawl in this machine. - return +/obj/machinery/atmospherics/components/unary/cryo_cell/relaymove(mob/user) + container_resist() /obj/machinery/atmospherics/components/unary/cryo_cell/open_machine() if(!state_open && !panel_open) @@ -175,7 +175,7 @@ I.loc = src user.visible_message("[user] places [I] in [src].", \ "You place [I] in [src].") - if(!(on || occupant || state_open)) + if(!on && !occupant && !state_open) if(default_deconstruction_screwdriver(user, "cell-o", "cell-off", I)) return if(exchange_parts(user, I)) diff --git a/code/datums/wires/suit_storage_unit.dm b/code/datums/wires/suit_storage_unit.dm new file mode 100644 index 00000000000..d51e4c850b6 --- /dev/null +++ b/code/datums/wires/suit_storage_unit.dm @@ -0,0 +1,42 @@ +/datum/wires/suit_storage_unit + holder_type = /obj/machinery/suit_storage_unit + +/datum/wires/suit_storage_unit/New(atom/holder) + wires = list( + WIRE_HACK, WIRE_SAFETY, + WIRE_ZAP + ) + add_duds(2) + ..() + +/datum/wires/suit_storage_unit/interactable(mob/user) + var/obj/machinery/suit_storage_unit/SSU = holder + if(SSU.panel_open) + return TRUE + +/datum/wires/suit_storage_unit/get_status() + var/obj/machinery/suit_storage_unit/SSU = holder + var/list/status = list() + status += "The UV bulb is [SSU.uv_super ? "glowing" : "dim"]." + status += "The service light is [SSU.safeties ? "off" : "on"]." + return status + +/datum/wires/suit_storage_unit/on_pulse(wire) + var/obj/machinery/suit_storage_unit/SSU = holder + switch(wire) + if(WIRE_HACK) + SSU.uv_super = !SSU.uv_super + if(WIRE_SAFETY) + SSU.safeties = !SSU.safeties + if(WIRE_ZAP) + SSU.shock(usr) + +/datum/wires/suit_storage_unit/on_cut(wire, mend) + var/obj/machinery/suit_storage_unit/SSU = holder + switch(wire) + if(WIRE_HACK) + SSU.uv_super = !mend + if(WIRE_SAFETY) + SSU.safeties = mend + if(WIRE_ZAP) + SSU.shock(usr) diff --git a/code/game/machinery/suit_storage_unit.dm b/code/game/machinery/suit_storage_unit.dm index 1f92e2eadf3..16f3ba8324f 100644 --- a/code/game/machinery/suit_storage_unit.dm +++ b/code/game/machinery/suit_storage_unit.dm @@ -1,12 +1,3 @@ -////////////////////////////////////// -// SUIT STORAGE UNIT ///////////////// -////////////////////////////////////// - -#define REPAIR_NEEDS_WIRECUTTERS 1 -#define REPAIR_NEEDS_WIRES 2 -#define REPAIR_NEEDS_CROWBAR 3 -#define REPAIR_NEEDS_METAL 4 - /obj/machinery/suit_storage_unit name = "suit storage unit" desc = "An industrial unit made to hold space suits. It comes with a built-in UV cauterization mechanism. A small warning label advises that organic matter should not be placed into the unit." @@ -14,197 +5,294 @@ icon_state = "close" anchored = 1 density = 1 - //Vars to hold internal items + var/obj/item/clothing/suit/space/suit = null var/obj/item/clothing/head/helmet/space/helmet = null var/obj/item/clothing/mask/mask = null var/obj/item/storage = null - //Base types on creation - var/SUIT_TYPE = null - var/HELMET_TYPE = null - var/MASK_TYPE = null - var/STORAGE_TYPE = null - - //Machine related vars - var/maintenance_mode = 0 - var/isopen = 0 - var/islocked = 0 - var/isUV = 0 - var/ispowered = 1 - var/isbroken = 0 - var/issuperUV = 0 - var/safetieson = 1 - var/cycletime_left = 0 - var/repair_stage = 0 - -/obj/machinery/suit_storage_unit/examine(mob/user) - ..() - if(isbroken && isopen) - if(!maintenance_mode) - user << "A small LED above the maintenance panel is flashing red." - return - switch(repair_stage) - if(REPAIR_NEEDS_WIRECUTTERS) - user << "The wires inside are charred and snapped." - if(REPAIR_NEEDS_WIRES) - user << "There are no wires inside." - if(REPAIR_NEEDS_CROWBAR) - user << "Some of the interior metal is burnt and broken." - if(REPAIR_NEEDS_METAL) - user << "It lacks interior plating." + var/suit_type = null + var/helmet_type = null + var/mask_type = null + var/storage_type = null + state_open = FALSE + var/locked = FALSE + panel_open = FALSE + var/safeties = TRUE + var/uv = FALSE + var/uv_super = FALSE + var/uv_cycles = 6 /obj/machinery/suit_storage_unit/standard_unit - SUIT_TYPE = /obj/item/clothing/suit/space/eva - HELMET_TYPE = /obj/item/clothing/head/helmet/space/eva - MASK_TYPE = /obj/item/clothing/mask/breath + suit_type = /obj/item/clothing/suit/space/eva + helmet_type = /obj/item/clothing/head/helmet/space/eva + mask_type = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/captain - SUIT_TYPE = /obj/item/clothing/suit/space/captain - HELMET_TYPE = /obj/item/clothing/head/helmet/space/captain - MASK_TYPE = /obj/item/clothing/mask/gas - STORAGE_TYPE = /obj/item/weapon/tank/jetpack/oxygen/captain + suit_type = /obj/item/clothing/suit/space/captain + helmet_type = /obj/item/clothing/head/helmet/space/captain + mask_type = /obj/item/clothing/mask/gas + storage_type = /obj/item/weapon/tank/jetpack/oxygen/captain /obj/machinery/suit_storage_unit/engine - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine - MASK_TYPE = /obj/item/clothing/mask/breath + suit_type = /obj/item/clothing/suit/space/hardsuit/engine + mask_type = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/ce - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine/elite - MASK_TYPE = /obj/item/clothing/mask/breath - STORAGE_TYPE= /obj/item/clothing/shoes/magboots/advance + suit_type = /obj/item/clothing/suit/space/hardsuit/engine/elite + mask_type = /obj/item/clothing/mask/breath + storage_type= /obj/item/clothing/shoes/magboots/advance /obj/machinery/suit_storage_unit/security - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/security - MASK_TYPE = /obj/item/clothing/mask/gas/sechailer + suit_type = /obj/item/clothing/suit/space/hardsuit/security + mask_type = /obj/item/clothing/mask/gas/sechailer /obj/machinery/suit_storage_unit/hos - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/security/hos - MASK_TYPE = /obj/item/clothing/mask/gas/sechailer + suit_type = /obj/item/clothing/suit/space/hardsuit/security/hos + mask_type = /obj/item/clothing/mask/gas/sechailer /obj/machinery/suit_storage_unit/atmos - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/engine/atmos - MASK_TYPE = /obj/item/clothing/mask/gas - STORAGE_TYPE = /obj/item/weapon/watertank/atmos + suit_type = /obj/item/clothing/suit/space/hardsuit/engine/atmos + mask_type = /obj/item/clothing/mask/gas + storage_type = /obj/item/weapon/watertank/atmos /obj/machinery/suit_storage_unit/mining - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/mining - MASK_TYPE = /obj/item/clothing/mask/breath + suit_type = /obj/item/clothing/suit/space/hardsuit/mining + mask_type = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/cmo - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/medical - MASK_TYPE = /obj/item/clothing/mask/breath + suit_type = /obj/item/clothing/suit/space/hardsuit/medical + mask_type = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/rd - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/rd - MASK_TYPE = /obj/item/clothing/mask/breath + suit_type = /obj/item/clothing/suit/space/hardsuit/rd + mask_type = /obj/item/clothing/mask/breath /obj/machinery/suit_storage_unit/syndicate - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/syndi - MASK_TYPE = /obj/item/clothing/mask/gas/syndicate - STORAGE_TYPE = /obj/item/weapon/tank/jetpack/oxygen/harness + suit_type = /obj/item/clothing/suit/space/hardsuit/syndi + mask_type = /obj/item/clothing/mask/gas/syndicate + storage_type = /obj/item/weapon/tank/jetpack/oxygen/harness -/obj/machinery/suit_storage_unit/ertCom - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/ert - MASK_TYPE = /obj/item/clothing/mask/breath - STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double +/obj/machinery/suit_storage_unit/ert/command + suit_type = /obj/item/clothing/suit/space/hardsuit/ert + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double -/obj/machinery/suit_storage_unit/ertSec - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/ert/sec - MASK_TYPE = /obj/item/clothing/mask/breath - STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double +/obj/machinery/suit_storage_unit/ert/security + suit_type = /obj/item/clothing/suit/space/hardsuit/ert/sec + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double -/obj/machinery/suit_storage_unit/ertEngi - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/ert/engi - MASK_TYPE = /obj/item/clothing/mask/breath - STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double +/obj/machinery/suit_storage_unit/ert/engineer + suit_type = /obj/item/clothing/suit/space/hardsuit/ert/engi + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double -/obj/machinery/suit_storage_unit/ertMed - SUIT_TYPE = /obj/item/clothing/suit/space/hardsuit/ert/med - MASK_TYPE = /obj/item/clothing/mask/breath - STORAGE_TYPE = /obj/item/weapon/tank/internals/emergency_oxygen/double +/obj/machinery/suit_storage_unit/ert/medical + suit_type = /obj/item/clothing/suit/space/hardsuit/ert/med + mask_type = /obj/item/clothing/mask/breath + storage_type = /obj/item/weapon/tank/internals/emergency_oxygen/double /obj/machinery/suit_storage_unit/New() + wires = new /datum/wires/suit_storage_unit(src) + if(suit_type) + suit = new suit_type(src) + if(helmet_type) + helmet = new helmet_type(src) + if(mask_type) + mask = new mask_type(src) + if(storage_type) + storage = new storage_type(src) update_icon() - if(SUIT_TYPE) - suit = new SUIT_TYPE(src) - if(HELMET_TYPE) - helmet = new HELMET_TYPE(src) - if(MASK_TYPE) - mask = new MASK_TYPE(src) - if(STORAGE_TYPE) - storage = new STORAGE_TYPE(src) -/obj/machinery/suit_storage_unit/update_icon() //overlays yaaaay - Jordie - overlays = 0 +/obj/machinery/suit_storage_unit/update_icon() + overlays.Cut() - if(!isopen) - overlays += "close" - if(occupant) - overlays += "human" - if(occupant && isUV) - overlays += "uvhuman" - if(isUV) - overlays += "uv" - if(issuperUV && isUV) - overlays += "super" - if(isopen) - overlays += "open" - if(suit) - overlays += "suit" - if(helmet) - overlays += "helm" - if(storage) - overlays += "storage" - if(isbroken) + if(uv) + if(uv_super) + overlays += "super" + else if(occupant) + overlays += "uvhuman" + else + overlays += "uv" + else if(state_open) + if(stat & BROKEN) overlays += "broken" - return + else + overlays += "open" + if(suit) + overlays += "suit" + if(helmet) + overlays += "helm" + if(storage) + overlays += "storage" + else if(occupant) + overlays += "human" /obj/machinery/suit_storage_unit/power_change() ..() - ispowered = !(stat & NOPOWER) - if((stat & NOPOWER) && isopen) - dump_everything() + if(!is_operational() && state_open) + open_machine(dump = TRUE) + update_icon() + +/obj/machinery/suit_storage_unit/open_machine(dump = FALSE) + state_open = TRUE + if(dump) + dropContents() + helmet = null + suit = null + mask = null + storage = null + occupant = null update_icon() /obj/machinery/suit_storage_unit/ex_act(severity, target) switch(severity) if(1) if(prob(50)) - dump_everything() //So suits dont survive all the time + open_machine(dump = TRUE) qdel(src) - return if(2) if(prob(50)) - dump_everything() + open_machine(dump = TRUE) qdel(src) - return - else - return - return -/obj/machinery/suit_storage_unit/get_ui_data() - var/list/data = list() - data["isBroken"] = isbroken - data["isLocked"] = islocked - data["isOpen"] = isopen - data["isBaking"] = isUV - data["uv"] = issuperUV - data["safety"] = safetieson - data["maintenance"] = maintenance_mode - if(helmet) - data["helmet"] = helmet.name - if(suit) - data["suit"] = suit.name - if(mask) - data["mask"] = mask.name - if(storage) - data["aux"] = storage.name - if(occupant) - data["occupied"] = 1 - return data +/obj/machinery/suit_storage_unit/MouseDrop_T(mob/target, mob/user) + stuff_mob(target, user) + +/obj/machinery/suit_storage_unit/proc/stuff_mob(mob/target, mob/user) + if(user.stat || user.lying || !Adjacent(user) || !Adjacent(target)) + return + + if(!state_open) + user << "The unit's doors are shut!" + return + if(!is_operational()) + user << "The unit is not operational!" + return + if(occupant || helmet || suit || storage) + user << "It's too cluttered inside to fit in!" + return + + if(target == user) + visible_message("[user] squeezes into [src]!", "You squeeze into [src].") + else + visible_message("[user] starts putting [target] into [src]!", "[user] starts shoving you into [src]!") + + if(do_mob(user, target, 10)) + close_machine(target) + add_fingerprint(user) + +/obj/machinery/suit_storage_unit/proc/cook() + if(uv_cycles) + uv_cycles-- + uv = TRUE + locked = TRUE + update_icon() + if(occupant) + if(uv_super) + occupant.adjustFireLoss(rand(20, 36)) + else + occupant.adjustFireLoss(rand(10, 16)) + if(iscarbon(occupant)) + occupant.emote("scream") + addtimer(src, "cook", 50, FALSE) + else + uv_cycles = initial(uv_cycles) + uv = FALSE + locked = FALSE + if(uv_super) + visible_message("With a loud whining noise, [src]'s door grinds open. A foul cloud of smoke emanates from the chamber.") + helmet = null + qdel(helmet) + suit = null + qdel(suit) // Delete everything but the occupant. + mask = null + qdel(mask) + storage = null + qdel(storage) + // The wires get damaged too. + wires.cut_all() + else + visible_message("With a loud whining noise, [src]'s door grinds open. A light cloud of steam escapes from the chamber.") + for(var/obj/item/I in src) + I.clean_blood() + open_machine(dump = !!occupant) + +/obj/machinery/suit_storage_unit/proc/shock(mob/user, prb) + if(!prob(prb)) + var/datum/effect_system/spark_spread/s = new /datum/effect_system/spark_spread + s.set_up(5, 1, src) + s.start() + if(electrocute_mob(user, src, src)) + return 1 + +/obj/machinery/suit_storage_unit/relaymove(mob/user) + container_resist() + +/obj/machinery/suit_storage_unit/container_resist() + var/mob/living/user = usr + add_fingerprint(user) + if(locked) + visible_message("You see [user] kicking against the doors of [src]!", "You start kicking against the doors...") + addtimer(src, "resist_open", 300, FALSE, user) + else + open_machine() + +/obj/machinery/suit_storage_unit/proc/resist_open(mob/user) + if(!state_open && occupant && (user in src) && user.stat == 0) // Check they're still here. + visible_message("You see [user] bursts out of [src]!", "You escape the cramped confines of [src]!") + open_machine() + +/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) + if(istype(I, /obj/item/weapon/grab)) + var/obj/item/weapon/grab/G = I + stuff_mob(G.affecting, user) + else if(state_open && is_operational()) + if(istype(I, /obj/item/clothing/suit/space)) + if(suit) + user << "The unit already contains a suit!." + return + if(!user.drop_item()) + return + suit = I + else if(istype(I, /obj/item/clothing/head/helmet)) + if(helmet) + user << "The unit already contains a helmet!" + return + if(!user.drop_item()) + return + helmet = I + else if(istype(I, /obj/item/clothing/mask)) + if(mask) + user << "The unit already contains a mask!" + return + if(!user.drop_item()) + return + mask = I + else if(istype(I, /obj/item)) + if(storage) + user << "The auxiliary storage compartment is full!" + return + if(!user.drop_item()) + return + storage = I + + I.loc = src + visible_message("[user] inserts [I] into [src]", "You load [I] into [src].") + + if(panel_open && is_wire_tool(I)) + wires.interact(user) + if(!state_open) + if(default_deconstruction_screwdriver(user, "panel", "close", I)) + return + if(default_pry_open(I)) + return + + update_icon() + return /obj/machinery/suit_storage_unit/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ datum/tgui/master_ui = null, datum/ui_state/state = physical_state) @@ -213,401 +301,61 @@ ui = new(user, src, ui_key, "suit_storage", name, 400, 305, master_ui, state) ui.open() +/obj/machinery/suit_storage_unit/get_ui_data() + var/list/data = list() + data["locked"] = locked + data["open"] = state_open + data["safeties"] = safeties + data["uv_active"] = uv + data["uv_super"] = uv_super + if(helmet) + data["helmet"] = helmet.name + if(suit) + data["suit"] = suit.name + if(mask) + data["mask"] = mask.name + if(storage) + data["storage"] = storage.name + if(occupant) + data["occupied"] = 1 + return data + /obj/machinery/suit_storage_unit/ui_act(action, params) + if(..() || uv) + return switch(action) - if ("uv") - toggleUV(usr) - if ("safety") - togglesafeties(usr) - if ("helmet") - dispense_helmet(usr) - if ("suit") - dispense_suit(usr) - if ("mask") - dispense_mask(usr) - if ("aux") - eject_storage(usr) - if ("toggle_open") - toggle_open(usr) - if ("toggle_lock") - toggle_lock(usr) - if ("uv_start") - start_UV(usr) - if ("mob") - eject_occupant(usr) - update_icon() - return 1 - -/obj/machinery/suit_storage_unit/proc/toggleUV(mob/user) - if(!maintenance_mode) - return - else - if(issuperUV) - user << "You slide the dial back towards \"185nm\"." - issuperUV = 0 - else - user << "You crank the dial all the way up to \"15nm\"." - issuperUV = 1 - return - - -/obj/machinery/suit_storage_unit/proc/togglesafeties(mob/user) - if(!maintenance_mode) //Needed check due to bugs - return - else - user << "You push the button. The coloured LED next to it changes." - safetieson = !safetieson - - -/obj/machinery/suit_storage_unit/proc/dispense_helmet() - eject(helmet) - helmet = null - -/obj/machinery/suit_storage_unit/proc/dispense_suit() - eject(suit) - suit = null - -/obj/machinery/suit_storage_unit/proc/dispense_mask() - eject(mask) - mask = null - -/obj/machinery/suit_storage_unit/proc/eject_storage() - eject(storage) - storage = null - -/obj/machinery/suit_storage_unit/proc/eject(atom/movable/ITEM) - //Check item still exists - if not, then usually someone has already ejected the item - if(ITEM) - ITEM.loc = loc - -/obj/machinery/suit_storage_unit/proc/dump_everything() - for(var/obj/item/ITEM in src) - eject(ITEM) - suit = null - helmet = null - mask = null - storage = null - if(occupant) - eject_occupant(occupant) - return - - -/obj/machinery/suit_storage_unit/proc/toggle_open(mob/user) - if(islocked || isUV) - user << "You're unable to open unit!" - return 0 - if(occupant) - eject_occupant(user) - return 1 // eject_occupant opens the door, so we need to return - isopen = !isopen - return 1 - - -/obj/machinery/suit_storage_unit/proc/toggle_lock(mob/user) - if(occupant && safetieson) - user << "The unit's safety protocols disallow locking when a biological form is detected inside its compartments." - return - if(isopen) - return - islocked = !islocked - return - - -/obj/machinery/suit_storage_unit/proc/start_UV(mob/user) - if(isUV || isopen) //I'm bored of all these sanity checks - return - if(occupant && safetieson) - user << "WARNING: Biological entity detected in the confines of the unit's storage. Cannot initiate cycle." - return - if(!helmet && !mask && !suit && !storage && !occupant ) - user << "Unit storage bays empty. Nothing to disinfect -- Aborting." - return - user << "You start the unit's cauterisation cycle." - cycletime_left = 20 - isUV = 1 - if(occupant && !islocked) - islocked = 1 //Let's lock it for good measure - update_icon() - - var/i - spawn(0) - for(i=0,i<4,++i) - sleep(50) - if(occupant) - var/burndamage = rand(6,10) - if(issuperUV) - burndamage = rand(28,35) - if(iscarbon(occupant)) - occupant.take_organ_damage(0,burndamage) - occupant.emote("scream") - else - occupant.take_organ_damage(burndamage) - if(i==3) //End of the cycle - if(!issuperUV) - for(var/obj/item/ITEM in src) - ITEM.clean_blood() - if(istype(storage, /obj/item/weapon/reagent_containers/food)) - qdel(storage) - else //It was supercycling, destroy everything - helmet = null - suit = null - mask = null - qdel(storage) - visible_message("With a loud whining noise, [src]'s door grinds open. A foul cloud of smoke emanates from the chamber.") - isbroken = 1 - isopen = 1 - islocked = 0 - repair_stage = REPAIR_NEEDS_WIRECUTTERS - eject_occupant(occupant) - isUV = 0 //Cycle ends - update_icon() - return - -/obj/machinery/suit_storage_unit/proc/cycletimeleft() - if(cycletime_left >= 1) - cycletime_left-- - return cycletime_left - - -/obj/machinery/suit_storage_unit/proc/eject_occupant(mob/user) - if (islocked) - return - - if (!occupant) - return - - if (occupant.client) - if(user != occupant) - occupant << "The machine kicks you out!" - if(user.loc != loc) - occupant << "You leave the not-so-cozy confines of [src]." - - occupant.client.eye = occupant.client.mob - occupant.client.perspective = MOB_PERSPECTIVE - if(occupant.loc == src) - occupant.loc = loc - occupant = null - if(!isopen) - isopen = 1 - update_icon() - return - - -/obj/machinery/suit_storage_unit/relaymove(mob/user) - if(user.stat || !isturf(loc)) - return - container_resist() - - -/obj/machinery/suit_storage_unit/container_resist() - var/mob/living/user = usr - if(islocked) - user.changeNext_move(CLICK_CD_BREAKOUT) - user.last_special = world.time + CLICK_CD_BREAKOUT - var/breakout_time = 2 - user << "You start kicking against the doors to escape... (This will take about [breakout_time] minutes.)" - visible_message("You see [user] kicking against the doors of \the [src]!") - if(do_after(user,(breakout_time*60*10), target = src)) - if(!user || user.stat != CONSCIOUS || user.loc != src || isopen || !islocked) + if("door") + if(state_open) + close_machine() + else + open_machine(!!occupant) // Dump out contents if someone is in there. + . = TRUE + if("lock") + locked = !locked + . = TRUE + if("uv") + if(occupant && safeties) + return + else if(!helmet && !mask && !suit && !storage && !occupant) return else - isopen = 1 - islocked = 0 - visible_message("[user] kicks their way out of [src]!") - - else - return - eject_occupant(user) - add_fingerprint(user) - update_icon() - return - - -/obj/machinery/suit_storage_unit/MouseDrop_T(mob/M, mob/user) - store_mob(M, user) - -/obj/machinery/suit_storage_unit/proc/store_mob(mob/living/M, mob/user) - if(!istype(M)) - return - if (user.stat != 0) - return - if (!isopen) - user << "The unit's doors are shut!" - return - if (!ispowered || isbroken) - user << "The unit is not operational!" - return - if ( occupant || helmet || suit || storage ) - user << "It's too cluttered inside to fit in!" - return - if(M == user) - visible_message("[user] squeezes into [src]!", "You squeeze into [src].") - else - M.visible_message("[user] starts putting [M] into [src]!", "[user] starts shoving you into [src]!") - if(do_mob(user, M, 10)) - user.stop_pulling() - if(M.client) - M.client.perspective = EYE_PERSPECTIVE - M.client.eye = src - M.loc = src - occupant = M - isopen = 0 - update_icon() - - add_fingerprint(user) - return - return - -/obj/machinery/suit_storage_unit/proc/fix() - audible_message("[src] beeps and comes back online!") - playsound(src, 'sound/machines/defib_ready.ogg', 50, 1) - repair_stage = 0 - isbroken = 0 - update_icon() - -/obj/machinery/suit_storage_unit/attackby(obj/item/I, mob/user, params) - if(!ispowered) - if(istype(I, /obj/item/weapon/crowbar) && !isopen) - if(toggle_open(user)) - dump_everything() - user << text("You pry open [src]'s doors.") - update_icon() - return - if(istype(I, /obj/item/weapon/screwdriver)) - maintenance_mode = !maintenance_mode - playsound(loc, 'sound/items/Screwdriver.ogg', 50, 1) - user << text("You [] the unit's maintenance panel.",(maintenance_mode ? "open up" : "close") ) - return - if(isbroken && maintenance_mode) - if(istype(I, /obj/item/weapon/wirecutters) && repair_stage == REPAIR_NEEDS_WIRECUTTERS) - user.visible_message("[user] starts removing [src]'s damaged wires.", \ - "You begin removing the damaged wires from [src]...") - playsound(src, 'sound/items/Wirecutter.ogg', 50, 1) - if(!do_after(user, 30/I.toolspeed, target = src)) + cook() + . = TRUE + if("dispense") + if(!state_open) return - user.visible_message("[user] removes the damaged wires from [src].", \ - "You remove the damaged wiring from [src].") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - repair_stage = REPAIR_NEEDS_WIRES - return - if(istype(I, /obj/item/stack/cable_coil) && repair_stage == REPAIR_NEEDS_WIRES) - var/obj/item/stack/cable_coil/C = I - if(C.amount < 5) - user << "You need at least five cables to rewire [src]!" - return - user.visible_message("[user] begins replacing [src] wires.", \ - "You begin rewiring [src]...") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(!do_after(user, 30, target = src)) - return - user.visible_message("[user] adds wires to [src].", \ - "You rewire [src].") - C.amount -= 5 - if(C.amount <= 0) - user.drop_item() - qdel(C) - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - repair_stage = REPAIR_NEEDS_CROWBAR - return - if(istype(I, /obj/item/weapon/crowbar) && repair_stage == REPAIR_NEEDS_CROWBAR) - user.visible_message("[user] starts removing [src]'s broken interior plating.", \ - "You begin removing the damaged interior plating from [src]...") - playsound(src, 'sound/items/Crowbar.ogg', 50, 1) - if(!do_after(user, 30/I.toolspeed, target = src)) - return - user.visible_message("[user] removes the damaged interior plating from [src].", \ - "You remove the damaged interior plating from [src].") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - repair_stage = REPAIR_NEEDS_METAL - return - if(istype(I, /obj/item/stack/sheet/metal) && repair_stage == REPAIR_NEEDS_METAL) - var/obj/item/stack/sheet/metal/M = I - if(M.amount < 3) - user << "You need at least three sheets of metal to repair [src]!" - return - user.visible_message("[user] starts adding interior plating to [src].", \ - "You begin adding interior plating to [src]...") - playsound(src, 'sound/items/Deconstruct.ogg', 50, 1) - if(!do_after(user, 30, target = src)) - return - user.visible_message("[user] adds interior plating to [src].", \ - "You add interior plating to [src].") - fix() - return - if ( istype(I, /obj/item/weapon/grab) ) - var/obj/item/weapon/grab/G = I - store_mob(G.affecting, user) - return - if( istype(I,/obj/item/clothing/suit/space) ) - if(!isopen || isbroken) - return - var/obj/item/clothing/suit/space/S = I - if(suit) - user << "The unit already contains a suit." - return - if(!user.drop_item()) - user << "[S] is stuck to your hand, you cannot put it in [src]!" - return - user << "You load [S] into the suit storage compartment." - S.loc = src - suit = S - update_icon() - return - if( istype(I,/obj/item/clothing/head/helmet) ) - if(!isopen || isbroken) - return - var/obj/item/clothing/head/helmet/H = I - if(helmet) - user << "The unit already contains a helmet!" - return - if(!user.drop_item()) - user << "[H] is stuck to your hand, you cannot put it in the Suit Storage Unit!" - return - user << "You load [H] into the helmet storage compartment." - H.loc = src - helmet = H - update_icon() - return - if( istype(I,/obj/item/clothing/mask) ) - if(!isopen || isbroken) - return - var/obj/item/clothing/mask/M = I - if(mask) - user << "The unit already contains a mask!" - return - if(!user.drop_item()) - user << "[M] is stuck to your hand, you cannot put it in the Suit Storage Unit!" - return - user << "You load [M] into the mask storage compartment." - M.loc = src - mask = M - update_icon() - return - if( istype(I,/obj/item) ) - if(!isopen || isbroken) - return - var/obj/item/ITEM = I - if(storage) - user << "The auxiliary storage compartment is full!" - return - if(!user.drop_item()) - user << "[ITEM] is stuck to your hand, you cannot put it in the Suit Storage Unit!" - return - user << "You load [ITEM] into the auxiliary storage compartment." - ITEM.loc = src - storage = ITEM - update_icon() - return - - -/obj/machinery/suit_storage_unit/attack_ai(mob/user) - return attack_hand(user) - -/obj/machinery/suit_storage_unit/attack_paw(mob/user) - user << "You don't know how to work this!" - return - -#undef REPAIR_NEEDS_WIRECUTTERS -#undef REPAIR_NEEDS_WIRES -#undef REPAIR_NEEDS_CROWBAR -#undef REPAIR_NEEDS_METAL + switch(params["item"]) + if("helmet") + helmet.loc = loc + helmet = null + if("suit") + suit.loc = loc + suit = null + if("mask") + mask.loc = loc + mask = null + if("storage") + storage.loc = loc + storage = null + . = TRUE + update_icon() \ No newline at end of file diff --git a/code/game/objects/items/devices/aicard.dm b/code/game/objects/items/devices/aicard.dm index 514f3af3c99..19fec171d6d 100644 --- a/code/game/objects/items/devices/aicard.dm +++ b/code/game/objects/items/devices/aicard.dm @@ -11,7 +11,6 @@ var/mob/living/silicon/ai/AI origin_tech = "programming=4;materials=4" - /obj/item/device/aicard/afterattack(atom/target, mob/user, proximity) ..() if(!proximity || !target) @@ -21,20 +20,21 @@ add_logs(user, AI, "carded", src) else //No AI on the card, therefore the user wants to download one. target.transfer_ai(AI_TRANS_TO_CARD, user, null, src) - update_state() //Whatever happened, update the card's state (icon, name) to match. + update_icon() //Whatever happened, update the card's state (icon, name) to match. - -/obj/item/device/aicard/proc/update_state() +/obj/item/device/aicard/update_icon() if(AI) - name = "intelliCard - [AI.name]" - if (AI.stat == DEAD) + name = "[initial(name)]- [AI.name]" + if(AI.stat == DEAD) icon_state = "aicard-404" else icon_state = "aicard-full" - AI.cancel_camera() //AI are forced to move when transferred, so do this whenver one is downloaded. + if(!AI.control_disabled) + overlays += image('icons/obj/aicards.dmi', "aicard-on") + AI.cancel_camera() else - icon_state = "aicard" - name = "intelliCard" + name = initial(name) + icon_state = initial(icon_state) overlays.Cut() /obj/item/device/aicard/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = 0, \ @@ -44,7 +44,6 @@ ui = new(user, src, ui_key, "intellicard", name, 500, 500, master_ui, state) ui.open() - /obj/item/device/aicard/get_ui_data() var/list/data = list() if(AI) @@ -61,28 +60,26 @@ /obj/item/device/aicard/ui_act(action,params) if(..()) return - switch(action) if("wipe") - var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", "Confirm Wipe", "Yes", "No") + var/confirm = alert("Are you sure you want to wipe this card's memory? This cannot be undone once started.", name, "Yes", "No") if(confirm == "Yes" && !..()) - flush = 1 + flush = TRUE if(AI && AI.loc == src) - AI.suiciding = 1 + AI.suiciding = TRUE AI << "Your core files are being wiped!" while(AI.stat != DEAD) AI.adjustOxyLoss(2) AI.updatehealth() sleep(10) - flush = 0 + flush = FALSE + . = TRUE if("wireless") AI.control_disabled = !AI.control_disabled - AI << "The intellicard's wireless port has been [AI.control_disabled ? "disabled" : "enabled"]!" - if (AI.control_disabled) - overlays -= image('icons/obj/aicards.dmi', "aicard-on") - else - overlays += image('icons/obj/aicards.dmi', "aicard-on") + AI << "[src]'s wireless port has been [AI.control_disabled ? "disabled" : "enabled"]!" + . = TRUE if("radio") AI.radio_enabled = !AI.radio_enabled AI << "Your Subspace Transceiver has been [AI.radio_enabled ? "enabled" : "disabled"]!" - return 1 \ No newline at end of file + . = TRUE + update_icon() \ No newline at end of file diff --git a/code/modules/power/apc.dm b/code/modules/power/apc.dm index f4a6f69f91f..985515faaa0 100644 --- a/code/modules/power/apc.dm +++ b/code/modules/power/apc.dm @@ -1124,7 +1124,7 @@ s.start() if(isalien(user)) return 0 - if (electrocute_mob(user, src, src)) + if(electrocute_mob(user, src, src)) return 1 else return 0 diff --git a/code/modules/security levels/keycard authentication.dm b/code/modules/security levels/keycard authentication.dm index 1e6a4cf2098..b81553e3de8 100644 --- a/code/modules/security levels/keycard authentication.dm +++ b/code/modules/security levels/keycard authentication.dm @@ -58,13 +58,16 @@ var/datum/events/keycard_events = new() if("red_alert") if(!event_source) sendEvent("Red Alert") + . = TRUE if("emergency_maint") if(!event_source) sendEvent("Emergency Maintenance Access") + . = TRUE if("auth_swipe") if(event_source) event_source.trigger_event(usr) event_source = null + . = TRUE /obj/machinery/keycard_auth/proc/sendEvent(event_type) triggerer = usr diff --git a/icons/obj/suitstorage.dmi b/icons/obj/suitstorage.dmi index 8d43fa84775f89d9437511e9e9737e4cb72e6961..25830e471417917bb13d07534e73f07f123b066f 100644 GIT binary patch literal 11160 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 literal 9734 zcmV+hCi&TkP)V=-0C=2@&an=HFc1ddx%U)*U^Pb2wTpom26%@mCv5~u+Jf=z9Y~CWv21tA z_uu^~&gG?QP}CJI?7XofBu@JSiKl6UhQu)^q1kjgtcwpSFeH*&Z#^d@TH`zg;2~b3G4gOU1t~ zMcEW6>WbdabbY7arpp5W03ZNKL_t(|ob8=?m|aD+_J37-I&)7+PwC7M!W3pAlSEKa zl&f<2L`1Kkf&*Se{jOIoP6#3j;&c@Sym~^XWe0o~r8m zBa}Yp+^sRjv1kd+xc1E#chHo@J(YG*eO$%Qg%kEJ-Gt zWMCkVkb+DmMN3l}H-spNnUc%!$uFHJws_%5>~x5F2C(b&toYX1=jeHJyDQoDOf+>t zSM};^|J-@}8Ao85LC*iopZJf97b4_zZu-$;K6}P{mk;y}CZ7EBip1~kcx39imwac^ z2wvlm^*%iLgpX*~OIGrwFeoPtB`e5UF5Ex(1hJ9KnwdpPi-$&@VQud)d09#)TGH{Z z^QRBIG&|^bZwr{1&R!klSut!n+SywDE)csr)xCyms&1=JX6G zCRc!o#+4uVkcp}RHj+-y|*3eC^y95lDLYAx;O#k>BUtHoPb8*JW`u$G~ane!k zEO5bHK0=%C^Dq0RdDlTx=uiqphxPGO-v9XB4=!yVEclI#Z4%>PWf*hj@jZO*eO-(u zG(Y^vhZ|aE>l(nKH@};Ay!XT9IN6y2NLq2wm2=2?k{hq=qxZo97VhfM)ND~H`Gj`P zawHWeF}3o^GtXOn^xKYWWNecd2e%v*u-iLbc7K=0MTeF#QN#tG`|@@hL0tow+S83j z*wW}&Vzfl-=LRZVe$jG@<&boXN3J``B^R#Xw#6F=V^2$zHU_1obXr>5h?YHUypfwG zgTV=c0Op*ulzmTH4N~%N?S`A*^3Zl)udV?U3k59OG8QHh7y}@rBtIJR+0V?PZ(W&l zzqpLG8$(Lvh@>pXu8bmy(UBkcL8XiV>zqL4b zS(RBoN^ke|>KcISI5^3Sqbx5KBW)zs-n+H%pXcw6Ogb#@D`;zfG^U`dH%%1X$j#(+^;OJR{a=3m9iADwIF zy>}WWeg0{>JJOu>_1&>s(#)UJO4_R+r8Wj^jY&*~Mc*{iRYRm+~`+uy&5qZjVRLyxU&c;M%pdYW0$ zKSb6^kV_@d!tmXze?I9|wh?tbKoC?>afkv703%eP6w#b>IQzW$v}8Pf^0lRyP~q4T z*HNJm7;S{mb_%6x*YQ5_-?U6=<4ya`;Fdo>-teHmdirT*-S8L(kLWPk+Nbm6EzQgvQej&(BAcc)I zDzrtU63IXwen1xh7yQ>VJh^m)|GZ!~q-PUp0|)~krPKnH<#=>Wo5s*?8_~wF@9Yj9 zczjJm18#Oa+Oi(^6+*^76LR<-v$Hx{5Kjyjh8~Djhf92$N9oEo*wGI;O>36Y}QH~DbcA^L)U%1qJ9hz`b0r!jES{GYpsPYlxoGCFMo4)#tI=9pT7bl zz_lfot8F1PMo8&6j# z<)Wju`?6b&554-<@Gcd8DHRll)3j3*Y5j##{Or|%LYvQV_?&6V$9!xD; z-$(ywkXYb!f@RNIGf4WReYb?h@M z&4x7vx)vU8yLx20L87(dsg=WA`QNMXsu5`qbga4LyrtN-MHC3Mu9bn4dUVFx!RI*n zO-&p=)=K6(KiugLZldsf2GX8Lu)F7y_ha}c4MN9_0TN>Yg=f}t%7S&=aocY}NHjK5 zz}%iDrq4`r!WpwU@Zf3O{)b^=C7IKcV|e9So_ufxXv0@8`3}eK9TH{o?Ec;yW${4Q zF8WbxJidP>^t9x7R!KTCX@qTYTVC;CRd7UGa%T^1yRg~5fc4+|qB-#0EiAdc%K!b- zO2$S90mYtkJ9+D&)7Wpd2WA8YD4?zqRBJjuR+w^3#c6Od9nAM zUpC8@Jj=TEgFN!Y8l)vqfnxTo5^-ec8yIFJU!toshi%(zSf6Lk+%a+qhj0G(CBgvh zqdRCelh|g|^#JcX{seQ(;RmyEaFk3cLAg?8q*y^p!Ss$PXr;&(D@3uvl9GMxqodae>Uw~tY>p%Mn?IQ5E#m( zfLI&+Fk;buvuT}@W2{)^>6L4D&@?8oz1XY=_~KcgF>|I(!4C~OjtP}U>6nz4AP6JE zD8{iRxpb0&(ISpz(b}9PRx#;xf>POM}cadm;K~bTl4S!^%-Vp z@F^A^2+Nj1M?0+F0EtBHb3dNPu^+r_l7AauopQ=4TlI&PU;Lo>p0RS=mXOW|_g=^w z_c)l5AkUfaJejv(SUo(zSs!}ihElZglWNMm?{DMWwurHnmz!fx96^-(_`oNoaMatH zxarp=F8s-RdDB}$mOeVdX`h>$FBS&Qip_#=zY6??V^183MY+%Y|B1iuZs1E1rJ<|_q{6BMys_Tg;Vri>-=p~H`ER6Ux}?=0={?pspjpDMMv6Uy=_q__%t`C zNotEW6%)mZysf!qq{OE$ziPtW;2*9z(Hwi6As8NDY9|C$=hwVEtGk*onK5iQHlvvvq)6|~8ab2bc8V9gMKs8??E4zwk9Nw{U z`!}06k24c~zw9$Dz4Ke$&GJ{$mD8G|(MFHF&im=<0?2%GU8Zn&S2Dc!7pr>C-X|QC z8%$I0o^|;9l9l7v#s2F2s?LsNrh3(Xon_A3+sZBT=A`Exf5y1wxUE_O7XRie#)O)Z zBQbk)67Si8*{cI{P&Z~)8^P=;RJvN2Hm!xPeQQq^|K=+b+WgUZ&n3pPIw7Cqre9@g zYkM0`x;elpS?o6(`!tnU*F|(R?#dG)KsmD6d zLzc1CNZCuYRqXqgth)6xUuc*=y6%64xi3$g!H5 zTeo%oFT*|yX4blsB10;tv0{%^>jEynXa&V`NFwKv?QG`T-x%OGe;7vlQVF9qSV{<- zdDEvh%rD9VHWg!)%81I4tjn)9R0PTh8EMz6#@@`1Dci(1@296bz+B)2;IORJ*hWbm zD{IsjqBvTgKicREqm8H?-ZG-YGN?iG>3nz3LvQ%`74CSPThs^8#xePkki!k3lFQv_#|iWpXPwPkW7rvI&<|HjBWask;dyB=z(Olpi1@N-Hgd z@e@ zh(f81*`}0q9DZFJpn$mIV7hnXmHGrgf7yr7Q!_0BeE3AYOPt79g9Qy8N;;`NFf2MoT3G(afB$V~y$` z-y3aFA0UiE#)=`fXJ|{AD{pHLLPpu!p)BkaqNln=^H7s=Gh_-Jv>CYY-<{<2}%S; z$9T;-MpAQ$RjRH&K@>Epk~RGWeF9rHmW{@VHUifs*2dVa9@ti0el=J@H@RTIQbr`U z{RRkXFJ*?>a)1&NZ7{Y3Y`ZRhJWz(_m%r0~InE6(%N1M^HmCsB=#}(no#x^01p?1o-If*4eSh6lZwMJ@mTM_|cJM7O; zGk^#PGy;VLW3UAXi!Ja=5CYNWfiYMZyp+S#S)I(;eeSq~b(a9GHMWz{gM+^Hz)kB> zk>;i!9ZMmv@H&!w`SWi;x-Oxzh?T-k*;pBmFwz(iCoIueMKsomWUdw4H8@_xo(DIv zTfP9iT%Q1Km_MhLoVALIeSpD)wvI|kDYts7V_X;&VQrE+kqBg<*=?_X)JJ%p-kWfKMgQW#7?U4Dx)#)>epLK-b=UzEslg-mJtRbM;8gC0b;*W_D2hib!(VP87DT_!l0F*pau2x5zGMzC~gXr4Z>F2 z?12QehhG53A|rY%qXhz^4HTg+Kl`U^f5h{-fI$Zlwo&x=kJKWIS73|!0Jf}h;GXS# z_P=&vm#$_UVp5L6aRs%c!(a)Gl!lQ?fU+E#atWH-EX!(eUu?8cCJuZ|?LKO-bUl3n zE9r#@VT_W(N;IQXV;-nl7{iHU61G7Z81W7D_=Rh|SR^x;XzMpypNFAl04X4)jKR^0 zq-{iOAiqU^`N9)5fJT5Z2ro^pG&C;Zmh}MyqOCcBDu$#jfn`IY$wONI_|-^h-u0X-bYs}_Jfsjv%htwF6_!=4uTQW^%+j)Py^Jvp?#bDS1VVr%5RN5i@&xtx zjowr#1(X!z9cP>PmVM+h1yrdSfzX?p-Yo&HgeJE>Kk6kxhY%(*wLt#k`+ORE^{Vmb zSZ_ej>jMl8``qxWjSLs77$K1IdEL-g{Jm|1sYUN$V8zmIOcyYlNg{1WH<#9J$eGGI z+jE`659m4wUeqVJ;npKTL!=Ffu-~{rK%1Y@1ENzUyvDk9ymXo{vWW*vM#PA0r^n&@ zzFZ&SrTk(fL=O9yNTH=P7Km+G1U7BhMAYg5ftD6ZfEo%-j1Z~L1c&dld44?{!BB{a zVh{pb0FKS24}O!dy<=R?x&|OENwu8EaRvP&5h>T&YzLeG_U>un;;%nTHsheQ9abCs zy#U*i+?(7LTz%)!WbbCVB0utN!CmoUzuf# z`T(xly+&f5;s<@P_6m~6KN#cXkAyIK)9B@ zX$_XH=St6MjK5N?f;L!kQ-Lp1)YV7Gy6}?BV_TDuWgofBC_CXRD=`R2*TmQ;q^Lb8 z6Y9GB@)i65I4*K(6JbmHxSVx|m`G;8N|%B~$V5|~il-3x7FhcGh_-i-IXd%&w z1f!|xp|Hny_Vr_cL<%EQ=H9<J!8x>-JNl6^POpu}^PXM`PQ;Ubc-m-E7Kz zMUyok9GiJFH_xy95Hx5b2rWyC^f;077NAqH9BS#gx~VcmjKnvXP#IFf;JVfp_+!w| zX8@K#NU>p{%pV@T*ZuX1-*M@+i~fPH?f^HeS&5g-*eiPrXar$oFi4D>MI^EaFO6`M zwSTtD#?gRZ{%k!@EX^bQO83ytsIl@I}fz*lwob)iaZ46(G(mL*Hd&}~cJG9}AhZ)qKOFm*k^amOtZ*Ie@( zqmAI$f9+<;y~_}z1unhe5n9qoj1dg6p&L7v9IbMSF4Vmw(9hcQkf5 z^_WX85SO3&N%MdAZ^9W-IH@diqx5F^2fJIzKd_eRd)s{E>W~X=`QPo}7bVM&sU&Q= zkC?@u?^?rxghg5!+-XVXI!&A9&sz?0-#S_yi-*e*3l>gCWdzd?OtYf%u<5(#M|)Su zeP0%rZt+y`z|YP%*KRDZa9$ENmgukzBfg*Amue}`Qk1;a=%~pm=S1Y3^nwtF+${js-77qM;;gww5 z)EP919fP)eziO2_a~XHNKYHQyPjm4pN22@s7>op~(p}7Y!vdyG>v*|7L#Klr8bSZ@ zFQlqv{;+J6r-xlW_NL}H`_oz;ZGU=Ie%VJZ`-jrpqyfCn(b#s`B>w3!X#lTtOd7!J z9Fqp{I>%NY+x^AYzhu0jQFf+2!1pgW$1K}0fUqQ)Y?6V2JVFXGnG`KeY1|ObKEJWr zLp{72{rQU)EqWD3y7kzqEMWO>FRx51`fAT-dgbzfcgYQ-Qx|kqufF!royVVX1eO`({LlP}|G0P|LQdzV zA1&syXS{d$K;K{@kvwF^MDvfWyu7gQ8=sc<-Ml1y(#NI%4riaak#Ai3UWk|Q<8LnK zgwqbruUxZF;H#6nw)VO^+W@v|32;{r$2(gepqw<6tRQQ-aR1;F#6~h}W)>+e9vXRu zwY|gSWhtF#NsoX2xk2n~eSlXBTjc=;@4asA)mPp&V`u6Eobid%%^nAI(>pRsOHT@f zAlc-SUsnNR$geMP#M^i0$$NVF>Nyj?47^(U1UuUUY*h^Ki$C5sIYoj2@xz@fV`V}?WjP!Y#(p;`^O z?Zzd%`;bK&Ke(UDPxQ}Ie)Iz;n!o>e+7tAYI@Y$u?K?xC;MKxbEdhUjY>225bIY0% zcNH{uRu%UInm-DQKaWKGsSJxtF;7+{f4luHeBk)^PpCdXamAC5c*$Ixak75@6GNPI zR67e?aF>tJ=KK81zG>cd&=fk9LeXLQs~(?FeSlj&y6{oU>a5y+TXART6TF(JYXCQ2 zcdL2ewwuG|Oon|9xsg;N!ODSARt**CuY?p0RANO1!HP}i^^t;fBE=ooU0b^LimMtj zgxhafY#x7VUC9+*MjB1Z3WKhkL)Mercx4~G4-T+!SBIu%i%QAIimO&ymnxpyRC#Kx zTJ_r-Cq$p1WXn_sSw8s$F@*fV2ok;@83zRH0g{(GLvm+aIWLvCQ=UADPypOG*-R-cpX;}0;RPU z(u4_bV)O|dfs?{u3rp1HpJ;u89f7)8Kv*pk6^f!MljQC1y90x$9lfGfeG>>035SH| zZ0buCSh+L+Qrbq)SV}A~$Xc60It;B$+W*_Wuk4Ti;!FDD6aM-hKRs(TfHp!)(I~%u zfj_P|nK)druMqZT`9tmXIJRBmp8$P=9fA6XLX$~UrGRTWNEx8DX35jb5CY=ZAQ5<; zOUm;Q!XPcd+#`NPQzlESF-kNR0~rBvl=4AIP*MepQX%KC}%G2#irU$xJbuRRqO+-TwG;zKApY zz>&3yX=H=tpqJ;6uG4kYsdj0WMG&mEl1A!(AeLwOWiveEHClD3_O*y}I!Cm+FZ3lEuG!H^ykYt!bhCB)Q z=o9P+)O|!wGEE|xLI{hv7!YYgq&0pJ0ESrAjKLO?RMI2idi>?acLRn<*(Po<29mae z5KjP8@2$@0%IU)K4I|6l= z083hgK^05FTR(6oj_u$`3)gk<{eXn$qO@kLSR|SB&|0(VnF6*YiLuo9eZ*T2*G(X$ zMJPMhg>Jkq(bnM{e!vr()dz^1_x`(IPE^VnPne>ZVL20`Pe3NH)+I!8o!z;cbNB)F zX8FDB?7!#0R3dcZSlW?q*VhM-Le!e#(MUIp8mt5CY<+?qfx1gT zrBY@jpC^hHKl}C(1Yv-*YY#PwVnz!EY-us2xru~h<2p{QcoWC0S=;9n3)@$VU*)%@ zp{7p|MWHb!)gof8#ln87T*Qt&jMdYd$~Cqbv$ORH zb_D9Dfni7{mlG;h#7YsxF-mDl4uv4Mcw{M7BALWlMhiK>|R`;&qeW$*!p)}yQ;}(fO-f}%s3SwNEGZAxpYW?vi zoH3gN51#h2{`g#0^W=joFbFRG+821!qC;NBzl(l!n-=A_e(PLu{>48=T5^*(4n8d4!NdtJDW6}U#=a@8r*EuE);B}7w2W5JG U8$M(TD*ylh07*qoM6N<$f^>1ol>h($ diff --git a/tgstation.dme b/tgstation.dme index 73fa4b7f871..a7f8d1f9e3c 100644 --- a/tgstation.dme +++ b/tgstation.dme @@ -282,6 +282,7 @@ #include "code\datums\wires\r_n_d.dm" #include "code\datums\wires\radio.dm" #include "code\datums\wires\robot.dm" +#include "code\datums\wires\suit_storage_unit.dm" #include "code\datums\wires\syndicatebomb.dm" #include "code\datums\wires\vending.dm" #include "code\datums\wires\wires.dm" diff --git a/tgui/assets/tgui.js b/tgui/assets/tgui.js index 83f8c0a2f50..5ca8e0464f2 100644 --- a/tgui/assets/tgui.js +++ b/tgui/assets/tgui.js @@ -1,11 +1,11 @@ -require=function t(e,n,r){function i(o,s){if(!n[o]){if(!e[o]){var u="function"==typeof require&&require;if(!s&&u)return u(o,!0);if(a)return a(o,!0);var c=Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var l=n[o]={exports:{}};e[o][0].call(l.exports,function(t){var n=e[o][1][t];return i(n?n:t)},l,l.exports,t,e,n,r)}return n[o].exports}for(var a="function"==typeof require&&require,o=0;o=0;--r){var i=this.tryEntries[r],a=i.completion;if("root"===i.tryLoc)return e("end");if(i.tryLoc<=this.prev){var o=y.call(i,"catchLoc"),s=y.call(i,"finallyLoc");if(o&&s){if(this.prev=0;--n){var r=this.tryEntries[n];if(r.tryLoc<=this.prev&&y.call(r,"finallyLoc")&&this.prev=0;--e){var n=this.tryEntries[e];if(n.finallyLoc===t)return this.complete(n.completion,n.afterLoc),h(n),O}},"catch":function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var n=this.tryEntries[e];if(n.tryLoc===t){var r=n.completion;if("throw"===r.type){var i=r.arg;h(n)}return i}}throw Error("illegal catch attempt")},delegateYield:function(t,e,n){return this.delegate={iterator:m(t),resultName:e,nextLoc:n},O}}}("object"==typeof n?n:"object"==typeof window?window:"object"==typeof self?self:this)}).call(this,t(193),void 0!==n?n:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{193:193}],3:[function(t,e,n){e.exports=function(t){if("function"!=typeof t)throw TypeError(t+" is not a function!");return t}},{}],4:[function(t,e,n){var r=t(84)("unscopables"),i=Array.prototype;void 0==i[r]&&t(32)(i,r,{}),e.exports=function(t){i[r][t]=!0}},{32:32,84:84}],5:[function(t,e,n){var r=t(39);e.exports=function(t){if(!r(t))throw TypeError(t+" is not an object!");return t}},{39:39}],6:[function(t,e,n){"use strict";var r=t(81),i=t(77),a=t(80);e.exports=[].copyWithin||function(t,e){var n=r(this),o=a(n.length),s=i(t,o),u=i(e,o),c=arguments,l=c.length>2?c[2]:void 0,p=Math.min((void 0===l?o:i(l,o))-u,o-s),f=1;for(s>u&&u+p>s&&(f=-1,u+=p-1,s+=p-1);p-- >0;)u in n?n[s]=n[u]:delete n[s],s+=f,u+=f;return n}},{77:77,80:80,81:81}],7:[function(t,e,n){"use strict";var r=t(81),i=t(77),a=t(80);e.exports=[].fill||function(t){for(var e=r(this),n=a(e.length),o=arguments,s=o.length,u=i(s>1?o[1]:void 0,n),c=s>2?o[2]:void 0,l=void 0===c?n:i(c,n);l>u;)e[u++]=t;return e}},{77:77,80:80,81:81}],8:[function(t,e,n){var r=t(79),i=t(80),a=t(77);e.exports=function(t){return function(e,n,o){var s,u=r(e),c=i(u.length),l=a(o,c);if(t&&n!=n){for(;c>l;)if(s=u[l++],s!=s)return!0}else for(;c>l;l++)if((t||l in u)&&u[l]===n)return t||l;return!t&&-1}}},{77:77,79:79,80:80}],9:[function(t,e,n){var r=t(18),i=t(35),a=t(81),o=t(80),s=t(10);e.exports=function(t){var e=1==t,n=2==t,u=3==t,c=4==t,l=6==t,p=5==t||l;return function(f,h,d){for(var m,v,g=a(f),y=i(g),b=r(h,d,3),w=o(y.length),x=0,_=e?s(f,w):n?s(f,0):void 0;w>x;x++)if((p||x in y)&&(m=y[x],v=b(m,x,g),t))if(e)_[x]=v;else if(v)switch(t){case 3:return!0;case 5:return m;case 6:return x;case 2:_.push(m)}else if(c)return!1;return l?-1:u||c?c:_}}},{10:10,18:18,35:35,80:80,81:81}],10:[function(t,e,n){var r=t(39),i=t(37),a=t(84)("species");e.exports=function(t,e){var n;return i(t)&&(n=t.constructor,"function"!=typeof n||n!==Array&&!i(n.prototype)||(n=void 0),r(n)&&(n=n[a],null===n&&(n=void 0))),new(void 0===n?Array:n)(e)}},{37:37,39:39,84:84}],11:[function(t,e,n){var r=t(12),i=t(84)("toStringTag"),a="Arguments"==r(function(){return arguments}());e.exports=function(t){var e,n,o;return void 0===t?"Undefined":null===t?"Null":"string"==typeof(n=(e=Object(t))[i])?n:a?r(e):"Object"==(o=r(e))&&"function"==typeof e.callee?"Arguments":o}},{12:12,84:84}],12:[function(t,e,n){var r={}.toString;e.exports=function(t){return r.call(t).slice(8,-1)}},{}],13:[function(t,e,n){"use strict";var r=t(47),i=t(32),a=t(61),o=t(18),s=t(70),u=t(19),c=t(28),l=t(43),p=t(45),f=t(83)("id"),h=t(31),d=t(39),m=t(66),v=t(20),g=Object.isExtensible||d,y=v?"_s":"size",b=0,w=function(t,e){if(!d(t))return"symbol"==typeof t?t:("string"==typeof t?"S":"P")+t;if(!h(t,f)){if(!g(t))return"F";if(!e)return"E";i(t,f,++b)}return"O"+t[f]},x=function(t,e){var n,r=w(e);if("F"!==r)return t._i[r];for(n=t._f;n;n=n.n)if(n.k==e)return n};e.exports={getConstructor:function(t,e,n,i){var l=t(function(t,a){s(t,l,e),t._i=r.create(null),t._f=void 0,t._l=void 0,t[y]=0,void 0!=a&&c(a,n,t[i],t)});return a(l.prototype,{clear:function(){for(var t=this,e=t._i,n=t._f;n;n=n.n)n.r=!0,n.p&&(n.p=n.p.n=void 0),delete e[n.i];t._f=t._l=void 0,t[y]=0},"delete":function(t){var e=this,n=x(e,t);if(n){var r=n.n,i=n.p;delete e._i[n.i],n.r=!0,i&&(i.n=r),r&&(r.p=i),e._f==n&&(e._f=r),e._l==n&&(e._l=i),e[y]--}return!!n},forEach:function(t){for(var e,n=o(t,arguments.length>1?arguments[1]:void 0,3);e=e?e.n:this._f;)for(n(e.v,e.k,this);e&&e.r;)e=e.p},has:function(t){return!!x(this,t)}}),v&&r.setDesc(l.prototype,"size",{get:function(){return u(this[y])}}),l},def:function(t,e,n){var r,i,a=x(t,e);return a?a.v=n:(t._l=a={i:i=w(e,!0),k:e,v:n,p:r=t._l,n:void 0,r:!1},t._f||(t._f=a),r&&(r.n=a),t[y]++,"F"!==i&&(t._i[i]=a)),t},getEntry:x,setStrong:function(t,e,n){l(t,e,function(t,e){this._t=t,this._k=e,this._l=void 0},function(){for(var t=this,e=t._k,n=t._l;n&&n.r;)n=n.p;return t._t&&(t._l=n=n?n.n:t._t._f)?"keys"==e?p(0,n.k):"values"==e?p(0,n.v):p(0,[n.k,n.v]):(t._t=void 0,p(1))},n?"entries":"values",!n,!0),m(e)}}},{18:18,19:19,20:20,28:28,31:31,32:32,39:39,43:43,45:45,47:47,61:61,66:66,70:70,83:83}],14:[function(t,e,n){var r=t(28),i=t(11);e.exports=function(t){return function(){if(i(this)!=t)throw TypeError(t+"#toJSON isn't generic");var e=[];return r(this,!1,e.push,e),e}}},{11:11,28:28}],15:[function(t,e,n){"use strict";var r=t(32),i=t(61),a=t(5),o=t(39),s=t(70),u=t(28),c=t(9),l=t(31),p=t(83)("weak"),f=Object.isExtensible||o,h=c(5),d=c(6),m=0,v=function(t){return t._l||(t._l=new g)},g=function(){this.a=[]},y=function(t,e){return h(t.a,function(t){return t[0]===e})};g.prototype={get:function(t){var e=y(this,t);return e?e[1]:void 0},has:function(t){return!!y(this,t)},set:function(t,e){var n=y(this,t);n?n[1]=e:this.a.push([t,e])},"delete":function(t){var e=d(this.a,function(e){return e[0]===t});return~e&&this.a.splice(e,1),!!~e}},e.exports={getConstructor:function(t,e,n,r){var a=t(function(t,i){s(t,a,e),t._i=m++,t._l=void 0,void 0!=i&&u(i,n,t[r],t)});return i(a.prototype,{"delete":function(t){return o(t)?f(t)?l(t,p)&&l(t[p],this._i)&&delete t[p][this._i]:v(this)["delete"](t):!1},has:function(t){return o(t)?f(t)?l(t,p)&&l(t[p],this._i):v(this).has(t):!1}}),a},def:function(t,e,n){return f(a(e))?(l(e,p)||r(e,p,{}),e[p][t._i]=n):v(t).set(e,n),t},frozenStore:v,WEAK:p}},{28:28,31:31,32:32,39:39,5:5,61:61,70:70,83:83,9:9}],16:[function(t,e,n){"use strict";var r=t(30),i=t(23),a=t(62),o=t(61),s=t(28),u=t(70),c=t(39),l=t(25),p=t(44),f=t(67);e.exports=function(t,e,n,h,d,m){var v=r[t],g=v,y=d?"set":"add",b=g&&g.prototype,w={},x=function(t){var e=b[t];a(b,t,"delete"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"has"==t?function(t){return m&&!c(t)?!1:e.call(this,0===t?0:t)}:"get"==t?function(t){return m&&!c(t)?void 0:e.call(this,0===t?0:t)}:"add"==t?function(t){return e.call(this,0===t?0:t),this}:function(t,n){return e.call(this,0===t?0:t,n),this})};if("function"==typeof g&&(m||b.forEach&&!l(function(){(new g).entries().next()}))){var _,k=new g,E=k[y](m?{}:-0,1)!=k,S=l(function(){k.has(1)}),O=p(function(t){new g(t)});O||(g=e(function(e,n){u(e,g,t);var r=new v;return void 0!=n&&s(n,d,r[y],r),r}),g.prototype=b,b.constructor=g),m||k.forEach(function(t,e){_=1/e===-(1/0)}),(S||_)&&(x("delete"),x("has"),d&&x("get")),(_||E)&&x(y),m&&b.clear&&delete b.clear}else g=h.getConstructor(e,t,d,y),o(g.prototype,n);return f(g,t),w[t]=g,i(i.G+i.W+i.F*(g!=v),w),m||h.setStrong(g,t,d),g}},{23:23,25:25,28:28,30:30,39:39,44:44,61:61,62:62,67:67,70:70}],17:[function(t,e,n){var r=e.exports={version:"1.2.6"};"number"==typeof __e&&(__e=r)},{}],18:[function(t,e,n){var r=t(3);e.exports=function(t,e,n){if(r(t),void 0===e)return t;switch(n){case 1:return function(n){return t.call(e,n)};case 2:return function(n,r){return t.call(e,n,r)};case 3:return function(n,r,i){return t.call(e,n,r,i)}}return function(){return t.apply(e,arguments)}}},{3:3}],19:[function(t,e,n){e.exports=function(t){if(void 0==t)throw TypeError("Can't call method on "+t);return t}},{}],20:[function(t,e,n){e.exports=!t(25)(function(){return 7!=Object.defineProperty({},"a",{get:function(){return 7}}).a})},{25:25}],21:[function(t,e,n){var r=t(39),i=t(30).document,a=r(i)&&r(i.createElement);e.exports=function(t){return a?i.createElement(t):{}}},{30:30,39:39}],22:[function(t,e,n){var r=t(47);e.exports=function(t){var e=r.getKeys(t),n=r.getSymbols;if(n)for(var i,a=n(t),o=r.isEnum,s=0;a.length>s;)o.call(t,i=a[s++])&&e.push(i);return e}},{47:47}],23:[function(t,e,n){var r=t(30),i=t(17),a=t(32),o=t(62),s=t(18),u="prototype",c=function(t,e,n){var l,p,f,h,d=t&c.F,m=t&c.G,v=t&c.S,g=t&c.P,y=t&c.B,b=m?r:v?r[e]||(r[e]={}):(r[e]||{})[u],w=m?i:i[e]||(i[e]={}),x=w[u]||(w[u]={});m&&(n=e);for(l in n)p=!d&&b&&l in b,f=(p?b:n)[l],h=y&&p?s(f,r):g&&"function"==typeof f?s(Function.call,f):f,b&&!p&&o(b,l,f),w[l]!=f&&a(w,l,h),g&&x[l]!=f&&(x[l]=f)};r.core=i,c.F=1,c.G=2,c.S=4,c.P=8,c.B=16,c.W=32,e.exports=c},{17:17,18:18,30:30,32:32,62:62}],24:[function(t,e,n){var r=t(84)("match");e.exports=function(t){var e=/./;try{"/./"[t](e)}catch(n){try{return e[r]=!1,!"/./"[t](e)}catch(i){}}return!0}},{84:84}],25:[function(t,e,n){e.exports=function(t){try{return!!t()}catch(e){return!0}}},{}],26:[function(t,e,n){"use strict";var r=t(32),i=t(62),a=t(25),o=t(19),s=t(84);e.exports=function(t,e,n){var u=s(t),c=""[t];a(function(){var e={};return e[u]=function(){return 7},7!=""[t](e)})&&(i(String.prototype,t,n(o,u,c)),r(RegExp.prototype,u,2==e?function(t,e){return c.call(t,this,e)}:function(t){return c.call(t,this)}))}},{19:19,25:25,32:32,62:62,84:84}],27:[function(t,e,n){"use strict";var r=t(5);e.exports=function(){var t=r(this),e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),t.unicode&&(e+="u"),t.sticky&&(e+="y"),e}},{5:5}],28:[function(t,e,n){var r=t(18),i=t(41),a=t(36),o=t(5),s=t(80),u=t(85);e.exports=function(t,e,n,c){var l,p,f,h=u(t),d=r(n,c,e?2:1),m=0;if("function"!=typeof h)throw TypeError(t+" is not iterable!");if(a(h))for(l=s(t.length);l>m;m++)e?d(o(p=t[m])[0],p[1]):d(t[m]);else for(f=h.call(t);!(p=f.next()).done;)i(f,d,p.value,e)}},{18:18,36:36,41:41,5:5,80:80,85:85}],29:[function(t,e,n){var r=t(79),i=t(47).getNames,a={}.toString,o="object"==typeof window&&Object.getOwnPropertyNames?Object.getOwnPropertyNames(window):[],s=function(t){try{return i(t)}catch(e){return o.slice()}};e.exports.get=function(t){return o&&"[object Window]"==a.call(t)?s(t):i(r(t))}},{47:47,79:79}],30:[function(t,e,n){var r=e.exports="undefined"!=typeof window&&window.Math==Math?window:"undefined"!=typeof self&&self.Math==Math?self:Function("return this")();"number"==typeof __g&&(__g=r)},{}],31:[function(t,e,n){var r={}.hasOwnProperty;e.exports=function(t,e){return r.call(t,e)}},{}],32:[function(t,e,n){var r=t(47),i=t(60);e.exports=t(20)?function(t,e,n){return r.setDesc(t,e,i(1,n))}:function(t,e,n){return t[e]=n,t}},{20:20,47:47,60:60}],33:[function(t,e,n){e.exports=t(30).document&&document.documentElement},{30:30}],34:[function(t,e,n){e.exports=function(t,e,n){var r=void 0===n;switch(e.length){case 0:return r?t():t.call(n);case 1:return r?t(e[0]):t.call(n,e[0]);case 2:return r?t(e[0],e[1]):t.call(n,e[0],e[1]);case 3:return r?t(e[0],e[1],e[2]):t.call(n,e[0],e[1],e[2]);case 4:return r?t(e[0],e[1],e[2],e[3]):t.call(n,e[0],e[1],e[2],e[3])}return t.apply(n,e)}},{}],35:[function(t,e,n){var r=t(12);e.exports=Object("z").propertyIsEnumerable(0)?Object:function(t){return"String"==r(t)?t.split(""):Object(t)}},{12:12}],36:[function(t,e,n){var r=t(46),i=t(84)("iterator"),a=Array.prototype;e.exports=function(t){return void 0!==t&&(r.Array===t||a[i]===t)}},{46:46,84:84}],37:[function(t,e,n){var r=t(12);e.exports=Array.isArray||function(t){return"Array"==r(t)}},{12:12}],38:[function(t,e,n){var r=t(39),i=Math.floor;e.exports=function(t){return!r(t)&&isFinite(t)&&i(t)===t}},{39:39}],39:[function(t,e,n){e.exports=function(t){return"object"==typeof t?null!==t:"function"==typeof t}},{}],40:[function(t,e,n){var r=t(39),i=t(12),a=t(84)("match");e.exports=function(t){var e;return r(t)&&(void 0!==(e=t[a])?!!e:"RegExp"==i(t))}},{12:12,39:39,84:84}],41:[function(t,e,n){var r=t(5);e.exports=function(t,e,n,i){try{return i?e(r(n)[0],n[1]):e(n)}catch(a){var o=t["return"];throw void 0!==o&&r(o.call(t)),a}}},{5:5}],42:[function(t,e,n){"use strict";var r=t(47),i=t(60),a=t(67),o={};t(32)(o,t(84)("iterator"),function(){return this}),e.exports=function(t,e,n){t.prototype=r.create(o,{next:i(1,n)}),a(t,e+" Iterator")}},{32:32,47:47,60:60,67:67,84:84}],43:[function(t,e,n){"use strict";var r=t(49),i=t(23),a=t(62),o=t(32),s=t(31),u=t(46),c=t(42),l=t(67),p=t(47).getProto,f=t(84)("iterator"),h=!([].keys&&"next"in[].keys()),d="@@iterator",m="keys",v="values",g=function(){return this};e.exports=function(t,e,n,y,b,w,x){c(n,e,y);var _,k,E=function(t){if(!h&&t in P)return P[t];switch(t){case m:return function(){return new n(this,t)};case v:return function(){return new n(this,t)}}return function(){return new n(this,t)}},S=e+" Iterator",O=b==v,A=!1,P=t.prototype,C=P[f]||P[d]||b&&P[b],T=C||E(b);if(C){var j=p(T.call(new t));l(j,S,!0),!r&&s(P,d)&&o(j,f,g),O&&C.name!==v&&(A=!0,T=function(){return C.call(this)})}if(r&&!x||!h&&!A&&P[f]||o(P,f,T),u[e]=T,u[S]=g,b)if(_={values:O?T:E(v),keys:w?T:E(m),entries:O?E("entries"):T},x)for(k in _)k in P||a(P,k,_[k]);else i(i.P+i.F*(h||A),e,_);return _}},{23:23,31:31,32:32,42:42,46:46,47:47,49:49,62:62,67:67,84:84}],44:[function(t,e,n){var r=t(84)("iterator"),i=!1;try{var a=[7][r]();a["return"]=function(){i=!0},Array.from(a,function(){throw 2})}catch(o){}e.exports=function(t,e){if(!e&&!i)return!1;var n=!1;try{var a=[7],o=a[r]();o.next=function(){n=!0},a[r]=function(){return o},t(a)}catch(s){}return n}},{84:84}],45:[function(t,e,n){e.exports=function(t,e){return{value:e,done:!!t}}},{}],46:[function(t,e,n){e.exports={}},{}],47:[function(t,e,n){var r=Object;e.exports={create:r.create,getProto:r.getPrototypeOf,isEnum:{}.propertyIsEnumerable,getDesc:r.getOwnPropertyDescriptor,setDesc:r.defineProperty,setDescs:r.defineProperties,getKeys:r.keys,getNames:r.getOwnPropertyNames,getSymbols:r.getOwnPropertySymbols,each:[].forEach}},{}],48:[function(t,e,n){var r=t(47),i=t(79);e.exports=function(t,e){for(var n,a=i(t),o=r.getKeys(a),s=o.length,u=0;s>u;)if(a[n=o[u++]]===e)return n}},{47:47,79:79}],49:[function(t,e,n){e.exports=!1},{}],50:[function(t,e,n){e.exports=Math.expm1||function(t){return 0==(t=+t)?t:t>-1e-6&&1e-6>t?t+t*t/2:Math.exp(t)-1}},{}],51:[function(t,e,n){e.exports=Math.log1p||function(t){return(t=+t)>-1e-8&&1e-8>t?t-t*t/2:Math.log(1+t)}},{}],52:[function(t,e,n){e.exports=Math.sign||function(t){return 0==(t=+t)||t!=t?t:0>t?-1:1}},{}],53:[function(t,e,n){var r,i,a,o=t(30),s=t(76).set,u=o.MutationObserver||o.WebKitMutationObserver,c=o.process,l=o.Promise,p="process"==t(12)(c),f=function(){var t,e,n;for(p&&(t=c.domain)&&(c.domain=null,t.exit());r;)e=r.domain,n=r.fn,e&&e.enter(),n(),e&&e.exit(),r=r.next;i=void 0,t&&t.enter()};if(p)a=function(){c.nextTick(f)};else if(u){var h=1,d=document.createTextNode("");new u(f).observe(d,{characterData:!0}),a=function(){d.data=h=-h}}else a=l&&l.resolve?function(){l.resolve().then(f)}:function(){s.call(o,f)};e.exports=function(t){var e={fn:t,next:void 0,domain:p&&c.domain};i&&(i.next=e),r||(r=e,a()),i=e}},{12:12,30:30,76:76}],54:[function(t,e,n){var r=t(47),i=t(81),a=t(35);e.exports=t(25)(function(){var t=Object.assign,e={},n={},r=Symbol(),i="abcdefghijklmnopqrst";return e[r]=7,i.split("").forEach(function(t){n[t]=t}),7!=t({},e)[r]||Object.keys(t({},n)).join("")!=i})?function(t,e){for(var n=i(t),o=arguments,s=o.length,u=1,c=r.getKeys,l=r.getSymbols,p=r.isEnum;s>u;)for(var f,h=a(o[u++]),d=l?c(h).concat(l(h)):c(h),m=d.length,v=0;m>v;)p.call(h,f=d[v++])&&(n[f]=h[f]);return n}:Object.assign},{25:25,35:35,47:47,81:81}],55:[function(t,e,n){var r=t(23),i=t(17),a=t(25);e.exports=function(t,e){var n=(i.Object||{})[t]||Object[t],o={};o[t]=e(n),r(r.S+r.F*a(function(){n(1)}),"Object",o)}},{17:17,23:23,25:25}],56:[function(t,e,n){var r=t(47),i=t(79),a=r.isEnum;e.exports=function(t){return function(e){for(var n,o=i(e),s=r.getKeys(o),u=s.length,c=0,l=[];u>c;)a.call(o,n=s[c++])&&l.push(t?[n,o[n]]:o[n]);return l}}},{47:47,79:79}],57:[function(t,e,n){var r=t(47),i=t(5),a=t(30).Reflect;e.exports=a&&a.ownKeys||function(t){var e=r.getNames(i(t)),n=r.getSymbols;return n?e.concat(n(t)):e}},{30:30,47:47,5:5}],58:[function(t,e,n){"use strict";var r=t(59),i=t(34),a=t(3);e.exports=function(){for(var t=a(this),e=arguments.length,n=Array(e),o=0,s=r._,u=!1;e>o;)(n[o]=arguments[o++])===s&&(u=!0);return function(){var r,a=this,o=arguments,c=o.length,l=0,p=0;if(!u&&!c)return i(t,n,a);if(r=n.slice(),u)for(;e>l;l++)r[l]===s&&(r[l]=o[p++]);for(;c>p;)r.push(o[p++]);return i(t,r,a)}}},{3:3,34:34,59:59}],59:[function(t,e,n){e.exports=t(30)},{30:30}],60:[function(t,e,n){e.exports=function(t,e){return{enumerable:!(1&t),configurable:!(2&t),writable:!(4&t),value:e}}},{}],61:[function(t,e,n){var r=t(62);e.exports=function(t,e){for(var n in e)r(t,n,e[n]);return t}},{62:62}],62:[function(t,e,n){var r=t(30),i=t(32),a=t(83)("src"),o="toString",s=Function[o],u=(""+s).split(o);t(17).inspectSource=function(t){return s.call(t)},(e.exports=function(t,e,n,o){"function"==typeof n&&(n.hasOwnProperty(a)||i(n,a,t[e]?""+t[e]:u.join(e+"")),n.hasOwnProperty("name")||i(n,"name",e)),t===r?t[e]=n:(o||delete t[e],i(t,e,n))})(Function.prototype,o,function(){return"function"==typeof this&&this[a]||s.call(this)})},{17:17,30:30,32:32,83:83}],63:[function(t,e,n){e.exports=function(t,e){var n=e===Object(e)?function(t){return e[t]}:e;return function(e){return(e+"").replace(t,n)}}},{}],64:[function(t,e,n){e.exports=Object.is||function(t,e){return t===e?0!==t||1/t===1/e:t!=t&&e!=e}},{}],65:[function(t,e,n){var r=t(47).getDesc,i=t(39),a=t(5),o=function(t,e){if(a(t),!i(e)&&null!==e)throw TypeError(e+": can't set as prototype!")};e.exports={set:Object.setPrototypeOf||("__proto__"in{}?function(e,n,i){try{i=t(18)(Function.call,r(Object.prototype,"__proto__").set,2),i(e,[]),n=!(e instanceof Array)}catch(a){n=!0}return function(t,e){return o(t,e),n?t.__proto__=e:i(t,e),t}}({},!1):void 0),check:o}},{18:18,39:39,47:47,5:5}],66:[function(t,e,n){"use strict";var r=t(30),i=t(47),a=t(20),o=t(84)("species");e.exports=function(t){var e=r[t];a&&e&&!e[o]&&i.setDesc(e,o,{configurable:!0,get:function(){return this}})}},{20:20,30:30,47:47,84:84}],67:[function(t,e,n){var r=t(47).setDesc,i=t(31),a=t(84)("toStringTag");e.exports=function(t,e,n){t&&!i(t=n?t:t.prototype,a)&&r(t,a,{configurable:!0,value:e})}},{31:31,47:47,84:84}],68:[function(t,e,n){var r=t(30),i="__core-js_shared__",a=r[i]||(r[i]={});e.exports=function(t){return a[t]||(a[t]={})}},{30:30}],69:[function(t,e,n){var r=t(5),i=t(3),a=t(84)("species");e.exports=function(t,e){var n,o=r(t).constructor;return void 0===o||void 0==(n=r(o)[a])?e:i(n)}},{3:3,5:5,84:84}],70:[function(t,e,n){e.exports=function(t,e,n){if(!(t instanceof e))throw TypeError(n+": use the 'new' operator!");return t}},{}],71:[function(t,e,n){var r=t(78),i=t(19);e.exports=function(t){return function(e,n){var a,o,s=i(e)+"",u=r(n),c=s.length;return 0>u||u>=c?t?"":void 0:(a=s.charCodeAt(u),55296>a||a>56319||u+1===c||(o=s.charCodeAt(u+1))<56320||o>57343?t?s.charAt(u):a:t?s.slice(u,u+2):(a-55296<<10)+(o-56320)+65536)}}},{19:19,78:78}],72:[function(t,e,n){var r=t(40),i=t(19);e.exports=function(t,e,n){if(r(e))throw TypeError("String#"+n+" doesn't accept regex!");return i(t)+""}},{19:19,40:40}],73:[function(t,e,n){var r=t(80),i=t(74),a=t(19);e.exports=function(t,e,n,o){var s=a(t)+"",u=s.length,c=void 0===n?" ":n+"",l=r(e);if(u>=l)return s;""==c&&(c=" ");var p=l-u,f=i.call(c,Math.ceil(p/c.length));return f.length>p&&(f=f.slice(0,p)),o?f+s:s+f}},{19:19,74:74,80:80}],74:[function(t,e,n){"use strict";var r=t(78),i=t(19);e.exports=function(t){var e=i(this)+"",n="",a=r(t);if(0>a||a==1/0)throw RangeError("Count can't be negative");for(;a>0;(a>>>=1)&&(e+=e))1&a&&(n+=e);return n}},{19:19,78:78}],75:[function(t,e,n){var r=t(23),i=t(19),a=t(25),o=" \n\x0B\f\r   ᠎              \u2028\u2029\ufeff",s="["+o+"]",u="​…",c=RegExp("^"+s+s+"*"),l=RegExp(s+s+"*$"),p=function(t,e){var n={};n[t]=e(f),r(r.P+r.F*a(function(){return!!o[t]()||u[t]()!=u}),"String",n)},f=p.trim=function(t,e){return t=i(t)+"",1&e&&(t=t.replace(c,"")),2&e&&(t=t.replace(l,"")),t};e.exports=p},{19:19,23:23,25:25}],76:[function(t,e,n){var r,i,a,o=t(18),s=t(34),u=t(33),c=t(21),l=t(30),p=l.process,f=l.setImmediate,h=l.clearImmediate,d=l.MessageChannel,m=0,v={},g="onreadystatechange",y=function(){var t=+this;if(v.hasOwnProperty(t)){var e=v[t];delete v[t],e()}},b=function(t){y.call(t.data)};f&&h||(f=function(t){for(var e=[],n=1;arguments.length>n;)e.push(arguments[n++]);return v[++m]=function(){s("function"==typeof t?t:Function(t),e)},r(m),m},h=function(t){delete v[t]},"process"==t(12)(p)?r=function(t){p.nextTick(o(y,t,1))}:d?(i=new d,a=i.port2,i.port1.onmessage=b,r=o(a.postMessage,a,1)):l.addEventListener&&"function"==typeof postMessage&&!l.importScripts?(r=function(t){l.postMessage(t+"","*")},l.addEventListener("message",b,!1)):r=g in c("script")?function(t){u.appendChild(c("script"))[g]=function(){u.removeChild(this),y.call(t)}}:function(t){setTimeout(o(y,t,1),0)}),e.exports={set:f,clear:h}},{12:12,18:18,21:21,30:30,33:33,34:34}],77:[function(t,e,n){var r=t(78),i=Math.max,a=Math.min;e.exports=function(t,e){return t=r(t),0>t?i(t+e,0):a(t,e)}},{78:78}],78:[function(t,e,n){var r=Math.ceil,i=Math.floor;e.exports=function(t){return isNaN(t=+t)?0:(t>0?i:r)(t)}},{}],79:[function(t,e,n){var r=t(35),i=t(19);e.exports=function(t){return r(i(t))}},{19:19,35:35}],80:[function(t,e,n){var r=t(78),i=Math.min;e.exports=function(t){return t>0?i(r(t),9007199254740991):0}},{78:78}],81:[function(t,e,n){var r=t(19);e.exports=function(t){return Object(r(t))}},{19:19}],82:[function(t,e,n){var r=t(39);e.exports=function(t,e){if(!r(t))return t;var n,i;if(e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;if("function"==typeof(n=t.valueOf)&&!r(i=n.call(t)))return i;if(!e&&"function"==typeof(n=t.toString)&&!r(i=n.call(t)))return i;throw TypeError("Can't convert object to primitive value")}},{39:39}],83:[function(t,e,n){var r=0,i=Math.random();e.exports=function(t){return"Symbol(".concat(void 0===t?"":t,")_",(++r+i).toString(36))}},{}],84:[function(t,e,n){var r=t(68)("wks"),i=t(83),a=t(30).Symbol;e.exports=function(t){return r[t]||(r[t]=a&&a[t]||(a||i)("Symbol."+t))}},{30:30,68:68,83:83}],85:[function(t,e,n){var r=t(11),i=t(84)("iterator"),a=t(46);e.exports=t(17).getIteratorMethod=function(t){return void 0!=t?t[i]||t["@@iterator"]||a[r(t)]:void 0}},{11:11,17:17,46:46,84:84}],86:[function(t,e,n){"use strict";var r,i=t(47),a=t(23),o=t(20),s=t(60),u=t(33),c=t(21),l=t(31),p=t(12),f=t(34),h=t(25),d=t(5),m=t(3),v=t(39),g=t(81),y=t(79),b=t(78),w=t(77),x=t(80),_=t(35),k=t(83)("__proto__"),E=t(9),S=t(8)(!1),O=Object.prototype,A=Array.prototype,P=A.slice,C=A.join,T=i.setDesc,j=i.getDesc,M=i.setDescs,F={};o||(r=!h(function(){return 7!=T(c("div"),"a",{get:function(){return 7}}).a}),i.setDesc=function(t,e,n){if(r)try{return T(t,e,n)}catch(i){}if("get"in n||"set"in n)throw TypeError("Accessors not supported!");return"value"in n&&(d(t)[e]=n.value),t},i.getDesc=function(t,e){if(r)try{return j(t,e)}catch(n){}return l(t,e)?s(!O.propertyIsEnumerable.call(t,e),t[e]):void 0},i.setDescs=M=function(t,e){d(t);for(var n,r=i.getKeys(e),a=r.length,o=0;a>o;)i.setDesc(t,n=r[o++],e[n]);return t}),a(a.S+a.F*!o,"Object",{getOwnPropertyDescriptor:i.getDesc,defineProperty:i.setDesc,defineProperties:M});var N="constructor,hasOwnProperty,isPrototypeOf,propertyIsEnumerable,toLocaleString,toString,valueOf".split(","),L=N.concat("length","prototype"),R=N.length,D=function(){var t,e=c("iframe"),n=R,r=">";for(e.style.display="none",u.appendChild(e),e.src="javascript:",t=e.contentWindow.document,t.open(),t.write("