#define RCS_MODE_CALIBRATED 0
#define RCS_MODE_UNCALIBRATED 1
/obj/item/rcs
name = "rapid-crate-sender (RCS)"
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
toolspeed = 1
usesound = 'sound/machines/click.ogg'
var/obj/item/stock_parts/cell/high/rcell = null
var/obj/machinery/pad = null
var/mode = RCS_MODE_CALIBRATED
var/rand_x = 0
var/rand_y = 0
var/emagged = FALSE
var/teleporting = FALSE
var/chargecost = 1000
/obj/item/rcs/get_cell()
return rcell
/obj/item/rcs/New()
..()
rcell = new(src)
/obj/item/rcs/examine(mob/user)
. = ..()
. += "There are [round(rcell.charge/chargecost)] charge\s left."
/obj/item/rcs/Destroy()
QDEL_NULL(rcell)
return ..()
/obj/item/rcs/attack_self(mob/user)
if(!emagged)
return
if(mode == RCS_MODE_CALIBRATED)
mode = RCS_MODE_UNCALIBRATED
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
to_chat(user, "The telepad locator has become uncalibrated.")
else
mode = RCS_MODE_CALIBRATED
playsound(get_turf(src), 'sound/effects/pop.ogg', 50, 0)
to_chat(user, "You calibrate the telepad locator.")
/obj/item/rcs/emag_act(user as mob)
if(!emagged)
emagged = TRUE
do_sparks(5, 1, src)
to_chat(user, "You emag the RCS. Activate it to toggle between modes.")
return
/obj/item/rcs/proc/try_send_container(mob/user, obj/structure/closet/C)
if(teleporting)
to_chat(user, "You're already using [src]!")
return
if(user in C.contents) //to prevent self-teleporting.
return
if(!rcell || (rcell.charge < chargecost))
to_chat(user, "Out of charges.")
return
if(!is_level_reachable(C.z))
to_chat(user, "The rapid-crate-sender can't locate any telepads!")
return
if(mode == RCS_MODE_CALIBRATED)
var/list/L = list()
var/list/areaindex = list()
for(var/obj/machinery/telepad_cargo/R in GLOB.machines)
if(R.stage)
continue
var/turf/T = get_turf(R)
var/tmpname = T.loc.name
if(areaindex[tmpname])
tmpname = "[tmpname] ([++areaindex[tmpname]])"
else
areaindex[tmpname] = 1
L[tmpname] = R
var/desc = input("Please select a telepad.", "RCS") in L
pad = L[desc]
try_teleport(user, C, pad)
else
rand_x = rand(50,200)
rand_y = rand(50,200)
var/L = locate(rand_x, rand_y, 6)
try_teleport(user, C, L)
/obj/item/rcs/proc/try_teleport(mob/user, obj/structure/closet/C, target)
if(!C.Adjacent(user))
to_chat(user, "Unable to teleport, too far from [C].")
return
var/turf/ownTurf = get_turf(src)
playsound(ownTurf, usesound, 50, 1)
to_chat(user, "Teleporting [C]...")
teleporting = TRUE
if(!do_after(user, 50 * toolspeed, target = C))
teleporting = FALSE
return
teleporting = FALSE
if(user in C.contents)
to_chat(user, "Error: User located in container--aborting for safety.")
playsound(ownTurf, 'sound/machines/buzz-sigh.ogg', 50, 1)
return
if(!(rcell && rcell.use(chargecost)))
to_chat(user, "Unable to teleport, insufficient charge.")
return
do_sparks(5, 1, C)
do_teleport(C, target)
to_chat(user, "Teleport successful. [round(rcell.charge/chargecost)] charge\s left.")
#undef RCS_MODE_CALIBRATED
#undef RCS_MODE_UNCALIBRATED