mirror of
https://github.com/ParadiseSS13/Paradise.git
synced 2026-08-23 03:57:13 +01:00
Merge pull request #539 from SkyMarshal/master
Fixed lasers, balanced nuke, removed stupid code, removed Karma, improved admin panel.
This commit is contained in:
+1
-1
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
@@ -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>"
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -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