Expanded admin powers for full moderators. (#20522)

- Full moderators can now use rejuvenate.
- Full moderators can now spawn atoms.
- Full moderators can now remove/add languages.
- Full moderators can now teleport mobs.
- Repurposes R_BAN into a generic permission that full moderators and
above have, and locks teleport behind it.

None of these powers may be used for round-altering purposes. Pending
review by the head admin and the host.

To-do: check that Borealis and permissions in general don't explode with
these changes.

---------

Co-authored-by: realmattatlas <liermattia@gmail.com>
This commit is contained in:
Matt Atlas
2025-03-04 17:02:49 +00:00
committed by GitHub
co-authored by realmattatlas
parent 89262c487e
commit 14d7425cee
12 changed files with 134 additions and 70 deletions
+3 -3
View File
@@ -34,8 +34,8 @@ var/list/forum_groupids_to_ranks = list()
. |= R_POSSESS
if ("r_stealth")
. |= R_STEALTH
if ("r_rejuv","r_rejuvinate")
. |= R_REJUVINATE
if ("r_rejuv","r_rejuvenate")
. |= R_REJUVENATE
if ("r_varedit")
. |= R_VAREDIT
if ("r_sound","r_sounds")
@@ -49,7 +49,7 @@ var/list/forum_groupids_to_ranks = list()
if ("r_cciaa")
. |= R_CCIAA
if ("r_everything","r_host","r_all")
. |= (R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVINATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD | R_CCIAA | R_DEV)
. |= (R_BUILDMODE | R_ADMIN | R_BAN | R_FUN | R_SERVER | R_DEBUG | R_PERMISSIONS | R_POSSESS | R_STEALTH | R_REJUVENATE | R_VAREDIT | R_SOUNDS | R_SPAWN | R_MOD | R_CCIAA | R_DEV)
else
crash_with("Unknown rank in file: [auth]")
+4 -4
View File
@@ -71,7 +71,6 @@ GLOBAL_LIST_INIT(admin_verbs_admin, list(
/datum/admins/proc/show_player_info,
/client/proc/free_slot, //frees slot for chosen job,
/client/proc/cmd_admin_change_custom_event,
/client/proc/cmd_admin_rejuvenate,
/client/proc/toggleattacklogs,
/client/proc/toggledebuglogs,
/client/proc/toggleghostwriters,
@@ -152,6 +151,7 @@ GLOBAL_LIST_INIT(admin_verbs_spawn, list(
/datum/admins/proc/spawn_custom_item,
/datum/admins/proc/spawn_plant,
/datum/admins/proc/spawn_atom, // allows us to spawn instances,
/client/proc/cmd_admin_delete, // delete an instance/object/mob/etc,
/client/proc/respawn_character,
/client/proc/spawn_chemdisp_cartridge
))
@@ -166,7 +166,6 @@ GLOBAL_LIST_INIT(admin_verbs_server, list(
/datum/admins/proc/immreboot,
/client/proc/everyone_random,
/datum/admins/proc/toggleAI,
/client/proc/cmd_admin_delete, // delete an instance/object/mob/etc,
/client/proc/cmd_debug_del_all,
/datum/admins/proc/adrev,
/datum/admins/proc/adspawn,
@@ -263,7 +262,8 @@ GLOBAL_LIST_INIT(admin_verbs_permissions, list(
))
GLOBAL_LIST_INIT(admin_verbs_rejuv, list(
/client/proc/respawn_character
/client/proc/respawn_character,
/client/proc/cmd_admin_rejuvenate
))
@@ -532,7 +532,7 @@ GLOBAL_LIST_INIT(admin_verbs_cciaa, list(
if(holder.rights & R_POSSESS) add_verb(src, GLOB.admin_verbs_possess)
if(holder.rights & R_PERMISSIONS) add_verb(src, GLOB.admin_verbs_permissions)
if(holder.rights & R_STEALTH) add_verb(src, /client/proc/stealth)
if(holder.rights & R_REJUVINATE) add_verb(src, GLOB.admin_verbs_rejuv)
if(holder.rights & R_REJUVENATE) add_verb(src, GLOB.admin_verbs_rejuv)
if(holder.rights & R_SPAWN) add_verb(src, GLOB.admin_verbs_spawn)
if(holder.rights & R_SOUNDS) add_verb(src, GLOB.admin_verbs_sounds)
if(holder.rights & R_MOD) add_verb(src, GLOB.admin_verbs_mod)
+1 -1
View File
@@ -45,7 +45,7 @@
if(var_to_edit in VVlocked)
if(!check_rights(R_DEBUG)) return
if(var_to_edit in VVckey_edit)
if(!check_rights(R_SPAWN|R_DEBUG)) return
if(!check_rights(R_DEBUG)) return
if(var_to_edit in VVicon_edit_lock)
if(!check_rights(R_FUN|R_DEBUG)) return
if(!(var_to_edit in A.vars))
@@ -89,6 +89,7 @@
new_rank = input("Please select a rank", "New rank", null, null) as null|anything in list("Game Master","Game Admin", "Trial Admin", "Admin Observer","*New Rank*")
var/rights = D?.rights || 0
var/datum/admin_rank/new_admin_rank_datum
switch(new_rank)
if(null, "")
@@ -103,18 +104,19 @@
to_chat(usr, SPAN_ALERT("Error editing rank: invalid rank."))
return
if(admin_ranks.len)
if(new_rank in admin_ranks)
rights = admin_ranks[new_rank] //we typed a rank which already exists, use its rights
new_admin_rank_datum = admin_ranks[new_rank] //we typed a rank which already exists, use its rights
else
admin_ranks[new_rank] = 0 //add the new rank to admin_ranks
else
rights = admin_ranks[new_rank] //we input an existing rank, use its rights
new_admin_rank_datum = admin_ranks[new_rank] //we input an existing rank, use its rights
if(D)
D.disassociate() //remove adminverbs and unlink from client
D.rank = new_rank //update the rank
D.rights = rights //update the rights based on admin_ranks (default: 0)
D.rights = new_admin_rank_datum.rights //update the rights based on admin_ranks (default: 0)
else
D = new /datum/admins(new_rank, rights, admin_ckey)
+12 -12
View File
@@ -141,7 +141,7 @@
else if(href_list["simplemake"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/M = locate(href_list["mob"])
@@ -474,7 +474,7 @@
psi.check_psionic_trigger(100, "outside intervention", redactive = TRUE)
else if(href_list["monkeyone"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/living/carbon/human/H = locate(href_list["monkeyone"])
@@ -487,7 +487,7 @@
H.monkeyize()
else if(href_list["corgione"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/living/carbon/human/H = locate(href_list["corgione"])
@@ -645,7 +645,7 @@
message_admins("[key_name_admin(usr)] has sent [key_name_admin(M)] to the thunderdome. (Observer.)", 1)
else if(href_list["revive"])
if(!check_rights(R_REJUVINATE))
if(!check_rights(R_REJUVENATE))
return
var/mob/living/L = locate(href_list["revive"])
@@ -661,7 +661,7 @@
to_chat(usr, "Admin Rejuvinates have been disabled")
else if(href_list["makeai"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/living/carbon/human/H = locate(href_list["makeai"])
@@ -674,7 +674,7 @@
H.AIize()
else if(href_list["makeslime"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/living/carbon/human/H = locate(href_list["makeslime"])
@@ -685,7 +685,7 @@
usr.client.cmd_admin_slimeize(H)
else if(href_list["makerobot"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
@@ -696,7 +696,7 @@
usr.client.cmd_admin_robotize(H)
else if(href_list["makeanimal"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/M = locate(href_list["makeanimal"])
@@ -707,7 +707,7 @@
usr.client.cmd_admin_animalize(M)
else if(href_list["togmutate"])
if(!check_rights(R_SPAWN))
if(!check_rights(R_FUN))
return
var/mob/living/carbon/human/H = locate(href_list["togmutate"])
@@ -1014,14 +1014,14 @@
return
else if(href_list["jumpto"])
if(!check_rights(R_ADMIN))
if(!check_rights(R_BAN))
return
var/mob/M = locate(href_list["jumpto"])
usr.client.jumptomob(M)
else if(href_list["getmob"])
if(!check_rights(R_ADMIN))
if(!check_rights(R_BAN))
return
if(alert(usr, "Confirm?", "Message", "Yes", "No") != "Yes")
@@ -1030,7 +1030,7 @@
usr.client.Getmob(M)
else if(href_list["sendmob"])
if(!check_rights(R_ADMIN))
if(!check_rights(R_BAN))
return
var/mob/M = locate(href_list["sendmob"])
+3 -3
View File
@@ -214,7 +214,7 @@ var/list/VVdynamic_lock = list(
if(variable in VVlocked)
if(!check_rights(R_DEBUG|R_DEV)) return
if(variable in VVckey_edit)
if(!check_rights(R_SPAWN|R_DEBUG|R_DEV)) return
if(!check_rights(R_FUN|R_DEBUG|R_DEV)) return
if(variable in VVicon_edit_lock)
if(!check_rights(R_FUN|R_DEBUG|R_DEV)) return
@@ -433,7 +433,7 @@ var/list/VVdynamic_lock = list(
if(param_var_name in VVlocked)
if(!check_rights(R_DEBUG|R_DEV)) return
if(param_var_name in VVckey_edit)
if(!check_rights(R_SPAWN|R_DEBUG|R_DEV)) return
if(!check_rights(R_FUN|R_DEBUG|R_DEV)) return
if(param_var_name in VVicon_edit_lock)
if(!check_rights(R_FUN|R_DEBUG|R_DEV)) return
if(VVdynamic_lock[variable])
@@ -498,7 +498,7 @@ var/list/VVdynamic_lock = list(
if(variable in VVlocked)
if(!check_rights(R_DEBUG|R_DEV)) return
if(variable in VVckey_edit)
if(!check_rights(R_SPAWN|R_DEBUG|R_DEV)) return
if(!check_rights(R_FUN|R_DEBUG|R_DEV)) return
if(variable in VVicon_edit_lock)
if(!check_rights(R_FUN|R_DEBUG|R_DEV)) return
if(VVdynamic_lock[variable])
+8 -8
View File
@@ -93,7 +93,7 @@
href_list["datumrefresh"] = href_list["give_spell"]
else if(href_list["godmode"])
if(!check_rights(R_REJUVINATE)) return
if(!check_rights(R_FUN)) return
var/mob/M = locate(href_list["godmode"])
if(!istype(M))
@@ -256,7 +256,7 @@
href_list["datumrefresh"] = href_list["rotatedatum"]
else if(href_list["makemonkey"])
if(!check_rights(R_SPAWN)) return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/human/H = locate(href_list["makemonkey"])
if(!istype(H))
@@ -270,7 +270,7 @@
holder.Topic(href, list("monkeyone"=href_list["makemonkey"]))
else if(href_list["makerobot"])
if(!check_rights(R_SPAWN)) return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/human/H = locate(href_list["makerobot"])
if(!istype(H))
@@ -284,7 +284,7 @@
holder.Topic(href, list("makerobot"=href_list["makerobot"]))
else if(href_list["makeslime"])
if(!check_rights(R_SPAWN)) return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/human/H = locate(href_list["makeslime"])
if(!istype(H))
@@ -298,7 +298,7 @@
holder.Topic(href, list("makeslime"=href_list["makeslime"]))
else if(href_list["makeai"])
if(!check_rights(R_SPAWN)) return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/human/H = locate(href_list["makeai"])
if(!istype(H))
@@ -312,7 +312,7 @@
holder.Topic(href, list("makeai"=href_list["makeai"]))
else if(href_list["setspecies"])
if(!check_rights(R_SPAWN)) return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/human/H = locate(href_list["setspecies"])
if(!istype(H))
@@ -426,7 +426,7 @@
remove_verb(H, verb)
else if(href_list["addorgan"])
if(!check_rights(R_SPAWN)) return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/M = locate(href_list["addorgan"])
if(!istype(M))
@@ -450,7 +450,7 @@
else if(href_list["remorgan"])
if(!check_rights(R_SPAWN)) return
if(!check_rights(R_FUN)) return
var/mob/living/carbon/M = locate(href_list["remorgan"])
if(!istype(M))