mirror of
https://github.com/VOREStation/VOREStation.git
synced 2026-05-17 20:30:46 +01:00
d5849910e5
* Begin clickcode attack_self fix Begins the work to make everything call back to parent for attack_self so that signals are sacred. * Makes MORE things call the attack_self() parent Yes, I could make special_handling a var on obj/item HOWEVER i want it to be specific so it can be tracked down later and ONLY the objects that use it can be refactored instead of sitting there literally forever and it just becoming 'a thing'. * Finishes making the rest of attack_self call parent. As mentioned, things such as 'specialty_goggles' 'special_handling' and the such are only there to help with attack_self until the attack_self is recoded for those items. * begone foul demon * some more cleanup * These * GOD this was annoying * yeh * Fix this * fLARES * Thesee too * toys! * Even more! * More fixes * Even more * rest of em * these too * Update syndie.dm * hardref clear * Update code/game/gamemodes/nuclear/pinpointer.dm * Update code/game/objects/effects/mines.dm * Update code/game/objects/items/blueprints_vr.dm * Update code/game/objects/items/blueprints_vr.dm * Update code/game/objects/items/contraband_vr.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/gunbox.dm * Update code/game/objects/items/gunbox.dm * Update code/game/objects/items/gunbox_vr.dm * Update code/game/objects/items/gunbox_vr.dm * Update code/game/objects/items/weapons/gift_wrappaper.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/crayons.dm * Update code/game/objects/items/gunbox.dm * these too * Update maintpanel_stack.dm * angry warning * Fixes packaged snacks. Fixes improper var default. * Special handling for these * proper poly types * Fixes magclaws Makes the 'features' it had just part of base magboots that can be adjusted via varswap. * Fixes jackets Fixes https://github.com/VOREStation/VOREStation/issues/18941 * Small bugfix Makes p_Theyre properly capitialize Makes examine show proper wording * Update gift_wrappaper.dm
336 lines
8.2 KiB
Plaintext
336 lines
8.2 KiB
Plaintext
/obj/item/pinpointer
|
|
name = "pinpointer"
|
|
icon = 'icons/obj/device.dmi'
|
|
icon_state = "pinoff"
|
|
slot_flags = SLOT_BELT
|
|
w_class = ITEMSIZE_SMALL
|
|
item_state = "electronic"
|
|
throw_speed = 4
|
|
throw_range = 20
|
|
matter = list(MAT_STEEL = 500)
|
|
preserve_item = 1
|
|
var/obj/item/disk/nuclear/the_disk = null
|
|
var/active = 0
|
|
|
|
///TODO: Clear up click code entirely. This is used exclusively for attack_self
|
|
var/nuclear = FALSE
|
|
var/shuttle = FALSE
|
|
|
|
pickup_sound = 'sound/items/pickup/device.ogg'
|
|
drop_sound = 'sound/items/drop/device.ogg'
|
|
|
|
/obj/item/pinpointer/Destroy()
|
|
active = 0
|
|
STOP_PROCESSING(SSobj, src)
|
|
return ..()
|
|
|
|
/obj/item/pinpointer/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(nuclear || shuttle)
|
|
return
|
|
if(!active)
|
|
active = TRUE
|
|
START_PROCESSING(SSobj, src)
|
|
to_chat(usr, span_notice("You activate the pinpointer"))
|
|
else
|
|
active = FALSE
|
|
STOP_PROCESSING(SSobj, src)
|
|
icon_state = "pinoff"
|
|
to_chat(usr, span_notice("You deactivate the pinpointer"))
|
|
|
|
/obj/item/pinpointer/process()
|
|
if(!active)
|
|
return PROCESS_KILL
|
|
|
|
if(!the_disk)
|
|
the_disk = locate()
|
|
if(!the_disk)
|
|
icon_state = "pinonnull"
|
|
return
|
|
|
|
set_dir(get_dir(src,the_disk))
|
|
|
|
switch(get_dist(src,the_disk))
|
|
if(0)
|
|
icon_state = "pinondirect"
|
|
if(1 to 8)
|
|
icon_state = "pinonclose"
|
|
if(9 to 16)
|
|
icon_state = "pinonmedium"
|
|
if(16 to INFINITY)
|
|
icon_state = "pinonfar"
|
|
|
|
/obj/item/pinpointer/examine(mob/user)
|
|
. = ..()
|
|
for(var/obj/machinery/nuclearbomb/bomb in GLOB.machines)
|
|
if(bomb.timing)
|
|
. += "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
|
|
|
|
|
|
|
|
/obj/item/pinpointer/advpinpointer
|
|
name = "Advanced Pinpointer"
|
|
icon = 'icons/obj/device.dmi'
|
|
desc = "A larger version of the normal pinpointer, this unit features a helpful quantum entanglement detection system to locate various objects that do not broadcast a locator signal."
|
|
var/mode = 0 // Mode 0 locates disk, mode 1 locates coordinates.
|
|
var/turf/location = null
|
|
var/obj/target = null
|
|
|
|
/obj/item/pinpointer/advpinpointer/process()
|
|
if(!active)
|
|
return PROCESS_KILL
|
|
if(mode == 0)
|
|
..()
|
|
if(mode == 1)
|
|
worklocation()
|
|
if(mode == 2)
|
|
workobj()
|
|
|
|
/obj/item/pinpointer/advpinpointer/proc/worklocation()
|
|
if(!location)
|
|
icon_state = "pinonnull"
|
|
return
|
|
|
|
set_dir(get_dir(src,location))
|
|
|
|
switch(get_dist(src,location))
|
|
if(0)
|
|
icon_state = "pinondirect"
|
|
if(1 to 8)
|
|
icon_state = "pinonclose"
|
|
if(9 to 16)
|
|
icon_state = "pinonmedium"
|
|
if(16 to INFINITY)
|
|
icon_state = "pinonfar"
|
|
|
|
/obj/item/pinpointer/advpinpointer/proc/workobj()
|
|
if(!target)
|
|
icon_state = "pinonnull"
|
|
return
|
|
|
|
set_dir(get_dir(src,target))
|
|
|
|
switch(get_dist(src,target))
|
|
if(0)
|
|
icon_state = "pinondirect"
|
|
if(1 to 8)
|
|
icon_state = "pinonclose"
|
|
if(9 to 16)
|
|
icon_state = "pinonmedium"
|
|
if(16 to INFINITY)
|
|
icon_state = "pinonfar"
|
|
|
|
/obj/item/pinpointer/advpinpointer/verb/toggle_mode()
|
|
set category = "Object"
|
|
set name = "Toggle Pinpointer Mode"
|
|
set src in view(1)
|
|
|
|
active = 0
|
|
icon_state = "pinoff"
|
|
target=null
|
|
location = null
|
|
|
|
switch(tgui_alert(usr, "Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", list("Location", "Disk Recovery", "Other Signature")))
|
|
if("Location")
|
|
mode = 1
|
|
|
|
var/locationx = tgui_input_number(usr, "Please input the x coordinate to search for.", "Location?" , "")
|
|
if(!locationx || !(usr in view(1,src)))
|
|
return
|
|
var/locationy = tgui_input_number(usr, "Please input the y coordinate to search for.", "Location?" , "")
|
|
if(!locationy || !(usr in view(1,src)))
|
|
return
|
|
|
|
var/turf/Z = get_turf(src)
|
|
|
|
location = locate(locationx,locationy,Z.z)
|
|
|
|
to_chat(usr, "You set the pinpointer to locate [locationx],[locationy]")
|
|
|
|
return attack_self()
|
|
|
|
if("Disk Recovery")
|
|
mode = 0
|
|
return attack_self()
|
|
|
|
if("Other Signature")
|
|
mode = 2
|
|
switch(tgui_alert(usr, "Search for item signature or DNA fragment?", "Signature Mode Select", list("Item", "DNA")))
|
|
|
|
if("Item")
|
|
var/datum/objective/steal/itemlist
|
|
itemlist = itemlist
|
|
var/targetitem = tgui_input_list(usr, "Select item to search for.", "Item Mode Select", itemlist.possible_items)
|
|
if(!targetitem)
|
|
return
|
|
target=locate(itemlist.possible_items[targetitem])
|
|
if(!target)
|
|
to_chat(usr, "Failed to locate [targetitem]!")
|
|
return
|
|
to_chat(usr, "You set the pinpointer to locate [targetitem]")
|
|
|
|
if("DNA")
|
|
var/DNAstring = tgui_input_text(usr, "Input DNA string to search for." , "Please Enter String." , "")
|
|
if(!DNAstring)
|
|
return
|
|
for(var/mob/living/carbon/M in GLOB.mob_list)
|
|
if(!M.dna)
|
|
continue
|
|
if(M.dna.unique_enzymes == DNAstring)
|
|
target = M
|
|
break
|
|
|
|
return attack_self()
|
|
|
|
|
|
///////////////////////
|
|
//nuke op pinpointers//
|
|
///////////////////////
|
|
|
|
|
|
/obj/item/pinpointer/nukeop
|
|
var/mode = 0 //Mode 0 locates disk, mode 1 locates the shuttle
|
|
var/obj/machinery/computer/shuttle_control/multi/syndicate/home = null
|
|
|
|
/obj/item/pinpointer/nukeop/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(!active)
|
|
active = 1
|
|
START_PROCESSING(SSobj, src)
|
|
if(!mode)
|
|
workdisk()
|
|
to_chat(user, span_notice("Authentication Disk Locator active."))
|
|
else
|
|
worklocation()
|
|
to_chat(user, span_notice("Shuttle Locator active."))
|
|
else
|
|
active = 0
|
|
STOP_PROCESSING(SSobj, src)
|
|
icon_state = "pinoff"
|
|
to_chat(user, span_notice("You deactivate the pinpointer."))
|
|
|
|
/obj/item/pinpointer/nukeop/process()
|
|
if(!active)
|
|
return PROCESS_KILL
|
|
|
|
switch(mode)
|
|
if(0)
|
|
workdisk()
|
|
if(1)
|
|
worklocation()
|
|
|
|
/obj/item/pinpointer/nukeop/proc/workdisk()
|
|
if(GLOB.bomb_set) //If the bomb is set, lead to the shuttle
|
|
mode = 1 //Ensures worklocation() continues to work
|
|
playsound(src, 'sound/machines/twobeep.ogg', 50, 1) //Plays a beep
|
|
visible_message(span_notice("Shuttle Locator active.")) //Lets the mob holding it know that the mode has changed
|
|
return //Get outta here
|
|
|
|
if(!the_disk)
|
|
the_disk = locate()
|
|
if(!the_disk)
|
|
icon_state = "pinonnull"
|
|
return
|
|
|
|
set_dir(get_dir(src, the_disk))
|
|
|
|
switch(get_dist(src, the_disk))
|
|
if(0)
|
|
icon_state = "pinondirect"
|
|
if(1 to 8)
|
|
icon_state = "pinonclose"
|
|
if(9 to 16)
|
|
icon_state = "pinonmedium"
|
|
if(16 to INFINITY)
|
|
icon_state = "pinonfar"
|
|
|
|
/obj/item/pinpointer/nukeop/proc/worklocation()
|
|
if(!GLOB.bomb_set)
|
|
mode = 0
|
|
playsound(src, 'sound/machines/twobeep.ogg', 50, 1)
|
|
visible_message(span_notice("Authentication Disk Locator active."))
|
|
return
|
|
|
|
if(!home)
|
|
home = locate()
|
|
if(!home)
|
|
icon_state = "pinonnull"
|
|
return
|
|
|
|
if(loc.z != home.z) //If you are on a different z-level from the shuttle
|
|
icon_state = "pinonnull"
|
|
|
|
else
|
|
set_dir(get_dir(src, home))
|
|
|
|
switch(get_dist(src, home))
|
|
if(0)
|
|
icon_state = "pinondirect"
|
|
if(1 to 8)
|
|
icon_state = "pinonclose"
|
|
if(9 to 16)
|
|
icon_state = "pinonmedium"
|
|
if(16 to INFINITY)
|
|
icon_state = "pinonfar"
|
|
|
|
|
|
// This one only points to the ship. Useful if there is no nuking to occur today.
|
|
/obj/item/pinpointer/shuttle
|
|
var/shuttle_comp_id = null
|
|
var/obj/machinery/computer/shuttle_control/our_shuttle = null
|
|
|
|
/obj/item/pinpointer/shuttle/attack_self(mob/user)
|
|
. = ..(user)
|
|
if(.)
|
|
return TRUE
|
|
if(!active)
|
|
active = TRUE
|
|
START_PROCESSING(SSobj, src)
|
|
to_chat(user, span_notice("Shuttle Locator active."))
|
|
else
|
|
active = FALSE
|
|
STOP_PROCESSING(SSobj, src)
|
|
icon_state = "pinoff"
|
|
to_chat(user, span_notice("You deactivate the pinpointer."))
|
|
|
|
/obj/item/pinpointer/shuttle/process()
|
|
if(!active)
|
|
return PROCESS_KILL
|
|
|
|
if(!our_shuttle)
|
|
for(var/obj/machinery/computer/shuttle_control/S in GLOB.machines)
|
|
if(S.shuttle_tag == shuttle_comp_id) // Shuttle tags are used so that it will work if the computer path changes, as it does on the southern cross map.
|
|
our_shuttle = S
|
|
break
|
|
|
|
if(!our_shuttle)
|
|
icon_state = "pinonnull"
|
|
return
|
|
|
|
if(loc.z != our_shuttle.z) //If you are on a different z-level from the shuttle
|
|
icon_state = "pinonnull"
|
|
|
|
else
|
|
set_dir(get_dir(src, our_shuttle))
|
|
|
|
switch(get_dist(src, our_shuttle))
|
|
if(0)
|
|
icon_state = "pinondirect"
|
|
if(1 to 8)
|
|
icon_state = "pinonclose"
|
|
if(9 to 16)
|
|
icon_state = "pinonmedium"
|
|
if(16 to INFINITY)
|
|
icon_state = "pinonfar"
|
|
|
|
|
|
/obj/item/pinpointer/shuttle/merc
|
|
shuttle_comp_id = "Mercenary"
|
|
|
|
/obj/item/pinpointer/shuttle/heist
|
|
shuttle_comp_id = "Skipjack"
|