Cleanup redundant machine stuff (#18494)

This commit is contained in:
AffectedArc07
2022-07-27 21:25:39 +01:00
committed by GitHub
parent 53c4aad491
commit 2f5cec832d
26 changed files with 80 additions and 627 deletions
+9 -9
View File
@@ -104,21 +104,19 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
return desc
/datum/uplink_item/proc/buy(obj/item/uplink/hidden/U, mob/user)
if(!istype(U))
return 0
return FALSE
if(user.stat || user.restrained())
return 0
return FALSE
if(!(istype(user, /mob/living/carbon/human)))
return 0
return FALSE
// If the uplink's holder is in the user's contents
if((U.loc in user.contents || (in_range(U.loc, user) && istype(U.loc.loc, /turf))))
user.set_machine(U)
if(cost > U.uses)
return 0
return FALSE
var/obj/I = spawn_item(get_turf(user), U)
@@ -129,21 +127,23 @@ GLOBAL_LIST_INIT(uplink_items, subtypesof(/datum/uplink_item))
log_game("[key_name(user)] purchased [name]. [name] was discounted to [cost].")
if(!user.mind.special_role)
message_admins("[key_name_admin(user)] purchased [name] (discounted to [cost]), as a non antagonist.")
else
log_game("[key_name(user)] purchased [name].")
if(!user.mind.special_role)
message_admins("[key_name_admin(user)] purchased [name], as a non antagonist.")
A.put_in_any_hand_if_possible(I)
if(istype(I,/obj/item/storage/box/) && I.contents.len>0)
for(var/atom/o in I)
U.purchase_log += "<BIG>[bicon(o)]</BIG>"
else
U.purchase_log += "<BIG>[bicon(I)]</BIG>"
//U.interact(user)
return 1
return 0
return TRUE
return FALSE
/*
//
-2
View File
@@ -94,7 +94,6 @@
emped = 0 //Resets the consecutive EMP count
for(var/mob/M in GLOB.player_list)
if(M.client && M.client.eye == src)
M.unset_machine()
M.reset_perspective(null)
to_chat(M, "The screen bursts into static.")
..()
@@ -284,7 +283,6 @@
//I guess that doesn't matter since they can't use it anyway?
for(var/mob/O in GLOB.player_list)
if(O.client && O.client.eye == src)
O.unset_machine()
O.reset_perspective(null)
to_chat(O, "The screen bursts into static.")
+1 -3
View File
@@ -140,12 +140,10 @@
/obj/machinery/computer/operating/ui_act(action, params)
if(..())
return
if(stat & (NOPOWER|BROKEN))
return
if((usr.contents.Find(src) || (in_range(src, usr) && istype(src.loc, /turf))) || (istype(usr, /mob/living/silicon)))
usr.set_machine(src)
. = TRUE
switch(action)
if("verboseOn")
-1
View File
@@ -155,7 +155,6 @@
/obj/machinery/computer/security/attack_hand(mob/user)
if(stat || ..())
user.unset_machine()
return
ui_interact(user)
-1
View File
@@ -102,7 +102,6 @@
return attack_hand(user)
/obj/machinery/computer/cloning/attack_hand(mob/user as mob)
user.set_machine(src)
add_fingerprint(user)
if(stat & (BROKEN|NOPOWER))
-350
View File
@@ -1,350 +0,0 @@
//#define AMAP
/obj/machinery/computer/security/verb/station_map()
set name = ".map"
set category = "Object"
set src in view(1)
usr.set_machine(src)
if(!mapping) return
log_game("[usr]([usr.key]) used station map L[z] in [src.loc.loc]")
src.drawmap(usr)
/obj/machinery/computer/security/proc/drawmap(mob/user as mob)
var/icx = round(world.maxx/16) + 1
var/icy = round(world.maxy/16) + 1
var/xoff = round( (icx*16-world.maxx)-2)
var/yoff = round( (icy*16-world.maxy)-2)
var/icount = icx * icy
var/list/imap = list()
#ifdef AMAP
for(var/i = 0; i<icount; i++)
imap += icon('icons/misc/imap.dmi', "blank")
imap += icon('icons/misc/imap.dmi', "blank")
// to_chat(world, "[icount] images in list")
for(var/wx = 1 ; wx <= world.maxx; wx++)
for(var/wy = 1; wy <= world.maxy; wy++)
var/turf/T = locate(wx, wy, z)
var/colour
var/colour2
if(!T)
colour = rgb(0,0,0)
else
var/sense = TRUE
switch("[T.type]")
if("/turf/space")
colour = rgb(10,10,10)
sense = FALSE
if("/turf/simulated/floor")
colour = rgb(150,150,150)
var/turf/simulated/floor/TF = T
if(TF.burnt)
sense = FALSE
colour = rgb(130,130,130)
if("/turf/simulated/floor/engine")
colour = rgb(128,128,128)
if("/turf/simulated/wall")
colour = rgb(96,96,96)
if("/turf/simulated/wall/r_wall")
colour = rgb(128,96,96)
else
colour = rgb(0,40,0)
if(sense)
for(var/atom/AM in T.contents)
if(istype(AM, /obj/machinery/door) && !istype(AM, /obj/machinery/door/window))
if(AM.density)
colour = rgb(96,96,192)
colour2 = colour
else
colour = rgb(128,192,128)
if(istype(AM, /obj/machinery/alarm))
colour = rgb(0,255,0)
colour2 = colour
if(AM.icon_state=="alarm:1")
colour = rgb(255,255,0)
colour2 = rgb(255,128,0)
if(istype(AM, /mob))
if(AM:client)
colour = rgb(255,0,0)
else
colour = rgb(255,128,128)
colour2 = rgb(192,0,0)
var/area/A = T.loc
if(A.fire)
var/red = getr(colour)
var/green = getg(colour)
var/blue = getb(colour)
green = min(255, green+40)
blue = min(255, blue+40)
colour = rgb(red, green, blue)
if(!colour2 && !T.density)
var/datum/gas_mixture/environment = T.return_air()
var/turf_total = environment.total_moles()
//var/turf_total = T.co2 + T.oxygen + T.poison + T.sl_gas + T.n2
var/t1 = turf_total / MOLES_CELLSTANDARD * 150
if(t1<=100)
colour2 = rgb(t1*2.55,0,0)
else
t1 = min(100, t1-100)
colour2 = rgb(255, t1*2.55, t1*2.55)
if(!colour2)
colour2 = colour
var/ix = round((wx*2+xoff)/32)
var/iy = round((wy*2+yoff)/32)
var/rx = ((wx*2+xoff)%32) + 1
var/ry = ((wy*2+yoff)%32) + 1
// to_chat(world, "trying [ix],[iy] : [ix+icx*iy]")
var/icon/I = imap[1+(ix + icx*iy)*2]
var/icon/I2 = imap[2+(ix + icx*iy)*2]
// to_chat(world, "icon: [bicon(I)]")
I.DrawBox(colour, rx, ry, rx+1, ry+1)
I2.DrawBox(colour2, rx, ry, rx+1, ry+1)
user.clearmap()
user.mapobjs = list()
for(var/i=0; i<icount;i++)
var/obj/screen/H = new /obj/screen()
H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]"
// to_chat(world, "[bicon(I)] at [H.screen_loc]")
H.name = (i==0)?"maprefresh":"map"
var/icon/HI = new/icon
var/icon/I = imap[i*2+1]
var/icon/J = imap[i*2+2]
HI.Insert(I, frame=1, delay = 5)
HI.Insert(J, frame=2, delay = 5)
qdel(I)
qdel(J)
H.icon = HI
H.layer = ABOVE_HUD_LAYER
H.plane = ABOVE_HUD_PLANE
usr.mapobjs += H
#else
for(var/i = 0; i<icount; i++)
imap += icon('icons/misc/imap.dmi', "blank")
for(var/wx = 1 ; wx <= world.maxx; wx++)
for(var/wy = 1; wy <= world.maxy; wy++)
var/turf/T = locate(wx, wy, z)
var/colour
if(!T)
colour = rgb(0,0,0)
else
var/sense = TRUE
switch("[T.type]")
if("/turf/space")
colour = rgb(10,10,10)
sense = FALSE
if("/turf/simulated/floor", "/turf/simulated/floor/engine")
var/datum/gas_mixture/environment = T.return_air()
var/turf_total = environment.total_moles()
var/t1 = turf_total / MOLES_CELLSTANDARD * 175
if(t1<=100)
colour = rgb(0,0,t1*2.55)
else
t1 = min(100, t1-100)
colour = rgb( t1*2.55, t1*2.55, 255)
if("/turf/simulated/wall")
colour = rgb(96,96,96)
if("/turf/simulated/wall/r_wall")
colour = rgb(128,96,96)
else
colour = rgb(0,40,0)
if(sense)
for(var/atom/AM in T.contents)
if(istype(AM, /obj/machinery/door) && !istype(AM, /obj/machinery/door/window))
if(AM.density)
colour = rgb(0,96,192)
else
colour = rgb(96,192,128)
if(istype(AM, /obj/machinery/alarm))
colour = rgb(0,255,0)
if(AM.icon_state=="alarm:1")
colour = rgb(255,255,0)
if(istype(AM, /mob))
if(AM:client)
colour = rgb(255,0,0)
else
colour = rgb(255,128,128)
//if(istype(AM, /obj/structure/blob))
// colour = rgb(255,0,255)
var/area/A = T.loc
if(A.fire)
var/red = getr(colour)
var/green = getg(colour)
var/blue = getb(colour)
green = min(255, green+40)
blue = min(255, blue+40)
colour = rgb(red, green, blue)
var/ix = round((wx*2+xoff)/32)
var/iy = round((wy*2+yoff)/32)
var/rx = ((wx*2+xoff)%32) + 1
var/ry = ((wy*2+yoff)%32) + 1
// to_chat(world, "trying [ix],[iy] : [ix+icx*iy]")
var/icon/I = imap[1+(ix + icx*iy)]
// to_chat(world, "icon: [bicon(I)]")
I.DrawBox(colour, rx, ry, rx, ry)
user.clearmap()
user.mapobjs = list()
for(var/i=0; i<icount;i++)
var/obj/screen/H = new /obj/screen()
H.screen_loc = "[5 + i%icx],[6+ round(i/icx)]"
// to_chat(world, "[bicon(I)] at [H.screen_loc]")
H.name = (i==0)?"maprefresh":"map"
var/icon/I = imap[i+1]
H.icon = I
qdel(I)
H.layer = 25
H.plane = HUD_PLANE
usr.mapobjs += H
#endif
user.client.screen += user.mapobjs
src.close(user)
/* if(seccomp == src)
drawmap(user)
else
user.clearmap()*/
return
/obj/machinery/computer/security/proc/close(mob/user)
spawn(20)
var/using = null
if(user.mapobjs)
for(var/obj/machinery/computer/security/seccomp in oview(1,user))
if(seccomp == src)
using = 1
break
if(using)
close(user)
else
user.clearmap()
return
/proc/getr(col)
return hex2num( copytext(col, 2,4))
/proc/getg(col)
return hex2num( copytext(col, 4,6))
/proc/getb(col)
return hex2num( copytext(col, 6))
/mob/proc/clearmap()
src.client.screen -= src.mapobjs
for(var/obj/screen/O in mapobjs)
qdel(O)
mapobjs = null
src.unset_machine()
-99
View File
@@ -1,102 +1,3 @@
// Beacon randomly spawns in space
// When a non-traitor (no special role in /mind) uses it, he is given the choice to become a traitor
// If he accepts there is a random chance he will be accepted, rejected, or rejected and killed
// Bringing certain items can help improve the chance to become a traitor
/obj/machinery/syndicate_beacon
name = "ominous beacon"
desc = "This looks suspicious..."
icon = 'icons/obj/device.dmi'
icon_state = "syndbeacon"
anchored = TRUE
density = TRUE
var/temptext = ""
var/selfdestructing = FALSE
var/charges = 1
/obj/machinery/syndicate_beacon/attack_hand(mob/user as mob)
usr.set_machine(src)
var/dat = "<font color=#005500><i>Scanning [pick("retina pattern", "voice print", "fingerprints", "dna sequence")]...<br>Identity confirmed,<br></i></font>"
if(istype(user, /mob/living/carbon/human) || istype(user, /mob/living/silicon/ai))
if(is_special_character(user))
dat += "<font color=#07700><i>Operative record found. Greetings, Agent [user.name].</i></font><br>"
else if(charges < 1)
dat += "<TT>Connection severed.</TT><BR>"
else
var/honorific = "Mr."
if(user.gender == FEMALE)
honorific = "Ms."
dat += "<font color=red><i>Identity not found in operative database. What can the Syndicate do for you today, [honorific] [user.name]?</i></font><br>"
if(!selfdestructing)
dat += "<br><br><A href='?src=[UID()];betraitor=1;traitormob=\ref[user]'>\"[pick("I want to switch teams.", "I want to work for you.", "Let me join you.", "I can be of use to you.", "You want me working for you, and here's why...", "Give me an objective.", "How's the 401k over at the Syndicate?")]\"</A><BR>"
dat += temptext
user << browse(dat, "window=syndbeacon")
onclose(user, "syndbeacon")
/obj/machinery/syndicate_beacon/Topic(href, href_list)
if(..())
return 1
if(href_list["betraitor"])
if(charges < 1)
src.updateUsrDialog()
return
var/mob/M = locate(href_list["traitormob"])
if(M.mind.special_role)
temptext = "<i>We have no need for you at this time. Have a pleasant day.</i><br>"
src.updateUsrDialog()
return
charges -= 1
if(prob(50))
temptext = "<font color=red><i><b>Double-crosser. You planned to betray us from the start. Allow us to repay the favor in kind.</b></i></font>"
updateUsrDialog()
addtimer(CALLBACK(src, .proc/selfdestruct), rand(50, 200))
return
if(istype(M, /mob/living/carbon/human))
var/mob/living/carbon/human/N = M
var/objective = "Free Objective"
switch(rand(1,100))
if(1 to 50)
objective = "Steal [pick("a hand teleporter", "the Captain's antique laser gun", "a jetpack", "the Captain's ID", "the Captain's jumpsuit")]."
if(51 to 60)
objective = "Destroy 70% or more of the station's plasma tanks."
if(61 to 70)
objective = "Cut power to 80% or more of the station's tiles."
if(71 to 80)
objective = "Destroy the AI."
if(81 to 90)
objective = "Kill all monkeys aboard the station."
else
objective = "Make certain at least 80% of the station evacuates on the shuttle."
var/datum/objective/custom_objective = new(objective)
custom_objective.owner = N.mind
N.mind.objectives += custom_objective
var/datum/objective/escape/escape_objective = new
escape_objective.owner = N.mind
N.mind.objectives += escape_objective
var/datum/antagonist/traitor/T = new()
T.give_objectives = FALSE
N.mind.add_antag_datum(T)
to_chat(M, "<B>You have joined the ranks of the Syndicate and become a traitor to the station!</B>")
message_admins("[key_name_admin(N)] has accepted a traitor objective from a syndicate beacon.")
src.add_fingerprint(usr)
src.updateUsrDialog()
return
/obj/machinery/syndicate_beacon/proc/selfdestruct()
selfdestructing = TRUE
spawn() explosion(src.loc, rand(3,8), rand(1,3), 1, 10)
////////////////////////////////////////
//Singularity beacon
////////////////////////////////////////
@@ -359,7 +359,7 @@
/obj/item/radio/headset/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/encryptionkey/))
user.set_machine(src)
if(keyslot1 && keyslot2)
to_chat(user, "The headset can't hold another key!")
return
@@ -372,15 +372,17 @@
user.drop_item()
W.loc = src
keyslot2 = W
recalculateChannels()
else
return ..()
return
return ..()
/obj/item/radio/headset/screwdriver_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = 0))
return
user.set_machine(src)
if(keyslot1 || keyslot2)
for(var/ch_name in channels)
@@ -563,13 +563,14 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
. = TRUE
if(!I.use_tool(src, user, 0, volume = I.tool_volume))
return
user.set_machine(src)
b_stat = !b_stat
if(!istype(src, /obj/item/radio/beacon))
if(b_stat)
user.show_message("<span class='notice'>The radio can now be attached and modified!</span>")
else
user.show_message("<span class='notice'>The radio can no longer be modified or attached!</span>")
updateDialog()
/obj/item/radio/wirecutter_act(mob/user, obj/item/I)
@@ -663,7 +664,7 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
/obj/item/radio/borg/attackby(obj/item/W as obj, mob/user as mob, params)
if(istype(W, /obj/item/encryptionkey/))
user.set_machine(src)
if(keyslot)
to_chat(user, "The radio can't hold another key!")
return
@@ -674,14 +675,15 @@ GLOBAL_LIST_INIT(default_medbay_channels, list(
keyslot = W
recalculateChannels()
else
return ..()
return
return ..()
/obj/item/radio/borg/screwdriver_act(mob/user, obj/item/I)
. = TRUE
if(!I.use_tool(src, user, 0, volume = 0))
return
user.set_machine(src)
if(keyslot)
for(var/ch_name in channels)
SSradio.remove_object(src, SSradio.radiochannels[ch_name])
-1
View File
@@ -173,7 +173,6 @@
ui_interact(user)
/obj/item/rpd/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.inventory_state)
user.set_machine(src)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "RPD", name, 450, 650, master_ui, state)
@@ -243,8 +243,6 @@
to_chat(user, "<span class='notice'>[failed] item\s [failed == 1 ? "is" : "are"] refused.</span>")
/obj/machinery/smartfridge/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = TRUE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
user.set_machine(src)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "Smartfridge", name, 500, 500)
+2 -1
View File
@@ -132,7 +132,7 @@
var/mob/living/M = usr
if(!Adjacent(M))
return
M.set_machine(src)
if(href_list["next_page"])
if(curr_page == pages + 1)
return //Don't need that at all, but anyway.
@@ -142,6 +142,7 @@
screen = SCREEN_PAGE_INNER
curr_page++
playsound(loc, "pageturn", 50, TRUE)
else if(href_list["prev_page"])
if(curr_page == 0)
return
+20 -8
View File
@@ -138,15 +138,16 @@
+ "</body></html>", "window=PaperBundle[UID()]")
/obj/item/paper_bundle/attack_self(mob/user as mob)
src.show_content(user)
show_content(user)
add_fingerprint(usr)
update_icon()
return
/obj/item/paper_bundle/Topic(href, href_list)
..()
if(..())
return
if((src in usr.contents) || (istype(src.loc, /obj/item/folder) && (src.loc in usr.contents)))
usr.set_machine(src)
if(href_list["next_page"])
if(page == amount)
screen = 2
@@ -156,6 +157,7 @@
return
page++
playsound(src.loc, "pageturn", 50, 1)
if(href_list["prev_page"])
if(page == 1)
return
@@ -165,6 +167,7 @@
screen = 1
page--
playsound(src.loc, "pageturn", 50, 1)
if(href_list["remove"])
var/obj/item/W = src[page]
usr.put_in_hands(W)
@@ -176,8 +179,10 @@
usr.unset_machine() // Ensure the bundle GCs
qdel(src)
return
else if(page == amount)
screen = 2
else if(page == amount+1)
page--
@@ -185,9 +190,9 @@
update_icon()
else
to_chat(usr, "<span class='notice'>You need to hold it in your hands to change pages.</span>")
if(istype(src.loc, /mob))
src.attack_self(src.loc)
updateUsrDialog()
if(istype(loc, /mob))
attack_self(loc)
@@ -199,8 +204,9 @@
var/n_name = sanitize(copytext(input(usr, "What would you like to label the bundle?", "Bundle Labelling", name) as text, 1, MAX_MESSAGE_LEN))
if((loc == usr && usr.stat == 0))
name = "[(n_name ? text("[n_name]") : "paper bundle")]"
add_fingerprint(usr)
return
/obj/item/paper_bundle/verb/remove_all()
@@ -209,21 +215,24 @@
set src in usr
to_chat(usr, "<span class='notice'>You loosen the bundle.</span>")
for(var/obj/O in src)
O.loc = usr.loc
O.layer = initial(O.layer)
O.plane = initial(O.plane)
O.add_fingerprint(usr)
usr.unEquip(src)
qdel(src)
return
/obj/item/paper_bundle/update_desc()
. = ..()
if(amount > 1)
desc = "[amount] papers clipped to each other."
else
desc = "A single sheet of paper."
if(locate(/obj/item/photo) in src)
desc += "\nThere is a photo attached to it."
@@ -238,6 +247,7 @@
if(contents.len)
var/obj/item/paper/P = src[1]
. += P.overlays
for(var/obj/O in src)
var/image/sheet = image('icons/obj/bureaucracy.dmi')
if(istype(O, /obj/item/paper))
@@ -247,7 +257,9 @@
pixel_x = min(0.5 * amount, 1)
pixel_y = min(1 * amount, 2)
underlays += sheet
else if(istype(O, /obj/item/photo))
var/obj/item/photo/picture = O
. += picture.tiny
. += "clip"
-1
View File
@@ -106,7 +106,6 @@ GLOBAL_LIST_EMPTY(PDAs)
return attack_self(M)
/obj/item/pda/attack_self(mob/user as mob)
user.set_machine(src)
if(active_uplink_check(user))
return
ui_interact(user)
-2
View File
@@ -932,8 +932,6 @@
)
if(!loud)
to_chat(user, "<span class='danger'>\The [src] has AI control disabled!</span>")
user << browse(null, "window=apc")
user.unset_machine()
return FALSE
else
if((!in_range(src, user) || !istype(loc, /turf)))
@@ -590,11 +590,7 @@
STOP_PROCESSING(SSobj, src)
return ..()
/obj/item/gun/energy/temperature/newshot()
..()
/obj/item/gun/energy/temperature/attack_self(mob/living/user as mob)
user.set_machine(src)
update_dat()
user << browse("<TITLE>Temperature Gun Configuration</TITLE><HR>[dat]", "window=tempgun;size=510x120")
onclose(user, "tempgun")
@@ -608,7 +604,7 @@
/obj/item/gun/energy/temperature/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
add_fingerprint(usr)
if(href_list["temp"])
@@ -617,10 +613,12 @@
target_temperature = min((500 + 500*emagged), target_temperature+amount)
else
target_temperature = max(0, target_temperature+amount)
if(istype(loc, /mob))
attack_self(loc)
add_fingerprint(usr)
return
/obj/item/gun/energy/temperature/process()
..()
@@ -157,7 +157,6 @@
return TRUE
add_fingerprint(usr)
usr.set_machine(src)
. = TRUE
switch(action)
-1
View File
@@ -368,7 +368,6 @@ GLOBAL_LIST_INIT(conveyor_switches, list())
ui_interact(user)
/obj/machinery/conveyor_switch/ui_interact(mob/user, ui_key = "main", datum/tgui/ui = null, force_open = FALSE, datum/tgui/master_ui = null, datum/ui_state/state = GLOB.default_state)
user.set_machine(src)
ui = SStgui.try_update_ui(user, src, ui_key, ui, force_open)
if(!ui)
ui = new(user, src, ui_key, "ConveyorSwitch", name, 350, 150, master_ui, state)
-3
View File
@@ -75,9 +75,6 @@ using metal and glass, it uses glass and reagents (usually sulfuric acis).
return round(A / max(1, (all_materials[M] * efficiency_coeff)))
/obj/machinery/r_n_d/circuit_imprinter/attackby(obj/item/O as obj, mob/user as mob, params)
if(shocked)
if(shock(user,50))
return TRUE
if(default_deconstruction_screwdriver(user, "circuit_imprinter_t", "circuit_imprinter", O))
if(linked_console)
linked_console.linked_imprinter = null
@@ -49,9 +49,6 @@ Note: Must be placed within 3 tiles of the R&D Console
/obj/machinery/r_n_d/destructive_analyzer/attackby(obj/item/O as obj, mob/user as mob, params)
if(shocked)
if(shock(user,50))
return TRUE
if(default_deconstruction_screwdriver(user, "d_analyzer_t", "d_analyzer", O))
if(linked_console)
linked_console.linked_destroy = null
@@ -64,14 +61,14 @@ Note: Must be placed within 3 tiles of the R&D Console
if(default_deconstruction_crowbar(user, O))
return
if(disabled)
return
if(!linked_console)
to_chat(user, "<span class='warning'>[src] must be linked to an R&D console first!</span>")
return
if(busy)
to_chat(user, "<span class='warning'>[src] is busy right now.</span>")
return
if(istype(O, /obj/item) && !loaded_item)
if(!O.origin_tech)
to_chat(user, "<span class='warning'>This doesn't seem to have a tech origin!</span>")
+2 -7
View File
@@ -102,9 +102,6 @@
return TRUE
/obj/machinery/r_n_d/experimentor/attackby(obj/item/O, mob/user, params)
if(shocked)
shock(user,50)
if(exchange_parts(user, O))
return
@@ -112,14 +109,14 @@
to_chat(user, "<span class='warning'>[O] is not yet valid for [src] and must be completed!</span>")
return
if(disabled)
return
if(!linked_console)
to_chat(user, "<span class='warning'>[src] must be linked to an R&D console first!</span>")
return
if(loaded_item)
to_chat(user, "<span class='warning'>[src] is already loaded.</span>")
return
if(istype(O, /obj/item))
if(!O.origin_tech)
to_chat(user, "<span class='warning'>This doesn't seem to have a tech origin!</span>")
@@ -135,8 +132,6 @@
to_chat(user, "<span class='notice'>You add [O] to the machine.</span>")
flick("h_lathe_load", src)
return
/obj/machinery/r_n_d/experimentor/crowbar_act(mob/user, obj/item/I)
if(!panel_open)
return
+5 -7
View File
@@ -77,17 +77,14 @@ Note: Must be placed west/left of and R&D console to function.
return A
/obj/machinery/r_n_d/protolathe/attackby(obj/item/O as obj, mob/user as mob, params)
if(shocked)
if(shock(user,50))
return TRUE
if(default_deconstruction_screwdriver(user, "protolathe_t", "protolathe", O))
if(linked_console)
linked_console.linked_lathe = null
linked_console = null
return
return FALSE
if(exchange_parts(user, O))
return
return FALSE
if(panel_open)
if(istype(O, /obj/item/crowbar))
@@ -99,10 +96,11 @@ Note: Must be placed west/left of and R&D console to function.
reagents.trans_to(G, G.reagents.maximum_volume)
materials.retrieve_all()
default_deconstruction_crowbar(user, O)
return 1
return TRUE
else
to_chat(user, "<span class='warning'>You can't load [src] while it's opened.</span>")
return 1
return TRUE
if(O.is_open_container())
return FALSE
else
+16 -13
View File
@@ -130,21 +130,23 @@ won't update every console in existence) but it's more of a hassle to do. Also,
/obj/machinery/computer/rdconsole/proc/SyncRDevices() //Makes sure it is properly sync'ed up with the devices attached to it (if any).
for(var/obj/machinery/r_n_d/D in range(3,src))
if(!isnull(D.linked_console) || D.disabled || D.panel_open)
if(!isnull(D.linked_console) || D.panel_open)
continue
if(istype(D, /obj/machinery/r_n_d/destructive_analyzer))
if(linked_destroy == null)
linked_destroy = D
D.linked_console = src
else if(istype(D, /obj/machinery/r_n_d/protolathe))
if(linked_lathe == null)
linked_lathe = D
D.linked_console = src
else if(istype(D, /obj/machinery/r_n_d/circuit_imprinter))
if(linked_imprinter == null)
linked_imprinter = D
D.linked_console = src
return
//Have it automatically push research to the centcom server so wild griffins can't fuck up R&D's work --NEO
/obj/machinery/computer/rdconsole/proc/griefProtection()
@@ -267,16 +269,18 @@ won't update every console in existence) but it's more of a hassle to do. Also,
clear_wait_message()
for(var/obj/machinery/r_n_d/server/S in GLOB.machines)
var/server_processed = FALSE
if(S.disabled)
continue
if((id in S.id_with_upload) || istype(S, /obj/machinery/r_n_d/server/centcom))
files.push_data(S.files)
server_processed = TRUE
if(((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)) || S.hacked)
if(((id in S.id_with_download) && !istype(S, /obj/machinery/r_n_d/server/centcom)))
S.files.push_data(files)
server_processed = TRUE
if(!istype(S, /obj/machinery/r_n_d/server/centcom) && server_processed)
S.produce_heat(100)
SStgui.update_uis(src)
/obj/machinery/computer/rdconsole/proc/reset_research()
@@ -339,14 +343,13 @@ won't update every console in existence) but it's more of a hassle to do. Also,
if(!linked_destroy || !temp_tech)
return
if(!linked_destroy.hacked)
if(!linked_destroy.loaded_item)
to_chat(user, "<span class='danger'>[linked_destroy] appears to be empty.</span>")
else
for(var/T in temp_tech)
files.UpdateTech(T, temp_tech[T])
send_mats()
linked_destroy.loaded_item = null
if(!linked_destroy.loaded_item)
to_chat(user, "<span class='danger'>[linked_destroy] appears to be empty.</span>")
else
for(var/T in temp_tech)
files.UpdateTech(T, temp_tech[T])
send_mats()
linked_destroy.loaded_item = null
for(var/obj/I in linked_destroy.contents)
for(var/mob/M in I.contents)
+6 -80
View File
@@ -8,34 +8,12 @@
anchored = TRUE
use_power = IDLE_POWER_USE
var/busy = FALSE
var/hacked = FALSE
var/disabled = FALSE
var/shocked = FALSE
var/list/wires = list()
var/hack_wire
var/disable_wire
var/shock_wire
var/obj/machinery/computer/rdconsole/linked_console
var/obj/item/loaded_item = null
var/datum/component/material_container/materials //Store for hyper speed!
var/efficiency_coeff = 1
var/list/categories = list()
/obj/machinery/r_n_d/Initialize(mapload)
. = ..()
wires["Red"] = 0
wires["Blue"] = 0
wires["Green"] = 0
wires["Yellow"] = 0
wires["Black"] = 0
wires["White"] = 0
var/list/w = list("Red","Blue","Green","Yellow","Black","White")
hack_wire = pick_n_take(w)
shock_wire = pick_n_take(w)
disable_wire = pick_n_take(w)
/obj/machinery/r_n_d/ComponentInitialize()
..()
materials = AddComponent(/datum/component/material_container, list(MAT_METAL, MAT_GLASS, MAT_SILVER, MAT_GOLD, MAT_DIAMOND, MAT_PLASMA, MAT_URANIUM, MAT_BANANIUM, MAT_TRANQUILLITE, MAT_TITANIUM, MAT_BLUESPACE, MAT_PLASTIC), 0, TRUE, /obj/item/stack, CALLBACK(src, .proc/is_insertion_ready), CALLBACK(src, .proc/AfterMaterialInsert))
@@ -49,84 +27,32 @@
materials = null
return ..()
/obj/machinery/r_n_d/attack_hand(mob/user as mob)
if(shocked)
shock(user,50)
if(panel_open)
var/list/dat = list()
dat += "[src.name] Wires:<BR>"
for(var/wire in wires)
dat += "[wire] Wire: <A href='?src=[UID()];wire=[wire];cut=1'>[src.wires[wire] ? "Mend" : "Cut"]</A> <A href='?src=[UID()];wire=[wire];pulse=1'>Pulse</A><BR>"
dat += "The red light is [src.disabled ? "off" : "on"].<BR>"
dat += "The green light is [src.shocked ? "off" : "on"].<BR>"
dat += "The blue light is [src.hacked ? "off" : "on"].<BR>"
user << browse("<HTML><HEAD><TITLE>[src.name] Hacking</TITLE></HEAD><BODY>[dat.Join("")]</BODY></HTML>","window=hack_win")
return
/obj/machinery/r_n_d/Topic(href, href_list)
if(..())
return
usr.set_machine(src)
src.add_fingerprint(usr)
if(href_list["pulse"])
var/temp_wire = href_list["wire"]
if(!istype(usr.get_active_hand(), /obj/item/multitool))
to_chat(usr, "You need a multitool!")
else
if(src.wires[temp_wire])
to_chat(usr, "You can't pulse a cut wire.")
else
if(src.hack_wire == href_list["wire"])
src.hacked = !src.hacked
spawn(100) src.hacked = !src.hacked
if(src.disable_wire == href_list["wire"])
src.disabled = !src.disabled
src.shock(usr,50)
spawn(100) src.disabled = !src.disabled
if(src.shock_wire == href_list["wire"])
src.shocked = !src.shocked
src.shock(usr,50)
spawn(100) src.shocked = !src.shocked
if(href_list["cut"])
if(!istype(usr.get_active_hand(), /obj/item/wirecutters))
to_chat(usr, "You need wirecutters!")
else
var/temp_wire = href_list["wire"]
wires[temp_wire] = !wires[temp_wire]
if(src.hack_wire == temp_wire)
src.hacked = !src.hacked
if(src.disable_wire == temp_wire)
src.disabled = !src.disabled
src.shock(usr,50)
if(src.shock_wire == temp_wire)
src.shocked = !src.shocked
src.shock(usr,50)
src.updateUsrDialog()
//whether the machine can have an item inserted in its current state.
/obj/machinery/r_n_d/proc/is_insertion_ready(mob/user)
if(panel_open)
to_chat(user, "<span class='warning'>You can't load [src] while it's opened!</span>")
return FALSE
if(disabled)
return FALSE
if(!linked_console)
to_chat(user, "<span class='warning'>[src] must be linked to an R&D console first!</span>")
return FALSE
if(busy)
to_chat(user, "<span class='warning'>[src] is busy right now.</span>")
return FALSE
if(stat & BROKEN)
to_chat(user, "<span class='warning'>[src] is broken.</span>")
return FALSE
if(stat & NOPOWER)
to_chat(user, "<span class='warning'>[src] has no power.</span>")
return FALSE
if(loaded_item)
to_chat(user, "<span class='warning'>[src] is already loaded.</span>")
return FALSE
return TRUE
/obj/machinery/r_n_d/proc/AfterMaterialInsert(type_inserted, id_inserted, amount_inserted)
-14
View File
@@ -140,12 +140,6 @@
air_update_turf()
/obj/machinery/r_n_d/server/attackby(obj/item/O as obj, mob/user as mob, params)
if(disabled)
return
if(shocked)
shock(user,50)
if(istype(O, /obj/item/screwdriver))
default_deconstruction_screwdriver(user, "RD-server-on_t", "RD-server-on", O)
return 1
@@ -161,14 +155,6 @@
else
return ..()
/obj/machinery/r_n_d/server/attack_hand(mob/user as mob)
if(disabled)
return
if(shocked)
shock(user,50)
return
/obj/machinery/r_n_d/server/centcom
name = "CentComm. Central R&D Database"
server_id = -1
-1
View File
@@ -688,7 +688,6 @@
#include "code\game\machinery\mass_driver.dm"
#include "code\game\machinery\navbeacon.dm"
#include "code\game\machinery\OpTable.dm"
#include "code\game\machinery\overview.dm"
#include "code\game\machinery\PDApainter.dm"
#include "code\game\machinery\poolcontroller.dm"
#include "code\game\machinery\portable_tag_turret.dm"