mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
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:
@@ -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"
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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)
|
||||
..()
|
||||
|
||||
@@ -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>"
|
||||
|
||||
@@ -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
|
||||
|
||||
161
code/modules/admin/player_panel.dm
Normal file
161
code/modules/admin/player_panel.dm
Normal 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")
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user