diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm index 81b9b0d61c8..380c5f8e634 100644 --- a/code/game/objects/items/devices/paicard.dm +++ b/code/game/objects/items/devices/paicard.dm @@ -1,3 +1,20 @@ +var/global/list/radio_channels_by_freq = list( + num2text(PUB_FREQ) = "Common", + num2text(AI_FREQ) = "AI Private", + num2text(ENT_FREQ) = "Entertainment", + num2text(ERT_FREQ) = "Response Team", + num2text(COMM_FREQ)= "Command", + num2text(ENG_FREQ) = "Engineering", + num2text(MED_FREQ) = "Medical", + num2text(MED_I_FREQ)="Medical(I)", + num2text(SEC_FREQ) = "Security", + num2text(SEC_I_FREQ)="Security(I)", + num2text(SCI_FREQ) = "Science", + num2text(SUP_FREQ) = "Supply", + num2text(SRV_FREQ) = "Service", + num2text(EXP_FREQ) = "Explorer" + ) + GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) /obj/item/device/paicard @@ -11,7 +28,7 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) show_messages = 0 preserve_item = 1 - var/obj/item/device/radio/radio + var/obj/item/device/radio/borg/pai/radio var/looking_for_personality = 0 var/mob/living/silicon/pai/pai var/image/screen_layer @@ -42,10 +59,16 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) if(pai != null) //Have a person in them already? return ..() - var/choice = tgui_alert(user, "You sure you want to inhabit this PAI?", "Confirmation", list("Yes", "No")) - if(choice == "No") - return ..() + if(jobban_isbanned(usr, "pAI")) + to_chat(usr,"You cannot join a pAI card when you are banned from playing as a pAI.") + return + var/choice = tgui_alert(user, "You sure you want to inhabit this PAI, or submit yourself to being recruited?", "Confirmation", list("Inhabit", "Recruit", "Cancel")) + if(choice == "Cancel") + return ..() + if(choice == "Recruit") + paiController.recruitWindow(user) + return ..() choice = tgui_alert(user, "Do you want to load your pAI data?", "Load", list("Yes", "No")) var/actual_pai_name var/turf/location = get_turf(src) @@ -447,6 +470,34 @@ GLOBAL_LIST_BOILERPLATE(all_pai_cards, /obj/item/device/paicard) if(user) to_chat(user, span_notice("You eject the card from \the [initial(src.name)].")) +/////////////////////////////// +//////////pAI Radios////////// +/////////////////////////////// +//Thanks heroman! + +/obj/item/device/radio/borg/pai + name = "integrated radio" + icon = 'icons/obj/robot_component.dmi' // Cyborgs radio icons should look like the component. + icon_state = "radio" + loudspeaker = FALSE + +/obj/item/device/radio/borg/pai/attackby(obj/item/weapon/W as obj, mob/user as mob) + return + +/obj/item/device/radio/borg/pai/recalculateChannels() + if(!istype(loc,/obj/item/device/paicard)) + return + var/obj/item/device/paicard/card = loc + secure_radio_connections = list() + channels = list() + + for(var/internal_chan in internal_channels) + var/ch_name = radio_channels_by_freq[internal_chan] + if(has_channel_access(card.pai, internal_chan)) + channels += ch_name + channels[ch_name] = 1 + secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) + /obj/item/device/paicard/typeb name = "personal AI device" icon = 'icons/obj/paicard.dmi' diff --git a/code/modules/mob/dead/observer/observer.dm b/code/modules/mob/dead/observer/observer.dm index d786f54e248..128ad94629d 100644 --- a/code/modules/mob/dead/observer/observer.dm +++ b/code/modules/mob/dead/observer/observer.dm @@ -978,7 +978,14 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp set name = "Blank pAI alert" set desc = "Flash an indicator light on available blank pAI devices for a smidgen of hope." + if(jobban_isbanned(usr, "pAI")) + to_chat(usr,"You cannot alert pAI cards when you are banned from playing as a pAI.") + return + if(usr.client.prefs?.be_special & BE_PAI) + var/choice = tgui_alert(usr, "Would you like to submit yourself to the recruitment list too?", "Confirmation", list("No", "Yes")) + if(choice == "Yes") + paiController.recruitWindow(usr) var/count = 0 for(var/obj/item/device/paicard/p in all_pai_cards) var/obj/item/device/paicard/PP = p diff --git a/code/modules/mob/living/silicon/pai/pai.dm b/code/modules/mob/living/silicon/pai/pai.dm index e007e0aa44f..aa816bac0ef 100644 --- a/code/modules/mob/living/silicon/pai/pai.dm +++ b/code/modules/mob/living/silicon/pai/pai.dm @@ -22,7 +22,7 @@ var/list/software = list() var/userDNA // The DNA string of our assigned user var/obj/item/device/paicard/card // The card we inhabit - var/obj/item/device/radio/radio // Our primary radio + var/obj/item/device/radio/borg/pai/radio // Our primary radio var/obj/item/device/communicator/integrated/communicator // Our integrated communicator. var/chassis = "pai-repairbot" // A record of your chosen chassis. @@ -112,7 +112,7 @@ communicator = new(src) if(card) if(!card.radio) - card.radio = new /obj/item/device/radio(src.card) + card.radio = new /obj/item/device/radio/borg/pai(src.card) radio = card.radio //Default languages without universal translator software @@ -135,7 +135,7 @@ var/datum/data/pda/app/messenger/M = pda.find_program(/datum/data/pda/app/messenger) if(M) - M.toff = TRUE + M.toff = FALSE ..() /mob/living/silicon/pai/Login() @@ -144,7 +144,6 @@ if (client.prefs) ooc_notes = client.prefs.metadata - // this function shows the information about being silenced as a pAI in the Status panel /mob/living/silicon/pai/proc/show_silenced() if(src.silence_time) @@ -403,12 +402,14 @@ M.drop_from_inventory(H) H.loc = get_turf(src) src.loc = get_turf(H) - - // Move us into the card and move the card to the ground. - src.loc = card - card.loc = get_turf(card) - src.forceMove(card) - card.forceMove(card.loc) + + if(isbelly(loc)) //If in tumby, when fold up, card go into tumby + var/obj/belly/B = loc + src.forceMove(card) + card.forceMove(B) + else //Otherwise go on floor + src.forceMove(card) + card.forceMove(get_turf(card)) canmove = 1 resting = 0 icon_state = "[chassis]" @@ -441,11 +442,15 @@ idcard.access |= ID.access to_chat(user, "You add the access from the [W] to [src].") to_chat(src, "\The [user] swipes the [W] over you. You copy the access codes.") + if(radio) + radio.recalculateChannels() return if("Remove Access") idcard.access = list() to_chat(user, "You remove the access from [src].") to_chat(src, "\The [user] swipes the [W] over you, removing access codes from you.") + if(radio) + radio.recalculateChannels() return if("Cancel") return