From fcb08416468f40c9be85c0c363021715fca1f5cb Mon Sep 17 00:00:00 2001 From: PsiOmegaDelta Date: Tue, 2 Jun 2015 14:20:14 +0200 Subject: [PATCH] Reduction of admin right-click verbs. Removes verbs which only works on specific mob types from the admin right-click context. Fixes #9627. Fixes #9628. --- code/__HELPERS/global_lists.dm | 2 + code/modules/admin/admin.dm | 5 +- code/modules/admin/admin_verbs.dm | 70 ++++++++++--------- code/modules/admin/verbs/debug.dm | 9 +-- code/modules/mob/living/carbon/human/human.dm | 2 + code/modules/mob/living/silicon/silicon.dm | 2 + 6 files changed, 53 insertions(+), 37 deletions(-) diff --git a/code/__HELPERS/global_lists.dm b/code/__HELPERS/global_lists.dm index 55b1b23a9f..09e6f845c8 100644 --- a/code/__HELPERS/global_lists.dm +++ b/code/__HELPERS/global_lists.dm @@ -7,6 +7,8 @@ var/list/directory = list() //list of all ckeys with associated client var/global/list/player_list = list() //List of all mobs **with clients attached**. Excludes /mob/new_player var/global/list/mob_list = list() //List of all mobs, including clientless +var/global/list/human_mob_list = list() //List of all human mobs and sub-types, including clientless +var/global/list/silicon_mob_list = list() //List of all silicon mobs, including clientless var/global/list/living_mob_list = list() //List of all alive mobs, including clientless. Excludes /mob/new_player var/global/list/dead_mob_list = list() //List of all dead mobs, including clientless. Excludes /mob/new_player diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 6158c59bc8..cd6dfda8db 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -1236,7 +1236,7 @@ var/global/floorIsLava = 0 if(!ai_number) usr << "No AIs located" //Just so you know the thing is actually working and not just ignoring you. -/datum/admins/proc/show_skills(var/mob/living/carbon/human/M as mob in world) +/datum/admins/proc/show_skills() set category = "Admin" set name = "Show Skills" @@ -1246,6 +1246,9 @@ var/global/floorIsLava = 0 usr << "Error: you are not an admin!" return + var/mob/living/carbon/human/M = input("Select mob.", "Select mob.") as null|anything in human_mob_list + if(!M) return + show_skill_window(usr, M) return diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index 41acc7894b..076ad95b45 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -708,66 +708,70 @@ var/list/admin_verbs_mentor = list( if(holder) src.holder.output_ai_laws() -/client/proc/rename_silicon(mob/living/silicon/S in mob_list) +/client/proc/rename_silicon() set name = "Rename Silicon" set category = "Admin" - if(!istype(S)) - return + if(!check_rights(R_ADMIN)) return - if(holder) - var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "Enter new silicon name", S.real_name)) - if(new_name && new_name != S.real_name) - admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'") - S.SetName(new_name) + var/mob/living/silicon/S = input("Select silicon.", "Rename Silicon.") as null|anything in silicon_mob_list + if(!S) return + + var/new_name = sanitizeSafe(input(src, "Enter new name. Leave blank or as is to cancel.", "[S.real_name] - Enter new silicon name", S.real_name)) + if(new_name && new_name != S.real_name) + admin_log_and_message_admins("has renamed the silicon '[S.real_name]' to '[new_name]'") + S.SetName(new_name) feedback_add_details("admin_verb","RAI") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/manage_silicon_laws(mob/living/silicon/S in mob_list) +/client/proc/manage_silicon_laws() set name = "Manage Silicon Laws" set category = "Admin" - if(!istype(S)) - return + if(!check_rights(R_ADMIN)) return - if(holder) - var/obj/nano_module/law_manager/L = new(S) - L.ui_interact(usr, state = admin_state) + var/mob/living/silicon/S = input("Select silicon.", "Manage Silicon Laws") as null|anything in silicon_mob_list + if(!S) return + + var/obj/nano_module/law_manager/L = new(S) + L.ui_interact(usr, state = admin_state) admin_log_and_message_admins("has opened [S]'s law manager.") feedback_add_details("admin_verb","MSL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/change_human_appearance_admin(mob/living/carbon/human/H in world) +/client/proc/change_human_appearance_admin() set name = "Change Mob Appearance - Admin" set desc = "Allows you to change the mob appearance" set category = "Admin" - if(!istype(H)) - return + if(!check_rights(R_FUN)) return - if(holder) - admin_log_and_message_admins("is altering the appearance of [H].") - H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state) + var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Admin") as null|anything in human_mob_list + if(!H) return + + admin_log_and_message_admins("is altering the appearance of [H].") + H.change_appearance(APPEARANCE_ALL, usr, usr, check_species_whitelist = 0, state = admin_state) feedback_add_details("admin_verb","CHAA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/change_human_appearance_self(mob/living/carbon/human/H in mob_list) +/client/proc/change_human_appearance_self() set name = "Change Mob Appearance - Self" set desc = "Allows the mob to change its appearance" set category = "Admin" - if(!istype(H)) - return + if(!check_rights(R_FUN)) return + + var/mob/living/carbon/human/H = input("Select mob.", "Change Mob Appearance - Self") as null|anything in human_mob_list + if(!H) return if(!H.client) usr << "Only mobs with clients can alter their own appearance." return - if(holder) - switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel")) - if("Yes") - admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.") - H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0) - if("No") - admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.") - H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1) + switch(alert("Do you wish for [H] to be allowed to select non-whitelisted races?","Alter Mob Appearance","Yes","No","Cancel")) + if("Yes") + admin_log_and_message_admins("has allowed [H] to change \his appearance, without whitelisting of races.") + H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 0) + if("No") + admin_log_and_message_admins("has allowed [H] to change \his appearance, with whitelisting of races.") + H.change_appearance(APPEARANCE_ALL, H.loc, check_species_whitelist = 1) feedback_add_details("admin_verb","CMAS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/change_security_level() @@ -792,12 +796,14 @@ var/list/admin_verbs_mentor = list( // 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/editappear(mob/living/carbon/human/M as mob in mob_list) +/client/proc/editappear() set name = "Edit Appearance" set category = "Fun" if(!check_rights(R_FUN)) return + var/mob/living/carbon/human/M = input("Select mob.", "Edit Appearance") as null|anything in human_mob_list + if(!istype(M, /mob/living/carbon/human)) usr << "\red You can only do this to humans!" return diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index 9ab952de64..0552892f21 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -516,12 +516,13 @@ But you can call procs that are of type /mob/living/carbon/human/proc/ for that for(var/areatype in areas_without_camera) world << "* [areatype]" -/client/proc/cmd_admin_dress(var/mob/living/carbon/human/M in mob_list) +/client/proc/cmd_admin_dress() set category = "Fun" set name = "Select equipment" - if(!ishuman(M)) - alert("Invalid mob") - return + + var/mob/living/carbon/human/M = input("Select mob.", "Select equipment.") as null|anything in human_mob_list + if(!M) return + //log_admin("[key_name(src)] has alienized [M.key].") var/list/dresspacks = list( "strip", diff --git a/code/modules/mob/living/carbon/human/human.dm b/code/modules/mob/living/carbon/human/human.dm index 4ca3cecda8..36af219aee 100644 --- a/code/modules/mob/living/carbon/human/human.dm +++ b/code/modules/mob/living/carbon/human/human.dm @@ -37,6 +37,7 @@ hud_list[SPECIALROLE_HUD] = image('icons/mob/hud.dmi', src, "hudblank") hud_list[STATUS_HUD_OOC] = image('icons/mob/hud.dmi', src, "hudhealthy") + human_mob_list |= src ..() if(dna) @@ -44,6 +45,7 @@ make_blood() /mob/living/carbon/human/Destroy() + human_mob_list -= src for(var/organ in organs) qdel(organ) return ..() diff --git a/code/modules/mob/living/silicon/silicon.dm b/code/modules/mob/living/silicon/silicon.dm index d2e30953e7..d7a006b41c 100644 --- a/code/modules/mob/living/silicon/silicon.dm +++ b/code/modules/mob/living/silicon/silicon.dm @@ -27,11 +27,13 @@ #define MED_HUD 2 //Medical HUD mode /mob/living/silicon/New() + silicon_mob_list |= src ..() add_language("Galactic Common") init_subsystems() /mob/living/silicon/Destroy() + silicon_mob_list -= src for(var/datum/alarm_handler/AH in alarm_manager.all_handlers) AH.unregister(src) ..()