mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-07-18 18:44:48 +01:00
Adds a basic AI controller info panel to VV. (#29898)
This commit is contained in:
committed by
GitHub
parent
06f19cdecb
commit
2a81f86af7
@@ -1305,3 +1305,23 @@ GLOBAL_LIST_INIT(view_logs_verbs, list(
|
||||
|
||||
B.to_backup_disk(get_turf(usr))
|
||||
|
||||
/proc/ghost_follow_uid(mob/user, uid)
|
||||
var/client/client = user.client
|
||||
if(!isobserver(user))
|
||||
if(!check_rights(R_ADMIN|R_MOD)) // Need to be mod or admin to aghost
|
||||
return
|
||||
user.client.admin_ghost()
|
||||
var/datum/target = locateUID(uid)
|
||||
if(QDELETED(target))
|
||||
to_chat(user, "<span class='warning'>This datum has been deleted!</span>")
|
||||
return
|
||||
|
||||
if(istype(target, /datum/mind))
|
||||
var/datum/mind/mind = target
|
||||
if(!ismob(mind.current))
|
||||
to_chat(user, "<span class='warning'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
target = mind.current
|
||||
|
||||
var/mob/dead/observer/A = client.mob
|
||||
A.ManualFollow(target)
|
||||
|
||||
@@ -149,25 +149,7 @@ RESTRICT_TYPE(/datum/ui_module/admin/antagonist_menu)
|
||||
if("pm")
|
||||
ui.user.client.cmd_admin_pm(params["ckey"], null)
|
||||
if("follow")
|
||||
var/client/C = ui.user.client
|
||||
if(!isobserver(ui.user))
|
||||
if(!check_rights(R_ADMIN|R_MOD)) // Need to be mod or admin to aghost
|
||||
return
|
||||
C.admin_ghost()
|
||||
var/datum/target = locateUID(params["datum_uid"])
|
||||
if(QDELETED(target))
|
||||
to_chat(ui.user, "<span class='warning'>This datum has been deleted!</span>")
|
||||
return
|
||||
|
||||
if(istype(target, /datum/mind))
|
||||
var/datum/mind/mind = target
|
||||
if(!ismob(mind.current))
|
||||
to_chat(ui.user, "<span class='warning'>This can only be used on instances of type /mob</span>")
|
||||
return
|
||||
target = mind.current
|
||||
|
||||
var/mob/dead/observer/A = C.mob
|
||||
A.ManualFollow(target)
|
||||
ghost_follow_uid(ui.user, params["datum_uid"])
|
||||
if("obs")
|
||||
var/client/C = ui.user.client
|
||||
var/datum/mind/mind = locateUID(params["mind_uid"])
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
/datum/ui_module/ai_controller_debugger
|
||||
name = "AI Controller Debugger"
|
||||
var/datum/ai_controller/controller
|
||||
var/paused = FALSE
|
||||
var/list/data = list()
|
||||
|
||||
/datum/ui_module/ai_controller_debugger/New(datum/ai_controller/controller_)
|
||||
..()
|
||||
if(!istype(controller_))
|
||||
stack_trace("Attempted to create an AI controller debugger on an invalid target!")
|
||||
qdel(src)
|
||||
return
|
||||
|
||||
controller = controller_
|
||||
|
||||
/datum/ui_module/ai_controller_debugger/ui_state(mob/user)
|
||||
return GLOB.admin_state
|
||||
|
||||
/datum/ui_module/ai_controller_debugger/ui_interact(mob/user, datum/tgui/ui)
|
||||
ui = SStgui.try_update_ui(user, src, ui)
|
||||
if(!ui)
|
||||
ui = new(user, src, "AIControllerDebugger", name)
|
||||
ui_data(user)
|
||||
ui.open()
|
||||
|
||||
/datum/ui_module/ai_controller_debugger/ui_data(mob/user)
|
||||
data["paused"] = paused
|
||||
if(paused)
|
||||
return data
|
||||
|
||||
data["controller"] = list(
|
||||
"type" = "[controller.type]",
|
||||
"current_behaviors" = list(),
|
||||
"planned_behaviors" = list(),
|
||||
"blackboard" = list(),
|
||||
)
|
||||
if(controller.pawn)
|
||||
data["controller"]["pawn"] = list(
|
||||
"name" = "[controller.pawn]",
|
||||
"uid" = controller.pawn.UID(),
|
||||
)
|
||||
data["controller"]["type"] = "[controller.type]"
|
||||
data["controller"]["idle_behavior"] = "[controller.idle_behavior]"
|
||||
data["controller"]["movement"] = "[controller.ai_movement]"
|
||||
var/datum/movement_target = controller.current_movement_target
|
||||
if(istype(movement_target))
|
||||
data["controller"]["movement_target"] = list(
|
||||
"name" = "[movement_target]",
|
||||
"uid" = "[movement_target.UID()]",
|
||||
"source" = "[controller.movement_target_source]",
|
||||
)
|
||||
if(LAZYLEN(controller.current_behaviors))
|
||||
for(var/datum/ai_behavior/behavior in controller.current_behaviors)
|
||||
data["controller"]["current_behaviors"] += "[behavior.type]"
|
||||
|
||||
if(LAZYLEN(controller.planned_behaviors))
|
||||
for(var/datum/ai_behavior/behavior in controller.planned_behaviors)
|
||||
data["controller"]["planned_behaviors"] += "[behavior.type]"
|
||||
|
||||
for(var/name in controller.blackboard)
|
||||
var/value = controller.blackboard[name]
|
||||
|
||||
var/list/item = list(
|
||||
"name" = name,
|
||||
"value" = "[value]",
|
||||
)
|
||||
var/datum/valid_uid = locateUID(value)
|
||||
if(istype(valid_uid))
|
||||
item["uid"] = value
|
||||
if(isdatum(value))
|
||||
var/datum/D = value
|
||||
item["uid"] = D.UID()
|
||||
if(islist(value))
|
||||
item["value"] = json_encode(value)
|
||||
data["controller"]["blackboard"] += list(item)
|
||||
return data
|
||||
|
||||
/datum/ui_module/ai_controller_debugger/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state)
|
||||
if(..())
|
||||
return
|
||||
|
||||
switch(action)
|
||||
if("vv")
|
||||
ui.user.client.debug_variables(locateUID(params["uid"]))
|
||||
if("flw")
|
||||
ghost_follow_uid(ui.user, params["uid"])
|
||||
|
||||
return TRUE
|
||||
Reference in New Issue
Block a user