Admin ranks now use bitfields for permissions. Rather than checking the name of the rank, adminverbs will now check holder.rights to see if it has certain bits turned on.

SERVER HOSTS:
This commit replaces the existing admin-rank system. It is now more customizable.
Admin.txt essentially works the same as it always has. Each line should look like:
ckey - admin rank

There is now however, an admin_ranks.txt. This textfile allows you to define ranks like so:
admin rank +ADMIN +FUN +BUILD
the +KEYWORD are flags adding permissions to that rank. There are brief descriptions in the text-file explaining what they do.

You can now name the ranks anything you like, and give them the permissions you want them to have. This allows, for instance, ranks like:
Game Admin on disciplinary +ADMIN +BAN
This would give that game admin only the tools they need to admin. They would not have access to 'fun' verbs which control events and antags.
There's lots of things you can do. For instance, a coder rank whom can debug stuff but cannot do admin tasks:
Codermin +DEBUG +VAREDIT +SERVER

There's lots you can do. As it evolves it will hopefully become more flexible.

admin_ranks.txt defaults to use the old admin rank names.

Apologies in advance as there will be a lot of anomalies, such as ranks losing verbs they once had. Please let me know about any problems. I can fix them quite easily simply by moving verbs between the lists or splitting the lists up into new flags.

CODERS:
There is now a check_rights(flags) proc. 
It check is usr is and admin and has -at least one of- the rights specified.
It checks > usr < not src, so keep that in mind!
If you need to check if something other than usr has specific tights, you can do if(holder.rights & R_ADMIN) etc.

KNOWN ISSUES:
+FUN probably needs to be split up into +MOBS and +EVENTS
In-game promotion/demotion is currently disabled. It will be readded after everything else works ok.
Erro's sql rights changes stuff is currently commented out. It will be re-added.
There are still many many verbs which need updating.

Apologies in advance for any inconvenience.

git-svn-id: http://tgstation13.googlecode.com/svn/trunk@4991 316c924e-a436-60f5-8080-3fe189b3f50e
This commit is contained in:
elly1989@rocketmail.com
2012-11-02 10:23:04 +00:00
parent d46775ec87
commit 50fe648a91
33 changed files with 3495 additions and 4243 deletions

View File

@@ -149,13 +149,13 @@
if(objholder in removed_paths) if(objholder in removed_paths)
alert("That path is not allowed.") alert("That path is not allowed.")
objholder = "/obj/structure/closet" objholder = "/obj/structure/closet"
else if (dd_hasprefix(objholder, "/mob") && !(usr.client.holder.rank in list("Game Master", "Game Admin", "Badmin"))) else if (dd_hasprefix(objholder, "/mob") && !check_rights(R_DEBUG,0))
objholder = "/obj/structure/closet" objholder = "/obj/structure/closet"
if(3) if(3)
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine") var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine")
master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name") master.buildmode.varholder = input(usr,"Enter variable name:" ,"Name", "name")
if(master.buildmode.varholder in locked && !(usr.client.holder.rank in list("Game Master", "Game Admin"))) if(master.buildmode.varholder in locked && !check_rights(R_DEBUG,0))
return return
var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference") var/thetype = input(usr,"Select variable type:" ,"Type") in list("text","number","mob-reference","obj-reference","turf-reference")
if(!thetype) return if(!thetype) return

View File

@@ -247,3 +247,19 @@ proc/tg_list2text(list/list, glue=",")
/proc/angle2text(var/degree) /proc/angle2text(var/degree)
return dir2text(angle2dir(degree)) return dir2text(angle2dir(degree))
//Converts a rights bitfield into a string
/proc/rights2text(rights)
if(rights & R_BUILDMODE) . += "+BUILDMODE"
if(rights & R_ADMIN) . += "+ADMIN"
if(rights & R_BAN) . += "+BAN"
if(rights & R_FUN) . += "+FUN"
if(rights & R_SERVER) . += "+SERVER"
if(rights & R_DEBUG) . += "+DEBUG"
if(rights & R_POSSESS) . += "+POSSESS"
if(rights & R_PERMISSIONS) . += "+PERMISSIONS"
if(rights & R_STEALTH) . += "+STEALTH"
if(rights & R_REJUVINATE) . += "+REJUVINATE"
if(rights & R_VAREDIT) . += "+VAREDIT"
if(rights & R_SOUNDS) . += "+SOUND"
return .

View File

@@ -170,7 +170,7 @@ datum/controller/vote
var/trialmin = 0 var/trialmin = 0
if(C.holder) if(C.holder)
admin = 1 admin = 1
if (C.holder.level >= 3) if (C.holder.rights & R_ADMIN)
trialmin = 1 trialmin = 1
voting |= C voting |= C

View File

@@ -402,14 +402,18 @@ client
//This should all be moved over to datum/admins/Topic() or something ~Carn //This should all be moved over to datum/admins/Topic() or something ~Carn
if( (usr.client == src) && src.holder ) if( (usr.client == src) && src.holder )
. = 1 //default return . = 1 //default return
if (href_list["Vars"]) if(href_list["Vars"])
debug_variables(locate(href_list["Vars"])) debug_variables(locate(href_list["Vars"]))
//~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records). //~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records).
else if (href_list["rename"]) else if(href_list["rename"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["rename"]) var/mob/M = locate(href_list["rename"])
if(!istype(M)) return if(!istype(M))
if(!admin_rank_check(src.holder.level, 3)) return usr << "This can only be used on instances of type /mob"
return
var/new_name = copytext(sanitize(input(usr,"What would you like to name this mob?","Input a name",M.real_name) as text|null),1,MAX_NAME_LEN) var/new_name = copytext(sanitize(input(usr,"What would you like to name this mob?","Input a name",M.real_name) as text|null),1,MAX_NAME_LEN)
if( !new_name || !M ) return if( !new_name || !M ) return
@@ -417,431 +421,370 @@ client
M.fully_replace_character_name(M.real_name,new_name) M.fully_replace_character_name(M.real_name,new_name)
href_list["datumrefresh"] = href_list["rename"] href_list["datumrefresh"] = href_list["rename"]
else if (href_list["varnameedit"]) else if(href_list["varnameedit"] && href_list["datumedit"])
if(!href_list["datumedit"] || !href_list["varnameedit"]) if(!check_rights(0)) return
usr << "Varedit error: Not all information has been sent. Contact a coder."
return
var/DAT = locate(href_list["datumedit"])
if(!DAT)
usr << "Item not found"
return
if(!istype(DAT,/datum) && !istype(DAT,/client))
usr << "Can't edit an item of this type. Type must be /datum or /client, so anything except simple variables."
return
modify_variables(DAT, href_list["varnameedit"], 1)
else if (href_list["varnamechange"])
if(!href_list["datumchange"] || !href_list["varnamechange"])
usr << "Varedit error: Not all information has been sent. Contact a coder."
return
var/DAT = locate(href_list["datumchange"])
if(!DAT)
usr << "Item not found"
return
if(!istype(DAT,/datum) && !istype(DAT,/client))
usr << "Can't edit an item of this type. Type must be /datum or /client, so anything except simple variables."
return
modify_variables(DAT, href_list["varnamechange"], 0)
else if (href_list["varnamemass"])
if(!href_list["datummass"] || !href_list["varnamemass"])
usr << "Varedit error: Not all information has been sent. Contact a coder."
return
var/atom/A = locate(href_list["datummass"])
if(!A)
usr << "Item not found"
return
if(!istype(A,/atom))
usr << "Can't mass edit an item of this type. Type must be /atom, so an object, turf, mob or area. You cannot mass edit clients!"
return
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
else if (href_list["mob_player_panel"])
if(!href_list["mob_player_panel"])
return
var/mob/MOB = locate(href_list["mob_player_panel"])
if(!MOB)
return
if(!ismob(MOB))
return
if(!src.holder)
return
src.holder.show_player_panel(MOB)
href_list["datumrefresh"] = href_list["mob_player_panel"]
else if (href_list["give_spell"])
if(!href_list["give_spell"])
return
var/mob/MOB = locate(href_list["give_spell"])
if(!MOB)
return
if(!ismob(MOB))
return
if(!src.holder)
return
if(!admin_rank_check(src.holder.level, 3)) return
src.give_spell(MOB)
href_list["datumrefresh"] = href_list["give_spell"]
else if (href_list["give_disease"])
if(!href_list["give_disease"])
return
var/mob/MOB = locate(href_list["give_disease"])
if(!MOB)
return
if(!ismob(MOB))
return
if(!src.holder)
return
if(!admin_rank_check(src.holder.level, 3)) return
src.give_disease(MOB)
href_list["datumrefresh"] = href_list["give_spell"]
else if (href_list["ninja"])
if(!href_list["ninja"])
return
var/mob/MOB = locate(href_list["ninja"])
if(!MOB)
return
if(!ismob(MOB))
return
if(!src.holder)
return
if(!admin_rank_check(src.holder.level, 3)) return
src.cmd_admin_ninjafy(MOB)
href_list["datumrefresh"] = href_list["ninja"]
else if (href_list["godmode"])
if(!href_list["godmode"])
return
var/mob/MOB = locate(href_list["godmode"])
if(!MOB)
return
if(!ismob(MOB))
return
if(!src.holder)
return
if(!admin_rank_check(src.holder.level, 3)) return
src.cmd_admin_godmode(MOB)
href_list["datumrefresh"] = href_list["godmode"]
else if (href_list["gib"])
if(!href_list["gib"])
return
var/mob/MOB = locate(href_list["gib"])
if(!MOB)
return
if(!ismob(MOB))
return
if(!src.holder)
return
if(!admin_rank_check(src.holder.level, 3)) return
src.cmd_admin_gib(MOB)
else if (href_list["build_mode"]) var/D = locate(href_list["datumedit"])
if(!href_list["build_mode"]) if(!istype(D,/datum) && !istype(D,/client))
usr << "This can only be used on instances of types /client or /datum"
return return
var/mob/MOB = locate(href_list["build_mode"])
if(!MOB) modify_variables(D, href_list["varnameedit"], 1)
else if(href_list["varnamechange"] && href_list["datumchange"])
if(!check_rights(0)) return
var/D = locate(href_list["datumchange"])
if(!istype(D,/datum) && !istype(D,/client))
usr << "This can only be used on instances of types /client or /datum"
return return
if(!ismob(MOB))
modify_variables(D, href_list["varnamechange"], 0)
else if(href_list["varnamemass"] && href_list["datummass"])
if(!check_rights(0)) return
var/atom/A = locate(href_list["datummass"])
if(!istype(A))
usr << "This can only be used on instances of type /atom"
return return
if(!src.holder)
cmd_mass_modify_object_variables(A, href_list["varnamemass"])
else if(href_list["mob_player_panel"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["mob_player_panel"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return return
if(!admin_rank_check(src.holder.level, 3)) return
togglebuildmode(MOB) src.holder.show_player_panel(M)
href_list["datumrefresh"] = href_list["mob_player_panel"]
else if(href_list["give_spell"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["give_spell"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return
src.give_spell(M)
href_list["datumrefresh"] = href_list["give_spell"]
else if(href_list["give_disease"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["give_disease"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return
src.give_disease(M)
href_list["datumrefresh"] = href_list["give_spell"]
else if(href_list["ninja"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["ninja"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return
src.cmd_admin_ninjafy(M)
href_list["datumrefresh"] = href_list["ninja"]
else if(href_list["godmode"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["godmode"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return
src.cmd_admin_godmode(M)
href_list["datumrefresh"] = href_list["godmode"]
else if(href_list["gib"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["gib"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return
src.cmd_admin_gib(M)
else if(href_list["build_mode"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["build_mode"])
if(!istype(M))
usr << "This can only be used on instances of type /mob"
return
togglebuildmode(M)
href_list["datumrefresh"] = href_list["build_mode"] href_list["datumrefresh"] = href_list["build_mode"]
else if (href_list["drop_everything"]) else if(href_list["drop_everything"])
if(!href_list["drop_everything"]) if(!check_rights(0)) return
return
var/mob/MOB = locate(href_list["drop_everything"]) var/mob/M = locate(href_list["drop_everything"])
if(!MOB) if(!istype(M))
return usr << "This can only be used on instances of type /mob"
if(!ismob(MOB))
return
if(!src.holder)
return return
if(usr.client) if(usr.client)
if(!admin_rank_check(src.holder.level, 3)) return usr.client.cmd_admin_drop_everything(M)
usr.client.cmd_admin_drop_everything(MOB)
else if (href_list["direct_control"]) else if(href_list["direct_control"])
if(!href_list["direct_control"]) if(!check_rights(0)) return
return
var/mob/MOB = locate(href_list["direct_control"]) var/mob/M = locate(href_list["direct_control"])
if(!MOB) if(!istype(M))
return usr << "This can only be used on instances of type /mob"
if(!ismob(MOB))
return
if(!src.holder)
return return
if(usr.client) if(usr.client)
if(!admin_rank_check(src.holder.level, 3)) return usr.client.cmd_assume_direct_control(M)
usr.client.cmd_assume_direct_control(MOB)
else if (href_list["make_skeleton"]) else if(href_list["make_skeleton"])
if(!href_list["make_skeleton"]) if(!check_rights(0)) return
return
var/mob/MOB = locate(href_list["make_skeleton"]) var/mob/living/carbon/human/H = locate(href_list["make_skeleton"])
if(!MOB) if(!istype(H))
return usr << "This can only be used on instances of type /mob/living/carbon/human"
if(!ismob(MOB))
return
if(!src.holder)
return return
if(ishuman(MOB)) H.makeSkeleton()
if(!admin_rank_check(src.holder.level, 3)) return href_list["datumrefresh"] = href_list["make_skeleton"]
var/mob/living/carbon/human/HUMANMOB = MOB
HUMANMOB.makeSkeleton()
else if (href_list["delall"]) else if(href_list["delall"])
if(!href_list["delall"]) if(!check_rights(0)) return
var/obj/O = locate(href_list["delall"])
if(!isobj(O))
usr << "This can only be used on instances of type /obj"
return return
var/atom/A = locate(href_list["delall"])
if(!admin_rank_check(src.holder.level, 3)) return var/action_type = alert("Strict type ([O.type]) or type and all subtypes?",,"Strict type","Type and subtypes","Cancel")
if(!A) if(action_type == "Cancel" || !action_type)
return return
if(!isobj(A))
usr << "This can only be used on objects (of type /obj)" if(alert("Are you really sure you want to delete all objects of type [O.type]?",,"Yes","No") != "Yes")
return
if(!A.type)
return
var/action_type = alert("Strict type ([A.type]) or type and all subtypes?",,"Strict type","Type and subtypes","Cancel")
if(!action_type || action_type == "Cancel")
return
if(alert("Are you really sure you want to delete all objects of type [A.type]?",,"Yes","No") != "Yes")
return return
if(alert("Second confirmation required. Delete?",,"Yes","No") != "Yes") if(alert("Second confirmation required. Delete?",,"Yes","No") != "Yes")
return return
var/a_type = A.type
if(action_type == "Strict type")
var/i = 0
for(var/obj/O in world)
if(O.type == a_type)
i++
del(O)
if(!i)
usr << "No objects of this type exist"
return
log_admin("[key_name(usr)] deleted all objects of scrict type [a_type] ([i] objects deleted) ")
message_admins("\blue [key_name(usr)] deleted all objects of scrict type [a_type] ([i] objects deleted) ", 1)
else if(action_type == "Type and subtypes")
var/i = 0
for(var/obj/O in world)
if(istype(O,a_type))
i++
del(O)
if(!i)
usr << "No objects of this type exist"
return
log_admin("[key_name(usr)] deleted all objects of scrict type with subtypes [a_type] ([i] objects deleted) ")
message_admins("\blue [key_name(usr)] deleted all objects of type with subtypes [a_type] ([i] objects deleted) ", 1)
else if (href_list["explode"]) var/O_type = O.type
if(!href_list["explode"]) switch(action_type)
return if("Strict type")
var/i = 0
for(var/obj/Obj in world)
if(Obj.type == O_type)
i++
del(Obj)
if(!i)
usr << "No objects of this type exist"
return
log_admin("[key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ")
message_admins("\blue [key_name(usr)] deleted all objects of type [O_type] ([i] objects deleted) ", 1)
if("Type and subtypes")
var/i = 0
for(var/obj/Obj in world)
if(istype(Obj,O_type))
i++
del(Obj)
if(!i)
usr << "No objects of this type exist"
return
log_admin("[key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ")
message_admins("\blue [key_name(usr)] deleted all objects of type or subtype of [O_type] ([i] objects deleted) ", 1)
else if(href_list["explode"])
if(!check_rights(0)) return
var/atom/A = locate(href_list["explode"]) var/atom/A = locate(href_list["explode"])
if(!A)
return
if(!isobj(A) && !ismob(A) && !isturf(A)) if(!isobj(A) && !ismob(A) && !isturf(A))
usr << "This can only be done to instances of type /obj, /mob and /turf"
return return
if(!admin_rank_check(src.holder.level, 3)) return
src.cmd_admin_explosion(A) src.cmd_admin_explosion(A)
href_list["datumrefresh"] = href_list["explode"] href_list["datumrefresh"] = href_list["explode"]
else if (href_list["emp"])
if(!href_list["emp"]) else if(href_list["emp"])
return if(!check_rights(0)) return
var/atom/A = locate(href_list["emp"]) var/atom/A = locate(href_list["emp"])
if(!A)
return
if(!isobj(A) && !ismob(A) && !isturf(A)) if(!isobj(A) && !ismob(A) && !isturf(A))
usr << "This can only be done to instances of type /obj, /mob and /turf"
return return
if(!admin_rank_check(src.holder.level, 3)) return
src.cmd_admin_emp(A) src.cmd_admin_emp(A)
href_list["datumrefresh"] = href_list["emp"] href_list["datumrefresh"] = href_list["emp"]
else if (href_list["mark_object"])
if(!href_list["mark_object"]) else if(href_list["mark_object"])
return if(!check_rights(0)) return
var/datum/D = locate(href_list["mark_object"]) var/datum/D = locate(href_list["mark_object"])
if(!D) if(!istype(D))
usr << "This can only be done to instances of type /datum"
return return
if(!src.holder)
return
if(!admin_rank_check(src.holder.level, 3)) return
src.holder.marked_datum = D src.holder.marked_datum = D
href_list["datumrefresh"] = href_list["mark_object"] href_list["datumrefresh"] = href_list["mark_object"]
else if (href_list["rotatedatum"])
if(!admin_rank_check(src.holder.level, 3)) return else if(href_list["rotatedatum"])
if(!href_list["rotatedir"]) if(!check_rights(0)) return
return
var/atom/A = locate(href_list["rotatedatum"]) var/atom/A = locate(href_list["rotatedatum"])
if(!A) if(!istype(A))
return usr << "This can only be done to instances of type /atom"
if(!istype(A,/atom))
usr << "This can only be done to objects of type /atom"
return
if(!src.holder)
return return
switch(href_list["rotatedir"]) switch(href_list["rotatedir"])
if("right") if("right") A.dir = turn(A.dir, -45)
A.dir = turn(A.dir, -45) if("left") A.dir = turn(A.dir, 45)
if("left")
A.dir = turn(A.dir, 45)
href_list["datumrefresh"] = href_list["rotatedatum"] href_list["datumrefresh"] = href_list["rotatedatum"]
else if (href_list["makemonkey"])
var/mob/M = locate(href_list["makemonkey"]) else if(href_list["makemonkey"])
if(!M) if(!check_rights(0)) return
var/mob/living/carbon/human/H = locate(href_list["makemonkey"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
return return
if(!admin_rank_check(src.holder.level, 3)) return
if(!ishuman(M)) if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
usr << "This can only be done to objects of type /mob/living/carbon/human" if(!H)
return
if(!src.holder)
usr << "You are not an administrator."
return
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
if(!action_type || action_type == "Cancel")
return
if(!M)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return
holder.Topic(href, list("monkeyone"=href_list["makemonkey"])) holder.Topic(href, list("monkeyone"=href_list["makemonkey"]))
else if (href_list["makerobot"])
var/mob/M = locate(href_list["makerobot"]) else if(href_list["makerobot"])
if(!M) if(!check_rights(0)) return
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
return return
if(!admin_rank_check(src.holder.level, 3)) return
if(!ishuman(M)) if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
usr << "This can only be done to objects of type /mob/living/carbon/human" if(!H)
return
if(!src.holder)
usr << "You are not an administrator."
return
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
if(!action_type || action_type == "Cancel")
return
if(!M)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return
holder.Topic(href, list("makerobot"=href_list["makerobot"])) holder.Topic(href, list("makerobot"=href_list["makerobot"]))
else if (href_list["makealien"])
var/mob/M = locate(href_list["makealien"]) else if(href_list["makealien"])
if(!M) if(!check_rights(0)) return
var/mob/living/carbon/human/H = locate(href_list["makealien"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
return return
if(!admin_rank_check(src.holder.level, 3)) return
if(!ishuman(M)) if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
usr << "This can only be done to objects of type /mob/living/carbon/human" if(!H)
return
if(!src.holder)
usr << "You are not an administrator."
return
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
if(!action_type || action_type == "Cancel")
return
if(!M)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return
holder.Topic(href, list("makealien"=href_list["makealien"])) holder.Topic(href, list("makealien"=href_list["makealien"]))
else if (href_list["makemetroid"])
var/mob/M = locate(href_list["makemetroid"]) else if(href_list["makemetroid"])
if(!M) if(!check_rights(0)) return
var/mob/living/carbon/human/H = locate(href_list["makemetroid"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
return return
if(!admin_rank_check(src.holder.level, 3)) return
if(!ishuman(M)) if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
usr << "This can only be done to objects of type /mob/living/carbon/human" if(!H)
return
if(!src.holder)
usr << "You are not an administrator."
return
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
if(!action_type || action_type == "Cancel")
return
if(!M)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return
holder.Topic(href, list("makemetroid"=href_list["makemetroid"])) holder.Topic(href, list("makemetroid"=href_list["makemetroid"]))
else if (href_list["makeai"])
var/mob/M = locate(href_list["makeai"]) else if(href_list["makeai"])
if(!M) if(!check_rights(0)) return
var/mob/living/carbon/human/H = locate(href_list["makeai"])
if(!istype(H))
usr << "This can only be done to instances of type /mob/living/carbon/human"
return return
if(!admin_rank_check(src.holder.level, 3)) return
if(!ishuman(M)) if(alert("Confirm mob type change?",,"Transform","Cancel") != "Transform") return
usr << "This can only be done to objects of type /mob/living/carbon/human" if(!H)
return
if(!src.holder)
usr << "You are not an administrator."
return
var/action_type = alert("Confirm mob type change?",,"Transform","Cancel")
if(!action_type || action_type == "Cancel")
return
if(!M)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return
holder.Topic(href, list("makeai"=href_list["makeai"])) holder.Topic(href, list("makeai"=href_list["makeai"]))
else if (href_list["setmutantrace"])
else if(href_list["setmutantrace"])
if(!check_rights(0)) return
var/mob/living/carbon/human/H = locate(href_list["setmutantrace"]) var/mob/living/carbon/human/H = locate(href_list["setmutantrace"])
if(!admin_rank_check(src.holder.level, 3)) return
if(!istype(H)) if(!istype(H))
usr << "This can only be done to objects of type /mob/living/carbon/human" usr << "This can only be done to instances of type /mob/living/carbon/human"
return
if(!src.holder)
usr << "You are not an administrator."
return return
var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","metroid","plant") var/new_mutantrace = input("Please choose a new mutantrace","Mutantrace",null) as null|anything in list("NONE","golem","lizard","metroid","plant")
switch(new_mutantrace) switch(new_mutantrace)
if(null) return if(null) return
if("NONE") new_mutantrace = "" if("NONE") new_mutantrace = ""
if(!H || !istype(H)) if(!H)
usr << "Mob doesn't exist anymore" usr << "Mob doesn't exist anymore"
return return
if(H.dna) if(H.dna)
H.dna.mutantrace = new_mutantrace H.dna.mutantrace = new_mutantrace
H.update_mutantrace() H.update_mutantrace()
else if (href_list["regenerateicons"])
else if(href_list["regenerateicons"])
if(!check_rights(0)) return
var/mob/M = locate(href_list["regenerateicons"]) var/mob/M = locate(href_list["regenerateicons"])
if(!admin_rank_check(src.holder.level, 3)) return if(!ismob(M))
if(!istype(M)) usr << "This can only be done to instances of type /mob"
usr << "This can only be done to objects of type /mob"
return
if(!src.holder)
usr << "You are not an administrator."
return return
M.regenerate_icons() M.regenerate_icons()
else if (href_list["adjustDamage"] && href_list["mobToDamage"])
var/mob/M = locate(href_list["mobToDamage"])
var/Text = locate(href_list["adjustDamage"])
if(!isliving(M)) return else if(href_list["adjustDamage"] && href_list["mobToDamage"])
var/mob/living/L = M if(!check_rights(0)) return
if(!admin_rank_check(src.holder.level, 3)) return var/mob/living/L = locate(href_list["mobToDamage"])
if(!istype(L)) return
var/Text = href_list["adjustDamage"]
var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num
if(Text == "brute")
L.adjustBruteLoss(amount) if(!L)
else if(Text == "fire") usr << "Mob doesn't exist anymore"
L.adjustFireLoss(amount)
else if(Text == "toxin")
L.adjustToxLoss(amount)
else if(Text == "oxygen")
L.adjustOxyLoss(amount)
else if(Text == "brain")
L.adjustBrainLoss(amount)
else if(Text == "clone")
L.adjustCloneLoss(amount)
else
usr << "You caused an error. DEBUG: Text:[Text] Mob:[M]"
return return
switch(Text)
if("brute") L.adjustBruteLoss(amount)
if("fire") L.adjustFireLoss(amount)
if("toxin") L.adjustToxLoss(amount)
if("oxygen")L.adjustOxyLoss(amount)
if("brain") L.adjustBrainLoss(amount)
if("clone") L.adjustCloneLoss(amount)
else
usr << "You caused an error. DEBUG: Text:[Text] Mob:[L]"
return
if(amount != 0) if(amount != 0)
log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [M] ") log_admin("[key_name(usr)] dealt [amount] amount of [Text] damage to [L] ")
message_admins("\blue [key_name(usr)] dealt [amount] amount of [Text] damage to [M] ", 1) message_admins("\blue [key_name(usr)] dealt [amount] amount of [Text] damage to [L] ", 1)
href_list["datumrefresh"] = href_list["mobToDamage"] href_list["datumrefresh"] = href_list["mobToDamage"]
else else
. = 0 . = 0
if (href_list["datumrefresh"])
if(href_list["datumrefresh"])
var/datum/DAT = locate(href_list["datumrefresh"]) var/datum/DAT = locate(href_list["datumrefresh"])
if(!DAT) if(!istype(DAT, /datum))
return
if(!istype(DAT,/datum))
return return
src.debug_variables(DAT) src.debug_variables(DAT)
. = 1 . = 1
return return

View File

@@ -305,7 +305,7 @@ datum/mind
crystals = suplink.uses crystals = suplink.uses
if (suplink) if (suplink)
text += "|<a href='?src=\ref[src];common=takeuplink'>take</a>" text += "|<a href='?src=\ref[src];common=takeuplink'>take</a>"
if (usr.client.holder.level >= 3) if (usr.client.holder.rights & R_FUN)
text += ", <a href='?src=\ref[src];common=crystals'>[crystals]</a> crystals" text += ", <a href='?src=\ref[src];common=crystals'>[crystals]</a> crystals"
else else
text += ", [crystals] crystals" text += ", [crystals] crystals"
@@ -332,17 +332,7 @@ datum/mind
usr << browse(out, "window=edit_memory[src]") usr << browse(out, "window=edit_memory[src]")
Topic(href, href_list) Topic(href, href_list)
if(!usr || !usr.client) if(!check_rights(R_ADMIN)) return
return
if(!usr.client.holder)
message_admins("\red [key_name(usr)] tried to access [current]'s mind without authorization.")
log_admin("[key_name(usr)] tried to access [current]'s mind without authorization.")
return
if (!(usr.client.holder.rank in list("Trial Admin", "Badmin", "Game Admin", "Game Master")))
alert("You cannot perform this action. You must be of a higher administrative rank!")
return
if (href_list["role_edit"]) if (href_list["role_edit"])
var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs() var/new_role = input("Select new role", "Assigned role", assigned_role) as null|anything in get_all_jobs()
@@ -754,7 +744,7 @@ datum/mind
return return
switch(href_list["monkey"]) switch(href_list["monkey"])
if("healthy") if("healthy")
if (usr.client.holder.level >= 3) if (usr.client.holder.rights & R_ADMIN)
var/mob/living/carbon/human/H = current var/mob/living/carbon/human/H = current
var/mob/living/carbon/monkey/M = current var/mob/living/carbon/monkey/M = current
if (istype(H)) if (istype(H))
@@ -769,7 +759,7 @@ datum/mind
D.cure(0) D.cure(0)
sleep(0) //because deleting of virus is done through spawn(0) sleep(0) //because deleting of virus is done through spawn(0)
if("infected") if("infected")
if (usr.client.holder.level >= 3) if (usr.client.holder.rights & R_ADMIN)
var/mob/living/carbon/human/H = current var/mob/living/carbon/human/H = current
var/mob/living/carbon/monkey/M = current var/mob/living/carbon/monkey/M = current
if (istype(H)) if (istype(H))
@@ -873,7 +863,7 @@ datum/mind
take_uplink() take_uplink()
memory = null//Remove any memory they may have had. memory = null//Remove any memory they may have had.
if("crystals") if("crystals")
if (usr.client.holder.level >= 3) if (usr.client.holder.rights & R_FUN)
var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink() var/obj/item/device/uplink/hidden/suplink = find_syndicate_uplink()
var/crystals var/crystals
if (suplink) if (suplink)

View File

@@ -118,13 +118,9 @@ var/global/Holiday = null
set name = ".Set Holiday" set name = ".Set Holiday"
set category = "Fun" set category = "Fun"
set desc = "Force-set the Holiday variable to make the game think it's a certain day." set desc = "Force-set the Holiday variable to make the game think it's a certain day."
if(!check_rights(R_SERVER)) return
if( !holder || !(holder.rank in list("Game Master","Game Admin")) )
src << "<font color='red'>Error: Set_Holiday: You hold insufficient rank to perform this action.</font>"
return
if(!T) return if(!T) return
Holiday = T Holiday = T
//get a new station name //get a new station name
station_name = null station_name = null

View File

@@ -9,53 +9,55 @@
else else
src << "\blue You are no longer listening to messages on the OOC channel." src << "\blue You are no longer listening to messages on the OOC channel."
/mob/verb/ooc(msg as text) /client/verb/ooc(msg as text)
set name = "OOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite set name = "OOC" //Gave this shit a shorter name so you only have to time out "ooc" rather than "ooc message" to use it --NeoFite
set category = "OOC" set category = "OOC"
if (IsGuestKey(src.key))
if(!mob) return
if(IsGuestKey(key))
src << "Guests may not use OOC." src << "Guests may not use OOC."
return return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
if(!msg) if(!msg) return
return
else if (!src.client.listen_ooc) if(!listen_ooc)
src << "\red You have OOC muted." src << "\red You have OOC muted."
return return
else if (!ooc_allowed && !src.client.holder)
src << "\red OOC is globally muted" if(!holder)
return if(!ooc_allowed)
else if (!dooc_allowed && !src.client.holder && (src.client.deadchat != 0)) src << "\red OOC is globally muted"
usr << "\red OOC for dead mobs has been turned off." return
return if(!dooc_allowed && deadchat != 0)
else if (src.client) usr << "\red OOC for dead mobs has been turned off."
if(src.client.muted & MUTE_OOC) return
if(muted & MUTE_OOC)
src << "\red You cannot use OOC (muted)." src << "\red You cannot use OOC (muted)."
return return
if(handle_spam_prevention(msg,MUTE_OOC))
if (src.client.handle_spam_prevention(msg,MUTE_OOC)) return
if(findtext(msg, "byond://"))
src << "<B>Advertising other servers is not allowed.</B>"
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]")
return return
else if (findtext(msg, "byond://") && !src.client.holder)
src << "<B>Advertising other servers is not allowed.</B>"
log_admin("[key_name(src)] has attempted to advertise in OOC: [msg]")
message_admins("[key_name_admin(src)] has attempted to advertise in OOC: [msg]")
return
log_ooc("[src.name]/[src.key] : [msg]") log_ooc("[mob.name]/[key] : [msg]")
for (var/client/C) for(var/client/C in clients)
if(C.listen_ooc) if(C.listen_ooc)
if (src.client.holder) if(holder)
if(!src.client.holder.fakekey || C.holder) if(!holder.fakekey || C.holder)
if (src.client.holder.rank == "Admin Observer") if(holder.rights & R_ADMIN)
C << "<span class='adminobserverooc'><span class='prefix'>OOC:</span> <EM>[src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>" C << "<font color=[holder.ooccolor]><b><span class='prefix'>OOC:</span> <EM>[key][holder.fakekey ? "/([holder.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></b></font>"
else if (src.client.holder.level >= 5)
C << "<font color=[src.client.holder.ooccolor]><b><span class='prefix'>OOC:</span> <EM>[src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></b></font>"
else else
C << "<span class='adminooc'><span class='prefix'>OOC:</span> <EM>[src.key][src.client.holder.fakekey ? "/([src.client.holder.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>" C << "<span class='adminobserverooc'><span class='prefix'>OOC:</span> <EM>[key][holder.fakekey ? "/([holder.fakekey])" : ""]:</EM> <span class='message'>[msg]</span></span>"
else else
C << "<font color='[normal_ooc_colour]'><span class='ooc'><span class='prefix'>OOC:</span> <EM>[src.client.holder.fakekey ? src.client.holder.fakekey : src.key]:</EM> <span class='message'>[msg]</span></span></font>" C << "<font color='[normal_ooc_colour]'><span class='ooc'><span class='prefix'>OOC:</span> <EM>[holder.fakekey ? holder.fakekey : key]:</EM> <span class='message'>[msg]</span></span></font>"
else else
C << "<font color='[normal_ooc_colour]'><span class='ooc'><span class='prefix'>OOC:</span> <EM>[src.key]:</EM> <span class='message'>[msg]</span></span></font>" C << "<font color='[normal_ooc_colour]'><span class='ooc'><span class='prefix'>OOC:</span> <EM>[key]:</EM> <span class='message'>[msg]</span></span></font>"
var/global/normal_ooc_colour = "#002eb8" var/global/normal_ooc_colour = "#002eb8"

View File

@@ -7,7 +7,7 @@
var/list/Lines = list() var/list/Lines = list()
if(holder && holder.level >= 0) //Everything above admin-observers get this. if(holder)
for(var/client/C in clients) for(var/client/C in clients)
var/entry = "\t[C.key]" var/entry = "\t[C.key]"
if(C.holder && C.holder.fakekey) if(C.holder && C.holder.fakekey)

View File

@@ -1,3 +1,4 @@
//#define TESTING
//This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31 //This file was auto-corrected by findeclaration.exe on 25.5.2012 20:42:31
var/global/obj/effect/datacore/data_core = null var/global/obj/effect/datacore/data_core = null
@@ -206,29 +207,19 @@ var/forum_authenticated_group = "10"
var/fileaccess_timer = 1800 //Cannot access files by ftp until the game is finished setting up and stuff. var/fileaccess_timer = 1800 //Cannot access files by ftp until the game is finished setting up and stuff.
#define BUILDMODE 1 //Please don't edit these values without speaking to Errorage first ~Carn
#define ADMIN 2 //Admin Permissions
#define BAN 4 #define R_BUILDMODE 1
#define FUN 8 #define R_ADMIN 2
#define SERVER 16 #define R_BAN 4
#define ADMDEBUG 32 #define R_FUN 8
#define POSSESS 64 #define R_SERVER 16
#define PERMISSIONS 128 #define R_DEBUG 32
//Keep this list synced with the #defines above #define R_POSSESS 64
var/global/list/permissionwords = list("BUILDMODE", "ADMIN", "BAN", "FUN", "SERVER", "DEBUG", "POSSESS", "EDITPERMISSIONS") #define R_PERMISSIONS 128
#define R_STEALTH 256
#define R_REJUVINATE 512
#define R_VAREDIT 1024
#define R_SOUNDS 2048
#define R_HOST 65535
//Please do not edit these values. The database assigning proper rights relies on this. You can add new values, just don't change existing ones.
//This list is separate from the list used ingame, so that one can be edited with little consequence. This one is tied to the database
//The database admins should be consulted before any edits to this list.
#define SQL_BUILDMODE 1
#define SQL_ADMIN 2
#define SQL_BAN 4
#define SQL_FUN 8
#define SQL_SERVER 16
#define SQL_DEBUG 32
#define SQL_POSSESS 64
#define SQL_PERMISSIONS 128
//Same rules apply to this list as to the values above. You can only add stuff to it.
var/global/list/permissionwords_sql = list("BUILDMODE", "ADMIN", "BAN", "FUN", "SERVER", "DEBUG", "POSSESS", "EDITPERMISSIONS")

View File

@@ -350,179 +350,128 @@ var/global/floorIsLava = 0
/datum/admins/proc/Jobbans() /datum/admins/proc/Jobbans()
if(!check_rights(R_BAN)) return
if ((src.rank in list( "Game Admin", "Game Master" ))) var/dat = "<B>Job Bans!</B><HR><table>"
var/dat = "<B>Job Bans!</B><HR><table>" for(var/t in jobban_keylist)
for(var/t in jobban_keylist) var/r = t
var/r = t if( findtext(r,"##") )
if( findtext(r,"##") ) r = copytext( r, 1, findtext(r,"##") )//removes the description
r = copytext( r, 1, findtext(r,"##") )//removes the description dat += text("<tr><td>[t] (<A href='?src=\ref[src];removejobban=[r]'>unban</A>)</td></tr>")
dat += text("<tr><td>[t] (<A href='?src=\ref[src];removejobban=[r]'>unban</A>)</td></tr>") dat += "</table>"
dat += "</table>" usr << browse(dat, "window=ban;size=400x400")
usr << browse(dat, "window=ban;size=400x400")
/datum/admins/proc/Game() /datum/admins/proc/Game()
if(!check_rights(0)) return
var/dat
var/lvl = 0
switch(src.rank)
if("Moderator")
lvl = 1
if("Temporary Admin")
lvl = 2
if("Admin Candidate")
lvl = 3
if("Trial Admin")
lvl = 4
if("Badmin")
lvl = 5
if("Game Admin")
lvl = 6
if("Game Master")
lvl = 7
dat += "<center><B>Game Panel</B></center><hr>\n"
if(lvl > 0)
// if(lvl >= 2 )
dat += "<A href='?src=\ref[src];c_mode=1'>Change Game Mode</A><br>"
if(lvl > 0 && master_mode == "secret")
dat += "<A href='?src=\ref[src];f_secret=1'>(Force Secret Mode)</A><br>"
dat += "<BR>"
if(lvl >= 3 )
dat += "<A href='?src=\ref[src];create_object=1'>Create Object</A><br>"
dat += "<A href='?src=\ref[src];quick_create_object=1'>Quick Create Object</A><br>"
dat += "<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>"
if(lvl >= 5)
dat += "<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>"
// if(lvl == 6 )
usr << browse(dat, "window=admin2;size=210x180")
return
/*
/datum/admins/proc/goons()
var/dat = "<HR><B>GOOOOOOONS</B><HR><table cellspacing=5><tr><th>Key</th><th>SA Username</th></tr>"
for(var/t in goon_keylist)
dat += text("<tr><td><A href='?src=\ref[src];remove=[ckey(t)]'><B>[t]</B></A></td><td>[goon_keylist[ckey(t)]]</td></tr>")
dat += "</table>"
usr << browse(dat, "window=ban;size=300x400")
/datum/admins/proc/beta_testers()
var/dat = "<HR><B>Beta testers</B><HR><table cellspacing=5><tr><th>Key</th></tr>"
for(var/t in beta_tester_keylist)
dat += text("<tr><td>[t]</td></tr>")
dat += "</table>"
usr << browse(dat, "window=ban;size=300x400")
*/
/datum/admins/proc/Secrets()
if (!usr.client.holder)
return
var/lvl = 0
switch(src.rank)
if("Moderator")
lvl = 1
if("Temporary Admin")
lvl = 2
if("Admin Candidate")
lvl = 3
if("Trial Admin")
lvl = 4
if("Badmin")
lvl = 5
if("Game Admin")
lvl = 6
if("Game Master")
lvl = 7
var/dat = {" var/dat = {"
<B>Choose a secret, any secret at all.</B><HR> <center><B>Game Panel</B></center><hr>\n
<B>Admin Secrets</B><BR> <A href='?src=\ref[src];c_mode=1'>Change Game Mode</A><br>
<BR>
<A href='?src=\ref[src];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A><BR>
<A href='?src=\ref[src];secretsadmin=list_bombers'>Bombing List</A><BR>
<A href='?src=\ref[src];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
<A href='?src=\ref[src];secretsadmin=list_signalers'>Show last [length(lastsignalers)] signalers</A><BR>
<A href='?src=\ref[src];secretsadmin=list_lawchanges'>Show last [length(lawchanges)] law changes</A><BR>
<A href='?src=\ref[src];secretsadmin=showailaws'>Show AI Laws</A><BR>
<A href='?src=\ref[src];secretsadmin=showgm'>Show Game Mode</A><BR>
<A href='?src=\ref[src];secretsadmin=manifest'>Show Crew Manifest</A><BR>
<A href='?src=\ref[src];secretsadmin=DNA'>List DNA (Blood)</A><BR>
<A href='?src=\ref[src];secretsadmin=fingerprints'>List Fingerprints</A><BR><BR>
<BR>"}
if(lvl > 2)
dat += {"
<B>'Random' Events</B><BR>
<BR>
<A href='?src=\ref[src];secretsfun=wave'>Spawn a wave of meteors</A><BR>
<A href='?src=\ref[src];secretsfun=gravanomalies'>Spawn a gravitational anomaly (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=timeanomalies'>Spawn wormholes (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=goblob'>Spawn blob(Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
<A href='?src=\ref[src];secretsfun=spaceninja'>Send in a space ninja</A><BR>
<A href='?src=\ref[src];secretsfun=carp'>Trigger an Carp migration</A><BR>
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
<A href='?src=\ref[src];secretsfun=virus'>Trigger a Virus Outbreak</A><BR>
<A href='?src=\ref[src];secretsfun=immovable'>Spawn an Immovable Rod</A><BR>
<A href='?src=\ref[src];secretsfun=lightsout'>Toggle a "lights out" event</A><BR>
<A href='?src=\ref[src];secretsfun=ionstorm'>Spawn an Ion Storm</A><BR>
<A href='?src=\ref[src];secretsfun=spacevines'>Spawn Space-Vines</A><BR>
<A href='?src=\ref[src];secretsfun=comms_blackout'>Trigger a communication blackout</A><BR>
<BR>
<B>Fun Secrets</B><BR>
<BR>
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A><BR>
<A href='?src=\ref[src];secretsfun=sec_all_clothes'>Remove ALL clothing</A><BR>
<A href='?src=\ref[src];secretsfun=toxic'>Toxic Air (WARNING: dangerous)</A><BR>
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
<A href='?src=\ref[src];secretsfun=sec_classic1'>Remove firesuits, grilles, and pods</A><BR>
<A href='?src=\ref[src];secretsfun=power'>Make all areas powered</A><BR>
<A href='?src=\ref[src];secretsfun=unpower'>Make all areas unpowered</A><BR>
<A href='?src=\ref[src];secretsfun=quickpower'>Power all SMES</A><BR>
<A href='?src=\ref[src];secretsfun=toggleprisonstatus'>Toggle Prison Shuttle Status(Use with S/R)</A><BR>
<A href='?src=\ref[src];secretsfun=activateprison'>Send Prison Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=deactivateprison'>Return Prison Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A><BR>
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR>
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A><BR>
<A href='?src=\ref[src];secretsfun=moveadminshuttle'>Move Administration Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=moveferry'>Move Ferry</A><BR>
<A href='?src=\ref[src];secretsfun=movealienship'>Move Alien Dinghy</A><BR>
<A href='?src=\ref[src];secretsfun=moveminingshuttle'>Move Mining Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A><BR>
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
<A href='?src=\ref[src];secretsfun=friendai'>Best Friend AI</A><BR>
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS)</A><BR>"}
//<A href='?src=\ref[src];secretsfun=shockwave'>Station Shockwave</A><BR>
if(lvl >= 6)
dat += {"
<A href='?src=\ref[src];secretsfun=togglebombcap'>Toggle bomb cap</A><BR>
"} "}
if(master_mode == "secret")
dat += "<A href='?src=\ref[src];f_secret=1'>(Force Secret Mode)</A><br>"
if(check_rights(R_ADMIN))
dat += {"
"<BR>"
<A href='?src=\ref[src];create_object=1'>Create Object</A><br>
<A href='?src=\ref[src];quick_create_object=1'>Quick Create Object</A><br>
<A href='?src=\ref[src];create_turf=1'>Create Turf</A><br>
<A href='?src=\ref[src];create_mob=1'>Create Mob</A><br>
"}
usr << browse(dat, "window=admin2;size=210x180")
return
/datum/admins/proc/Secrets()
if(!check_rights(0)) return
var/dat = {"
<B>Choose a secret, any secret at all.</B><HR>
<B>Admin Secrets</B><BR>
<BR>
<A href='?src=\ref[src];secretsadmin=clear_bombs'>Remove all bombs currently in existence</A><BR>
<A href='?src=\ref[src];secretsadmin=list_bombers'>Bombing List</A><BR>
<A href='?src=\ref[src];secretsadmin=check_antagonist'>Show current traitors and objectives</A><BR>
<A href='?src=\ref[src];secretsadmin=list_signalers'>Show last [length(lastsignalers)] signalers</A><BR>
<A href='?src=\ref[src];secretsadmin=list_lawchanges'>Show last [length(lawchanges)] law changes</A><BR>
<A href='?src=\ref[src];secretsadmin=showailaws'>Show AI Laws</A><BR>
<A href='?src=\ref[src];secretsadmin=showgm'>Show Game Mode</A><BR>
<A href='?src=\ref[src];secretsadmin=manifest'>Show Crew Manifest</A><BR>
<A href='?src=\ref[src];secretsadmin=DNA'>List DNA (Blood)</A><BR>
<A href='?src=\ref[src];secretsadmin=fingerprints'>List Fingerprints</A><BR><BR>
<BR>
"}
if(check_rights(R_FUN,0))
dat += {"
<B>'Random' Events</B><BR>
<BR>
<A href='?src=\ref[src];secretsfun=wave'>Spawn a wave of meteors</A><BR>
<A href='?src=\ref[src];secretsfun=gravanomalies'>Spawn a gravitational anomaly (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=timeanomalies'>Spawn wormholes (Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=goblob'>Spawn blob(Untested)</A><BR>
<A href='?src=\ref[src];secretsfun=aliens'>Trigger an Alien infestation</A><BR>
<A href='?src=\ref[src];secretsfun=spaceninja'>Send in a space ninja</A><BR>
<A href='?src=\ref[src];secretsfun=carp'>Trigger an Carp migration</A><BR>
<A href='?src=\ref[src];secretsfun=radiation'>Irradiate the station</A><BR>
<A href='?src=\ref[src];secretsfun=prison_break'>Trigger a Prison Break</A><BR>
<A href='?src=\ref[src];secretsfun=virus'>Trigger a Virus Outbreak</A><BR>
<A href='?src=\ref[src];secretsfun=immovable'>Spawn an Immovable Rod</A><BR>
<A href='?src=\ref[src];secretsfun=lightsout'>Toggle a "lights out" event</A><BR>
<A href='?src=\ref[src];secretsfun=ionstorm'>Spawn an Ion Storm</A><BR>
<A href='?src=\ref[src];secretsfun=spacevines'>Spawn Space-Vines</A><BR>
<A href='?src=\ref[src];secretsfun=comms_blackout'>Trigger a communication blackout</A><BR>
<BR>
<B>Fun Secrets</B><BR>
<BR>
<A href='?src=\ref[src];secretsfun=sec_clothes'>Remove 'internal' clothing</A><BR>
<A href='?src=\ref[src];secretsfun=sec_all_clothes'>Remove ALL clothing</A><BR>
<A href='?src=\ref[src];secretsfun=toxic'>Toxic Air (WARNING: dangerous)</A><BR>
<A href='?src=\ref[src];secretsfun=monkey'>Turn all humans into monkeys</A><BR>
<A href='?src=\ref[src];secretsfun=sec_classic1'>Remove firesuits, grilles, and pods</A><BR>
<A href='?src=\ref[src];secretsfun=power'>Make all areas powered</A><BR>
<A href='?src=\ref[src];secretsfun=unpower'>Make all areas unpowered</A><BR>
<A href='?src=\ref[src];secretsfun=quickpower'>Power all SMES</A><BR>
<A href='?src=\ref[src];secretsfun=toggleprisonstatus'>Toggle Prison Shuttle Status(Use with S/R)</A><BR>
<A href='?src=\ref[src];secretsfun=activateprison'>Send Prison Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=deactivateprison'>Return Prison Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=prisonwarp'>Warp all Players to Prison</A><BR>
<A href='?src=\ref[src];secretsfun=traitor_all'>Everyone is the traitor</A><BR>
<A href='?src=\ref[src];secretsfun=flicklights'>Ghost Mode</A><BR>
<A href='?src=\ref[src];secretsfun=retardify'>Make all players retarded</A><BR>
<A href='?src=\ref[src];secretsfun=fakeguns'>Make all items look like guns</A><BR>
<A href='?src=\ref[src];secretsfun=schoolgirl'>Japanese Animes Mode</A><BR>
<A href='?src=\ref[src];secretsfun=moveadminshuttle'>Move Administration Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=moveferry'>Move Ferry</A><BR>
<A href='?src=\ref[src];secretsfun=movealienship'>Move Alien Dinghy</A><BR>
<A href='?src=\ref[src];secretsfun=moveminingshuttle'>Move Mining Shuttle</A><BR>
<A href='?src=\ref[src];secretsfun=blackout'>Break all lights</A><BR>
<A href='?src=\ref[src];secretsfun=whiteout'>Fix all lights</A><BR>
<A href='?src=\ref[src];secretsfun=friendai'>Best Friend AI</A><BR>
<A href='?src=\ref[src];secretsfun=floorlava'>The floor is lava! (DANGEROUS)</A><BR>
"}
if(check_rights(R_SERVER,0))
dat += "<A href='?src=\ref[src];secretsfun=togglebombcap'>Toggle bomb cap</A><BR>"
dat += "<BR>" dat += "<BR>"
if(lvl >= 5) if(check_rights(R_DEBUG,0))
dat += {" dat += {"
<B>Security Level Elevated</B><BR> <B>Security Level Elevated</B><BR>
<BR> <BR>
<A href='?src=\ref[src];secretscoder=maint_access_engiebrig'>Change all maintenance doors to engie/brig access only</A><BR> <A href='?src=\ref[src];secretscoder=maint_access_engiebrig'>Change all maintenance doors to engie/brig access only</A><BR>
<A href='?src=\ref[src];secretscoder=maint_access_brig'>Change all maintenance doors to brig access only</A><BR> <A href='?src=\ref[src];secretscoder=maint_access_brig'>Change all maintenance doors to brig access only</A><BR>
<A href='?src=\ref[src];secretscoder=infinite_sec'>Remove cap on security officers</A><BR> <A href='?src=\ref[src];secretscoder=infinite_sec'>Remove cap on security officers</A><BR>
<BR> <BR>
<B>Coder Secrets</B><BR> <B>Coder Secrets</B><BR>
<BR> <BR>
<A href='?src=\ref[src];secretsadmin=list_job_debug'>Show Job Debug</A><BR> <A href='?src=\ref[src];secretsadmin=list_job_debug'>Show Job Debug</A><BR>
<A href='?src=\ref[src];secretscoder=spawn_objects'>Admin Log</A><BR> <A href='?src=\ref[src];secretscoder=spawn_objects'>Admin Log</A><BR>
<BR> <BR>
"} "}
usr << browse(dat, "window=secrets") usr << browse(dat, "window=secrets")
return return
@@ -559,10 +508,11 @@ var/global/floorIsLava = 0
set category = "Special Verbs" set category = "Special Verbs"
set name = "Announce" set name = "Announce"
set desc="Announce your desires to the world" set desc="Announce your desires to the world"
if(!usr.client.holder) return if(!check_rights(0)) return
var/message = input("Global message to send:", "Admin Announce", null, null) as message var/message = input("Global message to send:", "Admin Announce", null, null) as message
if (message) if(message)
if(usr.client.holder.rank != "Game Admin" && usr.client.holder.rank != "Game Master") if(!check_rights(R_SERVER,0))
message = adminscrub(message,500) message = adminscrub(message,500)
world << "\blue <b>[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:</b>\n \t [message]" world << "\blue <b>[usr.client.holder.fakekey ? "Administrator" : usr.key] Announces:</b>\n \t [message]"
log_admin("Announce: [key_name(usr)] : [message]") log_admin("Announce: [key_name(usr)] : [message]")
@@ -837,36 +787,32 @@ var/global/floorIsLava = 0
*/ */
/datum/admins/proc/spawn_atom(var/object as text) /datum/admins/proc/spawn_atom(var/object as text)
set category = "Debug" set category = "Debug"
set desc= "(atom path) Spawn an atom" set desc = "(atom path) Spawn an atom"
set name= "Spawn" set name = "Spawn"
if(usr.client.holder.level >= 5) if(!check_rights(R_DEBUG)) return
var/list/types = typesof(/atom)
var/list/matches = new() var/list/types = typesof(/atom)
var/list/matches = new()
for(var/path in types) for(var/path in types)
if(findtext("[path]", object)) if(findtext("[path]", object))
matches += path matches += path
if(matches.len==0) if(matches.len==0)
return
var/chosen
if(matches.len==1)
chosen = matches[1]
else
chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches
if(!chosen)
return return
var/chosen new chosen(usr.loc)
if(matches.len==1)
chosen = matches[1]
else
chosen = input("Select an atom type", "Spawn Atom", matches[1]) as null|anything in matches
if(!chosen)
return
new chosen(usr.loc) log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
log_admin("[key_name(usr)] spawned [chosen] at ([usr.x],[usr.y],[usr.z])")
else
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
return
feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","SA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -5,15 +5,12 @@
/client/proc/admin_memo(task in list("write","show","delete")) /client/proc/admin_memo(task in list("write","show","delete"))
set name = "Memo" set name = "Memo"
set category = "Server" set category = "Server"
if(!holder || !ENABLE_MEMOS) return if(!ENABLE_MEMOS) return
if(!check_rights(0)) return
switch(task) switch(task)
if("write") if("write") admin_memo_write()
admin_memo_write() if("show") admin_memo_show()
if("show") if("delete") admin_memo_delete()
admin_memo_show()
if("delete")
admin_memo_delete()
//write a message //write a message
/client/proc/admin_memo_write() /client/proc/admin_memo_write()
@@ -45,7 +42,7 @@
var/savefile/F = new(MEMOFILE) var/savefile/F = new(MEMOFILE)
if(F) if(F)
var/ckey var/ckey
if( holder.rank == "Game Master" ) if(check_rights(R_SERVER,0)) //high ranking admins can delete other admin's memos
ckey = input(src,"Whose memo shall we remove?","Remove Memo",null) as null|anything in F.dir ckey = input(src,"Whose memo shall we remove?","Remove Memo",null) as null|anything in F.dir
else else
ckey = src.ckey ckey = src.ckey

View File

@@ -0,0 +1,142 @@
var/list/admin_ranks = list() //list of all ranks with associated rights
//load our rank - > rights associations
/proc/load_admin_ranks()
admin_ranks.Cut()
var/previous_rights = 0
//load text from file
var/list/Lines = file2list("config/admin_ranks.txt")
//process each line seperately
for(var/line in Lines)
if(!length(line)) continue
if(copytext(line,1,2) == "#") continue
var/list/List = text2list(line,"+")
if(!List.len) continue
var/rank = ckeyEx(List[1])
switch(rank)
if(null,"") continue
if("Removed") continue //Reserved
var/rights = 0
for(var/i=2, i<=List.len, i++)
switch(ckey(List[i]))
if("@","prev") rights |= previous_rights
if("buildmode","build") rights |= R_BUILDMODE
if("admin") rights |= R_ADMIN
if("ban") rights |= R_BAN
if("fun") rights |= R_FUN
if("server") rights |= R_SERVER
if("debug") rights |= R_DEBUG
if("permissions","rights") rights |= R_PERMISSIONS
if("possess") rights |= R_POSSESS
if("stealth") rights |= R_STEALTH
if("rejuv","rejuvinate") rights |= R_REJUVINATE
if("varedit") rights |= R_VAREDIT
if("everything","host","all") rights |= R_HOST
if("sound","sounds") rights |= R_SOUNDS
admin_ranks[rank] = rights
previous_rights = rights
#ifdef TESTING
var/msg = "Permission Sets Built:\n"
for(var/rank in admin_ranks)
msg += "\t[rank] - [admin_ranks[rank]]\n"
testing(msg)
#endif
/proc/load_admins()
//clear the datums references
admin_datums.Cut()
for(var/client/C in admins)
C.remove_admin_verbs()
C.holder = null
admins.Cut()
if(config.admin_legacy_system)
load_admin_ranks()
//load text from file
var/list/Lines = file2list("config/admins.txt")
//process each line seperately
for(var/line in Lines)
if(!length(line)) continue
if(copytext(line,1,2) == "#") continue
//Split the line at every "-"
var/list/List = text2list(line, "-")
if(!List.len) continue
//ckey is before the first "-"
var/ckey = ckey(List[1])
if(!ckey) continue
//rank follows the first "-"
var/rank = ""
if(List.len >= 2)
rank = ckeyEx(List[2])
//load permissions associated with this rank
var/rights = admin_ranks[rank]
//create the admin datum and store it for later use
var/datum/admins/D = new /datum/admins(rank, rights, ckey)
//find the client for a ckey if they are connected and associate them with the new admin datum
D.associate(directory[ckey])
else
//The current admin system uses SQL
var/user = sqlfdbklogin
var/pass = sqlfdbkpass
var/db = sqlfdbkdb
var/address = sqladdress
var/port = sqlport
var/DBConnection/dbcon = new()
dbcon.Connect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]")
if(!dbcon.IsConnected())
diary << "Failed to connect to database in load_admins(). Reverting to legacy system."
config.admin_legacy_system = 1
load_admins()
return
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, rank, level, flags FROM erro_admin")
query.Execute()
while(query.NextRow())
var/ckey = query.item[1]
var/rank = query.item[2]
if(rank == "Removed") return //This person was de-adminned. They are only in the admin list for archive purposes.
var/rights = query.item[4]
if(istext(rights)) rights = text2num(rights)
var/datum/admins/D = new /datum/admins(rank, rights, ckey)
//find the client for a ckey if they are connected and associate them with the new admin datum
D.associate(directory[ckey])
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()
return
#ifdef TESTING
var/msg = "Admins Built:\n"
for(var/ckey in admin_datums)
var/rank
var/datum/admins/D = admin_datums[ckey]
if(D) rank = D.rank
msg += "\t[ckey] - [rank]\n"
testing(msg)
#endif

View File

@@ -1,403 +1,320 @@
//GUYS REMEMBER TO ADD A += to UPDATE_ADMINS //admin verb groups - They can overlap if you so wish. Only one of each verb will exist in the verbs list regardless
//AND A -= TO CLEAR_ADMIN_VERBS var/list/admin_verbs_default = list(
/client/proc/toggleadminhelpsound, /*toggles whether we hear a sound when adminhelps/PMs are used*/
/client/proc/deadmin_self, /*destroys our own admin datum so we can play as a regular player*/
/client/proc/cmd_admin_say, /*admin-only ooc chat*/
/client/proc/hide_verbs, /*hides all our adminverbs*/
/client/proc/hide_most_verbs, /*hides all our hideable adminverbs*/
/client/proc/debug_variables, /*allows us to -see- the variables of any instance in the game. +VAREDIT needed to modify*/
/client/proc/check_ai_laws, /*shows AI and borg laws*/
/client/proc/check_antagonists, /*shows all antags*/
/client/proc/admin_memo, /*admin memo system. show/delete/write. +SERVER needed to delete admin memos of others*/
/client/proc/deadchat, /*toggles deadchat on/off*/
/client/proc/dsay, /*talk in deadchat using our ckey/fakekey*/
/client/proc/toggleprayers, /*toggles prayers on/off*/
/client/proc/toggle_hear_deadcast, /*toggles whether we hear deadchat*/
/client/proc/toggle_hear_radio, /*toggles whether we hear the radio*/
/client/proc/investigate_show /*various admintools for investigation. Such as a singulo grief-log*/
)
var/list/admin_verbs_admin = list(
/client/proc/game_panel, /*game panel, allows to change game-mode etc*/
/client/proc/player_panel, /*shows an interface for all players, with links to various panels (old style)*/
/client/proc/player_panel_new, /*shows an interface for all players, with links to various panels*/
/client/proc/invisimin, /*allows our mob to go invisible/visible*/
/datum/admins/proc/show_traitor_panel, /*interface which shows a mob's mind*/
/datum/admins/proc/toggleenter, /*toggles whether people can join the current game*/
/datum/admins/proc/toggleguests, /*toggles whether guests can join the current game*/
/datum/admins/proc/show_player_panel, /*shows an interface for individual players, with various links (links require additional flags*/
/datum/admins/proc/announce, /*priority announce something to all clients.*/
/client/proc/colorooc, /*allows us to set a custom colour for everythign we say in ooc*/
/client/proc/admin_ghost, /*allows us to ghost/reenter body at will*/
/client/proc/toggle_view_range, /*changes how far we can see*/
/datum/admins/proc/view_txt_log, /*shows the server log (diary) for today*/
// /datum/admins/proc/view_atk_log, /*shows the server combat-log, doesn't do anything presently*/
/client/proc/cmd_admin_pm_context, /*right-click amdinPM interface*/
/client/proc/cmd_admin_pm_panel, /*admin-pm list*/
/client/proc/cmd_admin_subtle_message, /*send an message to somebody as a 'voice in their head'*/
/client/proc/cmd_admin_delete, /*delete an instance/object/mob/etc*/
/client/proc/cmd_admin_check_contents, /*displays the contents of an instance*/
/datum/admins/proc/access_news_network, /*allows access of newscasters*/
/client/proc/giveruntimelog, /*allows us to give access to runtime logs to somebody*/
/client/proc/getserverlog, /*allows us to fetch server logs (diary) for other days*/
/client/proc/jumptocoord, /*we ghost and jump to a coordinate*/
/client/proc/Getmob, /*teleports a mob to our location*/
/client/proc/Getkey, /*teleports a mob with a certain ckey to our location*/
/client/proc/sendmob, /*sends a mob somewhere*/
/client/proc/Jump,
/client/proc/jumptokey, /*allows us to jump to the location of a mob with a certain ckey*/
/client/proc/jumptomob, /*allows us to jump to a specific mob*/
/client/proc/jumptoturf, /*allows us to jump to a specific turf*/
/datum/admins/proc/spawn_atom, /*allows us to spawn instances*/
/client/proc/admin_call_shuttle, /*allows us to call the emergency shuttle*/
/client/proc/admin_cancel_shuttle, /*allows us to cancel the emergency shuttle, sending it back to centcomm*/
/client/proc/cmd_admin_direct_narrate, /*send text directly to a player with no padding. Useful for narratives and fluff-text*/
/client/proc/cmd_admin_world_narrate, /*sends text to all players with no padding*/
/client/proc/check_words /*displays cult-words*/
)
var/list/admin_verbs_ban = list(
/client/proc/unban_panel,
/client/proc/jobbans,
/client/proc/unjobban_panel
)
var/list/admin_verbs_sounds = list(
/client/proc/play_local_sound,
/client/proc/play_sound
)
var/list/admin_verbs_fun = list(
/client/proc/object_talk,
/client/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
/client/proc/drop_bomb,
/client/proc/toggle_gravity_on,
/client/proc/toggle_gravity_off,
/client/proc/secrets,
/client/proc/strike_team,
/client/proc/cinematic,
/client/proc/triple_ai,
/client/proc/one_click_antag,
/datum/admins/proc/toggle_aliens,
/datum/admins/proc/toggle_space_ninja,
/client/proc/spawn_xeno,
/client/proc/only_one,
/client/proc/send_space_ninja,
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/make_sound,
/client/proc/toggle_random_events,
/client/proc/cmd_admin_add_random_ai_law
)
var/list/admin_verbs_server = list(
/client/proc/Set_Holiday,
/client/proc/ToRban,
/datum/admins/proc/startnow,
/datum/admins/proc/restart,
/datum/admins/proc/delay,
/datum/admins/proc/toggleaban,
/client/proc/toggle_log_hrefs,
/datum/admins/proc/immreboot,
/client/proc/everyone_random,
/datum/admins/proc/toggleAI,
/datum/admins/proc/toggleooc,
/datum/admins/proc/toggleoocdead,
/datum/admins/proc/adrev,
/datum/admins/proc/adspawn,
/datum/admins/proc/adjump
)
var/list/admin_verbs_debug = list(
/client/proc/restart_controller,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/callproc,
/client/proc/Debug2,
/client/proc/reload_admins,
/client/proc/kill_air,
/client/proc/cmd_debug_make_powernets,
/client/proc/kill_airgroup,
/client/proc/debug_controller,
/client/proc/startSinglo,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_tog_aliens,
/client/proc/air_report,
/client/proc/enable_debug_verbs
)
var/list/admin_verbs_possess = list(
/proc/possess,
/proc/release
)
var/list/admin_verbs_permissions = list(
)
var/list/admin_verbs_rejuv = list(
/client/proc/cmd_admin_rejuvenate,
/client/proc/respawn_character
)
//verbs which can be hidden
var/list/admin_verbs_hideable = list(
/client/proc/deadmin_self,
/client/proc/deadchat,
/client/proc/toggleprayers,
/client/proc/toggle_hear_deadcast,
/client/proc/toggle_hear_radio,
/datum/admins/proc/show_traitor_panel,
/datum/admins/proc/toggleenter,
/datum/admins/proc/toggleguests,
/datum/admins/proc/announce,
/client/proc/colorooc,
/client/proc/admin_ghost,
/client/proc/toggle_view_range,
/datum/admins/proc/view_txt_log,
/datum/admins/proc/view_atk_log,
/client/proc/cmd_admin_subtle_message,
/client/proc/cmd_admin_check_contents,
/datum/admins/proc/access_news_network,
/client/proc/giveruntimelog,
/client/proc/getserverlog,
/client/proc/admin_call_shuttle,
/client/proc/admin_cancel_shuttle,
/client/proc/cmd_admin_direct_narrate,
/client/proc/cmd_admin_world_narrate,
/client/proc/check_words,
/client/proc/play_local_sound,
/client/proc/play_sound,
/client/proc/object_talk,
/client/proc/cmd_admin_dress,
/client/proc/cmd_admin_gib_self,
/client/proc/drop_bomb,
/client/proc/toggle_gravity_on,
/client/proc/toggle_gravity_off,
/client/proc/strike_team,
/client/proc/cinematic,
/client/proc/triple_ai,
/datum/admins/proc/toggle_aliens,
/datum/admins/proc/toggle_space_ninja,
/client/proc/spawn_xeno,
/client/proc/only_one,
/client/proc/send_space_ninja,
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/make_sound,
/client/proc/toggle_random_events,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/Set_Holiday,
/client/proc/ToRban,
/datum/admins/proc/startnow,
/datum/admins/proc/restart,
/datum/admins/proc/delay,
/datum/admins/proc/toggleaban,
/client/proc/toggle_log_hrefs,
/datum/admins/proc/immreboot,
/client/proc/everyone_random,
/datum/admins/proc/toggleAI,
/datum/admins/proc/adrev,
/datum/admins/proc/adspawn,
/datum/admins/proc/adjump,
/client/proc/restart_controller,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/callproc,
/client/proc/Debug2,
/client/proc/reload_admins,
/client/proc/kill_air,
/client/proc/cmd_debug_make_powernets,
/client/proc/kill_airgroup,
/client/proc/debug_controller,
/client/proc/startSinglo,
/client/proc/cmd_debug_mob_lists,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_tog_aliens,
/client/proc/air_report,
/client/proc/enable_debug_verbs,
/proc/possess,
/proc/release
)
/client/proc/add_admin_verbs()
if(holder)
var/rights = holder.rights
verbs += admin_verbs_default
if(rights & R_BUILDMODE) verbs += /client/proc/togglebuildmodeself
if(rights & R_ADMIN) verbs += admin_verbs_admin
if(rights & R_BAN) verbs += admin_verbs_ban
if(rights & R_FUN) verbs += admin_verbs_fun
if(rights & R_SERVER) verbs += admin_verbs_server
if(rights & R_DEBUG) verbs += admin_verbs_debug
if(rights & R_POSSESS) verbs += admin_verbs_possess
if(rights & R_PERMISSIONS) verbs += admin_verbs_permissions
if(rights & R_STEALTH) verbs += /client/proc/stealth
if(rights & R_REJUVINATE) verbs += admin_verbs_rejuv
if(rights & R_SOUNDS) verbs += admin_verbs_sounds
//Some verbs that are still in the code but not used atm /client/proc/remove_admin_verbs()
// Debug if(holder)
// verbs += /client/proc/radio_report //for radio debugging dont think its been used in a very long time verbs.Remove(
// verbs += /client/proc/fix_next_move //has not been an issue in a very very long time admin_verbs_default,
/client/proc/togglebuildmodeself,
admin_verbs_admin,
admin_verbs_ban,
admin_verbs_fun,
admin_verbs_server,
admin_verbs_debug,
admin_verbs_possess,
admin_verbs_permissions,
/client/proc/stealth,
admin_verbs_rejuv,
/client/proc/Cell,
/client/proc/do_not_use_these,
/client/proc/camera_view,
/client/proc/sec_camera_report,
/client/proc/intercom_view,
/client/proc/air_status,
/client/proc/atmosscan,
/client/proc/powerdebug,
/client/proc/count_objects_on_z_level,
/client/proc/count_objects_all,
/client/proc/cmd_assume_direct_control,
/client/proc/jump_to_dead_group,
/client/proc/startSinglo,
/client/proc/ticklag,
/client/proc/cmd_admin_grantfullaccess,
/client/proc/kaboom,
/client/proc/splash,
/client/proc/cmd_admin_areatest,
admin_verbs_sounds
)
// Mapping helpers added via enable_debug_verbs verb /client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
// verbs += /client/proc/do_not_use_these set name = "Adminverbs - Hide Most"
// verbs += /client/proc/camera_view set category = "Admin"
// verbs += /client/proc/sec_camera_report
// verbs += /client/proc/intercom_view
// verbs += /client/proc/air_status //Air things
// verbs += /client/proc/Cell //More air things
/client/proc/admin_rank_check(var/rank, var/requested) verbs.Remove(
if(rank < requested) /client/proc/hide_most_verbs,
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null) admin_verbs_hideable
return(0) )
return(1) verbs += /client/proc/show_verbs
/client/proc/update_admins(var/rank) src << "<span class='interface'>Most of your adminverbs have been hidden.</span>"
if(!holder) feedback_add_details("admin_verb","HMV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
holder = new /datum/admins(rank)
admins |= src
admin_datums[ckey] = holder
var/need_update = 0
//check if our rank has changed
if(holder.rank != rank)
holder.rank = rank
need_update = 1
//check if our state has changed
if(istype(mob,/mob/living))
if(holder.state != 1)
holder.state = 1
need_update = 1
else
if(holder.state != 2)
holder.state = 2
need_update = 1
if(!need_update) return
clear_admin_verbs()
handle_permission_verbs()
switch(rank)
if("Game Master")
holder.level = 6
if ("Game Admin")
holder.level = 5
if ("Badmin")
holder.level = 4
if ("Trial Admin")
holder.level = 3
if(holder.state == 2) // if observing
verbs += /client/proc/debug_variables
verbs += /client/proc/cmd_modify_ticker_variables
verbs += /client/proc/toggle_view_range
verbs += /client/proc/Getmob
verbs += /client/proc/Getkey
verbs += /client/proc/sendmob
verbs += /client/proc/Jump
verbs += /client/proc/jumptokey
verbs += /client/proc/jumptomob
verbs += /client/proc/jumptoturf
verbs += /client/proc/jumptocoord
verbs += /client/proc/cmd_admin_delete
verbs += /client/proc/cmd_admin_add_freeform_ai_law
verbs += /client/proc/cmd_admin_rejuvenate
if ("Admin Candidate")
holder.level = 2
if(holder.state == 2) // if observing
deadchat = 1
verbs += /datum/admins/proc/toggleaban //abandon mob
verbs += /client/proc/deadchat //toggles deadchat
verbs += /client/proc/cmd_admin_check_contents
verbs += /client/proc/Jump
verbs += /client/proc/jumptokey
verbs += /client/proc/jumptomob
if ("Temporary Admin")
holder.level = 1
if ("Moderator")
holder.level = 0
if ("Admin Observer")
holder.level = -1
// if ("Banned")
// holder.level = -2
// del(src)
// return
else
del(holder)
return
if (holder) //THE BELOW handles granting powers. The above is for special cases only!
holder.owner = src
//Admin Observer
if (holder.level >= -1)
seeprayers = 1
verbs += /client/proc/cmd_admin_say
verbs += /client/proc/deadmin_self
verbs += /client/proc/toggleadminhelpsound
else return
//Moderator
if (holder.level >= 0)
verbs += /datum/admins/proc/announce
verbs += /datum/admins/proc/startnow
verbs += /datum/admins/proc/toggleAI //Toggle the AI
verbs += /datum/admins/proc/toggleenter //Toggle enterting
verbs += /datum/admins/proc/toggleguests //Toggle guests entering
verbs += /datum/admins/proc/toggleooc //toggle ooc
verbs += /datum/admins/proc/toggleoocdead //toggle ooc for dead/unc
verbs += /datum/admins/proc/show_player_panel
verbs += /client/proc/deadchat //toggles deadchat
verbs += /client/proc/cmd_admin_pm_context
verbs += /client/proc/cmd_admin_pm_panel
verbs += /client/proc/cmd_admin_subtle_message
verbs += /client/proc/dsay
verbs += /client/proc/admin_ghost
verbs += /client/proc/game_panel
verbs += /client/proc/player_panel
verbs += /client/proc/player_panel_new
verbs += /client/proc/unban_panel
verbs += /client/proc/jobbans
verbs += /client/proc/unjobban_panel
verbs += /client/proc/hide_verbs
verbs += /client/proc/general_report
verbs += /client/proc/air_report
verbs += /client/proc/check_ai_laws
verbs += /client/proc/investigate_show
verbs += /client/proc/cmd_admin_gib_self
else return
//Temporary Admin
if (holder.level >= 1)
verbs += /datum/admins/proc/delay //game start delay
verbs += /datum/admins/proc/immreboot //immediate reboot
verbs += /datum/admins/proc/restart //restart
verbs += /client/proc/cmd_admin_check_contents
verbs += /client/proc/cmd_admin_create_centcom_report
verbs += /client/proc/toggle_hear_deadcast
verbs += /client/proc/toggle_hear_radio
else return
//Admin Candidate
if (holder.level >= 2)
verbs += /client/proc/cmd_admin_add_random_ai_law
verbs += /client/proc/secrets
verbs += /client/proc/check_antagonists
verbs += /client/proc/play_sound
verbs += /client/proc/stealth
else return
//Trial Admin
if (holder.level >= 3)
deadchat = 1
verbs += /client/proc/invisimin
verbs += /datum/admins/proc/view_txt_log
verbs += /datum/admins/proc/view_atk_log
verbs += /datum/admins/proc/toggleaban //abandon mob
verbs += /datum/admins/proc/show_traitor_panel
verbs += /client/proc/getserverlog //fetch an old serverlog to look at
verbs += /client/proc/admin_call_shuttle
verbs += /client/proc/admin_cancel_shuttle
verbs += /client/proc/cmd_admin_dress
verbs += /client/proc/respawn_character
verbs += /client/proc/spawn_xeno
verbs += /client/proc/toggleprayers
verbs += /proc/possess
verbs += /proc/release
verbs += /client/proc/one_click_antag
else return
//Badmin
if (holder.level >= 4)
verbs += /datum/admins/proc/adrev //toggle admin revives
verbs += /datum/admins/proc/adspawn //toggle admin item spawning
verbs += /client/proc/debug_variables
verbs += /datum/admins/proc/access_news_network //Admin access to the newscaster network
verbs += /client/proc/cmd_modify_ticker_variables
verbs += /client/proc/Debug2 //debug toggle switch
verbs += /client/proc/toggle_view_range
verbs += /client/proc/Getmob
verbs += /client/proc/Getkey
verbs += /client/proc/sendmob
verbs += /client/proc/Jump
verbs += /client/proc/jumptokey
verbs += /client/proc/jumptomob
verbs += /client/proc/jumptoturf
verbs += /client/proc/cmd_admin_delete
verbs += /client/proc/cmd_admin_add_freeform_ai_law
verbs += /client/proc/cmd_admin_add_random_ai_law
verbs += /client/proc/cmd_admin_rejuvenate
verbs += /client/proc/hide_most_verbs
verbs += /client/proc/jumptocoord
verbs += /client/proc/deadmin_self
verbs += /client/proc/giveruntimelog //used by coders to retrieve runtime logs
verbs += /client/proc/togglebuildmodeself
verbs += /client/proc/debug_controller
else return
//Game Admin
if (holder.level >= 5)
verbs += /datum/admins/proc/spawn_atom
verbs += /client/proc/cmd_admin_list_open_jobs
verbs += /client/proc/cmd_admin_direct_narrate
verbs += /client/proc/colorooc
verbs += /client/proc/kill_air
verbs += /client/proc/cmd_admin_world_narrate
verbs += /client/proc/cmd_debug_del_all
verbs += /client/proc/cmd_debug_tog_aliens
verbs += /client/proc/check_words
verbs += /client/proc/drop_bomb
verbs += /client/proc/kill_airgroup
verbs += /client/proc/make_sound
verbs += /client/proc/play_local_sound
verbs += /client/proc/send_space_ninja
verbs += /client/proc/restart_controller //Can call via aproccall --I_hate_easy_things.jpg, Mport --Agouri
verbs += /client/proc/toggle_clickproc //TODO ERRORAGE (Temporary proc while the new clickproc is being tested)
verbs += /client/proc/toggle_gravity_on
verbs += /client/proc/toggle_gravity_off
verbs += /client/proc/toggle_random_events
verbs += /client/proc/deadmin_self
verbs += /client/proc/Set_Holiday //Force-set a Holiday
verbs += /client/proc/admin_memo
verbs += /client/proc/ToRban //ToRban frontend to access its features.
verbs += /client/proc/Blobize
else return
//Game Master
if (holder.level >= 6)
verbs += /datum/admins/proc/toggle_aliens //toggle aliens
verbs += /datum/admins/proc/toggle_space_ninja //toggle ninjas
verbs += /datum/admins/proc/adjump
verbs += /client/proc/callproc
verbs += /client/proc/triple_ai
verbs += /client/proc/reload_admins
verbs += /client/proc/cmd_debug_make_powernets
verbs += /client/proc/object_talk
verbs += /client/proc/strike_team
verbs += /client/proc/enable_debug_verbs
verbs += /client/proc/everyone_random
verbs += /client/proc/only_one
verbs += /client/proc/cinematic //show a cinematic sequence
verbs += /client/proc/startSinglo //Used to prevent the station from losing power while testing stuff out.
verbs += /client/proc/toggle_log_hrefs
verbs += /client/proc/cmd_debug_mob_lists
verbs += /client/proc/set_ooc
else return
return return
/client/proc/hide_verbs()
set name = "Adminverbs - Hide All"
set category = "Admin"
/client/proc/clear_admin_verbs()
deadchat = 0
verbs.Remove( verbs.Remove(
/datum/admins/proc/announce,
/datum/admins/proc/startnow,
/datum/admins/proc/toggleAI, /*Toggle the AI*/
/datum/admins/proc/toggleenter, /*Toggle enterting*/
/datum/admins/proc/toggleguests, /*Toggle guests entering*/
/datum/admins/proc/toggleooc, /*toggle ooc*/
/datum/admins/proc/toggleoocdead, /*toggle ooc for dead/unc*/
/datum/admins/proc/delay, /*game start delay*/
/datum/admins/proc/immreboot, /*immediate reboot*/
/datum/admins/proc/restart, /*restart*/
/datum/admins/proc/show_traitor_panel,
/datum/admins/proc/show_player_panel,
/datum/admins/proc/toggle_aliens, /*toggle aliens*/
/datum/admins/proc/toggle_space_ninja,/*toggle ninjas*/
/datum/admins/proc/adjump,
/datum/admins/proc/view_txt_log,
/datum/admins/proc/view_atk_log,
/datum/admins/proc/spawn_atom,
/datum/admins/proc/adrev, /*toggle admin revives*/
/datum/admins/proc/adspawn, /*toggle admin item spawning*/
/datum/admins/proc/toggleaban, /*abandon mob*/
/client/proc/hide_verbs, /client/proc/hide_verbs,
/client/proc/hide_most_verbs, /client/proc/hide_most_verbs,
/client/proc/show_verbs,
/client/proc/colorooc,
/client/proc/triple_ai,
/client/proc/reload_admins,
/client/proc/kill_air,
/client/proc/cmd_debug_make_powernets,
/client/proc/object_talk,
/client/proc/strike_team,
/client/proc/cmd_admin_list_open_jobs,
/client/proc/cmd_admin_direct_narrate,
/client/proc/cmd_admin_world_narrate,
/client/proc/callproc,
/client/proc/Cell,
/client/proc/cmd_debug_del_all,
/client/proc/cmd_debug_tog_aliens,
/client/proc/check_words,
/client/proc/drop_bomb,
/client/proc/make_sound,
/client/proc/only_one,
/client/proc/send_space_ninja,
/client/proc/debug_variables,
/client/proc/cmd_modify_ticker_variables,
/client/proc/Debug2, /*debug toggle switch*/
/client/proc/toggle_view_range,
/client/proc/Getmob,
/client/proc/Getkey,
/client/proc/sendmob,
/client/proc/Jump,
/client/proc/jumptokey,
/client/proc/jumptomob,
/client/proc/jumptoturf,
/client/proc/cmd_admin_add_freeform_ai_law,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/cmd_admin_rejuvenate,
/client/proc/cmd_admin_delete,
/client/proc/toggleadminhelpsound,
/client/proc/admin_call_shuttle,
/client/proc/admin_cancel_shuttle,
/client/proc/cmd_admin_dress,
/client/proc/respawn_character,
/client/proc/spawn_xeno,
/client/proc/cmd_admin_add_random_ai_law,
/client/proc/secrets,
/client/proc/check_antagonists,
/client/proc/play_sound,
/client/proc/stealth,
/client/proc/cmd_admin_check_contents,
/client/proc/cmd_admin_create_centcom_report,
/client/proc/deadchat, /*toggles deadchat*/
/client/proc/cmd_admin_pm_context,
/client/proc/cmd_admin_pm_panel,
/client/proc/cmd_admin_say,
/client/proc/cmd_admin_subtle_message,
/client/proc/dsay,
/client/proc/admin_ghost,
/client/proc/game_panel,
/client/proc/player_panel,
/client/proc/unban_panel,
/client/proc/jobbans,
/client/proc/unjobban_panel,
/client/proc/hide_verbs,
/client/proc/general_report,
/client/proc/air_report,
/client/proc/cmd_admin_say,
/client/proc/cmd_admin_gib_self,
/client/proc/restart_controller,
/client/proc/play_local_sound,
/client/proc/enable_debug_verbs,
/client/proc/toggleprayers,
/client/proc/toggle_clickproc, /*TODO ERRORAGE (Temporary proc while the enw clickproc is being tested)*/
/client/proc/toggle_hear_deadcast,
/client/proc/toggle_hear_radio,
/client/proc/player_panel_new,
/client/proc/toggle_gravity_on,
/client/proc/toggle_gravity_off,
/client/proc/toggle_random_events,
/client/proc/deadmin_self,
/client/proc/jumptocoord,
/client/proc/everyone_random,
/client/proc/Set_Holiday,
/client/proc/giveruntimelog, /*used by coders to retrieve runtime logs*/
/client/proc/getserverlog,
/client/proc/cinematic, /*show a cinematic sequence*/
/client/proc/admin_memo,
/client/proc/investigate_show, /*investigate in-game mishaps using various logs.*/
/client/proc/toggle_log_hrefs,
/client/proc/ToRban,
/proc/possess,
/proc/release,
/client/proc/togglebuildmodeself, /client/proc/togglebuildmodeself,
/client/proc/kill_airgroup, admin_verbs_admin,
/client/proc/debug_controller, admin_verbs_ban,
/client/proc/startSinglo, admin_verbs_fun,
/client/proc/check_ai_laws, admin_verbs_server,
/client/proc/cmd_debug_mob_lists, admin_verbs_debug,
/datum/admins/proc/access_news_network, admin_verbs_possess,
/client/proc/one_click_antag, admin_verbs_permissions,
/client/proc/invisimin, /client/proc/cmd_admin_rejuvenate,
/client/proc/set_ooc /client/proc/stealth,
) admin_verbs_rejuv
)
verbs += /client/proc/show_verbs
src << "<span class='interface'>Almost all of your adminverbs have been hidden.</span>"
feedback_add_details("admin_verb","TAVVH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return return
/client/proc/show_verbs()
set name = "Adminverbs - Show"
set category = "Admin"
verbs -= /client/proc/show_verbs
add_admin_verbs()
src << "<span class='interface'>All of your adminverbs are now visible.</span>"
feedback_add_details("admin_verb","TAVVS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/admin_ghost() /client/proc/admin_ghost()
set category = "Admin" set category = "Admin"
set name = "Aghost" set name = "Aghost"
@@ -418,19 +335,6 @@
body.key = "@[key]" //Haaaaaaaack. But the people have spoken. If it breaks; blame adminbus 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! 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 admins)
if(C.holder.state == 1)
src << "[C.key] is playing - [C.holder.state]"
else if(C.holder.state == 2)
src << "[C.key] is observing - [C.holder.state]"
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() /client/proc/invisimin()
set name = "Invisimin" set name = "Invisimin"
@@ -527,17 +431,14 @@
message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1) message_admins("[key_name_admin(usr)] has turned stealth mode [holder.fakekey ? "ON" : "OFF"]", 1)
feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","SM") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
#define AUTOBATIME 10 #define AUTOBATIME 10
/client/proc/warn(var/mob/M in player_list) /client/proc/warn(var/mob/M in player_list)
/*set category = "Special Verbs" /*set category = "Special Verbs"
set name = "Warn" set name = "Warn"
set desc = "Warn a player"*/ //Based on the information I gathered via stat logging this verb was not used. Use the show player panel alternative. --erro set desc = "Warn a player"*/ //Based on the information I gathered via stat logging this verb was not used. Use the show player panel alternative. --erro
if(!holder)
src << "Only administrators may use this command." if(!check_rights(R_ADMIN)) return
return
if(M.client && M.client.holder && (M.client.holder.level >= holder.level))
alert("You cannot perform this action. You must be of a higher administrative rank!", null, null, null, null, null)
return
if(!M.client.warned) if(!M.client.warned)
M << "\red <B>You have been warned by an administrator. This is the only warning you will recieve.</B>" M << "\red <B>You have been warned by an administrator. This is the only warning you will recieve.</B>"
M.client.warned = 1 M.client.warned = 1
@@ -662,17 +563,6 @@
log_admin("[key_name(usr)] used 'kill air'.") log_admin("[key_name(usr)] used 'kill air'.")
message_admins("\blue [key_name_admin(usr)] used 'kill air'.", 1) message_admins("\blue [key_name_admin(usr)] used 'kill air'.", 1)
/client/proc/show_verbs()
set name = "Toggle admin verb visibility"
set category = "Admin"
src << "Restoring admin verbs back"
var/temp = deadchat
holder.state = null //forces a full verbs update
update_admins(holder.rank)
deadchat = temp
feedback_add_details("admin_verb","TAVVS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/toggle_clickproc() //TODO ERRORAGE (This is a temporary verb here while I test the new clicking proc) /client/proc/toggle_clickproc() //TODO ERRORAGE (This is a temporary verb here while I test the new clicking proc)
set name = "Toggle NewClickProc" set name = "Toggle NewClickProc"
set category = "Debug" set category = "Debug"
@@ -704,72 +594,14 @@
set name = "De-admin self" set name = "De-admin self"
set category = "Admin" set category = "Admin"
if(src.holder) if(holder)
if(alert("Confirm self-deadmin for the round? You can't re-admin yourself without someont promoting you.",,"Yes","No") == "Yes") if(alert("Confirm self-deadmin for the round? You can't re-admin yourself without someont promoting you.",,"Yes","No") == "Yes")
log_admin("[src] deadmined themself.") log_admin("[src] deadmined themself.")
message_admins("[src] deadmined themself.", 1) message_admins("[src] deadmined themself.", 1)
deadmin() deadmin()
usr << "You are now a normal player." src << "<span class='interface'>You are now a normal player.</span>"
feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","DAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/hide_most_verbs()//Allows you to keep some functionality while hiding some verbs
set name = "Toggle most admin verb visibility"
set category = "Admin"
src << "Hiding most admin verbs"
var/temp = deadchat
clear_admin_verbs()
deadchat = temp
verbs -= /client/proc/hide_verbs
verbs -= /client/proc/hide_most_verbs
verbs += /client/proc/show_verbs
if(holder.level >= 5)//Game Admin********************************************************************
verbs += /client/proc/colorooc
if(holder.level >= 4)//Badmin********************************************************************
verbs += /client/proc/debug_variables
//verbs += /client/proc/cmd_modify_object_variables --merged with view vairiables
verbs += /client/proc/Jump
verbs += /client/proc/jumptoturf
verbs += /client/proc/togglebuildmodeself
verbs += /client/proc/dsay
verbs += /client/proc/admin_ghost
verbs += /client/proc/game_panel
verbs += /client/proc/player_panel
verbs += /client/proc/cmd_admin_subtle_message
verbs += /client/proc/cmd_admin_pm_context
verbs += /client/proc/cmd_admin_pm_panel
verbs += /client/proc/cmd_admin_gib_self
verbs += /client/proc/deadchat //toggles deadchat
verbs += /datum/admins/proc/toggleooc //toggle ooc
verbs += /client/proc/cmd_admin_say//asay
verbs += /client/proc/toggleadminhelpsound
feedback_add_details("admin_verb","HMV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/client/proc/hide_verbs()
set name = "Toggle admin verb visibility"
set category = "Admin"
src << "Hiding almost all admin verbs"
var/temp = deadchat
clear_admin_verbs()
deadchat = temp
verbs -= /client/proc/hide_verbs
verbs -= /client/proc/hide_most_verbs
verbs += /client/proc/show_verbs
verbs += /client/proc/deadchat //toggles deadchat
verbs += /datum/admins/proc/toggleooc //toggle ooc
verbs += /client/proc/cmd_admin_say//asay
feedback_add_details("admin_verb","TAVVH") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
return
/client/proc/toggle_log_hrefs() /client/proc/toggle_log_hrefs()
set name = "Toggle href logging" set name = "Toggle href logging"
set category = "Server" set category = "Server"

File diff suppressed because it is too large Load Diff

2348
code/modules/admin/topic.dm Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -40,9 +40,9 @@
src << "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>" src << "<font color='red'>Error: Admin-PM: You are unable to use admin PM-s (muted).</font>"
return return
if( !C || !istype(C,/client) ) if(!istype(C,/client))
if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>" if(holder) src << "<font color='red'>Error: Admin-PM: Client not found.</font>"
else adminhelp(msg) //admin we are replying to left. adminhelp instead else adminhelp(msg) //admin we are replying to left. adminhelp instead
return return
//get message text, limit it's length.and clean/escape html //get message text, limit it's length.and clean/escape html
@@ -58,8 +58,8 @@
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP)) if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return return
//clean the message if it's not sent by a GA or GM //clean the message if it's not sent by a high-rank admin
if( !holder || !(holder.rank in list("Game Admin", "Game Master")) ) if(!check_rights(R_SERVER|R_DEBUG,0))
msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN)) msg = sanitize(copytext(msg,1,MAX_MESSAGE_LEN))
if(!msg) return if(!msg) return
@@ -106,6 +106,6 @@
log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]") log_admin("PM: [key_name(src)]->[key_name(C)]: [msg]")
//we don't use message_admins here because the sender/receiver might get it too //we don't use message_admins here because the sender/receiver might get it too
for(var/client/X) //there are fewer clients than mobs for(var/client/X in admins)
if(X.holder && X.key!=key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient if(X.key!=key && X.key!=C.key) //check client/X is an admin and isn't the sender or recipient
X << "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;[key_name(C, X, 0)]:</B> \blue [msg]</font>" //inform X X << "<B><font color='blue'>PM: [key_name(src, X, 0)]-&gt;[key_name(C, X, 0)]:</B> \blue [msg]</font>" //inform X

View File

@@ -2,30 +2,18 @@
set category = "Special Verbs" set category = "Special Verbs"
set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite set name = "Asay" //Gave this shit a shorter name so you only have to time out "asay" rather than "admin say" to use it --NeoFite
set hidden = 1 set hidden = 1
if(!check_rights(0)) return
if (!src.holder)
src << "Only administrators may use this command."
return
if (src.muted & MUTE_ADMINHELP)
src << "You cannot send ASAY messages (muted)."
return
if (src.handle_spam_prevention(msg,MUTE_ADMINHELP))
return
msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN)
log_admin("[key_name(src)] : [msg]") if(!msg) return
if(check_rights(R_ADMIN,0))
if (!msg)
return
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
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
for(var/client/C in admins) 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>" 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>"
else
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>"
log_admin("[key_name(src)] : [msg]")
feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -1,22 +1,17 @@
/client/proc/Debug2() /client/proc/Debug2()
set category = "Debug" set category = "Debug"
set name = "Debug-Game" set name = "Debug-Game"
if(!holder) if(!check_rights(R_DEBUG)) return
src << "Only administrators may use this command."
return
if(holder.rank == "Game Admin")
Debug2 = !Debug2
world << "Debugging [Debug2 ? "On" : "Off"]" if(Debug2)
log_admin("[key_name(src)] toggled debugging to [Debug2]") Debug2 = 0
else if(holder.rank == "Game Master") message_admins("[key_name(src)] toggled debugging off.")
Debug2 = !Debug2 log_admin("[key_name(src)] toggled debugging off.")
world << "Debugging [Debug2 ? "On" : "Off"]"
log_admin("[key_name(src)] toggled debugging to [Debug2]")
else else
alert("Coders only baby") Debug2 = 1
return message_admins("[key_name(src)] toggled debugging on.")
log_admin("[key_name(src)] toggled debugging on.")
feedback_add_details("admin_verb","DG2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","DG2") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -1,27 +1,4 @@
/client/proc /client/proc
general_report()
set category = "Debug"
set name = "Show General Report"
if(!master_controller)
usr << alert("Master_controller not found.")
var/mobs = 0
for(var/mob/M in mob_list)
mobs++
var/output = {"<B>GENERAL SYSTEMS REPORT</B><HR>
<B>General Processing Data</B><BR>
<B># of Machines:</B> [machines.len]<BR>
<B># of Pipe Networks:</B> [pipe_networks.len]<BR>
<B># of Processing Items:</B> [processing_objects.len]<BR>
<B># of Power Nets:</B> [powernets.len]<BR>
<B># of Mobs:</B> [mobs]<BR>
"}
usr << browse(output,"window=generalreport")
feedback_add_details("admin_verb","SGR") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
air_report() air_report()
set category = "Debug" set category = "Debug"
set name = "Show Air Report" set name = "Show Air Report"
@@ -156,13 +133,10 @@
set name = "Reload Admins" set name = "Reload Admins"
set category = "Debug" set category = "Debug"
if(!(usr.client.holder && usr.client.holder.level >= 6)) // protect and prevent if(!check_rights(R_SERVER)) return
usr << "\red Not a good cop"
return
message_admins("[usr] manually reloaded admins.txt") message_admins("[usr] manually reloaded admins.txt")
usr << "You reload admins.txt" load_admins()
world.load_admins()
feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","RLDA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -5,7 +5,7 @@
var/method = 0 //0 means strict type detection while 1 means this type and all subtypes (IE: /obj/item with this set to 1 will set it to ALL itms) var/method = 0 //0 means strict type detection while 1 means this type and all subtypes (IE: /obj/item with this set to 1 will set it to ALL itms)
if(!admin_rank_check(src.holder.level, 3)) return if(!check_rights(R_VAREDIT)) return
if(A && A.type) if(A && A.type)
if(typesof(A.type)) if(typesof(A.type))
@@ -24,11 +24,9 @@
/client/proc/massmodify_variables(var/atom/O, var/var_name = "", var/method = 0) /client/proc/massmodify_variables(var/atom/O, var/var_name = "", var/method = 0)
var/list/locked = list("vars", "key", "ckey", "client") if(!check_rights(R_VAREDIT)) return
if(!src.holder) var/list/locked = list("vars", "key", "ckey", "client")
src << "Only administrators may use this command."
return
for(var/p in forbidden_varedit_object_types) for(var/p in forbidden_varedit_object_types)
if( istype(O,p) ) if( istype(O,p) )
@@ -48,17 +46,13 @@
else else
variable = var_name variable = var_name
if(!variable) if(!variable) return
return
var/default var/default
var/var_value = O.vars[variable] var/var_value = O.vars[variable]
var/dir var/dir
if (locked.Find(variable) && !(src.holder.rank in list("Game Master", "Game Admin"))) if(variable == "holder" || (variable in locked))
return if(!check_rights(R_DEBUG)) return
if (variable == "holder" && holder.rank != "Game Master") //Hotfix, a bit ugly but that exploit has been there for ages and now somebody just had to go and tell everyone of it bluh bluh - U
return
if(isnull(var_value)) if(isnull(var_value))
usr << "Unable to determine variable type." usr << "Unable to determine variable type."

View File

@@ -126,6 +126,8 @@ var/list/forbidden_varedit_object_types = list(
L += var_value L += var_value
/client/proc/mod_list(var/list/L) /client/proc/mod_list(var/list/L)
if(!check_rights(R_VAREDIT)) return
if(!istype(L,/list)) src << "Not a List." if(!istype(L,/list)) src << "Not a List."
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine", "poo", "icon", "icon_state") var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "viruses", "cuffed", "ka", "last_eaten", "urine", "poo", "icon", "icon_state")
@@ -144,8 +146,8 @@ var/list/forbidden_varedit_object_types = list(
var/dir var/dir
if (locked.Find(variable) && !(src.holder.rank in list("Game Master", "Game Admin"))) if(variable in locked)
return if(!check_rights(R_DEBUG)) return
if(isnull(variable)) if(isnull(variable))
usr << "Unable to determine variable type." usr << "Unable to determine variable type."
@@ -264,12 +266,9 @@ var/list/forbidden_varedit_object_types = list(
/client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0) /client/proc/modify_variables(var/atom/O, var/param_var_name = null, var/autodetect_class = 0)
var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "icon", "icon_state", "mutantrace") if(!check_rights(R_VAREDIT)) return
if(!src.holder) var/list/locked = list("vars", "key", "ckey", "client", "firemut", "ishulk", "telekinesis", "xray", "virus", "cuffed", "ka", "last_eaten", "icon", "icon_state", "mutantrace")
src << "Only administrators may use this command."
return
if(!admin_rank_check(src.holder.level, 3)) return
for(var/p in forbidden_varedit_object_types) for(var/p in forbidden_varedit_object_types)
if( istype(O,p) ) if( istype(O,p) )
@@ -285,13 +284,8 @@ var/list/forbidden_varedit_object_types = list(
src << "A variable with this name ([param_var_name]) doesn't exist in this atom ([O])" src << "A variable with this name ([param_var_name]) doesn't exist in this atom ([O])"
return return
if (param_var_name == "holder" && holder.rank != "Game Master") if(param_var_name == "holder" || (param_var_name in locked))
src << "No. Stop being stupid." if(!check_rights(R_DEBUG)) return
return
if (locked.Find(param_var_name) && !(src.holder.rank in list("Game Master", "Game Admin")))
src << "Editing this variable requires you to be a game master or game admin."
return
variable = param_var_name variable = param_var_name
@@ -345,15 +339,11 @@ var/list/forbidden_varedit_object_types = list(
names = sortList(names) names = sortList(names)
variable = input("Which var?","Var") as null|anything in names variable = input("Which var?","Var") as null|anything in names
if(!variable) if(!variable) return
return
var_value = O.vars[variable] var_value = O.vars[variable]
if (locked.Find(variable) && !(src.holder.rank in list("Game Master", "Game Admin"))) if(variable == "holder" || (variable in locked))
return if(!check_rights(R_DEBUG)) return
if (variable == "holder" && holder.rank != "Game Master") //Hotfix, a bit ugly but that exploit has been there for ages and now somebody just had to go and tell everyone of it bluh bluh - U
return
if(!autodetect_class) if(!autodetect_class)

View File

@@ -1,47 +1,28 @@
/client/proc/play_sound(S as sound) /client/proc/play_sound(S as sound)
set category = "Fun" set category = "Fun"
set name = "Play Global Sound" set name = "Play Global Sound"
if(!check_rights(R_SOUNDS)) return
if(!src.holder)
src << "Only administrators may use this command."
return
var/sound/uploaded_sound = sound(S, repeat = 0, wait = 1, channel = 777) var/sound/uploaded_sound = sound(S, repeat = 0, wait = 1, channel = 777)
uploaded_sound.priority = 250 uploaded_sound.priority = 250
if(src.holder.rank == "Game Master" || src.holder.rank == "Game Admin" || src.holder.rank == "Badmin") log_admin("[key_name(src)] played sound [S]")
log_admin("[key_name(src)] played sound [S]") message_admins("[key_name_admin(src)] played sound [S]", 1)
message_admins("[key_name_admin(src)] played sound [S]", 1) for(var/mob/M in player_list)
for(var/mob/M in player_list) if(M.client.midis)
if(M.client.midis) M << uploaded_sound
M << uploaded_sound
else
if(usr.client.canplaysound)
usr.client.canplaysound = 0
log_admin("[key_name(src)] played sound [S]")
message_admins("[key_name_admin(src)] played sound [S]", 1)
for(var/mob/M in player_list)
if(M.client.midis)
M << uploaded_sound
else
usr << "You already used up your jukebox monies this round!"
del(uploaded_sound)
feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","PGS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/client/proc/play_local_sound(S as sound) /client/proc/play_local_sound(S as sound)
set category = "Fun" set category = "Fun"
set name = "Play Local Sound" set name = "Play Local Sound"
if(!check_rights(R_SOUNDS)) return
if(!src.holder) log_admin("[key_name(src)] played a local sound [S]")
src << "Only administrators may use this command." message_admins("[key_name_admin(src)] played a local sound [S]", 1)
return playsound(get_turf_loc(src.mob), S, 50, 0, 0)
if(src.holder.rank == "Game Master" || src.holder.rank == "Game Admin")
log_admin("[key_name(src)] played a local sound [S]")
message_admins("[key_name_admin(src)] played a local sound [S]", 1)
playsound(get_turf_loc(src.mob), S, 50, 0, 0)
return
feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","PLS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!

View File

@@ -787,20 +787,14 @@ Traitors and the like can also be revived with the previous role mostly intact.
return return
/client/proc/admin_cancel_shuttle() /client/proc/admin_cancel_shuttle()
set category = "Admin" set category = "Admin"
set name = "Cancel Shuttle" set name = "Cancel Shuttle"
if(!check_rights(0)) return
if(alert(src, "You sure?", "Confirm", "Yes", "No") != "Yes") return
if ((!( ticker ) || emergency_shuttle.location || emergency_shuttle.direction == 0)) if(!ticker || emergency_shuttle.location || emergency_shuttle.direction == 0)
return return
if (!holder)
src << "Only administrators may use this command."
return
var/confirm = alert(src, "You sure?", "Confirm", "Yes", "No")
if(confirm != "Yes") return
emergency_shuttle.recall() emergency_shuttle.recall()
feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! feedback_add_details("admin_verb","CCSHUT") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
log_admin("[key_name(usr)] admin-recalled the emergency shuttle.") log_admin("[key_name(usr)] admin-recalled the emergency shuttle.")

View File

@@ -5,28 +5,20 @@
set name = "Set Ticklag" set name = "Set Ticklag"
set desc = "Sets a new tick lag. Recommend you don't mess with this too much! Stable, time-tested ticklag value is 0.9" set desc = "Sets a new tick lag. Recommend you don't mess with this too much! Stable, time-tested ticklag value is 0.9"
if(src.holder) if(!check_rights(R_DEBUG)) return
if(!src.mob) return
if(src.holder.rank in list("Game Admin", "Game Master")) var/newtick = input("Sets a new tick lag. Please don't mess with this too much! The stable, time-tested ticklag value is 0.9","Lag of Tick", world.tick_lag) as num|null
var/newtick = input("Sets a new tick lag. Please don't mess with this too much! The stable, time-tested ticklag value is 0.9","Lag of Tick", world.tick_lag) as num|null //I've used ticks of 2 before to help with serious singulo lags
//I've used ticks of 2 before to help with serious singulo lags if(newtick && newtick <= 2 && newtick > 0)
if(newtick && newtick <= 2 && newtick > 0) log_admin("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
log_admin("[key_name(src)] has modified world.tick_lag to [newtick]", 0) message_admins("[key_name(src)] has modified world.tick_lag to [newtick]", 0)
message_admins("[key_name(src)] has modified world.tick_lag to [newtick]", 0) world.tick_lag = newtick
world.tick_lag = newtick feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
feedback_add_details("admin_verb","TICKLAG") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
switch(alert("Enable Tick Compensation?","Tick Comp is currently: [config.Tickcomp]","Yes","No")) switch(alert("Enable Tick Compensation?","Tick Comp is currently: [config.Tickcomp]","Yes","No"))
if("Yes") if("Yes") config.Tickcomp = 1
config.Tickcomp = 1 else config.Tickcomp = 0
else else
config.Tickcomp = 0 src << "\red Error: ticklag(): Invalid world.ticklag value. No changes made."
return
src << "\red Error: ticklag(): Invalid world.ticklag value. No changes made."
return
src << "\red Error: ticklag(): You are not authorised to use this. Game Admins and higher only."
return

View File

@@ -103,7 +103,6 @@
if(holder) if(holder)
admins += src admins += src
holder.owner = src holder.owner = src
holder.state = null
. = ..() //calls mob.Login() . = ..() //calls mob.Login()
@@ -112,6 +111,7 @@
world.update_status() world.update_status()
if(holder) if(holder)
update_admin()
admin_memo_show() admin_memo_show()
log_client_to_db() log_client_to_db()
@@ -122,7 +122,6 @@
////////////// //////////////
/client/Del() /client/Del()
if(holder) if(holder)
holder.state = null
holder.owner = null holder.owner = null
admins -= src admins -= src
directory -= ckey directory -= ckey
@@ -175,12 +174,10 @@
if(sql_id) if(sql_id)
//Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables //Player already identified previously, we need to just update the 'lastseen', 'ip' and 'computer_id' variables
var/DBQuery/query_update = dbcon.NewQuery("UPDATE erro_player SET lastseen = Now(), ip = '[sql_ip]', computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]' WHERE id = [sql_id]") var/DBQuery/query_update = dbcon.NewQuery("UPDATE erro_player SET lastseen = Now(), ip = '[sql_ip]', computerid = '[sql_computerid]', lastadminrank = '[sql_admin_rank]' WHERE id = [sql_id]")
query_update.Execute() query_update.Execute()
else else
//New player!! Need to insert all the stuff //New player!! Need to insert all the stuff
var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO erro_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')") var/DBQuery/query_insert = dbcon.NewQuery("INSERT INTO erro_player (id, ckey, firstseen, lastseen, ip, computerid, lastadminrank) VALUES (null, '[sql_ckey]', Now(), Now(), '[sql_ip]', '[sql_computerid]', '[sql_admin_rank]')")
query_insert.Execute() query_insert.Execute()

View File

@@ -1,9 +1,5 @@
//handles setting lastKnownIP and computer_id for use by the ban systems as well as checking for multikeying //handles setting lastKnownIP and computer_id for use by the ban systems as well as checking for multikeying
/mob/proc/update_Login_details() /mob/proc/update_Login_details()
//trigger admin holder updates. This is hear as all Login() calls this proc.
if(client.holder)
client.update_admins(client.holder.rank)
//Multikey checks and logging //Multikey checks and logging
lastKnownIP = client.address lastKnownIP = client.address
computer_id = client.computer_id computer_id = client.computer_id

View File

@@ -427,20 +427,20 @@ var/list/slot_equipment_priority = list( \
set category = "OOC" set category = "OOC"
var/is_admin = 0 var/is_admin = 0
if (client.holder && client.holder.level >= 1 && ( client.holder.state == 2 || client.holder.level > 3 )) if(client.holder && (client.holder.rights & R_ADMIN))
is_admin = 1 is_admin = 1
else if (istype(src, /mob/new_player) || stat != 2) else if(stat != DEAD || istype(src, /mob/new_player))
usr << "\blue You must be observing to use this!" usr << "\blue You must be observing to use this!"
return return
if (is_admin && stat == 2) if(is_admin && stat == DEAD)
is_admin = 0 is_admin = 0
var/list/names = list() var/list/names = list()
var/list/namecounts = list() var/list/namecounts = list()
var/list/creatures = list() var/list/creatures = list()
for(var/obj/O in world) for(var/obj/O in world) //EWWWWWWWWWWWWWWWWWWWWWWWW ~needs to be optimised
if(!O.loc) if(!O.loc)
continue continue
if(istype(O, /obj/item/weapon/disk/nuclear)) if(istype(O, /obj/item/weapon/disk/nuclear))

View File

@@ -176,11 +176,11 @@ datum/preferences
if(config.allow_Metadata) if(config.allow_Metadata)
dat += "<b>OOC Notes:</b> <a href='byond://?src=\ref[user];preference=metadata;task=input'> Edit </a><br>" dat += "<b>OOC Notes:</b> <a href='byond://?src=\ref[user];preference=metadata;task=input'> Edit </a><br>"
if((user.client) && (user.client.holder) && (user.client.holder.rank)) if(user.client && user.client.holder)
dat += "<b>Adminhelp sound</b>: " dat += "<b>Adminhelp sound</b>: "
dat += "[(sound_adminhelp)?"On":"Off"] <a href='byond://?src=\ref[user];preference=hear_adminhelps'>toggle</a><br>" dat += "[(sound_adminhelp)?"On":"Off"] <a href='byond://?src=\ref[user];preference=hear_adminhelps'>toggle</a><br>"
if(user.client.holder.level >= 5) if(user.client.holder.rights & R_FUN)
dat += "<br><b>OOC</b><br>" dat += "<br><b>OOC</b><br>"
dat += "<a href='byond://?src=\ref[user];preference=ooccolor;task=input'>Change color</a> <font face=\"fixedsys\" size=\"3\" color=\"[ooccolor]\"><table style='display:inline;' bgcolor=\"[ooccolor]\"><tr><td>__</td></tr></table></font><br>" dat += "<a href='byond://?src=\ref[user];preference=ooccolor;task=input'>Change color</a> <font face=\"fixedsys\" size=\"3\" color=\"[ooccolor]\"><table style='display:inline;' bgcolor=\"[ooccolor]\"><tr><td>__</td></tr></table></font><br>"

View File

@@ -49,4 +49,6 @@ h1.alert, h2.alert {color: #000000;}
.alien {color: #543354;} .alien {color: #543354;}
.newscaster {color: #800000;} .newscaster {color: #800000;}
.interface {color: #330033;}
</style>"} </style>"}

View File

@@ -18,7 +18,7 @@
src.load_mode() src.load_mode()
src.load_motd() src.load_motd()
src.load_admins() load_admins()
investigate_reset() investigate_reset()
if (config.usewhitelist) if (config.usewhitelist)
load_whitelist() load_whitelist()
@@ -188,84 +188,6 @@ Starting up. [time2text(world.timeofday, "hh:mm.ss")]
/world/proc/load_motd() /world/proc/load_motd()
join_motd = file2text("config/motd.txt") join_motd = file2text("config/motd.txt")
/world/proc/load_admins()
if(config.admin_legacy_system)
//Legacy admin system uses admins.txt - It's not fucking legacy Erro. It's standard. I can assure you more people will be using 'legacy' than sql. SQL is lame. ~carnie
var/list/Lines = file2list("config/admins.txt")
for(var/line in Lines)
if(!line) continue
if(copytext(line, 1, 2) == ";")
continue
var/pos = findtext(line, " - ", 1, null)
if(pos)
var/m_key = copytext(line, 1, pos)
var/a_lev = copytext(line, pos + 3, length(line) + 1)
admin_datums[m_key] = new /datum/admins(a_lev)
diary << ("ADMIN: [m_key] = [a_lev]")
else
//The current admin system uses SQL
var/user = sqlfdbklogin
var/pass = sqlfdbkpass
var/db = sqlfdbkdb
var/address = sqladdress
var/port = sqlport
var/DBConnection/dbcon = new()
dbcon.Connect("dbi:mysql:[db]:[address]:[port]","[user]","[pass]")
if(!dbcon.IsConnected())
diary << "Failed to connect to database in load_admins(). Reverting to legacy system."
config.admin_legacy_system = 1
load_admins()
return
var/DBQuery/query = dbcon.NewQuery("SELECT ckey, rank, level, flags FROM erro_admin")
query.Execute()
while(query.NextRow())
var/adminckey = query.item[1]
var/adminrank = query.item[2]
var/adminlevel = query.item[3]
if(istext(adminlevel))
adminlevel = text2num(adminlevel)
var/permissions = query.item[4]
if(istext(permissions))
permissions = text2num(permissions)
//This list of stuff translates the permission defines the database uses to the permission structure that the game uses.
var/permissions_actual = 0
if(permissions & SQL_BUILDMODE)
permissions_actual |= BUILDMODE
if(permissions & SQL_ADMIN)
permissions_actual |= ADMIN
if(permissions & SQL_BAN)
permissions_actual |= BAN
if(permissions & SQL_FUN)
permissions_actual |= FUN
if(permissions & SQL_SERVER)
permissions_actual |= SERVER
if(permissions & SQL_DEBUG)
permissions_actual |= ADMDEBUG
if(permissions & SQL_POSSESS)
permissions_actual |= POSSESS
if(permissions & SQL_PERMISSIONS)
permissions_actual |= PERMISSIONS
if(adminrank == "Removed")
return //This person was de-adminned. They are only in the admin list for archive purposes.
var/datum/admins/AD = new /datum/admins(adminrank)
AD.level = adminlevel //Legacy support for old verbs
AD.sql_permissions = permissions_actual
admin_datums[adminckey] = AD
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()
return
/world/proc/load_configuration() /world/proc/load_configuration()
config = new /datum/configuration() config = new /datum/configuration()
config.load("config/config.txt") config.load("config/config.txt")

39
config/admin_ranks.txt Normal file
View File

@@ -0,0 +1,39 @@
########################################################################################
# ADMIN RANK DEFINES #
# The format of this is very simple. Rank name goes first. #
# Rank is CASE-SENSITIVE, all punctuation will be stripped so spaces don't matter. #
# Each rank is then followed by keywords with the prefix "+". #
# These keywords represent groups of verbs and abilities which are given to that rank. #
# +@ (or +prev) is a special shorthand which adds all the rights of the rank above it. #
# Ranks with no keywords will just be given the most basic verbs and abilities ~Carn #
########################################################################################
# PLEASE NOTE: depending on config options, some abilities will be unavailable regardless if you have permission to use them!
# ALSO NOTE: this is a WorkInProgress at the moment. Most of this is just arbitrarily thrown in whatever group because LoadsaWork2Do+LittleTime.
# I'll be doing more moving around as feedback comes in. So be sure to check the notes after updates.
# KEYWORDS:
# +ADMIN = general admin tools, verbs etc
# +FUN = mob-transformation, events, other event-orientated actions
# +BAN = the ability to ban, jobban and fullban
# +STEALTH = the ability to stealthmin (make yourself appear with a fake name to everyone but other admins
# +POSSESS = the ability to possess objects
# +REJUV (or +REJUVINATE) = the ability to heal, respawn, modify damage and use godmode
# +BUILD (or +BUILDMODE) = the ability to use buildmode
# +SERVER = higher-risk admin verbs and abilities, such as those which affect the server configuration.
# +DEBUG = debug tools used for diagnosing and fixing problems. It's useful to give this to coders so they can investigate problems on a live server
# +VAREDIT = everyone may view viewvars/debugvars/whatever you call it. This keyword allows you to actually EDIT those variables.
# +RIGHTS (or +PERMISSIONS) = allows you to promote and/or demote people.
# +SOUND (or +SOUNDS) = allows you to upload and play sounds
# +EVERYTHING (or +HOST or +ALL) = Simply gives you everything without having to type every flag
Admin Observer
Moderator +ADMIN
Admin Candidate +@
Trial Admin +@ +FUN +REJUV +VAREDIT +BAN
Badmin +@ +POSSESS +BUILDMODE +SERVER
Game Admin +@ +STEALTH +SOUNDS +DEBUG
Game Master +EVERYTHING
Host +EVERYTHING
Coder +DEBUG +VAREDIT +SERVER

View File

@@ -1,3 +1,10 @@
######################################################################
# Basically, ckey goes first. Rank goes after the "-" #
# Case is not important for ckey. #
# Case IS important for the rank. However punctuation/spaces are not #
# Ranks can be anything defined in admin_ranks.txt ~Carn #
######################################################################
quarxink - Game Master quarxink - Game Master
tle - Game Master tle - Game Master
xsi - Game Master xsi - Game Master

View File

@@ -6,266 +6,6 @@
// BEGIN_FILE_DIR // BEGIN_FILE_DIR
#define FILE_DIR . #define FILE_DIR .
#define FILE_DIR ".svn"
#define FILE_DIR ".svn/pristine"
#define FILE_DIR ".svn/pristine/00"
#define FILE_DIR ".svn/pristine/01"
#define FILE_DIR ".svn/pristine/02"
#define FILE_DIR ".svn/pristine/03"
#define FILE_DIR ".svn/pristine/04"
#define FILE_DIR ".svn/pristine/05"
#define FILE_DIR ".svn/pristine/06"
#define FILE_DIR ".svn/pristine/07"
#define FILE_DIR ".svn/pristine/08"
#define FILE_DIR ".svn/pristine/09"
#define FILE_DIR ".svn/pristine/0a"
#define FILE_DIR ".svn/pristine/0b"
#define FILE_DIR ".svn/pristine/0c"
#define FILE_DIR ".svn/pristine/0d"
#define FILE_DIR ".svn/pristine/0e"
#define FILE_DIR ".svn/pristine/0f"
#define FILE_DIR ".svn/pristine/10"
#define FILE_DIR ".svn/pristine/11"
#define FILE_DIR ".svn/pristine/12"
#define FILE_DIR ".svn/pristine/13"
#define FILE_DIR ".svn/pristine/14"
#define FILE_DIR ".svn/pristine/15"
#define FILE_DIR ".svn/pristine/16"
#define FILE_DIR ".svn/pristine/17"
#define FILE_DIR ".svn/pristine/18"
#define FILE_DIR ".svn/pristine/19"
#define FILE_DIR ".svn/pristine/1a"
#define FILE_DIR ".svn/pristine/1b"
#define FILE_DIR ".svn/pristine/1c"
#define FILE_DIR ".svn/pristine/1d"
#define FILE_DIR ".svn/pristine/1e"
#define FILE_DIR ".svn/pristine/1f"
#define FILE_DIR ".svn/pristine/20"
#define FILE_DIR ".svn/pristine/21"
#define FILE_DIR ".svn/pristine/22"
#define FILE_DIR ".svn/pristine/23"
#define FILE_DIR ".svn/pristine/24"
#define FILE_DIR ".svn/pristine/25"
#define FILE_DIR ".svn/pristine/26"
#define FILE_DIR ".svn/pristine/27"
#define FILE_DIR ".svn/pristine/28"
#define FILE_DIR ".svn/pristine/29"
#define FILE_DIR ".svn/pristine/2a"
#define FILE_DIR ".svn/pristine/2b"
#define FILE_DIR ".svn/pristine/2c"
#define FILE_DIR ".svn/pristine/2d"
#define FILE_DIR ".svn/pristine/2e"
#define FILE_DIR ".svn/pristine/2f"
#define FILE_DIR ".svn/pristine/30"
#define FILE_DIR ".svn/pristine/31"
#define FILE_DIR ".svn/pristine/32"
#define FILE_DIR ".svn/pristine/33"
#define FILE_DIR ".svn/pristine/34"
#define FILE_DIR ".svn/pristine/35"
#define FILE_DIR ".svn/pristine/36"
#define FILE_DIR ".svn/pristine/37"
#define FILE_DIR ".svn/pristine/38"
#define FILE_DIR ".svn/pristine/39"
#define FILE_DIR ".svn/pristine/3a"
#define FILE_DIR ".svn/pristine/3b"
#define FILE_DIR ".svn/pristine/3c"
#define FILE_DIR ".svn/pristine/3d"
#define FILE_DIR ".svn/pristine/3e"
#define FILE_DIR ".svn/pristine/3f"
#define FILE_DIR ".svn/pristine/40"
#define FILE_DIR ".svn/pristine/41"
#define FILE_DIR ".svn/pristine/42"
#define FILE_DIR ".svn/pristine/43"
#define FILE_DIR ".svn/pristine/44"
#define FILE_DIR ".svn/pristine/45"
#define FILE_DIR ".svn/pristine/46"
#define FILE_DIR ".svn/pristine/47"
#define FILE_DIR ".svn/pristine/48"
#define FILE_DIR ".svn/pristine/49"
#define FILE_DIR ".svn/pristine/4a"
#define FILE_DIR ".svn/pristine/4b"
#define FILE_DIR ".svn/pristine/4c"
#define FILE_DIR ".svn/pristine/4d"
#define FILE_DIR ".svn/pristine/4e"
#define FILE_DIR ".svn/pristine/4f"
#define FILE_DIR ".svn/pristine/50"
#define FILE_DIR ".svn/pristine/51"
#define FILE_DIR ".svn/pristine/52"
#define FILE_DIR ".svn/pristine/53"
#define FILE_DIR ".svn/pristine/54"
#define FILE_DIR ".svn/pristine/55"
#define FILE_DIR ".svn/pristine/56"
#define FILE_DIR ".svn/pristine/57"
#define FILE_DIR ".svn/pristine/58"
#define FILE_DIR ".svn/pristine/59"
#define FILE_DIR ".svn/pristine/5a"
#define FILE_DIR ".svn/pristine/5b"
#define FILE_DIR ".svn/pristine/5c"
#define FILE_DIR ".svn/pristine/5d"
#define FILE_DIR ".svn/pristine/5e"
#define FILE_DIR ".svn/pristine/5f"
#define FILE_DIR ".svn/pristine/60"
#define FILE_DIR ".svn/pristine/61"
#define FILE_DIR ".svn/pristine/62"
#define FILE_DIR ".svn/pristine/63"
#define FILE_DIR ".svn/pristine/64"
#define FILE_DIR ".svn/pristine/65"
#define FILE_DIR ".svn/pristine/66"
#define FILE_DIR ".svn/pristine/67"
#define FILE_DIR ".svn/pristine/68"
#define FILE_DIR ".svn/pristine/69"
#define FILE_DIR ".svn/pristine/6a"
#define FILE_DIR ".svn/pristine/6b"
#define FILE_DIR ".svn/pristine/6c"
#define FILE_DIR ".svn/pristine/6d"
#define FILE_DIR ".svn/pristine/6e"
#define FILE_DIR ".svn/pristine/6f"
#define FILE_DIR ".svn/pristine/70"
#define FILE_DIR ".svn/pristine/71"
#define FILE_DIR ".svn/pristine/72"
#define FILE_DIR ".svn/pristine/73"
#define FILE_DIR ".svn/pristine/74"
#define FILE_DIR ".svn/pristine/75"
#define FILE_DIR ".svn/pristine/76"
#define FILE_DIR ".svn/pristine/77"
#define FILE_DIR ".svn/pristine/78"
#define FILE_DIR ".svn/pristine/79"
#define FILE_DIR ".svn/pristine/7a"
#define FILE_DIR ".svn/pristine/7b"
#define FILE_DIR ".svn/pristine/7c"
#define FILE_DIR ".svn/pristine/7d"
#define FILE_DIR ".svn/pristine/7e"
#define FILE_DIR ".svn/pristine/7f"
#define FILE_DIR ".svn/pristine/80"
#define FILE_DIR ".svn/pristine/81"
#define FILE_DIR ".svn/pristine/82"
#define FILE_DIR ".svn/pristine/83"
#define FILE_DIR ".svn/pristine/84"
#define FILE_DIR ".svn/pristine/85"
#define FILE_DIR ".svn/pristine/86"
#define FILE_DIR ".svn/pristine/87"
#define FILE_DIR ".svn/pristine/88"
#define FILE_DIR ".svn/pristine/89"
#define FILE_DIR ".svn/pristine/8a"
#define FILE_DIR ".svn/pristine/8b"
#define FILE_DIR ".svn/pristine/8c"
#define FILE_DIR ".svn/pristine/8d"
#define FILE_DIR ".svn/pristine/8e"
#define FILE_DIR ".svn/pristine/8f"
#define FILE_DIR ".svn/pristine/90"
#define FILE_DIR ".svn/pristine/91"
#define FILE_DIR ".svn/pristine/92"
#define FILE_DIR ".svn/pristine/93"
#define FILE_DIR ".svn/pristine/94"
#define FILE_DIR ".svn/pristine/95"
#define FILE_DIR ".svn/pristine/96"
#define FILE_DIR ".svn/pristine/97"
#define FILE_DIR ".svn/pristine/98"
#define FILE_DIR ".svn/pristine/99"
#define FILE_DIR ".svn/pristine/9a"
#define FILE_DIR ".svn/pristine/9b"
#define FILE_DIR ".svn/pristine/9c"
#define FILE_DIR ".svn/pristine/9d"
#define FILE_DIR ".svn/pristine/9e"
#define FILE_DIR ".svn/pristine/9f"
#define FILE_DIR ".svn/pristine/a0"
#define FILE_DIR ".svn/pristine/a1"
#define FILE_DIR ".svn/pristine/a2"
#define FILE_DIR ".svn/pristine/a3"
#define FILE_DIR ".svn/pristine/a4"
#define FILE_DIR ".svn/pristine/a5"
#define FILE_DIR ".svn/pristine/a6"
#define FILE_DIR ".svn/pristine/a7"
#define FILE_DIR ".svn/pristine/a8"
#define FILE_DIR ".svn/pristine/a9"
#define FILE_DIR ".svn/pristine/aa"
#define FILE_DIR ".svn/pristine/ab"
#define FILE_DIR ".svn/pristine/ac"
#define FILE_DIR ".svn/pristine/ad"
#define FILE_DIR ".svn/pristine/ae"
#define FILE_DIR ".svn/pristine/af"
#define FILE_DIR ".svn/pristine/b0"
#define FILE_DIR ".svn/pristine/b1"
#define FILE_DIR ".svn/pristine/b2"
#define FILE_DIR ".svn/pristine/b3"
#define FILE_DIR ".svn/pristine/b4"
#define FILE_DIR ".svn/pristine/b5"
#define FILE_DIR ".svn/pristine/b6"
#define FILE_DIR ".svn/pristine/b7"
#define FILE_DIR ".svn/pristine/b8"
#define FILE_DIR ".svn/pristine/b9"
#define FILE_DIR ".svn/pristine/ba"
#define FILE_DIR ".svn/pristine/bb"
#define FILE_DIR ".svn/pristine/bc"
#define FILE_DIR ".svn/pristine/bd"
#define FILE_DIR ".svn/pristine/be"
#define FILE_DIR ".svn/pristine/bf"
#define FILE_DIR ".svn/pristine/c0"
#define FILE_DIR ".svn/pristine/c1"
#define FILE_DIR ".svn/pristine/c2"
#define FILE_DIR ".svn/pristine/c3"
#define FILE_DIR ".svn/pristine/c4"
#define FILE_DIR ".svn/pristine/c5"
#define FILE_DIR ".svn/pristine/c6"
#define FILE_DIR ".svn/pristine/c7"
#define FILE_DIR ".svn/pristine/c8"
#define FILE_DIR ".svn/pristine/c9"
#define FILE_DIR ".svn/pristine/ca"
#define FILE_DIR ".svn/pristine/cb"
#define FILE_DIR ".svn/pristine/cc"
#define FILE_DIR ".svn/pristine/cd"
#define FILE_DIR ".svn/pristine/ce"
#define FILE_DIR ".svn/pristine/cf"
#define FILE_DIR ".svn/pristine/d0"
#define FILE_DIR ".svn/pristine/d1"
#define FILE_DIR ".svn/pristine/d2"
#define FILE_DIR ".svn/pristine/d3"
#define FILE_DIR ".svn/pristine/d4"
#define FILE_DIR ".svn/pristine/d5"
#define FILE_DIR ".svn/pristine/d6"
#define FILE_DIR ".svn/pristine/d7"
#define FILE_DIR ".svn/pristine/d8"
#define FILE_DIR ".svn/pristine/d9"
#define FILE_DIR ".svn/pristine/da"
#define FILE_DIR ".svn/pristine/db"
#define FILE_DIR ".svn/pristine/dc"
#define FILE_DIR ".svn/pristine/dd"
#define FILE_DIR ".svn/pristine/de"
#define FILE_DIR ".svn/pristine/df"
#define FILE_DIR ".svn/pristine/e0"
#define FILE_DIR ".svn/pristine/e1"
#define FILE_DIR ".svn/pristine/e2"
#define FILE_DIR ".svn/pristine/e3"
#define FILE_DIR ".svn/pristine/e4"
#define FILE_DIR ".svn/pristine/e5"
#define FILE_DIR ".svn/pristine/e6"
#define FILE_DIR ".svn/pristine/e7"
#define FILE_DIR ".svn/pristine/e8"
#define FILE_DIR ".svn/pristine/e9"
#define FILE_DIR ".svn/pristine/ea"
#define FILE_DIR ".svn/pristine/eb"
#define FILE_DIR ".svn/pristine/ec"
#define FILE_DIR ".svn/pristine/ed"
#define FILE_DIR ".svn/pristine/ee"
#define FILE_DIR ".svn/pristine/ef"
#define FILE_DIR ".svn/pristine/f0"
#define FILE_DIR ".svn/pristine/f1"
#define FILE_DIR ".svn/pristine/f2"
#define FILE_DIR ".svn/pristine/f3"
#define FILE_DIR ".svn/pristine/f4"
#define FILE_DIR ".svn/pristine/f5"
#define FILE_DIR ".svn/pristine/f6"
#define FILE_DIR ".svn/pristine/f7"
#define FILE_DIR ".svn/pristine/f8"
#define FILE_DIR ".svn/pristine/f9"
#define FILE_DIR ".svn/pristine/fa"
#define FILE_DIR ".svn/pristine/fb"
#define FILE_DIR ".svn/pristine/fc"
#define FILE_DIR ".svn/pristine/fd"
#define FILE_DIR ".svn/pristine/fe"
#define FILE_DIR ".svn/pristine/ff"
#define FILE_DIR "bot"
#define FILE_DIR "bot/Marakov"
#define FILE_DIR "code" #define FILE_DIR "code"
#define FILE_DIR "code/__HELPERS" #define FILE_DIR "code/__HELPERS"
#define FILE_DIR "code/ATMOSPHERICS" #define FILE_DIR "code/ATMOSPHERICS"
@@ -450,15 +190,6 @@
#define FILE_DIR "code/WorkInProgress/mapload" #define FILE_DIR "code/WorkInProgress/mapload"
#define FILE_DIR "code/WorkInProgress/organs" #define FILE_DIR "code/WorkInProgress/organs"
#define FILE_DIR "code/WorkInProgress/virus2" #define FILE_DIR "code/WorkInProgress/virus2"
#define FILE_DIR "config"
#define FILE_DIR "config/names"
#define FILE_DIR "data"
#define FILE_DIR "data/logs"
#define FILE_DIR "data/logs/2012"
#define FILE_DIR "data/logs/2012/10-October"
#define FILE_DIR "data/player_saves"
#define FILE_DIR "data/player_saves/g"
#define FILE_DIR "data/player_saves/g/giacomand"
#define FILE_DIR "html" #define FILE_DIR "html"
#define FILE_DIR "icons" #define FILE_DIR "icons"
#define FILE_DIR "icons/effects" #define FILE_DIR "icons/effects"
@@ -473,7 +204,6 @@
#define FILE_DIR "icons/obj/machines" #define FILE_DIR "icons/obj/machines"
#define FILE_DIR "icons/obj/pipes" #define FILE_DIR "icons/obj/pipes"
#define FILE_DIR "icons/pda_icons" #define FILE_DIR "icons/pda_icons"
#define FILE_DIR "icons/PSD files"
#define FILE_DIR "icons/spideros_icons" #define FILE_DIR "icons/spideros_icons"
#define FILE_DIR "icons/Testing" #define FILE_DIR "icons/Testing"
#define FILE_DIR "icons/turf" #define FILE_DIR "icons/turf"
@@ -482,7 +212,6 @@
#define FILE_DIR "interface" #define FILE_DIR "interface"
#define FILE_DIR "maps" #define FILE_DIR "maps"
#define FILE_DIR "maps/RandomZLevels" #define FILE_DIR "maps/RandomZLevels"
#define FILE_DIR "music"
#define FILE_DIR "sound" #define FILE_DIR "sound"
#define FILE_DIR "sound/AI" #define FILE_DIR "sound/AI"
#define FILE_DIR "sound/ambience" #define FILE_DIR "sound/ambience"
@@ -496,18 +225,8 @@
#define FILE_DIR "sound/violin" #define FILE_DIR "sound/violin"
#define FILE_DIR "sound/voice" #define FILE_DIR "sound/voice"
#define FILE_DIR "sound/weapons" #define FILE_DIR "sound/weapons"
#define FILE_DIR "SQL"
#define FILE_DIR "tools" #define FILE_DIR "tools"
#define FILE_DIR "tools/Redirector" #define FILE_DIR "tools/Redirector"
#define FILE_DIR "tools/Runtime Condenser"
#define FILE_DIR "tools/UnstandardnessTestForDM"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/bin/Debug"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/obj/x86/Debug"
#define FILE_DIR "tools/UnstandardnessTestForDM/UnstandardnessTestForDM/Properties"
// END_FILE_DIR // END_FILE_DIR
// BEGIN_PREFERENCES // BEGIN_PREFERENCES
@@ -1101,6 +820,7 @@
#include "code\modules\admin\admin.dm" #include "code\modules\admin\admin.dm"
#include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_investigate.dm"
#include "code\modules\admin\admin_memo.dm" #include "code\modules\admin\admin_memo.dm"
#include "code\modules\admin\admin_ranks.dm"
#include "code\modules\admin\admin_verbs.dm" #include "code\modules\admin\admin_verbs.dm"
#include "code\modules\admin\banjob.dm" #include "code\modules\admin\banjob.dm"
#include "code\modules\admin\create_mob.dm" #include "code\modules\admin\create_mob.dm"
@@ -1112,10 +832,9 @@
#include "code\modules\admin\newbanjob.dm" #include "code\modules\admin\newbanjob.dm"
#include "code\modules\admin\player_notes.dm" #include "code\modules\admin\player_notes.dm"
#include "code\modules\admin\player_panel.dm" #include "code\modules\admin\player_panel.dm"
#include "code\modules\admin\topic.dm"
#include "code\modules\admin\ToRban.dm" #include "code\modules\admin\ToRban.dm"
#include "code\modules\admin\DB ban\functions.dm" #include "code\modules\admin\DB ban\functions.dm"
#include "code\modules\admin\permissionverbs\assignment.dm"
#include "code\modules\admin\permissionverbs\permissionedit.dm"
#include "code\modules\admin\verbs\adminhelp.dm" #include "code\modules\admin\verbs\adminhelp.dm"
#include "code\modules\admin\verbs\adminjump.dm" #include "code\modules\admin\verbs\adminjump.dm"
#include "code\modules\admin\verbs\adminpm.dm" #include "code\modules\admin\verbs\adminpm.dm"