From 6278d49662fc86cd798dcd9cbac677b126a46537 Mon Sep 17 00:00:00 2001 From: oranges Date: Mon, 25 Sep 2017 11:33:49 +1300 Subject: [PATCH 1/8] Href tokens --- code/controllers/subsystem/shuttle.dm | 2 +- code/game/gamemodes/game_mode.dm | 2 +- .../effects/effect_system/effects_smoke.dm | 4 +- code/game/objects/items/devices/powersink.dm | 2 +- .../objects/items/devices/transfer_valve.dm | 48 +++++++++++++++++++ .../objects/items/grenades/chem_grenade.dm | 2 +- code/modules/admin/sql_message_system.dm | 4 +- .../particle_accelerator/particle_control.dm | 2 +- code/modules/shuttle/emergency.dm | 4 +- code/modules/shuttle/ferry.dm | 2 +- 10 files changed, 60 insertions(+), 12 deletions(-) diff --git a/code/controllers/subsystem/shuttle.dm b/code/controllers/subsystem/shuttle.dm index 4770689778..a5b4a60e84 100644 --- a/code/controllers/subsystem/shuttle.dm +++ b/code/controllers/subsystem/shuttle.dm @@ -220,7 +220,7 @@ SUBSYSTEM_DEF(shuttle) if(call_reason) SSblackbox.add_details("shuttle_reason", call_reason) log_game("Shuttle call reason: [call_reason]") - message_admins("[key_name_admin(user)] has called the shuttle. (TRIGGER CENTCOM RECALL)") + message_admins("[key_name_admin(user)] has called the shuttle. (TRIGGER CENTCOM RECALL)") /datum/controller/subsystem/shuttle/proc/centcom_recall(old_timer, admiral_message) if(emergency.mode != SHUTTLE_CALL || emergency.timer != old_timer) diff --git a/code/game/gamemodes/game_mode.dm b/code/game/gamemodes/game_mode.dm index 4ec01f09e2..f65a64fb08 100644 --- a/code/game/gamemodes/game_mode.dm +++ b/code/game/gamemodes/game_mode.dm @@ -160,7 +160,7 @@ if(config.protect_assistant_from_antagonist) replacementmode.restricted_jobs += "Assistant" - message_admins("The roundtype will be converted. If you have other plans for the station or feel the station is too messed up to inhabit stop the creation of antags or end the round now.") + message_admins("The roundtype will be converted. If you have other plans for the station or feel the station is too messed up to inhabit stop the creation of antags or end the round now.") . = 1 sleep(rand(600,1800)) diff --git a/code/game/objects/effects/effect_system/effects_smoke.dm b/code/game/objects/effects/effect_system/effects_smoke.dm index f09ae53e31..3f32b18178 100644 --- a/code/game/objects/effects/effect_system/effects_smoke.dm +++ b/code/game/objects/effects/effect_system/effects_smoke.dm @@ -283,13 +283,13 @@ var/area/A = get_area(location) var/where = "[A.name] | [location.x], [location.y]" - var/whereLink = "[where]" + var/whereLink = "[where]" if(carry.my_atom.fingerprintslast) var/mob/M = get_mob_by_key(carry.my_atom.fingerprintslast) var/more = "" if(M) - more = "(?) (FLW) " + more = "(?) (FLW) " message_admins("Smoke: ([whereLink])[contained]. Key: [carry.my_atom.fingerprintslast][more].", 0, 1) log_game("A chemical smoke reaction has taken place in ([where])[contained]. Last associated key is [carry.my_atom.fingerprintslast].") else diff --git a/code/game/objects/items/devices/powersink.dm b/code/game/objects/items/devices/powersink.dm index e3f767f9fa..d32ae86090 100644 --- a/code/game/objects/items/devices/powersink.dm +++ b/code/game/objects/items/devices/powersink.dm @@ -138,7 +138,7 @@ if(power_drained > max_power * 0.98) if (!admins_warned) admins_warned = TRUE - message_admins("Power sink at ([x],[y],[z] - JMP) is 95% full. Explosion imminent.") + message_admins("Power sink at ([x],[y],[z] - JMP) is 95% full. Explosion imminent.") playsound(src, 'sound/effects/screech.ogg', 100, 1, 1) if(power_drained >= max_power) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 1b47bbf3f9..77bc239bf4 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -159,6 +159,7 @@ /obj/item/device/transfer_valve/proc/toggle_valve() if(!valve_open && tank_one && tank_two) valve_open = TRUE +<<<<<<< HEAD var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) @@ -204,6 +205,53 @@ else if(valve_open && tank_one && tank_two) split_gases() +======= + var/turf/bombturf = get_turf(src) + var/area/A = get_area(bombturf) + + var/attachment = "no device" + if(attached_device) + if(istype(attached_device, /obj/item/device/assembly/signaler)) + attachment = "[attached_device]" + else + attachment = attached_device + + var/attacher_name = "" + if(!attacher) + attacher_name = "Unknown" + else + attacher_name = "[key_name_admin(attacher)]" + + var/log_str1 = "Bomb valve opened in " + var/log_str2 = "with [attachment] attacher: [attacher_name]" + + var/log_attacher = "" + if(attacher) + log_attacher = "[ADMIN_QUE(attacher)] [ADMIN_FLW(attacher)]" + + var/mob/mob = get_mob_by_key(src.fingerprintslast) + var/last_touch_info = "" + if(mob) + last_touch_info = "[ADMIN_QUE(mob)] [ADMIN_FLW(mob)]" + + var/log_str3 = " Last touched by: [key_name_admin(mob)]" + + var/bomb_message = "[log_str1] [A.name][ADMIN_JMP(bombturf)] [log_str2][log_attacher] [log_str3][last_touch_info]" + + GLOB.bombers += bomb_message + + message_admins(bomb_message, 0, 1) + log_game("[log_str1] [A.name][COORD(bombturf)] [log_str2] [log_str3]") + merge_gases() + spawn(20) // In case one tank bursts + for (var/i=0,i<5,i++) + src.update_icon() + sleep(10) + src.update_icon() + + else if(valve_open && tank_one && tank_two) + split_gases() +>>>>>>> 28d725e... Merge pull request #30975 from ShizCalev/href-tokens valve_open = FALSE src.update_icon() diff --git a/code/game/objects/items/grenades/chem_grenade.dm b/code/game/objects/items/grenades/chem_grenade.dm index b352596e2f..833d215180 100644 --- a/code/game/objects/items/grenades/chem_grenade.dm +++ b/code/game/objects/items/grenades/chem_grenade.dm @@ -292,7 +292,7 @@ var/mob/last = get_mob_by_ckey(nadeassembly.fingerprintslast) var/turf/T = get_turf(src) var/area/A = get_area(T) - message_admins("grenade primed by an assembly, attached by [key_name_admin(M)](?) (FLW) and last touched by [key_name_admin(last)](?) (FLW) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") + message_admins("grenade primed by an assembly, attached by [key_name_admin(M)](?) (FLW) and last touched by [key_name_admin(last)](?) (FLW) ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] (JMP).") log_game("grenade primed by an assembly, attached by [key_name(M)] and last touched by [key_name(last)] ([nadeassembly.a_left.name] and [nadeassembly.a_right.name]) at [A.name] ([T.x], [T.y], [T.z])") else addtimer(CALLBACK(src, .proc/prime), det_time) diff --git a/code/modules/admin/sql_message_system.dm b/code/modules/admin/sql_message_system.dm index 0664656f77..99b68cac16 100644 --- a/code/modules/admin/sql_message_system.dm +++ b/code/modules/admin/sql_message_system.dm @@ -147,10 +147,10 @@ return var/output var/ruler = "
" - var/navbar = "\[All\]|\[#\]" + var/navbar = "\[All\]|\[#\]" for(var/letter in GLOB.alphabet) navbar += "|\[[letter]\]" - navbar += "|\[Memos\]|\[Watchlist\]" + navbar += "|\[Memos\]|\[Watchlist\]" navbar += "
\ \ \ diff --git a/code/modules/power/singularity/particle_accelerator/particle_control.dm b/code/modules/power/singularity/particle_accelerator/particle_control.dm index e5e65beb6e..382853066d 100644 --- a/code/modules/power/singularity/particle_accelerator/particle_control.dm +++ b/code/modules/power/singularity/particle_accelerator/particle_control.dm @@ -204,7 +204,7 @@ /obj/machinery/particle_accelerator/control_box/proc/toggle_power() active = !active investigate_log("turned [active?"ON":"OFF"] by [usr ? key_name(usr) : "outside forces"]", INVESTIGATE_SINGULO) - message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name_admin(usr) : "outside forces"](?) (FLW) in ([x],[y],[z] - JMP)",0,1) + message_admins("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? key_name_admin(usr) : "outside forces"](?) (FLW) in ([x],[y],[z] - JMP)",0,1) log_game("PA Control Computer turned [active ?"ON":"OFF"] by [usr ? "[key_name(usr)]" : "outside forces"] in ([x],[y],[z])") if(active) use_power = ACTIVE_POWER_USE diff --git a/code/modules/shuttle/emergency.dm b/code/modules/shuttle/emergency.dm index b4dee0b59b..c3549abc4d 100644 --- a/code/modules/shuttle/emergency.dm +++ b/code/modules/shuttle/emergency.dm @@ -144,8 +144,8 @@ var/time = TIME_LEFT message_admins("[key_name_admin(user.client)] \ - (?) \ - (FLW) \ + (?) \ + (FLW) \ has emagged the emergency shuttle [time] seconds before launch.", 0, 1) log_game("[key_name(user)] has emagged the emergency shuttle in \ [COORD(src)] [time] seconds before launch.") diff --git a/code/modules/shuttle/ferry.dm b/code/modules/shuttle/ferry.dm index dce6f509ff..5b27e562f3 100644 --- a/code/modules/shuttle/ferry.dm +++ b/code/modules/shuttle/ferry.dm @@ -30,4 +30,4 @@ return last_request = world.time to_chat(usr, "Your request has been recieved by CentCom.") - to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") + to_chat(GLOB.admins, "FERRY: [ADMIN_LOOKUPFLW(usr)] (Move Ferry) is requesting to move the transport ferry to CentCom.") From a6ae23aefbdd57ccea2bb51b369c15bd78418518 Mon Sep 17 00:00:00 2001 From: oranges Date: Mon, 25 Sep 2017 11:34:46 +1300 Subject: [PATCH 2/8] Merge pull request #30984 from tgstation/Cyberboss-patch-4 Makes keywords_lookup use the global token --- code/modules/admin/verbs/adminhelp.dm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/modules/admin/verbs/adminhelp.dm b/code/modules/admin/verbs/adminhelp.dm index 16f654bb80..d3b36b95e9 100644 --- a/code/modules/admin/verbs/adminhelp.dm +++ b/code/modules/admin/verbs/adminhelp.dm @@ -679,7 +679,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new) if(found.mind && found.mind.special_role) is_antag = 1 founds += "Name: [found.name]([found.real_name]) Ckey: [found.ckey] [is_antag ? "(Antag)" : null] " - msg += "[original_word](?|F) " + msg += "[original_word](?|F) " continue msg += "[original_word] " if(irc) From 11a33956907689b631889e4545f319c6b11c0c31 Mon Sep 17 00:00:00 2001 From: vuonojenmustaturska Date: Mon, 25 Sep 2017 01:41:48 +0300 Subject: [PATCH 4/8] Tiny batch of Initialize() fixes, mostly stuff that isn't around at roundstart --- .../miniantags/abduction/abduction_gear.dm | 2 +- code/game/objects/effects/spawners/bundle.dm | 2 +- .../effects/spawners/xeno_egg_delivery.dm | 2 +- code/game/objects/items/holy_weapons.dm | 6 +- .../objects/structures/ghost_role_spawners.dm | 2 +- code/game/turfs/simulated/chasm.dm | 2 +- code/modules/jobs/job_types/security.dm | 88 +++++++++++++++++++ .../mob/living/simple_animal/parrot.dm | 2 +- 8 files changed, 96 insertions(+), 10 deletions(-) diff --git a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm index c55b4db407..8c6bf1a8aa 100644 --- a/code/game/gamemodes/miniantags/abduction/abduction_gear.dm +++ b/code/game/gamemodes/miniantags/abduction/abduction_gear.dm @@ -532,7 +532,7 @@ Congratulations! You are now trained for invasive xenobiology research!"} flags_2 = BANG_PROTECT_2 /obj/item/device/radio/headset/abductor/Initialize(mapload) - ..() + . = ..() make_syndie() /obj/item/device/radio/headset/abductor/attackby(obj/item/W, mob/user, params) diff --git a/code/game/objects/effects/spawners/bundle.dm b/code/game/objects/effects/spawners/bundle.dm index cfe8761b84..be32f0df19 100644 --- a/code/game/objects/effects/spawners/bundle.dm +++ b/code/game/objects/effects/spawners/bundle.dm @@ -12,7 +12,7 @@ var/turf/T = get_turf(src) for(var/path in items) new path(T) - qdel(src) + return INITIALIZE_HINT_QDEL /obj/effect/spawner/bundle/costume/chicken name = "chicken costume spawner" diff --git a/code/game/objects/effects/spawners/xeno_egg_delivery.dm b/code/game/objects/effects/spawners/xeno_egg_delivery.dm index a452dae749..593c953adf 100644 --- a/code/game/objects/effects/spawners/xeno_egg_delivery.dm +++ b/code/game/objects/effects/spawners/xeno_egg_delivery.dm @@ -17,4 +17,4 @@ log_game("An alien egg has been delivered to [A] at [COORD(T)]") var/message = "Attention [station_name()], we have entrusted you with a research specimen in [A]. Remember to follow all safety precautions when dealing with the specimen." SSticker.OnRoundstart(CALLBACK(GLOBAL_PROC, /proc/addtimer, CALLBACK(GLOBAL_PROC, /.proc/print_command_report, message), announcement_time)) - qdel(src) + return INITIALIZE_HINT_QDEL diff --git a/code/game/objects/items/holy_weapons.dm b/code/game/objects/items/holy_weapons.dm index 417fa670cc..1badef90cf 100644 --- a/code/game/objects/items/holy_weapons.dm +++ b/code/game/objects/items/holy_weapons.dm @@ -383,12 +383,10 @@ flags_2 = SLOWS_WHILE_IN_HAND_2 /obj/item/nullrod/tribal_knife/Initialize(mapload) - ..() - -/obj/item/nullrod/tribal_knife/New() - ..() + . = ..() START_PROCESSING(SSobj, src) + /obj/item/nullrod/tribal_knife/Destroy() STOP_PROCESSING(SSobj, src) . = ..() diff --git a/code/game/objects/structures/ghost_role_spawners.dm b/code/game/objects/structures/ghost_role_spawners.dm index 3bc5c2e762..59aaaca12b 100644 --- a/code/game/objects/structures/ghost_role_spawners.dm +++ b/code/game/objects/structures/ghost_role_spawners.dm @@ -122,7 +122,7 @@ golems, so that no golem may ever be forced to serve again." /obj/effect/mob_spawn/human/golem/Initialize(mapload, datum/species/golem/species = null, mob/creator = null) - ..() + . = ..() if(species) name += " ([initial(species.prefix)])" mob_species = species diff --git a/code/game/turfs/simulated/chasm.dm b/code/game/turfs/simulated/chasm.dm index da92d6b9dd..3fdd6b1cc9 100644 --- a/code/game/turfs/simulated/chasm.dm +++ b/code/game/turfs/simulated/chasm.dm @@ -125,7 +125,7 @@ /turf/open/chasm/straight_down/Initialize() - ..() + . = ..() drop_x = x drop_y = y if(z+1 <= world.maxz) diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index 84623873e8..a64d6e5387 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -230,6 +230,7 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S if(SEC_DEPT_SCIENCE) ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci dep_access = list(ACCESS_RESEARCH) +<<<<<<< HEAD destination = /area/security/checkpoint/science spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns accessory = /obj/item/clothing/accessory/armband/science @@ -315,3 +316,90 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S /obj/item/device/radio/headset/headset_sec/alt/department/sci keyslot = new /obj/item/device/encryptionkey/headset_sec keyslot2 = new /obj/item/device/encryptionkey/headset_sci +======= + destination = /area/security/checkpoint/science + spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/science + + if(accessory) + var/obj/item/clothing/under/U = H.w_uniform + U.attach_accessory(new accessory) + if(ears) + if(H.ears) + qdel(H.ears) + H.equip_to_slot_or_del(new ears(H),slot_ears) + + var/obj/item/card/id/W = H.wear_id + W.access |= dep_access + + var/teleport = 0 + if(!config.sec_start_brig) + if(destination || spawn_point) + teleport = 1 + if(teleport) + var/turf/T + if(spawn_point) + T = get_turf(spawn_point) + H.Move(T) + else + var/safety = 0 + while(safety < 25) + T = safepick(get_area_turfs(destination)) + if(T && !H.Move(T)) + safety += 1 + continue + else + break + if(department) + to_chat(M, "You have been assigned to [department]!") + else + to_chat(M, "You have not been assigned to any department. Patrol the halls and help where needed.") + + + +/datum/outfit/job/security + name = "Security Officer" + jobtype = /datum/job/officer + + belt = /obj/item/device/pda/security + ears = /obj/item/device/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/security + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/helmet/sec + suit = /obj/item/clothing/suit/armor/vest/alt + shoes = /obj/item/clothing/shoes/jackboots + l_pocket = /obj/item/restraints/handcuffs + r_pocket = /obj/item/device/assembly/flash/handheld + suit_store = /obj/item/gun/energy/e_gun/advtaser + backpack_contents = list(/obj/item/melee/baton/loaded=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + box = /obj/item/storage/box/security + + implants = list(/obj/item/implant/mindshield) + + +/obj/item/device/radio/headset/headset_sec/alt/department/Initialize() + . = ..() + wires = new/datum/wires/radio(src) + secure_radio_connections = new + recalculateChannels() + +/obj/item/device/radio/headset/headset_sec/alt/department/engi + keyslot = new /obj/item/device/encryptionkey/headset_sec + keyslot2 = new /obj/item/device/encryptionkey/headset_eng + +/obj/item/device/radio/headset/headset_sec/alt/department/supply + keyslot = new /obj/item/device/encryptionkey/headset_sec + keyslot2 = new /obj/item/device/encryptionkey/headset_cargo + +/obj/item/device/radio/headset/headset_sec/alt/department/med + keyslot = new /obj/item/device/encryptionkey/headset_sec + keyslot2 = new /obj/item/device/encryptionkey/headset_med + +/obj/item/device/radio/headset/headset_sec/alt/department/sci + keyslot = new /obj/item/device/encryptionkey/headset_sec + keyslot2 = new /obj/item/device/encryptionkey/headset_sci +>>>>>>> f14c719... Tiny batch of Initialize() fixes, mostly stuff that isn't around at roundstart (#30980) diff --git a/code/modules/mob/living/simple_animal/parrot.dm b/code/modules/mob/living/simple_animal/parrot.dm index 8f08742f78..6357f83286 100644 --- a/code/modules/mob/living/simple_animal/parrot.dm +++ b/code/modules/mob/living/simple_animal/parrot.dm @@ -972,7 +972,7 @@ /mob/living/simple_animal/parrot/Poly/ghost/Initialize() memory_saved = TRUE //At this point nothing is saved - ..() + . = ..() /mob/living/simple_animal/parrot/Poly/ghost/handle_automated_speech() if(ismob(loc)) From 31f6898a871ca5f02e6fdb705ad67733c757dc3d Mon Sep 17 00:00:00 2001 From: KorPhaeron Date: Sun, 24 Sep 2017 17:57:58 -0500 Subject: [PATCH 5/8] Stops AIs from giving the borg a free secondary light (#30913) * Stops AIs from giving the borg a free secondary light * Using a camera var now * Wrong if * My brain is not working --- code/game/machinery/camera/camera.dm | 2 ++ code/modules/mob/living/silicon/ai/ai.dm | 2 +- code/modules/mob/living/silicon/robot/robot.dm | 1 + 3 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/game/machinery/camera/camera.dm b/code/game/machinery/camera/camera.dm index bc6833f84a..d7832622c5 100644 --- a/code/game/machinery/camera/camera.dm +++ b/code/game/machinery/camera/camera.dm @@ -39,6 +39,8 @@ // Upgrades bitflag var/upgrades = 0 + var/internal_light = TRUE //Whether it can light up when an AI views it + /obj/machinery/camera/Initialize(mapload) . = ..() assembly = new(src) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index 4264ab74c4..3bf2223047 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -740,7 +740,7 @@ var/list/obj/machinery/camera/visible = list() for (var/datum/camerachunk/CC in eyeobj.visibleCameraChunks) for (var/obj/machinery/camera/C in CC.cameras) - if (!C.can_use() || get_dist(C, eyeobj) > 7) + if (!C.can_use() || get_dist(C, eyeobj) > 7 || !C.internal_light) continue visible |= C diff --git a/code/modules/mob/living/silicon/robot/robot.dm b/code/modules/mob/living/silicon/robot/robot.dm index 8fab4c3286..01baf578ee 100644 --- a/code/modules/mob/living/silicon/robot/robot.dm +++ b/code/modules/mob/living/silicon/robot/robot.dm @@ -129,6 +129,7 @@ builtInCamera = new (src) builtInCamera.c_tag = real_name builtInCamera.network = list("SS13") + builtInCamera.internal_light = FALSE if(wires.is_cut(WIRE_CAMERA)) builtInCamera.status = 0 module = new /obj/item/robot_module(src) From d8736482fde51904e10ddf191db47aa742918225 Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 25 Sep 2017 11:55:09 -0500 Subject: [PATCH 7/8] Update transfer_valve.dm --- .../objects/items/devices/transfer_valve.dm | 364 ++++++++---------- 1 file changed, 158 insertions(+), 206 deletions(-) diff --git a/code/game/objects/items/devices/transfer_valve.dm b/code/game/objects/items/devices/transfer_valve.dm index 77bc239bf4..045da484ed 100644 --- a/code/game/objects/items/devices/transfer_valve.dm +++ b/code/game/objects/items/devices/transfer_valve.dm @@ -1,211 +1,164 @@ -/obj/item/device/transfer_valve - icon = 'icons/obj/assemblies.dmi' - name = "tank transfer valve" - icon_state = "valve_1" - item_state = "ttv" +/obj/item/device/transfer_valve + icon = 'icons/obj/assemblies.dmi' + name = "tank transfer valve" + icon_state = "valve_1" + item_state = "ttv" lefthand_file = 'icons/mob/inhands/weapons/bombs_lefthand.dmi' righthand_file = 'icons/mob/inhands/weapons/bombs_righthand.dmi' - desc = "Regulates the transfer of air between two tanks" - var/obj/item/tank/tank_one - var/obj/item/tank/tank_two + desc = "Regulates the transfer of air between two tanks" + var/obj/item/tank/tank_one + var/obj/item/tank/tank_two var/obj/item/device/assembly/attached_device - var/mob/attacher = null + var/mob/attacher = null var/valve_open = FALSE - var/toggle = 1 - origin_tech = "materials=1;engineering=1" - -/obj/item/device/transfer_valve/IsAssemblyHolder() - return 1 - -/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params) - if(istype(item, /obj/item/tank)) - if(tank_one && tank_two) - to_chat(user, "There are already two tanks attached, remove one first!") - return - - if(!tank_one) - if(!user.transferItemToLoc(item, src)) - return - tank_one = item - to_chat(user, "You attach the tank to the transfer valve.") - if(item.w_class > w_class) - w_class = item.w_class - else if(!tank_two) - if(!user.transferItemToLoc(item, src)) - return - tank_two = item - to_chat(user, "You attach the tank to the transfer valve.") - if(item.w_class > w_class) - w_class = item.w_class - - update_icon() -//TODO: Have this take an assemblyholder - else if(isassembly(item)) - var/obj/item/device/assembly/A = item - if(A.secured) - to_chat(user, "The device is secured.") - return - if(attached_device) - to_chat(user, "There is already a device attached to the valve, remove it first!") - return - if(!user.transferItemToLoc(item, src)) - return - attached_device = A - to_chat(user, "You attach the [item] to the valve controls and secure it.") - A.holder = src - A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). - - GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve." - message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") - log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") - attacher = user - return - -/obj/item/device/transfer_valve/attack_self(mob/user) - user.set_machine(src) - var/dat = {" Valve properties: -
Attachment one: [tank_one] [tank_one ? "Remove" : ""] -
Attachment two: [tank_two] [tank_two ? "Remove" : ""] -
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] -
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} - - var/datum/browser/popup = new(user, "trans_valve", name) - popup.set_content(dat) - popup.open() - return - -/obj/item/device/transfer_valve/Topic(href, href_list) - ..() - if ( usr.stat || usr.restrained() ) - return - if (src.loc == usr) - if(tank_one && href_list["tankone"]) - split_gases() + var/toggle = 1 + origin_tech = "materials=1;engineering=1" + +/obj/item/device/transfer_valve/IsAssemblyHolder() + return 1 + +/obj/item/device/transfer_valve/attackby(obj/item/item, mob/user, params) + if(istype(item, /obj/item/tank)) + if(tank_one && tank_two) + to_chat(user, "There are already two tanks attached, remove one first!") + return + + if(!tank_one) + if(!user.transferItemToLoc(item, src)) + return + tank_one = item + to_chat(user, "You attach the tank to the transfer valve.") + if(item.w_class > w_class) + w_class = item.w_class + else if(!tank_two) + if(!user.transferItemToLoc(item, src)) + return + tank_two = item + to_chat(user, "You attach the tank to the transfer valve.") + if(item.w_class > w_class) + w_class = item.w_class + + update_icon() +//TODO: Have this take an assemblyholder + else if(isassembly(item)) + var/obj/item/device/assembly/A = item + if(A.secured) + to_chat(user, "The device is secured.") + return + if(attached_device) + to_chat(user, "There is already a device attached to the valve, remove it first!") + return + if(!user.transferItemToLoc(item, src)) + return + attached_device = A + to_chat(user, "You attach the [item] to the valve controls and secure it.") + A.holder = src + A.toggle_secure() //this calls update_icon(), which calls update_icon() on the holder (i.e. the bomb). + + GLOB.bombers += "[key_name(user)] attached a [item] to a transfer valve." + message_admins("[key_name_admin(user)] attached a [item] to a transfer valve.") + log_game("[key_name_admin(user)] attached a [item] to a transfer valve.") + attacher = user + return + +/obj/item/device/transfer_valve/attack_self(mob/user) + user.set_machine(src) + var/dat = {" Valve properties: +
Attachment one: [tank_one] [tank_one ? "Remove" : ""] +
Attachment two: [tank_two] [tank_two ? "Remove" : ""] +
Valve attachment: [attached_device ? "[attached_device]" : "None"] [attached_device ? "Remove" : ""] +
Valve status: [ valve_open ? "Closed Open" : "Closed Open"]"} + + var/datum/browser/popup = new(user, "trans_valve", name) + popup.set_content(dat) + popup.open() + return + +/obj/item/device/transfer_valve/Topic(href, href_list) + ..() + if ( usr.stat || usr.restrained() ) + return + if (src.loc == usr) + if(tank_one && href_list["tankone"]) + split_gases() valve_open = FALSE - tank_one.loc = get_turf(src) - tank_one = null - update_icon() - if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) - w_class = WEIGHT_CLASS_NORMAL - else if(tank_two && href_list["tanktwo"]) - split_gases() + tank_one.loc = get_turf(src) + tank_one = null + update_icon() + if((!tank_two || tank_two.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) + w_class = WEIGHT_CLASS_NORMAL + else if(tank_two && href_list["tanktwo"]) + split_gases() valve_open = FALSE - tank_two.loc = get_turf(src) - tank_two = null - update_icon() - if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) - w_class = WEIGHT_CLASS_NORMAL - else if(href_list["open"]) - toggle_valve() - else if(attached_device) - if(href_list["rem_device"]) + tank_two.loc = get_turf(src) + tank_two = null + update_icon() + if((!tank_one || tank_one.w_class < WEIGHT_CLASS_BULKY) && (w_class > WEIGHT_CLASS_NORMAL)) + w_class = WEIGHT_CLASS_NORMAL + else if(href_list["open"]) + toggle_valve() + else if(attached_device) + if(href_list["rem_device"]) attached_device.forceMove(get_turf(src)) attached_device.holder = null - attached_device = null - update_icon() - if(href_list["device"]) - attached_device.attack_self(usr) - - src.attack_self(usr) - src.add_fingerprint(usr) - return - return - -/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D) - if(toggle) - toggle = 0 - toggle_valve() - spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever - toggle = 1 - -/obj/item/device/transfer_valve/update_icon() - cut_overlays() - underlays = null - - if(!tank_one && !tank_two && !attached_device) - icon_state = "valve_1" - return - icon_state = "valve" - - if(tank_one) - add_overlay("[tank_one.icon_state]") - if(tank_two) - var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") - J.Shift(WEST, 13) - underlays += J - if(attached_device) - add_overlay("device") - -/obj/item/device/transfer_valve/proc/merge_gases() - tank_two.air_contents.volume += tank_one.air_contents.volume - var/datum/gas_mixture/temp - temp = tank_one.air_contents.remove_ratio(1) - tank_two.air_contents.merge(temp) - -/obj/item/device/transfer_valve/proc/split_gases() - if (!valve_open || !tank_one || !tank_two) - return - var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume - var/datum/gas_mixture/temp - temp = tank_two.air_contents.remove_ratio(ratio1) - tank_one.air_contents.merge(temp) - tank_two.air_contents.volume -= tank_one.air_contents.volume - - /* - Exadv1: I know this isn't how it's going to work, but this was just to check - it explodes properly when it gets a signal (and it does). - */ - -/obj/item/device/transfer_valve/proc/toggle_valve() - if(!valve_open && tank_one && tank_two) + attached_device = null + update_icon() + if(href_list["device"]) + attached_device.attack_self(usr) + + src.attack_self(usr) + src.add_fingerprint(usr) + return + return + +/obj/item/device/transfer_valve/proc/process_activation(obj/item/device/D) + if(toggle) + toggle = 0 + toggle_valve() + spawn(50) // To stop a signal being spammed from a proxy sensor constantly going off or whatever + toggle = 1 + +/obj/item/device/transfer_valve/update_icon() + cut_overlays() + underlays = null + + if(!tank_one && !tank_two && !attached_device) + icon_state = "valve_1" + return + icon_state = "valve" + + if(tank_one) + add_overlay("[tank_one.icon_state]") + if(tank_two) + var/icon/J = new(icon, icon_state = "[tank_two.icon_state]") + J.Shift(WEST, 13) + underlays += J + if(attached_device) + add_overlay("device") + +/obj/item/device/transfer_valve/proc/merge_gases() + tank_two.air_contents.volume += tank_one.air_contents.volume + var/datum/gas_mixture/temp + temp = tank_one.air_contents.remove_ratio(1) + tank_two.air_contents.merge(temp) + +/obj/item/device/transfer_valve/proc/split_gases() + if (!valve_open || !tank_one || !tank_two) + return + var/ratio1 = tank_one.air_contents.volume/tank_two.air_contents.volume + var/datum/gas_mixture/temp + temp = tank_two.air_contents.remove_ratio(ratio1) + tank_one.air_contents.merge(temp) + tank_two.air_contents.volume -= tank_one.air_contents.volume + + /* + Exadv1: I know this isn't how it's going to work, but this was just to check + it explodes properly when it gets a signal (and it does). + */ + +/obj/item/device/transfer_valve/proc/toggle_valve() + if(!valve_open && tank_one && tank_two) valve_open = TRUE -<<<<<<< HEAD - var/turf/bombturf = get_turf(src) - var/area/A = get_area(bombturf) - - var/attachment = "no device" - if(attached_device) - if(istype(attached_device, /obj/item/device/assembly/signaler)) - attachment = "[attached_device]" - else - attachment = attached_device - - var/attacher_name = "" - if(!attacher) - attacher_name = "Unknown" - else - attacher_name = "[key_name_admin(attacher)]" - - var/log_str1 = "Bomb valve opened in " - var/log_str2 = "with [attachment] attacher: [attacher_name]" - - var/log_attacher = "" - if(attacher) - log_attacher = "[ADMIN_QUE(attacher)] [ADMIN_FLW(attacher)]" - - var/mob/mob = get_mob_by_key(src.fingerprintslast) - var/last_touch_info = "" - if(mob) - last_touch_info = "[ADMIN_QUE(mob)] [ADMIN_FLW(mob)]" - - var/log_str3 = " Last touched by: [key_name_admin(mob)]" - - var/bomb_message = "[log_str1] [A.name][ADMIN_JMP(bombturf)] [log_str2][log_attacher] [log_str3][last_touch_info]" - - GLOB.bombers += bomb_message - - message_admins(bomb_message, 0, 1) - log_game("[log_str1] [A.name][COORD(bombturf)] [log_str2] [log_str3]") - merge_gases() - spawn(20) // In case one tank bursts - for (var/i=0,i<5,i++) - src.update_icon() - sleep(10) - src.update_icon() - - else if(valve_open && tank_one && tank_two) - split_gases() -======= var/turf/bombturf = get_turf(src) var/area/A = get_area(bombturf) @@ -251,11 +204,10 @@ else if(valve_open && tank_one && tank_two) split_gases() ->>>>>>> 28d725e... Merge pull request #30975 from ShizCalev/href-tokens valve_open = FALSE - src.update_icon() - -// this doesn't do anything but the timer etc. expects it to be here -// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs -/obj/item/device/transfer_valve/proc/c_state() - return + src.update_icon() + +// this doesn't do anything but the timer etc. expects it to be here +// eventually maybe have it update icon to show state (timer, prox etc.) like old bombs +/obj/item/device/transfer_valve/proc/c_state() + return From 954b056e97edef933473f2218e5e19be010d276b Mon Sep 17 00:00:00 2001 From: LetterJay Date: Mon, 25 Sep 2017 11:56:55 -0500 Subject: [PATCH 8/8] Update security.dm --- code/modules/jobs/job_types/security.dm | 496 ++++++++++-------------- 1 file changed, 204 insertions(+), 292 deletions(-) diff --git a/code/modules/jobs/job_types/security.dm b/code/modules/jobs/job_types/security.dm index a64d6e5387..67a705455c 100644 --- a/code/modules/jobs/job_types/security.dm +++ b/code/modules/jobs/job_types/security.dm @@ -1,31 +1,31 @@ -//Warden and regular officers add this result to their get_access() -/datum/job/proc/check_config_for_sec_maint() - if(config.jobs_have_maint_access & SECURITY_HAS_MAINT_ACCESS) +//Warden and regular officers add this result to their get_access() +/datum/job/proc/check_config_for_sec_maint() + if(config.jobs_have_maint_access & SECURITY_HAS_MAINT_ACCESS) return list(ACCESS_MAINT_TUNNELS) - return list() - -/* -Head of Security -*/ -/datum/job/hos - title = "Head of Security" - flag = HOS - department_head = list("Captain") - department_flag = ENGSEC - head_announce = list("Security") - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the captain" - selection_color = "#ffdddd" - req_admin_notify = 1 - minimal_player_age = 14 + return list() + +/* +Head of Security +*/ +/datum/job/hos + title = "Head of Security" + flag = HOS + department_head = list("Captain") + department_flag = ENGSEC + head_announce = list("Security") + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the captain" + selection_color = "#ffdddd" + req_admin_notify = 1 + minimal_player_age = 14 exp_requirements = 300 exp_type = EXP_TYPE_CREW exp_type_department = EXP_TYPE_SECURITY - - outfit = /datum/outfit/job/hos - + + outfit = /datum/outfit/job/hos + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, @@ -34,289 +34,202 @@ Head of Security ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_ALL_PERSONAL_LOCKERS, ACCESS_RESEARCH, ACCESS_ENGINE, ACCESS_MINING, ACCESS_MEDICAL, ACCESS_CONSTRUCTION, ACCESS_MAILSORTING, ACCESS_HEADS, ACCESS_HOS, ACCESS_RC_ANNOUNCE, ACCESS_KEYCARD_AUTH, ACCESS_GATEWAY, ACCESS_MAINT_TUNNELS) - -/datum/outfit/job/hos - name = "Head of Security" - jobtype = /datum/job/hos - - id = /obj/item/card/id/silver - belt = /obj/item/device/pda/heads/hos - ears = /obj/item/device/radio/headset/heads/hos/alt - uniform = /obj/item/clothing/under/rank/head_of_security - shoes = /obj/item/clothing/shoes/jackboots - suit = /obj/item/clothing/suit/armor/hos/trenchcoat - gloves = /obj/item/clothing/gloves/color/black/hos - head = /obj/item/clothing/head/HoS/beret - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - suit_store = /obj/item/gun/energy/e_gun - r_pocket = /obj/item/device/assembly/flash/handheld - l_pocket = /obj/item/restraints/handcuffs - backpack_contents = list(/obj/item/melee/baton/loaded=1) - - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel/sec - duffelbag = /obj/item/storage/backpack/duffelbag/sec - box = /obj/item/storage/box/security - - implants = list(/obj/item/implant/mindshield) - -/* -Warden -*/ -/datum/job/warden - title = "Warden" - flag = WARDEN - department_head = list("Head of Security") - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of security" - selection_color = "#ffeeee" - minimal_player_age = 7 + +/datum/outfit/job/hos + name = "Head of Security" + jobtype = /datum/job/hos + + id = /obj/item/card/id/silver + belt = /obj/item/device/pda/heads/hos + ears = /obj/item/device/radio/headset/heads/hos/alt + uniform = /obj/item/clothing/under/rank/head_of_security + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/hos/trenchcoat + gloves = /obj/item/clothing/gloves/color/black/hos + head = /obj/item/clothing/head/HoS/beret + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + suit_store = /obj/item/gun/energy/e_gun + r_pocket = /obj/item/device/assembly/flash/handheld + l_pocket = /obj/item/restraints/handcuffs + backpack_contents = list(/obj/item/melee/baton/loaded=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + box = /obj/item/storage/box/security + + implants = list(/obj/item/implant/mindshield) + +/* +Warden +*/ +/datum/job/warden + title = "Warden" + flag = WARDEN + department_head = list("Head of Security") + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of security" + selection_color = "#ffeeee" + minimal_player_age = 7 exp_requirements = 300 exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/warden - + + outfit = /datum/outfit/job/warden + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_ARMORY, ACCESS_COURT, ACCESS_WEAPONS) //SEE /DATUM/JOB/WARDEN/GET_ACCESS() - -/datum/job/warden/get_access() - var/list/L = list() - L = ..() | check_config_for_sec_maint() - return L - -/datum/outfit/job/warden - name = "Warden" - jobtype = /datum/job/warden - - belt = /obj/item/device/pda/warden - ears = /obj/item/device/radio/headset/headset_sec/alt - uniform = /obj/item/clothing/under/rank/warden - shoes = /obj/item/clothing/shoes/jackboots - suit = /obj/item/clothing/suit/armor/vest/warden/alt - gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/warden - glasses = /obj/item/clothing/glasses/hud/security/sunglasses - r_pocket = /obj/item/device/assembly/flash/handheld - l_pocket = /obj/item/restraints/handcuffs - suit_store = /obj/item/gun/energy/e_gun/advtaser - backpack_contents = list(/obj/item/melee/baton/loaded=1) - - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel/sec - duffelbag = /obj/item/storage/backpack/duffelbag/sec - box = /obj/item/storage/box/security - - implants = list(/obj/item/implant/mindshield) - - -/* -Detective -*/ -/datum/job/detective - title = "Detective" - flag = DETECTIVE - department_head = list("Head of Security") - department_flag = ENGSEC - faction = "Station" - total_positions = 1 - spawn_positions = 1 - supervisors = "the head of security" - selection_color = "#ffeeee" - minimal_player_age = 7 + +/datum/job/warden/get_access() + var/list/L = list() + L = ..() | check_config_for_sec_maint() + return L + +/datum/outfit/job/warden + name = "Warden" + jobtype = /datum/job/warden + + belt = /obj/item/device/pda/warden + ears = /obj/item/device/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/warden + shoes = /obj/item/clothing/shoes/jackboots + suit = /obj/item/clothing/suit/armor/vest/warden/alt + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/warden + glasses = /obj/item/clothing/glasses/hud/security/sunglasses + r_pocket = /obj/item/device/assembly/flash/handheld + l_pocket = /obj/item/restraints/handcuffs + suit_store = /obj/item/gun/energy/e_gun/advtaser + backpack_contents = list(/obj/item/melee/baton/loaded=1) + + backpack = /obj/item/storage/backpack/security + satchel = /obj/item/storage/backpack/satchel/sec + duffelbag = /obj/item/storage/backpack/duffelbag/sec + box = /obj/item/storage/box/security + + implants = list(/obj/item/implant/mindshield) + + +/* +Detective +*/ +/datum/job/detective + title = "Detective" + flag = DETECTIVE + department_head = list("Head of Security") + department_flag = ENGSEC + faction = "Station" + total_positions = 1 + spawn_positions = 1 + supervisors = "the head of security" + selection_color = "#ffeeee" + minimal_player_age = 7 exp_requirements = 300 exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/detective - + + outfit = /datum/outfit/job/detective + access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS) minimal_access = list(ACCESS_SEC_DOORS, ACCESS_FORENSICS_LOCKERS, ACCESS_MORGUE, ACCESS_MAINT_TUNNELS, ACCESS_COURT, ACCESS_BRIG, ACCESS_WEAPONS) - -/datum/outfit/job/detective - name = "Detective" - jobtype = /datum/job/detective - - belt = /obj/item/device/pda/detective - ears = /obj/item/device/radio/headset/headset_sec/alt - uniform = /obj/item/clothing/under/rank/det - shoes = /obj/item/clothing/shoes/sneakers/brown - suit = /obj/item/clothing/suit/det_suit - gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/fedora/det_hat - l_pocket = /obj/item/toy/crayon/white - r_pocket = /obj/item/lighter - backpack_contents = list(/obj/item/storage/box/evidence=1,\ - /obj/item/device/detective_scanner=1,\ - /obj/item/melee/classic_baton=1) - mask = /obj/item/clothing/mask/cigarette - - implants = list(/obj/item/implant/mindshield) - -/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) - ..() - var/obj/item/clothing/mask/cigarette/cig = H.wear_mask - cig.light("") - - if(visualsOnly) - return - -/* -Security Officer -*/ -/datum/job/officer - title = "Security Officer" - flag = OFFICER - department_head = list("Head of Security") - department_flag = ENGSEC - faction = "Station" - total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() - spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() - supervisors = "the head of security, and the head of your assigned department (if applicable)" - selection_color = "#ffeeee" - minimal_player_age = 7 + +/datum/outfit/job/detective + name = "Detective" + jobtype = /datum/job/detective + + belt = /obj/item/device/pda/detective + ears = /obj/item/device/radio/headset/headset_sec/alt + uniform = /obj/item/clothing/under/rank/det + shoes = /obj/item/clothing/shoes/sneakers/brown + suit = /obj/item/clothing/suit/det_suit + gloves = /obj/item/clothing/gloves/color/black + head = /obj/item/clothing/head/fedora/det_hat + l_pocket = /obj/item/toy/crayon/white + r_pocket = /obj/item/lighter + backpack_contents = list(/obj/item/storage/box/evidence=1,\ + /obj/item/device/detective_scanner=1,\ + /obj/item/melee/classic_baton=1) + mask = /obj/item/clothing/mask/cigarette + + implants = list(/obj/item/implant/mindshield) + +/datum/outfit/job/detective/post_equip(mob/living/carbon/human/H, visualsOnly = FALSE) + ..() + var/obj/item/clothing/mask/cigarette/cig = H.wear_mask + cig.light("") + + if(visualsOnly) + return + +/* +Security Officer +*/ +/datum/job/officer + title = "Security Officer" + flag = OFFICER + department_head = list("Head of Security") + department_flag = ENGSEC + faction = "Station" + total_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() + spawn_positions = 5 //Handled in /datum/controller/occupations/proc/setup_officer_positions() + supervisors = "the head of security, and the head of your assigned department (if applicable)" + selection_color = "#ffeeee" + minimal_player_age = 7 exp_requirements = 300 exp_type = EXP_TYPE_CREW - - outfit = /datum/outfit/job/security - + + outfit = /datum/outfit/job/security + access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_MAINT_TUNNELS, ACCESS_MORGUE, ACCESS_WEAPONS, ACCESS_FORENSICS_LOCKERS) minimal_access = list(ACCESS_SECURITY, ACCESS_SEC_DOORS, ACCESS_BRIG, ACCESS_COURT, ACCESS_WEAPONS) //BUT SEE /DATUM/JOB/WARDEN/GET_ACCESS() - - -/datum/job/officer/get_access() - var/list/L = list() - L |= ..() | check_config_for_sec_maint() - return L - -GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) - -/datum/job/officer/after_spawn(mob/living/carbon/human/H, mob/M) - // Assign department security - var/department - if(M && M.client && M.client.prefs) - department = M.client.prefs.prefered_security_department - if(!LAZYLEN(GLOB.available_depts) || department == "None") - return - else if(department in GLOB.available_depts) - LAZYREMOVE(GLOB.available_depts, department) - else - department = pick_n_take(GLOB.available_depts) - var/ears = null - var/accessory = null - var/list/dep_access = null - var/destination = null - var/spawn_point = null - switch(department) - if(SEC_DEPT_SUPPLY) - ears = /obj/item/device/radio/headset/headset_sec/alt/department/supply + + +/datum/job/officer/get_access() + var/list/L = list() + L |= ..() | check_config_for_sec_maint() + return L + +GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, SEC_DEPT_SCIENCE, SEC_DEPT_SUPPLY)) + +/datum/job/officer/after_spawn(mob/living/carbon/human/H, mob/M) + // Assign department security + var/department + if(M && M.client && M.client.prefs) + department = M.client.prefs.prefered_security_department + if(!LAZYLEN(GLOB.available_depts) || department == "None") + return + else if(department in GLOB.available_depts) + LAZYREMOVE(GLOB.available_depts, department) + else + department = pick_n_take(GLOB.available_depts) + var/ears = null + var/accessory = null + var/list/dep_access = null + var/destination = null + var/spawn_point = null + switch(department) + if(SEC_DEPT_SUPPLY) + ears = /obj/item/device/radio/headset/headset_sec/alt/department/supply dep_access = list(ACCESS_MAILSORTING, ACCESS_MINING, ACCESS_MINING_STATION) - destination = /area/security/checkpoint/supply - spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/cargo - if(SEC_DEPT_ENGINEERING) - ears = /obj/item/device/radio/headset/headset_sec/alt/department/engi + destination = /area/security/checkpoint/supply + spawn_point = locate(/obj/effect/landmark/start/depsec/supply) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/cargo + if(SEC_DEPT_ENGINEERING) + ears = /obj/item/device/radio/headset/headset_sec/alt/department/engi dep_access = list(ACCESS_CONSTRUCTION, ACCESS_ENGINE) - destination = /area/security/checkpoint/engineering - spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/engine - if(SEC_DEPT_MEDICAL) - ears = /obj/item/device/radio/headset/headset_sec/alt/department/med + destination = /area/security/checkpoint/engineering + spawn_point = locate(/obj/effect/landmark/start/depsec/engineering) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/engine + if(SEC_DEPT_MEDICAL) + ears = /obj/item/device/radio/headset/headset_sec/alt/department/med dep_access = list(ACCESS_MEDICAL) - destination = /area/security/checkpoint/medical - spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/medblue - if(SEC_DEPT_SCIENCE) - ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci + destination = /area/security/checkpoint/medical + spawn_point = locate(/obj/effect/landmark/start/depsec/medical) in GLOB.department_security_spawns + accessory = /obj/item/clothing/accessory/armband/medblue + if(SEC_DEPT_SCIENCE) + ears = /obj/item/device/radio/headset/headset_sec/alt/department/sci dep_access = list(ACCESS_RESEARCH) -<<<<<<< HEAD - destination = /area/security/checkpoint/science - spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns - accessory = /obj/item/clothing/accessory/armband/science - - if(accessory) - var/obj/item/clothing/under/U = H.w_uniform - U.attach_accessory(new accessory) - if(ears) - if(H.ears) - qdel(H.ears) - H.equip_to_slot_or_del(new ears(H),slot_ears) - - var/obj/item/card/id/W = H.wear_id - W.access |= dep_access - - var/teleport = 0 - if(!config.sec_start_brig) - if(destination || spawn_point) - teleport = 1 - if(teleport) - var/turf/T - if(spawn_point) - T = get_turf(spawn_point) - H.Move(T) - else - var/safety = 0 - while(safety < 25) - T = safepick(get_area_turfs(destination)) - if(T && !H.Move(T)) - safety += 1 - continue - else - break - if(department) - to_chat(M, "You have been assigned to [department]!") - else - to_chat(M, "You have not been assigned to any department. Patrol the halls and help where needed.") - - - -/datum/outfit/job/security - name = "Security Officer" - jobtype = /datum/job/officer - - belt = /obj/item/device/pda/security - ears = /obj/item/device/radio/headset/headset_sec/alt - uniform = /obj/item/clothing/under/rank/security - gloves = /obj/item/clothing/gloves/color/black - head = /obj/item/clothing/head/helmet/sec - suit = /obj/item/clothing/suit/armor/vest/alt - shoes = /obj/item/clothing/shoes/jackboots - l_pocket = /obj/item/restraints/handcuffs - r_pocket = /obj/item/device/assembly/flash/handheld - suit_store = /obj/item/gun/energy/e_gun/advtaser - backpack_contents = list(/obj/item/melee/baton/loaded=1) - - backpack = /obj/item/storage/backpack/security - satchel = /obj/item/storage/backpack/satchel/sec - duffelbag = /obj/item/storage/backpack/duffelbag/sec - box = /obj/item/storage/box/security - - implants = list(/obj/item/implant/mindshield) - - -/obj/item/device/radio/headset/headset_sec/alt/department/Initialize() - wires = new/datum/wires/radio(src) - secure_radio_connections = new - recalculateChannels() - ..() - -/obj/item/device/radio/headset/headset_sec/alt/department/engi - keyslot = new /obj/item/device/encryptionkey/headset_sec - keyslot2 = new /obj/item/device/encryptionkey/headset_eng - -/obj/item/device/radio/headset/headset_sec/alt/department/supply - keyslot = new /obj/item/device/encryptionkey/headset_sec - keyslot2 = new /obj/item/device/encryptionkey/headset_cargo - -/obj/item/device/radio/headset/headset_sec/alt/department/med - keyslot = new /obj/item/device/encryptionkey/headset_sec - keyslot2 = new /obj/item/device/encryptionkey/headset_med - -/obj/item/device/radio/headset/headset_sec/alt/department/sci - keyslot = new /obj/item/device/encryptionkey/headset_sec - keyslot2 = new /obj/item/device/encryptionkey/headset_sci -======= destination = /area/security/checkpoint/science spawn_point = locate(/obj/effect/landmark/start/depsec/science) in GLOB.department_security_spawns accessory = /obj/item/clothing/accessory/armband/science @@ -402,4 +315,3 @@ GLOBAL_LIST_INIT(available_depts, list(SEC_DEPT_ENGINEERING, SEC_DEPT_MEDICAL, S /obj/item/device/radio/headset/headset_sec/alt/department/sci keyslot = new /obj/item/device/encryptionkey/headset_sec keyslot2 = new /obj/item/device/encryptionkey/headset_sci ->>>>>>> f14c719... Tiny batch of Initialize() fixes, mostly stuff that isn't around at roundstart (#30980)