mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2025-12-27 02:32:20 +00:00
164 lines
5.4 KiB
Plaintext
164 lines
5.4 KiB
Plaintext
/obj/machinery/metaldetector
|
|
name = "metal detector"
|
|
desc = "a metal detector. staff can toggle this between ignore security and detect all with their id."
|
|
anchored = 1.0
|
|
density = 0
|
|
icon = 'icons/obj/machines/metal_detector.dmi'
|
|
icon_state = "metaldetector0"
|
|
use_power = 1
|
|
idle_power_usage = 20
|
|
active_power_usage = 250
|
|
var/guncount = 0
|
|
var/knifecount = 0
|
|
var/bombcount = 0
|
|
var/meleecount = 0
|
|
var/detectall = 0
|
|
|
|
/obj/machinery/metaldetector/check_access(obj/item/weapon/card/id/I, list/access_list)
|
|
if(!istype(access_list))
|
|
return 1
|
|
if(!access_list.len) //no requirements
|
|
return 1
|
|
if(istype(I, /obj/item/device/pda))
|
|
var/obj/item/device/pda/pda = I
|
|
I = pda.id
|
|
if(!istype(I) || !I.access) //not ID or no access
|
|
return 0
|
|
return 1
|
|
|
|
/obj/machinery/metaldetector/attackby(obj/item/W as obj, mob/user as mob, params)
|
|
if(istype(W, /obj/item/weapon/card))
|
|
for(var/ID in list(user.equipped(), user:wear_id, user:belt))
|
|
if(src.check_access(ID,list("20")))
|
|
if(!src.detectall)
|
|
src.detectall = 1
|
|
user << "\blue You set the [src] to detect all personnel."
|
|
return
|
|
else
|
|
src.detectall = 0
|
|
user << "\blue You set the [src] to ignore all staff and security."
|
|
return
|
|
else
|
|
user << "\red You lack access to the control panel!"
|
|
return
|
|
|
|
/obj/machinery/metaldetector/emag_act(user as mob)
|
|
if(!emagged)
|
|
emagged = 1
|
|
user << "\blue You short out the circuitry."
|
|
return
|
|
|
|
/obj/machinery/metaldetector/Crossed(AM as mob|obj)
|
|
if(emagged)
|
|
return
|
|
if (istype(AM, /mob/living))
|
|
var/mob/M = AM
|
|
if(!src.detectall)
|
|
if(M:wear_id || M:belt)
|
|
for(var/ID in list(M:equipped(), M:wear_id, M:belt))
|
|
if(src.check_access(ID,list("1", "2", "3", "20", "57", "58")))
|
|
return
|
|
if (istype(M, /mob/living))
|
|
for(var/obj/item/weapon/gun/G in M)
|
|
guncount++
|
|
for(var/obj/item/device/transfer_valve/B in M)
|
|
bombcount++
|
|
for(var/obj/item/weapon/kitchen/utensil/knife/K in M)
|
|
knifecount++
|
|
for(var/obj/item/weapon/kitchenknife/KK in M)
|
|
knifecount++
|
|
for(var/obj/item/weapon/c4/KK in M)
|
|
bombcount++
|
|
for(var/obj/item/weapon/melee/ML in M)
|
|
meleecount++
|
|
if(guncount)
|
|
flick("metaldetector2",src)
|
|
playsound(src.loc, 'sound/effects/alert.ogg', 60, 0)
|
|
for (var/mob/O in viewers(O, null))
|
|
O << "\red <b>[src.name]</b> beeps, \"Alert! Firearm found on [M.name]!\""
|
|
|
|
if(seen_by_camera(M))
|
|
// determine the name of the perp (goes by ID if wearing one)
|
|
var/perpname = M.name
|
|
if(M:wear_id && M:wear_id.registered_name)
|
|
perpname = M:wear_id.registered_name
|
|
// find the matching security record
|
|
for(var/datum/data/record/R in data_core.general)
|
|
if(R.fields["name"] == perpname)
|
|
for (var/datum/data/record/S in data_core.security)
|
|
if (S.fields["id"] == R.fields["id"])
|
|
// now add to rap sheet
|
|
S.fields["criminal"] = "*Arrest*"
|
|
S.fields["mi_crim"] = "Carrying a firearm."
|
|
break
|
|
|
|
guncount = 0
|
|
else if(knifecount)
|
|
flick("metaldetector2",src)
|
|
playsound(src.loc, 'sound/effects/alert.ogg', 60, 0)
|
|
for (var/mob/O in viewers(O, null))
|
|
O << "\red <b>[src.name]</b> beeps, \"Alert! Knife found on [M.name]!\""
|
|
|
|
if(seen_by_camera(M))
|
|
// determine the name of the perp (goes by ID if wearing one)
|
|
var/perpname = M.name
|
|
if(M:wear_id && M:wear_id.registered_name)
|
|
perpname = M:wear_id.registered_name
|
|
// find the matching security record
|
|
for(var/datum/data/record/R in data_core.general)
|
|
if(R.fields["name"] == perpname)
|
|
for (var/datum/data/record/S in data_core.security)
|
|
if (S.fields["id"] == R.fields["id"])
|
|
// now add to rap sheet
|
|
S.fields["criminal"] = "*Arrest*"
|
|
S.fields["mi_crim"] = "Carrying a knife."
|
|
break
|
|
|
|
knifecount = 0
|
|
else if(bombcount)
|
|
flick("metaldetector2",src)
|
|
playsound(src.loc, 'sound/effects/alert.ogg', 60, 0)
|
|
for (var/mob/O in viewers(O, null))
|
|
O << "\red <b>[src.name]</b> beeps, \"Alert! Bomb found on [M.name]!\""
|
|
|
|
if(seen_by_camera(M))
|
|
// determine the name of the perp (goes by ID if wearing one)
|
|
var/perpname = M.name
|
|
if(M:wear_id && M:wear_id.registered_name)
|
|
perpname = M:wear_id.registered_name
|
|
// find the matching security record
|
|
for(var/datum/data/record/R in data_core.general)
|
|
if(R.fields["name"] == perpname)
|
|
for (var/datum/data/record/S in data_core.security)
|
|
if (S.fields["id"] == R.fields["id"])
|
|
// now add to rap sheet
|
|
S.fields["criminal"] = "*Arrest*"
|
|
S.fields["mi_crim"] = "Carrying a bomb."
|
|
break
|
|
|
|
bombcount = 0
|
|
else if(meleecount)
|
|
flick("metaldetector2",src)
|
|
playsound(src.loc, 'sound/effects/alert.ogg', 60, 0)
|
|
for (var/mob/O in viewers(O, null))
|
|
O << "\red <b>[src.name]</b> beeps, \"Alert! Melee weapon found on [M.name]!\""
|
|
|
|
if(seen_by_camera(M))
|
|
// determine the name of the perp (goes by ID if wearing one)
|
|
var/perpname = M.name
|
|
if(M:wear_id && M:wear_id.registered_name)
|
|
perpname = M:wear_id.registered_name
|
|
// find the matching security record
|
|
for(var/datum/data/record/R in data_core.general)
|
|
if(R.fields["name"] == perpname)
|
|
for (var/datum/data/record/S in data_core.security)
|
|
if (S.fields["id"] == R.fields["id"])
|
|
// now add to rap sheet
|
|
S.fields["criminal"] = "*Arrest*"
|
|
S.fields["mi_crim"] = "Carrying a weapon."
|
|
break
|
|
|
|
meleecount = 0
|
|
else
|
|
flick("metaldetector1",src)
|