/datum/admins/proc/player_panel_new()//The new one if(!usr.client.holder) return // This stops the panel from being invoked by mentors who press F7. if(!check_rights(R_ADMIN)) message_admins("[key_name_admin(usr)] attempted to invoke player panel without admin rights. If this is a mentor, its a chance they accidentally hit F7. If this is NOT a mentor, there is a high chance an exploit is being used") return var/dat = "Admin Player Panel" //javascript, the part that does most of the work~ dat += {" "} //body tag start + onload and onkeypress (onkeyup) javascript event calls dat += "" //title + search bar dat += {"
Player panel
Hover over a line to see more information | [check_rights(R_ADMIN,0) ? "Check antagonists | Kick everyone/AFKers in lobby" : "" ]

Search:
"} //player table header dat += {" "} var/list/mobs = sortmobs() var/i = 1 for(var/mob/M in mobs) if(M.ckey) var/color = "#e6e6e6" if(i%2 == 0) color = "#f2f2f2" var/antagonist_string = get_antag_type_truncated_plaintext_string(M) var/M_job = "" if(isliving(M)) if(iscarbon(M)) //Carbon stuff if(issmall(M)) M_job = "Monkey" else if(ishuman(M)) M_job = M.job else if(isslime(M)) M_job = "slime" else if(isalien(M)) //aliens if(islarva(M)) M_job = "Alien larva" else M_job = "Alien" else M_job = "Carbon-based" else if(issilicon(M)) //silicon if(isAI(M)) M_job = "AI" else if(ispAI(M)) M_job = "pAI" else if(isrobot(M)) M_job = "Cyborg" else M_job = "Silicon-based" else if(isanimal(M)) //simple animals if(iscorgi(M)) M_job = "Corgi" else M_job = "Animal" else M_job = "Living" else if(isnewplayer(M)) M_job = "New player" else if(isobserver(M)) M_job = "Ghost" M_job = replacetext(M_job, "'", "") M_job = replacetext(M_job, "\"", "") M_job = replacetext(M_job, "\\", "") var/M_name = M.name M_name = replacetext(M_name, "'", "") M_name = replacetext(M_name, "\"", "") M_name = replacetext(M_name, "\\", "") var/M_rname = M.real_name M_rname = replacetext(M_rname, "'", "") M_rname = replacetext(M_rname, "\"", "") M_rname = replacetext(M_rname, "\\", "") var/M_key = M.key M_key = replacetext(M_key, "'", "") M_key = replacetext(M_key, "\"", "") M_key = replacetext(M_key, "\\", "") var/M_eyeUID = "" if(isAI(M)) var/mob/living/silicon/ai/A = M if(A.client && A.eyeobj) // No point following clientless AI eyes M_eyeUID = "[A.eyeobj.UID()]" var/client_ckey = M.client ? M.client.ckey : null //output for each mob dat += {" "} i++ //player table ending dat += {"
[M_name] - [M_rname] - [M_key] ([M_job])
"} usr << browse(dat, "window=players;size=600x480") /datum/admins/proc/check_antagonists_line(mob/M, caption = "", close = 1) var/logout_status logout_status = M.client ? "" : " (logged out)" var/dname = M.real_name var/area/A = get_area(M) if(!dname) dname = M return {"[dname][caption][logout_status][istype(A, /area/security/permabrig) ? " (PERMA) " : ""][M.stat == 2 ? " (DEAD)" : ""] PM [ADMIN_FLW(M, "FLW")] [close ? "" : ""]"} /datum/admins/proc/check_antagonists() if(!check_rights(R_ADMIN)) return if(SSticker && SSticker.current_state >= GAME_STATE_PLAYING) var/dat = "Round Status

Round Status

" dat += "Current Game Mode: [SSticker.mode.name]
" dat += "Round Duration: [round(ROUND_TIME / 36000)]:[add_zero(num2text(ROUND_TIME / 600 % 60), 2)]:[add_zero(num2text(ROUND_TIME / 10 % 60), 2)]
" dat += "Emergency shuttle
" if(SSshuttle.emergency.mode < SHUTTLE_CALL) dat += "Call Shuttle
" else var/timeleft = SSshuttle.emergency.timeLeft() if(SSshuttle.emergency.mode < SHUTTLE_DOCKED) dat += "ETA: [(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]
" dat += "Send Back
" else dat += "ETA: [(timeleft / 60) % 60]:[add_zero(num2text(timeleft % 60), 2)]
" dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]
" if(SSticker.mode.syndicates.len) dat += "
" for(var/datum/mind/N in SSticker.mode.syndicates) var/mob/M = N.current if(M) dat += check_antagonists_line(M) else dat += "" dat += "
Syndicates
Nuclear Operative not found!

" for(var/obj/item/disk/nuclear/N in GLOB.poi_list) dat += "" dat += "
Nuclear Disk(s)
[N.name], " var/atom/disk_loc = N.loc while(!istype(disk_loc, /turf)) if(istype(disk_loc, /mob)) var/mob/M = disk_loc dat += "carried by [M.real_name] " if(istype(disk_loc, /obj)) var/obj/O = disk_loc dat += "in \a [O.name] " disk_loc = disk_loc.loc dat += "in [disk_loc.loc] at ([disk_loc.x], [disk_loc.y], [disk_loc.z])
" if(SSticker.mode.head_revolutionaries.len || SSticker.mode.revolutionaries.len) dat += "
" for(var/datum/mind/N in SSticker.mode.head_revolutionaries) var/mob/M = N.current if(!M) dat += "" else dat += check_antagonists_line(M, "(leader)") for(var/datum/mind/N in SSticker.mode.revolutionaries) var/mob/M = N.current if(M) dat += check_antagonists_line(M) dat += "
Revolutionaries
Head Revolutionary not found!
" for(var/datum/mind/N in SSticker.mode.get_living_heads()) var/mob/M = N.current if(M) dat += check_antagonists_line(M) var/turf/mob_loc = get_turf(M) dat += "" else dat += "" dat += "
Target(s)Location
[mob_loc.loc]
Head not found!
" if(GAMEMODE_IS_BLOB) var/datum/game_mode/blob/mode = SSticker.mode dat += "
" dat += "" for(var/datum/mind/blob in mode.infected_crew) var/mob/M = blob.current if(M) dat += "" dat += "" else dat += "" dat += "
Blob
Progress: [GLOB.blobs.len]/[mode.blobwincount]
[ADMIN_PP(M,"[M.real_name]")][M.client ? "" : " (ghost)"][M.stat == 2 ? " (DEAD)" : ""]PM [ADMIN_FLW(M, "FLW")]
Blob not found!
" if(SSticker.mode.blob_overminds.len) dat += check_role_table("Blob Overminds", SSticker.mode.blob_overminds) if(SSticker.mode.changelings.len) dat += check_role_table("Changelings", SSticker.mode.changelings) if(SSticker.mode.wizards.len) dat += check_role_table("Wizards", SSticker.mode.wizards) if(SSticker.mode.apprentices.len) dat += check_role_table("Apprentices", SSticker.mode.apprentices) if(SSticker.mode.raiders.len) dat += check_role_table("Raiders", SSticker.mode.raiders) /*if(ticker.mode.ninjas.len) dat += check_role_table("Ninjas", ticker.mode.ninjas)*/ if(SSticker.mode.cult.len) var/datum/game_mode/gamemode = SSticker.mode var/datum/objective/current_sac_obj = gamemode.cult_objs.current_sac_objective() dat += check_role_table("Cultists", SSticker.mode.cult) if(current_sac_obj) dat += "
Current cult objective:
[current_sac_obj.explanation_text]" else if(gamemode.cult_objs.cult_status == NARSIE_NEEDS_SUMMONING) dat += "
Current cult objective: Summon [SSticker.cultdat ? SSticker.cultdat.entity_name : "Nar'Sie"]" else if(gamemode.cult_objs.cult_status == NARSIE_HAS_RISEN) dat += "
Current cult objective: Feed [SSticker.cultdat ? SSticker.cultdat.entity_name : "Nar'Sie"]" else if(gamemode.cult_objs.cult_status == NARSIE_HAS_FALLEN) dat += "
Current cult objective: Kill all non-cultists" else dat += "
Current cult objective: None! (This is most likely a bug, or var editing gone wrong.)" dat += "
Sacrifice objectives completed: [gamemode.cult_objs.sacrifices_done]" dat += "
Sacrifice objectives needed for summoning: [gamemode.cult_objs.sacrifices_required]" dat += "
Summoning locations: [english_list(gamemode.cult_objs.obj_summon.summon_spots)]" dat += "
Cult Mindspeak" if(gamemode.cult_objs.cult_status == NARSIE_DEMANDS_SACRIFICE) dat += "
Modify amount of sacrifices required" dat += "
Reroll sacrifice target" else dat += "
Modify amount of sacrifices required (Summon available!)" dat += "
Reroll sacrifice target (Summon available!)" dat += "
Reroll summoning locations" dat += "
Unlock Nar'Sie summoning" if(SSticker.mode.traitors.len) dat += check_role_table("Traitors", SSticker.mode.traitors) if(SSticker.mode.implanted.len) dat += check_role_table("Mindslaves", SSticker.mode.implanted) if(SSticker.mode.shadows.len) dat += check_role_table("Shadowlings", SSticker.mode.shadows) if(SSticker.mode.shadowling_thralls.len) dat += check_role_table("Shadowling Thralls", SSticker.mode.shadowling_thralls) if(SSticker.mode.abductors.len) dat += check_role_table("Abductors", SSticker.mode.abductors) if(SSticker.mode.abductees.len) dat += check_role_table("Abductees", SSticker.mode.abductees) if(SSticker.mode.vampires.len) dat += check_role_table("Vampires", SSticker.mode.vampires) if(SSticker.mode.vampire_enthralled.len) dat += check_role_table("Vampire Thralls", SSticker.mode.vampire_enthralled) if(SSticker.mode.xenos.len) dat += check_role_table("Xenos", SSticker.mode.xenos) if(SSticker.mode.superheroes.len) dat += check_role_table("Superheroes", SSticker.mode.superheroes) if(SSticker.mode.supervillains.len) dat += check_role_table("Supervillains", SSticker.mode.supervillains) if(SSticker.mode.greyshirts.len) dat += check_role_table("Greyshirts", SSticker.mode.greyshirts) if(SSticker.mode.eventmiscs.len) dat += check_role_table("Event Roles", SSticker.mode.eventmiscs) if(GLOB.ts_spiderlist.len) var/list/spider_minds = list() for(var/mob/living/simple_animal/hostile/poison/terror_spider/S in GLOB.ts_spiderlist) if(S.ckey) spider_minds += S.mind if(spider_minds.len) dat += check_role_table("Terror Spiders", spider_minds) var/count_eggs = 0 var/count_spiderlings = 0 for(var/obj/structure/spider/eggcluster/terror_eggcluster/E in GLOB.ts_egg_list) if(is_station_level(E.z)) count_eggs += E.spiderling_number for(var/obj/structure/spider/spiderling/terror_spiderling/L in GLOB.ts_spiderling_list) if(!L.stillborn && is_station_level(L.z)) count_spiderlings += 1 dat += "
Growing TS on-station: [count_eggs] egg[count_eggs != 1 ? "s" : ""], [count_spiderlings] spiderling[count_spiderlings != 1 ? "s" : ""].
" if(SSticker.mode.ert.len) dat += check_role_table("ERT", SSticker.mode.ert) //list active security force count, so admins know how bad things are var/list/sec_list = check_active_security_force() dat += "
" dat += "" dat += "" dat += "" dat += "" dat += "
Security
Total: [sec_list[1]]
Active: [sec_list[2]]
Dead: [sec_list[3]]
Antag: [sec_list[4]]
" dat += "" usr << browse(dat, "window=roundstatus;size=400x500") else alert("The game hasn't started yet!") /datum/admins/proc/check_role_table(name, list/members, show_objectives=1) var/txt = "
" for(var/datum/mind/M in members) txt += check_role_table_row(M.current, show_objectives) txt += "
[name]
" return txt /datum/admins/proc/check_role_table_row(mob/M, show_objectives) if(!istype(M)) return "Not found!" var/txt = check_antagonists_line(M, close = 0) if(show_objectives) txt += {" Show Objective "} txt += "" return txt