diff --git a/code/_onclick/hud/screen_objects.dm b/code/_onclick/hud/screen_objects.dm index 55b7b2dcf76..cf22da2e3b6 100644 --- a/code/_onclick/hud/screen_objects.dm +++ b/code/_onclick/hud/screen_objects.dm @@ -297,13 +297,13 @@ if("Show Camera List") if(isAI(usr)) var/mob/living/silicon/ai/AI = usr - var/camera = input(AI) in AI.get_camera_list() + var/camera = input(AI, "Choose which camera you want to view", "Cameras") as null|anything in AI.get_camera_list() AI.ai_camera_list(camera) if("Track With Camera") if(isAI(usr)) var/mob/living/silicon/ai/AI = usr - var/target_name = input(AI) in AI.trackable_mobs() + var/target_name = input(AI, "Choose who you want to track", "Tracking") as null|anything in AI.trackable_mobs() AI.ai_camera_track(target_name) if("Toggle Camera Light") diff --git a/code/game/machinery/camera/tracking.dm b/code/game/machinery/camera/tracking.dm index 3b99e47fd8e..48b43ff3314 100644 --- a/code/game/machinery/camera/tracking.dm +++ b/code/game/machinery/camera/tracking.dm @@ -1,5 +1,7 @@ /mob/living/silicon/ai/proc/get_camera_list() + track.cameras.Cut() + if(src.stat == 2) return @@ -10,32 +12,25 @@ camera_sort(L) var/list/T = list() - T["Cancel"] = "Cancel" + for (var/obj/machinery/camera/C in L) var/list/tempnetwork = C.network&src.network if (tempnetwork.len) T[text("[][]", C.c_tag, (C.can_use() ? null : " (Deactivated)"))] = C - track = new() track.cameras = T return T -/mob/living/silicon/ai/proc/ai_camera_list(var/camera in get_camera_list()) - if(src.stat == 2) - src << "You can't list the cameras because you are dead!" - return - - if (!camera || camera == "Cancel") +/mob/living/silicon/ai/proc/ai_camera_list(var/camera) + if (!camera) return 0 var/obj/machinery/camera/C = track.cameras[camera] - track = null src.eyeobj.setLoc(C) return -// Used to allow the AI is write in mob names/camera name from the CMD line. /datum/trackable var/list/names = list() var/list/namecounts = list() @@ -45,10 +40,14 @@ /mob/living/silicon/ai/proc/trackable_mobs() + track.names.Cut() + track.namecounts.Cut() + track.humans.Cut() + track.others.Cut() + if(usr.stat == 2) return list() - var/datum/trackable/TB = new() for(var/mob/living/M in mob_list) // Easy checks first. // Don't detect mobs on Centcom. Since the wizard den is on Centcom, we only need this. @@ -82,30 +81,30 @@ continue var/name = M.name - if (name in TB.names) - TB.namecounts[name]++ - name = text("[] ([])", name, TB.namecounts[name]) + if (name in track.names) + track.namecounts[name]++ + name = text("[] ([])", name, track.namecounts[name]) else - TB.names.Add(name) - TB.namecounts[name] = 1 + track.names.Add(name) + track.namecounts[name] = 1 if(human) - TB.humans[name] = M + track.humans[name] = M else - TB.others[name] = M + track.others[name] = M + + var/list/targets = sortList(track.humans) + sortList(track.others) - var/list/targets = sortList(TB.humans) + sortList(TB.others) - src.track = TB return targets -/mob/living/silicon/ai/proc/ai_camera_track(var/target_name in trackable_mobs()) - if(src.stat == 2) - src << "You can't track with camera because you are dead!" - return +/mob/living/silicon/ai/verb/ai_camera_track(var/target_name as null|anything in trackable_mobs()) + set name = "track" + set hidden = 1 //Don't display it on the verb lists. This verb exists purely so you can type "track Oldman Robustin" and follow his ass + if(!target_name) - src.cameraFollow = null + return var/mob/target = (isnull(track.humans[target_name]) ? track.others[target_name] : track.humans[target_name]) - src.track = null + ai_actual_track(target) /mob/living/silicon/ai/proc/ai_actual_track(mob/living/target as mob) diff --git a/code/modules/mob/living/silicon/ai/ai.dm b/code/modules/mob/living/silicon/ai/ai.dm index d88f03a27bb..bb4d03f2515 100644 --- a/code/modules/mob/living/silicon/ai/ai.dm +++ b/code/modules/mob/living/silicon/ai/ai.dm @@ -48,7 +48,7 @@ var/list/ai_list = list() var/camera_light_on = 0 var/list/obj/machinery/camera/lit_cameras = list() - var/datum/trackable/track = null + var/datum/trackable/track = new() var/last_paper_seen = null var/can_shunt = 1