Files
VOREStation/code/game/gamemodes/nuclear/pinpointer.dm
elly1989@rocketmail.com 4073ac9b00 Replaced all 'file.extension' references with 'relativepath/file.extension' using a script by thvortex of ss13-daedalus.
All credits to the author for this handy little script.
I Committed the modified python script to tool directory. Although it needs to be in the root folder of your repo to work.

To notice the improved compile times, in dreammaker go to Build > Preferences > and untick "automatically set file_dir for subfolders"

If this commit inteferes with any large projects just revert it, do your thing, then rerun the script. Easy-peasy.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4488 316c924e-a436-60f5-8080-3fe189b3f50e
2012-08-18 16:33:40 +00:00

345 lines
9.1 KiB
Plaintext

/obj/item/weapon/pinpointer
name = "pinpointer"
icon = 'icons/obj/device.dmi'
icon_state = "pinoff"
flags = FPRINT | TABLEPASS| CONDUCT
slot_flags = SLOT_BELT
w_class = 2.0
item_state = "electronic"
throw_speed = 4
throw_range = 20
m_amt = 500
var/obj/item/weapon/disk/nuclear/the_disk = null
var/active = 0
attack_self()
if(!active)
active = 1
workdisk()
usr << "\blue You activate the pinpointer"
else
active = 0
icon_state = "pinoff"
usr << "\blue You deactivate the pinpointer"
proc/workdisk()
if(!active) return
if(!the_disk)
the_disk = locate()
if(!the_disk)
icon_state = "pinonnull"
return
src.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"
spawn(5) .()
examine()
..()
for(var/obj/machinery/nuclearbomb/bomb in world)
if(bomb.timing)
usr << "Extreme danger. Arming signal detected. Time remaining: [bomb.timeleft]"
/obj/item/weapon/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
attack_self()
if(!active)
active = 1
if(mode == 0)
workdisk()
if(mode == 1)
worklocation()
if(mode == 2)
workobj()
usr << "\blue You activate the pinpointer"
else
active = 0
icon_state = "pinoff"
usr << "\blue You deactivate the pinpointer"
proc/worklocation()
if(!active)
return
if(!location)
icon_state = "pinonnull"
return
src.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"
spawn(5) .()
proc/workobj()
if(!active)
return
if(!target)
icon_state = "pinonnull"
return
src.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"
spawn(5) .()
/obj/item/weapon/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(alert("Please select the mode you want to put the pinpointer in.", "Pinpointer Mode Select", "Location", "Disk Recovery", "Other Signature"))
if("Location")
mode = 1
var/locationx = input(usr, "Please input the x coordinate to search for.", "Location?" , "") as num
if(!locationx || !(usr in view(1,src)))
return
var/locationy = input(usr, "Please input the y coordinate to search for.", "Location?" , "") as num
if(!locationy || !(usr in view(1,src)))
return
var/turf/Z = get_turf(src)
location = locate(locationx,locationy,Z.z)
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(alert("Search for item signature or DNA fragment?" , "Signature Mode Select" , "" , "Item" , "DNA"))
if("Item")
var/datum/objective/steal/itemlist
itemlist = itemlist // To supress a 'variable defined but not used' error.
var/targetitem = input("Select item to search for.", "Item Mode Select","") as null|anything in itemlist.possible_items
if(!targetitem)
return
target=locate(itemlist.possible_items[targetitem])
if(!target)
usr << "Failed to locate [targetitem]!"
return
usr << "You set the pinpointer to locate [targetitem]"
if("DNA")
var/DNAstring = input("Input DNA string to search for." , "Please Enter String." , "")
if(!DNAstring)
return
for(var/mob/living/carbon/M in mob_list)
if(!M.dna)
continue
if(M.dna.unique_enzymes == DNAstring)
target = M
break
return attack_self()
/obj/item/weapon/pinpointer/nukeop//Used by nuke ops specifically so they can get their asses back to the shuttle
var/mode = 0 // Mode 0 locates disk, mode 1 locates the shuttle
var/location = null//Follow that shuttle!
var/obj/machinery/computer/syndicate_station/home = null
attack_self()
if(!active)
active = 1
if(mode == 0)
workdisk()
usr << "\blue Authentication Disk Locator active."
if(mode == 1)
worklocation()
usr << "\blue Shuttle Locator active."
else
active = 0
icon_state = "pinoff"
usr << "\blue You deactivate the pinpointer"
/obj/item/weapon/pinpointer/nukeop/workdisk()
if(!active) return
if(mode)//Check in case the mode changes while operating
worklocation()
return
if(bomb_set)//If the bomb is set, lead to the shuttle
mode = 1//Ensures worklocation() continues to work
worklocation()
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)//Plays a beep
for (var/mob/O in hearers(1, src.loc))
O.show_message(text("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
if(src.loc.z >1)//If you are on a different z-level from the station
icon_state = "pinonalert"
else
src.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"
spawn(5) .()
/obj/item/weapon/pinpointer/nukeop/proc/worklocation()
if(!active)
return
if(!mode)
workdisk()
return
if(!bomb_set)
mode = 0
workdisk()
playsound(src.loc, 'sound/machines/twobeep.ogg', 50, 1)
for (var/mob/O in hearers(2, src.loc))
O.show_message(text("Authentication Disk Locator active."))
if(!home)
home = locate()
if(!home)
icon_state = "pinonnull"
return
if(src.loc.z >2)//If you are on a different z-level from the shuttle
icon_state = "pinonalert"
else
src.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"
spawn(5) .()
/*/obj/item/weapon/pinpointer/New()
. = ..()
processing_objects.Add(src)
/obj/item/weapon/pinpointer/Del()
processing_objects.Remove(src)
. = ..()
/obj/item/weapon/pinpointer/attack_self(mob/user as mob)
user.machine = src
var/dat
if (src.temp)
dat = "[src.temp]<BR><BR><A href='byond://?src=\ref[src];temp=1'>Clear</A>"
else
dat = "<B>Nuclear Disk Pinpointer</B><HR>"
dat += "<A href='byond://?src=\ref[src];refresh=1'>Refresh</A>"
user << browse(dat, "window=radio")
onclose(user, "radio")
/obj/item/weapon/pinpointer/process()
/*
//TODO: REWRITE
set background = 1
var/turf/sr = get_turf(src)
if (sr)
for(var/obj/item/weapon/disk/nuclear/W in world)
var/turf/tr = get_turf(W)
if (tr && tr.z == sr.z)
src.dir = get_dir(sr, tr)
break
*/
/obj/item/weapon/pinpointer/Topic(href, href_list)
..()
if (usr.stat || usr.restrained())
return
if ((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))))
usr.machine = src
if (href_list["refresh"])
src.temp = "<B>Nuclear Disk Pinpointer</B><HR>"
var/turf/sr = get_turf(src)
if (sr)
src.temp += "<B>Located Disks:</B><BR>"
for(var/obj/item/weapon/disk/nuclear/W in world)
var/turf/tr = get_turf(W)
if (tr && tr.z == sr.z)
var/distance = max(abs(tr.x - sr.x), abs(tr.y - sr.y))
var/strength = "unknown"
var/directional = dir2text(get_dir(sr, tr));
if (distance < 5)
strength = "very strong"
else if (distance < 10)
strength = "strong"
else if (distance < 15)
strength = "weak"
else if (distance < 20)
strength = "very weak"
directional = "unknown"
else
continue
if (!directional)
directional = "right on top of it"
src.temp += "[directional]-[strength]<BR>"
src.temp += "<B>You are at \[[sr.x],[sr.y],[sr.z]\]</B> in orbital coordinates.<BR><BR><A href='byond://?src=\ref[src];refresh=1'>Refresh</A><BR>"
else
src.temp += "<B><FONT color='red'>Processing Error:</FONT></B> Unable to locate orbital position.<BR>"
else if (href_list["temp"])
src.temp = null
if (istype(src.loc, /mob))
attack_self(src.loc)
else
for (var/mob/M in viewers(1, src))
if (M.client)
src.attack_self(M)
*/