Merge pull request #539 from SkyMarshal/master

Fixed lasers, balanced nuke, removed stupid code, removed Karma, improved admin panel.
This commit is contained in:
CIB
2012-02-28 00:44:06 -08:00
19 changed files with 297 additions and 570 deletions
+1 -1
View File
@@ -729,7 +729,6 @@
#include "code\game\objects\tanks\oxygen.dm"
#include "code\game\player\news.dm"
#include "code\game\verbs\AI_status.dm"
#include "code\game\verbs\checkkarma.dm"
#include "code\game\verbs\ooc.dm"
#include "code\game\verbs\sound.dm"
#include "code\game\verbs\suicide.dm"
@@ -744,6 +743,7 @@
#include "code\modules\admin\create_turf.dm"
#include "code\modules\admin\NewBan.dm"
#include "code\modules\admin\newbanjob.dm"
#include "code\modules\admin\player_panel.dm"
#include "code\modules\admin\verbs\adminhelp.dm"
#include "code\modules\admin\verbs\adminjump.dm"
#include "code\modules\admin\verbs\adminsay.dm"
+60 -36
View File
@@ -1,5 +1,5 @@
/obj/item/wardrobe
name = "wardrobe"
name = "\improper Wardrobe"
desc = "A standard-issue bag for clothing and equipment. Usually comes sealed, stocked with everything you need for a particular job."
icon = 'suits.dmi'
icon_state = "wardrobe_sealed"
@@ -37,14 +37,38 @@
user << "\red There's not enough space to fit that!"
return
examine()
set src in usr
..()
usr << "It claims to contain [contents.len ? descriptor : descriptor + "... but it looks empty"]."
if(seal_torn && !contents.len)
usr << "The seal on the bag is broken."
afterattack(atom/A as obj|turf, mob/user as mob)
if(A in user)
return
if(!istype(A.loc,/turf))
user << "It's got to be on the ground to do that!"
return
var/could_fill = 1
for (var/obj/O in locate(A.x,A.y,A.z))
if (contents.len < 20)
if(istype(O,/obj/item/wardrobe))
continue
if(O.anchored || O.density || istype(O,/obj/structure))
continue
contents += O;
else
could_fill = 0
break
if(could_fill)
user << "\blue You pick up all the items."
else
usr << "The seal on the bag is[seal_torn ? ", however, not intact" : " intact"]."
user << "\blue You try to pick up all of the items, but run out of space in the bag."
user.visible_message("\blue [user] gathers up[could_fill ? " " : " most of "]the pile of items and puts it into [src].")
update_icon()
examine()
..()
if(src in usr)
usr << "It claims to contain [contents.len ? descriptor : descriptor + "... but it looks empty"]."
if(seal_torn && !contents.len)
usr << "The seal on the bag is broken."
else
usr << "The seal on the bag is[seal_torn ? ", however, not intact" : " intact"]."
return
update_icon()
@@ -60,7 +84,7 @@
pixel_y = rand(0,4) -2
/obj/item/wardrobe/assistant
name = "assistant wardrobe"
name = "\improper Assistant Wardrobe"
descriptor = "clothing and basic equipment for an assistant"
New()
@@ -74,7 +98,7 @@
new /obj/item/clothing/under/color/grey(src)
/obj/item/wardrobe/chief_engineer
name = "Chief Engineer wardrobe"
name = "\improper Chief Engineer Wardrobe"
descriptor = "clothing and basic equipment for a Chief Engineer"
New()
@@ -98,7 +122,7 @@
new /obj/item/clothing/under/rank/chief_engineer(src)
/obj/item/wardrobe/engineer
name = "Station Engineer wardrobe"
name = "\improper Station Engineer Wardrobe"
descriptor = "clothing and basic equipment for a Station Engineer"
New()
@@ -119,7 +143,7 @@
new /obj/item/clothing/under/rank/engineer(src)
/obj/item/wardrobe/atmos
name = "Atmospheric Technician wardrobe"
name = "\improper Atmospheric Technician Wardrobe"
descriptor = "clothing and basic equipment for an Atmospheric Technician"
New()
@@ -134,7 +158,7 @@
new /obj/item/clothing/under/rank/atmospheric_technician(src)
/obj/item/wardrobe/roboticist
name = "Roboticist wardrobe"
name = "\improper Roboticist Wardrobe"
descriptor = "clothing and basic equipment for a Roboticist"
New()
@@ -151,7 +175,7 @@
new /obj/item/clothing/under/rank/roboticist(src)
/obj/item/wardrobe/chaplain
name = "Chaplain wardrobe"
name = "\improper Chaplain Wardrobe"
descriptor = "clothing and basic equipment for a Chaplain"
New()
@@ -166,7 +190,7 @@
new /obj/item/clothing/under/rank/chaplain(src)
/obj/item/wardrobe/captain
name = "Captain wardrobe"
name = "\improper Captain Wardrobe"
descriptor = "clothing and basic equipment for a Captain"
New()
@@ -189,7 +213,7 @@
new /obj/item/clothing/under/rank/captain(src)
/obj/item/wardrobe/hop
name = "Head of Personnel wardrobe"
name = "\improper Head of Personnel Wardrobe"
descriptor = "clothing and basic equipment for a Head of Personnel"
New()
@@ -210,7 +234,7 @@
new /obj/item/clothing/under/rank/head_of_personnel(src)
/obj/item/wardrobe/cmo
name = "Chief Medical Officer wardrobe"
name = "\improper Chief Medical Officer Wardrobe"
descriptor = "clothing and basic equipment for a Chief Medical Officer"
New()
@@ -230,7 +254,7 @@
new /obj/item/clothing/under/rank/chief_medical_officer(src)
/obj/item/wardrobe/doctor
name = "Medical Doctor wardrobe"
name = "\improper Medical Doctor Wardrobe"
descriptor = "clothing and basic equipment for a Medical Doctor"
New()
@@ -250,7 +274,7 @@
new /obj/item/clothing/under/rank/medical(src)
/obj/item/wardrobe/geneticist
name = "Geneticist wardrobe"
name = "\improper Geneticist Wardrobe"
descriptor = "clothing and basic equipment for a Geneticist"
New()
@@ -266,7 +290,7 @@
new /obj/item/clothing/under/rank/geneticist(src)
/obj/item/wardrobe/virologist
name = "Virologist wardrobe"
name = "\improper Virologist Wardrobe"
descriptor = "clothing and basic equipment for a Virologist"
New()
@@ -283,7 +307,7 @@
new /obj/item/clothing/under/rank/medical(src)
/obj/item/wardrobe/rd
name = "Research Director wardrobe"
name = "\improper Research Director Wardrobe"
descriptor = "clothing and basic equipment for a Research Director"
New()
@@ -304,7 +328,7 @@
new /obj/item/clothing/under/rank/research_director(src)
/obj/item/wardrobe/scientist
name = "Scientist wardrobe"
name = "\improper Scientist Wardrobe"
descriptor = "clothing and basic equipment for a Scientist"
New()
@@ -321,7 +345,7 @@
new /obj/item/clothing/under/rank/scientist(src)
/obj/item/wardrobe/chemist
name = "Chemist wardrobe"
name = "\improper Chemist Wardrobe"
descriptor = "clothing and basic equipment for a Chemist"
New()
@@ -336,7 +360,7 @@
new /obj/item/clothing/suit/storage/labcoat/chemist(src)
/obj/item/wardrobe/hos
name = "Head of Security wardrobe"
name = "\improper Head of Security Wardrobe"
descriptor = "clothing and basic equipment for a Head of Security"
New()
@@ -359,7 +383,7 @@
new /obj/item/clothing/under/rank/head_of_security(src)
/obj/item/wardrobe/warden
name = "Warden wardrobe"
name = "\improper Warden Wardrobe"
descriptor = "clothing and basic equipment for a Warden"
New()
@@ -382,7 +406,7 @@
new /obj/item/clothing/under/rank/warden(src)
/obj/item/wardrobe/detective
name = "Detective wardrobe"
name = "\improper Detective Wardrobe"
descriptor = "clothing and basic equipment for a Detective"
New()
@@ -404,7 +428,7 @@
new /obj/item/clothing/under/det(src)
/obj/item/wardrobe/officer
name = "Security Officer wardrobe"
name = "\improper Security Officer Wardrobe"
descriptor = "clothing and basic equipment for a Security Officer"
New()
@@ -432,7 +456,7 @@
/obj/item/wardrobe/bartender
name = "Bartender wardrobe"
name = "\improper Bartender Wardrobe"
descriptor = "clothing and basic equipment for a Bartender"
New()
@@ -450,7 +474,7 @@
new /obj/item/clothing/under/rank/bartender(src)
/obj/item/wardrobe/chef
name = "Chef wardrobe"
name = "\improper Chef Wardrobe"
descriptor = "clothing and basic equipment for a Chef"
New()
@@ -465,7 +489,7 @@
new /obj/item/clothing/under/rank/chef(src)
/obj/item/wardrobe/hydro
name = "Botanist wardrobe"
name = "\improper Botanist Wardrobe"
descriptor = "clothing and basic equipment for a Botanist"
New()
@@ -481,7 +505,7 @@
new /obj/item/clothing/under/rank/hydroponics(src)
/obj/item/wardrobe/qm
name = "Quartermaster wardrobe"
name = "\improper Quartermaster Wardrobe"
descriptor = "clothing and basic equipment for a Quartermaster"
New()
@@ -497,7 +521,7 @@
new /obj/item/clothing/under/rank/cargo(src)
/obj/item/wardrobe/cargo_tech
name = "Cargo Technician wardrobe"
name = "\improper Cargo Technician Wardrobe"
descriptor = "clothing and basic equipment for a Cargo Technician"
New()
@@ -511,7 +535,7 @@
new /obj/item/clothing/under/rank/cargo(src)
/obj/item/wardrobe/mining
name = "Shaft Miner wardrobe"
name = "\improper Shaft Miner Wardrobe"
descriptor = "clothing and basic equipment for a Shaft Miner"
New()
@@ -531,7 +555,7 @@
new /obj/item/clothing/under/rank/miner(src)
/obj/item/wardrobe/janitor
name = "Janitor wardrobe"
name = "\improper Janitor Wardrobe"
descriptor = "clothing and basic equipment for a Janitor"
New()
@@ -544,7 +568,7 @@
new /obj/item/clothing/under/rank/janitor(src)
/obj/item/wardrobe/librarian
name = "Librarian wardrobe"
name = "\improper Librarian Wardrobe"
descriptor = "clothing and basic equipment for a Librarian"
New()
@@ -557,7 +581,7 @@
new /obj/item/clothing/under/suit_jacket/red(src)
/obj/item/wardrobe/lawyer
name = "Lawyer wardrobe"
name = "\improper Lawyer Wardrobe"
descriptor = "clothing and basic equipment for a Lawyer"
New()
-2
View File
@@ -27,8 +27,6 @@
var/played = 0
var/team = null
var/warned = 0
var/karma = 0
var/karma_spent = 0
var/STFU_ghosts //80+ people rounds are fun to admin when text flies faster than airport security
var/STFU_radio //80+ people rounds are fun to admin when text flies faster than airport security
+2
View File
@@ -256,6 +256,8 @@ the mob is also allowed to move without any sort of restriction. For instance, i
var/grav_delay = 0
var/being_strangled = 0
var/original_name = null //Original name is only used in ghost chat! It is not to be edited by anything!
/mob/proc/contract_disease(var/datum/disease/virus, var/skip_this = 0, var/force_species_check=1)
// world << "Contract_disease called by [src] with virus [virus]"
if(stat >=2) return
-69
View File
@@ -46,75 +46,6 @@ proc/sql_report_round_end()
if(!sqllogging)
return
proc/sql_report_karma(var/mob/spender, var/mob/receiver, var/isnegative = 1)
if(!sqllogging)
return
var/sqlspendername = spender.name
var/sqlspenderkey = spender.key
var/sqlreceivername = receiver.name
var/sqlreceiverkey = receiver.key
var/sqlreceiverrole = "None"
var/sqlreceiverspecial = "None"
var/sqlisnegative = "TRUE"
if(isnegative)
sqlisnegative = "TRUE"
else
sqlisnegative = "FALSE"
var/sqlspenderip = spender.client.address
if(receiver.mind)
if(receiver.mind.special_role)
sqlreceiverspecial = receiver.mind.special_role
if(receiver.mind.assigned_role)
sqlreceiverrole = receiver.mind.assigned_role
var/DBConnection/dbcon = new()
dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
if(!dbcon.IsConnected())
log_game("SQL ERROR during karma logging. Failed to connect.")
else
var/sqltime = time2text(world.realtime, "YYYY-MM-DD hh:mm:ss")
var/DBQuery/query = dbcon.NewQuery("INSERT INTO karma (spendername, spenderkey, receivername, receiverkey, receiverrole, receiverspecial, isnegative, spenderip, time) VALUES ('[sqlspendername]', '[sqlspenderkey]', '[sqlreceivername]', '[sqlreceiverkey]', '[sqlreceiverrole]', '[sqlreceiverspecial]', [sqlisnegative], '[sqlspenderip]', '[sqltime]')")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during karma logging. Error : \[[err]\]\n")
query = dbcon.NewQuery("SELECT * FROM karmatotals WHERE byondkey='[receiver.key]'")
query.Execute()
var/karma
var/id
while(query.NextRow())
id = query.item[1]
karma = text2num(query.item[3])
if(karma == null)
if(isnegative)
karma = -1
else
karma = 1
query = dbcon.NewQuery("INSERT INTO karmatotals (byondkey, karma) VALUES ('[receiver.key]', [karma])")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during karmatotal logging (adding new key). Error : \[[err]\]\n")
else
if(isnegative && sqlreceiverspecial != "None") // Toss out negative karma applied to traitors/wizards/etc.
dbcon.Disconnect()
return
if(isnegative)
karma -= 1
else
karma += 1
query = dbcon.NewQuery("UPDATE karmatotals SET karma=[karma] WHERE id=[id]")
if(!query.Execute())
var/err = query.ErrorMsg()
log_game("SQL ERROR during karmatotal logging (updating existing entry). Error : \[[err]\]\n")
dbcon.Disconnect()
proc/sql_report_death(var/mob/living/carbon/human/H)
if(!sqllogging)
return
+4 -2
View File
@@ -43,8 +43,10 @@
agent_number = possible_syndicates.len
var/n_players = num_players()
if(agent_number > n_players)
agent_number = n_players/2
if(agent_number > (n_players - agent_number))
agent_number = (n_players - agent_number)/2
if(agent_number < required_enemies)
agent_number = required_enemies
while(agent_number > 0)
var/datum/mind/new_syndicate = pick(possible_syndicates)
+2 -26
View File
@@ -200,6 +200,7 @@
user.update_clothing()
return
/*
/obj/item/attackby(obj/item/W as obj, mob/user as mob)
if(istype(W, /obj/item/device/detective_scanner))
return
@@ -222,32 +223,7 @@
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(location)
P.wrapped = src
src.loc = P
O.amount -= 1
else if(istype(W,/obj/item/wardrobe))
if(src in user)
return
if(!istype(src.loc,/turf))
user << "It's got to be on the ground to do that!"
return
var/obj/item/wardrobe/I = W
var/could_fill = 1
for (var/obj/O in locate(src.x,src.y,src.z))
if (I.contents.len < 20)
if(istype(O,/obj/item/wardrobe))
continue
if(O.anchored || O.density || istype(O,/obj/structure))
continue
I.contents += O;
else
could_fill = 0
break
if(could_fill)
user << "\blue You pick up all the items."
else
user << "\blue You try to pick up all of the items, but run out of space in the bag."
user.visible_message("\blue [user] gathers up[could_fill ? " " : " most of "]the pile of items and puts it into the [W].")
I.update_icon()
O.amount -= 1*/
/obj/item/attack_self(mob/user as mob)
..()
+1 -307
View File
@@ -923,7 +923,7 @@
return
var/mob/M = locate(href_list["traitor"])
if (!istype(M))
player()
player_panel_new()
return
if(isalien(M))
alert("Is an [M.mind ? M.mind.special_role : "Alien"]!", "[M.key]")
@@ -1863,312 +1863,6 @@
dat += "</body></html>"
usr << browse(dat, "window=adminplayerinfo;size=480x480")
/obj/admins/proc/player()
if (!usr.client.holder)
return
var/dat = "<html><head><title>Player Panel</title></head>"
//javascript, the part that does most of the work~
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/i = 1
var/show_karma = 0
var/DBConnection/dbcon
if(config.sql_enabled) // SQL is enabled in config.txt
dbcon = new() // Setting up connection
dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
if(dbcon.IsConnected())
show_karma = 1
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>"
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/karma = "DC"
if(show_karma)
var/DBQuery/query = dbcon.NewQuery("SELECT karma FROM karmatotals WHERE byondkey='[M.key]'")
query.Execute()
while(query.NextRow())
karma = query.item[1]
var/job = ""
if(istype(M,/mob/new_player))
job = "New player"
if(isliving(M))
job = "Living"
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"
//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] ([job])</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>
"}
usr << browse(dat, "window=players;size=600x480")
/obj/admins/proc/Jobbans()
if ((src.rank in list( "Game Admin", "Game Master" )))
var/dat = "<B>Job Bans!</B><HR><table>"
+15 -6
View File
@@ -262,7 +262,8 @@
verbs += /client/proc/admin_play
verbs += /client/proc/admin_observe
verbs += /client/proc/game_panel
verbs += /client/proc/player_panel
// verbs += /client/proc/player_panel
verbs += /client/proc/player_panel_new
verbs += /client/proc/unban_panel
verbs += /client/proc/jobbans
verbs += /client/proc/playernotes
@@ -388,7 +389,8 @@
verbs -= /client/proc/admin_play
verbs -= /client/proc/admin_observe
verbs -= /client/proc/game_panel
verbs -= /client/proc/player_panel
// verbs -= /client/proc/player_panel
verbs -= /client/proc/player_panel_new
verbs -= /client/proc/unban_panel
verbs -= /client/proc/jobbans
verbs -= /client/proc/playernotes
@@ -479,11 +481,18 @@
src << "[M.key] is undefined - [M.client.holder.state]"
/client/proc/player_panel()
///client/proc/player_panel()
// set name = "Player Panel-Old"
// set category = "Admin"
// if(holder)
// holder.player_panel_old()
// return
/client/proc/player_panel_new()
set name = "Player Panel"
set category = "Admin"
if (holder)
holder.player()
if(holder)
holder.player_panel_new()
return
/client/proc/jobbans()
@@ -722,7 +731,7 @@
verbs += /client/proc/admin_play
verbs += /client/proc/admin_observe
verbs += /client/proc/game_panel
verbs += /client/proc/player_panel
// verbs += /client/proc/player_panel
verbs += /client/proc/cmd_admin_subtle_message
verbs += /client/proc/cmd_admin_pm
verbs += /client/proc/cmd_admin_gib_self
+161
View File
@@ -0,0 +1,161 @@
/obj/admins/proc/player_panel_new()//The new one
if (!usr.client.holder)
return
var/dat = "<html><head><title>Player Menu</title></head>"
dat += "<body><table border=1 cellspacing=5><B><tr><th>Name/Real Name</th><th>Type</th><th>Assigned Job</th><th>Info</th><th>Options</th><th>Traitor?</th></tr></B>"
//add <th>IP:</th> to this if wanting to add back in IP checking
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
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/real = (M.real_name == M.original_name ? M.real_name : "[M.original_name] (as [M.real_name])")
var/turf/T = get_turf(M)
var/client_key = (M.key? M.key : "No key")
dat += "<tr align='center' bgcolor='[color]'><td>[M.name] \[[real]\] <br>[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])</td>" // Adds current name
if(isobserver(M))
dat += "<td>Ghost</td>"
if(isalien(M))
dat += "<td>Alien</td>"
if(islarva(M))
dat += "<td>Alien larva</td>"
if(ishuman(M))
dat += "<td>[M.job]</td>"
if(ismetroid(M))
dat += "<td>Metroid</td>"
if(ismonkey(M))
dat += "<td>Monkey</td>"
if(isAI(M))
dat += "<td>AI</td>"
if(ispAI(M))
dat += "<td>pAI</td>"
if(isrobot(M))
dat += "<td>Cyborg</td>"
if(isanimal(M))
dat += "<td>Animal</td>"
if(iscorgi(M))
dat += "<td>Corgi</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.
var/mob/living/carbon/human/H = M
if (H.wear_id)
var/obj/item/weapon/card/id/id
if(istype(H.wear_id, /obj/item/device/pda))
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>"
var/muting = "Mute unavailable - no client"
if(M.client)
muting = {"<A href='?src=\ref[src];mute2=\ref[M]'>Mute: [(M.client.muted ? "Muted" : "Voiced")]</A> |
<A href='?src=\ref[src];mute_complete=\ref[M]'>Complete mute: [(M.client.muted ? "Completely Muted" : "Voiced")]</A>
"}
dat += {"<td><A HREF='?src=\ref[src];player_info=[M.ckey]'>[player_has_info(M.ckey) ? "Info" : "N/A"] </A></td>
<td><A href='?src=\ref[src];boot2=\ref[M]'>Boot</A> | <A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | <A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A>
<br><font size="2.5">[muting]</font><br>
<font size="2"><A HREF='?src=\ref[src];adminplayeropts=\ref[M]'>PP</A> |
<A HREF='?src=\ref[src];adminplayervars=\ref[M]'>VV</A> |
<A HREF='?src=\ref[src];adminplayersubtlemessage=\ref[M]'>SM</A> |
<A HREF='?src=\ref[src];adminplayerobservejump=\ref[M]'>JMP</A> |
<A HREF='?src=\ref[src];secretsadmin=check_antagonist'>CA</A></font></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>"}
dat += "</table></body></html>"
usr << browse(dat, "window=players;size=905x480")
//The old one
/obj/admins/proc/player_panel_old()
if (!usr.client.holder)
return
var/dat = "<html><head><title>Player Menu</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>PM</th><th>Traitor?</th></tr></B>"
//add <th>IP:</th> to this if wanting to add back in IP checking
//add <td>(IP: [M.lastKnownIP])</td> if you want to know their ip to the lists below
var/list/mobs = sortmobs()
for(var/mob/M in mobs)
if(!M.ckey) continue
dat += "<tr><td>[M.name]</td>"
if(isAI(M))
dat += "<td>AI</td>"
else if(isrobot(M))
dat += "<td>Cyborg</td>"
else if(ishuman(M))
dat += "<td>[M.real_name]</td>"
else if(istype(M, /mob/living/silicon/pai))
dat += "<td>pAI</td>"
else if(istype(M, /mob/new_player))
dat += "<td>New Player</td>"
else if(isobserver(M))
dat += "<td>Ghost</td>"
else if(ismonkey(M))
dat += "<td>Monkey</td>"
else if(isalien(M))
dat += "<td>Alien</td>"
else
dat += "<td>Unknown</td>"
if(istype(M,/mob/living/carbon/human))
var/mob/living/carbon/human/H = M
if(H.mind && H.mind.assigned_role)
dat += "<td>[H.mind.assigned_role]</td>"
else
dat += "<td>NA</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[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>"}
dat += "</table></body></html>"
usr << browse(dat, "window=players;size=640x480")
-27
View File
@@ -29,7 +29,6 @@
attackby(var/obj/item/weapon/W, var/mob/user)
wrap(W,user)
if(path || !active)
switch(active)
if(0)
@@ -398,7 +397,6 @@
usr << "\blue [grenades] / [max_grenades] Grenades."
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
if((istype(I, /obj/item/weapon/chem_grenade)) || (istype(I, /obj/item/weapon/flashbang)) || (istype(I, /obj/item/weapon/smokebomb)) || (istype(I, /obj/item/weapon/mustardbomb)) || (istype(I, /obj/item/weapon/empgrenade)))
if(grenades.len < max_grenades)
user.drop_item()
@@ -498,7 +496,6 @@
usr << "\blue [syringes] / [max_syringes] Syringes."
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
if(istype(I, /obj/item/weapon/reagent_containers/syringe))
if(syringes.len < max_syringes)
user.drop_item()
@@ -577,7 +574,6 @@
usr << "\blue [syringes] / [max_syringes] Syringes."
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
if(istype(I, /obj/item/weapon/reagent_containers/syringe))
if(syringes.len < max_syringes)
user.drop_item()
@@ -731,16 +727,10 @@
reagents = R
R.my_atom = src
attackby(obj/item/weapon/W as obj, mob/user as mob)
wrap(W,user)
return
attack_self(mob/user as mob)
return
attack(mob/M as mob, mob/user as mob, def_zone)
return
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
return
afterattack(obj/target, mob/user , flag)
return
@@ -1138,10 +1128,6 @@
attack_paw()
return attack_hand()
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
return
afterattack(obj/target, mob/user , flag)
if(!target.reagents) return
@@ -1346,7 +1332,6 @@
return
attackby(obj/item/weapon/W as obj, mob/user as mob)
wrap(W,user)
return
attack_self(mob/user as mob)
return
@@ -1475,7 +1460,6 @@
return 0
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
return
afterattack(obj/target, mob/user , flag)
return
@@ -1498,8 +1482,6 @@
var/slices_num
attackby(obj/item/weapon/W as obj, mob/user as mob)
wrap(W,user)
if((slices_num <= 0 || !slices_num) || !slice_path)
return 1
var/inaccurate = 0
@@ -1701,9 +1683,6 @@
if(!icon_state)
icon_state = "pill[rand(1,20)]"
attackby(obj/item/weapon/W as obj, mob/user as mob)
wrap(W,user)
return
attack_self(mob/user as mob)
return
attack(mob/M as mob, mob/user as mob, def_zone)
@@ -1744,10 +1723,6 @@
return 0
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
return
afterattack(obj/target, mob/user , flag)
if(target.is_open_container() == 1 && target.reagents)
@@ -2364,7 +2339,6 @@
volume = 50
attackby(obj/item/weapon/W as obj, mob/user as mob)
wrap(W,user)
return
attack_self(mob/user as mob)
return
@@ -2406,7 +2380,6 @@
return 0
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
return
afterattack(obj/target, mob/user , flag)
+3 -54
View File
@@ -12,8 +12,9 @@
else//Safety, in case a turf cannot be found.
loc = pick(latejoin)
if(!istype(body,/mob)) return//This needs to be recoded sometime so it has loc as its first arg
real_name = body.real_name
name = body.real_name
real_name = body.name
original_name = body.original_name
name = body.original_name
if(!safety)
corpse = body
verbs += /mob/dead/observer/proc/reenter_corpse
@@ -157,58 +158,6 @@ This is the proc mobs get to turn into a ghost. Forked from ghostize due to comp
L+=T
usr.loc = pick(L)
var/list/karma_spenders = list()
/mob/dead/observer/verb/spend_karma(var/mob/M in world) // Karma system -- TLE
set name = "Spend Karma"
set category = "Ghost"
set desc = "Let the gods know whether someone's been naughty or nice. <One use only>"
if(!istype(M, /mob))
usr << "\red That's not a mob. You shouldn't have even been able to specify that. Please inform your server administrator post haste."
return
if(!M.client)
usr << "\red That mob has no client connected at the moment."
return
if(client.karma_spent)
usr << "\red You've already spent your karma for the round."
return
for(var/a in karma_spenders)
if(a == key)
usr << "\red You've already spent your karma for the round."
return
if(M.key == key)
usr << "\red You can't spend karma on yourself!"
return
var/choice = input("Give [M.name] good karma or bad karma?", "Karma") in list("Good", "Bad", "Cancel")
client.karma_spent = 1
if(!choice || choice == "Cancel")
return
client.karma_spent = 0
if(choice == "Good")
M.client.karma += 1
if(choice == "Bad")
M.client.karma -= 1
usr << "[choice] karma spent on [M.name]."
client.karma_spent = 1
karma_spenders.Add(key)
if(M.client.karma <= -2 || M.client.karma >= 2)
var/special_role = "None"
var/assigned_role = "None"
var/karma_diary = file("data/logs/karma_[time2text(world.realtime, "YYYY/MM-Month/DD-Day")].log")
if(M.mind)
if(M.mind.special_role)
special_role = M.mind.special_role
if(M.mind.assigned_role)
assigned_role = M.mind.assigned_role
karma_diary << "[M.name] ([M.key]) [assigned_role]/[special_role]: [M.client.karma] - [time2text(world.timeofday, "hh:mm:ss")]"
var/isnegative = 1
if(choice == "Good")
isnegative = 0
else
isnegative = 1
sql_report_karma(src, M, isnegative)
/mob/dead/observer/verb/toggle_alien_candidate()
set name = "Toggle Be Alien Candidate"
set category = "Ghost"
@@ -208,6 +208,7 @@
preferences.randomize_name()
observer.name = preferences.real_name
observer.real_name = observer.name
observer.original_name = observer.name //Original name is only used in ghost chat! It is not to be edited by anything!
del(src)
return 1
@@ -828,6 +828,7 @@ datum/preferences
if(be_random_name)
randomize_name()
character.real_name = real_name
character.original_name = real_name //Original name is only used in ghost chat! It is not to be edited by anything!
character.flavor_text = flavor_text
+4 -8
View File
@@ -23,14 +23,10 @@
var/name = src.real_name
var/alt_name = ""
if (istype(src, /mob/living/carbon/human) && src.name != src.real_name)
var/mob/living/carbon/human/H = src
alt_name = " (as [H.get_authentification_name()])"
else if (istype(src, /mob/dead/observer))
name = "Ghost"
alt_name = " ([src.real_name])"
else if (!istype(src, /mob/living/carbon/human))
name = src.name
if(original_name) //Original name is only used in ghost chat! It is not to be edited by anything!
name = src.original_name
if( original_name != real_name )
alt_name = " (died as [src.real_name])"
message = src.say_quote(message)
+1
View File
@@ -58,6 +58,7 @@
M.apply_damage(75, BRUTE, "head", used_weapon = "Suicide attempt with a gun")
M.apply_damage(85, BRUTE, "chest")
M.visible_message("\red [user] pulls the trigger. Ow.")
del(src.in_chamber)
return
else
return ..()
@@ -38,7 +38,6 @@
attackby(var/obj/item/A as obj, mob/user as mob)
wrap(A, user)
var/num_loaded = 0
if(istype(A, /obj/item/ammo_magazine))
if((load_method == 2) && loaded.len) return
+18 -12
View File
@@ -12,9 +12,13 @@
process()
main = 1
ID = rand(0,1000)
var/lets_not_be_a_derp = 1
var/first = 1
var/obj/effect/effect/laserdealer/lasor = new /obj/effect/effect/laserdealer(null)
spawn(0)
lasor.setup(ID)
spawn(0)
while(!bumped)
step_towards(src, current)
for(var/mob/living/M in loc)
Bump(M)
if((!( current ) || loc == current))
@@ -22,25 +26,27 @@
if((x == 1 || x == world.maxx || y == 1 || y == world.maxy))
del(src)
return
if(!lets_not_be_a_derp)
if(!first)
var/obj/item/projectile/beam/new_beam = new src.type(loc)
processing_objects.Remove(new_beam)
new_beam.dir = dir
new_beam.dir = get_dir(src, current)
new_beam.ID = ID
new_beam.icon_state = icon_state
else
lets_not_be_a_derp = 0
step_towards(src, current)
first = 0
processing_objects.Remove(src)
return
Del()
if(main)
sleep(3)
for(var/obj/item/projectile/beam/beam in world)
if(beam.ID == ID)
del(beam)
..()
/obj/effect/effect/laserdealer
name = "laserdealio"
proc/setup(var/ID = 0)
sleep(5)
for(var/obj/item/projectile/beam/beam in world)
if(ID == beam.ID)
del(beam)
spawn(0)
del(src)
/obj/item/projectile/beam/heavylaser
name = "heavy laser"
+23 -19
View File
@@ -79,11 +79,11 @@
return
examine()
set src in oview(4)
if(sortTag)
usr << "\blue It is labeled \"[sortTag]\""
if(examtext)
usr << examtext
if(src in oview(4))
if(sortTag)
usr << "\blue It is labeled \"[sortTag]\""
if(examtext)
usr << examtext
..()
return
@@ -155,11 +155,11 @@
return
examine()
set src in oview(4)
if(sortTag)
usr << "\blue It is labeled \"[sortTag]\""
if(examtext)
usr << examtext
if(src in oview(4))
if(sortTag)
usr << "\blue It is labeled \"[sortTag]\""
if(examtext)
usr << examtext
..()
return
@@ -171,14 +171,19 @@
var/amount = 25.0
attack(target as obj, mob/user as mob)
afterattack(target as obj, mob/user as mob)
if(istype(target, /obj/structure/table) || istype(target, /obj/structure/rack))
return
user.attack_log += text("\[[time_stamp()]\] <font color='blue'>Has used [src.name] on \ref[target]</font>")
/* if (istype(target, /obj/item))
if (istype(target, /obj/item))
var/obj/item/O = target
if (src.amount > 1)
var/obj/item/smallDelivery/P = new /obj/item/smallDelivery(get_turf(O.loc)) //Aaannd wrap it up!
if(!istype(O.loc, /turf))
if(user.client)
user.client.screen -= O
P.wrapped = O
O.loc = P
src.amount -= 1
@@ -201,9 +206,8 @@
O.loc = P
src.amount -= 3
else
user << "\blue You need more paper." */
if(!(istype (target, /obj/structure/closet) || istype(target, /obj/structure/closet/crate) || istype(target, /obj/item)))
user << "\blue You need more paper."
else
user << "\blue The object you are trying to wrap is unsuitable for the sorting machinery!"
if (src.amount <= 0)
new /obj/item/weapon/c_tube( src.loc )
@@ -213,12 +217,12 @@
return
examine()
set src in usr
usr << "\blue There are [amount] units of package wrap left!"
if(src in usr)
usr << "\blue There are [amount] units of package wrap left!"
..()
return
/obj/item/proc/wrap(obj/item/I as obj, mob/user as mob)
/*/obj/item/proc/wrap(obj/item/I as obj, mob/user as mob)
if(istype(I, /obj/item/weapon/packageWrap))
var/obj/item/weapon/packageWrap/C = I
if(anchored)
@@ -231,7 +235,7 @@
if (C.amount <= 0)
new /obj/item/weapon/c_tube( C.loc )
del(C)
return
return*/
/obj/item/device/destTagger
name = "destination tagger"