diff --git a/code/game/machinery/kitchen/gibber.dm b/code/game/machinery/kitchen/gibber.dm index c00d181d9f7..146867ffda8 100644 --- a/code/game/machinery/kitchen/gibber.dm +++ b/code/game/machinery/kitchen/gibber.dm @@ -181,7 +181,7 @@ allmeat += newmeat for (var/mob/M in world) - if (M.client && M.client.holder && (M.client.holder.level != -3)) + if (M.client && M.client.holder && (M.client.holder.level != -3) && (M.client.holder.level != 0)) M << "\red [user.name]/[user.ckey] has gibbed [src.occupant.name]/[src.occupant.ckey]" src.occupant.death(1) src.occupant.ghostize() diff --git a/code/game/verbs/ooc.dm b/code/game/verbs/ooc.dm index 4b4d39d32b3..d138c6ece49 100644 --- a/code/game/verbs/ooc.dm +++ b/code/game/verbs/ooc.dm @@ -37,11 +37,13 @@ log_ooc("[src.name]/[src.key] : [msg]") for (var/client/C) - if (src.client.holder && (!src.client.stealth || C.holder)) + if (src.client.holder && (!src.client.stealth || ( C.holder && C.holder.level != 0))) if (src.client.holder.rank == "Admin Observer") C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]" else if (src.client.holder.rank == "Retired Admin") C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]" + else if (src.client.holder.rank == "Moderator") + C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]" else if (src.client.holder.level >= 5) C << "OOC: [src.key][src.client.stealth ? "/([src.client.fakekey])" : ""]: [msg]" else diff --git a/code/game/verbs/who.dm b/code/game/verbs/who.dm index eb45379de53..26ac9307b61 100644 --- a/code/game/verbs/who.dm +++ b/code/game/verbs/who.dm @@ -30,7 +30,7 @@ for (var/mob/M in world) if(M && M.client && M.client.holder) - if(usr.client.holder) + if(usr.client.holder && (usr.client.holder.level != 0)) usr << "[M.key] is a [M.client.holder.rank][M.client.stealth ? " (as [M.client.fakekey])" : ""]" else if(!M.client.stealth && (M.client.holder.level != -3)) usr << "\t[pick(nobles)] [M.client] is a [M.client.holder.rank]" diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index d0f0b72f56a..f0d7113b7d2 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -6,7 +6,7 @@ var/global/BSACooldown = 0 /proc/message_admins(var/text, var/admin_ref = 0) var/rendered = "ADMIN LOG: [text]" 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,62 +1350,79 @@ 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"]) - if(src && src.owner) - if(istype(src.owner,/client)) - var/client/cl = src.owner - cl.cmd_admin_subtle_message(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["adminplayersubtlemessage"]) + if(src && src.owner) + if(istype(src.owner,/client)) + var/client/cl = src.owner cl.cmd_admin_subtle_message(M) + else if(ismob(src.owner)) + var/mob/MO = src.owner + if(MO.client) + var/client/cl = MO.client + cl.cmd_admin_subtle_message(M) + else + alert("You cannot perform this action. You must be of a higher administrative rank!") 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 +2256,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 +2397,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 << "\redYou have been autobanned by [user.ckey]. This is what we in the biz like to call a \"second warning\"." + M << "\redYou have been autobanned by [user.ckey]." 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 +2445,7 @@ var/global/BSACooldown = 0 body += "Mob type = [M.type]

" + body += "Warn | " body += "Kick | " body += "Ban | " body += "Jobban " @@ -2527,10 +2545,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 +2582,10 @@ var/global/BSACooldown = 0 if(!I.timestamp) I.timestamp = "Pre-4/3/2012" update_file = 1 - dat += "[I.content] by [I.author] on [I.timestamp] " + if(!I.rank) + I.rank = "N/A" + update_file = 1 + dat += "[I.content] by [I.author] ([I.rank]) on [I.timestamp] " if(I.author == usr.key) dat += "Remove" dat += "

" diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index f7eec938d0e..270a9bfe08c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -107,52 +107,32 @@ if (holder.level >= -1) verbs += /client/proc/investigate_show verbs += /client/proc/cmd_admin_say + verbs += /client/proc/cmd_mod_say verbs += /client/proc/cmd_admin_gib_self verbs += /client/proc/deadmin_self else if (holder.level == -3) // Retired Admin verbs += /client/proc/cmd_admin_say + verbs += /client/proc/cmd_mod_say return else return //Moderator if (holder.level >= 0) - verbs += /obj/admins/proc/announce - verbs += /obj/admins/proc/startnow - verbs += /obj/admins/proc/toggleAI //Toggle the AI - verbs += /obj/admins/proc/toggleenter //Toggle enterting -// verbs += /obj/admins/proc/toggleguests //Toggle guests entering - verbs += /obj/admins/proc/toggleooc //toggle ooc - verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc - verbs += /obj/admins/proc/voteres //toggle votes - verbs += /obj/admins/proc/vmode - verbs += /obj/admins/proc/votekill - verbs += /obj/admins/proc/show_player_panel - verbs += /client/proc/deadchat //toggles deadchat - //verbs += /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro verbs += /client/proc/cmd_admin_pm_context verbs += /client/proc/cmd_admin_pm_panel - verbs += /client/proc/cmd_admin_subtle_message - //verbs += /client/proc/warn - was never used - verbs += /client/proc/dsay verbs += /client/proc/admin_play verbs += /client/proc/admin_observe - verbs += /client/proc/game_panel -// verbs += /client/proc/player_panel - verbs += /client/proc/player_panel_new - verbs += /client/proc/unban_panel - verbs += /client/proc/jobbans - - verbs += /client/proc/voting verbs += /client/proc/hide_verbs - verbs += /client/proc/general_report - //verbs += /client/proc/air_report verbs += /client/proc/deadmin_self - //verbs += /client/proc/cmd_admin_prison --Merged with player panel - //verbs += /obj/admins/proc/unprison --Merged with player panel - verbs += /client/proc/playernotes verbs += /obj/admins/proc/show_skills else return + if(holder.level == 0) //Moderators don't get asay, only msay + verbs -= /client/proc/cmd_admin_say + verbs -= /client/proc/investigate_show + verbs -= /client/proc/cmd_admin_gib_self + verbs += /client/proc/mod_panel + //Temporary Admin if (holder.level >= 1) verbs += /obj/admins/proc/delay //game start delay @@ -165,6 +145,35 @@ verbs += /client/proc/deadmin_self //verbs += /client/proc/cmd_admin_attack_log --Merged with view variables verbs += /client/proc/cmd_admin_change_custom_event + // + //MOVED FROM MODERATOR + // + verbs += /client/proc/cmd_admin_subtle_message + verbs += /obj/admins/proc/announce + verbs += /obj/admins/proc/startnow + verbs += /obj/admins/proc/toggleAI //Toggle the AI + verbs += /obj/admins/proc/toggleenter //Toggle enterting +// verbs += /obj/admins/proc/toggleguests //Toggle guests entering + verbs += /obj/admins/proc/toggleooc //toggle ooc + verbs += /obj/admins/proc/toggleoocdead //toggle ooc for dead/unc + verbs += /obj/admins/proc/voteres //toggle votes + verbs += /obj/admins/proc/vmode + verbs += /obj/admins/proc/votekill + verbs += /client/proc/deadchat //toggles deadchat + //verbs += /client/proc/cmd_admin_mute --was never used (according to stats trackind) - use show player panel --erro + verbs += /client/proc/dsay + verbs += /client/proc/game_panel + verbs += /obj/admins/proc/show_player_panel +// verbs += /client/proc/player_panel + verbs += /client/proc/player_panel_new + verbs += /client/proc/unban_panel + verbs += /client/proc/jobbans + verbs += /client/proc/voting + verbs += /client/proc/general_report + //verbs += /client/proc/air_report + //verbs += /client/proc/cmd_admin_prison --Merged with player panel + //verbs += /obj/admins/proc/unprison --Merged with player panel + verbs += /client/proc/playernotes else return //Admin Candidate @@ -393,8 +402,8 @@ verbs -= /client/proc/cmd_admin_pm_context verbs -= /client/proc/cmd_admin_pm_panel verbs -= /client/proc/cmd_admin_say + verbs -= /client/proc/cmd_mod_say verbs -= /client/proc/cmd_admin_subtle_message - //verbs -= /client/proc/warn verbs -= /client/proc/dsay verbs -= /client/proc/admin_play verbs -= /client/proc/admin_observe @@ -418,6 +427,7 @@ verbs -= /client/proc/toggle_hear_radio verbs -= /client/proc/tension_report verbs -= /client/proc/player_panel_new + verbs -= /client/proc/mod_panel verbs -= /client/proc/toggle_gravity_on verbs -= /client/proc/toggle_gravity_off verbs -= /client/proc/toggle_random_events @@ -428,7 +438,7 @@ verbs -= /client/proc/getserverlog verbs -= /client/proc/cinematic //show a cinematic sequence verbs -= /client/proc/admin_memo - verbs -= /client/proc/investigate_show + verbs -= /client/proc/investigate_show verbs -= /client/proc/cmd_admin_change_custom_event verbs -= /client/proc/admin_invis verbs -= /client/proc/callprocgen @@ -538,6 +548,14 @@ // feedback_add_details("admin_verb","PPN") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! return +/client/proc/mod_panel() + set name = "Moderator Panel" + set category = "Admin" + if(holder) + holder.mod_panel() +// feedback_add_details("admin_verb","MP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + return + /client/proc/check_antagonists() set name = "Check Antagonists" set category = "Admin" @@ -836,6 +854,7 @@ verbs += /client/proc/deadchat //toggles deadchat verbs += /obj/admins/proc/toggleooc //toggle ooc verbs += /client/proc/cmd_admin_say//asay + verbs += /client/proc/cmd_mod_say 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 @@ -856,6 +875,7 @@ verbs += /client/proc/deadchat //toggles deadchat verbs += /obj/admins/proc/toggleooc //toggle ooc verbs += /client/proc/cmd_admin_say//asay + verbs += /client/proc/cmd_mod_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 diff --git a/code/modules/admin/player_panel.dm b/code/modules/admin/player_panel.dm index 2c87cf9410a..408815774e9 100644 --- a/code/modules/admin/player_panel.dm +++ b/code/modules/admin/player_panel.dm @@ -113,6 +113,113 @@ usr << browse(dat, "window=players;size=905x600") + +/obj/admins/proc/mod_panel()//The new one + if (!usr.client.holder) + return + var/dat = "Player Menu" + dat += "" + //add to this if wanting to add back in IP checking + //add if you want to know their ip to the lists below + var/list/mobs = get_sorted_mobs() + var/i = 1 + + for(var/mob/M in mobs) + if(M.ckey) + var/color = "#e6e6e6" + i++ + if(i%2 == 0) + color = "#f2f2f2" + var/real = (M.real_name == M.original_name ? "[M.name]/[M.real_name]" : "[M.original_name] (as [M.name]/[M.real_name])") + var/turf/T = get_turf(M) + var/client_key = (M.key? M.key : "No key") + dat += "" // Adds current name +/* if(isobserver(M)) + dat += "" + else if(isalien(M)) + dat += "" + else if(islarva(M)) + dat += "" + else if(istajaran(M)) + dat += "" + else if(ishuman(M)) + dat += "" + else if(ismetroid(M)) + dat += "" + else if(ismonkey(M)) + dat += "" + else if(isAI(M)) + dat += "" + else if(ispAI(M)) + dat += "" + else if(isrobot(M)) + dat += "" + else if(isanimal(M)) + dat += "" + else if(iscorgi(M)) + dat += "" + else if(istype(M,/mob/new_player)) + dat += "" + else + dat += "\black" + + if(M.mind && M.mind.assigned_role && istype(M, /mob/living/carbon/human)) // Adds a column to Player Panel that shows their current job. + var/mob/living/carbon/human/H = M + + if (H.wear_id) + var/obj/item/weapon/card/id/id + + if(istype(H.wear_id, /obj/item/device/pda)) + var/obj/item/device/pda/PDA = H.wear_id + if(!isnull(PDA.id)) // The PDA may contain no ID + id = PDA.id // The ID is contained inside the PDA + + else + id = H.wear_id // The ID was on the ID slot + + if(!id) // Happens when there's no ID in the PDA located on the wear_id slot + dat += "" + + else if(isnull(id.assignment)) // Preventing runtime errors blocking the player panel + if(istype(id, /obj/item/weapon/card/id/syndicate)) + dat += "" + else + usr << "ERROR: Inform the coders that an [id.name] was checked for its assignment variable, and it was null." + dat += "" + + else + if(M.mind.assigned_role == id.assignment) // Polymorph + dat += "" + + else + dat += "" + + else + dat += "" +*/ + dat += {" + "} + + dat += {" + + "} + +/* switch(is_special_character(M)) + if(0) + dat += {""} + if(1) + dat += {""} + if(2) + dat += {""} +*/ + dat += "
Name/Real NameIP/CIDInfoOptions
IP:Type Assigned Job Traitor?(IP: [M.lastKnownIP])
[real]
[M.client ? M.client : "No client ([client_key])"] at ([T.x], [T.y], [T.z])
GhostAlienAlien larvaTajaran[M.job]MetroidMonkeyAIpAICyborgAnimalCorgiNew Player\red ERROR[M.mind.assigned_role] (No ID)AntagonistERROR[M.mind.assigned_role][M.mind.assigned_role] ([id.assignment])" + + else + dat += "[M.mind.assigned_role] (No ID)No Assigned RoleIP: [M.client.address]
+ CID: [M.client.computer_id]
[player_has_info(M.ckey) ? "Info" : "N/A"] PMTraitor?Traitor?Traitor?
" + + usr << browse(dat, "window=players;size=600x600") + //The old one /obj/admins/proc/player_panel_old() if (!usr.client.holder) diff --git a/code/modules/admin/verbs/adminpm.dm b/code/modules/admin/verbs/adminpm.dm index 94bd6098f51..2c0f9eba325 100644 --- a/code/modules/admin/verbs/adminpm.dm +++ b/code/modules/admin/verbs/adminpm.dm @@ -61,8 +61,12 @@ if(C.holder) if(holder) //both are admins - C << "Admin PM from-[key_name(src, C, 1)]: [msg]" - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" + if(holder.rank == "Moderator") //If moderator + C << "Mod PM from-[key_name(src, C, 1)]: [msg]" + src << "Mod PM to-[key_name(C, src, 1)]: [msg]" + else + C << "Admin PM from-[key_name(src, C, 1)]: [msg]" + src << "Admin PM to-[key_name(C, src, 1)]: [msg]" else //recipient is an admin but sender is not C << "Reply PM from-[key_name(src, C, 1)]: [msg]" @@ -75,10 +79,14 @@ else if(holder) //sender is an admin but recipient is not. Do BIG RED TEXT // C << "-- Administrator private message --" - C << "Admin PM from-[key_name(src, C, 0)]: [msg]" - C << "Click on the administrator's name to reply." - src << "Admin PM to-[key_name(C, src, 1)]: [msg]" - + if(holder.rank == "Moderator") + C << "Mod PM from-[key_name(src, C, 0)]: [msg]" + C << "Click on the moderators's name to reply." + src << "Mod PM to-[key_name(C, src, 1)]: [msg]" + else + C << "Admin PM from-[key_name(src, C, 0)]: [msg]" + C << "Click on the administrator's name to reply." + src << "Admin PM to-[key_name(C, src, 1)]: [msg]" //always play non-admin recipients the adminhelp sound C << 'adminhelp.ogg' diff --git a/code/modules/admin/verbs/adminsay.dm b/code/modules/admin/verbs/adminsay.dm index 92165d06a2f..07ccbbbddd3 100644 --- a/code/modules/admin/verbs/adminsay.dm +++ b/code/modules/admin/verbs/adminsay.dm @@ -20,9 +20,39 @@ //feedback_add_details("admin_verb","M") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! for (var/mob/M in world) - if (M.client && M.client.holder) + if (M.client && M.client.holder && M.client.holder.level != 0) //Moderators cannot see it. if (src.holder.rank == "Admin Observer") M << "ADMIN: [key_name(usr, M)]: [msg]" else M << "ADMIN: [key_name(usr, M)] (JMP): [msg]" +/client/proc/cmd_mod_say(msg as text) + set category = "Special Verbs" + set name = "Msay" + set hidden = 1 + + if (!src.holder) + src << "Only administrators may use this command." + return + + if (src.muted || src.muted_complete) + src << "You are muted." + return + + msg = copytext(sanitize(msg), 1, MAX_MESSAGE_LEN) + log_admin("MOD: [key_name(src)] : [msg]") + + + 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! + + for (var/mob/M in world) + if (M.client && M.client.holder) + if (src.holder.rank == "Admin Observer") + M << "MOD: [key_name(usr, M)]: [msg]" + else if (src.holder.rank == "Moderator") + M << "MOD: [key_name(usr, M)] (JMP): [msg]" + else + M << "MOD: [key_name(usr, M)] (JMP): [msg]" + diff --git a/code/modules/admin/verbs/pray.dm b/code/modules/admin/verbs/pray.dm index 47e61313879..a4eb0ed0582 100644 --- a/code/modules/admin/verbs/pray.dm +++ b/code/modules/admin/verbs/pray.dm @@ -28,7 +28,7 @@ // log_admin("[key_name(Sender)] sent a message to Centcomm! The message was [msg]") // Handled somewhere else for (var/mob/M in world) - if (M.client && M.client.holder) + if (M.client && M.client.holder && M.client.holder.level != 0) M << "\blue CENTCOMM:[key_name(Sender, M)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" // /proc/Syndicate_announce(var/text , var/mob/Sender) @@ -38,6 +38,6 @@ // log_admin("[key_name(Sender)] sent a message to the Syndicate! The message was [msg]") // Handled somewhere else for (var/mob/M in world) - if (M.client && M.client.holder) + if (M.client && M.client.holder && M.client.holder.level != 0) M << "\blue SYNDICATE:[key_name(Sender, M)] (PP) (VV) (SM) (JMP) (CA) (BSA) (RPLY): [msg]" // diff --git a/code/modules/mob/new_player/new_player.dm b/code/modules/mob/new_player/new_player.dm index ec9484a289e..270a8448c10 100644 --- a/code/modules/mob/new_player/new_player.dm +++ b/code/modules/mob/new_player/new_player.dm @@ -301,7 +301,7 @@ proc/ManifestLateSpawn(var/mob/living/carbon/human/H, icon/H_icon) // Attempted fix to add late joiners to various databases -- TLE - // This is basically ripped wholesale from the normal code for adding people to the databases during a fresh round //Erth Mark + // This is basically ripped wholesale from the normal code for adding people to the databases during a fresh round if (!isnull(H.mind) && (H.mind.assigned_role != "MODE")) var/datum/data/record/G = new() var/datum/data/record/M = new() diff --git a/code/stylesheet.dm b/code/stylesheet.dm index a3401ade9fd..bf2272ba291 100644 --- a/code/stylesheet.dm +++ b/code/stylesheet.dm @@ -20,6 +20,10 @@ em {font-style: normal; font-weight: bold;} .adminobserver {color: #996600; font-weight: bold;} .admin {color: #386aff; font-weight: bold;} +.mod {color: #735638; font-weight: bold;} +.modooc {color: #184880; font-weight: bold;} +.adminmod {color: #402A14; font-weight: bold;} + .name { font-weight: bold;} .say {} diff --git a/icons/mob/head.dmi b/icons/mob/head.dmi index ceb1d3bd021..ce4098bcd85 100644 Binary files a/icons/mob/head.dmi and b/icons/mob/head.dmi differ diff --git a/icons/obj/clothing/hats.dmi b/icons/obj/clothing/hats.dmi index 4f966143387..91032dbec0a 100644 Binary files a/icons/obj/clothing/hats.dmi and b/icons/obj/clothing/hats.dmi differ