diff --git a/code/_helpers/unsorted.dm b/code/_helpers/unsorted.dm index 5d80b443ee..3fdb4d13fd 100644 --- a/code/_helpers/unsorted.dm +++ b/code/_helpers/unsorted.dm @@ -453,29 +453,7 @@ Turf and target are seperate in case you want to teleport some distance from a t //Returns a list of all mobs with their name /proc/getmobs() - - var/list/mobs = sortmobs() - var/list/names = list() - var/list/creatures = list() - var/list/namecounts = list() - for(var/mob/M in mobs) - var/name = M.name - if (name in names) - namecounts[name]++ - name = "[name] ([namecounts[name]])" - else - names.Add(name) - namecounts[name] = 1 - if (M.real_name && M.real_name != M.name) - name += " \[[M.real_name]\]" - if (M.stat == 2) - if(istype(M, /mob/observer/dead/)) - name += " \[ghost\]" - else - name += " \[dead\]" - creatures[name] = M - - return creatures + return observe_list_format(sortmobs()) //Orders mobs by type then by name /proc/sortmobs() @@ -509,6 +487,34 @@ Turf and target are seperate in case you want to teleport some distance from a t // mob_list.Add(M) return moblist +/proc/observe_list_format(input_list) + if(!islist(input_list)) + return + var/list/names = list() + var/list/output_list = list() + var/list/namecounts = list() + var/name + for(var/atom/A in input_list) + name = A.name + if(name in names) + namecounts[name]++ + name = "[name] ([namecounts[name]])" + else + names.Add(name) + namecounts[name] = 1 + if(ismob(A)) + var/mob/M = A + if(M.real_name && M.real_name != M.name) + name += " \[[M.real_name]\]" + if(M.stat == DEAD) + if(istype(M, /mob/observer/dead/)) + name += " \[ghost\]" + else + name += " \[dead\]" + output_list[name] = A + + return output_list + // Format a power value in W, kW, MW, or GW. /proc/DisplayPower(powerused) if(powerused < 1000) //Less than a kW diff --git a/code/modules/mob/mob.dm b/code/modules/mob/mob.dm index 7dde39e09c..7209bfb974 100644 --- a/code/modules/mob/mob.dm +++ b/code/modules/mob/mob.dm @@ -419,56 +419,26 @@ if(is_admin && stat == DEAD) is_admin = 0 - var/list/names = list() - var/list/namecounts = list() - var/list/creatures = list() + var/list/targets = list() - for(var/obj/O in world) //EWWWWWWWWWWWWWWWWWWWWWWWW ~needs to be optimised - if(!O.loc) - continue - if(istype(O, /obj/item/weapon/disk/nuclear)) - var/name = "Nuclear Disk" - if (names.Find(name)) - namecounts[name]++ - name = "[name] ([namecounts[name]])" - else - names.Add(name) - namecounts[name] = 1 - creatures[name] = O - - if(istype(O, /obj/singularity)) - var/name = "Singularity" - if (names.Find(name)) - namecounts[name]++ - name = "[name] ([namecounts[name]])" - else - names.Add(name) - namecounts[name] = 1 - creatures[name] = O - - for(var/mob/M in sortAtom(mob_list)) - var/name = M.name - if (names.Find(name)) - namecounts[name]++ - name = "[name] ([namecounts[name]])" - else - names.Add(name) - namecounts[name] = 1 - - creatures[name] = M + targets += observe_list_format(nuke_disks) + targets += observe_list_format(all_singularities) + targets += getmobs() + targets += observe_list_format(sortAtom(mechas_list)) + targets += observe_list_format(SSshuttles.ships) client.perspective = EYE_PERSPECTIVE var/eye_name = null var/ok = "[is_admin ? "Admin Observe" : "Observe"]" - eye_name = input("Please, select a player!", ok, null, null) as null|anything in creatures + eye_name = input("Please, select a player!", ok, null, null) as null|anything in targets if (!eye_name) return - var/mob/mob_eye = creatures[eye_name] + var/mob/mob_eye = targets[eye_name] if(client && mob_eye) client.eye = mob_eye diff --git a/code/modules/power/tesla/energy_ball.dm b/code/modules/power/tesla/energy_ball.dm index 2f0418b60d..b9c44b7b37 100644 --- a/code/modules/power/tesla/energy_ball.dm +++ b/code/modules/power/tesla/energy_ball.dm @@ -119,6 +119,7 @@ if(!loc) return var/obj/singularity/energy_ball/EB = new(loc, 0, TRUE) + all_singularities -= EB //why are these miniballs even singularities in the first place, they don't do anything EB.transform *= pick(0.3, 0.4, 0.5, 0.6, 0.7) var/icon/I = icon(icon,icon_state,dir)