From a3028dcb9e6e3245b6b24742b0d522216c707a9a Mon Sep 17 00:00:00 2001 From: CHOMPStation2StaffMirrorBot <94713762+CHOMPStation2StaffMirrorBot@users.noreply.github.com> Date: Sat, 28 Jun 2025 19:34:54 -0700 Subject: [PATCH] [MIRROR] More admin verb conversion & Secrets panel overhaul (#11124) Co-authored-by: Selis <12716288+ItsSelis@users.noreply.github.com> Co-authored-by: Kashargul <144968721+Kashargul@users.noreply.github.com> --- code/__defines/html_assistant.dm | 5 + code/controllers/{verbs.dm => admin.dm} | 52 +-- code/controllers/subsystems/nightshift.dm | 6 +- code/datums/ai_laws.dm | 1 + code/game/antagonist/station/highlander.dm | 27 +- code/modules/admin/admin.dm | 23 +- code/modules/admin/admin_secrets.dm | 113 ----- code/modules/admin/admin_verb_lists.dm | 2 - code/modules/admin/admin_verb_lists_vr.dm | 45 -- code/modules/admin/admin_verbs.dm | 29 +- code/modules/admin/player_effects.dm | 2 +- .../admin/secrets/admin_secrets/admin_logs.dm | 44 -- .../secrets/admin_secrets/alter_narsie.dm | 14 - .../secrets/admin_secrets/bombing_list.dm | 15 - .../secrets/admin_secrets/jump_shuttle.dm | 39 -- .../secrets/admin_secrets/launch_shuttle.dm | 26 -- .../admin_secrets/launch_shuttle_forced.dm | 26 -- .../admin/secrets/admin_secrets/list_dna.dm | 17 - .../admin_secrets/list_fingerprints.dm | 22 - .../secrets/admin_secrets/move_shuttle.dm | 27 -- .../secrets/admin_secrets/prison_warp.dm | 38 -- .../secrets/admin_secrets/show_ai_laws.dm | 7 - .../admin_secrets/show_crew_manifest.dm | 14 - .../secrets/admin_secrets/show_game_mode.dm | 14 - .../secrets/admin_secrets/show_law_changes.dm | 18 - .../secrets/admin_secrets/show_signalers.dm | 18 - .../admin_secrets/traitors_and_objectives.dm | 7 - .../secrets/final_solutions/summon_narsie.dm | 11 - .../final_solutions/supermatter_cascade.dm | 13 - .../secrets/fun_secrets/break_all_lights.dm | 7 - .../secrets/fun_secrets/break_some_lights.dm | 7 - .../secrets/fun_secrets/fix_all_lights.dm | 10 - .../admin/secrets/fun_secrets/ghost_mode.dm | 48 -- .../admin/secrets/fun_secrets/only_one.dm | 7 - .../secrets/fun_secrets/paintball_mode.dm | 14 - .../secrets/fun_secrets/power_all_smes.dm | 7 - .../fun_secrets/power_failure_begin.dm | 7 - .../secrets/fun_secrets/power_failure_end.dm | 7 - .../fun_secrets/remove_all_clothing.dm | 10 - .../fun_secrets/remove_internal_clothing.dm | 10 - .../secrets/fun_secrets/send_strike_team.dm | 11 - .../secrets/fun_secrets/toggle_bomb_cap.dm | 21 - .../secrets/fun_secrets/triple_ai_mode.dm | 13 - .../fun_secrets/turn_humans_into_corgies.dm | 11 - .../fun_secrets/turn_humans_into_monkeys.dm | 11 - .../admin/secrets/random_events/gravity.dm | 31 -- .../admin/secrets/random_events/gravity_vr.dm | 34 -- .../trigger_cordical_borer_infestation.dm | 7 - .../trigger_xenomorph_infestation.dm | 7 - code/modules/admin/topic.dm | 12 +- code/modules/admin/verbs/SDQL2/SDQL_2.dm | 15 +- code/modules/admin/verbs/buildmode.dm | 2 +- code/modules/admin/verbs/debug.dm | 44 ++ code/modules/admin/verbs/entity_narrate.dm | 123 ++--- code/modules/admin/verbs/fps.dm | 27 +- code/modules/admin/verbs/getlogs.dm | 27 +- code/modules/admin/verbs/grief_fixers.dm | 23 +- code/modules/admin/verbs/list_exposer.dm | 121 +++++ code/modules/admin/verbs/mapping.dm | 1 - code/modules/admin/verbs/possess.dm | 59 +-- code/modules/admin/verbs/randomverbs.dm | 13 +- code/modules/admin/verbs/randomverbs_vr.dm | 15 +- code/modules/admin/verbs/resize.dm | 15 +- code/modules/admin/verbs/secrets.dm | 442 ++++++++++++++++++ .../interfaces/Secrets/Tabs/DebuggingTab.tsx | 45 ++ .../interfaces/Secrets/Tabs/FunForYouTab.tsx | 250 ++++++++++ .../tgui/interfaces/Secrets/Tabs/FunTab.tsx | 353 ++++++++++++++ .../interfaces/Secrets/Tabs/HelpfulTab.tsx | 290 ++++++++++++ .../tgui/interfaces/Secrets/constants.ts | 35 ++ .../tgui/interfaces/Secrets/index.tsx | 167 +++++++ .../packages/tgui/interfaces/Secrets/types.ts | 3 + vorestation.dme | 44 +- 72 files changed, 1949 insertions(+), 1132 deletions(-) create mode 100644 code/__defines/html_assistant.dm rename code/controllers/{verbs.dm => admin.dm} (61%) delete mode 100644 code/modules/admin/admin_secrets.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/admin_logs.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/alter_narsie.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/bombing_list.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/jump_shuttle.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/launch_shuttle.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/list_dna.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/list_fingerprints.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/move_shuttle.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/prison_warp.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/show_ai_laws.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/show_game_mode.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/show_law_changes.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/show_signalers.dm delete mode 100644 code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm delete mode 100644 code/modules/admin/secrets/final_solutions/summon_narsie.dm delete mode 100644 code/modules/admin/secrets/final_solutions/supermatter_cascade.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/break_all_lights.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/break_some_lights.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/fix_all_lights.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/ghost_mode.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/only_one.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/paintball_mode.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/power_all_smes.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/power_failure_begin.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/power_failure_end.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/send_strike_team.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm delete mode 100644 code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm delete mode 100644 code/modules/admin/secrets/random_events/gravity.dm delete mode 100644 code/modules/admin/secrets/random_events/gravity_vr.dm delete mode 100644 code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm delete mode 100644 code/modules/admin/secrets/random_events/trigger_xenomorph_infestation.dm create mode 100644 code/modules/admin/verbs/list_exposer.dm create mode 100644 code/modules/admin/verbs/secrets.dm create mode 100644 tgui/packages/tgui/interfaces/Secrets/Tabs/DebuggingTab.tsx create mode 100644 tgui/packages/tgui/interfaces/Secrets/Tabs/FunForYouTab.tsx create mode 100644 tgui/packages/tgui/interfaces/Secrets/Tabs/FunTab.tsx create mode 100644 tgui/packages/tgui/interfaces/Secrets/Tabs/HelpfulTab.tsx create mode 100644 tgui/packages/tgui/interfaces/Secrets/constants.ts create mode 100644 tgui/packages/tgui/interfaces/Secrets/index.tsx create mode 100644 tgui/packages/tgui/interfaces/Secrets/types.ts diff --git a/code/__defines/html_assistant.dm b/code/__defines/html_assistant.dm new file mode 100644 index 0000000000..91af96a95c --- /dev/null +++ b/code/__defines/html_assistant.dm @@ -0,0 +1,5 @@ +#define HTML_SKELETON_INTERNAL(head, body) \ +"[head][body]" + +#define HTML_SKELETON_TITLE(title, body) HTML_SKELETON_INTERNAL("[title]", body) +#define HTML_SKELETON(body) HTML_SKELETON_INTERNAL("", body) diff --git a/code/controllers/verbs.dm b/code/controllers/admin.dm similarity index 61% rename from code/controllers/verbs.dm rename to code/controllers/admin.dm index 0d9371f65d..ff386cd196 100644 --- a/code/controllers/verbs.dm +++ b/code/controllers/admin.dm @@ -1,18 +1,24 @@ -//TODO: rewrite and standardise all controller datums to the datum/controller type -//TODO: allow all controllers to be deleted for clean restarts (see WIP master controller stuff) - MC done - lighting done - // Clickable stat() button. /obj/effect/statclick name = "Initializing..." - blocks_emissive = FALSE + blocks_emissive = FALSE // EMISSIVE_BLOCK_NONE var/target INITIALIZE_IMMEDIATE(/obj/effect/statclick) + /obj/effect/statclick/Initialize(mapload, text, target) . = ..() name = text src.target = target +/obj/effect/statclick/Destroy() + target = null + return ..() + +/obj/effect/statclick/proc/cleanup() + SIGNAL_HANDLER + qdel(src) + /obj/effect/statclick/proc/update(text) name = text return src @@ -28,7 +34,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) class = "subsystem" else if(istype(target, /datum/controller)) class = "controller" - else if(istype(target, /datum)) + else if(isdatum(target)) class = "datum" else class = "unknown" @@ -36,15 +42,7 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) usr.client.debug_variables(target) message_admins("Admin [key_name_admin(usr)] is debugging the [target] [class].") - -// Debug verbs. -/client/proc/restart_controller(controller in list("Master", "Failsafe")) - set category = "Debug.Dangerous" - set name = "Restart Controller" - set desc = "Restart one of the various periodic loop controllers for the game (be careful!)" - - if(!holder) - return +ADMIN_VERB(restart_controller, R_DEBUG, "Restart Controller", "Restart one of the various periodic loop controllers for the game (be careful!)", ADMIN_CATEGORY_DEBUG, controller in list("Master", "Failsafe")) switch(controller) if("Master") Recreate_MC() @@ -53,25 +51,15 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) new /datum/controller/failsafe() feedback_add_details("admin_verb","RFailsafe") - message_admins("Admin [key_name_admin(usr)] has restarted the [controller] controller.") - -/client/proc/debug_antagonist_template(antag_type in GLOB.all_antag_types) - set category = "Debug.Investigate" - set name = "Debug Antagonist" - set desc = "Debug an antagonist template." + message_admins("Admin [key_name_admin(user)] has restarted the [controller] controller.") +ADMIN_VERB(debug_antagonist_template, R_DEBUG, "Debug Antagonist", "Debug an antagonist template", ADMIN_CATEGORY_DEBUG, antag_type in GLOB.all_antag_types) var/datum/antagonist/antag = GLOB.all_antag_types[antag_type] if(antag) - usr.client.debug_variables(antag) - message_admins("Admin [key_name_admin(usr)] is debugging the [antag.role_text] template.") + user.debug_variables(antag) + message_admins("Admin [key_name_admin(user)] is debugging the [antag.role_text] template.") -/client/proc/debug_controller() - set category = "Debug.Investigate" - set name = "Debug Controller" - set desc = "Debug the various subsystems/controllers for the game (be careful!)" - - if(!holder) - return +ADMIN_VERB(debug_controller, R_DEBUG, "Debug Controller", "Debug the various periodic loop controllers for the game (be careful!)", ADMIN_CATEGORY_DEBUG) var/list/options = list() options["MC"] = Master options["Failsafe"] = Failsafe @@ -97,12 +85,12 @@ INITIALIZE_IMMEDIATE(/obj/effect/statclick) options["LEGACY: cameranet"] = cameranet options["LEGACY: transfer_controller"] = transfer_controller - var/pick = tgui_input_list(mob, "Choose a controller to debug/view variables of.", "VV controller:", options) + var/pick = tgui_input_list(user, "Choose a controller to debug/view variables of.", "VV controller:", options) if(!pick) return var/datum/D = options[pick] if(!istype(D)) return feedback_add_details("admin_verb", "DebugController") - message_admins("Admin [key_name_admin(mob)] is debugging the [pick] controller.") - debug_variables(D) + message_admins("Admin [key_name_admin(user)] is debugging the [pick] controller.") + user.debug_variables(D) diff --git a/code/controllers/subsystems/nightshift.dm b/code/controllers/subsystems/nightshift.dm index 143ea5a3c6..e1965e0bbf 100644 --- a/code/controllers/subsystems/nightshift.dm +++ b/code/controllers/subsystems/nightshift.dm @@ -13,10 +13,6 @@ SUBSYSTEM_DEF(nightshift) /datum/controller/subsystem/nightshift/Initialize() if(!CONFIG_GET(flag/enable_night_shifts)) can_fire = FALSE - /* - if(config.randomize_shift_time) - GLOB.gametime_offset = rand(0, 23) HOURS - */ return SS_INIT_SUCCESS /datum/controller/subsystem/nightshift/fire(resumed = FALSE) @@ -60,7 +56,7 @@ SUBSYSTEM_DEF(nightshift) if(nightshift_active != night_time) update_nightshift(night_time, announcing) -/datum/controller/subsystem/nightshift/proc/update_nightshift(active, announce = TRUE) +/datum/controller/subsystem/nightshift/proc/update_nightshift(active, announce = TRUE, resumed = FALSE, forced = FALSE) nightshift_active = active if(announce) if(active) diff --git a/code/datums/ai_laws.dm b/code/datums/ai_laws.dm index 69bfa4773c..949cd4c8fb 100644 --- a/code/datums/ai_laws.dm +++ b/code/datums/ai_laws.dm @@ -18,6 +18,7 @@ return 0 /datum/ai_laws + /// The name of the lawset var/name = "Unknown Laws" var/law_header = "Prime Directives" var/selectable = 0 diff --git a/code/game/antagonist/station/highlander.dm b/code/game/antagonist/station/highlander.dm index c5abfb64a1..02e6349422 100644 --- a/code/game/antagonist/station/highlander.dm +++ b/code/game/antagonist/station/highlander.dm @@ -57,16 +57,33 @@ var/datum/antagonist/highlander/highlanders id.icon_state = "centcom" create_radio(DTH_FREQ, player) -/proc/only_one() +/** + * Gives everyone kilts, berets, claymores, and pinpointers, with the objective to hijack the emergency shuttle. + * Uses highlander controller to do so! + * + * Arguments: + * * was_delayed: boolean: whether the option to do a "delayed" highlander was pressed before this was called, changes up the logging a bit. - if(!ticker) - tgui_alert_async(usr,"The game hasn't started yet!") + */ +/client/proc/only_one(was_delayed = FALSE) + if(!SSticker.HasRoundStarted()) + tgui_alert(usr,"The game hasn't started yet!") return + if(was_delayed) //sends more accurate logs + message_admins(span_adminnotice("[key_name_admin(usr)]'s delayed THERE CAN ONLY BE ONE started!")) + log_admin("[key_name(usr)] delayed THERE CAN ONLY BE ONE started.") + else + message_admins(span_adminnotice("[key_name_admin(usr)] used THERE CAN BE ONLY ONE!")) + log_admin("[key_name(usr)] used THERE CAN BE ONLY ONE.") + for(var/mob/living/carbon/human/H in player_list) if(H.stat == 2 || !(H.client)) continue if(is_special_character(H)) continue highlanders.add_antagonist(H.mind) - message_admins(span_notice("[key_name_admin(usr)] used THERE CAN BE ONLY ONE!"), 1) - log_admin("[key_name(usr)] used there can be only one.") +/client/proc/only_one_delayed() + //send_to_playing_players(span_userdanger("Bagpipes begin to blare. You feel Scottish pride coming over you.")) + message_admins(span_adminnotice("[key_name_admin(usr)] used (delayed) THERE CAN BE ONLY ONE!")) + log_admin("[key_name(usr)] used delayed THERE CAN BE ONLY ONE.") + addtimer(CALLBACK(src, PROC_REF(only_one), TRUE), 42 SECONDS) diff --git a/code/modules/admin/admin.dm b/code/modules/admin/admin.dm index 58cf269dca..5194f34d51 100644 --- a/code/modules/admin/admin.dm +++ b/code/modules/admin/admin.dm @@ -600,6 +600,7 @@ GLOBAL_VAR_INIT(floorIsLava, 0) popup.set_content(dat) popup.open() +/* /datum/admins/proc/Secrets(var/datum/admin_secret_category/active_category = null) if(!check_rights(0)) return @@ -626,6 +627,7 @@ GLOBAL_VAR_INIT(floorIsLava, 0) popup.set_content(dat) popup.open() return +*/ /////////////////////////////////////////////////////////////////////////////////////////////////admins2.dm merge //i.e. buttons/verbs @@ -1299,27 +1301,6 @@ var/datum/announcement/minor/admin_min_announcer = new message_admins(span_blue("[key_name_admin(usr)] toggled guests game entering [CONFIG_GET(flag/guests_allowed)?"":"dis"]allowed."), 1) feedback_add_details("admin_verb","TGU") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/datum/admins/proc/output_ai_laws() - var/ai_number = 0 - for(var/mob/living/silicon/S in mob_list) - ai_number++ - if(isAI(S)) - to_chat(usr, span_bold("AI [key_name(S, usr)]'s laws:")) - else if(isrobot(S)) - var/mob/living/silicon/robot/R = S - to_chat(usr, span_bold("CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"]: laws:")) - else if (ispAI(S)) - to_chat(usr, span_bold("pAI [key_name(S, usr)]'s laws:")) - else - to_chat(usr, span_bold("SOMETHING SILICON [key_name(S, usr)]'s laws:")) - - if (S.laws == null) - to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") - else - S.laws.show_laws(usr) - if(!ai_number) - to_chat(usr, span_bold("No AIs located")) //Just so you know the thing is actually working and not just ignoring you. - /client/proc/update_mob_sprite(mob/living/carbon/human/H as mob) set category = "Admin.Game" set name = "Update Mob Sprite" diff --git a/code/modules/admin/admin_secrets.dm b/code/modules/admin/admin_secrets.dm deleted file mode 100644 index d88ea17270..0000000000 --- a/code/modules/admin/admin_secrets.dm +++ /dev/null @@ -1,113 +0,0 @@ -var/datum/admin_secrets/admin_secrets = new() - -/datum/admin_secrets - var/list/datum/admin_secret_category/categories - var/list/datum/admin_secret_item/items - -/datum/admin_secrets/New() - ..() - categories = init_subtypes(/datum/admin_secret_category) - items = list() - var/list/category_assoc = list() - for(var/datum/admin_secret_category/category in categories) - category_assoc[category.type] = category - - for(var/item_type in subtypesof(/datum/admin_secret_item)) - var/datum/admin_secret_item/secret_item = item_type - if(!initial(secret_item.name)) - continue - - var/datum/admin_secret_item/item = new item_type() - var/datum/admin_secret_category/category = category_assoc[item.category] - dd_insertObjectList(category.items, item) - items += item - -// -// Secret Item Category - Each subtype is a category for organizing secret commands. -// -/datum/admin_secret_category - var/name = "" - var/desc = "" - var/list/datum/admin_secret_item/items = list() - -/datum/admin_secret_category/proc/can_view(var/mob/user) - for(var/datum/admin_secret_item/item in items) - if(item.can_view(user)) - return 1 - return 0 - -// -// Secret Item Datum - Each subtype is a command on the secrets panel. -// Override execute() with the implementation of the command. -// -/datum/admin_secret_item - var/name = "" - var/category = null - var/log = 1 - var/feedback = 1 - var/permissions = R_HOST - var/warn_before_use = 0 - -/datum/admin_secret_item/dd_SortValue() - return "[name]" - -/datum/admin_secret_item/proc/name() - return name - -/datum/admin_secret_item/proc/can_view(var/mob/user) - return check_rights_for(user.client, permissions) - -/datum/admin_secret_item/proc/can_execute(var/mob/user) - if(can_view(user)) - if(!warn_before_use || tgui_alert(user, "Execute the command '[name]'?", name, list("No","Yes")) == "Yes") - return 1 - return 0 - -/datum/admin_secret_item/proc/execute(var/mob/user) - if(!can_execute(user)) - return 0 - - if(log) - log_and_message_admins("used secret '[name]'", user) - if(feedback) - feedback_inc("admin_secrets_used",1) - feedback_add_details("admin_secrets_used","[name]") - return 1 - -/************************* -* Pre-defined categories * -*************************/ -/datum/admin_secret_category/admin_secrets - name = "Admin Secrets" - -/datum/admin_secret_category/random_events - name = "'Random' Events" - -/datum/admin_secret_category/fun_secrets - name = "Fun Secrets" - -/datum/admin_secret_category/final_solutions - name = "Final Solutions" - desc = "(Warning, these will end the round!)" - -/************************* -* Pre-defined base items * -*************************/ -/datum/admin_secret_item/admin_secret - category = /datum/admin_secret_category/admin_secrets - log = 0 - permissions = R_ADMIN //VOREStation Edit - -/datum/admin_secret_item/random_event - category = /datum/admin_secret_category/random_events - permissions = R_FUN //VOREStation Edit - warn_before_use = 1 - -/datum/admin_secret_item/fun_secret - category = /datum/admin_secret_category/fun_secrets - permissions = R_FUN //VOREStation Edit - warn_before_use = 1 - -/datum/admin_secret_item/final_solution - category = /datum/admin_secret_category/final_solutions - permissions = R_FUN|R_SERVER|R_ADMIN //VOREStation Edit diff --git a/code/modules/admin/admin_verb_lists.dm b/code/modules/admin/admin_verb_lists.dm index 324b1aa16a..963453008b 100644 --- a/code/modules/admin/admin_verb_lists.dm +++ b/code/modules/admin/admin_verb_lists.dm @@ -105,7 +105,6 @@ var/list/admin_verbs_admin = list( /client/proc/toggle_attack_logs, /datum/admins/proc/paralyze_mob, /client/proc/fixatmos, - /datum/admins/proc/quick_nif, //VOREStation Add, /datum/admins/proc/quick_authentic_nif, //CHOMPStation add /datum/admins/proc/sendFax, /client/proc/despawn_player, @@ -376,7 +375,6 @@ var/list/admin_verbs_mod = list( /client/proc/getserverlog, //allows us to fetch server logs (GLOB.diary) for other days, /datum/admins/proc/view_persistent_data, /datum/admins/proc/view_txt_log, //shows the server log (diary) for today, - /datum/admins/proc/quick_nif, //CHOMPEdit /datum/admins/proc/quick_authentic_nif, //CHOMPEdit /client/proc/admin_teleport, //CHOMPEdit /datum/admins/proc/view_atk_log //shows the server combat-log, doesn't do anything presently, diff --git a/code/modules/admin/admin_verb_lists_vr.dm b/code/modules/admin/admin_verb_lists_vr.dm index db0863e629..1a0cf10609 100644 --- a/code/modules/admin/admin_verb_lists_vr.dm +++ b/code/modules/admin/admin_verb_lists_vr.dm @@ -31,11 +31,9 @@ var/list/admin_verbs_admin = list( /client/proc/cmd_admin_check_player_logs, //checks a player's attack logs, /client/proc/cmd_admin_check_dialogue_logs, //checks a player's dialogue logs, /datum/admins/proc/access_news_network, //allows access of newscasters, - /client/proc/getserverlog, //allows us to fetch server logs (diary) for other days, /client/proc/jumptocoord, //we ghost and jump to a coordinate, /client/proc/Getmob, //teleports a mob to our location, /client/proc/Getkey, //teleports a mob with a certain ckey to our location, -// /client/proc/sendmob, //sends a mob somewhere, -Removed due to it needing two sorting procs to work, which were executed every time an admin right-clicked. ~Errorage, /client/proc/Jump, /client/proc/jumptokey, //allows us to jump to the location of a mob with a certain ckey, /client/proc/jumptomob, //allows us to jump to a specific mob, @@ -44,7 +42,6 @@ var/list/admin_verbs_admin = list( /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom, /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text, /client/proc/cmd_admin_world_narrate, //sends text to all players with no padding, - /client/proc/cmd_admin_z_narrate, //VOREStation Add, /client/proc/cmd_admin_create_centcom_report, /client/proc/check_words, //displays cult-words, /client/proc/check_ai_laws, //shows AI and borg laws, @@ -54,9 +51,7 @@ var/list/admin_verbs_admin = list( /client/proc/check_antagonists, /client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others, /client/proc/dsay, //talk in deadchat using our ckey/fakekey, -// /client/proc/toggle_hear_deadcast, //toggles whether we hear deadchat, /client/proc/investigate_show, //various admintools for investigation. Such as a singulo grief-log, - /client/proc/secrets, /datum/admins/proc/toggleooc, //toggles ooc on/off for everyone, /datum/admins/proc/togglelooc, //toggles looc on/off for everyone, /datum/admins/proc/toggleoocdead, //toggles ooc on/off for everyone who is dead, @@ -87,8 +82,6 @@ var/list/admin_verbs_admin = list( /client/proc/view_chemical_reaction_logs, /client/proc/makepAI, /datum/admins/proc/paralyze_mob, - /client/proc/fixatmos, - /datum/admins/proc/quick_nif, //VOREStation Add, /datum/admins/proc/quick_authentic_nif, //CHOMPStation add /datum/admins/proc/set_uplink, //VOREStation Add, /datum/admins/proc/sendFax, @@ -130,14 +123,9 @@ var/list/admin_verbs_fun = list( // /client/proc/smite, //Replaced by player_effects /client/proc/player_effects, /client/proc/admin_lightning_strike, - /client/proc/resize, //VOREStation Add, /client/proc/tgui_admin_lists, //CHOMPStation Add /client/proc/cmd_admin_droppod_deploy, /client/proc/adminorbit, //VOREStation Add - /client/proc/add_mob_for_narration, //VOREStation Add - /client/proc/remove_mob_for_narration, //VOREStation Add - /client/proc/narrate_mob, //VOREStation Add - /client/proc/narrate_mob_args, //VOREStation Add /client/proc/getPlayerStatus, //VORESTation Add /client/proc/manage_event_triggers, /client/proc/fake_pdaconvos @@ -152,7 +140,6 @@ var/list/admin_verbs_spawn = list( /datum/admins/proc/spawn_atom, //allows us to spawn instances, /datum/admins/proc/spawn_mail, /client/proc/cmd_admin_droppod_spawn, - /client/proc/respawn_character, /client/proc/spawn_character_mob, //VOREStation Add, /client/proc/spawn_chemdisp_cartridge, /client/proc/map_template_load, @@ -204,8 +191,6 @@ var/list/admin_verbs_debug = list( /client/proc/ZASSettings, /client/proc/cmd_debug_make_powernets, /client/proc/kill_airgroup, - /client/proc/debug_controller, - /client/proc/debug_antagonist_template, /client/proc/cmd_debug_mob_lists, /client/proc/cmd_debug_using_map, /client/proc/cmd_admin_delete, @@ -217,7 +202,6 @@ var/list/admin_verbs_debug = list( /client/proc/air_report, /client/proc/reload_admins, /client/proc/reload_eventMs, - /client/proc/restart_controller, /datum/admins/proc/restart, /client/proc/print_random_map, /client/proc/create_random_map, @@ -228,7 +212,6 @@ var/list/admin_verbs_debug = list( /client/proc/enable_debug_verbs, /client/proc/callproc, /client/proc/callproc_datum, - /client/proc/SDQL2_query, /client/proc/Jump, /client/proc/jumptomob, /client/proc/jumptocoord, @@ -255,7 +238,6 @@ var/list/admin_verbs_debug = list( /datum/admins/proc/view_feedback, /client/proc/stop_sounds, /client/proc/spawn_reagent, - /datum/admins/proc/quick_nif, //CHOMPStation Add, /datum/admins/proc/quick_authentic_nif, //CHOMPStation add /client/proc/reload_jobwhitelist, //ChompADD /client/proc/reload_alienwhitelist, //ChompADD @@ -265,15 +247,6 @@ var/list/admin_verbs_debug = list( var/list/admin_verbs_paranoid_debug = list( /client/proc/callproc, /client/proc/callproc_datum, - /client/proc/debug_controller - ) - -var/list/admin_verbs_possess = list( - /proc/possess, - /proc/release - ) -var/list/admin_verbs_rejuv = list( - /client/proc/respawn_character ) //verbs which can be hidden - needs work @@ -294,7 +267,6 @@ var/list/admin_verbs_hideable = list( /client/proc/admin_cancel_shuttle, /client/proc/cmd_admin_direct_narrate, /client/proc/cmd_admin_world_narrate, - /client/proc/cmd_admin_z_narrate, //VOREStation Add, /client/proc/check_words, /client/proc/play_local_sound, /client/proc/play_sound, @@ -326,7 +298,6 @@ var/list/admin_verbs_hideable = list( /datum/admins/proc/adrev, /datum/admins/proc/adspawn, /datum/admins/proc/adjump, - /client/proc/restart_controller, /client/proc/cmd_admin_list_open_jobs, /client/proc/callproc, /client/proc/callproc_datum, @@ -335,7 +306,6 @@ var/list/admin_verbs_hideable = list( /client/proc/kill_air, /client/proc/cmd_debug_make_powernets, /client/proc/kill_airgroup, - /client/proc/debug_controller, /client/proc/startSinglo, /client/proc/simple_DPS, /client/proc/cmd_debug_mob_lists, @@ -346,8 +316,6 @@ var/list/admin_verbs_hideable = list( /client/proc/air_report, /client/proc/enable_debug_verbs, /client/proc/roll_dices, - /proc/possess, - /proc/release, /datum/admins/proc/set_uplink, //VOREStation Add, /datum/admins/proc/set_tcrystals, /client/proc/stop_sounds @@ -376,13 +344,10 @@ var/list/admin_verbs_mod = list( /client/proc/cmd_admin_subtle_message, //send an message to somebody as a 'voice in their head', /datum/admins/proc/paralyze_mob, /client/proc/cmd_admin_direct_narrate, - /client/proc/cmd_admin_z_narrate, //VOREStation Add, /client/proc/allow_character_respawn, // Allows a ghost to respawn , /datum/admins/proc/sendFax, - /client/proc/getserverlog, //allows us to fetch server logs (GLOB.diary) for other days, /datum/admins/proc/view_persistent_data, /client/proc/start_vote, - /datum/admins/proc/quick_nif, //CHOMPStation Add, /client/proc/reload_jobwhitelist, //ChompADD /client/proc/reload_alienwhitelist //ChompADD ) @@ -408,12 +373,8 @@ var/list/admin_verbs_event_manager = list( /client/proc/aooc, /datum/admins/proc/paralyze_mob, /client/proc/cmd_admin_direct_narrate, - /client/proc/cmd_admin_z_narrate, //VOREStation Add, /client/proc/allow_character_respawn, /datum/admins/proc/sendFax, - /client/proc/respawn_character, - /proc/possess, - /proc/release, /datum/admins/proc/change_weather, /datum/admins/proc/change_time, /client/proc/cmd_regenerate_asset_cache, @@ -442,8 +403,6 @@ var/list/admin_verbs_event_manager = list( /datum/admins/proc/PlayerNotes, /client/proc/callproc, /client/proc/callproc_datum, - /client/proc/debug_controller, - // /client/proc/show_gm_status, // VOREStation Edit - We don't use SSgame_master yet. /datum/admins/proc/change_weather, /datum/admins/proc/change_time, /client/proc/cmd_regenerate_asset_cache, @@ -483,7 +442,6 @@ var/list/admin_verbs_event_manager = list( /client/proc/admin_cancel_shuttle, //allows us to cancel the emergency shuttle, sending it back to CentCom, /client/proc/cmd_admin_direct_narrate, //send text directly to a player with no padding. Useful for narratives and fluff-text, /client/proc/cmd_admin_world_narrate, //sends text to all players with no padding, - /client/proc/cmd_admin_z_narrate, //VOREStation Add, /client/proc/cmd_admin_create_centcom_report, /client/proc/check_words, //displays cult-words, /client/proc/check_ai_laws, //shows AI and borg laws, @@ -493,7 +451,6 @@ var/list/admin_verbs_event_manager = list( /client/proc/check_antagonists, /client/proc/admin_memo, //admin memo system. show/delete/write. +SERVER needed to delete admin memos of others, /client/proc/dsay, //talk in deadchat using our ckey/fakekey, - /client/proc/secrets, /datum/admins/proc/show_player_info, /client/proc/free_slot, //frees slot for chosen job, /client/proc/cmd_admin_change_custom_event, @@ -511,7 +468,6 @@ var/list/admin_verbs_event_manager = list( /client/proc/change_security_level, /client/proc/makepAI, /datum/admins/proc/paralyze_mob, - /client/proc/fixatmos, /datum/admins/proc/sendFax, /client/proc/despawn_player, /datum/admins/proc/view_feedback, @@ -535,7 +491,6 @@ var/list/admin_verbs_event_manager = list( /client/proc/hide_motion_tracker_feedback, /client/proc/modify_event_collector, /client/proc/induce_malfunction, - /datum/admins/proc/quick_nif, //CHOMPStation Add, /datum/admins/proc/quick_authentic_nif, //CHOMPStation add /client/proc/reload_jobwhitelist, //ChompADD /client/proc/reload_alienwhitelist //ChompADD diff --git a/code/modules/admin/admin_verbs.dm b/code/modules/admin/admin_verbs.dm index d1e5ffa8b4..32b8e1d53c 100644 --- a/code/modules/admin/admin_verbs.dm +++ b/code/modules/admin/admin_verbs.dm @@ -10,9 +10,7 @@ add_verb(src, admin_verbs_debug) if(CONFIG_GET(flag/debugparanoid) && !(rights & R_ADMIN)) remove_verb(src, admin_verbs_paranoid_debug) //Right now it's just callproc but we can easily add others later on. - if(rights & R_POSSESS) add_verb(src, admin_verbs_possess) if(rights & R_STEALTH) add_verb(src, /client/proc/stealth) - if(rights & R_REJUVINATE) add_verb(src, admin_verbs_rejuv) if(rights & R_SOUNDS) add_verb(src, admin_verbs_sounds) if(rights & R_SPAWN) add_verb(src, admin_verbs_spawn) if(rights & R_MOD) add_verb(src, admin_verbs_mod) @@ -29,9 +27,7 @@ admin_verbs_fun, admin_verbs_server, admin_verbs_debug, - admin_verbs_possess, /client/proc/stealth, - admin_verbs_rejuv, admin_verbs_sounds, admin_verbs_spawn, debug_verbs @@ -143,6 +139,21 @@ to_chat(mob, span_filter_system(span_boldnotice("Invisimin on. You are now as invisible as a ghost."))) mob.alpha = max(mob.alpha - 100, 0) +ADMIN_VERB(list_bombers, R_ADMIN, "List Bombers", "Look at all bombs and their likely culprit.", ADMIN_CATEGORY_GAME) + user.holder.list_bombers() + //BLACKBOX_LOG_ADMIN_VERB("List Bombers") + +ADMIN_VERB(list_signalers, R_ADMIN, "List Signalers", "View all signalers.", ADMIN_CATEGORY_GAME) + user.holder.list_signalers() + //BLACKBOX_LOG_ADMIN_VERB("List Signalers") + +ADMIN_VERB(list_law_changes, R_ADMIN, "List Law Changes", "View all AI law changes.", ADMIN_CATEGORY_DEBUG) + user.holder.list_law_changes() + //BLACKBOX_LOG_ADMIN_VERB("List Law Changes") + +ADMIN_VERB(show_manifest, R_ADMIN, "Show Manifest", "View the shift's Manifest.", ADMIN_CATEGORY_DEBUG) + user.holder.show_manifest() + //BLACKBOX_LOG_ADMIN_VERB("Show Manifest") /client/proc/player_panel() set name = "Player Panel" @@ -187,14 +198,6 @@ ADMIN_VERB(game_panel, R_ADMIN|R_SERVER|R_FUN, "Game Panel", "Look at the state user.holder.Game() feedback_add_details("admin_verb","GP") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/client/proc/secrets() - set name = "Secrets" - set category = "Admin.Secrets" - if(check_rights(R_HOLDER)) - holder.Secrets() - feedback_add_details("admin_verb","S") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - return - /client/proc/findStealthKey(txt) if(txt) for(var/P in GLOB.stealthminID) @@ -540,7 +543,7 @@ ADMIN_VERB(deadmin, R_NONE, "DeAdmin", "Shed your admin powers.", ADMIN_CATEGORY log_admin("[key_name(usr)] gave [key_name(T)] the spell [S].") message_admins(span_blue("[key_name_admin(usr)] gave [key_name(T)] the spell [S]."), 1) -ADMIN_VERB(debugstatpanel, R_DEBUG, "Debug Stat Panel", "Allows to debug the statpanel", "Debug.Misc") +ADMIN_VERB(debug_statpanel, R_DEBUG, "Debug Stat Panel", "Toggles local debug of the stat panel", "Debug.Misc") user.stat_panel.send_message("create_debug") /client/proc/spawn_reagent() diff --git a/code/modules/admin/player_effects.dm b/code/modules/admin/player_effects.dm index 2975754f04..b4ad787391 100644 --- a/code/modules/admin/player_effects.dm +++ b/code/modules/admin/player_effects.dm @@ -681,7 +681,7 @@ log_and_message_admins("Quick NIF'd [Tar.real_name] with a [input_NIF].", user) if("resize") - user.client.resize(target) + SSadmin_verbs.dynamic_invoke_verb(user.client, /datum/admin_verb/resize, target) if("teleport") var/where = tgui_alert(user, "Where to teleport?", "Where?", list("To Me", "To Mob", "To Area", "Cancel")) diff --git a/code/modules/admin/secrets/admin_secrets/admin_logs.dm b/code/modules/admin/secrets/admin_secrets/admin_logs.dm deleted file mode 100644 index bcd06df96f..0000000000 --- a/code/modules/admin/secrets/admin_secrets/admin_logs.dm +++ /dev/null @@ -1,44 +0,0 @@ -/datum/admin_secret_item/admin_secret/admin_logs - name = "Admin Logs" - -/datum/admin_secret_item/admin_secret/admin_logs/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = span_bold("Admin Log
") - for(var/l in GLOB.admin_log) - dat += "
  • [l]
  • " - if(!GLOB.admin_log.len) - dat += "No-one has done anything this round!" - - var/datum/browser/popup = new(user, "adminlogs", "[src]", 550, 650, src) - popup.set_content(jointext(dat,null)) - popup.open() - - onclose(user, "adminlogs") - - -/datum/admin_secret_item/admin_secret/round_logs - name = "Round Dialogue Logs" - -/datum/admin_secret_item/admin_secret/round_logs/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = span_bold("Dialogue Log
    ") - - dat += "
    " - - for(var/l in GLOB.round_text_log) - dat += "
  • [l]
  • " - - dat += "
    " - - if(!GLOB.round_text_log) - dat += "No-one has said anything this round! (How odd?)" - - var/datum/browser/popup = new(user, "dialoguelogs", "[src]", 550, 650, src) - popup.set_content(jointext(dat,null)) - popup.open() - - onclose(user, "dialoguelogs") diff --git a/code/modules/admin/secrets/admin_secrets/alter_narsie.dm b/code/modules/admin/secrets/admin_secrets/alter_narsie.dm deleted file mode 100644 index e15dd13319..0000000000 --- a/code/modules/admin/secrets/admin_secrets/alter_narsie.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/admin_secret_item/admin_secret/alter_narise - name = "Alter Nar-Sie" - -/datum/admin_secret_item/admin_secret/alter_narise/execute(var/mob/user) - . = ..() - if(!.) - return - var/choice = tgui_alert(user, "How do you wish for Nar-Sie to interact with its surroundings?","NarChoice",list("CultStation13", "Nar-Singulo")) - if(choice == "CultStation13") - log_and_message_admins("has set narsie's behaviour to \"CultStation13\".", user) - narsie_behaviour = choice - if(choice == "Nar-Singulo") - log_and_message_admins("has set narsie's behaviour to \"Nar-Singulo\".", user) - narsie_behaviour = choice diff --git a/code/modules/admin/secrets/admin_secrets/bombing_list.dm b/code/modules/admin/secrets/admin_secrets/bombing_list.dm deleted file mode 100644 index 95f59c2bb1..0000000000 --- a/code/modules/admin/secrets/admin_secrets/bombing_list.dm +++ /dev/null @@ -1,15 +0,0 @@ -/datum/admin_secret_item/admin_secret/bombing_list - name = "Bombing List" - -/datum/admin_secret_item/admin_secret/bombing_list/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = span_bold("Bombing List") - for(var/l in GLOB.bombers) - dat += text("[l]
    ") - - var/datum/browser/popup = new(user, "bombers", "Bombers") - popup.set_content(dat) - popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm b/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm deleted file mode 100644 index a73fafbb7c..0000000000 --- a/code/modules/admin/secrets/admin_secrets/jump_shuttle.dm +++ /dev/null @@ -1,39 +0,0 @@ -/datum/admin_secret_item/admin_secret/jump_shuttle - name = "Jump a Shuttle" - -/datum/admin_secret_item/admin_secret/jump_shuttle/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/jump_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) - if (!shuttle_tag) return - - var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] - - var/list/area_choices = return_areas() - var/origin_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) - if (!origin_area) return - - var/destination_area = tgui_input_list(user, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) - if (!destination_area) return - - var/long_jump = tgui_alert(user, "Is there a transition area for this jump?","Transition?", list("Yes","No")) - if(!long_jump) - return - if (long_jump == "Yes") - var/transition_area = tgui_input_list(user, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) - if (!transition_area) return - - var/move_duration = tgui_input_number(user, "How many seconds will this jump take?") - - S.long_jump(area_choices[origin_area], area_choices[destination_area], area_choices[transition_area], move_duration) - message_admins(span_notice("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle"), 1) - log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle") - else - S.short_jump(area_choices[origin_area], area_choices[destination_area]) - message_admins(span_notice("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle"), 1) - log_admin("[key_name_admin(user)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle") diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm deleted file mode 100644 index 007530e7de..0000000000 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/admin_secret_item/admin_secret/launch_shuttle - name = "Launch a Shuttle" - -/datum/admin_secret_item/admin_secret/launch_shuttle/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/launch_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/list/valid_shuttles = list() - for (var/shuttle_tag in SSshuttles.shuttles) - if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) - valid_shuttles += shuttle_tag - - var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to launch?", "Shuttle Choice", valid_shuttles) - if (!shuttle_tag) - return - - var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] - if (S.can_launch()) - S.launch(user) - log_and_message_admins("launched the [shuttle_tag] shuttle", user) - else - tgui_alert_async(user, "The [shuttle_tag] shuttle cannot be launched at this time. It's probably busy.") diff --git a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm b/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm deleted file mode 100644 index 517ddc91f7..0000000000 --- a/code/modules/admin/secrets/admin_secrets/launch_shuttle_forced.dm +++ /dev/null @@ -1,26 +0,0 @@ -/datum/admin_secret_item/admin_secret/launch_shuttle_forced - name = "Launch a Shuttle (Forced)" - -/datum/admin_secret_item/admin_secret/launch_shuttle_forced/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/launch_shuttle_forced/execute(var/mob/user) - . = ..() - if(!.) - return - var/list/valid_shuttles = list() - for (var/shuttle_tag in SSshuttles.shuttles) - if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) - valid_shuttles += shuttle_tag - - var/shuttle_tag = tgui_input_list(user, "Which shuttle's launch do you want to force?", "Shuttle Choice", valid_shuttles) - if (!shuttle_tag) - return - - var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] - if (S.can_force()) - S.force_launch(user) - log_and_message_admins("forced the [shuttle_tag] shuttle", user) - else - tgui_alert_async(user, "The [shuttle_tag] shuttle launch cannot be forced at this time. It's busy, or hasn't been launched yet.") diff --git a/code/modules/admin/secrets/admin_secrets/list_dna.dm b/code/modules/admin/secrets/admin_secrets/list_dna.dm deleted file mode 100644 index 36bea6515a..0000000000 --- a/code/modules/admin/secrets/admin_secrets/list_dna.dm +++ /dev/null @@ -1,17 +0,0 @@ -/datum/admin_secret_item/admin_secret/list_dna - name = "List DNA (Blood)" - -/datum/admin_secret_item/admin_secret/list_dna/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = span_bold("Showing DNA from blood.") + "
    " - dat += "" - for(var/mob/living/carbon/human/H in mob_list) - if(H.dna && H.ckey) - dat += "" - dat += "
    NameDNABlood Type
    [H][H.dna.unique_enzymes][H.dna ? H.dna.b_type : DEFAULT_BLOOD_TYPE]
    " - - var/datum/browser/popup = new(user, "DNA", "DNA", 440, 410) - popup.set_content(dat) - popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm b/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm deleted file mode 100644 index f38929c929..0000000000 --- a/code/modules/admin/secrets/admin_secrets/list_fingerprints.dm +++ /dev/null @@ -1,22 +0,0 @@ -/datum/admin_secret_item/admin_secret/list_fingerprints - name = "List Fingerprints" - -/datum/admin_secret_item/admin_secret/list_fingerprints/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat = span_bold("Showing Fingerprints.") + "
    " - dat += "" - for(var/mob/living/carbon/human/H in mob_list) - if(H.ckey) - if(H.dna && H.dna.uni_identity) - dat += "" - else if(H.dna && !H.dna.uni_identity) - dat += "" - else if(!H.dna) - dat += "" - dat += "
    NameFingerprints
    [H][md5(H.dna.uni_identity)]
    [H]H.dna.uni_identity = null
    [H]H.dna = null
    " - - var/datum/browser/popup = new(user, "fingerprints", "Fingerprints", 440, 410) - popup.set_content(dat) - popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm b/code/modules/admin/secrets/admin_secrets/move_shuttle.dm deleted file mode 100644 index 6417c519b8..0000000000 --- a/code/modules/admin/secrets/admin_secrets/move_shuttle.dm +++ /dev/null @@ -1,27 +0,0 @@ -/datum/admin_secret_item/admin_secret/move_shuttle - name = "Move a Shuttle" - -/datum/admin_secret_item/admin_secret/move_shuttle/can_execute(var/mob/user) - if(!SSshuttles) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/move_shuttle/execute(var/mob/user) - . = ..() - if(!.) - return - var/confirm = tgui_alert(user, "This command directly moves a shuttle from one area to another. DO NOT USE THIS UNLESS YOU ARE DEBUGGING A SHUTTLE AND YOU KNOW WHAT YOU ARE DOING.", "Are you sure?", list("Ok", "Cancel")) - if (confirm != "Ok") - return - - var/shuttle_tag = tgui_input_list(user, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) - if (!shuttle_tag) return - - var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] - - var/destination_tag = tgui_input_list(user, "Which landmark do you want to jump to? (IF YOU GET THIS WRONG THINGS WILL BREAK)", "Landmark Choice", SSshuttles.registered_shuttle_landmarks) - if (!destination_tag) return - var/destination_location = SSshuttles.get_landmark(destination_tag) - if (!destination_location) return - - S.attempt_move(destination_location) - log_and_message_admins("moved the [shuttle_tag] shuttle", user) diff --git a/code/modules/admin/secrets/admin_secrets/prison_warp.dm b/code/modules/admin/secrets/admin_secrets/prison_warp.dm deleted file mode 100644 index 233f852e93..0000000000 --- a/code/modules/admin/secrets/admin_secrets/prison_warp.dm +++ /dev/null @@ -1,38 +0,0 @@ -/datum/admin_secret_item/admin_secret/prison_warp - name = "Prison Warp" - -/datum/admin_secret_item/admin_secret/prison_warp/can_execute(var/mob/user) - if(!ticker) return 0 - return ..() - -/datum/admin_secret_item/admin_secret/prison_warp/execute(var/mob/user) - . = ..() - if(!.) - return - for(var/mob/living/carbon/human/H in mob_list) - var/turf/T = get_turf(H) - var/security = 0 - if((T in using_map.admin_levels) || GLOB.prisonwarped.Find(H)) - //don't warp them if they aren't ready or are already there - continue - H.Paralyse(5) - if(H.wear_id) - var/obj/item/card/id/id = H.get_idcard() - for(var/A in id.GetAccess()) - if(A == access_security) - security++ - if(!security) - //strip their stuff before they teleport into a cell :downs: - for(var/obj/item/W in H) - if(istype(W, /obj/item/organ/external)) - continue - //don't strip organs - H.drop_from_inventory(W) - //teleport person to cell - H.loc = pick(GLOB.prisonwarp) - H.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(H), slot_w_uniform) - H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) - else - //teleport security person - H.loc = pick(GLOB.prisonsecuritywarp) - GLOB.prisonwarped += H diff --git a/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm b/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm deleted file mode 100644 index c9e7cec5df..0000000000 --- a/code/modules/admin/secrets/admin_secrets/show_ai_laws.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_ai_laws - name = "Show AI laws" - -/datum/admin_secret_item/admin_secret/show_ai_laws/execute(var/mob/user) - . = ..() - if(.) - user.client.holder.output_ai_laws() diff --git a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm b/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm deleted file mode 100644 index b3ac22031c..0000000000 --- a/code/modules/admin/secrets/admin_secrets/show_crew_manifest.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_crew_manifest - name = "Show Crew Manifest" - -/datum/admin_secret_item/admin_secret/show_crew_manifest/execute(var/mob/user) - . = ..() - if(!.) - return - var/dat - dat += "

    Crew Manifest

    " - dat += GLOB.data_core.get_manifest() - - var/datum/browser/popup = new(user, "manifest", "Manifest", 370, 420) - popup.set_content(dat) - popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm b/code/modules/admin/secrets/admin_secrets/show_game_mode.dm deleted file mode 100644 index a323266f5c..0000000000 --- a/code/modules/admin/secrets/admin_secrets/show_game_mode.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_game_mode - name = "Show Game Mode" - -/datum/admin_secret_item/admin_secret/show_game_mode/can_execute(var/mob/user) - if(!ticker) - return 0 - return ..() - -/datum/admin_secret_item/admin_secret/show_game_mode/execute(var/mob/user) - . = ..() - if(!.) - return - if (ticker.mode) tgui_alert_async(usr, "The game mode is [ticker.mode.name]") - else tgui_alert_async(usr, "For some reason there's a ticker, but not a game mode") diff --git a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm b/code/modules/admin/secrets/admin_secrets/show_law_changes.dm deleted file mode 100644 index f72d796f4b..0000000000 --- a/code/modules/admin/secrets/admin_secrets/show_law_changes.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_law_changes - name = "Show law changes" - -/datum/admin_secret_item/admin_secret/show_law_changes/name() - return "Show Last [length(GLOB.lawchanges)] Law change\s" - -/datum/admin_secret_item/admin_secret/show_law_changes/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = span_bold("Showing last [length(GLOB.lawchanges)] law changes.") + "
    " - for(var/sig in GLOB.lawchanges) - dat += "[sig]
    " - - var/datum/browser/popup = new(user, "lawchanges", "Lawcahnges", 800, 500) - popup.set_content(dat) - popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/show_signalers.dm b/code/modules/admin/secrets/admin_secrets/show_signalers.dm deleted file mode 100644 index e6663d6f62..0000000000 --- a/code/modules/admin/secrets/admin_secrets/show_signalers.dm +++ /dev/null @@ -1,18 +0,0 @@ -/datum/admin_secret_item/admin_secret/show_signalers - name = "Show Last Signalers" - -/datum/admin_secret_item/admin_secret/show_signalers/name() - return "Show Last [length(GLOB.lastsignalers)] Signaler\s" - -/datum/admin_secret_item/admin_secret/show_signalers/execute(var/mob/user) - . = ..() - if(!.) - return - - var/dat = span_bold("Showing last [length(GLOB.lastsignalers)] signalers.") + "
    " - for(var/sig in GLOB.lastsignalers) - dat += "[sig]
    " - - var/datum/browser/popup = new(user, "lastsignalers", "Last Signallers", 800, 500) - popup.set_content(dat) - popup.open() diff --git a/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm b/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm deleted file mode 100644 index bcfd9cd7b9..0000000000 --- a/code/modules/admin/secrets/admin_secrets/traitors_and_objectives.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/admin_secret/traitors_and_objectives - name = "Show current traitors and objectives" - -/datum/admin_secret_item/admin_secret/traitors_and_objectives/execute(var/mob/user) - . = ..() - if(.) - user.client.holder.check_antagonists() diff --git a/code/modules/admin/secrets/final_solutions/summon_narsie.dm b/code/modules/admin/secrets/final_solutions/summon_narsie.dm deleted file mode 100644 index 738c56e674..0000000000 --- a/code/modules/admin/secrets/final_solutions/summon_narsie.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/admin_secret_item/final_solution/summon_narsie - name = "Summon Nar-Sie" - -/datum/admin_secret_item/final_solution/summon_narsie/execute(var/mob/user) - . = ..() - if(!.) - return - var/choice = tgui_alert(user, "You sure you want to end the round and summon Nar-Sie at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!",list("PRAISE SATAN", "Cancel")) - if(choice == "PRAISE SATAN") - new /obj/singularity/narsie/large(get_turf(user)) - log_and_message_admins("has summoned Nar-Sie and brought about a new realm of suffering.", user) diff --git a/code/modules/admin/secrets/final_solutions/supermatter_cascade.dm b/code/modules/admin/secrets/final_solutions/supermatter_cascade.dm deleted file mode 100644 index b764077179..0000000000 --- a/code/modules/admin/secrets/final_solutions/supermatter_cascade.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/admin_secret_item/final_solution/supermatter_cascade - name = "Supermatter Cascade" - -/datum/admin_secret_item/final_solution/supermatter_cascade/execute(var/mob/user) - . = ..() - if(!.) - return - var/choice = tgui_alert(user, "You sure you want to destroy the universe and create a large explosion at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!", list("NO TIME TO EXPLAIN", "Cancel")) - if(choice == "NO TIME TO EXPLAIN") - explosion(get_turf(user), 8, 16, 24, 32, 1) - new /turf/unsimulated/wall/supermatter(get_turf(user)) - SetUniversalState(/datum/universal_state/supermatter_cascade) - message_admins("[key_name_admin(user)] has managed to destroy the universe with a supermatter cascade. Good job, [key_name_admin(user)]") diff --git a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm b/code/modules/admin/secrets/fun_secrets/break_all_lights.dm deleted file mode 100644 index 2256d4f716..0000000000 --- a/code/modules/admin/secrets/fun_secrets/break_all_lights.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/break_all_lights - name = "Break All Lights" - -/datum/admin_secret_item/fun_secret/break_all_lights/execute(var/mob/user) - . = ..() - if(.) - lightsout(0,0) diff --git a/code/modules/admin/secrets/fun_secrets/break_some_lights.dm b/code/modules/admin/secrets/fun_secrets/break_some_lights.dm deleted file mode 100644 index 70b9eaf806..0000000000 --- a/code/modules/admin/secrets/fun_secrets/break_some_lights.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/break_some_lights - name = "Break Some Lights" - -/datum/admin_secret_item/fun_secret/break_some_lights/execute(var/mob/user) - . = ..() - if(.) - lightsout(1,2) diff --git a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm b/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm deleted file mode 100644 index 67fe250d27..0000000000 --- a/code/modules/admin/secrets/fun_secrets/fix_all_lights.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/admin_secret_item/fun_secret/fix_all_lights - name = "Fix All Lights" - -/datum/admin_secret_item/fun_secret/fix_all_lights/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/obj/machinery/light/L in GLOB.machines) - L.fix() diff --git a/code/modules/admin/secrets/fun_secrets/ghost_mode.dm b/code/modules/admin/secrets/fun_secrets/ghost_mode.dm deleted file mode 100644 index a135a4ed39..0000000000 --- a/code/modules/admin/secrets/fun_secrets/ghost_mode.dm +++ /dev/null @@ -1,48 +0,0 @@ -/datum/admin_secret_item/fun_secret/ghost_mode - name = "Ghost Mode" - var/list/affected_mobs - -/datum/admin_secret_item/fun_secret/ghost_mode/New() - ..() - affected_mobs = list() - -/datum/admin_secret_item/fun_secret/ghost_mode/execute(var/mob/user) - . = ..() - if(!.) - return - - var/list/affected_areas = list() - for(var/mob/M in living_mob_list) - if(M.stat == CONSCIOUS && !(M in affected_mobs)) - affected_mobs |= M - switch(rand(1,4)) - if(1) - M.show_message(span_notice("You shudder as if cold..."), 1) - if(2) - M.show_message(span_notice("You feel something gliding across your back..."), 1) - if(3) - M.show_message(span_notice("Your eyes twitch, you feel like something you can't see is here..."), 1) - if(4) - M.show_message(span_notice("You notice something moving out of the corner of your eye, but nothing is there..."), 1) - - for(var/obj/W in orange(5,M)) - if(prob(25) && !W.anchored) - step_rand(W) - - var/area/A = get_area(M) - if(A.requires_power && !A.always_unpowered && A.power_light && (A.z in using_map.player_levels)) - affected_areas |= get_area(M) - - affected_mobs |= user - for(var/area/AffectedArea in affected_areas) - AffectedArea.power_light = 0 - AffectedArea.power_change() - spawn(rand(25,50)) - AffectedArea.power_light = 1 - AffectedArea.power_change() - - sleep(100) - for(var/mob/M in affected_mobs) - M.show_message(span_notice("The chilling wind suddenly stops..."), 1) - affected_mobs.Cut() - affected_areas.Cut() diff --git a/code/modules/admin/secrets/fun_secrets/only_one.dm b/code/modules/admin/secrets/fun_secrets/only_one.dm deleted file mode 100644 index c065187c3f..0000000000 --- a/code/modules/admin/secrets/fun_secrets/only_one.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/only_one - name = "There Can Be Only One" - -/datum/admin_secret_item/fun_secret/only_one/execute(var/mob/user) - . = ..() - if(.) - only_one() diff --git a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm b/code/modules/admin/secrets/fun_secrets/paintball_mode.dm deleted file mode 100644 index d17d648ea9..0000000000 --- a/code/modules/admin/secrets/fun_secrets/paintball_mode.dm +++ /dev/null @@ -1,14 +0,0 @@ -/datum/admin_secret_item/fun_secret/paintbal_mode - name = "Paintball Mode" - -/datum/admin_secret_item/fun_secret/paintbal_mode/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/species in GLOB.all_species) - var/datum/species/S = GLOB.all_species[species] - S.blood_color = "rainbow" - for(var/obj/effect/decal/cleanable/blood/B in world) - B.basecolor = "rainbow" - B.update_icon() diff --git a/code/modules/admin/secrets/fun_secrets/power_all_smes.dm b/code/modules/admin/secrets/fun_secrets/power_all_smes.dm deleted file mode 100644 index 2320bcf2cb..0000000000 --- a/code/modules/admin/secrets/fun_secrets/power_all_smes.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/power_all_smes - name = "Power All SMES" - -/datum/admin_secret_item/fun_secret/power_all_smes/execute(var/mob/user) - . = ..() - if(.) - power_restore_quick() diff --git a/code/modules/admin/secrets/fun_secrets/power_failure_begin.dm b/code/modules/admin/secrets/fun_secrets/power_failure_begin.dm deleted file mode 100644 index a5d424bcbe..0000000000 --- a/code/modules/admin/secrets/fun_secrets/power_failure_begin.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/power_failure_begin - name = "Power Failure Begin" - -/datum/admin_secret_item/fun_secret/power_failure_begin/execute(var/mob/user) - . = ..() - if(.) - power_failure() diff --git a/code/modules/admin/secrets/fun_secrets/power_failure_end.dm b/code/modules/admin/secrets/fun_secrets/power_failure_end.dm deleted file mode 100644 index 1830928e42..0000000000 --- a/code/modules/admin/secrets/fun_secrets/power_failure_end.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/fun_secret/power_failure_end - name = "Power Failure End" - -/datum/admin_secret_item/fun_secret/power_failure_end/execute(var/mob/user) - . = ..() - if(.) - power_restore() diff --git a/code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm b/code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm deleted file mode 100644 index ef0e40a33a..0000000000 --- a/code/modules/admin/secrets/fun_secrets/remove_all_clothing.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/admin_secret_item/fun_secret/remove_all_clothing - name = "Remove ALL Clothing" - -/datum/admin_secret_item/fun_secret/remove_all_clothing/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/obj/item/clothing/O in world) - qdel(O) diff --git a/code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm b/code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm deleted file mode 100644 index 9de30a0a5a..0000000000 --- a/code/modules/admin/secrets/fun_secrets/remove_internal_clothing.dm +++ /dev/null @@ -1,10 +0,0 @@ -/datum/admin_secret_item/fun_secret/remove_internal_clothing - name = "Remove 'Internal' Clothing" - -/datum/admin_secret_item/fun_secret/remove_internal_clothing/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/obj/item/clothing/under/O in world) - qdel(O) diff --git a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm b/code/modules/admin/secrets/fun_secrets/send_strike_team.dm deleted file mode 100644 index 9aee563d22..0000000000 --- a/code/modules/admin/secrets/fun_secrets/send_strike_team.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/admin_secret_item/fun_secret/send_strike_team - name = "Send Strike Team" - -/datum/admin_secret_item/fun_secret/send_strike_team/can_execute(var/mob/user) - if(!ticker) return 0 - return ..() - -/datum/admin_secret_item/fun_secret/send_strike_team/execute(var/mob/user) - . = ..() - if(.) - return user.client.strike_team() diff --git a/code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm b/code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm deleted file mode 100644 index 3511669707..0000000000 --- a/code/modules/admin/secrets/fun_secrets/toggle_bomb_cap.dm +++ /dev/null @@ -1,21 +0,0 @@ -/datum/admin_secret_item/fun_secret/toggle_bomb_cap - name = "Toggle Bomb Cap" - permissions = R_SERVER - -/datum/admin_secret_item/fun_secret/toggle_bomb_cap/execute(var/mob/user) - . = ..() - if(!.) - return - - switch(GLOB.max_explosion_range) - if(14) GLOB.max_explosion_range = 16 - if(16) GLOB.max_explosion_range = 20 - if(20) GLOB.max_explosion_range = 28 - if(28) GLOB.max_explosion_range = 56 - if(56) GLOB.max_explosion_range = 128 - if(128) GLOB.max_explosion_range = 14 - var/range_dev = GLOB.max_explosion_range *0.25 - var/range_high = GLOB.max_explosion_range *0.5 - var/range_low = GLOB.max_explosion_range - message_admins(span_danger("[key_name_admin(user)] changed the bomb cap to [range_dev], [range_high], [range_low]"), 1) - log_admin("[key_name_admin(user)] changed the bomb cap to [GLOB.max_explosion_range]") diff --git a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm b/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm deleted file mode 100644 index d6819530a4..0000000000 --- a/code/modules/admin/secrets/fun_secrets/triple_ai_mode.dm +++ /dev/null @@ -1,13 +0,0 @@ -/datum/admin_secret_item/fun_secret/triple_ai_mode - name = "Triple AI Mode" - -/datum/admin_secret_item/fun_secret/triple_ai_mode/can_execute(var/mob/user) - if(ticker && ticker.current_state > GAME_STATE_PREGAME) - return 0 - - return ..() - -/datum/admin_secret_item/admin_secret/triple_ai_mode/execute(var/mob/user) - . = ..() - if(.) - user.client.triple_ai() diff --git a/code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm b/code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm deleted file mode 100644 index c82a07c96a..0000000000 --- a/code/modules/admin/secrets/fun_secrets/turn_humans_into_corgies.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/admin_secret_item/fun_secret/turn_humans_into_corgies - name = "Turn All Humans Into Corgies" - -/datum/admin_secret_item/fun_secret/turn_humans_into_corgies/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/mob/living/carbon/human/H in mob_list) - spawn(0) - H.corgize() diff --git a/code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm b/code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm deleted file mode 100644 index 88e5bd9022..0000000000 --- a/code/modules/admin/secrets/fun_secrets/turn_humans_into_monkeys.dm +++ /dev/null @@ -1,11 +0,0 @@ -/datum/admin_secret_item/fun_secret/turn_humans_into_monkeys - name = "Turn All Humans Into Monkeys" - -/datum/admin_secret_item/fun_secret/turn_humans_into_monkeys/execute(var/mob/user) - . = ..() - if(!.) - return - - for(var/mob/living/carbon/human/H in mob_list) - spawn(0) - H.monkeyize() diff --git a/code/modules/admin/secrets/random_events/gravity.dm b/code/modules/admin/secrets/random_events/gravity.dm deleted file mode 100644 index 428402ca96..0000000000 --- a/code/modules/admin/secrets/random_events/gravity.dm +++ /dev/null @@ -1,31 +0,0 @@ -/********** -* Gravity * -**********/ -/datum/admin_secret_item/random_event/gravity - name = "Toggle Station Artificial Gravity" - -/datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user) - if(!(ticker && ticker.mode)) - return 0 - - return ..() - -/datum/admin_secret_item/random_event/gravity/execute(var/mob/user) - . = ..() - if(!.) - return - - GLOB.gravity_is_on = !GLOB.gravity_is_on - for(var/area/A in world) - A.gravitychange(GLOB.gravity_is_on) - - feedback_inc("admin_secrets_fun_used",1) - feedback_add_details("admin_secrets_fun_used","Grav") - if(GLOB.gravity_is_on) - log_admin("[key_name(user)] toggled gravity on.", 1) - message_admins(span_notice("[key_name_admin(user)] toggled gravity on."), 1) - command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.") - else - log_admin("[key_name(user)] toggled gravity off.", 1) - message_admins(span_notice("[key_name_admin(usr)] toggled gravity off."), 1) - command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.") diff --git a/code/modules/admin/secrets/random_events/gravity_vr.dm b/code/modules/admin/secrets/random_events/gravity_vr.dm deleted file mode 100644 index de6e6172bc..0000000000 --- a/code/modules/admin/secrets/random_events/gravity_vr.dm +++ /dev/null @@ -1,34 +0,0 @@ -/********** -* Gravity * -**********/ -/datum/admin_secret_item/random_event/gravity - name = "Toggle Station Artificial Gravity" - -/datum/admin_secret_item/random_event/gravity/can_execute(var/mob/user) - if(!(ticker && ticker.mode)) - return 0 - - return ..() - -/datum/admin_secret_item/random_event/gravity/execute(var/mob/user) - . = ..() - if(!.) - return - - GLOB.gravity_is_on = !GLOB.gravity_is_on - for(var/obj/machinery/gravity_generator/main/GG in GLOB.machines) - if(GG.z in using_map.station_levels) - GG.breaker = GLOB.gravity_is_on - GG.set_power() - GG.charge_count = GLOB.gravity_is_on ? 90 : 10 - - feedback_inc("admin_secrets_fun_used",1) - feedback_add_details("admin_secrets_fun_used","Grav") - if(GLOB.gravity_is_on) - log_admin("[key_name(user)] toggled gravity on.", 1) - message_admins(span_notice("[key_name_admin(user)] toggled gravity on."), 1) - command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.") - else - log_admin("[key_name(user)] toggled gravity off.", 1) - message_admins(span_notice("[key_name_admin(usr)] toggled gravity off."), 1) - command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled. Please wait for the system to reinitialize, or contact your engineering department.", "Gravity Failure") diff --git a/code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm b/code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm deleted file mode 100644 index d7e09d845e..0000000000 --- a/code/modules/admin/secrets/random_events/trigger_cordical_borer_infestation.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/random_event/trigger_cordical_borer_infestation - name = "Trigger a Cortical Borer infestation" - -/datum/admin_secret_item/random_event/trigger_cordical_borer_infestation/execute(var/mob/user) - . = ..() - if(.) - return borers.attempt_random_spawn() diff --git a/code/modules/admin/secrets/random_events/trigger_xenomorph_infestation.dm b/code/modules/admin/secrets/random_events/trigger_xenomorph_infestation.dm deleted file mode 100644 index a8af34137a..0000000000 --- a/code/modules/admin/secrets/random_events/trigger_xenomorph_infestation.dm +++ /dev/null @@ -1,7 +0,0 @@ -/datum/admin_secret_item/random_event/trigger_xenomorph_infestation - name = "Trigger a Xenomorph Infestation" - -/datum/admin_secret_item/random_event/trigger_xenomorph_infestation/execute(var/mob/user) - . = ..() - if(.) - return xenomorphs.attempt_random_spawn() diff --git a/code/modules/admin/topic.dm b/code/modules/admin/topic.dm index 2498de6641..102ea86368 100644 --- a/code/modules/admin/topic.dm +++ b/code/modules/admin/topic.dm @@ -1726,13 +1726,13 @@ log_and_message_admins("created [number] [english_list(paths)]") return - else if(href_list["admin_secrets_panel"]) - var/datum/admin_secret_category/AC = locate(href_list["admin_secrets_panel"]) in admin_secrets.categories - src.Secrets(AC) + //else if(href_list["admin_secrets_panel"]) + //var/datum/admin_secret_category/AC = locate(href_list["admin_secrets_panel"]) in admin_secrets.categories + //src.Secrets(AC) - else if(href_list["admin_secrets"]) - var/datum/admin_secret_item/item = locate(href_list["admin_secrets"]) in admin_secrets.items - item.execute(usr) + //else if(href_list["admin_secrets"]) + //var/datum/admin_secret_item/item = locate(href_list["admin_secrets"]) in admin_secrets.items + //item.execute(usr) else if(href_list["ac_view_wanted"]) //Admin newscaster Topic() stuff be here src.admincaster_screen = 18 //The ac_ prefix before the hrefs stands for AdminCaster. diff --git a/code/modules/admin/verbs/SDQL2/SDQL_2.dm b/code/modules/admin/verbs/SDQL2/SDQL_2.dm index 17e755836e..b41d6c1cc0 100644 --- a/code/modules/admin/verbs/SDQL2/SDQL_2.dm +++ b/code/modules/admin/verbs/SDQL2/SDQL_2.dm @@ -187,16 +187,15 @@ Example: USING PROCCALL = BLOCKING, SELECT = FORCE_NULLS, PRIORITY = HIGH SELECT state = SDQL2_STATE_ERROR;\ CRASH("SDQL2 fatal error");}; -/client/proc/SDQL2_query(query_text as message) - set category = "Debug.Misc" - if(!check_rights(R_DEBUG)) //Shouldn't happen... but just to be safe. - message_admins(span_danger("ERROR: Non-admin [key_name(usr)] attempted to execute a SDQL query!")) - log_admin("Non-admin [key_name(usr)] attempted to execute a SDQL query!") - return FALSE - var/list/results = world.SDQL2_query(query_text, key_name_admin(usr), "[key_name(usr)]") +ADMIN_VERB(sdql2_query, R_DEBUG, "SDQL2 Query", "Run a SDQL2 query.", ADMIN_CATEGORY_DEBUG, query_text as message) + var/prompt = tgui_alert(user, "Run SDQL2 Query?", "SDQL2", list("Yes", "Cancel")) + if (prompt != "Yes") + return + var/list/results = world.SDQL2_query(query_text, key_name_admin(user), "[key_name(user)]") if(length(results) == 3) for(var/I in 1 to 3) - to_chat(usr, results[I]) + to_chat(user, span_admin(results[I]), confidential = TRUE) + //SSblackbox.record_feedback("nested tally", "SDQL query", 1, list(user.ckey, query_text)) /world/proc/SDQL2_query(query_text, log_entry1, log_entry2) var/query_log = "executed SDQL query(s): \"[query_text]\"." diff --git a/code/modules/admin/verbs/buildmode.dm b/code/modules/admin/verbs/buildmode.dm index 25b47e8363..f9b1a408d0 100644 --- a/code/modules/admin/verbs/buildmode.dm +++ b/code/modules/admin/verbs/buildmode.dm @@ -583,7 +583,7 @@ CHOMP Remove end */ AI.wander = FALSE if(pa.Find("alt") && isatom(object)) to_chat(user, span_notice("Adding [object] to Entity Narrate List!")) - user.client.add_mob_for_narration(object) + SSadmin_verbs.dynamic_invoke_verb(user.client, /datum/admin_verb/add_mob_for_narration, object) if(pa.Find("right")) diff --git a/code/modules/admin/verbs/debug.dm b/code/modules/admin/verbs/debug.dm index e91909312d..a90ff5152b 100644 --- a/code/modules/admin/verbs/debug.dm +++ b/code/modules/admin/verbs/debug.dm @@ -737,3 +737,47 @@ set desc = "Reloads the dmis from the test folder and creates the test datums." SSrobot_sprites.reload_test_sprites() + +ADMIN_VERB(quick_nif, R_ADMIN, "Quick NIF", "Spawns a NIF into someone in quick-implant mode.", "Fun.Add Nif") + var/input_NIF + var/mob/living/carbon/human/H = tgui_input_list(user, "Pick a mob with a player","Quick NIF", player_list) + + if(!H) + return + + if(!istype(H)) + to_chat(user, span_warning("That mob type ([H.type]) doesn't support NIFs, sorry.")) + return + + if(!H.get_organ(BP_HEAD)) + to_chat(user, span_warning("Target is unsuitable.")) + return + + if(H.nif) + to_chat(user, span_warning("Target already has a NIF.")) + return + + if(H.species.flags & NO_DNA) + var/obj/item/nif/S = /obj/item/nif/bioadap + input_NIF = initial(S.name) + new /obj/item/nif/bioadap(H) + else + var/list/NIF_types = typesof(/obj/item/nif) + var/list/NIFs = list() + + for(var/NIF_type in NIF_types) + var/obj/item/nif/S = NIF_type + NIFs[capitalize(initial(S.name))] = NIF_type + + var/list/show_NIFs = sortList(NIFs) // the list that will be shown to the user to pick from + + input_NIF = tgui_input_list(user, "Pick the NIF type","Quick NIF", show_NIFs) + var/chosen_NIF = NIFs[capitalize(input_NIF)] + + if(chosen_NIF) + new chosen_NIF(H) + else + new /obj/item/nif(H) + + log_and_message_admins("Quick NIF'd [H.real_name] with a [input_NIF].", user) + feedback_add_details("admin_verb","QNIF") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/entity_narrate.dm b/code/modules/admin/verbs/entity_narrate.dm index d33082ee5e..9014c532b7 100644 --- a/code/modules/admin/verbs/entity_narrate.dm +++ b/code/modules/admin/verbs/entity_narrate.dm @@ -24,75 +24,63 @@ //Appears as a right click verb on any obj and mob within view range. //when not right clicking we get a list to pick from in aforementioned view range. -/client/proc/add_mob_for_narration(E as obj|mob|turf in orange(world.view)) - set name = "Narrate Entity (Add ref)" - set desc = "Saves a reference of target mob to be called when narrating." - set category = "Fun.Narrate" - - if(!check_rights(R_FUN)) return - +ADMIN_VERB(add_mob_for_narration, R_FUN, "Narrate Entity (Add ref)", "Saves a reference of target mob to be called when narrating.", "Fun.Narrate", E as obj|mob|turf in orange(world.view)) //Making sure we got the list datum on our client. - if(!entity_narrate_holder) - entity_narrate_holder = new /datum/entity_narrate() - if(!istype(entity_narrate_holder, /datum/entity_narrate)) + if(!user.entity_narrate_holder) + user.entity_narrate_holder = new /datum/entity_narrate() + if(!istype(user.entity_narrate_holder, /datum/entity_narrate)) return - var/datum/entity_narrate/holder = entity_narrate_holder + var/datum/entity_narrate/holder = user.entity_narrate_holder //Since we extended to include all atoms, we're shutting things down with a guard clause for ghosts if(istype(E, /mob/observer)) - to_chat(usr, span_notice("Ghosts shouldn't be narrated! If you want a ghost, make it a subtype of mob/living!")) + to_chat(user, span_notice("Ghosts shouldn't be narrated! If you want a ghost, make it a subtype of mob/living!")) return //We require a static mob/living type to check for .client and also later on, to use the unique .say mechanics for stuttering and language if(isliving(E)) var/mob/living/L = E if(L.client) - to_chat(usr, span_notice("[L.name] is a player. All attempts to speak through them \ + to_chat(user, span_notice("[L.name] is a player. All attempts to speak through them \ gets logged in case of abuse.")) - log_and_message_admins("has added [L.ckey]'s mob to their entity narrate list", usr) + log_and_message_admins("has added [L.ckey]'s mob to their entity narrate list", user) return - var/unique_name = sanitize(tgui_input_text(usr, "Please give the entity a unique name to track internally. \ + var/unique_name = sanitize(tgui_input_text(user, "Please give the entity a unique name to track internally. \ This doesn't override how it appears in game", "tracker", L.name)) if(unique_name in holder.entity_names) - to_chat(usr, span_notice("[unique_name] is not unique! Pick another!")) - add_mob_for_narration(L) //Recursively calling ourselves until cancelled or a unique name is given. + to_chat(user, span_notice("[unique_name] is not unique! Pick another!")) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/add_mob_for_narration, L) //Recursively calling ourselves until cancelled or a unique name is given. return holder.entity_names += unique_name holder.entity_refs[unique_name] = WEAKREF(L) - log_and_message_admins("added [L.name] for their personal list to narrate", usr) //Logging here to avoid spam, while still safeguarding abuse + log_and_message_admins("added [L.name] for their personal list to narrate", user) //Logging here to avoid spam, while still safeguarding abuse //Covering functionality for turfs and objs. We need static type to access the name var else if(istype(E, /atom)) var/atom/A = E - var/unique_name = sanitize(tgui_input_text(usr, "Please give the entity a unique name to track internally. \ + var/unique_name = sanitize(tgui_input_text(user, "Please give the entity a unique name to track internally. \ This doesn't override how it appears in game", "tracker", A.name)) if(unique_name in holder.entity_names) - to_chat(usr, span_notice("[unique_name] is not unique! Pick another!")) - add_mob_for_narration(A) + to_chat(user, span_notice("[unique_name] is not unique! Pick another!")) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/add_mob_for_narration, A) return holder.entity_names += unique_name holder.entity_refs[unique_name] = WEAKREF(A) - log_and_message_admins("added [A.name] for their personal list to narrate", usr) //Logging here to avoid spam, while still safeguarding abuse + log_and_message_admins("added [A.name] for their personal list to narrate", user) //Logging here to avoid spam, while still safeguarding abuse //Proc for keeping our ref list relevant, deleting mobs that are no longer relevant for our event -/client/proc/remove_mob_for_narration() - set name = "Narrate Entity (Remove ref)" - set desc = "Remove mobs you're no longer narrating from your list for easier work." - set category = "Fun.Narrate" - - if(!check_rights(R_FUN)) return - - if(!entity_narrate_holder) - entity_narrate_holder = new /datum/entity_narrate() - to_chat(usr, "No references were added yet! First add references!") +ADMIN_VERB(remove_mob_for_narration, R_FUN, "Narrate Entity (Remove ref)", "Remove mobs you're no longer narrating from your list for easier work.", "Fun.Narrate") + if(!user.entity_narrate_holder) + user.entity_narrate_holder = new /datum/entity_narrate() + to_chat(user, "No references were added yet! First add references!") return - if(!istype(entity_narrate_holder, /datum/entity_narrate)) + if(!istype(user.entity_narrate_holder, /datum/entity_narrate)) return - var/datum/entity_narrate/holder = entity_narrate_holder + var/datum/entity_narrate/holder = user.entity_narrate_holder var/options = holder.entity_names + "Clear All" - var/removekey = tgui_input_list(usr, "Choose which entity to remove", "remove reference", options, null) + var/removekey = tgui_input_list(user, "Choose which entity to remove", "remove reference", options, null) if(removekey == "Clear All") - if(tgui_alert(usr, "Do you really want to clear your entity list?", "confirm", list("Yes", "No")) != "Yes") + if(tgui_alert(user, "Do you really want to clear your entity list?", "confirm", list("Yes", "No")) != "Yes") return holder.entity_names = list() holder.entity_refs = list() @@ -104,78 +92,63 @@ //For now brings up a list of all entities on our reference list and gives us the option to choose what we wanna do //using TGUI/Byond list/alert inputs //Does not actually interact with the game world, it passes user input to narrate_mob_args(name, mode, message) after sanitizing -/client/proc/narrate_mob() - set name = "Narrate Entity (Interface)" - set desc = "Send either a visible or audiable message through your chosen entities using an interface" - set category = "Fun.Narrate" - - if(!check_rights(R_FUN)) return - - if(!entity_narrate_holder) - entity_narrate_holder = new /datum/entity_narrate() - to_chat(usr, "No references were added yet! First add references!") +ADMIN_VERB(narrate_mob, R_FUN, "Narrate Entity (Interface)", "Send either a visible or audiable message through your chosen entities using an interface.", "Fun.Narrate") + if(!user.entity_narrate_holder) + user.entity_narrate_holder = new /datum/entity_narrate() + to_chat(user, "No references were added yet! First add references!") return - if(!istype(entity_narrate_holder, /datum/entity_narrate)) + if(!istype(user.entity_narrate_holder, /datum/entity_narrate)) return - var/datum/entity_narrate/holder = entity_narrate_holder - + var/datum/entity_narrate/holder = user.entity_narrate_holder //Obtaining and sanitizing arguments for the actual proc var/choices = holder.entity_names + "Open TGUI" - var/which_entity = tgui_input_list(usr, "Choose which mob to narrate", "Narrate mob", choices, null) + var/which_entity = tgui_input_list(user, "Choose which mob to narrate", "Narrate mob", choices, null) if(!which_entity) return if(which_entity == "Open TGUI") - holder.tgui_interact(usr) + holder.tgui_interact(user) else - var/mode = tgui_alert(usr, "Speak or emote?", "mode", list("Speak", "Emote", "Cancel")) + var/mode = tgui_alert(user, "Speak or emote?", "mode", list("Speak", "Emote", "Cancel")) if(!mode || mode == "Cancel") return - var/message = tgui_input_text(usr, "Input what you want [which_entity] to [mode]", "narrate", + var/message = tgui_input_text(user, "Input what you want [which_entity] to [mode]", "narrate", null, multiline = TRUE, prevent_enter = TRUE) if(message) - narrate_mob_args(which_entity, mode, message) + SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/narrate_mob_args, which_entity, mode, message) //The actual logic of the verb. Called by narrate_mob() when used. -/client/proc/narrate_mob_args(name as text, mode as text, message as text) - set name = "Narrate Entity" - set desc = "Narrate entities using positional arguments. Name should be as saved in ref list, mode should be Speak or Emote, follow with message" - set category = "Fun.Narrate" - - - - if(!check_rights(R_FUN)) return - - if(!entity_narrate_holder) - entity_narrate_holder = new /datum/entity_narrate() - to_chat(usr, "No references were added yet! First add references!") +ADMIN_VERB(narrate_mob_args, R_FUN, "Narrate Entity", "Narrate entities using positional arguments. Name should be as saved in ref list, mode should be Speak or Emote, follow with message.", "Fun.Narrate", name as text, mode as text, message as text) + if(!user.entity_narrate_holder) + user.entity_narrate_holder = new /datum/entity_narrate() + to_chat(user, "No references were added yet! First add references!") return - if(!istype(entity_narrate_holder, /datum/entity_narrate)) + if(!istype(user.entity_narrate_holder, /datum/entity_narrate)) return - var/datum/entity_narrate/holder = entity_narrate_holder + var/datum/entity_narrate/holder = user.entity_narrate_holder //Sanitizing args name = sanitize(name) mode = sanitize(mode) if(!(mode in list("Speak", "Emote"))) - to_chat(usr, span_notice("Valid modes are 'Speak' and 'Emote'.")) + to_chat(user, span_notice("Valid modes are 'Speak' and 'Emote'.")) return if(!holder.entity_refs[name]) - to_chat(usr, span_notice("[name] not in saved references!")) + to_chat(user, span_notice("[name] not in saved references!")) //Separate definition for mob/living and /obj due to .say() code allowing us to engage with languages, stuttering etc //We also need this so we can check for .client var/datum/weakref/wref = holder.entity_refs[name] var/selection = wref.resolve() if(!selection) - to_chat(usr, span_notice("[name] has invalid reference, deleting")) + to_chat(user, span_notice("[name] has invalid reference, deleting")) holder.entity_names -= name holder.entity_refs -= name if(isliving(selection)) var/mob/living/our_entity = selection if(our_entity.client) //Making sure we can't speak for players - log_and_message_admins("used entity-narrate to speak through [our_entity.ckey]'s mob", usr) + log_and_message_admins("used entity-narrate to speak through [our_entity.ckey]'s mob", user) if(!message) - message = tgui_input_text(usr, "Input what you want [our_entity] to [mode]", "narrate", null) //say/emote sanitize already + message = tgui_input_text(user, "Input what you want [our_entity] to [mode]", "narrate", null) //say/emote sanitize already if(message && mode == "Speak") our_entity.say(message) else if(message && mode == "Emote") @@ -184,11 +157,11 @@ return //This does cost us some code duplication, but I think it's worth it. - //furthermore, objs/turfs require the usr to specify the verb when speaking, otherwise it looks like an emote. + //furthermore, objs/turfs require the user to specify the verb when speaking, otherwise it looks like an emote. else if(istype(selection, /atom)) var/atom/our_entity = selection if(!message) - message = tgui_input_text(usr, "Input what you want [our_entity] to [mode]", "narrate", null) + message = tgui_input_text(user, "Input what you want [our_entity] to [mode]", "narrate", null) message = encode_html_emphasis(sanitize(message)) if(message && mode == "Speak") our_entity.audible_message(span_bold("[our_entity.name]") + " [message]") diff --git a/code/modules/admin/verbs/fps.dm b/code/modules/admin/verbs/fps.dm index b997c863fe..e97bc166fc 100644 --- a/code/modules/admin/verbs/fps.dm +++ b/code/modules/admin/verbs/fps.dm @@ -1,23 +1,20 @@ -//Merged Doohl's and the existing ticklag as they both had good elements about them ~ -//Replaces the old Ticklag verb, fps is easier to understand -/client/proc/set_server_fps() - set category = "Debug.Server" - set name = "Set Server FPS" - set desc = "Sets game speed in frames-per-second. Can potentially break the game" +ADMIN_VERB_VISIBILITY(set_server_fps, ADMIN_VERB_VISIBLITY_FLAG_MAPPING_DEBUG) +ADMIN_VERB(set_server_fps, R_DEBUG, "Set Server FPS", "Sets game speed in frames-per-second. Can potentially break the game", ADMIN_CATEGORY_DEBUG) + var/cfg_fps = CONFIG_GET(number/fps) + var/new_fps = round(input(user, "Sets game frames-per-second. Can potentially break the game (default: [cfg_fps])","FPS", world.fps) as num|null) - if(!check_rights(R_DEBUG)) - return - - var/new_fps = round(tgui_input_number(usr, "Sets game frames-per-second. Can potentially break the game (default: [CONFIG_GET(number/fps)])", "FPS", world.fps), round(CONFIG_GET(number/fps) * 1.5)) if(new_fps <= 0) - to_chat(src, span_danger("Error: set_server_fps(): Invalid world.fps value. No changes made.")) + to_chat(user, span_danger("Error: set_server_fps(): Invalid world.fps value. No changes made."), confidential = TRUE) return - if(new_fps > CONFIG_GET(number/fps) * 1.5) - if(tgui_alert(src, "You are setting fps to a high value:\n\t[new_fps] frames-per-second\n\tconfig.fps = [CONFIG_GET(number/fps)]", "Warning!", list("Confirm", "ABORT-ABORT-ABORT")) != "Confirm") + if(new_fps > cfg_fps * 1.5) + if(tgui_alert(user, "You are setting fps to a high value:\n\t[new_fps] frames-per-second\n\tconfig.fps = [cfg_fps]","Warning!",list("Confirm","ABORT-ABORT-ABORT")) != "Confirm") return - var/msg = "[key_name(src)] has modified world.fps to [new_fps]" + var/msg = "[key_name(user)] has modified world.fps to [new_fps]" log_admin(msg, 0) message_admins(msg, 0) - world.change_fps(new_fps) + //SSblackbox.record_feedback("nested tally", "admin_toggle", 1, list("Set Server FPS", "[new_fps]")) // If you are copy-pasting this, ensure the 4th parameter is unique to the new proc! feedback_add_details("admin_verb", "SETFPS") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + CONFIG_SET(number/fps, new_fps) + world.change_fps(new_fps) diff --git a/code/modules/admin/verbs/getlogs.dm b/code/modules/admin/verbs/getlogs.dm index ad29bb8ca3..fec8c53874 100644 --- a/code/modules/admin/verbs/getlogs.dm +++ b/code/modules/admin/verbs/getlogs.dm @@ -1,20 +1,11 @@ -//This proc allows download of past server logs saved within the data/logs/ folder. -//It works similarly to show-server-log. -/client/proc/getserverlog() - set name = "Get Server Logs" - set desc = "Fetch logfiles from data/logs" - set category = "Admin.Logs" - browseserverlogs() +ADMIN_VERB(get_server_logs, R_ADMIN, "Get Server Logs", "View or retrieve logfiles.", ADMIN_CATEGORY_MAIN) + user.browseserverlogs() +ADMIN_VERB(get_current_logs, R_ADMIN, "Get Current Logs", "View or retrieve logfiles for the current round.", ADMIN_CATEGORY_MAIN) + user.browseserverlogs(current=TRUE) -/client/proc/browseserverlogs(current=FALSE, runtimes=FALSE) - var/log_choice = BROWSE_ROOT_ALL_LOGS - if(current) - log_choice = BROWSE_ROOT_CURRENT_LOGS - else if (runtimes) - log_choice = BROWSE_ROOT_RUNTIME_LOGS - var/path = browse_files(log_choice) - feedback_add_details("admin_verb","VTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! +/client/proc/browseserverlogs(current=FALSE) + var/path = browse_files(current ? BROWSE_ROOT_CURRENT_LOGS : BROWSE_ROOT_ALL_LOGS) if(!path) return @@ -22,9 +13,11 @@ return message_admins("[key_name_admin(src)] accessed file: [path]") - switch(tgui_alert(src,"View (in game), Open (in your system's text editor), or Download?", path, list("View", "Open", "Download"))) + feedback_add_details("admin_verb","VTL") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + + switch(tgui_alert(usr,"View (in game), Open (in your system's text editor), or Download?", path, list("View", "Open", "Download"))) if ("View") - src << browse("
    [html_encode(file2text(file(path)))]
    ", list2params(list("window" = "viewfile.[path]"))) + src << browse(HTML_SKELETON("
    [html_encode(file2text(file(path)))]
    "), list2params(list("window" = "viewfile.[path]"))) if ("Open") src << run(file(path)) if ("Download") diff --git a/code/modules/admin/verbs/grief_fixers.dm b/code/modules/admin/verbs/grief_fixers.dm index d4391200a3..72b66d36a5 100644 --- a/code/modules/admin/verbs/grief_fixers.dm +++ b/code/modules/admin/verbs/grief_fixers.dm @@ -1,15 +1,10 @@ -/client/proc/fixatmos() - set category = "Admin.Game" - set name = "Fix Atmospherics Grief" - - if(!check_rights(R_ADMIN|R_DEBUG|R_EVENT)) return - - - if(tgui_alert(usr, "WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", list("No", "Yes")) != "Yes") +ADMIN_VERB(fix_atmos, (R_ADMIN|R_DEBUG|R_EVENT), "Fix Atmospherics Grief", "View or retrieve logfiles for the current round.", ADMIN_CATEGORY_GAME) + if(tgui_alert(user, "WARNING: Executing this command will perform a full reset of atmosphere. All pipelines will lose any gas that may be in them, and all zones will be reset to contain air mix as on roundstart. The supermatter engine will also be stopped (to prevent overheat due to removal of coolant). Do not use unless the station is suffering serious atmospheric issues due to grief or bug.", "Full Atmosphere Reboot", list("No", "Yes")) != "Yes") return + feedback_add_details("admin_verb","FA") - log_and_message_admins("Full atmosphere reset initiated by [usr].") + log_and_message_admins("Full atmosphere reset initiated by [user].") to_world(span_danger("Initiating restart of atmosphere. The server may lag a bit.")) sleep(10) var/current_time = world.timeofday @@ -17,7 +12,7 @@ // Depower the supermatter, as it would quickly blow up once we remove all gases from the pipes. for(var/obj/machinery/power/supermatter/S in GLOB.machines) S.power = 0 - to_chat(usr, "\[1/5\] - Supermatter depowered") + to_chat(user, "\[1/5\] - Supermatter depowered") // Remove all gases from all pipenets for(var/datum/pipe_network/PN in SSmachines.networks) @@ -25,13 +20,13 @@ G.gas = list() G.update_values() - to_chat(usr, "\[2/5\] - All pipenets purged of gas.") + to_chat(user, "\[2/5\] - All pipenets purged of gas.") // Delete all zones. for(var/zone/Z in world) Z.c_invalidate() - to_chat(usr, "\[3/5\] - All ZAS Zones removed.") + to_chat(user, "\[3/5\] - All ZAS Zones removed.") var/list/unsorted_overlays = list() for(var/id in GLOB.gas_data.tile_overlay) @@ -43,9 +38,9 @@ T.vis_contents.Remove(unsorted_overlays) T.zone = null - to_chat(usr, "\[4/5\] - All turfs reset to roundstart values.") + to_chat(user, "\[4/5\] - All turfs reset to roundstart values.") SSair.RebootZAS() - to_chat(usr, "\[5/5\] - ZAS Rebooted") + to_chat(user, "\[5/5\] - ZAS Rebooted") to_world(span_danger("Atmosphere restart completed in " + span_bold("[(world.timeofday - current_time)/10]") + " seconds.")) diff --git a/code/modules/admin/verbs/list_exposer.dm b/code/modules/admin/verbs/list_exposer.dm new file mode 100644 index 0000000000..81376d16eb --- /dev/null +++ b/code/modules/admin/verbs/list_exposer.dm @@ -0,0 +1,121 @@ +// All the procs that admins can use to view something like a global list in a cleaner manner than just View Variables are contained in this file. + +/datum/admins/proc/list_bombers() + if(!SSticker.HasRoundStarted()) + tgui_alert(usr, "The game hasn't started yet!") + return + var/data = "Bombing List
    " + for(var/entry in GLOB.bombers) + data += "[entry]
    " + usr << browse(data, "window=bombers;size=800x500") + +/datum/admins/proc/list_signalers() + if(!SSticker.HasRoundStarted()) + tgui_alert(usr, "The game hasn't started yet!") + return + var/data = "Showing last [length(GLOB.lastsignalers)] signalers.
    " + for(var/entry in GLOB.lastsignalers) + data += "[entry]
    " + usr << browse(data, "window=lastsignalers;size=800x500") + +/datum/admins/proc/list_law_changes() + if(!SSticker.HasRoundStarted()) + tgui_alert(usr, "The game hasn't started yet!") + return + var/data = "Showing last [length(GLOB.lawchanges)] law changes.
    " + for(var/entry in GLOB.lawchanges) + data += "[entry]
    " + + var/datum/browser/browser = new(usr, "lawchanges", "Law Changes", 800, 500) + browser.set_content(data) + browser.open() + +/datum/admins/proc/list_dna() + var/data = "Showing DNA from blood.
    " + data += "" + for(var/entry in mob_list) + var/mob/living/carbon/human/subject = entry + if(subject.ckey) + data += "" + data += "
    NameDNABlood Type
    [subject][subject.dna?.unique_enzymes][subject.dna ? subject.dna.b_type : DEFAULT_BLOOD_TYPE]
    " + + var/datum/browser/browser = new(usr, "DNA", "DNA Log", 440, 410) + browser.set_content(data) + browser.open() + +/datum/admins/proc/list_fingerprints() //kid named fingerprints + var/data = "Showing Fingerprints.
    " + data += "" + for(var/entry in mob_list) + var/mob/living/carbon/human/subject = entry + if(subject.ckey) + data += "" + data += "
    NameFingerprints
    [subject][md5(subject.dna?.uni_identity)]
    " + + var/datum/browser/browser = new(usr, "fingerprints", "Fingerprint Log", 440, 410) + browser.set_content(data) + browser.open() + +/datum/admins/proc/show_manifest() + if(!SSticker.HasRoundStarted()) + tgui_alert(usr, "The game hasn't started yet!") + return + //GLOB.manifest.ui_interact(usr) + var/dat + dat += "

    Crew Manifest

    " + dat += GLOB.data_core.get_manifest() + + var/datum/browser/popup = new(usr, "manifest", "Manifest", 370, 420) + popup.set_content(dat) + popup.open() + +/datum/admins/proc/output_ai_laws() + var/ai_number = 0 + for(var/mob/living/silicon/S in mob_list) + ai_number++ + if(isAI(S)) + to_chat(usr, span_bold("AI [key_name(S, usr)]'s laws:")) + else if(isrobot(S)) + var/mob/living/silicon/robot/R = S + to_chat(usr, span_bold("CYBORG [key_name(S, usr)] [R.connected_ai?"(Slaved to: [R.connected_ai])":"(Independent)"]: laws:")) + else if (ispAI(S)) + to_chat(usr, span_bold("pAI [key_name(S, usr)]'s laws:")) + else + to_chat(usr, span_bold("SOMETHING SILICON [key_name(S, usr)]'s laws:")) + + if (S.laws == null) + to_chat(usr, "[key_name(S, usr)]'s laws are null?? Contact a coder.") + else + S.laws.show_laws(usr) + if(!ai_number) + to_chat(usr, span_bold("No AIs located")) //Just so you know the thing is actually working and not just ignoring you. + + /* This part would require an update of the ai laws datum, but is replacing the above if implemented + var/law_bound_entities = 0 + for(var/mob/living/silicon/subject as anything in mob_list) + law_bound_entities++ + + var/message = "" + + if(isAI(subject)) + message += "AI [key_name(subject, usr)]'s laws:" + else if(isrobot(subject)) + var/mob/living/silicon/robot/borg = subject + message += "CYBORG [key_name(subject, usr)] [borg.connected_ai?"(Slaved to: [key_name(borg.connected_ai)])":"(Independent)"]: laws:" + else if (ispAI(subject)) + message += "pAI [key_name(subject, usr)]'s laws:" + else + message += "SOMETHING SILICON [key_name(subject, usr)]'s laws:" + + message += "
    " + + if (!subject.laws) + message += "[key_name(subject, usr)]'s laws are null?? Contact a coder." + else + message += jointext(subject.laws.get_law_list(include_zeroth = TRUE), "
    ") + + to_chat(usr, message, confidential = TRUE) + + if(!law_bound_entities) + to_chat(usr, "No law bound entities located", confidential = TRUE) + */ diff --git a/code/modules/admin/verbs/mapping.dm b/code/modules/admin/verbs/mapping.dm index 91b813e17e..cc46b0ab37 100644 --- a/code/modules/admin/verbs/mapping.dm +++ b/code/modules/admin/verbs/mapping.dm @@ -141,7 +141,6 @@ var/list/debug_verbs = list ( ,/client/proc/cmd_assume_direct_control ,/client/proc/jump_to_dead_group ,/client/proc/startSinglo - ,/client/proc/set_server_fps ,/client/proc/cmd_admin_grantfullaccess ,/client/proc/kaboom ,/client/proc/cmd_admin_areatest diff --git a/code/modules/admin/verbs/possess.dm b/code/modules/admin/verbs/possess.dm index 0ce3fd727e..62542ba4b0 100644 --- a/code/modules/admin/verbs/possess.dm +++ b/code/modules/admin/verbs/possess.dm @@ -1,52 +1,37 @@ -/proc/possess(obj/O as obj in world) - set name = "Possess Obj" - set category = "Object" - +ADMIN_VERB_AND_CONTEXT_MENU(possess, R_POSSESS, "Possess Obj", "Possess an object.", ADMIN_CATEGORY_OBJECT, obj/O as obj in world) if(istype(O,/obj/singularity)) if(CONFIG_GET(flag/forbid_singulo_possession)) - to_chat(usr, "It is forbidden to possess singularities.") + to_chat(user, "It is forbidden to possess singularities.") return var/turf/T = get_turf(O) if(T) - log_admin("[key_name(usr)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])") - message_admins("[key_name(usr)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])", 1) + log_admin("[key_name(user)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])") + message_admins("[key_name(user)] has possessed [O] ([O.type]) at ([T.x], [T.y], [T.z])", 1) else - log_admin("[key_name(usr)] has possessed [O] ([O.type]) at an unknown location") - message_admins("[key_name(usr)] has possessed [O] ([O.type]) at an unknown location", 1) + log_admin("[key_name(user)] has possessed [O] ([O.type]) at an unknown location") + message_admins("[key_name(user)] has possessed [O] ([O.type]) at an unknown location", 1) - if(!usr.control_object) //If you're not already possessing something... - usr.name_archive = usr.real_name + if(!user.mob.control_object) //If you're not already possessing something... + user.mob.name_archive = user.mob.real_name - usr.loc = O - usr.real_name = O.name - usr.name = O.name - usr.client.eye = O - usr.control_object = O + user.mob.loc = O + user.mob.real_name = O.name + user.mob.name = O.name + user.eye = O + user.mob.control_object = O feedback_add_details("admin_verb","PO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! -/proc/release(obj/O as obj in world) - set name = "Release Obj" - set category = "Object" - //usr.loc = get_turf(usr) - - if(usr.control_object && usr.name_archive) //if you have a name archived and if you are actually relassing an object - usr.real_name = usr.name_archive - usr.name = usr.real_name - if(ishuman(usr)) - var/mob/living/carbon/human/H = usr +ADMIN_VERB(release, R_POSSESS, "Release Object", "Stop possessing an object.", ADMIN_CATEGORY_OBJECT, obj/O as obj in world) + if(user.mob.control_object && user.mob.name_archive) //if you have a name archived and if you are actually relassing an object + user.mob.real_name = user.mob.name_archive + user.mob.name = user.mob.real_name + if(ishuman(user)) + var/mob/living/carbon/human/H = user H.name = H.get_visible_name() - usr.loc = O.loc // Appear where the object you were controlling is -- TLE - usr.client.eye = usr - usr.control_object = null + user.mob.loc = O.loc // Appear where the object you were controlling is -- TLE + user.eye = user + user.mob.control_object = null feedback_add_details("admin_verb","RO") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! - -/proc/givetestverbs(mob/M as mob in mob_list) - set desc = "Give this guy possess/release verbs" - set category = "Debug" - set name = "Give Possessing Verbs" - add_verb(M, /proc/possess) - add_verb(M, /proc/release) - feedback_add_details("admin_verb","GPV") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! diff --git a/code/modules/admin/verbs/randomverbs.dm b/code/modules/admin/verbs/randomverbs.dm index 7d57cd453d..a0b4ff6eff 100644 --- a/code/modules/admin/verbs/randomverbs.dm +++ b/code/modules/admin/verbs/randomverbs.dm @@ -384,19 +384,12 @@ If a guy was gibbed and you want to revive him, this is a good way to do so. Works kind of like entering the game with a new character. Character receives a new mind if they didn't have one. Traitors and the like can also be revived with the previous role mostly intact. /N */ -/client/proc/respawn_character() - set category = "Fun.Event Kit" - set name = "Spawn Character" - set desc = "(Re)Spawn a client's loaded character." - - if(!holder) - return - - var/client/picked_client = tgui_input_list(src, "Please specify which client's character to spawn.", "Client", GLOB.clients) +ADMIN_VERB(respawn_character, (R_ADMIN|R_REJUVINATE), "Spawn Character", "(Re)Spawn a client's loaded character.", "Fun.Event Kit") + var/client/picked_client = tgui_input_list(user, "Please specify which client's character to spawn.", "Client", GLOB.clients) if(!picked_client) return - respawn_character_proper(picked_client) + user.respawn_character_proper(picked_client) /client/proc/respawn_character_proper(client/picked_client) if(!istype(picked_client)) diff --git a/code/modules/admin/verbs/randomverbs_vr.dm b/code/modules/admin/verbs/randomverbs_vr.dm index 5cab940f6f..62dfe63d6e 100644 --- a/code/modules/admin/verbs/randomverbs_vr.dm +++ b/code/modules/admin/verbs/randomverbs_vr.dm @@ -85,14 +85,7 @@ return new_mob -/client/proc/cmd_admin_z_narrate() // Allows administrators to fluff events a little easier -- TLE - set category = "Fun.Narrate" - set name = "Z Narrate" - set desc = "Narrates to your Z level." - - if (!holder) - return - +ADMIN_VERB(cmd_admin_z_narrate, (R_ADMIN|R_MOD|R_EVENT), "Z Narrate", "Narrates to your Z level.", "Fun.Narrate") // Allows administrators to fluff events a little easier -- TLE var/msg = tgui_input_text(usr, "Message:", text("Enter the text you wish to appear to everyone:")) if (!msg) @@ -104,14 +97,14 @@ if (!msg) return - var/pos_z = get_z(src.mob) + var/pos_z = get_z(user.mob) if (!pos_z) return for(var/mob/M in player_list) if(M.z == pos_z) to_chat(M, msg) - log_admin("ZNarrate: [key_name(usr)] : [msg]") - message_admins(span_blue(span_bold(" ZNarrate: [key_name_admin(usr)] : [msg]
    ")), 1) + log_admin("ZNarrate: [key_name(user)] : [msg]") + message_admins(span_blue(span_bold(" ZNarrate: [key_name_admin(user)] : [msg]
    ")), 1) feedback_add_details("admin_verb","GLNA") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! /client/proc/toggle_vantag_hud(var/mob/target as mob) diff --git a/code/modules/admin/verbs/resize.dm b/code/modules/admin/verbs/resize.dm index 24e18a19f7..f9c42f00e4 100644 --- a/code/modules/admin/verbs/resize.dm +++ b/code/modules/admin/verbs/resize.dm @@ -1,11 +1,6 @@ -/client/proc/resize(var/mob/living/L in mob_list) - set name = "Resize" - set desc = "Resizes any living mob without any restrictions on size." - set category = "Fun.Event Kit" - if(!check_rights(R_ADMIN|R_FUN|R_VAREDIT)) - return - do_resize(L) //CHOMPEdit +ADMIN_VERB(resize, (R_ADMIN|R_FUN|R_VAREDIT), "Resize", "Resizes any living mob without any restrictions on size.", "Fun.Event Kit", mob/living/L in mob_list) + user.do_resize(L) //CHOMPEdit /client/proc/do_resize(var/mob/living/L) //CHOMPEdit var/size_multiplier = tgui_input_number(usr, "Input size multiplier.", "Resize", 1, round_value=FALSE) @@ -17,11 +12,11 @@ var/very_big = is_extreme_size(size_multiplier) if(very_big && can_be_big) // made an extreme size in an area that allows it, don't assume adminbuse - to_chat(src,span_warning("[L] will lose this size upon moving into an area where this size is not allowed.")) + to_chat(src, span_warning("[L] will lose this size upon moving into an area where this size is not allowed.")) //CHOMPEdit else if(very_big) // made an extreme size in an area that doesn't allow it, assume adminbuse - to_chat(src,span_warning("[L] will retain this normally unallowed size outside this area.")) + to_chat(src, span_warning("[L] will retain this normally unallowed size outside this area.")) //CHOMPEdit L.resize(size_multiplier, animate = TRUE, uncapped = TRUE, ignore_prefs = TRUE) - log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].") + log_and_message_admins("has changed [key_name(L)]'s size multiplier to [size_multiplier].", src) //CHOMPEdit feedback_add_details("admin_verb","RESIZE") diff --git a/code/modules/admin/verbs/secrets.dm b/code/modules/admin/verbs/secrets.dm new file mode 100644 index 0000000000..c48aaecb42 --- /dev/null +++ b/code/modules/admin/verbs/secrets.dm @@ -0,0 +1,442 @@ +ADMIN_VERB(secrets, R_HOLDER, "Secrets", "Abuse harder than you ever have before with this handy dandy semi-misc stuff menu.", "Admin.Secrets") + var/datum/secrets_menu/tgui = new(user) + tgui.tgui_interact(user.mob) + //BLACKBOX_LOG_ADMIN_VERB("Secrets Panel") + feedback_add_details("admin_verb","S") //If you are copy-pasting this, ensure the 2nd parameter is unique to the new proc! + +/datum/secrets_menu + var/client/holder //client of whoever is using this datum + var/is_debugger = FALSE + var/is_funmin = FALSE + +/datum/secrets_menu/New(user)//user can either be a client or a mob due to byondcode(tm) + if (istype(user, /client)) + var/client/user_client = user + holder = user_client //if its a client, assign it to holder + else + var/mob/user_mob = user + holder = user_mob.client //if its a mob, assign the mob's client to holder + + is_debugger = check_rights(R_DEBUG) + is_funmin = check_rights(R_FUN) + +/datum/secrets_menu/tgui_state(mob/user) + return GLOB.tgui_admin_state// TGUI_ADMIN_STATE(R_NONE) + +/datum/secrets_menu/tgui_close() + qdel(src) + +/datum/secrets_menu/tgui_interact(mob/user, datum/tgui/ui) + ui = SStgui.try_update_ui(user, src, ui) + if(!ui) + ui = new(user, src, "Secrets") + ui.open() + +/datum/secrets_menu/tgui_data(mob/user) + var/list/data = list() + data["is_debugger"] = is_debugger + data["is_funmin"] = is_funmin + return data + +#define HIGHLANDER_DELAY_TEXT "40 seconds (crush the hope of a normal shift)" +/datum/secrets_menu/tgui_act(action, list/params, datum/tgui/ui, datum/tgui_state/state) + . = ..() + if(.) + return + if((action != "admin_log" || action != "show_admins") && !check_rights(R_ADMIN)) + return + switch(action) + //Generic Buttons anyone can use. + if("admin_log") + var/dat + for(var/l in GLOB.admin_log) + dat += "
  • [l]
  • " + if(!GLOB.admin_log.len) + dat += "No-one has done anything this round!" + var/datum/browser/browser = new(holder, "admin_log", "Admin Logs", 600, 500) + browser.set_content(dat) + browser.open() + if("dialog_log") + var/dat = span_bold("Dialog Log
    ") + dat += "
    " + for(var/l in GLOB.round_text_log) + dat += "
  • [l]
  • " + dat += "
    " + if(!GLOB.round_text_log) + dat += "No-one has said anything this round! (How odd?)" + var/datum/browser/browser = new(holder, "dialog_logs", "[src]", 550, 650, src) + browser.set_content(jointext(dat,null)) + browser.open() + if("show_admins") + var/dat + if(GLOB.admin_datums) + for(var/ckey in GLOB.admin_datums) + var/datum/admins/D = GLOB.admin_datums[ckey] + dat += "[ckey] - [D.rank_names()]
    " + var/datum/browser/browser = new(holder, "showadmins", "Current admins", 600, 500) + browser.set_content(dat) + browser.open() + if("show_traitors_and_objectives") // Not implemented in the UI + holder.holder.check_antagonists() + if("show_game_mode") + if (ticker.mode) tgui_alert_async(holder, "The game mode is [ticker.mode.name]") + else tgui_alert_async(holder, "For some reason there's a ticker, but not a game mode") + + //Buttons for debug. + //tbd + + //Buttons for helpful stuff. This is where people land in the tgui + if("list_bombers") + holder.holder.list_bombers() + + if("list_signalers") + holder.holder.list_signalers() + + if("list_lawchanges") + holder.holder.list_law_changes() + + if("showailaws") + holder.holder.list_law_changes() + + if("manifest") + holder.holder.show_manifest() + + if("dna") + holder.holder.list_dna() + + if("fingerprints") + holder.holder.list_fingerprints() + + if("prison_warp") + for(var/mob/living/carbon/human/H in mob_list) + var/turf/T = get_turf(H) + var/security = 0 + if((T in using_map.admin_levels) || GLOB.prisonwarped.Find(H)) + //don't warp them if they aren't ready or are already there + continue + H.Paralyse(5) + if(H.wear_id) + var/obj/item/card/id/id = H.get_idcard() + for(var/A in id.GetAccess()) + if(A == access_security) + security++ + if(!security) + //strip their stuff before they teleport into a cell :downs: + for(var/obj/item/W in H) + if(istype(W, /obj/item/organ/external)) + continue + //don't strip organs + H.drop_from_inventory(W) + //teleport person to cell + H.loc = pick(GLOB.prisonwarp) + H.equip_to_slot_or_del(new /obj/item/clothing/under/color/prison(H), slot_w_uniform) + H.equip_to_slot_or_del(new /obj/item/clothing/shoes/orange(H), slot_shoes) + else + //teleport security person + H.loc = pick(GLOB.prisonsecuritywarp) + GLOB.prisonwarped += H + + if("night_shift_set") + var/val = tgui_alert(holder, "What do you want to set night shift to? This will override the automatic system until set to automatic again.", "Night Shift", list("On", "Off", "Automatic")) + switch(val) + if("Automatic") + if(CONFIG_GET(flag/enable_night_shifts)) + SSnightshift.can_fire = TRUE + SSnightshift.fire() + else + SSnightshift.update_nightshift(active = FALSE, announce = TRUE, forced = TRUE) + if("On") + SSnightshift.can_fire = FALSE + SSnightshift.update_nightshift(active = TRUE, announce = TRUE, forced = TRUE) + if("Off") + SSnightshift.can_fire = FALSE + SSnightshift.update_nightshift(active = FALSE, announce = TRUE, forced = TRUE) + + if("trigger_xenomorph_infestation") + xenomorphs.attempt_random_spawn() + + if("trigger_cortical_borer_infestation") + borers.attempt_random_spawn() + + if("jump_shuttle") + var/shuttle_tag = tgui_input_list(holder, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) + if (!shuttle_tag) return + + var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] + + var/list/area_choices = return_areas() + var/origin_area = tgui_input_list(holder, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) + if (!origin_area) return + + var/destination_area = tgui_input_list(holder, "Which area is the shuttle at now? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) + if (!destination_area) return + + var/long_jump = tgui_alert(holder, "Is there a transition area for this jump?","Transition?", list("Yes","No")) + if(!long_jump) + return + if (long_jump == "Yes") + var/transition_area = tgui_input_list(holder, "Which area is the transition area? (MAKE SURE THIS IS CORRECT OR THINGS WILL BREAK)", "Area Choice", area_choices) + if (!transition_area) return + + var/move_duration = tgui_input_number(holder, "How many seconds will this jump take?") + + S.long_jump(area_choices[origin_area], area_choices[destination_area], area_choices[transition_area], move_duration) + message_admins(span_notice("[key_name_admin(holder)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle"), 1) + log_admin("[key_name_admin(holder)] has initiated a jump from [origin_area] to [destination_area] lasting [move_duration] seconds for the [shuttle_tag] shuttle") + else + S.short_jump(area_choices[origin_area], area_choices[destination_area]) + message_admins(span_notice("[key_name_admin(holder)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle"), 1) + log_admin("[key_name_admin(holder)] has initiated a jump from [origin_area] to [destination_area] for the [shuttle_tag] shuttle") + + if("launch_shuttle_forced") + var/list/valid_shuttles = list() + for (var/shuttle_tag in SSshuttles.shuttles) + if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) + valid_shuttles += shuttle_tag + + var/shuttle_tag = tgui_input_list(holder, "Which shuttle's launch do you want to force?", "Shuttle Choice", valid_shuttles) + if (!shuttle_tag) + return + + var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] + if (S.can_force()) + S.force_launch(holder) + log_and_message_admins("forced the [shuttle_tag] shuttle", holder) + else + tgui_alert_async(holder, "The [shuttle_tag] shuttle launch cannot be forced at this time. It's busy, or hasn't been launched yet.") + + if("launch_shuttle") + var/list/valid_shuttles = list() + for (var/shuttle_tag in SSshuttles.shuttles) + if (istype(SSshuttles.shuttles[shuttle_tag], /datum/shuttle/autodock)) + valid_shuttles += shuttle_tag + + var/shuttle_tag = tgui_input_list(holder, "Which shuttle do you want to launch?", "Shuttle Choice", valid_shuttles) + if (!shuttle_tag) + return + + var/datum/shuttle/autodock/S = SSshuttles.shuttles[shuttle_tag] + if (S.can_launch()) + S.launch(holder) + log_and_message_admins("launched the [shuttle_tag] shuttle", holder) + else + tgui_alert_async(holder, "The [shuttle_tag] shuttle cannot be launched at this time. It's probably busy.") + + if("move_shuttle") + var/confirm = tgui_alert(holder, "This command directly moves a shuttle from one area to another. DO NOT USE THIS UNLESS YOU ARE DEBUGGING A SHUTTLE AND YOU KNOW WHAT YOU ARE DOING.", "Are you sure?", list("Ok", "Cancel")) + if (confirm != "Ok") + return + + var/shuttle_tag = tgui_input_list(holder, "Which shuttle do you want to jump?", "Shuttle Choice", SSshuttles.shuttles) + if (!shuttle_tag) return + + var/datum/shuttle/S = SSshuttles.shuttles[shuttle_tag] + + var/destination_tag = tgui_input_list(holder, "Which landmark do you want to jump to? (IF YOU GET THIS WRONG THINGS WILL BREAK)", "Landmark Choice", SSshuttles.registered_shuttle_landmarks) + if (!destination_tag) return + var/destination_location = SSshuttles.get_landmark(destination_tag) + if (!destination_location) return + + S.attempt_move(destination_location) + log_and_message_admins("moved the [shuttle_tag] shuttle", holder) + + //!fun! buttons. + if("ghost_mode") + var/list/affected_mobs = list() + var/list/affected_areas = list() + for(var/mob/M in living_mob_list) + if(M.stat == CONSCIOUS && !(M in affected_mobs)) + affected_mobs |= M + switch(rand(1,4)) + if(1) + M.show_message(span_notice("You shudder as if cold..."), 1) + if(2) + M.show_message(span_notice("You feel something gliding across your back..."), 1) + if(3) + M.show_message(span_notice("Your eyes twitch, you feel like something you can't see is here..."), 1) + if(4) + M.show_message(span_notice("You notice something moving out of the corner of your eye, but nothing is there..."), 1) + + for(var/obj/W in orange(5,M)) + if(prob(25) && !W.anchored) + step_rand(W) + + var/area/A = get_area(M) + if(A.requires_power && !A.always_unpowered && A.power_light && (A.z in using_map.player_levels)) + affected_areas |= get_area(M) + + affected_mobs |= holder + for(var/area/AffectedArea in affected_areas) + AffectedArea.power_light = 0 + AffectedArea.power_change() + spawn(rand(25,50)) + AffectedArea.power_light = 1 + AffectedArea.power_change() + + sleep(100) + for(var/mob/M in affected_mobs) + M.show_message(span_notice("The chilling wind suddenly stops..."), 1) + affected_mobs.Cut() + affected_areas.Cut() + + if("paintball_mode") + for(var/species in GLOB.all_species) + var/datum/species/S = GLOB.all_species[species] + S.blood_color = "rainbow" + for(var/obj/effect/decal/cleanable/blood/B in world) + B.basecolor = "rainbow" + B.update_icon() + + if("power") + if(!is_funmin) + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All APCs")) + log_admin("[key_name(holder)] made all areas powered") + message_admins(span_adminnotice("[key_name_admin(holder)] made all areas powered")) + power_restore() + if("unpower") + if(!is_funmin) + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Depower All APCs")) + log_admin("[key_name(holder)] made all areas unpowered") + message_admins(span_adminnotice("[key_name_admin(holder)] made all areas unpowered")) + power_failure() + if("quickpower") + if(!is_funmin) + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Power All SMESs")) + log_admin("[key_name(holder)] made all SMESs powered") + message_admins(span_adminnotice("[key_name_admin(holder)] made all SMESs powered")) + power_restore_quick() + if("gravity") + GLOB.gravity_is_on = !GLOB.gravity_is_on + for(var/area/A in world) + A.gravitychange(GLOB.gravity_is_on) + + feedback_inc("admin_secrets_fun_used",1) + feedback_add_details("admin_secrets_fun_used","Grav") + if(GLOB.gravity_is_on) + log_admin("[key_name(holder)] toggled gravity on.", 1) + message_admins(span_notice("[key_name_admin(holder)] toggled gravity on."), 1) + command_announcement.Announce("Gravity generators are again functioning within normal parameters. Sorry for any inconvenience.") + else + log_admin("[key_name(holder)] toggled gravity off.", 1) + message_admins(span_notice("[key_name_admin(holder)] toggled gravity off."), 1) + command_announcement.Announce("Feedback surge detected in mass-distributions systems. Artificial gravity has been disabled whilst the system reinitializes. Further failures may result in a gravitational collapse and formation of blackholes. Have a nice day.") + if("tripleAI") + if(!is_funmin) + return + holder.triple_ai() + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Triple AI")) + if("onlyone") + if(!is_funmin) + return + var/response = tgui_alert(usr,"Delay by 40 seconds?", "There can, in fact, only be one", list("Instant!", HIGHLANDER_DELAY_TEXT)) + switch(response) + if("Instant!") + holder.only_one() + if(HIGHLANDER_DELAY_TEXT) + holder.only_one_delayed() + else + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("There Can Be Only One")) + if("blackout") + if(!is_funmin) + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Break All Lights")) + message_admins("[key_name_admin(holder)] broke all lights") + //for(var/obj/machinery/light/L as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light)) + // L.break_light_tube() + // CHECK_TICK + lightsout(0,0) + if("partial_blackout") + if(!is_funmin) + return + message_admins("[key_name_admin(holder)] broke some lights") + lightsout(1,2) + if("whiteout") + if(!is_funmin) + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Fix All Lights")) + message_admins("[key_name_admin(holder)] fixed all lights") + //for(var/obj/machinery/light/L as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/light)) + for(var/obj/machinery/light/L in GLOB.machines) + L.fix() + CHECK_TICK + if("changebombcap") + if(!is_funmin) + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Bomb Cap")) + + //var/newBombCap = input(holder,"What would you like the new bomb cap to be. (entered as the light damage range (the 3rd number in common (1,2,3) notation)) Must be above 4)", "New Bomb Cap", GLOB.MAX_EX_LIGHT_RANGE) as num|null + //if (!CONFIG_SET(number/bombcap, newBombCap)) + // return + + var/new_cap = tgui_input_list(holder, "Select the max explosion range", "Change Bomb Cap", list(14, 16, 20, 28, 56, 128)) + + if(new_cap) + GLOB.max_explosion_range = new_cap + + var/range_dev = GLOB.max_explosion_range *0.25 + var/range_high = GLOB.max_explosion_range *0.5 + var/range_low = GLOB.max_explosion_range + + message_admins(span_danger("[key_name_admin(holder)] changed the bomb cap to [range_dev], [range_high], [range_low]")) + log_admin("[key_name_admin(holder)] changed the bomb cap to [GLOB.max_explosion_range]") + + //message_admins(span_boldannounce("[key_name_admin(holder)] changed the bomb cap to [GLOB.MAX_EX_DEVESTATION_RANGE], [GLOB.MAX_EX_HEAVY_RANGE], [GLOB.MAX_EX_LIGHT_RANGE]")) + //log_admin("[key_name(holder)] changed the bomb cap to [GLOB.MAX_EX_DEVESTATION_RANGE], [GLOB.MAX_EX_HEAVY_RANGE], [GLOB.MAX_EX_LIGHT_RANGE]") + + if("alter_narsie") + var/choice = tgui_alert(holder, "How do you wish for Nar-Sie to interact with its surroundings?","NarChoice",list("CultStation13", "Nar-Singulo")) + if(choice == "CultStation13") + log_and_message_admins("has set narsie's behaviour to \"CultStation13\".", holder) + narsie_behaviour = choice + if(choice == "Nar-Singulo") + log_and_message_admins("has set narsie's behaviour to \"Nar-Singulo\".", holder) + narsie_behaviour = choice + + if("remove_all_clothing") + for(var/obj/item/clothing/O in world) + qdel(O) + + if("remove_internal_clothing") + for(var/obj/item/clothing/under/O in world) + qdel(O) + + if("send_strike_team") + holder.strike_team() + + //buttons that are fun for exactly you and nobody else. + if("corgie") + for(var/mob/living/carbon/human/H in mob_list) + spawn(0) + H.corgize() + + if("monkey") + if(!is_funmin) + return + //SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Monkeyize All Humans")) + message_admins("[key_name_admin(holder)] made everyone into monkeys.") + log_admin("[key_name_admin(holder)] made everyone into monkeys.") + for(var/i in mob_list) + var/mob/living/carbon/human/H = i + INVOKE_ASYNC(H, TYPE_PROC_REF(/mob/living/carbon/human, monkeyize)) + + if("supermatter_cascade") + var/choice = tgui_alert(holder, "You sure you want to destroy the universe and create a large explosion at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!", list("NO TIME TO EXPLAIN", "Cancel")) + if(choice == "NO TIME TO EXPLAIN") + explosion(get_turf(holder), 8, 16, 24, 32, 1) + new /turf/unsimulated/wall/supermatter(get_turf(holder)) + SetUniversalState(/datum/universal_state/supermatter_cascade) + message_admins("[key_name_admin(holder)] has managed to destroy the universe with a supermatter cascade. Good job, [key_name_admin(holder)]") + + if("summon_narsie") + var/choice = tgui_alert(holder, "You sure you want to end the round and summon Nar-Sie at your location? Misuse of this could result in removal of flags or hilarity.","WARNING!",list("PRAISE SATAN", "Cancel")) + if(choice == "PRAISE SATAN") + new /obj/singularity/narsie/large(get_turf(holder)) + log_and_message_admins("has summoned Nar-Sie and brought about a new realm of suffering.", holder) + + if(holder) + log_admin("[key_name(holder)] used secret: [action].") +#undef HIGHLANDER_DELAY_TEXT diff --git a/tgui/packages/tgui/interfaces/Secrets/Tabs/DebuggingTab.tsx b/tgui/packages/tgui/interfaces/Secrets/Tabs/DebuggingTab.tsx new file mode 100644 index 0000000000..26819b8133 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Secrets/Tabs/DebuggingTab.tsx @@ -0,0 +1,45 @@ +import { useBackend } from 'tgui/backend'; +import { Button, Stack } from 'tgui-core/components'; + +import { lineHeightDebug } from '../constants'; + +export const DebuggingTab = (props) => { + const { act } = useBackend(); + return ( + + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Secrets/Tabs/FunForYouTab.tsx b/tgui/packages/tgui/interfaces/Secrets/Tabs/FunForYouTab.tsx new file mode 100644 index 0000000000..1ede23ee98 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Secrets/Tabs/FunForYouTab.tsx @@ -0,0 +1,250 @@ +import { useBackend } from 'tgui/backend'; +import { Button, NoticeBox, Stack } from 'tgui-core/components'; + +export const FunForYouTab = (props) => { + const { act } = useBackend(); + return ( + + + + + {/* + + + + */} + + Your admin button here, coder! + + + + {/* + + + + */} + + Your admin button here, coder! + + + + + + + + {/* + + + + */} + + + + + + + + + + + + + {/* + + + + */} + Your admin button here, coder! + + + + {/* + + */} + + + + + + + {/* + + + + */} + + Your admin button here, coder! + + + + {/* + + + + */} + + Your admin button here, coder! + + + + + + + + {/* + + + + */} + + Your admin button here, coder! + + + + {/* + + + + */} + + Your admin button here, coder! + + + + + + {/* + + + + + + + + + + + + + */} + + + + + + + + + + Your admin button here, coder! + + + + + Your admin button here, coder! + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Secrets/Tabs/FunTab.tsx b/tgui/packages/tgui/interfaces/Secrets/Tabs/FunTab.tsx new file mode 100644 index 0000000000..0513456dc8 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Secrets/Tabs/FunTab.tsx @@ -0,0 +1,353 @@ +import { useBackend } from 'tgui/backend'; +import { Button, NoticeBox, Stack } from 'tgui-core/components'; + +import { buttonWidthNormal, lineHeightNormal } from '../constants'; + +export const FunTab = (props) => { + const { act } = useBackend(); + return ( + + + + + {/* + + */} + + + + {/* + + */} + + + + + + + + + + + + + + + + + + + + + + + + {/* + + */} + + + + + + + + + + + + + + {/* + + */} + + Your admin button here, coder! + + + + {/* + + */} + + Your admin button here, coder! + + + + {/* + + */} + + Your admin button here, coder! + + + + + + + + {/* + + */} + + Your admin button here, coder! + + + + {/* + + */} + + Your admin button here, coder! + + + + {/* + + */} + + Your admin button here, coder! + + + + + + + + {/* + + */} + + Your admin button here, coder! + + + + + + + {/* + + */} + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Secrets/Tabs/HelpfulTab.tsx b/tgui/packages/tgui/interfaces/Secrets/Tabs/HelpfulTab.tsx new file mode 100644 index 0000000000..cf58e4c90e --- /dev/null +++ b/tgui/packages/tgui/interfaces/Secrets/Tabs/HelpfulTab.tsx @@ -0,0 +1,290 @@ +import { useBackend } from 'tgui/backend'; +import { Button, NoticeBox, Stack } from 'tgui-core/components'; + +import { buttonWidthNormal, lineHeightNormal } from '../constants'; + +export const HelpfulTab = (props) => { + const { act } = useBackend(); + return ( + + + + + + Your admin button here, coder! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + {/* + + */} + + Your admin button here, coder! + + + + {/* + + */} + + + + + + + + + + {/* + + + + + + + */} + + + + + + + + + + + + + + + + + + + + + + + + + + ); +}; diff --git a/tgui/packages/tgui/interfaces/Secrets/constants.ts b/tgui/packages/tgui/interfaces/Secrets/constants.ts new file mode 100644 index 0000000000..6da30dbfce --- /dev/null +++ b/tgui/packages/tgui/interfaces/Secrets/constants.ts @@ -0,0 +1,35 @@ +import { DebuggingTab } from './Tabs/DebuggingTab'; +import { FunForYouTab } from './Tabs/FunForYouTab'; +import { FunTab } from './Tabs/FunTab'; +import { HelpfulTab } from './Tabs/HelpfulTab'; + +export const TAB2NAME = [ + { + title: 'Debugging', + blurb: 'Where useless shit goes to die', + gauge: 5, + component: () => DebuggingTab, + }, + { + title: 'Helpful', + blurb: 'Where fuckwits put logging', + gauge: 25, + component: () => HelpfulTab, + }, + { + title: 'Fun', + blurb: 'How I ran an """event"""', + gauge: 75, + component: () => FunTab, + }, + { + title: 'Only Fun For You', + blurb: 'How I spent my last day adminning', + gauge: 95, + component: () => FunForYouTab, + }, +]; + +export const lineHeightNormal = 2.79; +export const buttonWidthNormal = 12.9; +export const lineHeightDebug = 6.09; diff --git a/tgui/packages/tgui/interfaces/Secrets/index.tsx b/tgui/packages/tgui/interfaces/Secrets/index.tsx new file mode 100644 index 0000000000..701af468c9 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Secrets/index.tsx @@ -0,0 +1,167 @@ +import { useState } from 'react'; +import { useBackend } from 'tgui/backend'; +import { Window } from 'tgui/layouts'; +import { + Button, + LabeledControls, + NoticeBox, + RoundGauge, + Section, + Stack, +} from 'tgui-core/components'; +import { toFixed } from 'tgui-core/math'; + +import { TAB2NAME } from './constants'; +import type { Data } from './types'; + +export const Secrets = (props) => { + const { act, data } = useBackend(); + const { is_debugger, is_funmin } = data; + const [tabIndex, setTabIndex] = useState(2); + const TabComponent = TAB2NAME[tabIndex - 1].component(); + + return ( + + + + +
    + + + + + + + + + + + + + + } + > + + + + "The first rule of adminbuse is: you don't talk + about the adminbuse." + + + + + + + + + + + + + + + + + + + toFixed(value) + '%'} + /> + + + + + + + +
    +
    + +
    + +
    +
    +
    +
    +
    + ); +}; diff --git a/tgui/packages/tgui/interfaces/Secrets/types.ts b/tgui/packages/tgui/interfaces/Secrets/types.ts new file mode 100644 index 0000000000..e592983456 --- /dev/null +++ b/tgui/packages/tgui/interfaces/Secrets/types.ts @@ -0,0 +1,3 @@ +import type { BooleanLike } from 'tgui-core/react'; + +export type Data = { is_debugger: BooleanLike; is_funmin: BooleanLike }; diff --git a/vorestation.dme b/vorestation.dme index dcbd891d9f..202b126688 100644 --- a/vorestation.dme +++ b/vorestation.dme @@ -84,6 +84,7 @@ #include "code\__defines\holder.dm" #include "code\__defines\holomap.dm" #include "code\__defines\hoses.dm" +#include "code\__defines\html_assistant.dm" #include "code\__defines\hud.dm" #include "code\__defines\implant.dm" #include "code\__defines\input.dm" @@ -377,6 +378,7 @@ #include "code\ATMOSPHERICS\pipes\tank_vr.dm" #include "code\ATMOSPHERICS\pipes\universal.dm" #include "code\ATMOSPHERICS\pipes\vent.dm" +#include "code\controllers\admin.dm" #include "code\controllers\autotransfer.dm" #include "code\controllers\communications.dm" #include "code\controllers\controller.dm" @@ -388,7 +390,6 @@ #include "code\controllers\master.dm" #include "code\controllers\master_controller.dm" #include "code\controllers\subsystem.dm" -#include "code\controllers\verbs.dm" #include "code\controllers\configuration\config_entry.dm" #include "code\controllers\configuration\configuration.dm" #include "code\controllers\configuration\legacy.dm" @@ -2012,7 +2013,6 @@ #include "code\modules\admin\admin_investigate.dm" #include "code\modules\admin\admin_memo.dm" #include "code\modules\admin\admin_ranks.dm" -#include "code\modules\admin\admin_secrets.dm" #include "code\modules\admin\admin_tools.dm" #include "code\modules\admin\admin_verb_lists_vr.dm" #include "code\modules\admin\admin_verbs.dm" @@ -2037,43 +2037,6 @@ #include "code\modules\admin\ToRban.dm" #include "code\modules\admin\callproc\callproc.dm" #include "code\modules\admin\DB ban\functions.dm" -#include "code\modules\admin\secrets\admin_secrets\admin_logs.dm" -#include "code\modules\admin\secrets\admin_secrets\alter_narsie.dm" -#include "code\modules\admin\secrets\admin_secrets\bombing_list.dm" -#include "code\modules\admin\secrets\admin_secrets\jump_shuttle.dm" -#include "code\modules\admin\secrets\admin_secrets\launch_shuttle.dm" -#include "code\modules\admin\secrets\admin_secrets\launch_shuttle_forced.dm" -#include "code\modules\admin\secrets\admin_secrets\list_dna.dm" -#include "code\modules\admin\secrets\admin_secrets\list_fingerprints.dm" -#include "code\modules\admin\secrets\admin_secrets\move_shuttle.dm" -#include "code\modules\admin\secrets\admin_secrets\prison_warp.dm" -#include "code\modules\admin\secrets\admin_secrets\show_ai_laws.dm" -#include "code\modules\admin\secrets\admin_secrets\show_crew_manifest.dm" -#include "code\modules\admin\secrets\admin_secrets\show_game_mode.dm" -#include "code\modules\admin\secrets\admin_secrets\show_law_changes.dm" -#include "code\modules\admin\secrets\admin_secrets\show_signalers.dm" -#include "code\modules\admin\secrets\admin_secrets\traitors_and_objectives.dm" -#include "code\modules\admin\secrets\final_solutions\summon_narsie.dm" -#include "code\modules\admin\secrets\final_solutions\supermatter_cascade.dm" -#include "code\modules\admin\secrets\fun_secrets\break_all_lights.dm" -#include "code\modules\admin\secrets\fun_secrets\break_some_lights.dm" -#include "code\modules\admin\secrets\fun_secrets\fix_all_lights.dm" -#include "code\modules\admin\secrets\fun_secrets\ghost_mode.dm" -#include "code\modules\admin\secrets\fun_secrets\only_one.dm" -#include "code\modules\admin\secrets\fun_secrets\paintball_mode.dm" -#include "code\modules\admin\secrets\fun_secrets\power_all_smes.dm" -#include "code\modules\admin\secrets\fun_secrets\power_failure_begin.dm" -#include "code\modules\admin\secrets\fun_secrets\power_failure_end.dm" -#include "code\modules\admin\secrets\fun_secrets\remove_all_clothing.dm" -#include "code\modules\admin\secrets\fun_secrets\remove_internal_clothing.dm" -#include "code\modules\admin\secrets\fun_secrets\send_strike_team.dm" -#include "code\modules\admin\secrets\fun_secrets\toggle_bomb_cap.dm" -#include "code\modules\admin\secrets\fun_secrets\triple_ai_mode.dm" -#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_corgies.dm" -#include "code\modules\admin\secrets\fun_secrets\turn_humans_into_monkeys.dm" -#include "code\modules\admin\secrets\random_events\gravity.dm" -#include "code\modules\admin\secrets\random_events\trigger_cordical_borer_infestation.dm" -#include "code\modules\admin\secrets\random_events\trigger_xenomorph_infestation.dm" #include "code\modules\admin\verb_datums\_admin_verb_datum.dm" #include "code\modules\admin\verbs\admin_ch.dm" #include "code\modules\admin\verbs\adminjump.dm" @@ -2090,7 +2053,6 @@ #include "code\modules\admin\verbs\deadsay.dm" #include "code\modules\admin\verbs\debug.dm" #include "code\modules\admin\verbs\debug_ch.dm" -#include "code\modules\admin\verbs\debug_vr.dm" #include "code\modules\admin\verbs\diagnostics.dm" #include "code\modules\admin\verbs\dice.dm" #include "code\modules\admin\verbs\entity_narrate.dm" @@ -2100,6 +2062,7 @@ #include "code\modules\admin\verbs\getlogs.dm" #include "code\modules\admin\verbs\grief_fixers.dm" #include "code\modules\admin\verbs\lightning_strike.dm" +#include "code\modules\admin\verbs\list_exposer.dm" #include "code\modules\admin\verbs\map_template_loadverb.dm" #include "code\modules\admin\verbs\mapping.dm" #include "code\modules\admin\verbs\panicbunker.dm" @@ -2109,6 +2072,7 @@ #include "code\modules\admin\verbs\randomverbs.dm" #include "code\modules\admin\verbs\randomverbs_vr.dm" #include "code\modules\admin\verbs\resize.dm" +#include "code\modules\admin\verbs\secrets.dm" #include "code\modules\admin\verbs\smite.dm" #include "code\modules\admin\verbs\special_verbs.dm" #include "code\modules\admin\verbs\striketeam.dm"