diff --git a/code/controllers/subsystem/pai.dm b/code/controllers/subsystem/pai.dm
index e83ae273d52..f53e557a459 100644
--- a/code/controllers/subsystem/pai.dm
+++ b/code/controllers/subsystem/pai.dm
@@ -1,4 +1,5 @@
var/datum/subsystem/pai/SSpai
+var/list/obj/item/device/paicard/pai_card_list = list()
/datum/subsystem/pai
name = "pAI"
@@ -6,6 +7,8 @@ var/datum/subsystem/pai/SSpai
flags = SS_NO_INIT|SS_NO_FIRE
var/list/candidates = list()
+ var/ghost_spam = FALSE
+ var/spam_delay = 100
/datum/subsystem/pai/New()
NEW_SS_GLOBAL(SSpai)
@@ -26,7 +29,6 @@ var/datum/subsystem/pai/SSpai
pai.key = candidate.key
card.setPersonality(pai)
- card.looking_for_personality = 0
ticker.mode.update_cult_icons_removed(card.pai.mind)
ticker.mode.update_rev_icons_removed(card.pai.mind)
@@ -73,8 +75,8 @@ var/datum/subsystem/pai/SSpai
if("submit")
if(candidate)
candidate.ready = 1
- for(var/obj/item/device/paicard/p in world)
- if(p.looking_for_personality == 1)
+ for(var/obj/item/device/paicard/p in pai_card_list)
+ if(!p.pai)
p.alertUpdate()
usr << browse(null, "window=paiRecruit")
return
@@ -131,7 +133,18 @@ var/datum/subsystem/pai/SSpai
M << browse(dat, "window=paiRecruit")
+/datum/subsystem/pai/proc/spam_again()
+ ghost_spam = FALSE
+
/datum/subsystem/pai/proc/findPAI(obj/item/device/paicard/p, mob/user)
+ if(!ghost_spam)
+ ghost_spam = TRUE
+ deadchat_broadcast("Someone is requesting a pAI personality! Use the pAI button to submit yourself as one.")
+ for(var/mob/dead/observer/G in player_list)
+ if(!G.key || !G.client)
+ continue
+ G << 'sound/misc/server-ready.ogg' //Alerting them to their consideration
+ addtimer(src, "spam_again", spam_delay)
var/list/available = list()
for(var/datum/paiCandidate/c in SSpai.candidates)
if(c.ready)
diff --git a/code/game/objects/items/devices/paicard.dm b/code/game/objects/items/devices/paicard.dm
index 1f16796bd77..aca172ac3d6 100644
--- a/code/game/objects/items/devices/paicard.dm
+++ b/code/game/objects/items/devices/paicard.dm
@@ -6,16 +6,17 @@
w_class = WEIGHT_CLASS_SMALL
slot_flags = SLOT_BELT
origin_tech = "programming=2"
- var/looking_for_personality = 0
var/mob/living/silicon/pai/pai
resistance_flags = FIRE_PROOF | ACID_PROOF | INDESTRUCTIBLE
/obj/item/device/paicard/New()
..()
+ pai_card_list += src
add_overlay("pai-off")
/obj/item/device/paicard/Destroy()
//Will stop people throwing friend pAIs into the singularity so they can respawn
+ pai_card_list -= src
if(!isnull(pai))
pai.death(0)
return ..()
@@ -44,10 +45,9 @@
dat += "Radio firmware not loaded. Please install a pAI personality to load firmware.
"
dat += "\[Wipe current pAI personality\]
"
else
- if(looking_for_personality)
- dat += "No personality installed.
"
- dat += "Searching for a personality..."
- dat += "\[View available personalities\]
"
+ dat += "No personality installed.
"
+ dat += "Searching for a personality... Press view available personalities to notify potential candidates."
+ dat += "\[View available personalities\]
"
user << browse(dat, "window=paicard")
onclose(user, "paicard")
return
@@ -58,7 +58,6 @@
return
if(href_list["request"])
- src.looking_for_personality = 1
SSpai.findPAI(src, usr)
if(pai)