diff --git a/_maps/map_files/cyberiad/cyberiad.dmm b/_maps/map_files/cyberiad/cyberiad.dmm index 02af4a428b0..fb033e74eaa 100644 --- a/_maps/map_files/cyberiad/cyberiad.dmm +++ b/_maps/map_files/cyberiad/cyberiad.dmm @@ -3517,8 +3517,8 @@ "bpH" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor,/area/quartermaster/office) "bpI" = (/turf/simulated/floor,/area/quartermaster/office) "bpJ" = (/obj/item/weapon/storage/box,/obj/structure/table,/obj/item/weapon/storage/box,/obj/item/weapon/storage/box,/obj/item/device/radio/intercom{broadcasting = 0; listening = 1; name = "station intercom (General)"; pixel_y = 25},/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office) -"bpK" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_y = 30},/obj/item/stack/tape_roll,/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office) -"bpL" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/quartermaster/office) +"bpK" = (/obj/structure/table,/obj/machinery/requests_console{department = "Cargo Bay"; name = "Cargo Requests Console"; departmentType = 2; pixel_y = 30},/obj/item/stack/tape_roll,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/turf/simulated/floor{icon_state = "arrival"; dir = 1},/area/quartermaster/office) +"bpL" = (/obj/structure/table,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/stack/packageWrap,/obj/item/weapon/rcs,/turf/simulated/floor{icon_state = "arrival"; dir = 5},/area/quartermaster/office) "bpM" = (/obj/machinery/status_display{density = 0; layer = 4; pixel_x = -32; pixel_y = 0},/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/west) "bpN" = (/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/hallway/primary/central/west) "bpO" = (/obj/effect/spawner/window/reinforced,/obj/machinery/door/poddoor/shutters{density = 0; dir = 8; icon_state = "shutter0"; id_tag = "heads_meeting"; name = "Privacy Shutters"; opacity = 0},/turf/simulated/floor/plating,/area/bridge/meeting_room) @@ -3604,7 +3604,7 @@ "brq" = (/obj/machinery/light/small{dir = 4},/turf/simulated/floor{icon_state = "floorgrime"},/area/quartermaster/storage) "brr" = (/obj/machinery/conveyor_switch/oneway{id = "packageSort1"},/turf/simulated/floor{dir = 8; icon_state = "warning"},/area/quartermaster/office) "brs" = (/obj/machinery/hologram/holopad,/turf/simulated/floor,/area/quartermaster/office) -"brt" = (/obj/structure/table,/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/item/device/destTagger{pixel_x = 4; pixel_y = 3},/obj/machinery/light{dir = 4},/obj/item/weapon/rcs,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office) +"brt" = (/obj/structure/table,/obj/machinery/light{dir = 4},/obj/machinery/recharger,/turf/simulated/floor{icon_state = "arrival"; dir = 4},/area/quartermaster/office) "bru" = (/obj/machinery/atm{pixel_x = -32},/turf/simulated/floor{dir = 8; icon_state = "browncorner"},/area/hallway/primary/central/west) "brv" = (/obj/item/weapon/hand_labeler,/obj/item/device/assembly/timer,/obj/structure/table,/turf/simulated/floor/wood,/area/bridge/meeting_room) "brw" = (/obj/machinery/atmospherics/pipe/simple/hidden/supply,/turf/simulated/floor/wood,/area/bridge/meeting_room) @@ -4892,7 +4892,7 @@ "bQe" = (/obj/machinery/atmospherics/unary/portables_connector{dir = 1},/obj/machinery/portable_atmospherics/canister/air,/obj/item/device/radio/intercom{name = "station intercom (General)"; pixel_y = -28},/turf/simulated/floor{icon_state = "white"},/area/medical/research{name = "Research Division"}) "bQf" = (/obj/machinery/computer/shuttle_control/research{req_access = null; req_access_txt = "65"},/turf/simulated/floor{dir = 4; icon_state = "whitebluecorner"},/area/medical/research{name = "Research Division"}) "bQg" = (/obj/structure/lattice,/obj/structure/sign/securearea{desc = "A warning sign which reads 'KEEP CLEAR OF DOCKING AREA'."; name = "KEEP CLEAR: DOCKING AREA"; pixel_y = 32},/turf/space,/area/space) -"bQh" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/turf/simulated/floor,/area/quartermaster/miningdock) +"bQh" = (/obj/structure/table,/obj/item/weapon/paper_bin{pixel_x = 1; pixel_y = 9},/obj/item/weapon/rcs,/turf/simulated/floor,/area/quartermaster/miningdock) "bQi" = (/obj/machinery/power/apc{dir = 1; name = "north bump"; pixel_x = 0; pixel_y = 24},/obj/structure/cable{d2 = 4; icon_state = "0-4"},/turf/simulated/floor,/area/quartermaster/miningdock) "bQj" = (/obj/structure/disposalpipe/segment,/obj/structure/cable{d1 = 1; d2 = 2; icon_state = "1-2"},/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"},/obj/machinery/atmospherics/pipe/simple/hidden/supply,/obj/machinery/atmospherics/pipe/simple/hidden/scrubbers,/turf/simulated/floor,/area/quartermaster/miningdock) "bQk" = (/obj/structure/rack{dir = 1},/obj/item/weapon/storage/toolbox/mechanical{pixel_x = -2; pixel_y = -1},/obj/machinery/light{dir = 1},/obj/machinery/light_switch{pixel_y = 24},/turf/simulated/floor,/area/quartermaster/miningdock) diff --git a/_maps/map_files/cyberiad/z5.dmm b/_maps/map_files/cyberiad/z5.dmm index 303b63ae8f1..958a023b33d 100644 --- a/_maps/map_files/cyberiad/z5.dmm +++ b/_maps/map_files/cyberiad/z5.dmm @@ -1496,7 +1496,7 @@ "CO" = (/obj/machinery/atmospherics/pipe/simple/hidden,/obj/structure/disposalpipe/segment{dir = 8; icon_state = "pipe-c"},/obj/structure/cable{d1 = 4; d2 = 8; icon_state = "4-8"},/turf/simulated/floor,/area/mine/production) "CP" = (/obj/structure/cable{d1 = 1; d2 = 8; icon_state = "1-8"; tag = ""},/turf/simulated/floor,/area/mine/production) "CQ" = (/obj/machinery/light/small{dir = 4; pixel_y = 8},/turf/simulated/floor,/area/mine/production) -"CR" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/item/weapon/rcs,/obj/structure/disposalpipe/segment,/turf/simulated/floor,/area/mine/production) +"CR" = (/obj/structure/window/reinforced,/obj/structure/table/reinforced,/obj/structure/disposalpipe/segment,/obj/machinery/recharger,/turf/simulated/floor,/area/mine/production) "CS" = (/obj/structure/window/reinforced,/obj/structure/closet/crate,/turf/simulated/floor,/area/mine/production) "CT" = (/obj/machinery/atmospherics/pipe/simple/hidden{dir = 5; icon_state = "intact"},/obj/structure/window/reinforced,/obj/structure/closet/crate{icon_state = "crateopen"; opened = 1},/turf/simulated/floor,/area/mine/production) "CU" = (/obj/machinery/atmospherics/unary/vent_pump{dir = 8; on = 1},/obj/structure/window/reinforced,/obj/structure/closet/crate,/turf/simulated/floor,/area/mine/production) diff --git a/code/game/machinery/recharger.dm b/code/game/machinery/recharger.dm index a470b7ec6c7..d625c4211d7 100644 --- a/code/game/machinery/recharger.dm +++ b/code/game/machinery/recharger.dm @@ -16,7 +16,7 @@ /obj/machinery/recharger/attackby(obj/item/weapon/G as obj, mob/user as mob, params) if(istype(user,/mob/living/silicon)) return - if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop)) + if(istype(G, /obj/item/weapon/gun/energy) || istype(G, /obj/item/weapon/melee/baton) || istype(G,/obj/item/device/laptop) || istype(G, /obj/item/weapon/rcs)) if(charging) return @@ -95,6 +95,14 @@ use_power(2500) else icon_state = icon_state_charged + if(istype(charging, /obj/item/weapon/rcs)) + var/obj/item/weapon/rcs/R = charging + if(R.rcell && R.rcell.charge < R.rcell.maxcharge) + R.rcell.charge += 1750 + icon_state = icon_state_charging + use_power(2000) + else + icon_state = icon_state_charged return diff --git a/code/game/objects/items/devices/radio/beacon.dm b/code/game/objects/items/devices/radio/beacon.dm index 6fd44abe517..36de16c95fa 100644 --- a/code/game/objects/items/devices/radio/beacon.dm +++ b/code/game/objects/items/devices/radio/beacon.dm @@ -7,12 +7,12 @@ origin_tech = "bluespace=1" var/emagged = 0 var/syndicate = 0 - + /obj/item/device/radio/beacon/New() ..() code = "[code] ([beacons.len + 1])" beacons += src - + /obj/item/device/radio/beacon/Destroy() beacons -= src return ..() @@ -34,7 +34,7 @@ set name = "Alter Beacon's Signal" set category = "Object" set src in usr - + if (usr.stat || usr.restrained()) return @@ -75,21 +75,4 @@ new /obj/machinery/syndicatebomb( user.loc ) playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) qdel(src) - return - - -/obj/item/device/telepad_beacon - name = "Telepad Beacon" - desc = "Used to warp in a cargo telepad." - icon = 'icons/obj/radio.dmi' - icon_state = "beacon" - item_state = "signaler" - origin_tech = "bluespace=3" - -/obj/item/device/telepad_beacon/attack_self(mob/user as mob) - if(user) - user << "\blue Locked In" - new /obj/machinery/telepad_cargo(user.loc) - playsound(src, 'sound/effects/pop.ogg', 100, 1, 1) - qdel(src) - return + return \ No newline at end of file diff --git a/code/game/objects/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 78db899c5d5..b15fa393e9b 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -177,8 +177,10 @@ /obj/structure/closet/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/rcs) && !src.opened) + if(user in contents) //to prevent self-teleporting. + return var/obj/item/weapon/rcs/E = W - if(E.rcharges != 0) + if(E.rcell && (E.rcell.charge >= E.chargecost)) if(!(src.z in config.contact_levels)) user << "The rapid-crate-sender can't locate any telepads!" return @@ -200,20 +202,16 @@ playsound(E.loc, 'sound/machines/click.ogg', 50, 1) user << "\blue Teleporting [src.name]..." E.teleporting = 1 - sleep(50) + if(!do_after(user, 50, target = src)) + E.teleporting = 0 + return E.teleporting = 0 var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcharges-- - if(E.rcharges != 1) - user << "\blue Teleport successful. [E.rcharges] charges left." - E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left." - return - else - user << "\blue Teleport successful. [E.rcharges] charge left." - E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left." + E.rcell.use(E.chargecost) + user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left." return else E.rand_x = rand(50,200) @@ -222,23 +220,19 @@ playsound(E.loc, 'sound/machines/click.ogg', 50, 1) user << "\blue Teleporting [src.name]..." E.teleporting = 1 - sleep(50) + if(!do_after(user, 50, target = src)) + E.teleporting = 0 + return E.teleporting = 0 var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcharges-- - if(E.rcharges != 1) - user << "\blue Teleport successful. [E.rcharges] charges left." - E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left." - return - else - user << "\blue Teleport successful. [E.rcharges] charge left." - E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left." - return + E.rcell.use(E.chargecost) + user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left." + return else - user << "\red Out of charges." + user << "Out of charges." return if(src.opened) diff --git a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm index 3ccc3b8594d..db95e1d7b3c 100644 --- a/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm +++ b/code/game/objects/structures/crates_lockers/closets/secure/secure_closets.dm @@ -66,6 +66,9 @@ user << "Access Denied" /obj/structure/closet/secure_closet/attackby(obj/item/weapon/W as obj, mob/user as mob, params) + if(istype(W, /obj/item/weapon/rcs)) + return ..() + if(src.opened) if(istype(W, /obj/item/weapon/grab)) if(src.large) diff --git a/code/game/objects/structures/crates_lockers/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 67284d9245c..657c4a6249f 100644 --- a/code/game/objects/structures/crates_lockers/crates.dm +++ b/code/game/objects/structures/crates_lockers/crates.dm @@ -81,7 +81,7 @@ /obj/structure/closet/crate/attackby(obj/item/weapon/W as obj, mob/user as mob, params) if(istype(W, /obj/item/weapon/rcs) && !src.opened) var/obj/item/weapon/rcs/E = W - if(E.rcharges != 0) + if(E.rcell && (E.rcell.charge >= E.chargecost)) if(!(src.z in config.player_levels)) user << "The rapid-crate-sender can't locate any telepads!" return @@ -103,20 +103,16 @@ playsound(E.loc, 'sound/machines/click.ogg', 50, 1) user << "\blue Teleporting [src.name]..." E.teleporting = 1 - sleep(50) + if(!do_after(user, 50, target = src)) + E.teleporting = 0 + return E.teleporting = 0 var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, E.pad, 0) - E.rcharges-- - if(E.rcharges != 1) - user << "\blue Teleport successful. [E.rcharges] charges left." - E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left." - return - else - user << "\blue Teleport successful. [E.rcharges] charge left." - E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left." + E.rcell.use(E.chargecost) + user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left." return else E.rand_x = rand(50,200) @@ -125,23 +121,19 @@ playsound(E.loc, 'sound/machines/click.ogg', 50, 1) user << "\blue Teleporting [src.name]..." E.teleporting = 1 - sleep(50) + if(!do_after(user, 50, target = src)) + E.teleporting = 0 + return E.teleporting = 0 var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() do_teleport(src, L) - E.rcharges-- - if(E.rcharges != 1) - user << "\blue Teleport successful. [E.rcharges] charges left." - E.desc = "Use this to send crates and closets to cargo telepads. There are [E.rcharges] charges left." - return - else - user << "\blue Teleport successful. [E.rcharges] charge left." - E.desc = "Use this to send crates and closets to cargo telepads. There is [E.rcharges] charge left." - return + E.rcell.use(E.chargecost) + user << "Teleport successful. [round(E.rcell.charge/E.chargecost)] charge\s left." + return else - user << "\red Out of charges." + user << "Out of charges." return if(opened) @@ -295,7 +287,7 @@ /obj/structure/closet/crate/secure/attackby(obj/item/weapon/W as obj, mob/user as mob, params) - if(is_type_in_list(W, list(/obj/item/stack/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters))) + if(is_type_in_list(W, list(/obj/item/stack/packageWrap, /obj/item/stack/cable_coil, /obj/item/device/radio/electropack, /obj/item/weapon/wirecutters,/obj/item/weapon/rcs))) return ..() if((istype(W, /obj/item/weapon/card/emag) || istype(W, /obj/item/weapon/melee/energy/blade))) emag_act(user) diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index e16cf68ebdf..7b497dc731b 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -110,44 +110,39 @@ ///HANDHELD TELEPAD USER/// /obj/item/weapon/rcs name = "rapid-crate-sender (RCS)" - desc = "Use this to send crates and closets to cargo telepads." + desc = "A device used to teleport crates and closets to cargo telepads." icon = 'icons/obj/telescience.dmi' icon_state = "rcs" + item_state = "rcd" flags = CONDUCT force = 10.0 throwforce = 10.0 throw_speed = 2 throw_range = 5 - var/rcharges = 10 + var/obj/item/weapon/stock_parts/cell/high/rcell = null var/obj/machinery/pad = null - var/last_charge = 30 var/mode = 0 var/rand_x = 0 var/rand_y = 0 var/emagged = 0 var/teleporting = 0 + var/chargecost = 1500 /obj/item/weapon/rcs/New() ..() - processing_objects.Add(src) + rcell = new(src) + /obj/item/weapon/rcs/examine(mob/user) ..(user) - user << "There are [rcharges] charge\s left." + user << "There are [round(rcell.charge/chargecost)] charge\s left." /obj/item/weapon/rcs/Destroy() - processing_objects.Remove(src) + if(rcell) + qdel(rcell) + rcell = null return ..() -/obj/item/weapon/rcs/process() - if(rcharges > 10) - rcharges = 10 - if(last_charge == 0) - rcharges++ - last_charge = 30 - else - last_charge-- - /obj/item/weapon/rcs/attack_self(mob/user) if(emagged) if(mode == 0) @@ -165,5 +160,5 @@ var/datum/effect/effect/system/spark_spread/s = new /datum/effect/effect/system/spark_spread s.set_up(5, 1, src) s.start() - user << " You emag the RCS. Click on it to toggle between modes." + user << " You emag the RCS. Activate it to toggle between modes." return