mirror of
https://github.com/vgstation-coders/vgstation13.git
synced 2025-12-10 10:21:11 +00:00
Changed some global_list stuff:
>tried to make the comments less confusing. >Removed the procs for rebuilding the lists (they weren't meant to be used and half were broken anyway). >added a directory. It maps ckey to client like so directory[ckey] = client. It could be used for PMs, banning, and various other admin tools rather than using \ref[] >var/list/admins is now a list of clients whom are admins. >var/list/admin_datums is what var/list/admins used to be. A map from ckey -> admin datum Most of this is so I can add modular admin ranks in a non-horrendous way and fix some existing issues. >var/list/client_list is now var/list/clients (laziness sorry) >removed some needless loops and stuff. git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4951 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
@@ -1,12 +1,15 @@
|
||||
var/list/clients = list() //list of all clients
|
||||
var/list/admins = list() //list of all clients whom are admins
|
||||
var/list/directory = list() //list of all ckeys with associated client
|
||||
|
||||
//Since it didn't really belong in any other category, I'm putting this here
|
||||
//This is for procs to replace all the goddamn 'in world's that are chilling around the code
|
||||
|
||||
var/global/list/player_list = list() //List of all logged in players **with clients attached** (Based on mob reference)
|
||||
var/global/list/admin_list = list() //List of all logged in admins (Based on mob reference)
|
||||
var/global/list/player_list = list() //List of all mobs **with clients attached**. Excludes /mob/new_player
|
||||
var/global/list/mob_list = list() //List of all mobs, including clientless
|
||||
var/global/list/living_mob_list = list() //List of all living mobs, including clientless
|
||||
var/global/list/dead_mob_list = list() //List of all dead mobs, including clientless
|
||||
var/global/list/client_list = list() //List of all clients, based on ckey
|
||||
var/global/list/living_mob_list = list() //List of all alive mobs, including clientless. Excludes /mob/new_player
|
||||
var/global/list/dead_mob_list = list() //List of all dead mobs, including clientless. Excludes /mob/new_player
|
||||
|
||||
var/global/list/cable_list = list() //Index for all cables, so that powernets don't have to look through the entire world all the time
|
||||
var/global/list/hair_styles_list = list() //stores /datum/sprite_accessory/hair indexed by name
|
||||
var/global/list/facial_hair_styles_list = list() //stores /datum/sprite_accessory/facial_hair indexed by name
|
||||
@@ -32,115 +35,3 @@ var/global/list/landmarks_list = list() //list of all landmarks created
|
||||
var/datum/sprite_accessory/facial_hair/H = new path()
|
||||
facial_hair_styles_list[H.name] = H
|
||||
|
||||
proc/make_player_list()//Global proc that rebuilds the player list
|
||||
for(var/mob/p in player_list)//Clears out everyone that logged out
|
||||
if(!(p.client))
|
||||
player_list -= p
|
||||
for(var/mob/M in world)//Adds everyone that has logged in
|
||||
if(M.client)
|
||||
player_list += M
|
||||
|
||||
proc/make_admin_list()//Rebuild that shit to try and avoid issues with stealthmins
|
||||
admin_list = list()
|
||||
for(var/client/C in client_list)
|
||||
if(C && C.holder)
|
||||
admin_list += C
|
||||
|
||||
proc/make_mob_list()
|
||||
for(var/mob/p in mob_list)
|
||||
if(!p)//If it's a null reference, remove it
|
||||
mob_list -= p
|
||||
for(var/mob/M in world)
|
||||
mob_list += M
|
||||
|
||||
proc/make_extra_mob_list()
|
||||
for(var/mob/p in living_mob_list)
|
||||
if(!p)
|
||||
living_mob_list -= p
|
||||
if(p.stat == DEAD)//Transfer
|
||||
living_mob_list -= p
|
||||
dead_mob_list += p
|
||||
for(var/mob/p in dead_mob_list)
|
||||
if(!p)
|
||||
dead_mob_list -= p
|
||||
if(p.stat != DEAD)
|
||||
dead_mob_list -= p
|
||||
living_mob_list += p
|
||||
for(var/mob/M in world)
|
||||
if(M.stat == DEAD)
|
||||
living_mob_list += M
|
||||
else
|
||||
dead_mob_list += M
|
||||
|
||||
|
||||
//Alright, this proc should NEVER be called in the code, ever. This is more of an 'oh god everything is broken'-emergency button.
|
||||
proc/rebuild_mob_lists()
|
||||
player_list = list()
|
||||
admin_list = list()
|
||||
mob_list = list()
|
||||
living_mob_list = list()
|
||||
dead_mob_list = list()
|
||||
client_list = list()
|
||||
for(var/mob/M in world)
|
||||
mob_list += M
|
||||
if(M.client)
|
||||
player_list += M
|
||||
if(M.stat != DEAD)
|
||||
living_mob_list += M
|
||||
else
|
||||
dead_mob_list += M
|
||||
for(var/client/C)
|
||||
client_list += C.ckey
|
||||
if(C.holder)
|
||||
admin_list += C
|
||||
|
||||
proc/add_to_mob_list(var/mob/A)//Adds an individual mob
|
||||
if(A)
|
||||
mob_list |= A
|
||||
if(istype(A,/mob/new_player))//New players are only on the mob list, but not the dead/living
|
||||
return
|
||||
else
|
||||
if(A.stat == 2)
|
||||
dead_mob_list |= A
|
||||
if(A.stat != 2)
|
||||
living_mob_list |= A
|
||||
// if(A.client)
|
||||
// player_list |= A
|
||||
|
||||
proc/remove_from_mob_list(var/mob/R)//Removes an individual mob
|
||||
mob_list -= R
|
||||
if(R.stat == 2)
|
||||
dead_mob_list -= R
|
||||
if(R.stat != 2)
|
||||
living_mob_list -= R
|
||||
// if(R.client)
|
||||
// player_list -= R
|
||||
|
||||
proc/make_client_list()//Rebuilds client list
|
||||
for(var/mob/c in client_list)
|
||||
if(!c.client)
|
||||
client_list -= c.ckey
|
||||
for(var/mob/M in world)
|
||||
if(M.client)
|
||||
client_list += M.ckey
|
||||
|
||||
|
||||
|
||||
/*/obj/item/listdebug//Quick debugger for the global lists
|
||||
icon = 'icons/obj/assemblies.dmi'
|
||||
icon_state = "radio-igniter-tank"
|
||||
|
||||
/obj/item/listdebug/attack_self()
|
||||
switch(input("Which list?") in list("Players","Admins","Mobs","Living Mobs","Dead Mobs", "Clients"))
|
||||
if("Players")
|
||||
usr << dd_list2text(player_list,",")
|
||||
if("Admins")
|
||||
usr << dd_list2text(admin_list,",")
|
||||
if("Mobs")
|
||||
usr << dd_list2text(mob_list,",")
|
||||
if("Living Mobs")
|
||||
usr << dd_list2text(living_mob_list,",")
|
||||
if("Dead Mobs")
|
||||
usr << dd_list2text(dead_mob_list,",")
|
||||
if("Clients")
|
||||
usr << dd_list2text(client_list,",")*/
|
||||
@@ -34,12 +34,10 @@ var/datum/controller/failsafe/Failsafe
|
||||
if(0 to 3)
|
||||
MC_defcon++
|
||||
if(4)
|
||||
for(var/client/C in admin_list)
|
||||
C << "<font color='red' size='2'><b>Warning. The Master Controller has not fired in the last [MC_defcon*processing_interval] ticks. Automatic restart in [processing_interval] ticks.</b></font>"
|
||||
admins << "<font color='red' size='2'><b>Warning. The Master Controller has not fired in the last [MC_defcon*processing_interval] ticks. Automatic restart in [processing_interval] ticks.</b></font>"
|
||||
MC_defcon = 5
|
||||
if(5)
|
||||
for(var/client/C in admin_list)
|
||||
C << "<font color='red' size='2'><b>Warning. The Master Controller has still not fired within the last [MC_defcon*processing_interval] ticks. Killing and restarting...</b></font>"
|
||||
admins << "<font color='red' size='2'><b>Warning. The Master Controller has still not fired within the last [MC_defcon*processing_interval] ticks. Killing and restarting...</b></font>"
|
||||
new /datum/controller/game_controller() //replace the old master_controller (hence killing the old one's process)
|
||||
master_controller.process() //Start it rolling again
|
||||
MC_defcon = 0
|
||||
@@ -53,12 +51,10 @@ var/datum/controller/failsafe/Failsafe
|
||||
if(0 to 3)
|
||||
lighting_defcon++
|
||||
if(4)
|
||||
for(var/client/C in admin_list)
|
||||
C << "<font color='red' size='2'><b>Warning. The Lighting Controller has not fired in the last [lighting_defcon*processing_interval] ticks. Automatic restart in [processing_interval] ticks.</b></font>"
|
||||
admins << "<font color='red' size='2'><b>Warning. The Lighting Controller has not fired in the last [lighting_defcon*processing_interval] ticks. Automatic restart in [processing_interval] ticks.</b></font>"
|
||||
lighting_defcon = 5
|
||||
if(5)
|
||||
for(var/client/C in admin_list)
|
||||
C << "<font color='red' size='2'><b>Warning. The Lighting Controller has still not fired within the last [lighting_defcon*processing_interval] ticks. Killing and restarting...</b></font>"
|
||||
admins << "<font color='red' size='2'><b>Warning. The Lighting Controller has still not fired within the last [lighting_defcon*processing_interval] ticks. Killing and restarting...</b></font>"
|
||||
new /datum/controller/lighting() //replace the old lighting_controller (hence killing the old one's process)
|
||||
lighting_controller.process() //Start it rolling again
|
||||
lighting_defcon = 0
|
||||
|
||||
@@ -61,7 +61,7 @@ datum/controller/vote
|
||||
greatest_votes = votes
|
||||
//default-vote for everyone who didn't vote
|
||||
if(!config.vote_no_default && choices.len)
|
||||
var/non_voters = (client_list.len - total_votes)
|
||||
var/non_voters = (clients.len - total_votes)
|
||||
if(non_voters > 0)
|
||||
if(mode == "restart")
|
||||
choices["Continue Playing"] += non_voters
|
||||
|
||||
@@ -21,10 +21,7 @@ proc/sql_poll_players()
|
||||
proc/sql_poll_admins()
|
||||
if(!sqllogging)
|
||||
return
|
||||
var/admincount = 0
|
||||
for (var/client/C in admin_list)
|
||||
if(C)
|
||||
admincount += 1
|
||||
var/admincount = admins.len
|
||||
var/DBConnection/dbcon = new()
|
||||
dbcon.Connect("dbi:mysql:[sqldb]:[sqladdress]:[sqlport]","[sqllogin]","[sqlpass]")
|
||||
if(!dbcon.IsConnected())
|
||||
|
||||
@@ -1,44 +1,24 @@
|
||||
proc/get_all_clients()
|
||||
var/list/client/clients = list()
|
||||
|
||||
for (var/mob/M in player_list)
|
||||
|
||||
clients += M.client
|
||||
|
||||
return clients
|
||||
|
||||
proc/get_all_admin_clients()
|
||||
var/list/client/clients = list()
|
||||
|
||||
for (var/client/C in admin_list)
|
||||
|
||||
clients += C
|
||||
|
||||
return clients
|
||||
|
||||
|
||||
/mob/verb/who()
|
||||
/client/verb/who()
|
||||
set name = "Who"
|
||||
set category = "OOC"
|
||||
|
||||
usr << "<b>Current Players:</b>"
|
||||
var/msg = "<b>Current Players:</b>\n"
|
||||
|
||||
var/list/peeps = list()
|
||||
var/list/Lines = list()
|
||||
|
||||
for (var/client/C in client_list)
|
||||
var/entry = "\t"
|
||||
if(usr.client.holder && usr.client.holder.level >= 0) //Everything above admin-observers get this.
|
||||
entry += "[C.key]"
|
||||
if(holder && holder.level >= 0) //Everything above admin-observers get this.
|
||||
for(var/client/C in clients)
|
||||
var/entry = "\t[C.key]"
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += " <i>(as [C.holder.fakekey])</i>"
|
||||
var/mob/M = C.mob
|
||||
entry += " - Playing as [M.real_name]"
|
||||
switch(M.stat)
|
||||
entry += " - Playing as [C.mob.real_name]"
|
||||
switch(C.mob.stat)
|
||||
if(UNCONSCIOUS)
|
||||
entry += " - <font color='darkgray'><b>Unconscious</b></font>"
|
||||
if(DEAD)
|
||||
if(isobserver(M))
|
||||
var/mob/dead/observer/O = M
|
||||
if(isobserver(C.mob))
|
||||
var/mob/dead/observer/O = C.mob
|
||||
if(O.started_as_observer)
|
||||
entry += " - <font color='gray'>Observing</font>"
|
||||
else
|
||||
@@ -47,39 +27,46 @@ proc/get_all_admin_clients()
|
||||
entry += " - <font color='black'><b>DEAD</b></font>"
|
||||
if(is_special_character(C.mob))
|
||||
entry += " - <b><font color='red'>Antagonist</font></b>"
|
||||
entry += " (<A HREF='?src=\ref[src.client.holder];adminmoreinfo=\ref[M]'>?</A>)"
|
||||
else
|
||||
entry += " (<A HREF='?src=\ref[holder];adminmoreinfo=\ref[C.mob]'>?</A>)"
|
||||
Lines += entry
|
||||
else
|
||||
for(var/client/C in clients)
|
||||
if(C.holder && C.holder.fakekey)
|
||||
entry += "[C.holder.fakekey]"
|
||||
Lines += C.holder.fakekey
|
||||
else
|
||||
entry += "[C.key]"
|
||||
Lines += C.key
|
||||
|
||||
peeps += entry
|
||||
for(var/line in sortList(Lines))
|
||||
msg += "[line]\n"
|
||||
|
||||
peeps = sortList(peeps)
|
||||
|
||||
for (var/p in peeps)
|
||||
usr << p
|
||||
|
||||
usr << "<b>Total Players: [length(peeps)]</b>"
|
||||
msg += "<b>Total Players: [length(Lines)]</b>"
|
||||
src << msg
|
||||
|
||||
/client/verb/adminwho()
|
||||
set category = "Admin"
|
||||
set name = "Adminwho"
|
||||
|
||||
usr << "<b>Current Admins:</b>"
|
||||
var/msg = "<b>Current Admins:</b>\n"
|
||||
if(holder)
|
||||
for(var/client/C in admins)
|
||||
msg += "\t[C] is a [C.holder.rank]"
|
||||
|
||||
for (var/client/C in admin_list)
|
||||
if(C && C.holder)
|
||||
if(usr.client && usr.client.holder)
|
||||
var/afk = 0
|
||||
if(C.inactivity > AFK_THRESHOLD ) //When I made this, the AFK_THRESHOLD was 3000ds = 300s = 5m, see setup.dm for the new one.
|
||||
afk = 1
|
||||
if(isobserver(C.mob))
|
||||
usr << "\t[C] is a [C.holder.rank][C.holder.fakekey ? " <i>(as [C.holder.fakekey])</i>" : ""] - Observing [afk ? "(AFK)" : ""]"
|
||||
else if(istype(C.mob,/mob/new_player))
|
||||
usr << "\t[C] is a [C.holder.rank][C.holder.fakekey ? " <i>(as [C.holder.fakekey])</i>" : ""] - Has not entered [afk ? "(AFK)" : ""]"
|
||||
else if(istype(C.mob,/mob/living))
|
||||
usr << "\t[C] is a [C.holder.rank][C.holder.fakekey ? " <i>(as [C.holder.fakekey])</i>" : ""] - Playing [afk ? "(AFK)" : ""]"
|
||||
else if(!C.holder.fakekey)
|
||||
usr << "\t[C] is a [C.holder.rank]"
|
||||
if(C.holder.fakekey)
|
||||
msg += " <i>(as [C.holder.fakekey])</i>"
|
||||
|
||||
if(isobserver(C.mob))
|
||||
msg += " - Observing"
|
||||
else if(istype(C.mob,/mob/new_player))
|
||||
msg += " - Lobby"
|
||||
else
|
||||
msg += " - Playing"
|
||||
|
||||
if(C.inactivity > AFK_THRESHOLD)
|
||||
msg += " (AFK)"
|
||||
msg += "\n"
|
||||
else
|
||||
for(var/client/C in admins)
|
||||
if(!C.holder.fakekey)
|
||||
msg += "\t[C] is a [C.holder.rank]\n"
|
||||
|
||||
src << msg
|
||||
@@ -76,7 +76,6 @@ var/list/bombers = list( )
|
||||
var/list/admin_log = list ( )
|
||||
var/list/lastsignalers = list( ) //keeps last 100 signals here in format: "[src] used \ref[src] @ location [src.loc]: [freq]/[code]"
|
||||
var/list/lawchanges = list( ) //Stores who uploaded laws to which silicon-based lifeform, and what the law was
|
||||
var/list/admins = list( )
|
||||
var/list/shuttles = list( )
|
||||
var/list/reg_dna = list( )
|
||||
// list/traitobj = list( )
|
||||
|
||||
@@ -53,17 +53,15 @@ datum/admins/proc/DB_ban_record(var/bantype, var/mob/banned_mob, var/duration =
|
||||
a_computerid = src.owner:computer_id
|
||||
a_ip = src.owner:address
|
||||
|
||||
// var/list/client/clients = get_all_clients()
|
||||
var/who
|
||||
for(var/client/C in client_list)
|
||||
for(var/client/C in clients)
|
||||
if(!who)
|
||||
who = "[C]"
|
||||
else
|
||||
who += ", [C]"
|
||||
|
||||
var/list/client/admin_clients = get_all_admin_clients()
|
||||
var/adminwho
|
||||
for(var/client/C in admin_clients)
|
||||
for(var/client/C in admins)
|
||||
if(!adminwho)
|
||||
adminwho = "[C]"
|
||||
else
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
//Blocks an attempt to connect before even creating our client datum thing.
|
||||
world/IsBanned(key,address,computer_id)
|
||||
if(ckey(key) in admins)
|
||||
if(ckey(key) in admin_datums)
|
||||
return ..()
|
||||
|
||||
//Guest Checking
|
||||
|
||||
@@ -7,14 +7,13 @@ var/global/floorIsLava = 0
|
||||
/proc/message_admins(var/text, var/admin_ref = 0, var/admin_holder_ref = 0)
|
||||
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>"
|
||||
log_adminwarn(rendered)
|
||||
for (var/client/C in admin_list)
|
||||
if (C)
|
||||
var/msg = rendered
|
||||
if (admin_ref)
|
||||
msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
|
||||
if (admin_holder_ref && C.holder)
|
||||
msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
|
||||
C << msg
|
||||
for(var/client/C in admins)
|
||||
var/msg = rendered
|
||||
if(admin_ref)
|
||||
msg = dd_replacetext(msg, "%admin_ref%", "\ref[C]")
|
||||
if(admin_holder_ref && C.holder)
|
||||
msg = dd_replacetext(msg, "%holder_ref%", "\ref[C.holder]")
|
||||
C << msg
|
||||
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////Panels
|
||||
|
||||
@@ -25,8 +25,8 @@
|
||||
/client/proc/update_admins(var/rank)
|
||||
if(!holder)
|
||||
holder = new /datum/admins(rank)
|
||||
admin_list |= src
|
||||
admins[ckey] = holder
|
||||
admins |= src
|
||||
admin_datums[ckey] = holder
|
||||
|
||||
var/need_update = 0
|
||||
//check if our rank has changed
|
||||
@@ -253,7 +253,6 @@
|
||||
verbs += /datum/admins/proc/adjump
|
||||
verbs += /client/proc/callproc
|
||||
verbs += /client/proc/triple_ai
|
||||
verbs += /client/proc/get_admin_state
|
||||
verbs += /client/proc/reload_admins
|
||||
verbs += /client/proc/cmd_debug_make_powernets
|
||||
verbs += /client/proc/object_talk
|
||||
@@ -299,7 +298,6 @@
|
||||
/client/proc/show_verbs,
|
||||
/client/proc/colorooc,
|
||||
/client/proc/triple_ai,
|
||||
/client/proc/get_admin_state,
|
||||
/client/proc/reload_admins,
|
||||
/client/proc/kill_air,
|
||||
/client/proc/cmd_debug_make_powernets,
|
||||
@@ -419,11 +417,11 @@
|
||||
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus
|
||||
feedback_add_details("admin_verb","O") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
|
||||
/*
|
||||
/client/proc/get_admin_state()
|
||||
set name = "Get Admin State"
|
||||
set category = "Debug"
|
||||
for(var/client/C in admin_list)
|
||||
for(var/client/C in admins)
|
||||
if(C.holder.state == 1)
|
||||
src << "[C.key] is playing - [C.holder.state]"
|
||||
else if(C.holder.state == 2)
|
||||
@@ -431,6 +429,7 @@
|
||||
else
|
||||
src << "[C.key] is undefined - [C.holder.state]"
|
||||
feedback_add_details("admin_verb","GAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
*/
|
||||
|
||||
/client/proc/invisimin()
|
||||
set name = "Invisimin"
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
/client/proc/deadmin()
|
||||
admins.Remove(ckey)
|
||||
admin_datums -= ckey
|
||||
if(holder) del(holder)
|
||||
src.clear_admin_verbs()
|
||||
admin_list -= src
|
||||
clear_admin_verbs()
|
||||
admins -= src
|
||||
return 1
|
||||
|
||||
var/list/admin_datums = list()
|
||||
|
||||
@@ -22,9 +22,10 @@
|
||||
return
|
||||
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
|
||||
|
||||
for (var/client/C in admin_list)
|
||||
if (src.holder.rank == "Admin Observer")
|
||||
if(holder.rank == "Admin Observer")
|
||||
for(var/client/C in admins)
|
||||
C << "<span class='adminobserver'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, C)]:</EM> <span class='message'>[msg]</span></span>"
|
||||
else
|
||||
else
|
||||
for(var/client/C in admins)
|
||||
C << "<span class='admin'><span class='prefix'>ADMIN:</span> <EM>[key_name(usr, C)]</EM> (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[mob]'>JMP</A>): <span class='message'>[msg]</span></span>"
|
||||
|
||||
|
||||
@@ -939,7 +939,7 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("Players")
|
||||
usr << dd_list2text(player_list,",")
|
||||
if("Admins")
|
||||
usr << dd_list2text(admin_list,",")
|
||||
usr << dd_list2text(admins,",")
|
||||
if("Mobs")
|
||||
usr << dd_list2text(mob_list,",")
|
||||
if("Living Mobs")
|
||||
@@ -947,4 +947,4 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that
|
||||
if("Dead Mobs")
|
||||
usr << dd_list2text(dead_mob_list,",")
|
||||
if("Clients")
|
||||
usr << dd_list2text(client_list,",")
|
||||
usr << dd_list2text(clients,",")
|
||||
|
||||
@@ -35,10 +35,6 @@
|
||||
src << "<font color='red'>Only Game Masters may use this command.</font>"
|
||||
return
|
||||
|
||||
var/list/clients = list()
|
||||
for(var/client/C)
|
||||
clients += C
|
||||
|
||||
var/client/target = input(src,"Choose somebody to grant access to the server's runtime logs (permissions expire at the end of each round):","Grant Permissions",null) as null|anything in clients
|
||||
if( !target || !istype(target,/client) )
|
||||
src << "<font color='red'>Error: giveruntimelog(): Client not found.</font>"
|
||||
|
||||
@@ -17,8 +17,8 @@
|
||||
|
||||
var/icon/cross = icon('icons/obj/storage.dmi',"bible")
|
||||
|
||||
for (var/client/C in admin_list)
|
||||
if (C.seeprayers)
|
||||
for(var/client/C in admins)
|
||||
if(C.seeprayers)
|
||||
C << "\blue \icon[cross] <b><font color=purple>PRAY: </font>[key_name(src, C)] (<A HREF='?src=\ref[C.holder];adminmoreinfo=\ref[src]'>?</A>) (<A HREF='?src=\ref[C.holder];adminplayeropts=\ref[src]'>PP</A>) (<A HREF='?src=\ref[C.holder];adminplayervars=\ref[src]'>VV</A>) (<A HREF='?src=\ref[C.holder];adminplayersubtlemessage=\ref[src]'>SM</A>) (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[src]'>JMP</A>) (<A HREF='?src=\ref[C.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[C.holder];adminspawncookie=\ref[src]'>SC</a>):</b> [msg]"
|
||||
|
||||
usr << "Your prayers have been received by the gods."
|
||||
@@ -27,20 +27,12 @@
|
||||
|
||||
|
||||
/proc/Centcomm_announce(var/text , var/mob/Sender)
|
||||
|
||||
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
|
||||
|
||||
// log_admin("[key_name(Sender)] sent a message to Centcomm! The message was [msg]") // Handled somewhere else
|
||||
|
||||
for (var/client/C in admin_list)
|
||||
for(var/client/C in admins)
|
||||
C << "\blue <b><font color=orange>CENTCOMM:</font>[key_name(Sender, C)] (<A HREF='?src=\ref[C.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[C.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[C.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[C.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[C.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[C.holder];CentcommReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
//
|
||||
|
||||
/proc/Syndicate_announce(var/text , var/mob/Sender)
|
||||
|
||||
var/msg = copytext(sanitize(text), 1, MAX_MESSAGE_LEN)
|
||||
|
||||
// log_admin("[key_name(Sender)] sent a message to the Syndicate! The message was [msg]") // Handled somewhere else
|
||||
|
||||
for (var/client/C in admin_list)
|
||||
for(var/client/C in admins)
|
||||
C << "\blue <b><font color=crimson>SYNDICATE:</font>[key_name(Sender, C)] (<A HREF='?src=\ref[C.holder];adminplayeropts=\ref[Sender]'>PP</A>) (<A HREF='?src=\ref[C.holder];adminplayervars=\ref[Sender]'>VV</A>) (<A HREF='?src=\ref[C.holder];adminplayersubtlemessage=\ref[Sender]'>SM</A>) (<A HREF='?src=\ref[C.holder];adminplayerobservejump=\ref[Sender]'>JMP</A>) (<A HREF='?src=\ref[C.holder];secretsadmin=check_antagonist'>CA</A>) (<A HREF='?src=\ref[C.holder];BlueSpaceArtillery=\ref[Sender]'>BSA</A>) (<A HREF='?src=\ref[C.holder];SyndicateReply=\ref[Sender]'>RPLY</A>):</b> [msg]"
|
||||
//
|
||||
|
||||
|
||||
@@ -95,21 +95,22 @@
|
||||
if(byond_version < MIN_CLIENT_VERSION) //Out of date client.
|
||||
return null
|
||||
|
||||
client_list += src
|
||||
if ( (world.address == address || !address) && !host )
|
||||
host = key
|
||||
world.update_status()
|
||||
clients += src
|
||||
directory[ckey] = src
|
||||
|
||||
//Admin Authorisation
|
||||
var/datum/admins/Admin_Obj = admins[ckey]
|
||||
if(istype(Admin_Obj))
|
||||
admin_list += src
|
||||
holder = Admin_Obj
|
||||
holder = admin_datums[ckey]
|
||||
if(holder)
|
||||
admins += src
|
||||
holder.owner = src
|
||||
holder.state = null
|
||||
|
||||
. = ..() //calls mob.Login()
|
||||
|
||||
if( (world.address == address || !address) && !host )
|
||||
host = key
|
||||
world.update_status()
|
||||
|
||||
if(holder)
|
||||
admin_memo_show()
|
||||
|
||||
@@ -122,8 +123,10 @@
|
||||
/client/Del()
|
||||
if(holder)
|
||||
holder.state = null
|
||||
admin_list -= src
|
||||
client_list -= src
|
||||
holder.owner = null
|
||||
admins -= src
|
||||
directory -= ckey
|
||||
clients -= src
|
||||
return ..()
|
||||
|
||||
|
||||
|
||||
@@ -24,10 +24,7 @@
|
||||
verbs += /mob/dead/observer/proc/dead_tele
|
||||
stat = DEAD
|
||||
|
||||
dead_mob_list += src
|
||||
add_to_mob_list(src)
|
||||
var/turf/T
|
||||
|
||||
if(ismob(body))
|
||||
T = get_turf(body) //Where is the body located?
|
||||
attack_log = body.attack_log //preserve our attack logs by copying them to our ghost
|
||||
@@ -52,7 +49,7 @@
|
||||
if(!name) //To prevent nameless ghosts
|
||||
name = capitalize(pick(first_names_male)) + " " + capitalize(pick(last_names))
|
||||
real_name = name
|
||||
return
|
||||
..()
|
||||
|
||||
/mob/dead/CanPass(atom/movable/mover, turf/target, height=0, air_group=0)
|
||||
return 1
|
||||
|
||||
@@ -14,8 +14,7 @@
|
||||
src.name = text("alien drone ([rand(1, 1000)])")
|
||||
src.real_name = src.name
|
||||
verbs.Add(/mob/living/carbon/alien/humanoid/proc/resin,/mob/living/carbon/alien/humanoid/proc/corrosive_acid)
|
||||
//verbs -= /mob/living/carbon/alien/humanoid/verb/ActivateHuggers //<-- pointless
|
||||
add_to_mob_list(src)
|
||||
..()
|
||||
//Drones use the same base as generic humanoids.
|
||||
//Drone verbs
|
||||
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
if(name == "alien hunter")
|
||||
name = text("alien hunter ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
add_to_mob_list(src)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/hunter
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
name = text("alien sentinel ([rand(1, 1000)])")
|
||||
real_name = name
|
||||
verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin)
|
||||
add_to_mob_list(src)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/sentinel
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@
|
||||
real_name = src.name
|
||||
verbs.Add(/mob/living/carbon/alien/humanoid/proc/corrosive_acid,/mob/living/carbon/alien/humanoid/proc/neurotoxin,/mob/living/carbon/alien/humanoid/proc/resin)
|
||||
verbs -= /mob/living/carbon/alien/verb/ventcrawl
|
||||
add_to_mob_list(src)
|
||||
..()
|
||||
|
||||
/mob/living/carbon/alien/humanoid/queen
|
||||
|
||||
|
||||
@@ -106,7 +106,7 @@
|
||||
|
||||
job = "AI"
|
||||
|
||||
add_to_mob_list(src)
|
||||
..()
|
||||
return
|
||||
|
||||
|
||||
|
||||
@@ -106,7 +106,6 @@
|
||||
//Improved /N
|
||||
/mob/living/silicon/robot/Del()
|
||||
if(mmi)//Safety for when a cyborg gets dust()ed. Or there is no MMI inside.
|
||||
add_to_mob_list(mmi.brainmob)
|
||||
var/turf/T = get_turf(loc)//To hopefully prevent run time errors.
|
||||
if(T) mmi.loc = T
|
||||
if(mind) mind.transfer_to(mmi.brainmob)
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
/mob/Logout()
|
||||
player_list -= src
|
||||
log_access("Logout: [key_name(src)]")
|
||||
if(admins[src.ckey])
|
||||
if(admin_datums[src.ckey])
|
||||
if (ticker && ticker.current_state == GAME_STATE_PLAYING) //Only report this stuff if we are currently playing.
|
||||
var/admins_number = admin_list.len
|
||||
var/admins_number = admins.len
|
||||
|
||||
message_admins("Admin logout: [key_name(src)]")
|
||||
if(admins_number == 0) //Apparently the admin logging out is no longer an admin at this point, so we have to check this towards 0 and not towards 1. Awell.
|
||||
|
||||
@@ -1,10 +1,16 @@
|
||||
/mob/Del()//This makes sure that mobs with clients/keys are not just deleted from the game.
|
||||
mob_list -= src
|
||||
dead_mob_list -= src
|
||||
living_mob_list -= src
|
||||
ghostize()
|
||||
remove_from_mob_list(src)
|
||||
..()
|
||||
|
||||
/mob/New()
|
||||
add_to_mob_list(src)
|
||||
mob_list += src
|
||||
if(stat == DEAD)
|
||||
dead_mob_list += src
|
||||
else
|
||||
living_mob_list += src
|
||||
..()
|
||||
|
||||
/mob/proc/Cell()
|
||||
|
||||
@@ -15,6 +15,9 @@
|
||||
|
||||
anchored = 1 // don't get pushed around
|
||||
|
||||
New()
|
||||
mob_list += src
|
||||
|
||||
verb/new_player_panel()
|
||||
set src = usr
|
||||
new_player_panel_proc()
|
||||
|
||||
@@ -132,7 +132,7 @@ Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
||||
var/n = 0
|
||||
var/admins = 0
|
||||
|
||||
for(var/client/C in client_list)
|
||||
for(var/client/C in clients)
|
||||
if(C.holder)
|
||||
if(C.holder.fakekey)
|
||||
continue //so stealthmins aren't revealed by the hub
|
||||
@@ -202,7 +202,7 @@ Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
||||
if(pos)
|
||||
var/m_key = copytext(line, 1, pos)
|
||||
var/a_lev = copytext(line, pos + 3, length(line) + 1)
|
||||
admins[m_key] = new /datum/admins(a_lev)
|
||||
admin_datums[m_key] = new /datum/admins(a_lev)
|
||||
diary << ("ADMIN: [m_key] = [a_lev]")
|
||||
else
|
||||
//The current admin system uses SQL
|
||||
@@ -258,9 +258,9 @@ Starting up. [time2text(world.timeofday, "hh:mm.ss")]
|
||||
var/datum/admins/AD = new /datum/admins(adminrank)
|
||||
AD.level = adminlevel //Legacy support for old verbs
|
||||
AD.sql_permissions = permissions_actual
|
||||
admins[adminckey] = AD
|
||||
admin_datums[adminckey] = AD
|
||||
|
||||
if(!admins)
|
||||
if(!admin_datums)
|
||||
diary << "The database query in load_admins() resulted in no admins being added to the list. Reverting to legacy system."
|
||||
config.admin_legacy_system = 1
|
||||
load_admins()
|
||||
|
||||
Reference in New Issue
Block a user