mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 11:43:31 +00:00
Merge branch 'master' of github.com:Baystation12/Baystation12
This commit is contained in:
@@ -518,7 +518,7 @@
|
|||||||
#include "code\game\machinery\computer\id.dm"
|
#include "code\game\machinery\computer\id.dm"
|
||||||
#include "code\game\machinery\computer\lockdown.dm"
|
#include "code\game\machinery\computer\lockdown.dm"
|
||||||
#include "code\game\machinery\computer\medical.dm"
|
#include "code\game\machinery\computer\medical.dm"
|
||||||
#include "code\game\machinery\computer\Operating.dm"
|
#include "code\game\machinery\computer\operating.dm"
|
||||||
#include "code\game\machinery\computer\power.dm"
|
#include "code\game\machinery\computer\power.dm"
|
||||||
#include "code\game\machinery\computer\robot.dm"
|
#include "code\game\machinery\computer\robot.dm"
|
||||||
#include "code\game\machinery\computer\security.dm"
|
#include "code\game\machinery\computer\security.dm"
|
||||||
|
|||||||
@@ -91,51 +91,52 @@
|
|||||||
src.fingerprintslast = M.key
|
src.fingerprintslast = M.key
|
||||||
return 0
|
return 0
|
||||||
var/mob/living/carbon/human/H = M
|
var/mob/living/carbon/human/H = M
|
||||||
if (!istype(H.dna, /datum/dna))
|
if (!istype(H.dna, /datum/dna) || !H.dna.uni_identity || (length(H.dna.uni_identity) != 32))
|
||||||
return 0
|
if(!istype(H.dna, /datum/dna))
|
||||||
|
H.dna = new /datum/dna(null)
|
||||||
|
H.check_dna()
|
||||||
if (H.gloves && H.gloves != src)
|
if (H.gloves && H.gloves != src)
|
||||||
if(src.fingerprintslast != H.key)
|
if(src.fingerprintslast != H.key)
|
||||||
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
src.fingerprintshidden += text("(Wearing gloves). Real name: [], Key: []",H.real_name, H.key)
|
||||||
src.fingerprintslast = H.key
|
src.fingerprintslast = H.key
|
||||||
H.gloves.add_fingerprint(M)
|
H.gloves.add_fingerprint(M)
|
||||||
if (H.dna.uni_identity)
|
if(H.gloves != src)
|
||||||
if(H.gloves != src)
|
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||||
if(prob(75) && istype(H.gloves, /obj/item/clothing/gloves/latex))
|
return 0
|
||||||
return 0
|
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex))
|
||||||
else if(H.gloves && !istype(H.gloves, /obj/item/clothing/gloves/latex))
|
return 0
|
||||||
return 0
|
if(src.fingerprintslast != H.key)
|
||||||
if(src.fingerprintslast != H.key)
|
src.fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
|
||||||
src.fingerprintshidden += text("Real name: [], Key: []",H.real_name, H.key)
|
src.fingerprintslast = H.key
|
||||||
src.fingerprintslast = H.key
|
var/new_prints = 0
|
||||||
var/new_prints = 0
|
var/prints
|
||||||
var/prints
|
for(var/i = 1, i <= src.fingerprints.len, i++)
|
||||||
for(var/i = 1, i <= src.fingerprints.len, i++)
|
var/list/L = params2list(src.fingerprints[i])
|
||||||
var/list/L = params2list(src.fingerprints[i])
|
if(L[num2text(1)] == md5(H.dna.uni_identity))
|
||||||
if(L[num2text(1)] == md5(H.dna.uni_identity))
|
new_prints = i
|
||||||
new_prints = i
|
prints = L[num2text(2)]
|
||||||
prints = L[num2text(2)]
|
break
|
||||||
break
|
else
|
||||||
else
|
var/test_print = stars(L[num2text(2)], rand(80,90))
|
||||||
var/test_print = stars(L[num2text(2)], rand(80,90))
|
if(stringpercent(test_print) == 32)
|
||||||
if(stringpercent(test_print) == 32)
|
if(src.fingerprints.len == 1)
|
||||||
if(src.fingerprints.len == 1)
|
src.fingerprints = list()
|
||||||
src.fingerprints = list()
|
|
||||||
else
|
|
||||||
for(var/j = (i + 1), j < (src.fingerprints.len), j++)
|
|
||||||
src.fingerprints[j-1] = src.fingerprints[j]
|
|
||||||
src.fingerprints.len--
|
|
||||||
else
|
else
|
||||||
src.fingerprints[i] = "1=" + L[num2text(1)] + "&2=" + test_print
|
for(var/j = (i + 1), j < (src.fingerprints.len), j++)
|
||||||
if(new_prints)
|
src.fingerprints[j-1] = src.fingerprints[j]
|
||||||
src.fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
|
src.fingerprints.len--
|
||||||
else if(new_prints == 0)
|
else
|
||||||
if(!src.fingerprints)
|
src.fingerprints[i] = "1=" + L[num2text(1)] + "&2=" + test_print
|
||||||
src.fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
|
if(new_prints)
|
||||||
src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
|
src.fingerprints[new_prints] = text("1=[]&2=[]", md5(H.dna.uni_identity), stringmerge(prints,stars(md5(H.dna.uni_identity), (H.gloves ? rand(10,20) : rand(25,40)))))
|
||||||
for(var/i = 1, i <= src.fingerprints.len, i++)
|
else if(new_prints == 0)
|
||||||
if(length(src.fingerprints[i]) != 69)
|
if(!src.fingerprints)
|
||||||
src.fingerprints.Remove(src.fingerprints[i])
|
src.fingerprints = list(text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40))))
|
||||||
return 1
|
src.fingerprints += text("1=[]&2=[]", md5(H.dna.uni_identity), stars(md5(H.dna.uni_identity), H.gloves ? rand(10,20) : rand(25,40)))
|
||||||
|
for(var/i = 1, i <= src.fingerprints.len, i++)
|
||||||
|
if(length(src.fingerprints[i]) != 69)
|
||||||
|
src.fingerprints.Remove(src.fingerprints[i])
|
||||||
|
return 1
|
||||||
else
|
else
|
||||||
if(src.fingerprintslast != M.key)
|
if(src.fingerprintslast != M.key)
|
||||||
src.fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
|
src.fingerprintshidden += text("Real name: [], Key: []",M.real_name, M.key)
|
||||||
|
|||||||
@@ -1866,14 +1866,220 @@
|
|||||||
/obj/admins/proc/player()
|
/obj/admins/proc/player()
|
||||||
if (!usr.client.holder)
|
if (!usr.client.holder)
|
||||||
return
|
return
|
||||||
var/dat = "<html><head><title>Player Menu</title></head>"
|
var/dat = "<html><head><title>Player Panel</title></head>"
|
||||||
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name</th><th>Real Name</th><th>Assigned Job</th><th>Key</th><th>Options</th><th>Info</th><th>PM</th><th>Traitor?</th><th>Karma</th></tr></B>"
|
|
||||||
//add <th>IP:</th> to this if wanting to add back in IP checking
|
//javascript, the part that does most of the work~
|
||||||
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
|
dat += {"
|
||||||
|
|
||||||
|
<head>
|
||||||
|
<script type='text/javascript'>
|
||||||
|
|
||||||
|
var locked_tabs = new Array();
|
||||||
|
|
||||||
|
function updateSearch(){
|
||||||
|
|
||||||
|
|
||||||
|
var filter_text = document.getElementById('filter');
|
||||||
|
var filter = filter_text.value.toLowerCase();
|
||||||
|
|
||||||
|
if(complete_list != null && complete_list != ""){
|
||||||
|
var mtbl = document.getElementById("maintable_data_archive");
|
||||||
|
mtbl.innerHTML = complete_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(filter.value == ""){
|
||||||
|
return;
|
||||||
|
}else{
|
||||||
|
|
||||||
|
var maintable_data = document.getElementById('maintable_data');
|
||||||
|
var ltr = maintable_data.getElementsByTagName("tr");
|
||||||
|
for ( var i = 0; i < ltr.length; ++i )
|
||||||
|
{
|
||||||
|
try{
|
||||||
|
var tr = ltr\[i\];
|
||||||
|
if(tr.getAttribute("id").indexOf("data") != 0){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
var ltd = tr.getElementsByTagName("td");
|
||||||
|
var td = ltd\[0\];
|
||||||
|
var lsearch = td.getElementsByTagName("b");
|
||||||
|
var search = lsearch\[0\];
|
||||||
|
//var inner_span = li.getElementsByTagName("span")\[1\] //Should only ever contain one element.
|
||||||
|
//document.write("<p>"+search.innerText+"<br>"+filter+"<br>"+search.innerText.indexOf(filter))
|
||||||
|
if ( search.innerText.toLowerCase().indexOf(filter) == -1 )
|
||||||
|
{
|
||||||
|
//document.write("a");
|
||||||
|
//ltr.removeChild(tr);
|
||||||
|
td.innerHTML = "";
|
||||||
|
i--;
|
||||||
|
}
|
||||||
|
}catch(err) { }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var count = 0;
|
||||||
|
var index = -1;
|
||||||
|
var debug = document.getElementById("debug");
|
||||||
|
|
||||||
|
locked_tabs = new Array();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function expand(id,job,name,real_name,image,key,ip,antagonist,karma,ref){
|
||||||
|
|
||||||
|
clearAll();
|
||||||
|
|
||||||
|
var span = document.getElementById(id);
|
||||||
|
|
||||||
|
body = "<table><tr><td>";
|
||||||
|
|
||||||
|
body += "</td><td align='center'>";
|
||||||
|
|
||||||
|
body += "<font size='2'><b>"+job+" "+name+"</b><br><b>Real name "+real_name+"</b><br><b>Played by "+key+" ("+ip+")</b></font>"
|
||||||
|
|
||||||
|
body += "</td><td align='center'>";
|
||||||
|
|
||||||
|
body += "<a href='?src=\ref[src];adminplayeropts="+ref+"'>PP</a> - "
|
||||||
|
body += "<a href='?src=\ref[src];adminplayervars="+ref+"'>VV</a> - "
|
||||||
|
body += "<a href='?src=\ref[usr];priv_msg=\ref"+ref+"'>PM</a> - "
|
||||||
|
body += "<a href='?src=\ref[src];adminplayersubtlemessage="+ref+"'>SM</a> - "
|
||||||
|
body += "<a href='?src=\ref[src];adminplayerobservejump="+ref+"'>JMP</a><br>"
|
||||||
|
if(antagonist == 1)
|
||||||
|
body += "<font size='2'><a href='?src=\ref[src];secretsadmin=check_antagonist'><b><font color='red'>Antagonist</font></b></a> with "+karma+" karma</font>";
|
||||||
|
else
|
||||||
|
body += "<font size='2'>"+karma+" karma</font>";
|
||||||
|
|
||||||
|
body += "</td></tr></table>";
|
||||||
|
|
||||||
|
|
||||||
|
span.innerHTML = body
|
||||||
|
}
|
||||||
|
|
||||||
|
function clearAll(){
|
||||||
|
var spans = document.getElementsByTagName('span');
|
||||||
|
for(var i = 0; i < spans.length; i++){
|
||||||
|
var span = spans\[i\];
|
||||||
|
|
||||||
|
var id = span.getAttribute("id");
|
||||||
|
|
||||||
|
if(!(id.indexOf("item")==0))
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var pass = 1;
|
||||||
|
|
||||||
|
for(var j = 0; j < locked_tabs.length; j++){
|
||||||
|
if(locked_tabs\[j\]==id){
|
||||||
|
pass = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(pass != 1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
span.innerHTML = "";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addToLocked(id,link_id,notice_span_id){
|
||||||
|
var link = document.getElementById(link_id);
|
||||||
|
var decision = link.getAttribute("name");
|
||||||
|
if(decision == "1"){
|
||||||
|
link.setAttribute("name","2");
|
||||||
|
}else{
|
||||||
|
link.setAttribute("name","1");
|
||||||
|
removeFromLocked(id,link_id,notice_span_id);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var pass = 1;
|
||||||
|
for(var j = 0; j < locked_tabs.length; j++){
|
||||||
|
if(locked_tabs\[j\]==id){
|
||||||
|
pass = 0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!pass)
|
||||||
|
return;
|
||||||
|
locked_tabs.push(id);
|
||||||
|
var notice_span = document.getElementById(notice_span_id);
|
||||||
|
notice_span.innerHTML = "<font color='red'>Locked</font> ";
|
||||||
|
//link.setAttribute("onClick","attempt('"+id+"','"+link_id+"','"+notice_span_id+"');");
|
||||||
|
//document.write("removeFromLocked('"+id+"','"+link_id+"','"+notice_span_id+"')");
|
||||||
|
//document.write("aa - "+link.getAttribute("onClick"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function attempt(ab){
|
||||||
|
return ab;
|
||||||
|
}
|
||||||
|
|
||||||
|
function removeFromLocked(id,link_id,notice_span_id){
|
||||||
|
//document.write("a");
|
||||||
|
var index = 0;
|
||||||
|
var pass = 0;
|
||||||
|
for(var j = 0; j < locked_tabs.length; j++){
|
||||||
|
if(locked_tabs\[j\]==id){
|
||||||
|
pass = 1;
|
||||||
|
index = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if(!pass)
|
||||||
|
return;
|
||||||
|
locked_tabs\[index\] = "";
|
||||||
|
var notice_span = document.getElementById(notice_span_id);
|
||||||
|
notice_span.innerHTML = "";
|
||||||
|
//var link = document.getElementById(link_id);
|
||||||
|
//link.setAttribute("onClick","addToLocked('"+id+"','"+link_id+"','"+notice_span_id+"')");
|
||||||
|
}
|
||||||
|
|
||||||
|
function selectTextField(){
|
||||||
|
var filter_text = document.getElementById('filter');
|
||||||
|
filter_text.focus();
|
||||||
|
filter_text.select();
|
||||||
|
}
|
||||||
|
|
||||||
|
</script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
|
||||||
|
"}
|
||||||
|
|
||||||
|
//body tag start + onload and onkeypress (onkeyup) javascript event calls
|
||||||
|
dat += "<body onload='selectTextField(); updateSearch();' onkeyup='updateSearch();'>"
|
||||||
|
|
||||||
|
//title + search bar
|
||||||
|
dat += {"
|
||||||
|
|
||||||
|
<table width='560' align='center' cellspacing='0' cellpadding='5' id='maintable'>
|
||||||
|
<tr id='title_tr'>
|
||||||
|
<td align='center'>
|
||||||
|
<font size='5'><b>Player panel</b></font><br>
|
||||||
|
Hover over a line to see more information
|
||||||
|
<p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id='search_tr'>
|
||||||
|
<td align='center'>
|
||||||
|
<b>Search:</b> <input type='text' id='filter' value='' style='width:300px;'>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
"}
|
||||||
|
|
||||||
|
//player table header
|
||||||
|
dat += {"
|
||||||
|
<span id='maintable_data_archive'>
|
||||||
|
<table width='560' align='center' cellspacing='0' cellpadding='5' id='maintable_data'>"}
|
||||||
|
|
||||||
var/list/mobs = sortmobs()
|
var/list/mobs = sortmobs()
|
||||||
|
var/i = 1
|
||||||
var/show_karma = 0
|
var/show_karma = 0
|
||||||
var/DBConnection/dbcon
|
var/DBConnection/dbcon
|
||||||
|
|
||||||
if(config.sql_enabled) // SQL is enabled in config.txt
|
if(config.sql_enabled) // SQL is enabled in config.txt
|
||||||
dbcon = new() // Setting up connection
|
dbcon = new() // Setting up connection
|
||||||
dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
|
dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
|
||||||
@@ -1882,131 +2088,85 @@
|
|||||||
else
|
else
|
||||||
usr << "\red Unable to connect to karma database. This error can occur if your host has failed to set up an SQL database or improperly configured its login credentials.<br>"
|
usr << "\red Unable to connect to karma database. This error can occur if your host has failed to set up an SQL database or improperly configured its login credentials.<br>"
|
||||||
|
|
||||||
if(!show_karma)
|
|
||||||
for(var/mob/M in mobs)
|
|
||||||
if(M.ckey)
|
|
||||||
dat += "<tr><td>[M.name]</td>" // Adds current name
|
|
||||||
if(istype(M, /mob/living/silicon/ai)) // Adds current 'Real Name'
|
|
||||||
dat += "<td>AI</td>"
|
|
||||||
if(istype(M, /mob/living/silicon/robot))
|
|
||||||
dat += "<td>Cyborg</td>"
|
|
||||||
if(istype(M, /mob/living/carbon/human))
|
|
||||||
dat += "<td>[M.real_name]</td>"
|
|
||||||
if(istype(M, /mob/living/silicon/pai))
|
|
||||||
dat += "<td>pAI</td>"
|
|
||||||
if(istype(M, /mob/new_player))
|
|
||||||
dat += "<td>New Player</td>"
|
|
||||||
if(istype(M, /mob/dead/observer))
|
|
||||||
dat += "<td>Ghost</td>"
|
|
||||||
if(istype(M, /mob/living/carbon/monkey))
|
|
||||||
dat += "<td>Monkey</td>"
|
|
||||||
if(istype(M, /mob/living/carbon/alien))
|
|
||||||
dat += "<td>Alien</td>"
|
|
||||||
|
|
||||||
if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job.
|
for(var/mob/M in mobs)
|
||||||
var/mob/living/carbon/human/H = M
|
if(M.ckey)
|
||||||
|
var/color = "#e6e6e6"
|
||||||
|
if(i%2 == 0)
|
||||||
|
color = "#f2f2f2"
|
||||||
|
var/is_antagonist = is_special_character(M)
|
||||||
|
|
||||||
if (H.wear_id)
|
var/karma = "DC"
|
||||||
var/obj/item/weapon/card/id/id
|
|
||||||
|
|
||||||
if(istype(H.wear_id, /obj/item/device/pda))
|
if(show_karma)
|
||||||
var/obj/item/device/pda/PDA = H.wear_id
|
|
||||||
if(!isnull(PDA.id)) // The PDA may contain no ID
|
|
||||||
id = PDA.id // The ID is contained inside the PDA
|
|
||||||
|
|
||||||
else
|
|
||||||
id = H.wear_id // The ID was on the ID slot
|
|
||||||
|
|
||||||
if(!id) // Happens when there's no ID in the PDA located on the wear_id slot
|
|
||||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
|
||||||
|
|
||||||
else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel
|
|
||||||
usr << "<font color=red>ERROR:</font> Inform the coders that an [id.name] was checked for its assignment variable, and it was null."
|
|
||||||
dat += "<td><font color=red>ERROR</font></td>"
|
|
||||||
|
|
||||||
else
|
|
||||||
if(M.mind.assigned_role == id.assignment) // Polymorph
|
|
||||||
dat += "<td>[M.mind.assigned_role]</td>"
|
|
||||||
|
|
||||||
else
|
|
||||||
dat += "<td>[M.mind.assigned_role] ([id.assignment])"
|
|
||||||
|
|
||||||
else
|
|
||||||
dat += "<td>[M.mind.assigned_role] (No ID)</td>"
|
|
||||||
|
|
||||||
else
|
|
||||||
dat += "<td>No Assigned Role</td>"
|
|
||||||
|
|
||||||
dat += {"<td>[M.client?"[M.client]":"No client"]</td>
|
|
||||||
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
|
|
||||||
<td align=center><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
|
|
||||||
<td align=center><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>
|
|
||||||
"}
|
|
||||||
switch(is_special_character(M))
|
|
||||||
if(0)
|
|
||||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
|
|
||||||
if(1)
|
|
||||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
|
|
||||||
if(2)
|
|
||||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
|
|
||||||
if (config.sql_enabled)
|
|
||||||
dat += "<td><font color=red>ERROR</font></td></tr>"
|
|
||||||
else
|
|
||||||
dat += "<td>disabled</td></tr>"
|
|
||||||
|
|
||||||
else
|
|
||||||
|
|
||||||
for(var/mob/M in mobs)
|
|
||||||
if(M.ckey)
|
|
||||||
|
|
||||||
var/DBQuery/query = dbcon.NewQuery("SELECT karma FROM karmatotals WHERE byondkey='[M.key]'")
|
var/DBQuery/query = dbcon.NewQuery("SELECT karma FROM karmatotals WHERE byondkey='[M.key]'")
|
||||||
query.Execute()
|
query.Execute()
|
||||||
|
|
||||||
var/currentkarma
|
|
||||||
while(query.NextRow())
|
while(query.NextRow())
|
||||||
currentkarma = query.item[1]
|
karma = query.item[1]
|
||||||
|
|
||||||
dat += "<tr><td>[M.name]</td>"
|
var/job = ""
|
||||||
if(isAI(M))
|
|
||||||
dat += "<td>AI</td>"
|
|
||||||
if(isrobot(M))
|
|
||||||
dat += "<td>Cyborg</td>"
|
|
||||||
if(ishuman(M))
|
|
||||||
dat += "<td>[M.real_name]</td>"
|
|
||||||
if(istype(M, /mob/living/silicon/pai))
|
|
||||||
dat += "<td>pAI</td>"
|
|
||||||
if(istype(M, /mob/new_player))
|
|
||||||
dat += "<td>New Player</td>"
|
|
||||||
if(isobserver(M))
|
|
||||||
dat += "<td>Ghost</td>"
|
|
||||||
if(ismonkey(M))
|
|
||||||
dat += "<td>Monkey</td>"
|
|
||||||
if(isalien(M))
|
|
||||||
dat += "<td>Alien</td>"
|
|
||||||
dat += {"<td>[(M.client ? "[M.client]" : "No client")]</td>
|
|
||||||
<td align=center><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>X</A></td>
|
|
||||||
<td align=center><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
|
|
||||||
<td align=center><A href='?src=\ref[usr];priv_msg=\ref[M]'>PM</A></td>
|
|
||||||
"}
|
|
||||||
switch(is_special_character(M))
|
|
||||||
if(0)
|
|
||||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'>Traitor?</A></td>"}
|
|
||||||
if(1)
|
|
||||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red>Traitor?</font></A></td>"}
|
|
||||||
if(2)
|
|
||||||
dat += {"<td align=center><A HREF='?src=\ref[src];traitor=\ref[M]'><font color=red><b>Traitor?</b></font></A></td>"}
|
|
||||||
if(currentkarma)
|
|
||||||
dat += "<td>[currentkarma]</td></tr>"
|
|
||||||
else
|
|
||||||
dat += "<td>0</td></tr>"
|
|
||||||
|
|
||||||
dat += "</table></body></html>"
|
if(isobserver(M))
|
||||||
|
job = "Ghost"
|
||||||
|
if(isalien(M))
|
||||||
|
job = "Alien"
|
||||||
|
if(islarva(M))
|
||||||
|
job = "Alien larva"
|
||||||
|
if(ishuman(M))
|
||||||
|
job = M.job
|
||||||
|
if(ismetroid(M))
|
||||||
|
job = "Metroid"
|
||||||
|
if(ismonkey(M))
|
||||||
|
job = "Moneky"
|
||||||
|
if(isAI(M))
|
||||||
|
job = "AI"
|
||||||
|
if(ispAI(M))
|
||||||
|
job = "pAI"
|
||||||
|
if(isrobot(M))
|
||||||
|
job = "Cyborg"
|
||||||
|
if(isanimal(M))
|
||||||
|
job = "Animal"
|
||||||
|
if(iscorgi(M))
|
||||||
|
job = "Corgi"
|
||||||
|
|
||||||
usr << browse(dat, "window=players;size=905x480")
|
//output for each mob
|
||||||
|
dat += {"
|
||||||
|
|
||||||
|
<tr id='data[i]' name='[i]' onClick="addToLocked('item[i]','data[i]','notice_span[i]')">
|
||||||
|
<td align='center' bgcolor='[color]'>
|
||||||
|
<span id='notice_span[i]'></span>
|
||||||
|
<a id='link[i]'
|
||||||
|
onmouseover='expand("item[i]","[job]","[M.name]","[M.real_name]","--unused--","[M.key]","[M.lastKnownIP]",[is_antagonist],"[karma]","\ref[M]")'
|
||||||
|
>
|
||||||
|
<b id='search[i]'>[M.name] - [M.real_name] - [M.key]</b>
|
||||||
|
</a>
|
||||||
|
<br><span id='item[i]'></span>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
"}
|
||||||
|
|
||||||
|
i++
|
||||||
|
|
||||||
|
|
||||||
|
//player table ending
|
||||||
|
dat += {"
|
||||||
|
</table>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<script type='text/javascript'>
|
||||||
|
var maintable = document.getElementById("maintable_data_archive");
|
||||||
|
var complete_list = maintable.innerHTML;
|
||||||
|
</script>
|
||||||
|
</body></html>
|
||||||
|
"}
|
||||||
|
|
||||||
|
text2file(dat, "debug.html")
|
||||||
|
usr << browse(dat, "window=players;size=600x480")
|
||||||
|
|
||||||
/obj/admins/proc/Jobbans()
|
/obj/admins/proc/Jobbans()
|
||||||
|
|
||||||
if ((src.rank in list( "Game Admin", "Game Master" )))
|
if ((src.rank in list( "Game Admin", "Game Master" )))
|
||||||
var/dat = "<B>Job Bans!</B><HR><table>"
|
var/dat = "<B>Job Bans!</B><HR><table>"
|
||||||
for(var/t in jobban_keylist)
|
for(var/t in jobban_keylist)
|
||||||
|
|||||||
@@ -86,14 +86,14 @@
|
|||||||
/mob/living/carbon/alien/humanoid/ex_act(severity)
|
/mob/living/carbon/alien/humanoid/ex_act(severity)
|
||||||
flick("flash", flash)
|
flick("flash", flash)
|
||||||
|
|
||||||
if (stat == 2 && client)
|
// if (stat == 2 && client)
|
||||||
gib(1)
|
// gib(1)
|
||||||
return
|
// return
|
||||||
|
|
||||||
else if (stat == 2 && !client)
|
// else if (stat == 2 && !client)
|
||||||
xgibs(loc, viruses)
|
// xgibs(loc, viruses)
|
||||||
del(src)
|
// del(src)
|
||||||
return
|
// return
|
||||||
|
|
||||||
var/shielded = 0
|
var/shielded = 0
|
||||||
|
|
||||||
|
|||||||
@@ -75,7 +75,7 @@
|
|||||||
|
|
||||||
/mob/living/carbon/alien/larva/ex_act(severity)
|
/mob/living/carbon/alien/larva/ex_act(severity)
|
||||||
flick("flash", flash)
|
flick("flash", flash)
|
||||||
|
/*
|
||||||
if (stat == 2 && client)
|
if (stat == 2 && client)
|
||||||
gib(1)
|
gib(1)
|
||||||
return
|
return
|
||||||
@@ -84,7 +84,7 @@
|
|||||||
gibs(loc, viruses)
|
gibs(loc, viruses)
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
*/
|
||||||
var/b_loss = null
|
var/b_loss = null
|
||||||
var/f_loss = null
|
var/f_loss = null
|
||||||
switch (severity)
|
switch (severity)
|
||||||
|
|||||||
@@ -239,7 +239,7 @@
|
|||||||
|
|
||||||
// /obj/item/clothing/suit/bomb_suit(src)
|
// /obj/item/clothing/suit/bomb_suit(src)
|
||||||
// /obj/item/clothing/head/bomb_hood(src)
|
// /obj/item/clothing/head/bomb_hood(src)
|
||||||
|
/*
|
||||||
if (stat == 2 && client)
|
if (stat == 2 && client)
|
||||||
gib(1)
|
gib(1)
|
||||||
return
|
return
|
||||||
@@ -248,7 +248,7 @@
|
|||||||
gibs(loc, viruses)
|
gibs(loc, viruses)
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
*/
|
||||||
var/shielded = 0
|
var/shielded = 0
|
||||||
var/b_loss = null
|
var/b_loss = null
|
||||||
var/f_loss = null
|
var/f_loss = null
|
||||||
|
|||||||
@@ -150,14 +150,14 @@
|
|||||||
..()
|
..()
|
||||||
|
|
||||||
/mob/living/carbon/metroid/ex_act(severity)
|
/mob/living/carbon/metroid/ex_act(severity)
|
||||||
|
/*
|
||||||
if (stat == 2 && client)
|
if (stat == 2 && client)
|
||||||
return
|
return
|
||||||
|
|
||||||
else if (stat == 2 && !client)
|
else if (stat == 2 && !client)
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
*/
|
||||||
var/b_loss = null
|
var/b_loss = null
|
||||||
var/f_loss = null
|
var/f_loss = null
|
||||||
switch (severity)
|
switch (severity)
|
||||||
|
|||||||
@@ -211,7 +211,7 @@
|
|||||||
|
|
||||||
/mob/living/silicon/robot/ex_act(severity)
|
/mob/living/silicon/robot/ex_act(severity)
|
||||||
flick("flash", flash)
|
flick("flash", flash)
|
||||||
|
/*
|
||||||
if (stat == 2 && client)
|
if (stat == 2 && client)
|
||||||
gib(1)
|
gib(1)
|
||||||
return
|
return
|
||||||
@@ -219,7 +219,7 @@
|
|||||||
else if (stat == 2 && !client)
|
else if (stat == 2 && !client)
|
||||||
del(src)
|
del(src)
|
||||||
return
|
return
|
||||||
|
*/
|
||||||
switch(severity)
|
switch(severity)
|
||||||
if(1.0)
|
if(1.0)
|
||||||
if (stat != 2)
|
if (stat != 2)
|
||||||
|
|||||||
158
code/modules/mob/new_player/skill.dm
Normal file
158
code/modules/mob/new_player/skill.dm
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
var/global/const
|
||||||
|
SKILL_NONE = 0
|
||||||
|
SKILL_BASIC = 1
|
||||||
|
SKILL_ADEPT = 3
|
||||||
|
SKILL_EXPERT = 6
|
||||||
|
|
||||||
|
datum/skill/var
|
||||||
|
ID = "none" // ID of the skill, used in code
|
||||||
|
name = "None" // name of the skill
|
||||||
|
desc = "Placeholder skill" // detailed description of the skill
|
||||||
|
field = "Misc" // the field under which the skill will be listed
|
||||||
|
|
||||||
|
var/global/list/SKILLS = null
|
||||||
|
var/list/SKILL_ENGINEER = list("EVA" = SKILL_BASIC, "construction" = SKILL_ADEPT, "electrical" = SKILL_BASIC, "engines" = SKILL_ADEPT)
|
||||||
|
var/list/SKILL_ROBOTICIST = list("devices" = SKILL_ADEPT, "electrical" = SKILL_BASIC, "computer" = SKILL_ADEPT, "anatomy" = SKILL_BASIC)
|
||||||
|
var/list/SKILL_SECURITY_OFFICER = list("combat" = SKILL_BASIC, "weapons" = SKILL_ADEPT, "law" = SKILL_ADEPT, "forensics" = SKILL_BASIC)
|
||||||
|
var/list/SKILL_CHEMIST = list("chemistry" = SKILL_ADEPT, "science" = SKILL_ADEPT, "medical" = SKILL_BASIC, "devices" = SKILL_BASIC)
|
||||||
|
var/global/list/SKILL_PRE = list("Engineer" = SKILL_ENGINEER, "Roboticist" = SKILL_ROBOTICIST, "Security Officer" = SKILL_SECURITY_OFFICER, "Chemist" = SKILL_CHEMIST)
|
||||||
|
|
||||||
|
datum/skill/management
|
||||||
|
ID = "management"
|
||||||
|
name = "Command"
|
||||||
|
desc = "Your ability to manage and commandeer other crew members."
|
||||||
|
|
||||||
|
datum/skill/knowledge/law
|
||||||
|
ID = "law"
|
||||||
|
name = "NanoTrasen Law"
|
||||||
|
desc = "Your knowledge of NanoTrasen law and procedures. This includes space law, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for captains."
|
||||||
|
|
||||||
|
datum/skill/combat
|
||||||
|
ID = "combat"
|
||||||
|
name = "Close Combat"
|
||||||
|
desc = "This skill describes your training in hand-to-hand combat or melee weapon usage. While expertise in this area is rare in the era of firearms, experts still exist among athletes."
|
||||||
|
field = "Security"
|
||||||
|
|
||||||
|
datum/skill/weapons
|
||||||
|
ID = "weapons"
|
||||||
|
name = "Weapons Expertise"
|
||||||
|
desc = "This skill describes your expertise with and knowledge of weapons. A low level in this skill implies knowledge of simple weapons, for example tazers and flashes. A high level in this skill implies knowledge of complex weapons, such as grenades, riot shields, pulse rifles or bombs. A low level in this skill is typical for security officers, a high level of this skill is typical for special agents and soldiers."
|
||||||
|
field = "Security"
|
||||||
|
|
||||||
|
datum/skill/EVA
|
||||||
|
ID = "EVA"
|
||||||
|
name = "Extra-vehicular activity"
|
||||||
|
desc = "This skill describes your skill and knowledge of space-suits and working in vacuum."
|
||||||
|
field = "Engineering"
|
||||||
|
|
||||||
|
datum/skill/forensics
|
||||||
|
ID = "forensics"
|
||||||
|
name = "Forensics"
|
||||||
|
desc = "Describes your skill at performing forensic examinations and identifying vital evidence. Does not cover analytical abilities, and as such isn't the only indicator for your investigation skill. Note that in order to perform autopsy, the surgery skill is also required."
|
||||||
|
field = "Security"
|
||||||
|
|
||||||
|
datum/skill/construction
|
||||||
|
ID = "construction"
|
||||||
|
name = "Construction"
|
||||||
|
desc = "Your ability to construct various buildings, such as walls, floors, tables and so on. Note that constructing devices such as APCs additionally requires the Electronics skill. A low level of this skill is typical for janitors, a high level of this skill is typical for engineers."
|
||||||
|
field = "Engineering"
|
||||||
|
|
||||||
|
datum/skill/management
|
||||||
|
ID = "management"
|
||||||
|
name = "Command"
|
||||||
|
desc = "Your ability to manage and commandeer other crew members."
|
||||||
|
|
||||||
|
datum/skill/knowledge/law
|
||||||
|
ID = "law"
|
||||||
|
name = "NanoTrasen Law"
|
||||||
|
desc = "Your knowledge of NanoTrasen law and procedures. This includes space law, as well as general station rulings and procedures. A low level in this skill is typical for security officers, a high level in this skill is typical for captains."
|
||||||
|
field = "Security"
|
||||||
|
|
||||||
|
datum/skill/devices
|
||||||
|
ID = "devices"
|
||||||
|
name = "Complex Devices"
|
||||||
|
desc = "Describes the ability to assemble complex devices, such as computers, circuits, printers, robots or gas tank assemblies(bombs). Note that if a device requires electronics or programming, those skills are also required in addition to this skill."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/skill/electrical
|
||||||
|
ID = "electrical"
|
||||||
|
name = "Electrical Engineering"
|
||||||
|
desc = "This skill describes your knowledge of electronics and the underlying physics. A low level of this skill implies you know how to lay out wiring and configure powernets, a high level of this skill is required for working complex electronic devices such as circuits or bots."
|
||||||
|
field = "Engineering"
|
||||||
|
|
||||||
|
datum/skill/atmos
|
||||||
|
ID = "atmos"
|
||||||
|
name = "Atmospherics"
|
||||||
|
desc = "Describes your knowledge of piping, air distribution and gas dynamics."
|
||||||
|
field = "Engineering"
|
||||||
|
|
||||||
|
datum/skill/engines
|
||||||
|
ID = "engines"
|
||||||
|
name = "Engines"
|
||||||
|
desc = "Describes your knowledge of the various engine types common on space stations, such as the singularity or anti-matter engine."
|
||||||
|
field = "Engineering"
|
||||||
|
|
||||||
|
datum/skill/computer
|
||||||
|
ID = "computer"
|
||||||
|
name = "Information Technology"
|
||||||
|
desc = "Describes your understanding of computers, software and communication. Not a requirement for using computers, but definitely helps. Used in telecommunications and programming of computers and AIs."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/skill/pilot
|
||||||
|
ID = "pilot"
|
||||||
|
name = "Heavy Machinery Operation"
|
||||||
|
desc = "Describes your experience and understanding of operating heavy machinery, which includes mechs and other large exosuits. Used in piloting mechs and creating them"
|
||||||
|
field = "Engineering"
|
||||||
|
|
||||||
|
datum/skill/medical
|
||||||
|
ID = "medical"
|
||||||
|
name = "Medical"
|
||||||
|
desc = "Covers an understanding of the human body and medicine. At a low level, this skill is vital to perform basic first aid, such as CPR or applying bandages. At a high level, this skill implies a good understanding of the various medicines that can be found on a space station."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/skill/anatomy
|
||||||
|
ID = "anatomy"
|
||||||
|
name = "Anatomy"
|
||||||
|
desc = "Gives you a detailed insight of the human body. A high skill in this is required to perform surgery.This skill may also help in examining alien biology."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/skill/virology
|
||||||
|
ID = "virology"
|
||||||
|
name = "Virology"
|
||||||
|
desc = "This skill implies an understanding of microorganisms and their effects on humans."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/skill/genetics
|
||||||
|
ID = "genaetics"
|
||||||
|
name = "Genetics"
|
||||||
|
desc = "Implies an understanding of how DNA works and the structure of the human DNA."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/skill/chemistry
|
||||||
|
ID = "chemistry"
|
||||||
|
name = "Chemistry"
|
||||||
|
desc = "Experience with mixing chemicals, and an understanding of what the effect will be. This doesn't cover an understanding of the effect of chemicals on the human body, as such the medical skill is also required for medical chemists."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/skill/botany
|
||||||
|
ID = "botany"
|
||||||
|
name = "Botany"
|
||||||
|
desc = "Describes how good a character is at growing and maintaining plants."
|
||||||
|
|
||||||
|
datum/skill/cooking
|
||||||
|
ID = "cooking"
|
||||||
|
name = "Cooking"
|
||||||
|
desc = "Describes a character's skill at preparing meals and other consumable goods. This includes mixing alcoholic beverages."
|
||||||
|
|
||||||
|
datum/skill/science
|
||||||
|
ID = "science"
|
||||||
|
name = "Science"
|
||||||
|
desc = "Your experience and knowledge with scientific methods and processes."
|
||||||
|
field = "Science"
|
||||||
|
|
||||||
|
datum/attribute/var
|
||||||
|
ID = "none"
|
||||||
|
name = "None"
|
||||||
|
desc = "This is a placeholder"
|
||||||
|
|
||||||
|
|
||||||
Reference in New Issue
Block a user