Files
2016-03-06 20:52:14 +01:00

411 lines
17 KiB
Plaintext

// Note: Don't forget to check and modify /obj/machinery/computer/card (the ID computer) as needed
// when you re-enable old credentials or add new ones.
// Also check proc/get_access_desc() (ID computer lookup) at the bottom of this file.
/var/const
access_fuck_all = 0 //Because completely empty access lists can make things grump
access_security = 1
access_brig = 2
access_armory = 3 // Unused and replaced by maxsec (HoS-exclusive).
access_forensics_lockers = 4
access_medical = 5
access_morgue = 6
access_tox = 7
access_tox_storage = 8
access_medlab = 9
access_medical_lockers = 10
access_research_director = 11
access_maint_tunnels = 12
access_external_airlocks = 13 // Unused. Most are all- or maintenance access these days.
access_emergency_storage = 14
access_change_ids = 15
access_ai_upload = 16
access_teleporter = 17
access_eva = 18
access_heads = 19 // Mostly just the bridge.
access_captain = 20
access_all_personal_lockers = 21 // Unused. Personal lockers are always linked to ID that was swiped first.
access_chapel_office = 22
access_tech_storage = 23
access_research = 24
access_bar = 25
access_janitor = 26
access_crematorium = 27
access_kitchen = 28
access_robotics = 29
access_hangar = 30 // Unused. Theoretically the pod hangars, but not implemented as such in practice.
access_cargo = 31 // QM.
access_construction = 32 // Unused.
access_chemistry = 33
access_dwaine_superuser = 34 // So it's not the same as the RD's office and locker.
access_hydro = 35
access_mail = 36 // Unused.
access_maxsec = 37 // The HoS' armory.
access_securitylockers = 38
access_carrypermit = 39 // Are allowed to carry sidearms as far as guardbuddies and secbots are concerned.
access_engineering = 40 // General engineering area and substations.
access_engineering_storage = 41 // Main metal/tool storage things.
access_engineering_eva = 42 // Engineering space suits. Currently unused.
access_engineering_power = 43 // APCs and related supplies.
access_engineering_engine = 44 // Engine room.
access_engineering_mechanic = 45 // Electronics lab.
access_engineering_atmos = 46 // Engineering's supply of gas canisters.
access_engineering_control = 48 // Engine control room.
access_engineering_chief = 49 // CE's office.
access_mining_shuttle = 47
access_mining = 50
access_mining_outpost = 51
access_syndicate_shuttle = 52 // Also to the listening post.
access_medical_director = 53
access_head_of_personnel = 55
access_special_club = 54 //Shouldnt be used for general gameplay. Used for adminevents.
/obj/var/list/req_access = null
/obj/var/req_access_txt = "0"
/obj/var/req_only_one_required = 0
/obj/New()
if(src.req_access_txt && src.req_access_txt != "0")
var/req_access_str = params2list(req_access_txt)
req_access = list()
for(var/x in req_access_str)
var/n = text2num(x)
if(n)
req_access += n
..()
//returns 1 if this mob has sufficient access to use this object
/obj/proc/allowed(mob/M, acceptIfAny=0)
//check if it doesn't require any access at all
if (src.check_access(null))
return 1
if (M && ismob(M))
if (src.check_access(M.equipped(), acceptIfAny))
return 1
if (ishuman(M))
var/mob/living/carbon/human/H = M
//if they are holding or wearing a card that has access, that works
if (src.check_access(H.wear_id, acceptIfAny))
return 1
else if (issilicon(M))
var/mob/living/silicon/S = M
if (src.check_access(S.botcard, acceptIfAny))
return 1
return 0
/obj/proc/check_access(obj/item/I, acceptAny=0)
if(!src.req_access) //no requirements
return 1
if(!istype(src.req_access, /list)) //something's very wrong
return 1
if (istype(I, /obj/item/device/pda2))
var/obj/item/device/pda2/P = I
if (P.ID_card)
I = P.ID_card
var/obj/item/card/id/ID = I
if (!istype(ID))
return 0
var/list/L = src.req_access
if(!L.len) //no requirements
return 1
if(!ID.access) //not ID or no access
return 0
if (acceptAny)
for(var/req in src.req_access)
if (req in ID.access)
return 1
return 0
else
for(var/req in src.req_access)
if(!(req in ID.access)) //doesn't have this access
return 0
return 1
// I moved all the duplicate definitions from jobs.dm to this global lookup proc.
// Advantages: can be used by other stuff (bots etc), and there's less code to maintain (Convair880).
/proc/get_access(job)
switch(job)
///////////////////////////// Heads of staff
if("Captain")
return get_all_accesses()
if("Head of Personnel")
return list(access_security, access_carrypermit, access_brig, access_forensics_lockers, access_armory,
access_tox, access_tox_storage, access_chemistry, access_medical, access_medlab,
access_emergency_storage, access_change_ids, access_eva, access_heads, access_head_of_personnel, access_medical_lockers,
access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor,
access_crematorium, access_kitchen, access_robotics, access_cargo,
access_research, access_hydro, access_mail, access_ai_upload)
if("Head of Security")
if (map_setting == "DESTINY")
var/list/hos_access = get_all_accesses()
hos_access += access_maxsec
return hos_access
return list(access_security, access_carrypermit, access_maxsec, access_brig, access_securitylockers, access_forensics_lockers, access_armory,
access_tox, access_tox_storage, access_chemistry, access_medical, access_medlab,
access_emergency_storage, access_change_ids, access_eva, access_heads, access_medical_lockers,
access_all_personal_lockers, access_tech_storage, access_maint_tunnels, access_bar, access_janitor,
access_crematorium, access_kitchen, access_robotics, access_cargo,
access_research, access_dwaine_superuser, access_hydro, access_mail, access_ai_upload)
if("Research Director")
return list(access_research, access_research_director, access_dwaine_superuser,
access_tech_storage, access_maint_tunnels, access_heads, access_eva, access_tox,
access_tox_storage, access_chemistry, access_teleporter, access_ai_upload)
if("Medical Director", "Head Surgeon")
return list(access_robotics, access_medical, access_morgue,
access_maint_tunnels, access_tech_storage, access_medical_lockers,
access_medlab, access_heads, access_eva, access_medical_director, access_ai_upload)
if("Chief Engineer")
return list(access_engineering, access_maint_tunnels, access_external_airlocks,
access_tech_storage, access_engineering_storage, access_engineering_eva, access_engineering_atmos,
access_engineering_power, access_engineering_engine, access_mining_shuttle,
access_engineering_control, access_engineering_mechanic, access_engineering_chief, access_mining, access_mining_outpost,
access_heads, access_ai_upload, access_construction, access_eva, access_cargo, access_hangar)
if("Head of Mining", "Mining Supervisor")
return list(access_engineering, access_maint_tunnels, access_external_airlocks,
access_engineering_eva, access_mining_shuttle, access_mining,
access_mining_outpost, access_hangar, access_heads, access_ai_upload, access_construction, access_eva)
///////////////////////////// Security
if("Security Officer")
if (map_setting == "DESTINY") // trying out giving them more access for RP
return list(access_security, access_brig, access_forensics_lockers, access_armory,
access_medical, access_medlab, access_morgue, access_securitylockers,
access_tox, access_tox_storage, access_chemistry, access_carrypermit,
access_emergency_storage, access_chapel_office, access_kitchen, access_medical_lockers,
access_bar, access_janitor, access_crematorium, access_robotics, access_cargo, access_construction, access_hydro, access_mail,
access_engineering, access_maint_tunnels, access_external_airlocks,
access_tech_storage, access_engineering_storage, access_engineering_eva,
access_engineering_power, access_engineering_engine, access_mining_shuttle,
access_engineering_control, access_engineering_mechanic, access_mining, access_mining_outpost,
access_research, access_engineering_atmos, access_hangar)
return list(access_security, access_carrypermit, access_securitylockers, access_brig, access_maint_tunnels, access_medical, access_morgue, access_crematorium, access_research)
if("Vice Officer")
return list(access_security, access_carrypermit, access_securitylockers, access_brig, access_maint_tunnels,access_hydro,access_bar,access_kitchen)
if("Detective", "Forensic Technician")
return list(access_brig, access_carrypermit, access_security, access_forensics_lockers, access_morgue, access_maint_tunnels, access_crematorium, access_medical, access_research)
if("Lawyer")
return list(access_maint_tunnels, access_security, access_brig)
///////////////////////////// Medical
if("Medical Doctor")
return list(access_medical, access_medical_lockers, access_morgue, access_maint_tunnels)
if("Geneticist")
return list(access_medical, access_medical_lockers, access_morgue, access_medlab, access_maint_tunnels)
if("Roboticist")
return list(access_robotics, access_tech_storage, access_medical, access_medical_lockers, access_morgue, access_maint_tunnels)
if("Pharmacist")
return list(access_research,access_tech_storage, access_maint_tunnels, access_chemistry,
access_medical_lockers, access_medical, access_morgue)
if("Medical Assistant")
return list(access_maint_tunnels, access_tech_storage, access_medical, access_morgue)
///////////////////////////// Science
if("Scientist")
return list(access_tox, access_tox_storage, access_research, access_chemistry)
if("Chemist")
return list(access_research, access_chemistry)
if("Toxins Researcher")
return list(access_research, access_tox, access_tox_storage)
if("Research Assistant")
return list(access_maint_tunnels, access_tech_storage, access_research)
//////////////////////////// Engineering
if("Mechanic")
return list(access_maint_tunnels, access_external_airlocks,
access_tech_storage,access_engineering_mechanic,access_engineering_power)
if("Atmospheric Technician")
return list(access_maint_tunnels, access_external_airlocks, access_construction,
access_eva, access_engineering, access_engineering_storage, access_engineering_eva, access_engineering_atmos)
if("Engineer")
return list(access_engineering,access_maint_tunnels,access_external_airlocks,
access_engineering_storage,access_engineering_atmos,access_engineering_engine,access_engineering_power)
if("Miner")
return list(access_maint_tunnels, access_external_airlocks,
access_engineering_eva, access_mining_shuttle, access_mining,
access_mining_outpost, access_hangar)
if("Quartermaster")
return list(access_maint_tunnels, access_cargo, access_hangar)
if("Construction Worker")
return list(access_engineering,access_maint_tunnels,access_external_airlocks,
access_engineering_storage,access_engineering_atmos,access_engineering_engine,access_engineering_power)
///////////////////////////// Civilian
if("Chaplain")
return list(access_morgue, access_chapel_office, access_crematorium)
if("Janitor")
return list(access_janitor, access_maint_tunnels, access_medical, access_morgue, access_crematorium)
if("Botanist", "Apiculturist")
return list(access_maint_tunnels, access_hydro)
if("Chef", "Sous-Chef")
return list(access_kitchen)
if("Barman")
return list(access_bar)
if("Waiter")
return list(access_bar, access_kitchen)
if("Clown", "Boxer", "Barber")
return list(access_maint_tunnels)
if("Assistant", "Staff Assistant", "Technical Assistant")
return list(access_maint_tunnels, access_tech_storage)
if("Mailman")
return list(access_maint_tunnels, access_mail)
//////////////////////////// Other or gimmick
if("Rescue Worker")
return get_all_accesses()
if("VIP")
return list(access_heads, access_carrypermit) // Their cane is contraband.
if("Space Cowboy")
return list(access_maint_tunnels, access_carrypermit)
if("Club member")
return list(access_special_club)
if("Inspector")
return list(access_security, access_tox, access_tox_storage, access_chemistry, access_medical, access_medlab,
access_emergency_storage, access_eva, access_heads, access_tech_storage, access_maint_tunnels, access_bar, access_janitor,
access_kitchen, access_robotics, access_cargo, access_research, access_hydro)
else
return list()
/proc/get_all_accesses()
return list(access_security, access_brig, access_forensics_lockers, access_armory,
access_medical, access_medlab, access_morgue, access_securitylockers,
access_tox, access_tox_storage, access_chemistry, access_carrypermit,
access_emergency_storage, access_change_ids, access_ai_upload,
access_teleporter, access_eva, access_heads, access_captain, access_all_personal_lockers, access_head_of_personnel,
access_chapel_office, access_kitchen, access_medical_lockers,
access_bar, access_janitor, access_crematorium, access_robotics, access_cargo, access_construction, access_hydro, access_mail,
access_engineering, access_maint_tunnels, access_external_airlocks,
access_tech_storage, access_engineering_storage, access_engineering_eva,
access_engineering_power, access_engineering_engine, access_mining_shuttle,
access_engineering_control, access_engineering_mechanic, access_engineering_chief, access_mining, access_mining_outpost,
access_research, access_research_director, access_dwaine_superuser, access_engineering_atmos, access_hangar, access_medical_director, access_special_club)
var/list/access_name_lookup //Generated at round start.
//Build the access_name_lookup table, to associate descriptions of accesses with their numerical value.
/proc/generate_access_name_lookup()
if (access_name_lookup)
return
access_name_lookup = list()
var/list/accesses = get_all_accesses()
for (var/accessNum in accesses)
access_name_lookup += "[get_access_desc(accessNum)]"
access_name_lookup = sortList(access_name_lookup) //Make the list all nice and alphabetical.
for (var/accessNum in accesses)
access_name_lookup["[get_access_desc(accessNum)]"] = accessNum
/proc/get_access_desc(A)
switch(A)
if(access_cargo)
return "Cargo Bay"
if(access_security)
return "Security"
if(access_forensics_lockers)
return "Forensics"
if(access_securitylockers)
return "Security Equipment"
if(access_medical)
return "Medical"
if(access_medical_lockers)
return "Medical Equipment"
if(access_medlab)
return "Med-Sci/Genetics"
if(access_morgue)
return "Morgue"
if(access_tox)
return "Toxins Research"
if(access_tox_storage)
return "Toxins Storage"
if(access_chemistry)
return "Chemical Lab"
if(access_bar)
return "Bar"
if(access_janitor)
return "Janitorial Equipment"
if(access_maint_tunnels)
return "Maintenance"
if(access_external_airlocks)
return "External Airlock"
if(access_emergency_storage)
return "Emergency Storage"
if(access_change_ids)
return "ID Computer"
if(access_ai_upload)
return "AI Upload"
if(access_teleporter)
return "Teleporter"
if(access_eva)
return "EVA"
if(access_heads)
return "Head's Quarters/Bridge"
if(access_captain)
return "Captain's Quarters"
if(access_all_personal_lockers)
return "Personal Locker Master Key"
if(access_chapel_office)
return "Chaplain's Office"
if(access_tech_storage)
return "Technical Storage"
if(access_crematorium)
return "Crematorium"
if(access_armory)
return "Armory (Command Staff)"
if(access_maxsec)
return "Armory (Head of Security)"
if(access_construction)
return "Construction Site"
if(access_kitchen)
return "Kitchen"
if(access_hydro)
return "Hydroponics"
if(access_mail)
return "Mailroom"
if(access_research)
return "Research Sector"
if(access_research_director)
return "Research Director's Office"
if(access_engineering)
return "Engineering"
if(access_engineering_storage)
return "Engineering Storage"
if(access_engineering_eva)
return "Engineering EVA"
if(access_engineering_power)
return "Electrical Equipment (APCs)"
if(access_engineering_engine)
return "Engine Room"
if(access_engineering_mechanic)
return "Mechanical Lab"
if(access_engineering_atmos)
return "Engineering Gas Storage/Atmospherics"
if(access_mining_shuttle)
return "Mining Outpost Shuttle"
if(access_engineering_control)
return "Engine Control Room"
if(access_engineering_chief)
return "Chief Engineer's Office"
if(access_mining)
return "Mining Department"
if(access_mining_outpost)
return "Mining Outpost"
if(access_hangar)
return "Hangar"
if(access_carrypermit)
return "Firearms Carry Permit"
if(access_medical_director)
return "Medical Director's Office"
if(access_robotics)
return "Robotics"
if(access_head_of_personnel)
return "Head of Personnel's Office"
if(access_dwaine_superuser)
return "DWAINE Superuser"