Tweaked Moderators:

* They have their own channel msay, which all mods and admins can use.
* They cannot see or use asay, but they can see and respond to adminhelps and admin PM's.
* Their PM's will come up in maroon and show MOD PM.
* They have a moderator panel that shows name, ckey, IP and CID.
* They can use Set-Play, Set-Observe, Show-Skills, and can read and write Player Info.
* They can Deadmin themselves for the round.

Other Changes:

* Player info now shows the rank of who typed what.
* Admins are messages when player info is modified.
* Tweaks to prevent moderators using some commands.
This commit is contained in:
Erthilo
2012-06-02 20:14:23 +01:00
parent a6871ee9e6
commit ae316d58f8
9 changed files with 279 additions and 89 deletions

View File

@@ -6,7 +6,7 @@ var/global/BSACooldown = 0
/proc/message_admins(var/text, var/admin_ref = 0)
var/rendered = "<span class=\"admin\"><span class=\"prefix\">ADMIN LOG:</span> <span class=\"message\">[text]</span></span>"
for (var/mob/M in world)
if (M && M.client && M.client.holder && M.client.holder.level > -3) //Lets not spam our retirees.
if (M && M.client && M.client.holder && M.client.holder.level > -3 && M.client.holder.level != 0) //Lets not spam our retirees. Or moderators!
if (admin_ref)
M << dd_replaceText(rendered, "%admin_ref%", "\ref[M]")
else
@@ -176,6 +176,7 @@ var/global/BSACooldown = 0
var/datum/player_info/P = new
P.author = usr.key
P.rank = usr.client.holder.rank
P.content = add
var/modifyer = "th"
switch(time2text(world.timeofday, "DD"))
@@ -196,6 +197,9 @@ var/global/BSACooldown = 0
info << infos
message_admins("\blue [key_name_admin(usr)] has edited [key]'s notes.")
log_admin("[key_name(usr)] has edited [key]'s notes.")
del info
var/savefile/note_list = new("data/player_notes.sav")
@@ -221,6 +225,9 @@ var/global/BSACooldown = 0
infos.Remove(item)
info << infos
message_admins("\blue [key_name_admin(usr)] deleted one of [key]'s notes.")
log_admin("[key_name(usr)] deleted one of [key]'s notes.")
del info
show_player_info(key)
@@ -612,13 +619,6 @@ var/global/BSACooldown = 0
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
if("miscdept")
joblist += "pAI"
for(var/jobPos in nonhuman_positions)
if(!jobPos) continue
var/datum/job/temp = job_master.GetJob(jobPos)
if(!temp) continue
joblist += temp.title
else
joblist += href_list["jobban3"]
@@ -800,7 +800,7 @@ var/global/BSACooldown = 0
usr << browse(dat, "window=jobban2;size=600x250")
return
if(href_list["newjobban2"])
if ((src.rank in list("Moderator", "Administrator", "Badmin", "Tyrant" )))
if ((src.rank in list(/*"Moderator", */"Administrator", "Badmin", "Tyrant" )))
var/mob/M = locate(href_list["jobban4"])
var/job = href_list["newjobban2"]
if(!ismob(M)) return
@@ -877,7 +877,7 @@ var/global/BSACooldown = 0
remove_goon(t)
*/
if (href_list["mute2"])
if ((src.rank in list( "Moderator", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
if ((src.rank in list(/* "Moderator", */"Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/mob/M = locate(href_list["mute2"])
if (ismob(M))
if ((M.client && M.client.holder && (M.client.holder.level >= src.level)))
@@ -891,7 +891,7 @@ var/global/BSACooldown = 0
message_admins("\blue [key_name_admin(usr)] has [(M.client.muted ? "muted" : "voiced")] [key_name_admin(M)].", 1)
M << "You have been [(M.client.muted ? "muted" : "voiced")]. Please resolve this in adminhelp."
if (href_list["mute_complete"])
if ((src.rank in list( "Moderator", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
if ((src.rank in list(/* "Moderator", */"Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/mob/M = locate(href_list["mute_complete"])
if (ismob(M))
if ((M.client && M.client.holder && (M.client.holder.level >= src.level)))
@@ -997,7 +997,7 @@ var/global/BSACooldown = 0
return
if (href_list["sendtoprison"])
if ((src.rank in list( "Moderator", "Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
if ((src.rank in list(/* "Moderator", */"Admin Candidate", "Temporary Admin", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/confirm = alert(usr, "Send to admin prison for the round?", "Message", "Yes", "No")
if(confirm != "Yes")
@@ -1350,24 +1350,30 @@ var/global/BSACooldown = 0
// Now isn't that much better? IT IS NOW A PROC, i.e. kinda like a big panel like unstable
if (href_list["adminplayeropts"])
var/mob/M = locate(href_list["adminplayeropts"])
show_player_panel(M)
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
var/mob/M = locate(href_list["adminplayeropts"])
show_player_panel(M)
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["player_info"])
var/key = href_list["player_info"]
show_player_info(key)
if (href_list["adminplayervars"])
var/mob/M = locate(href_list["adminplayervars"])
if(src && src.owner)
if(istype(src.owner,/client))
var/client/cl = src.owner
cl.debug_variables(M)
else if(ismob(src.owner))
var/mob/MO = src.owner
if(MO.client)
var/client/cl = MO.client
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
var/mob/M = locate(href_list["adminplayervars"])
if(src && src.owner)
if(istype(src.owner,/client))
var/client/cl = src.owner
cl.debug_variables(M)
else if(ismob(src.owner))
var/mob/MO = src.owner
if(MO.client)
var/client/cl = MO.client
cl.debug_variables(M)
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["adminplayersubtlemessage"])
var/mob/M = locate(href_list["adminplayersubtlemessage"])
@@ -1382,30 +1388,38 @@ var/global/BSACooldown = 0
cl.cmd_admin_subtle_message(M)
if (href_list["adminplayerobservejump"])
var/mob/M = locate(href_list["adminplayerobservejump"])
if(src && src.owner)
if(istype(src.owner,/client))
var/client/cl = src.owner
cl.admin_observe()
sleep(2)
cl.jumptomob(M)
else if(ismob(src.owner))
var/mob/MO = src.owner
if(MO.client)
var/client/cl = MO.client
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
var/mob/M = locate(href_list["adminplayerobservejump"])
if(src && src.owner)
if(istype(src.owner,/client))
var/client/cl = src.owner
cl.admin_observe()
sleep(2)
cl.jumptomob(M)
else if(ismob(src.owner))
var/mob/MO = src.owner
if(MO.client)
var/client/cl = MO.client
cl.admin_observe()
sleep(2)
cl.jumptomob(M)
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["traitor_panel_pp"])
var/mob/M = locate(href_list["traitor_panel_pp"])
if(isnull(M))
usr << "Mob doesn't seem to exist."
return
if(!ismob(M))
usr << "This doen't seem to be a mob."
return
show_traitor_panel(M)
if(rank in list("Admin Observer", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master"))
var/mob/M = locate(href_list["traitor_panel_pp"])
if(isnull(M))
usr << "Mob doesn't seem to exist."
return
if(!ismob(M))
usr << "This doen't seem to be a mob."
return
show_traitor_panel(M)
else
alert("You cannot perform this action. You must be of a higher administrative rank!")
if (href_list["BlueSpaceArtillery"])
var/mob/M = locate(href_list["BlueSpaceArtillery"])
@@ -2239,7 +2253,7 @@ var/global/BSACooldown = 0
return
if (href_list["secretsadmin"])
if ((src.rank in list( "Moderator", "Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
if ((src.rank in list(/* "Moderator", */"Temporary Admin", "Admin Candidate", "Trial Admin", "Badmin", "Game Admin", "Game Master" )))
var/ok = 0
switch(href_list["secretsadmin"])
if("clear_bombs")
@@ -2380,7 +2394,7 @@ var/global/BSACooldown = 0
message_admins("\blue [user.ckey] warned [M.ckey].")
else
AddBan(M.ckey, M.computer_id, "Autobanning due to previous warn", user.ckey, 1, AUTOBANTIME)
M << "\red<BIG><B>You have been autobanned by [user.ckey]. This is what we in the biz like to call a \"second warning\".</B></BIG>"
M << "\red<BIG><B>You have been autobanned by [user.ckey].</B></BIG>"
M << "\red This is a temporary ban; it will automatically be removed in [AUTOBANTIME] minutes."
log_admin("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
ban_unban_log_save("[user.ckey] warned [M.ckey], resulting in a [AUTOBANTIME] minute autoban.")
@@ -2428,6 +2442,7 @@ var/global/BSACooldown = 0
body += "<b>Mob type</b> = [M.type]<br><br>"
body += "<A href='?src=\ref[src];warn=\ref[M]'>Warn</A> | "
body += "<A href='?src=\ref[src];boot2=\ref[M]'>Kick</A> | "
body += "<A href='?src=\ref[src];newban=\ref[M]'>Ban</A> | "
body += "<A href='?src=\ref[src];jobban2=\ref[M]'>Jobban</A> "
@@ -2527,10 +2542,11 @@ var/global/BSACooldown = 0
//feedback_add_details("admin_verb","SPP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc!
/datum/player_info/var
author // admin who authored the information
content // text content of the information
timestamp // Because this is bloody annoying
/datum/player_info/var/author // admin who authored the information
/datum/player_info/var/rank //rank of admin who made the notes
/datum/player_info/var/content // text content of the information
/datum/player_info/var/timestamp // Because this is bloody annoying
/obj/admins/proc/player_has_info(var/key as text)
var/savefile/info = new("data/player_saves/[copytext(key, 1, 2)]/[key]/info.sav")
@@ -2563,7 +2579,10 @@ var/global/BSACooldown = 0
if(!I.timestamp)
I.timestamp = "Pre-4/3/2012"
update_file = 1
dat += "<font color=#008800>[I.content]</font> <i>by [I.author]</i> on <i><font color=blue>[I.timestamp]</i></font> "
if(!I.rank)
I.rank = "N/A"
update_file = 1
dat += "<font color=#008800>[I.content]</font> <i>by [I.author] ([I.rank])</i> on <i><font color=blue>[I.timestamp]</i></font> "
if(I.author == usr.key)
dat += "<A href='?src=\ref[src];remove_player_info=[key];remove_index=[i]'>Remove</A>"
dat += "<br><br>"