diff --git a/code/datums/datumvars.dm b/code/datums/datumvars.dm
index 9413956fa7c..dd27bf4232a 100644
--- a/code/datums/datumvars.dm
+++ b/code/datums/datumvars.dm
@@ -49,7 +49,7 @@
* This proc is for "high level" actions like admin heal/set species/etc/etc. The low level debugging things should go in admin/view_variables/topic_basic.dm in case this runtimes.
*/
/datum/proc/vv_do_topic(list/href_list)
- if(!usr || !usr.client || !usr.client.holder || !check_rights(NONE))
+ if(!usr || !usr.client || !usr.client.holder || !check_rights(R_VAREDIT))
return FALSE //This is VV, not to be called by anything else.
if(SEND_SIGNAL(src, COMSIG_VV_TOPIC, usr, href_list) & COMPONENT_VV_HANDLED)
return FALSE
diff --git a/code/modules/admin/verbs/admin.dm b/code/modules/admin/verbs/admin.dm
index 1688f34d202..c63abb8888b 100644
--- a/code/modules/admin/verbs/admin.dm
+++ b/code/modules/admin/verbs/admin.dm
@@ -100,6 +100,8 @@ ADMIN_VERB(cmd_admin_check_player_exp, R_ADMIN, "Player Playtime", "View player
/datum/admins/proc/modify_traits(datum/D)
if(!D)
return
+ if(!check_rights(R_VAREDIT))
+ return
var/add_or_remove = input("Remove/Add?", "Trait Remove/Add") as null|anything in list("Add","Remove")
if(!add_or_remove)
diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm
index 4fde1e30d1a..e259b75edfc 100644
--- a/code/modules/admin/view_variables/topic.dm
+++ b/code/modules/admin/view_variables/topic.dm
@@ -1,7 +1,7 @@
//DO NOT ADD MORE TO THIS FILE.
//Use vv_do_topic() for datums!
/client/proc/view_var_Topic(href, href_list, hsrc)
- if( (usr.client != src) || !src.holder || !holder.CheckAdminHref(href, href_list))
+ if(!check_rights_for(src, R_VAREDIT) || !holder.CheckAdminHref(href, href_list))
return
var/target = GET_VV_TARGET
vv_do_basic(target, href_list, href)
@@ -16,145 +16,132 @@
vars_target = vars_target.vars[href_list["special_varname"]]
debug_variables(vars_target)
-//Stuff below aren't in dropdowns/etc.
+//~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records).
+ if(href_list["rename"])
- if(check_rights(R_VAREDIT))
+ var/mob/M = locate(href_list["rename"]) in GLOB.mob_list
+ if(!istype(M))
+ to_chat(usr, "This can only be used on instances of type /mob", confidential = TRUE)
+ return
- //~CARN: for renaming mobs (updates their name, real_name, mind.name, their ID/PDA and datacore records).
+ var/new_name = stripped_input(usr,"What would you like to name this mob?","Input a name",M.real_name,MAX_NAME_LEN)
- if(href_list["rename"])
- if(!check_rights(NONE))
- return
+ // If the new name is something that would be restricted by IC chat filters,
+ // give the admin a warning but allow them to do it anyway if they want.
+ if(is_ic_filtered(new_name) || is_soft_ic_filtered(new_name) && tgui_alert(usr, "Your selected name contains words restricted by IC chat filters. Confirm this new name?", "IC Chat Filter Conflict", list("Confirm", "Cancel")) == "Cancel")
+ return
- var/mob/M = locate(href_list["rename"]) in GLOB.mob_list
- if(!istype(M))
- to_chat(usr, "This can only be used on instances of type /mob", confidential = TRUE)
- return
+ if( !new_name || !M )
+ return
- var/new_name = stripped_input(usr,"What would you like to name this mob?","Input a name",M.real_name,MAX_NAME_LEN)
+ message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].")
+ M.fully_replace_character_name(M.real_name,new_name)
+ vv_update_display(M, "name", new_name)
+ vv_update_display(M, "real_name", M.real_name || "No real name")
- // If the new name is something that would be restricted by IC chat filters,
- // give the admin a warning but allow them to do it anyway if they want.
- if(is_ic_filtered(new_name) || is_soft_ic_filtered(new_name) && tgui_alert(usr, "Your selected name contains words restricted by IC chat filters. Confirm this new name?", "IC Chat Filter Conflict", list("Confirm", "Cancel")) == "Cancel")
- return
+ else if(href_list["rotatedatum"])
- if( !new_name || !M )
- return
+ var/atom/A = locate(href_list["rotatedatum"])
+ if(!istype(A))
+ to_chat(usr, "This can only be done to instances of type /atom", confidential = TRUE)
+ return
- message_admins("Admin [key_name_admin(usr)] renamed [key_name_admin(M)] to [new_name].")
- M.fully_replace_character_name(M.real_name,new_name)
- vv_update_display(M, "name", new_name)
- vv_update_display(M, "real_name", M.real_name || "No real name")
-
- else if(href_list["rotatedatum"])
- if(!check_rights(NONE))
- return
-
- var/atom/A = locate(href_list["rotatedatum"])
- if(!istype(A))
- to_chat(usr, "This can only be done to instances of type /atom", confidential = TRUE)
- return
-
- switch(href_list["rotatedir"])
- if("right")
- A.setDir(turn(A.dir, -45))
- if("left")
- A.setDir(turn(A.dir, 45))
- vv_update_display(A, "dir", dir2text(A.dir))
+ switch(href_list["rotatedir"])
+ if("right")
+ A.setDir(turn(A.dir, -45))
+ if("left")
+ A.setDir(turn(A.dir, 45))
+ vv_update_display(A, "dir", dir2text(A.dir))
- else if(href_list["adjustDamage"] && href_list["mobToDamage"])
- if(!check_rights(NONE))
- return
+ else if(href_list["adjustDamage"] && href_list["mobToDamage"])
- var/mob/living/L = locate(href_list["mobToDamage"]) in GLOB.mob_list
- if(!istype(L))
- return
+ var/mob/living/L = locate(href_list["mobToDamage"]) in GLOB.mob_list
+ if(!istype(L))
+ return
- var/Text = href_list["adjustDamage"]
+ var/Text = href_list["adjustDamage"]
- var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num|null
+ var/amount = input("Deal how much damage to mob? (Negative values here heal)","Adjust [Text]loss",0) as num|null
- if (isnull(amount))
- return
+ if (isnull(amount))
+ return
- if(!L)
- to_chat(usr, "Mob doesn't exist anymore", confidential = TRUE)
- return
+ if(!L)
+ to_chat(usr, "Mob doesn't exist anymore", confidential = TRUE)
+ return
- var/newamt
- switch(Text)
- if("brute")
- L.adjustBruteLoss(amount, forced = TRUE)
- newamt = L.getBruteLoss()
- if("fire")
- L.adjustFireLoss(amount, forced = TRUE)
- newamt = L.getFireLoss()
- if("toxin")
- L.adjustToxLoss(amount, forced = TRUE)
- newamt = L.getToxLoss()
- if("oxygen")
- L.adjustOxyLoss(amount, forced = TRUE)
- newamt = L.getOxyLoss()
- if("brain")
- L.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount)
- newamt = L.get_organ_loss(ORGAN_SLOT_BRAIN)
- if("stamina")
- L.adjustStaminaLoss(amount, forced = TRUE)
- newamt = L.getStaminaLoss()
- else
- to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]", confidential = TRUE)
- return
-
- if(amount != 0)
- var/log_msg = "[key_name(usr)] dealt [amount] amount of [Text] damage to [key_name(L)]"
- message_admins("[key_name(usr)] dealt [amount] amount of [Text] damage to [ADMIN_LOOKUPFLW(L)]")
- log_admin(log_msg)
- admin_ticket_log(L, "[log_msg]")
- vv_update_display(L, Text, "[newamt]")
-
- else if(href_list["item_to_tweak"] && href_list["var_tweak"])
- if(!check_rights(NONE))
- return
-
- var/obj/item/editing = locate(href_list["item_to_tweak"])
- if(!istype(editing) || QDELING(editing))
- return
-
- var/existing_val = -1
- switch(href_list["var_tweak"])
- if("damtype")
- existing_val = editing.damtype
- if("force")
- existing_val = editing.force
- if("wound")
- existing_val = editing.wound_bonus
- if("bare wound")
- existing_val = editing.bare_wound_bonus
- else
- CRASH("Invalid var_tweak passed to item vv set var: [href_list["var_tweak"]]")
-
- var/new_val
- if(href_list["var_tweak"] == "damtype")
- new_val = input("Enter the new damage type for [editing]","Set Damtype", existing_val) in list(BRUTE, BURN, TOX, OXY, STAMINA, BRAIN)
+ var/newamt
+ switch(Text)
+ if("brute")
+ L.adjustBruteLoss(amount, forced = TRUE)
+ newamt = L.getBruteLoss()
+ if("fire")
+ L.adjustFireLoss(amount, forced = TRUE)
+ newamt = L.getFireLoss()
+ if("toxin")
+ L.adjustToxLoss(amount, forced = TRUE)
+ newamt = L.getToxLoss()
+ if("oxygen")
+ L.adjustOxyLoss(amount, forced = TRUE)
+ newamt = L.getOxyLoss()
+ if("brain")
+ L.adjustOrganLoss(ORGAN_SLOT_BRAIN, amount)
+ newamt = L.get_organ_loss(ORGAN_SLOT_BRAIN)
+ if("stamina")
+ L.adjustStaminaLoss(amount, forced = TRUE)
+ newamt = L.getStaminaLoss()
else
- new_val = input("Enter the new value for [editing]'s [href_list["var_tweak"]]","Set [href_list["var_tweak"]]", existing_val) as num|null
- if(isnull(new_val) || new_val == existing_val || QDELETED(editing) || !check_rights(NONE))
+ to_chat(usr, "You caused an error. DEBUG: Text:[Text] Mob:[L]", confidential = TRUE)
return
- switch(href_list["var_tweak"])
- if("damtype")
- editing.damtype = new_val
- if("force")
- editing.force = new_val
- if("wound")
- editing.wound_bonus = new_val
- if("bare wound")
- editing.bare_wound_bonus = new_val
+ if(amount != 0)
+ var/log_msg = "[key_name(usr)] dealt [amount] amount of [Text] damage to [key_name(L)]"
+ message_admins("[key_name(usr)] dealt [amount] amount of [Text] damage to [ADMIN_LOOKUPFLW(L)]")
+ log_admin(log_msg)
+ admin_ticket_log(L, "[log_msg]")
+ vv_update_display(L, Text, "[newamt]")
- message_admins("[key_name(usr)] set [editing]'s [href_list["var_tweak"]] to [new_val] (was [existing_val])")
- log_admin("[key_name(usr)] set [editing]'s [href_list["var_tweak"]] to [new_val] (was [existing_val])")
- vv_update_display(editing, href_list["var_tweak"], istext(new_val) ? uppertext(new_val) : new_val)
+ else if(href_list["item_to_tweak"] && href_list["var_tweak"])
+
+ var/obj/item/editing = locate(href_list["item_to_tweak"])
+ if(!istype(editing) || QDELING(editing))
+ return
+
+ var/existing_val = -1
+ switch(href_list["var_tweak"])
+ if("damtype")
+ existing_val = editing.damtype
+ if("force")
+ existing_val = editing.force
+ if("wound")
+ existing_val = editing.wound_bonus
+ if("bare wound")
+ existing_val = editing.bare_wound_bonus
+ else
+ CRASH("Invalid var_tweak passed to item vv set var: [href_list["var_tweak"]]")
+
+ var/new_val
+ if(href_list["var_tweak"] == "damtype")
+ new_val = input("Enter the new damage type for [editing]","Set Damtype", existing_val) in list(BRUTE, BURN, TOX, OXY, STAMINA, BRAIN)
+ else
+ new_val = input("Enter the new value for [editing]'s [href_list["var_tweak"]]","Set [href_list["var_tweak"]]", existing_val) as num|null
+ if(isnull(new_val) || new_val == existing_val || QDELETED(editing) || !check_rights(R_VAREDIT))
+ return
+
+ switch(href_list["var_tweak"])
+ if("damtype")
+ editing.damtype = new_val
+ if("force")
+ editing.force = new_val
+ if("wound")
+ editing.wound_bonus = new_val
+ if("bare wound")
+ editing.bare_wound_bonus = new_val
+
+ message_admins("[key_name(usr)] set [editing]'s [href_list["var_tweak"]] to [new_val] (was [existing_val])")
+ log_admin("[key_name(usr)] set [editing]'s [href_list["var_tweak"]] to [new_val] (was [existing_val])")
+ vv_update_display(editing, href_list["var_tweak"], istext(new_val) ? uppertext(new_val) : new_val)
//Finally, refresh if something modified the list.
if(href_list["datumrefresh"])