diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm
index 9a58e38085e..2af98275724 100644
--- a/code/modules/admin/admin.dm
+++ b/code/modules/admin/admin.dm
@@ -133,36 +133,6 @@
message_admins("[key_name_admin(usr)] toggled tinted_weldhelh.")
SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Toggle Tinted Welding Helmets", "[GLOB.tinted_weldhelh ? "Enabled" : "Disabled"]")) //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
-/datum/admins/proc/output_ai_laws()
- var/ai_number = 0
- for(var/i in GLOB.silicon_mobs)
- var/mob/living/silicon/S = i
- ai_number++
-
- var/message = ""
-
- if(isAI(S))
- message += "AI [key_name(S, usr)]'s laws:"
- else if(iscyborg(S))
- var/mob/living/silicon/robot/R = S
- message += "CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [key_name(R.connected_ai)])":"(Independent)"]: laws:"
- else if (ispAI(S))
- message += "pAI [key_name(S, usr)]'s laws:"
- else
- message += "SOMETHING SILICON [key_name(S, usr)]'s laws:"
-
- message += "
"
-
- if (S.laws == null)
- message += "[key_name(S, usr)]'s laws are null?? Contact a coder."
- else
- message += jointext(S.laws.get_law_list(include_zeroth = TRUE), "
")
-
- to_chat(usr, message, confidential = TRUE)
-
- if(!ai_number)
- to_chat(usr, "No AIs located" , confidential = TRUE)
-
/datum/admins/proc/dynamic_mode_options(mob/user)
var/dat = {"
Dynamic Mode Options
diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm
index 3bd0d13ff62..ba868766e4d 100644
--- a/code/modules/admin/admin_verbs.dm
+++ b/code/modules/admin/admin_verbs.dm
@@ -89,6 +89,12 @@ GLOBAL_PROTECT(admin_verbs_admin)
/datum/admins/proc/paintings_manager,
/datum/admins/proc/display_tags,
/datum/admins/proc/fishing_calculator,
+ /client/proc/list_bombers,
+ /client/proc/list_signalers,
+ /client/proc/list_law_changes,
+ /client/proc/show_manifest,
+ /client/proc/list_dna,
+ /client/proc/list_fingerprints,
)
GLOBAL_LIST_INIT(admin_verbs_ban, list(/client/proc/unban_panel, /client/proc/ban_panel, /client/proc/stickybanpanel))
GLOBAL_PROTECT(admin_verbs_ban)
@@ -378,6 +384,54 @@ GLOBAL_PROTECT(admin_verbs_poll)
message_admins("[key_name_admin(usr)] checked antagonists.")
SSblackbox.record_feedback("tally", "admin_verb", 1, "Check Antagonists") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+/client/proc/list_bombers()
+ set name = "List Bombers"
+ set category = "Admin.Game"
+ if(!holder)
+ return
+ holder.list_bombers()
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "List Bombers") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/list_signalers()
+ set name = "List Signalers"
+ set category = "Admin.Game"
+ if(!holder)
+ return
+ holder.list_signalers()
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "List Signalers") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/list_law_changes()
+ set name = "List Law Changes"
+ set category = "Debug"
+ if(!holder)
+ return
+ holder.list_law_changes()
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "List Law Changes") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/show_manifest()
+ set name = "Show Manifest"
+ set category = "Debug"
+ if(!holder)
+ return
+ holder.show_manifest()
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "Show Manifest") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/list_dna()
+ set name = "List DNA"
+ set category = "Debug"
+ if(!holder)
+ return
+ holder.list_dna()
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "List DNA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
+/client/proc/list_fingerprints()
+ set name = "List Fingerprints"
+ set category = "Debug"
+ if(!holder)
+ return
+ holder.list_fingerprints()
+ SSblackbox.record_feedback("tally", "admin_verb", 1, "List Fingerprints") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
+
/client/proc/ban_panel()
set name = "Banning Panel"
set category = "Admin"
diff --git a/code/modules/admin/verbs/list_exposer.dm b/code/modules/admin/verbs/list_exposer.dm
new file mode 100644
index 00000000000..b4cd1f42e76
--- /dev/null
+++ b/code/modules/admin/verbs/list_exposer.dm
@@ -0,0 +1,88 @@
+// All the procs that admins can use to view something like a global list in a cleaner manner than just View Variables are contained in this file.
+
+/datum/admins/proc/list_bombers()
+ if(!SSticker.HasRoundStarted())
+ tgui_alert(usr, "The game hasn't started yet!")
+ return
+ var/data = "Bombing List
"
+ for(var/entry in GLOB.bombers)
+ data += text("[entry]
")
+ usr << browse(data, "window=bombers;size=800x500")
+
+/datum/admins/proc/list_signalers()
+ if(!SSticker.HasRoundStarted())
+ tgui_alert(usr, "The game hasn't started yet!")
+ return
+ var/data = "Showing last [length(GLOB.lastsignalers)] signalers.
"
+ for(var/entry in GLOB.lastsignalers)
+ data += "[entry]
"
+ usr << browse(data, "window=lastsignalers;size=800x500")
+
+/datum/admins/proc/list_law_changes()
+ if(!SSticker.HasRoundStarted())
+ tgui_alert(usr, "The game hasn't started yet!")
+ return
+ var/data = "Showing last [length(GLOB.lawchanges)] law changes.
"
+ for(var/entry in GLOB.lawchanges)
+ data += "[entry]
"
+ usr << browse(data, "window=lawchanges;size=800x500")
+
+/datum/admins/proc/list_dna()
+ var/data = "Showing DNA from blood.
"
+ data += "| Name | DNA | Blood Type |
"
+ for(var/entry in GLOB.human_list)
+ var/mob/living/carbon/human/subject = entry
+ if(subject.ckey)
+ data += "| [subject] | [subject.dna.unique_enzymes] | [subject.dna.blood_type] |
"
+ data += "
"
+ usr << browse(data, "window=DNA;size=440x410")
+
+/datum/admins/proc/list_fingerprints() //kid named fingerprints
+ var/data = "Showing Fingerprints.
"
+ data += "| Name | Fingerprints |
"
+ for(var/entry in GLOB.human_list)
+ var/mob/living/carbon/human/subject = entry
+ if(subject.ckey)
+ data += "| [subject] | [md5(subject.dna.unique_identity)] |
"
+ data += "
"
+ usr << browse(data, "window=fingerprints;size=440x410")
+
+/datum/admins/proc/show_manifest()
+ if(!SSticker.HasRoundStarted())
+ tgui_alert(usr, "The game hasn't started yet!")
+ return
+ var/data = "Showing Crew Manifest.
"
+ data += "| Name | Position |
"
+ for(var/datum/data/record/entry in GLOB.data_core.general)
+ data += "| [entry.fields["name"]] | [entry.fields["rank"]][entry.fields["rank"] != entry.fields["trim"] ? " ([entry.fields["trim"]])" : ""] |
"
+ data += "
"
+ usr << browse(data, "window=manifest;size=440x410")
+
+/datum/admins/proc/output_ai_laws()
+ var/law_bound_entities = 0
+ for(var/mob/living/silicon/subject as anything in GLOB.silicon_mobs)
+ law_bound_entities++
+
+ var/message = ""
+
+ if(isAI(subject))
+ message += "AI [key_name(subject, usr)]'s laws:"
+ else if(iscyborg(subject))
+ var/mob/living/silicon/robot/borg = subject
+ message += "CYBORG [key_name(subject, usr)] [borg.connected_ai?"(Slaved to: [key_name(borg.connected_ai)])":"(Independent)"]: laws:"
+ else if (ispAI(subject))
+ message += "pAI [key_name(subject, usr)]'s laws:"
+ else
+ message += "SOMETHING SILICON [key_name(subject, usr)]'s laws:"
+
+ message += "
"
+
+ if (!subject.laws)
+ message += "[key_name(subject, usr)]'s laws are null?? Contact a coder."
+ else
+ message += jointext(subject.laws.get_law_list(include_zeroth = TRUE), "
")
+
+ to_chat(usr, message, confidential = TRUE)
+
+ if(!law_bound_entities)
+ to_chat(usr, "No law bound entities located", confidential = TRUE)
diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm
index bf1112d7811..eb17cff119a 100644
--- a/code/modules/admin/verbs/secrets.dm
+++ b/code/modules/admin/verbs/secrets.dm
@@ -91,6 +91,7 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
sec_job.total_positions = -1
sec_job.spawn_positions = -1
message_admins("[key_name_admin(holder)] has removed the cap on security officers.")
+
//Buttons for helpful stuff. This is where people land in the tgui
if("clear_virus")
var/choice = tgui_alert(usr, "Are you sure you want to cure all disease?",, list("Yes", "Cancel"))
@@ -99,51 +100,31 @@ GLOBAL_DATUM(everyone_a_traitor, /datum/everyone_is_a_traitor_controller)
for(var/thing in SSdisease.active_diseases)
var/datum/disease/D = thing
D.cure(0)
+
if("list_bombers")
- var/dat = "Bombing List
"
- for(var/l in GLOB.bombers)
- dat += text("[l]
")
- holder << browse(dat, "window=bombers")
+ holder.list_bombers()
if("list_signalers")
- var/dat = "Showing last [length(GLOB.lastsignalers)] signalers.
"
- for(var/sig in GLOB.lastsignalers)
- dat += "[sig]
"
- holder << browse(dat, "window=lastsignalers;size=800x500")
+ holder.list_signalers()
+
if("list_lawchanges")
- var/dat = "Showing last [length(GLOB.lawchanges)] law changes.
"
- for(var/sig in GLOB.lawchanges)
- dat += "[sig]
"
- holder << browse(dat, "window=lawchanges;size=800x500")
+ holder.list_law_changes()
+
if("showailaws")
- holder.holder.output_ai_laws()//huh, inconvenient var naming, huh?
+ holder.check_ai_laws()
+
if("manifest")
- var/dat = "Showing Crew Manifest.
"
- dat += "| Name | Position |
"
- for(var/datum/data/record/t in GLOB.data_core.general)
- dat += "| [t.fields["name"]] | [t.fields["rank"]][t.fields["rank"] != t.fields["trim"] ? " ([t.fields["trim"]])" : ""] |
"
- dat += "
"
- holder << browse(dat, "window=manifest;size=440x410")
+ holder.show_manifest()
+
if("dna")
- var/dat = "Showing DNA from blood.
"
- dat += "| Name | DNA | Blood Type |
"
- for(var/i in GLOB.human_list)
- var/mob/living/carbon/human/H = i
- if(H.ckey)
- dat += "| [H] | [H.dna.unique_enzymes] | [H.dna.blood_type] |
"
- dat += "
"
- holder << browse(dat, "window=DNA;size=440x410")
+ holder.list_dna()
+
if("fingerprints")
- var/dat = "Showing Fingerprints.
"
- dat += "| Name | Fingerprints |
"
- for(var/i in GLOB.human_list)
- var/mob/living/carbon/human/H = i
- if(H.ckey)
- dat += "| [H] | [md5(H.dna.unique_identity)] |
"
- dat += "
"
- holder << browse(dat, "window=fingerprints;size=440x410")
+ holder.list_fingerprints()
+
if("ctfbutton")
toggle_id_ctf(holder, "centcom")
+
if("tdomereset")
var/delete_mobs = tgui_alert(usr,"Clear all mobs?","Confirm",list("Yes","No","Cancel"))
if(delete_mobs == "Cancel")
diff --git a/tgstation.dme b/tgstation.dme
index 10bf0ffca8d..a3c60ca8029 100644
--- a/tgstation.dme
+++ b/tgstation.dme
@@ -2179,6 +2179,7 @@
#include "code\modules\admin\verbs\hiddenprints.dm"
#include "code\modules\admin\verbs\highlander_datum.dm"
#include "code\modules\admin\verbs\individual_logging.dm"
+#include "code\modules\admin\verbs\list_exposer.dm"
#include "code\modules\admin\verbs\machine_upgrade.dm"
#include "code\modules\admin\verbs\manipulate_organs.dm"
#include "code\modules\admin\verbs\map_template_loadverb.dm"