mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2025-12-11 10:11:09 +00:00
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.
46 lines
1.4 KiB
Plaintext
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)
|