mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-10 18:22:39 +00:00
[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>
This commit is contained in:
committed by
GitHub
parent
873fa555c2
commit
a3028dcb9e
@@ -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"
|
||||
|
||||
@@ -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
|
||||
@@ -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,
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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<HR>")
|
||||
for(var/l in GLOB.admin_log)
|
||||
dat += "<li>[l]</li>"
|
||||
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<HR>")
|
||||
|
||||
dat += "<fieldset style='border: 2px solid white; display: inline'>"
|
||||
|
||||
for(var/l in GLOB.round_text_log)
|
||||
dat += "<li>[l]</li>"
|
||||
|
||||
dat += "</fieldset>"
|
||||
|
||||
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")
|
||||
@@ -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
|
||||
@@ -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]<BR>")
|
||||
|
||||
var/datum/browser/popup = new(user, "bombers", "Bombers")
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
@@ -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")
|
||||
@@ -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.")
|
||||
@@ -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.")
|
||||
@@ -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.") + "<HR>"
|
||||
dat += "<table cellspacing=5><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(H.dna && H.ckey)
|
||||
dat += "<tr><td>[H]</td><td>[H.dna.unique_enzymes]</td><td>[H.dna ? H.dna.b_type : DEFAULT_BLOOD_TYPE]</td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
var/datum/browser/popup = new(user, "DNA", "DNA", 440, 410)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
@@ -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.") + "<HR>"
|
||||
dat += "<table cellspacing=5><tr><th>Name</th><th>Fingerprints</th></tr>"
|
||||
for(var/mob/living/carbon/human/H in mob_list)
|
||||
if(H.ckey)
|
||||
if(H.dna && H.dna.uni_identity)
|
||||
dat += "<tr><td>[H]</td><td>[md5(H.dna.uni_identity)]</td></tr>"
|
||||
else if(H.dna && !H.dna.uni_identity)
|
||||
dat += "<tr><td>[H]</td><td>H.dna.uni_identity = null</td></tr>"
|
||||
else if(!H.dna)
|
||||
dat += "<tr><td>[H]</td><td>H.dna = null</td></tr>"
|
||||
dat += "</table>"
|
||||
|
||||
var/datum/browser/popup = new(user, "fingerprints", "Fingerprints", 440, 410)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
@@ -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)
|
||||
@@ -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
|
||||
@@ -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()
|
||||
@@ -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 += "<h4>Crew Manifest</h4>"
|
||||
dat += GLOB.data_core.get_manifest()
|
||||
|
||||
var/datum/browser/popup = new(user, "manifest", "Manifest", 370, 420)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
@@ -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")
|
||||
@@ -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.") + "<HR>"
|
||||
for(var/sig in GLOB.lawchanges)
|
||||
dat += "[sig]<BR>"
|
||||
|
||||
var/datum/browser/popup = new(user, "lawchanges", "Lawcahnges", 800, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
@@ -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.") + "<HR>"
|
||||
for(var/sig in GLOB.lastsignalers)
|
||||
dat += "[sig]<BR>"
|
||||
|
||||
var/datum/browser/popup = new(user, "lastsignalers", "Last Signallers", 800, 500)
|
||||
popup.set_content(dat)
|
||||
popup.open()
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
@@ -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)]")
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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)
|
||||
@@ -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)
|
||||
@@ -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()
|
||||
@@ -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]")
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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.")
|
||||
@@ -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")
|
||||
@@ -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()
|
||||
@@ -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()
|
||||
@@ -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.
|
||||
|
||||
@@ -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]\"."
|
||||
|
||||
@@ -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"))
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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]")
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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><pre style='word-wrap: break-word;'>[html_encode(file2text(file(path)))]</pre></html>", list2params(list("window" = "viewfile.[path]")))
|
||||
src << browse(HTML_SKELETON("<pre style='word-wrap: break-word;'>[html_encode(file2text(file(path)))]</pre>"), list2params(list("window" = "viewfile.[path]")))
|
||||
if ("Open")
|
||||
src << run(file(path))
|
||||
if ("Download")
|
||||
|
||||
@@ -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."))
|
||||
|
||||
121
code/modules/admin/verbs/list_exposer.dm
Normal file
121
code/modules/admin/verbs/list_exposer.dm
Normal file
@@ -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 = "<b>Bombing List</b><hr>"
|
||||
for(var/entry in GLOB.bombers)
|
||||
data += "[entry]<br>"
|
||||
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 = "<b>Showing last [length(GLOB.lastsignalers)] signalers.</b><hr>"
|
||||
for(var/entry in GLOB.lastsignalers)
|
||||
data += "[entry]<BR>"
|
||||
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 = "<b>Showing last [length(GLOB.lawchanges)] law changes.</b><hr>"
|
||||
for(var/entry in GLOB.lawchanges)
|
||||
data += "[entry]<BR>"
|
||||
|
||||
var/datum/browser/browser = new(usr, "lawchanges", "Law Changes", 800, 500)
|
||||
browser.set_content(data)
|
||||
browser.open()
|
||||
|
||||
/datum/admins/proc/list_dna()
|
||||
var/data = "<b>Showing DNA from blood.</b><hr>"
|
||||
data += "<table cellspacing=5 border=1><tr><th>Name</th><th>DNA</th><th>Blood Type</th></tr>"
|
||||
for(var/entry in mob_list)
|
||||
var/mob/living/carbon/human/subject = entry
|
||||
if(subject.ckey)
|
||||
data += "<tr><td>[subject]</td><td>[subject.dna?.unique_enzymes]</td><td>[subject.dna ? subject.dna.b_type : DEFAULT_BLOOD_TYPE]</td></tr>"
|
||||
data += "</table>"
|
||||
|
||||
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 = "<b>Showing Fingerprints.</b><hr>"
|
||||
data += "<table cellspacing=5 border=1><tr><th>Name</th><th>Fingerprints</th></tr>"
|
||||
for(var/entry in mob_list)
|
||||
var/mob/living/carbon/human/subject = entry
|
||||
if(subject.ckey)
|
||||
data += "<tr><td>[subject]</td><td>[md5(subject.dna?.uni_identity)]</td></tr>"
|
||||
data += "</table>"
|
||||
|
||||
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 += "<h4>Crew Manifest</h4>"
|
||||
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 += "<b>AI [key_name(subject, usr)]'s laws:</b>"
|
||||
else if(isrobot(subject))
|
||||
var/mob/living/silicon/robot/borg = subject
|
||||
message += "<b>CYBORG [key_name(subject, usr)] [borg.connected_ai?"(Slaved to: [key_name(borg.connected_ai)])":"(Independent)"]: laws:</b>"
|
||||
else if (ispAI(subject))
|
||||
message += "<b>pAI [key_name(subject, usr)]'s laws:</b>"
|
||||
else
|
||||
message += "<b>SOMETHING SILICON [key_name(subject, usr)]'s laws:</b>"
|
||||
|
||||
message += "<br>"
|
||||
|
||||
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), "<br>")
|
||||
|
||||
to_chat(usr, message, confidential = TRUE)
|
||||
|
||||
if(!law_bound_entities)
|
||||
to_chat(usr, "<b>No law bound entities located</b>", confidential = TRUE)
|
||||
*/
|
||||
@@ -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
|
||||
|
||||
@@ -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!
|
||||
|
||||
@@ -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))
|
||||
|
||||
@@ -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]<BR>")), 1)
|
||||
log_admin("ZNarrate: [key_name(user)] : [msg]")
|
||||
message_admins(span_blue(span_bold(" ZNarrate: [key_name_admin(user)] : [msg]<BR>")), 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)
|
||||
|
||||
@@ -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")
|
||||
|
||||
442
code/modules/admin/verbs/secrets.dm
Normal file
442
code/modules/admin/verbs/secrets.dm
Normal file
@@ -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 += "<li>[l]</li>"
|
||||
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<HR>")
|
||||
dat += "<fieldset style='border: 2px solid white; display: inline'>"
|
||||
for(var/l in GLOB.round_text_log)
|
||||
dat += "<li>[l]</li>"
|
||||
dat += "</fieldset>"
|
||||
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()]<br>"
|
||||
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
|
||||
Reference in New Issue
Block a user