Files
Bubberstation/code/modules/pai/debug.dm
Kapu1178 b9c803a9d8 Base implementation of /datum/persistent_client (#89449)
Converts `/datum/player_details` into `/datum/persistent_client`.
Persistent Clients persist across connections. The only time a mob's
persistent client will change is if the ckey it's bound to logs into a
different mob, or the mob is deleted (duh).

Also adds PossessByPlayer() so that transfering mob control is cleaner
and makes more immediate sense if you don't know byond-fu.

Clients are an abstract representation of a connection that can be
dropped at almost any moment so putting things that should be stable to
access at any time onto an undying object is ideal. This allows for
future expansions like abstracting away client.screen and managing
everything cleanly.
2025-03-12 16:47:54 -04:00

46 lines
1.4 KiB
Plaintext

/client/proc/makepAI(turf/target in GLOB.mob_list)
set category = "Admin.Fun"
set name = "Make pAI"
set desc = "Specify a location to spawn a pAI device, then specify a key to play that pAI"
var/list/available = list()
for(var/mob/player as anything in GLOB.player_list)
if(player.client && player.key)
available.Add(player)
var/mob/choice = tgui_input_list(usr, "Choose a player to play the pAI", "Spawn pAI", sort_names(available))
if(isnull(choice))
return
var/chosen_name = input(choice, "Enter your pAI name:", "pAI Name", "Personal AI") as text|null
if (isnull(chosen_name))
return
if(!isobserver(choice))
var/confirm = tgui_alert(usr, "[choice.key] isn't ghosting right now. Are you sure you want to yank them out of their body and place them in this pAI?", "Spawn pAI Confirmation", list("Yes", "No"))
if(confirm != "Yes")
return
var/obj/item/pai_card/card = new(target)
var/mob/living/silicon/pai/pai = new(card)
pai.name = chosen_name
pai.real_name = pai.name
pai.PossessByPlayer(choice.key)
card.set_personality(pai)
if(SSpai.candidates[key])
SSpai.candidates -= key
BLACKBOX_LOG_ADMIN_VERB("Make pAI")
/**
* Creates a new pAI.
*
* @param {boolean} delete_old - If TRUE, deletes the old pAI.
*/
/mob/proc/make_pai(delete_old)
var/obj/item/pai_card/card = new(src)
var/mob/living/silicon/pai/pai = new(card)
pai.PossessByPlayer(key)
pai.name = name
card.set_personality(pai)
if(delete_old)
qdel(src)