Files
Aurora.3/code/game/objects/items/devices/multitool.dm
2016-01-01 23:58:29 -05:00

72 lines
2.3 KiB
Plaintext

/**
* Multitool -- A multitool is used for hacking electronic devices.
* TO-DO -- Using it as a power measurement tool for cables etc. Nannek.
*
*/
/obj/item/device/multitool
name = "multitool"
desc = "Used for pulsing wires to test which to cut. Not recommended by doctors."
icon_state = "multitool"
flags = CONDUCT
force = 5.0
w_class = 2.0
throwforce = 5.0
throw_range = 15
throw_speed = 3
desc = "You can use this on airlocks or APCs to try to hack them without cutting wires."
matter = list(DEFAULT_WALL_MATERIAL = 50,"glass" = 20)
origin_tech = list(TECH_MAGNET = 1, TECH_ENGINEERING = 1)
var/buffer_name
var/atom/buffer_object
/obj/item/device/multitool/Destroy()
unregister_buffer(buffer_object)
return ..()
/obj/item/device/multitool/proc/get_buffer(var/typepath)
// Only allow clearing the buffer name when someone fetches the buffer.
// Means you cannot be sure the source hasn't been destroyed until the very moment it's needed.
get_buffer_name(TRUE)
if(buffer_object && (!typepath || istype(buffer_object, typepath)))
return buffer_object
/obj/item/device/multitool/proc/get_buffer_name(var/null_name_if_missing = FALSE)
if(buffer_object)
buffer_name = buffer_object.name
else if(null_name_if_missing)
buffer_name = null
return buffer_name
/obj/item/device/multitool/proc/set_buffer(var/atom/buffer)
if(!buffer || istype(buffer))
buffer_name = buffer ? buffer.name : null
if(buffer != buffer_object)
unregister_buffer(buffer_object)
buffer_object = buffer
if(buffer_object)
buffer_object.destruction.register(src, /obj/item/device/multitool/proc/unregister_buffer)
/obj/item/device/multitool/proc/unregister_buffer(var/atom/buffer_to_unregister)
// Only remove the buffered object, don't reset the name
// This means one cannot know if the buffer has been destroyed until one attempts to use it.
if(buffer_to_unregister == buffer_object && buffer_object)
buffer_object.destruction.unregister(src)
buffer_object = null
/obj/item/device/multitool/resolve_attackby(atom/A, mob/user)
if(!isobj(A))
return ..(A, user)
var/obj/O = A
var/datum/expansion/multitool/MT = O.expansions[/datum/expansion/multitool]
if(!MT)
return ..(A, user)
user.AddTopicPrint(src)
MT.interact(src, user)
return 1