mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-26 21:48:21 +01:00
Cleanup redundant machine stuff (#18494)
This commit is contained in:
@@ -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
|
||||
|
||||
/*
|
||||
//
|
||||
|
||||
@@ -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.")
|
||||
|
||||
|
||||
@@ -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")
|
||||
|
||||
@@ -155,7 +155,6 @@
|
||||
|
||||
/obj/machinery/computer/security/attack_hand(mob/user)
|
||||
if(stat || ..())
|
||||
user.unset_machine()
|
||||
return
|
||||
|
||||
ui_interact(user)
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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])
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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>")
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user