From 92afc566bb26d8b3548664c8fa61124e56e0b649 Mon Sep 17 00:00:00 2001 From: PsiOmega Date: Sat, 29 Aug 2015 18:47:20 +0200 Subject: [PATCH] Makes it possible to select department channels on intercoms. Conflicts: code/game/objects/items/devices/radio/intercom.dm code/game/objects/items/devices/radio/radio.dm --- .../objects/items/devices/radio/intercom.dm | 125 +++++++++-------- .../game/objects/items/devices/radio/radio.dm | 131 ++++-------------- 2 files changed, 93 insertions(+), 163 deletions(-) diff --git a/code/game/objects/items/devices/radio/intercom.dm b/code/game/objects/items/devices/radio/intercom.dm index 9d7bcf88127..a8f25912599 100644 --- a/code/game/objects/items/devices/radio/intercom.dm +++ b/code/game/objects/items/devices/radio/intercom.dm @@ -1,5 +1,19 @@ +// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't +var/global/list/default_intercom_channels = list( + num2text(PUB_FREQ) = list(), + num2text(AI_FREQ) = list(access_synth), + num2text(ERT_FREQ) = list(access_cent_specops), + num2text(COMM_FREQ) = list(access_heads), + num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), + num2text(MED_FREQ) = list(access_medical_equip), + num2text(SEC_FREQ) = list(access_security), + num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology), + num2text(SUP_FREQ) = list(access_cargo), + num2text(SRV_FREQ) = list(access_janitor, access_hydroponics) +) + /obj/item/device/radio/intercom - name = "station intercom (General)" + name = "station intercom" desc = "Talk through this." icon_state = "intercom" anchored = 1 @@ -7,63 +21,43 @@ canhear_range = 2 flags = CONDUCT | NOBLOODY var/number = 0 + var/anyai = 1 + var/mob/living/silicon/ai/ai = list() var/last_tick //used to delay the powercheck -/obj/item/device/radio/intercom/custom - name = "station intercom (Custom)" - broadcasting = 0 - listening = 0 - -/obj/item/device/radio/intercom/interrogation - name = "station intercom (Interrogation)" - frequency = 1449 - -/obj/item/device/radio/intercom/private - name = "station intercom (Private)" - frequency = AI_FREQ - -/obj/item/device/radio/intercom/specops - name = "\improper Spec Ops intercom" - frequency = ERT_FREQ - -/obj/item/device/radio/intercom/department - canhear_range = 5 - broadcasting = 0 - listening = 1 - -/obj/item/device/radio/intercom/department/medbay - name = "station intercom (Medbay)" - frequency = MED_I_FREQ - -/obj/item/device/radio/intercom/department/security - name = "station intercom (Security)" - frequency = SEC_I_FREQ + var/list/intercom_channels /obj/item/device/radio/intercom/New() ..() processing_objects += src - -/obj/item/device/radio/intercom/department/medbay/New() - ..() - internal_channels = default_medbay_channels.Copy() - -/obj/item/device/radio/intercom/department/security/New() - ..() - internal_channels = list( - num2text(PUB_FREQ) = list(), - num2text(SEC_I_FREQ) = list(access_security) - ) + intercom_channels = default_intercom_channels /obj/item/device/radio/intercom/syndicate name = "illicit intercom" - desc = "Talk through this. Evilly" - frequency = SYND_FREQ - subspace_transmission = 1 - syndie = 1 /obj/item/device/radio/intercom/syndicate/New() ..() - internal_channels[num2text(SYND_FREQ)] = list(access_syndicate) + intercom_channels = list( + num2text(PUB_FREQ) = list(), + num2text(SYND_FREQ) = list(access_syndicate), + num2text(COMM_FREQ) = list(access_syndicate), + num2text(ENG_FREQ) = list(access_syndicate), + num2text(MED_FREQ) = list(access_syndicate), + num2text(SEC_FREQ) = list(access_syndicate), + num2text(SCI_FREQ) = list(access_syndicate), + num2text(SUP_FREQ) = list(access_syndicate), + num2text(SRV_FREQ) = list(access_syndicate) + ) + +/obj/item/device/radio/intercom/proc/has_channel_access(var/mob/user, var/freq) + if(!user) + return 0 + + if(!(freq in intercom_channels)) + return 0 + + var/obj/item/weapon/card/id/I = user.GetIdCard() + return has_access(list(), intercom_channels[freq], I ? I.GetAccess() : list()) /obj/item/device/radio/intercom/Destroy() processing_objects -= src @@ -79,6 +73,16 @@ spawn (0) attack_self(user) +/obj/item/device/radio/intercom/list_channels(var/mob/user) + var/dat = "" + for (var/priv_chan in intercom_channels) + if(has_channel_access(user, priv_chan)) + dat+="[get_frequency_name(text2num(priv_chan))]
" + + if(dat) + dat = "
Available Channels
" + dat + return dat + /obj/item/device/radio/intercom/receive_range(freq, level) if (!on) return -1 @@ -94,6 +98,12 @@ return canhear_range + +/obj/item/device/radio/intercom/hear_talk(mob/M as mob, msg) + if(!src.anyai && !(M in src.ai)) + return + ..() + /obj/item/device/radio/intercom/process() if(((world.timeofday - last_tick) > 30) || ((world.timeofday - last_tick) < 0)) last_tick = world.timeofday @@ -112,6 +122,19 @@ else icon_state = "intercom" +/obj/item/device/radio/intercom/Topic(href, href_list) + if(..()) + return 1 + + if(href_list["spec_freq"]) + var freq = href_list["spec_freq"] + if(has_channel_access(usr, freq)) + set_frequency(text2num(freq)) + . = 1 + + if(.) + interact(usr) + /obj/item/device/radio/intercom/locked var/locked_frequency @@ -121,13 +144,3 @@ /obj/item/device/radio/intercom/locked/list_channels() return "" - -/obj/item/device/radio/intercom/locked/ai_private - name = "\improper AI intercom" - frequency = AI_FREQ - broadcasting = 1 - listening = 1 - -/obj/item/device/radio/intercom/locked/confessional - name = "confessional intercom" - frequency = 1480 diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index b88f34ef519..ad68b5e8eeb 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -1,25 +1,3 @@ -// Access check is of the type requires one. These have been carefully selected to avoid allowing the janitor to see channels he shouldn't -var/global/list/default_internal_channels = list( - num2text(PUB_FREQ) = list(), - num2text(AI_FREQ) = list(access_synth), - num2text(ERT_FREQ) = list(access_cent_specops), - num2text(COMM_FREQ)= list(access_heads), - num2text(ENG_FREQ) = list(access_engine_equip, access_atmospherics), - num2text(MED_FREQ) = list(access_medical_equip), - num2text(MED_I_FREQ)=list(access_medical_equip), - num2text(SEC_FREQ) = list(access_security), - num2text(SEC_I_FREQ)=list(access_security), - num2text(SCI_FREQ) = list(access_tox,access_robotics,access_xenobiology), - num2text(SUP_FREQ) = list(access_cargo), - num2text(SRV_FREQ) = list(access_janitor, access_hydroponics) -) - -var/global/list/default_medbay_channels = list( - num2text(PUB_FREQ) = list(), - num2text(MED_FREQ) = list(access_medical_equip), - num2text(MED_I_FREQ) = list(access_medical_equip) -) - /obj/item/device/radio icon = 'icons/obj/radio.dmi' name = "station bounced radio" @@ -32,13 +10,15 @@ var/global/list/default_medbay_channels = list( var/frequency = PUB_FREQ //common chat var/traitor_frequency = 0 //tune to frequency to unlock traitor supplies var/canhear_range = 3 // the range which mobs can hear this radio from + var/obj/item/device/radio/patch_link = null var/datum/wires/radio/wires = null var/b_stat = 0 var/broadcasting = 0 var/listening = 1 - var/list/channels = list() //see communications.dm for full list. First channel is a "default" for :h + var/list/channels = list() //see communications.dm for full list. First channes is a "default" for :h var/subspace_transmission = 0 var/syndie = 0//Holder to see if it's a syndicate encrypted radio +// "Example" = FREQ_LISTENING|FREQ_BROADCASTING flags = CONDUCT slot_flags = SLOT_BELT throw_speed = 2 @@ -47,7 +27,7 @@ var/global/list/default_medbay_channels = list( matter = list("glass" = 25,DEFAULT_WALL_MATERIAL = 75) var/const/FREQ_LISTENING = 1 - var/list/internal_channels + /obj/item/device/radio var/datum/radio_frequency/radio_connection @@ -61,7 +41,6 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/New() ..() wires = new(src) - internal_channels = default_internal_channels.Copy() /obj/item/device/radio/Destroy() qdel(wires) @@ -70,7 +49,7 @@ var/global/list/default_medbay_channels = list( radio_controller.remove_object(src, frequency) for (var/ch_name in channels) radio_controller.remove_object(src, radiochannels[ch_name]) - return ..() + ..() /obj/item/device/radio/initialize() @@ -82,8 +61,6 @@ var/global/list/default_medbay_channels = list( for (var/ch_name in channels) secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) -/obj/item/device/radio/attack_ghost(mob/user) - interact(user) /obj/item/device/radio/attack_self(mob/user as mob) user.set_machine(src) @@ -119,40 +96,11 @@ var/global/list/default_medbay_channels = list( return /obj/item/device/radio/proc/list_channels(var/mob/user) - return list_internal_channels(user) - -/obj/item/device/radio/proc/list_secure_channels(var/mob/user) var/dat = "" for (var/ch_name in channels) dat+=text_sec_channel(ch_name, channels[ch_name]) return dat -/obj/item/device/radio/proc/list_internal_channels(var/mob/user) - var/dat = "" - for (var/internal_chan in internal_channels) - if(has_channel_access(user, internal_chan)) - dat+="[get_frequency_name(text2num(internal_chan))]
" - - if(dat) - dat = "
Internal Channels
" + dat - return dat - -/obj/item/device/radio/proc/has_channel_access(var/mob/user, var/freq) - if(!user) - return 0 - - if(!(freq in internal_channels)) - return 0 - - return user.has_internal_radio_channel_access(internal_channels[freq]) - -/mob/proc/has_internal_radio_channel_access(var/list/req_one_accesses) - var/obj/item/weapon/card/id/I = GetIdCard() - return has_access(list(), req_one_accesses, I ? I.GetAccess() : list()) - -/mob/dead/observer/has_internal_radio_channel_access(var/list/req_one_accesses) - return can_admin_interact() - /obj/item/device/radio/proc/text_wires() if (b_stat) return wires.GetInteractWindow() @@ -207,11 +155,6 @@ var/global/list/default_medbay_channels = list( else channels[chan_name] |= FREQ_LISTENING . = 1 - else if(href_list["spec_freq"]) - var freq = href_list["spec_freq"] - if(has_channel_access(usr, freq)) - set_frequency(text2num(freq)) - . = 1 if(href_list["nowindow"]) // here for pAIs, maybe others will want it, idk return 1 @@ -570,9 +513,6 @@ var/global/list/default_medbay_channels = list( myborg = null return ..() -/obj/item/device/radio/borg/list_channels(var/mob/user) - return list_secure_channels(user) - /obj/item/device/radio/borg/talk_into() . = ..() if (isrobot(src.loc)) @@ -657,33 +597,24 @@ var/global/list/default_medbay_channels = list( if(..()) return 1 if (href_list["mode"]) - var/enable_subspace_transmission = text2num(href_list["mode"]) - if(enable_subspace_transmission != subspace_transmission) - subspace_transmission = !subspace_transmission - if(subspace_transmission) - usr << "Subspace Transmission is enabled" - else - usr << "Subspace Transmission is disabled" - - if(subspace_transmission == 0)//Simple as fuck, clears the channel list to prevent talking/listening over them if subspace transmission is disabled - channels = list() - else - recalculateChannels() - . = 1 + if(subspace_transmission != 1) + subspace_transmission = 1 + usr << "Subspace Transmission is enabled" + else + subspace_transmission = 0 + usr << "Subspace Transmission is disabled" + if(subspace_transmission == 0)//Simple as fuck, clears the channel list to prevent talking/listening over them if subspace transmission is disabled + channels = list() + else + recalculateChannels() + return 1 if (href_list["shutup"]) // Toggle loudspeaker mode, AKA everyone around you hearing your radio. - var/do_shut_up = text2num(href_list["shutup"]) - if(do_shut_up != shut_up) - shut_up = !shut_up - if(shut_up) - canhear_range = 0 - usr << "Loadspeaker disabled." - else - canhear_range = 3 - usr << "Loadspeaker enabled." - . = 1 - - if(.) - interact(usr) + shut_up = !shut_up + if(shut_up) + canhear_range = 0 + else + canhear_range = 3 + return 1 /obj/item/device/radio/borg/interact(mob/user as mob) if(!on) @@ -698,8 +629,8 @@ var/global/list/default_medbay_channels = list( [format_frequency(frequency)] + +
- Broadcasting: [subspace_transmission ? "Disable" : "Enable"]
- Loudspeaker: [shut_up ? "Enable" : "Disable"]
+ Toggle Broadcast Mode
+ Loudspeaker: [shut_up ? "Disengaged" : "Engaged"]
"} if(subspace_transmission)//Don't even bother if subspace isn't turned on @@ -722,17 +653,3 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/off listening = 0 - -/obj/item/device/radio/phone - broadcasting = 0 - icon = 'icons/obj/items.dmi' - icon_state = "red_phone" - listening = 1 - name = "phone" - -/obj/item/device/radio/phone/medbay - frequency = MED_I_FREQ - -/obj/item/device/radio/phone/medbay/New() - ..() - internal_channels = default_medbay_channels.Copy()