/*CONTENTS General Computer Security Computer Comm Computer ID Computer Pod/Blast Doors computer */ /obj/machinery/computer/New() ..() spawn(2) power_change() /obj/machinery/computer/meteorhit(var/obj/O as obj) for(var/x in verbs) verbs -= x set_broken() var/datum/effects/system/harmless_smoke_spread/smoke = new /datum/effects/system/harmless_smoke_spread() smoke.set_up(5, 0, src) smoke.start() return /obj/machinery/computer/emp_act(severity) if(prob(20/severity)) set_broken() ..() /obj/machinery/computer/ex_act(severity) switch(severity) if(1.0) del(src) return if(2.0) if (prob(25)) del(src) return if (prob(50)) for(var/x in verbs) verbs -= x set_broken() if(3.0) if (prob(25)) for(var/x in verbs) verbs -= x set_broken() else return /obj/machinery/computer/blob_act() if (prob(75)) for(var/x in verbs) verbs -= x set_broken() density = 0 /obj/machinery/computer/power_change() if(!istype(src,/obj/machinery/computer/security/telescreen)) if(stat & BROKEN) icon_state = initial(icon_state) icon_state += "b" if (istype(src,/obj/machinery/computer/aifixer)) overlays = null else if(powered()) icon_state = initial(icon_state) stat &= ~NOPOWER if (istype(src,/obj/machinery/computer/aifixer)) var/obj/machinery/computer/aifixer/O = src if (O.occupant) switch (O.occupant.stat) if (0) overlays += image('computer.dmi', "ai-fixer-full") if (2) overlays += image('computer.dmi', "ai-fixer-404") else overlays += image('computer.dmi', "ai-fixer-empty") else spawn(rand(0, 15)) //icon_state = "c_unpowered" icon_state = initial(icon_state) icon_state += "0" stat |= NOPOWER if (istype(src,/obj/machinery/computer/aifixer)) overlays = null /obj/machinery/computer/process() if(stat & (NOPOWER|BROKEN)) return use_power(250) /obj/machinery/computer/proc/set_broken() icon_state = initial(icon_state) icon_state += "b" stat |= BROKEN /obj/machinery/computer/attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/screwdriver) && circuit) playsound(src.loc, 'Screwdriver.ogg', 50, 1) if(do_after(user, 20)) var/obj/computerframe/A = new /obj/computerframe( src.loc ) var/obj/item/weapon/circuitboard/M = new circuit( A ) A.circuit = M A.anchored = 1 for (var/obj/C in src) C.loc = src.loc if (src.stat & BROKEN) user << "\blue The broken glass falls out." new /obj/item/weapon/shard( src.loc ) A.state = 3 A.icon_state = "3" else user << "\blue You disconnect the monitor." A.state = 4 A.icon_state = "4" del(src) else src.attack_hand(user) return /obj/machinery/computer/security/New() ..() verbs -= /obj/machinery/computer/security/verb/station_map /obj/machinery/computer/security/attack_ai(var/mob/user as mob) return attack_hand(user) /obj/machinery/computer/security/attack_paw(var/mob/user as mob) return attack_hand(user) /obj/machinery/computer/security/check_eye(var/mob/user as mob) if ((get_dist(user, src) > 1 || !( user.canmove ) || user.blinded || !( current ) || !( current.status )) && (!istype(user, /mob/living/silicon))) return null user.reset_view(current) return 1 /obj/machinery/computer/card/attack_ai(var/mob/user as mob) return attack_hand(user) /obj/machinery/computer/card/attack_paw(var/mob/user as mob) return attack_hand(user) /obj/machinery/computer/card/attack_hand(var/mob/user as mob) if(..()) return user.machine = src var/dat if (!( ticker )) return if (mode) // accessing crew manifest var/crew = "" for(var/datum/data/record/t in data_core.general) crew += "[t.fields["name"]] - [t.fields["rank"]]
" dat = "Crew Manifest:
Please use security record computer to modify entries.
[crew]Print

Access ID modification console.
" else var/header = "Identification Card Modifier
Please insert the cards into the slots
" var/target_name var/target_owner var/target_rank if(modify) target_name = modify.name else target_name = "--------" if(modify && modify.registered) target_owner = modify.registered else target_owner = "--------" if(modify && modify.assignment) target_rank = modify.assignment else target_rank = "Unassigned" header += "Target: [target_name]
" var/scan_name if(scan) scan_name = scan.name else scan_name = "--------" header += "Confirm Identity: [scan_name]
" header += "
" var/body if (authenticated && modify) var/carddesc = "Registered: [target_owner]
Assignment: [target_rank]" var/jobs = "" var/list/alljobs = (istype(src,/obj/machinery/computer/card/centcom)? get_all_centcom_jobs() : get_all_jobs()) + "Custom" for(var/job in alljobs) jobs += "[dd_replacetext(job, " ", " ")] " //make sure there isn't a line break in the middle of a job var/accesses = "" if(istype(src,/obj/machinery/computer/card/centcom)) accesses += "
Central Command:
" for(var/A in get_all_centcom_access()) if(A in modify.access) accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] " else accesses += "[dd_replacetext(get_centcom_access_desc(A), " ", " ")] " else for(var/i = 1; i <= 7; i++) accesses += "[get_region_accesses_name(i)]: " for(var/A in get_region_accesses(i)) if(A in modify.access) accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] " else accesses += "[dd_replacetext(get_access_desc(A), " ", " ")] " accesses += "
" body = "[carddesc]
[jobs]

[accesses]" else body = "{Log in}" dat = "[header][body]
Access Crew Manifest
" user << browse(dat, "window=id_com;size=700x520") onclose(user, "id_com") return /obj/machinery/computer/card/Topic(href, href_list) if(..()) return usr.machine = src switch(href_list["choice"]) if ("modify") if (modify) modify.name = text("[]'s ID Card ([])", modify.registered, modify.assignment) modify.loc = loc modify = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src modify = I authenticated = 0 if ("scan") if (scan) scan.loc = loc scan = null else var/obj/item/I = usr.equipped() if (istype(I, /obj/item/weapon/card/id)) usr.drop_item() I.loc = src scan = I authenticated = 0 if ("auth") if ((!( authenticated ) && (scan || (istype(usr, /mob/living/silicon))) && (modify || mode))) if (check_access(scan)) authenticated = 1 else if ((!( authenticated ) && (istype(usr, /mob/living/silicon))) && (!modify)) usr << "You can't modify an ID without an ID inserted to modify. Once one is in the modify slot on the computer, you can log in." if("access") if(href_list["allowed"]) if(authenticated) var/access_type = text2num(href_list["access_target"]) var/access_allowed = text2num(href_list["allowed"]) if(access_type in (istype(src,/obj/machinery/computer/card/centcom)?get_all_centcom_access() : get_all_accesses())) modify.access -= access_type if(access_allowed == 1) modify.access += access_type if ("assign") if (authenticated) var/t1 = href_list["assign_target"] if(t1 == "Custom") t1 = input("Enter a custom job assignment.","Assignment") else modify.access = ( istype(src,/obj/machinery/computer/card/centcom) ? get_centcom_access(t1) : get_access(t1) ) if (modify) modify.assignment = t1 if ("reg") if (authenticated) var/t2 = modify var/t1 = input(usr, "What name?", "ID computer", null) as text if ((authenticated && modify == t2 && (in_range(src, usr) || (istype(usr, /mob/living/silicon))) && istype(loc, /turf))) modify.registered = t1 if ("mode") mode = text2num(href_list["mode_target"]) if ("print") if (!( printing )) printing = 1 sleep(50) var/obj/item/weapon/paper/P = new /obj/item/weapon/paper( loc ) var/t1 = "Crew Manifest:
" for(var/datum/data/record/t in data_core.general) t1 += "[t.fields["name"]] - [t.fields["rank"]]
" P.info = t1 P.name = "paper- 'Crew Manifest'" printing = null if (modify) modify.name = text("[]'s ID Card ([])", modify.registered, modify.assignment) updateUsrDialog() return /obj/datacore/proc/manifest() for(var/mob/living/carbon/human/H in world) if (!isnull(H.mind) && (H.mind.assigned_role != "MODE")) var/datum/data/record/G = new() var/datum/data/record/M = new() var/datum/data/record/S = new() var/datum/data/record/L = new() var/obj/item/weapon/card/id/C = H.wear_id if (C) G.fields["rank"] = C.assignment else G.fields["rank"] = "Unassigned" G.fields["name"] = H.real_name G.fields["id"] = text("[]", add_zero(num2hex(rand(1, 1.6777215E7)), 6)) M.fields["name"] = G.fields["name"] M.fields["id"] = G.fields["id"] S.fields["name"] = G.fields["name"] S.fields["id"] = G.fields["id"] if (H.gender == FEMALE) G.fields["sex"] = "Female" else G.fields["sex"] = "Male" G.fields["age"] = text("[]", H.age) G.fields["fingerprint"] = text("[]", md5(H.dna.uni_identity)) G.fields["p_stat"] = "Active" G.fields["m_stat"] = "Stable" M.fields["b_type"] = text("[]", H.b_type) M.fields["b_dna"] = H.dna.unique_enzymes M.fields["mi_dis"] = "None" M.fields["mi_dis_d"] = "No minor disabilities have been declared." M.fields["ma_dis"] = "None" M.fields["ma_dis_d"] = "No major disabilities have been diagnosed." M.fields["alg"] = "None" M.fields["alg_d"] = "No allergies have been detected in this patient." M.fields["cdi"] = "None" M.fields["cdi_d"] = "No diseases have been diagnosed at the moment." M.fields["notes"] = "No notes." S.fields["criminal"] = "None" S.fields["mi_crim"] = "None" S.fields["mi_crim_d"] = "No minor crime convictions." S.fields["ma_crim"] = "None" S.fields["ma_crim_d"] = "No major crime convictions." S.fields["notes"] = "No notes." //Begin locked reporting L.fields["name"] = H.real_name L.fields["sex"] = H.gender L.fields["age"] = H.age L.fields["id"] = md5("[H.real_name][H.mind.assigned_role]") L.fields["rank"] = H.mind.assigned_role L.fields["b_type"] = H.b_type L.fields["b_dna"] = H.dna.unique_enzymes L.fields["enzymes"] = H.dna.struc_enzymes L.fields["identity"] = H.dna.uni_identity L.fields["image"] = getFlatIcon(H,0) //End locked reporting general += G medical += M security += S locked += L return /obj/machinery/computer/pod/proc/alarm() if(stat & (NOPOWER|BROKEN)) return if (!( connected )) viewers(null, null) << "Cannot locate mass driver connector. Cancelling firing sequence!" return for(var/obj/machinery/door/poddoor/M in machines) if (M.id == id) spawn( 0 ) M.open() return sleep(20) //connected.drive() *****RM from 40.93.3S for(var/obj/machinery/mass_driver/M in machines) if(M.id == id) M.power = connected.power M.drive() sleep(50) for(var/obj/machinery/door/poddoor/M in machines) if (M.id == id) spawn( 0 ) M.close() return return /obj/machinery/computer/pod/New() ..() spawn( 5 ) for(var/obj/machinery/mass_driver/M in machines) if (M.id == id) connected = M else return return /obj/machinery/computer/pod/attackby(I as obj, user as mob) if(istype(I, /obj/item/weapon/screwdriver)) playsound(loc, 'Screwdriver.ogg', 50, 1) if(do_after(user, 20)) if (stat & BROKEN) user << "\blue The broken glass falls out." var/obj/computerframe/A = new /obj/computerframe( loc ) new /obj/item/weapon/shard( loc ) //generate appropriate circuitboard. Accounts for /pod/old computer types var/obj/item/weapon/circuitboard/pod/M = null if(istype(src, /obj/machinery/computer/pod/old)) M = new /obj/item/weapon/circuitboard/olddoor( A ) if(istype(src, /obj/machinery/computer/pod/old/syndicate)) M = new /obj/item/weapon/circuitboard/syndicatedoor( A ) if(istype(src, /obj/machinery/computer/pod/old/swf)) M = new /obj/item/weapon/circuitboard/swfdoor( A ) else //it's not an old computer. Generate standard pod circuitboard. M = new /obj/item/weapon/circuitboard/pod( A ) for (var/obj/C in src) C.loc = loc M.id = id A.circuit = M A.state = 3 A.icon_state = "3" A.anchored = 1 del(src) else user << "\blue You disconnect the monitor." var/obj/computerframe/A = new /obj/computerframe( loc ) //generate appropriate circuitboard. Accounts for /pod/old computer types var/obj/item/weapon/circuitboard/pod/M = null if(istype(src, /obj/machinery/computer/pod/old)) M = new /obj/item/weapon/circuitboard/olddoor( A ) if(istype(src, /obj/machinery/computer/pod/old/syndicate)) M = new /obj/item/weapon/circuitboard/syndicatedoor( A ) if(istype(src, /obj/machinery/computer/pod/old/swf)) M = new /obj/item/weapon/circuitboard/swfdoor( A ) else //it's not an old computer. Generate standard pod circuitboard. M = new /obj/item/weapon/circuitboard/pod( A ) for (var/obj/C in src) C.loc = loc M.id = id A.circuit = M A.state = 4 A.icon_state = "4" A.anchored = 1 del(src) else attack_hand(user) return /obj/machinery/computer/pod/attack_ai(var/mob/user as mob) return attack_hand(user) /obj/machinery/computer/pod/attack_paw(var/mob/user as mob) return attack_hand(user) /obj/machinery/computer/pod/attack_hand(var/mob/user as mob) if(..()) return var/dat = "Mass Driver Controls" user.machine = src var/d2 if (timing) d2 = text("Stop Time Launch", src) else d2 = text("Initiate Time Launch", src) var/second = time % 60 var/minute = (time - second) / 60 dat += text("
\nTimer System: []\nTime Left: [][] - - + +", d2, (minute ? text("[]:", minute) : null), second, src, src, src, src) if (connected) var/temp = "" var/list/L = list( 0.25, 0.5, 1, 2, 4, 8, 16 ) for(var/t in L) if (t == connected.power) temp += text("[] ", t) else temp += text("[] ", src, t, t) //Foreach goto(172) dat += text("
\nPower Level: []
\nFiring Sequence
\nTest Fire Driver
\nToggle Outer Door
", temp, src, src, src) //*****RM from 40.93.3S else dat += text("
\nToggle Outer Door
", src) //***** dat += text("

Close
", user) user << browse(dat, "window=computer;size=400x500") onclose(user, "computer") return /obj/machinery/computer/pod/process() ..() if (timing) if (time > 0) time = round(time) - 1 else alarm() time = 0 timing = 0 updateDialog() return /obj/machinery/computer/pod/Topic(href, href_list) if(..()) return if ((usr.contents.Find(src) || (in_range(src, usr) && istype(loc, /turf))) || (istype(usr, /mob/living/silicon))) usr.machine = src if (href_list["power"]) var/t = text2num(href_list["power"]) t = min(max(0.25, t), 16) if (connected) connected.power = t else if (href_list["alarm"]) alarm() else if (href_list["time"]) timing = text2num(href_list["time"]) else if (href_list["tp"]) var/tp = text2num(href_list["tp"]) time += tp time = min(max(round(time), 0), 120) else if (href_list["door"]) if(istype(src, /obj/machinery/computer/pod/old/syndicate))//Added here so Nuke ops don't go running naked into space before moving the shuttle. if(syndicate_station_at_station == 0) usr << "\red You need to launch the Syndicate Shuttle via the computer terminal at the head of the ship before departing." return for(var/obj/machinery/door/poddoor/M in machines) if (M.id == id) if (M.density) spawn( 0 ) M.open() return else spawn( 0 ) M.close() return //Foreach goto(298) add_fingerprint(usr) updateUsrDialog() return /obj/machinery/mass_driver/proc/drive(amount) if(stat & (BROKEN|NOPOWER)) return use_power(500) var/O_limit var/atom/target = get_edge_target_turf(src, dir) for(var/atom/movable/O in loc) if(!O.anchored||istype(O, /obj/mecha))//Mechs need their launch platforms. O_limit++ if(O_limit >= 20) for(var/mob/M in hearers(src, null)) M << "\blue The mass driver lets out a screech, it mustn't be able to handle any more items." break use_power(500) spawn( 0 ) O.throw_at(target, drive_range * power, power) flick("mass_driver1", src) return