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/structures/crates_lockers/closets.dm b/code/game/objects/structures/crates_lockers/closets.dm index 0854fa6ed76..b15fa393e9b 100644 --- a/code/game/objects/structures/crates_lockers/closets.dm +++ b/code/game/objects/structures/crates_lockers/closets.dm @@ -180,7 +180,7 @@ 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 @@ -210,14 +210,8 @@ 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) @@ -234,17 +228,11 @@ 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/crates.dm b/code/game/objects/structures/crates_lockers/crates.dm index 0bb355570a0..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 @@ -111,14 +111,8 @@ 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) @@ -135,17 +129,11 @@ 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) diff --git a/code/modules/telesci/telepad.dm b/code/modules/telesci/telepad.dm index 17225c64caa..7b497dc731b 100644 --- a/code/modules/telesci/telepad.dm +++ b/code/modules/telesci/telepad.dm @@ -119,36 +119,30 @@ 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)