Replaced a lot of stupid from the wardrobes and package wrap, they now use an afterattack call instead of specific code for them in EVERY OTHER ITEM.

Improved the admin panel.
Removed Karma.
This commit is contained in:
SkyMarshal
2012-02-28 00:11:15 -07:00
parent ed7c6d1259
commit b653c615be
17 changed files with 275 additions and 556 deletions

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"

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,9 +37,33 @@
user << "\red There's not enough space to fit that!"
return
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
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()
set src in usr
..()
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."
@@ -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()

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

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

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

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)
..()

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>"

View File

@@ -261,7 +261,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
@@ -387,7 +388,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
@@ -477,11 +479,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()
@@ -720,7 +729,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

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")

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
@@ -1704,9 +1686,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)
@@ -1747,10 +1726,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)
@@ -2367,7 +2342,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
@@ -2409,7 +2383,6 @@
return 0
attackby(obj/item/I as obj, mob/user as mob)
wrap(I,user)
return
afterattack(obj/target, mob/user , flag)

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"

View File

@@ -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

View File

@@ -827,6 +827,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

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)

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 ..()

View File

@@ -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

View File

@@ -79,7 +79,7 @@
return
examine()
set src in oview(4)
if(src in oview(4))
if(sortTag)
usr << "\blue It is labeled \"[sortTag]\""
if(examtext)
@@ -155,7 +155,7 @@
return
examine()
set src in oview(4)
if(src in oview(4))
if(sortTag)
usr << "\blue It is labeled \"[sortTag]\""
if(examtext)
@@ -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
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"