diff --git a/code/datums/world_topic.dm b/code/datums/world_topic.dm index 946090c571..6b8d1c9ce5 100644 --- a/code/datums/world_topic.dm +++ b/code/datums/world_topic.dm @@ -207,3 +207,101 @@ if(!key_valid) GLOB.topic_status_cache = . +/datum/world_topic/jsonstatus + keyword = "jsonstatus" + +/datum/world_topic/jsonstatus/Run(list/input, addr) + . = list() + .["mode"] = "hidden" // GLOB.master_mode - woops we don't want people to know if there's secret/extended :) + .["round_id"] = "[GLOB.round_id]" + .["players"] = GLOB.clients.len + var/list/adm = get_admin_counts() + var/list/presentmins = adm["present"] + var/list/afkmins = adm["afk"] + .["admins"] = presentmins.len + afkmins.len //equivalent to the info gotten from adminwho + .["security_level"] = "[NUM2SECLEVEL(GLOB.security_level)]" + .["round_duration"] = WORLDTIME2TEXT("hh:mm:ss") + .["map"] = SSmapping.config.map_name + return json_encode(.) + +/datum/world_topic/jsonplayers + keyword = "jsonplayers" + +/datum/world_topic/jsonplayers/Run(list/input, addr) + . = list() + for(var/client/C in GLOB.clients) + if(C.holder?.fakekey) + . += C.holder.fakekey + continue + . += C.key + return json_encode(.) + +/datum/world_topic/jsonmanifest + keyword = "jsonmanifest" + +/datum/world_topic/jsonmanifest/Run(list/input, addr) + var/list/command = list() + var/list/security = list() + var/list/engineering = list() + var/list/medical = list() + var/list/science = list() + var/list/cargo = list() + var/list/civilian = list() + var/list/misc = list() + for(var/datum/data/record/R in GLOB.data_core.general) + var/name = R.fields["name"] + var/rank = R.fields["rank"] + var/real_rank = rank // make_list_rank(R.fields["real_rank"]) + if(real_rank in GLOB.security_positions) + security[name] = rank + else if(real_rank in GLOB.engineering_positions) + engineering[name] = rank + else if(real_rank in GLOB.medical_positions) + medical[name] = rank + else if(real_rank in GLOB.science_positions) + science[name] = rank + else if(real_rank in GLOB.supply_positions) + cargo[name] = rank + else if(real_rank in GLOB.civilian_positions) + civilian[name] = rank + else + misc[name] = rank + // mixed departments, /datum/department when + if(real_rank in GLOB.command_positions) + command[name] = rank + + . = list() + .["Command"] = command + .["Security"] = security + .["Engineering"] = engineering + .["Medical"] = medical + .["Science"] = science + .["Cargo"] = cargo + .["Civilian"] = civilian + .["Misc"] = misc + return json_encode(.) + +/datum/world_topic/jsonrevision + keyword = "jsonrevision" + +/datum/world_topic/jsonrevision/Run(list/input, addr) + var/datum/getrev/revdata = GLOB.revdata + var/list/data = list( + "date" = copytext(revdata.date, 1, 11), + "dd_version" = world.byond_version, + "dd_build" = world.byond_build, + "dm_version" = DM_VERSION, + "dm_build" = DM_BUILD, + "revision" = revdata.commit, + "round_id" = "[GLOB.round_id]", + "testmerge_base_url" = "[CONFIG_GET(string/githuburl)]/pull/" + ) + if (revdata.testmerge.len) + for (var/datum/tgs_revision_information/test_merge/TM in revdata.testmerge) + data["testmerges"] += list(list( + "id" = TM.number, + "desc" = TM.title, + "author" = TM.author + )) + + return json_encode(data)