From 15f54c595bdc6401e58a4e7259aaa308e2486e44 Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Mon, 17 Aug 2015 09:12:40 +0200 Subject: [PATCH] Synths now relies on access permissions as well. Ensures station bound synthetics will not be able to utilize Syndicate/Heist equipment/vessels, as well as the opposite for potential syndicate synths. --- code/datums/wires/airlock.dm | 2 +- code/game/jobs/access.dm | 4 ++-- code/game/objects/objs.dm | 14 ++++++++++++-- code/modules/mob/living/silicon/robot/robot.dm | 1 + .../mob/living/silicon/robot/robot_items.dm | 7 ------- code/modules/mob/living/silicon/silicon.dm | 4 ++++ 6 files changed, 20 insertions(+), 12 deletions(-) diff --git a/code/datums/wires/airlock.dm b/code/datums/wires/airlock.dm index a0f1f9c7f1..3c247d6c7f 100644 --- a/code/datums/wires/airlock.dm +++ b/code/datums/wires/airlock.dm @@ -161,7 +161,7 @@ var/const/AIRLOCK_WIRE_LIGHT = 2048 if(A.emagged) return if(!A.requiresID() || A.check_access(null)) if(A.density) A.open() - else A.close() + else A.close() if(AIRLOCK_WIRE_SAFETY) A.safe = !A.safe if(!A.density) diff --git a/code/game/jobs/access.dm b/code/game/jobs/access.dm index 09fc65bf41..b364db8c77 100644 --- a/code/game/jobs/access.dm +++ b/code/game/jobs/access.dm @@ -9,8 +9,8 @@ if(src.check_access(null)) return 1 if(istype(M, /mob/living/silicon)) - //AI can do whatever he wants - return 1 + var/mob/living/silicon/S = M + return check_access_list(S.access_rights) else if(istype(M, /mob/living/carbon/human)) var/mob/living/carbon/human/H = M //if they are holding or wearing a card that has access, that works diff --git a/code/game/objects/objs.dm b/code/game/objects/objs.dm index cfa2de777b..afe246ba17 100644 --- a/code/game/objects/objs.dm +++ b/code/game/objects/objs.dm @@ -33,9 +33,19 @@ CouldNotUseTopic(usr) return 1 +/obj/CanUseTopic(var/mob/user, var/datum/topic_state/state) + if(user.CanUseObjTopic(src)) + return ..() + return STATUS_CLOSE + +/mob/living/silicon/CanUseObjTopic(var/obj/O) + return O.allowed(src) + +/mob/proc/CanUseObjTopic() + /obj/proc/CouldUseTopic(var/mob/user) var/atom/host = nano_host() - host.add_fingerprint(user) + host.add_hiddenprint(user) /obj/proc/CouldNotUseTopic(var/mob/user) // Nada @@ -142,4 +152,4 @@ return /obj/proc/show_message(msg, type, alt, alt_type)//Message, type of message (1 or 2), alternative message, alt message type (1 or 2) - return + return diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 1159545a54..85541c3acf 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -179,6 +179,7 @@ playsound(loc, 'sound/voice/liveagain.ogg', 75, 1) /mob/living/silicon/robot/syndicate/init() + access_rights = list(access_syndicate) aiCamera = new/obj/item/device/camera/siliconcam/robot_camera(src) laws = new /datum/ai_laws/syndicate_override diff --git a/code/modules/mob/living/silicon/robot/robot_items.dm b/code/modules/mob/living/silicon/robot/robot_items.dm index ade9bf0f93..2d591f4c36 100644 --- a/code/modules/mob/living/silicon/robot/robot_items.dm +++ b/code/modules/mob/living/silicon/robot/robot_items.dm @@ -105,13 +105,6 @@ desc = "A circuit grafted onto the bottom of an ID card. It is used to transmit access codes into other robot chassis, \ allowing you to lock and unlock other robots' panels." -/obj/item/weapon/card/id/robot/attack_self() //override so borgs can't flash their IDs. - return - -/obj/item/weapon/card/id/robot/read() - usr << "The ID card does not appear to have any writing on it." - return - //A harvest item for serviceborgs. /obj/item/weapon/robot_harvester name = "auto harvester" diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index 9bb71d2210..c39482cc22 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -23,12 +23,16 @@ var/next_alarm_notice var/list/datum/alarm/queued_alarms = new() + var/list/access_rights + #define SEC_HUD 1 //Security HUD mode #define MED_HUD 2 //Medical HUD mode /mob/living/silicon/New() silicon_mob_list |= src ..() + access_rights = get_all_station_access() + access_rights = access_rights.Copy() add_language("Galactic Common") init_subsystems()