/datum/admins/proc/player_panel_new()//The new one if(!check_rights()) return var/dat = "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 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/is_antagonist = is_special_character(M) var/M_job = "" if(isliving(M)) if(iscarbon(M)) //Carbon stuff if(ishuman(M)) M_job = M.job else if(ismonkey(M)) M_job = "Monkey" 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(iscyborg(M)) M_job = "Cyborg" else M_job = "Silicon-based" else if(isanimal(M)) //simple animals if(iscorgi(M)) M_job = "Corgi" else if(isslime(M)) M_job = "slime" else M_job = "Animal" else M_job = "Living" else if(isnewplayer(M)) M_job = "New player" else if(isobserver(M)) var/mob/dead/observer/O = M if(O.started_as_observer)//Did they get BTFO or are they just not trying? M_job = "Observer" else M_job = "Ghost" var/M_name = html_encode(M.name) var/M_rname = html_encode(M.real_name) var/M_key = html_encode(M.key) //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() if (SSticker.HasRoundStarted()) var/dat = "Round Status

Round Status

" if(SSticker.mode.replacementmode) dat += "Former Game Mode: [SSticker.mode.name]
" dat += "Replacement Game Mode: [SSticker.mode.replacementmode.name]
" else dat += "Current Game Mode: [SSticker.mode.name]
" dat += "Round Duration: [round(world.time / 36000)]:[add_zero("[world.time / 600 % 60]", 2)]:[world.time / 100 % 6][world.time / 100 % 10]
" dat += "Emergency shuttle
" if(EMERGENCY_IDLE_OR_RECALLED) dat += "Call Shuttle
" else var/timeleft = SSshuttle.emergency.timeLeft() if(SSshuttle.emergency.mode == SHUTTLE_CALL) 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 += "Continuous Round Status
" dat += "[config.continuous[SSticker.mode.config_tag] ? "Continue if antagonists die" : "End on antagonist death"]" if(config.continuous[SSticker.mode.config_tag]) dat += ", [config.midround_antag[SSticker.mode.config_tag] ? "creating replacement antagonists" : "not creating new antagonists"]
" else dat += "
" if(config.midround_antag[SSticker.mode.config_tag]) dat += "Time limit: [config.midround_antag_time_check] minutes into round
" dat += "Living crew limit: [config.midround_antag_life_check * 100]% of crew alive
" dat += "If limits past: [SSticker.mode.round_ends_with_antag_death ? "End The Round" : "Continue As Extended"]
" dat += "End Round Now
" dat += "[SSticker.delay_end ? "End Round Normally" : "Delay Round End"]" var/connected_players = GLOB.clients.len var/lobby_players = 0 var/observers = 0 var/observers_connected = 0 var/living_players = 0 var/living_players_connected = 0 var/living_players_antagonist = 0 var/brains = 0 var/other_players = 0 var/living_skipped = 0 var/drones = 0 for(var/mob/M in GLOB.mob_list) if(M.ckey) if(isnewplayer(M)) lobby_players++ continue else if(M.stat != DEAD && M.mind && !isbrain(M)) if(isdrone(M)) drones++ continue if(M.z == ZLEVEL_CENTCOM) living_skipped++ continue living_players++ if(M.mind.special_role) living_players_antagonist++ if(M.client) living_players_connected++ else if((M.stat == DEAD )||(isobserver(M))) observers++ if(M.client) observers_connected++ else if(isbrain(M)) brains++ else other_players++ dat += "
Players:|[connected_players - lobby_players] ingame|[connected_players] connected|[lobby_players] lobby|" dat += "
Living Players:|[living_players_connected] active|[living_players - living_players_connected] disconnected|[living_players_antagonist] antagonists|" dat += "
SKIPPED \[On centcom Z-level\]: [living_skipped] living players|[drones] living drones|" dat += "
Dead/Observing players:|[observers_connected] active|[observers - observers_connected] disconnected|[brains] brains|" if(other_players) dat += "
[other_players] players in invalid state or the statistics code is bugged!" dat += "
" if(SSticker.mode.syndicates.len) dat += "
" for(var/datum/mind/N in SSticker.mode.syndicates) var/mob/M = N.current if(M) dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Syndicates
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
[N.name]([N.key]) Nuclear Operative Body destroyed!PM

" 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(!isturf(disk_loc)) if(ismob(disk_loc)) var/mob/M = disk_loc dat += "carried by [M.real_name] " if(isobj(disk_loc)) 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 += "" dat += "" else dat += "" dat += "" dat += "" for(var/datum/mind/N in SSticker.mode.revolutionaries) var/mob/M = N.current if(M) dat += "" dat += "" dat += "" dat += "
Revolutionaries
[N.name]([N.key])Head Revolutionary body destroyed!PM
[M.real_name] (Leader)[M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
" for(var/datum/mind/N in SSticker.mode.get_living_heads()) var/mob/M = N.current if(M) dat += "" dat += "" dat += "" var/turf/mob_loc = get_turf(M) dat += "" else dat += "" dat += "" dat += "
Target(s)Location
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW[mob_loc.loc]
[N.name]([N.key])Head body destroyed!PM
" if(SSticker.mode.changelings.len > 0) dat += "
" for(var/datum/mind/changeling in SSticker.mode.changelings) var/mob/M = changeling.current if(M) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Changelings
[M.mind.changeling.changelingID] as [M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWShow Objective
[changeling.name]([changeling.key])Changeling body destroyed!PM
" if(SSticker.mode.wizards.len > 0) dat += "
" for(var/datum/mind/wizard in SSticker.mode.wizards) var/mob/M = wizard.current if(M) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Wizards
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWShow Objective
[wizard.name]([wizard.key])Wizard body destroyed!
PM
" if(SSticker.mode.apprentices.len > 0) dat += "
" for(var/datum/mind/apprentice in SSticker.mode.apprentices) var/mob/M = apprentice.current if(M) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Apprentice
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWShow Objective
[apprentice.name]([apprentice.key])Apprentice body destroyed!!
PM
" if(SSticker.mode.cult.len) dat += "
" for(var/datum/mind/N in SSticker.mode.cult) var/mob/M = N.current if(M) dat += "" dat += "" dat += "" dat += "
Cultists
[M.real_name][N.has_antag_datum(ANTAG_DATUM_CULT_MASTER) ? " \[Master\]" : ""][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
" if(SSticker.mode.servants_of_ratvar.len) dat += "
" for(var/datum/mind/N in SSticker.mode.servants_of_ratvar) var/mob/M = N.current if(M) dat += "" dat += "" dat += "" dat += "
Servants of Ratvar
[M.real_name][M.client ? "" : " (ghost)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
" if(SSticker.mode.traitors.len > 0) dat += "
" for(var/datum/mind/traitor in SSticker.mode.traitors) var/mob/M = traitor.current if(M) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Traitors
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWShow Objective
[traitor.name]([traitor.key])Traitor body destroyed!PM
" if(SSticker.mode.abductors.len) dat += "
" for(var/datum/mind/abductor in SSticker.mode.abductors) var/mob/M = abductor.current if(M) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Abductors
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWShow Objective
[abductor.name]([abductor.key])Abductor body destroyed!
PM
" dat += "
" for(var/obj/machinery/abductor/experiment/E in GLOB.machines) for(var/datum/mind/abductee in E.abductee_minds) var/mob/M = abductee.current if(M) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Abductees
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLWShow Objective
[abductee.name]([abductee.key])Abductee body destroyed!PM
" if(SSticker.mode.devils.len) dat += "
" for(var/X in SSticker.mode.devils) var/datum/mind/devil = X var/mob/M = devil.current var/datum/antagonist/devil/devilinfo = devil.has_antag_datum(ANTAG_DATUM_DEVIL) if(M) dat += "" dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
devils
[M.real_name] : [devilinfo.truename][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMShow Objective
Show all devil info
[devil.name] : [devilinfo.truename] ([devil.key])devil body destroyed!
PM
" if(SSticker.mode.sintouched.len) dat += "
" for(var/X in SSticker.mode.sintouched) var/datum/mind/sintouched = X var/mob/M = sintouched.current if(M) dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
sintouched
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMShow Objective
[sintouched.name]([sintouched.key])sintouched body destroyed!
PM
" var/list/blob_minds = list() for(var/mob/camera/blob/B in GLOB.mob_list) blob_minds |= B.mind if(istype(SSticker.mode, /datum/game_mode/blob) || blob_minds.len) dat += "
" if(istype(SSticker.mode, /datum/game_mode/blob)) var/datum/game_mode/blob/mode = SSticker.mode blob_minds |= mode.blob_overminds dat += "" for(var/datum/mind/blob in blob_minds) var/mob/M = blob.current if(M) dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Blob
Progress: [GLOB.blobs_legit.len]/[mode.blobwincount]
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
[blob.name]([blob.key])Blob not found!PM
" if(istype(SSticker.mode, /datum/game_mode/monkey)) var/datum/game_mode/monkey/mode = SSticker.mode dat += "
" for(var/datum/mind/eek in mode.ape_infectees) var/mob/M = eek.current if(M) dat += "" dat += "" dat += "" else dat += "" dat += "" dat += "
Monkey
[M.real_name][M.client ? "" : " (No Client)"][M.stat == DEAD ? " (DEAD)" : ""]PMFLW
[eek.name]([eek.key])Monkey not found!PM
" dat += "" usr << browse(dat, "window=roundstatus;size=420x500") else alert("The game hasn't started yet!")