mirror of
https://github.com/Bubberstation/Bubberstation.git
synced 2026-07-20 12:35:33 +01:00
Merge remote-tracking branch 'tgstation/master' into upstream-feb12-2026
# Conflicts: # .github/CODEOWNERS # .github/workflows/compile_changelogs.yml # .github/workflows/stale.yml # SQL/database_changelog.md # _maps/map_files/CatwalkStation/CatwalkStation_2023.dmm # code/__DEFINES/atom_hud.dm # code/__DEFINES/inventory.dm # code/__DEFINES/mobs.dm # code/__DEFINES/species_clothing_paths.dm # code/__DEFINES/subsystems.dm # code/__DEFINES/surgery.dm # code/__HELPERS/global_lists.dm # code/_globalvars/lists/maintenance_loot.dm # code/_globalvars/traits/_traits.dm # code/controllers/subsystem/minor_mapping.dm # code/controllers/subsystem/processing/quirks.dm # code/controllers/subsystem/shuttle.dm # code/datums/components/palette.dm # code/datums/components/surgery_initiator.dm # code/datums/diseases/advance/advance.dm # code/datums/hud.dm # code/datums/mood.dm # code/datums/mutations/chameleon.dm # code/datums/quirks/negative_quirks/nyctophobia.dm # code/datums/status_effects/debuffs/debuffs.dm # code/datums/status_effects/debuffs/drunk.dm # code/datums/status_effects/debuffs/slime/slime_leech.dm # code/datums/weather/weather.dm # code/game/data_huds.dm # code/game/objects/items.dm # code/game/objects/items/devices/scanners/health_analyzer.dm # code/game/objects/items/frog_statue.dm # code/game/objects/items/rcd/RLD.dm # code/game/objects/items/robot/items/hypo.dm # code/game/objects/items/stacks/medical.dm # code/game/objects/items/stacks/wrap.dm # code/game/objects/items/storage/garment.dm # code/game/objects/items/tools/medical/defib.dm # code/game/objects/items/weaponry.dm # code/game/objects/items/weaponry/melee/misc.dm # code/game/objects/structures/crates_lockers/closets/secure/security.dm # code/game/objects/structures/curtains.dm # code/game/objects/structures/dresser.dm # code/game/objects/structures/girders.dm # code/game/objects/structures/maintenance.dm # code/game/objects/structures/mirror.dm # code/modules/admin/greyscale_modify_menu.dm # code/modules/admin/verbs/light_debug.dm # code/modules/antagonists/ashwalker/ashwalker.dm # code/modules/antagonists/heretic/knowledge/starting_lore.dm # code/modules/antagonists/ninja/ninjaDrainAct.dm # code/modules/art/paintings.dm # code/modules/client/preferences.dm # code/modules/client/verbs/ooc.dm # code/modules/clothing/head/wig.dm # code/modules/events/disease_outbreak.dm # code/modules/holodeck/holo_effect.dm # code/modules/jobs/job_types/head_of_security.dm # code/modules/jobs/job_types/security_officer.dm # code/modules/library/skill_learning/generic_skillchips/point.dm # code/modules/mining/lavaland/ash_flora.dm # code/modules/mining/lavaland/mining_loot/megafauna/ash_drake.dm # code/modules/mob/dead/new_player/new_player.dm # code/modules/mob/living/basic/guardian/guardian.dm # code/modules/mob/living/basic/space_fauna/space_dragon/space_dragon.dm # code/modules/mob/living/carbon/carbon.dm # code/modules/mob/living/carbon/human/human.dm # code/modules/mob/living/carbon/human/human_defines.dm # code/modules/mob/living/carbon/life.dm # code/modules/mob/living/living.dm # code/modules/mob/living/living_defines.dm # code/modules/mob/mob.dm # code/modules/mob_spawn/ghost_roles/mining_roles.dm # code/modules/mod/mod_control.dm # code/modules/mod/modules/modules_general.dm # code/modules/modular_computers/computers/item/computer_ui.dm # code/modules/paperwork/paper.dm # code/modules/paperwork/paperbin.dm # code/modules/power/lighting/light.dm # code/modules/projectiles/guns/energy/kinetic_accelerator.dm # code/modules/projectiles/projectile.dm # code/modules/reagents/chemistry/reagents/drinks/alcohol_reagents.dm # code/modules/reagents/chemistry/reagents/food_reagents.dm # code/modules/reagents/chemistry/reagents/other_reagents.dm # code/modules/reagents/chemistry/reagents/pyrotechnic_reagents.dm # code/modules/research/xenobiology/crossbreeding/_clothing.dm # code/modules/research/xenobiology/crossbreeding/prismatic.dm # code/modules/surgery/advanced/brainwashing.dm # code/modules/surgery/advanced/lobotomy.dm # code/modules/surgery/amputation.dm # code/modules/surgery/blood_filter.dm # code/modules/surgery/bodyparts/_bodyparts.dm # code/modules/surgery/brain_surgery.dm # code/modules/surgery/cavity_implant.dm # code/modules/surgery/coronary_bypass.dm # code/modules/surgery/gastrectomy.dm # code/modules/surgery/healing.dm # code/modules/surgery/limb_augmentation.dm # code/modules/surgery/organ_manipulation.dm # code/modules/surgery/revival.dm # code/modules/surgery/sleeper_protocol.dm # code/modules/surgery/surgery_helpers.dm # code/modules/surgery/surgery_step.dm # code/modules/unit_tests/_unit_tests.dm # code/modules/unit_tests/designs.dm # code/modules/unit_tests/icon_state_worn.dm # code/modules/unit_tests/screenshots/screenshot_antag_icons_cultist.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_headrevolutionary.png # code/modules/unit_tests/screenshots/screenshot_antag_icons_provocateur.png # code/modules/unit_tests/screenshots/screenshot_husk_body.png # code/modules/unit_tests/screenshots/screenshot_husk_body_missing_limbs.png # icons/map_icons/clothing/head/_head.dmi # icons/map_icons/clothing/shoes.dmi # icons/map_icons/items/_item.dmi # icons/mob/huds/hud.dmi # icons/mob/inhands/64x64_lefthand.dmi # icons/mob/inhands/64x64_righthand.dmi # icons/obj/machines/computer.dmi # tgui/packages/tgui/interfaces/OperatingComputer.jsx # tgui/packages/tgui/interfaces/PreferencesMenu/CharacterPreferences/MainPage.tsx # tgui/packages/tgui/interfaces/PreferencesMenu/types.ts # tgui/packages/tgui/interfaces/SurgeryInitiator.tsx # tools/icon_cutter/check.py
This commit is contained in:
@@ -25,7 +25,7 @@
|
||||
else if(response.status_code != 200)
|
||||
dat += "<br>Failed to connect to CentCom. Status code: [response.status_code]"
|
||||
else
|
||||
if(response.body == "[]")
|
||||
if(response.body == "\[]")
|
||||
dat += "<center><b>0 bans detected for [ckey]</b></center>"
|
||||
else
|
||||
bans = json_decode(response.body)
|
||||
@@ -83,7 +83,7 @@
|
||||
var/list/bans
|
||||
var/total_permabans
|
||||
|
||||
if(response.body == "[]")
|
||||
if(response.body == "\[]")
|
||||
return
|
||||
bans = json_decode(response.body)
|
||||
//Ignore bans from non-whitelisted sources, if a whitelist exists
|
||||
|
||||
@@ -166,13 +166,12 @@
|
||||
|
||||
if("pick_color")
|
||||
var/group = params["color_index"]
|
||||
//BUBBERSTATION EDIT START: TGUI COLOR PICKER
|
||||
var/new_color = tgui_color_picker(
|
||||
usr,
|
||||
"Choose color for greyscale color group [group]:",
|
||||
"Greyscale Modification Menu",
|
||||
split_colors[group]
|
||||
) //BUBBERSTATION EDIT END: TGUI COLOR PICKER
|
||||
)
|
||||
if(new_color)
|
||||
split_colors[group] = new_color
|
||||
queue_refresh()
|
||||
|
||||
@@ -28,13 +28,13 @@ GLOBAL_LIST_INIT(permission_action_types, list(
|
||||
|
||||
output += {"
|
||||
<a href='byond://?_src_=holder;[HrefToken()];editrightsbrowser=1'>\
|
||||
[action == PERMISSIONS_PAGE_PERMISSIONS ? "<b>\[Permissions\]</b": "\[Permissions\]"]
|
||||
[action == PERMISSIONS_PAGE_PERMISSIONS ? "<b>\[Permissions\]</b>": "\[Permissions\]"]
|
||||
</a>
|
||||
[new_line]<a href='byond://?_src_=holder;[HrefToken()];editrightsbrowserranks=1'>
|
||||
[action == PERMISSIONS_PAGE_RANKS ? "<b>\[Ranks\]</b": "\[Ranks\]"]
|
||||
[action == PERMISSIONS_PAGE_RANKS ? "<b>\[Ranks\]</b>": "\[Ranks\]"]
|
||||
</a>
|
||||
[new_line]<a href='byond://?_src_=holder;[HrefToken()];editrightsbrowserlogging=1;editrightslogpage=0'>
|
||||
[action == PERMISSIONS_PAGE_LOGGING ? "<b>\[Logging\]</b": "\[Logging\]"]
|
||||
[action == PERMISSIONS_PAGE_LOGGING ? "<b>\[Logging\]</b>": "\[Logging\]"]
|
||||
</a>
|
||||
[new_line]<a href='byond://?_src_=holder;[HrefToken()];editrightsbrowserhousekeep=1'>
|
||||
[action == PERMISSIONS_PAGE_HOUSEKEEPING ? "<b>\[Housekeeping\]</b>": "\[Housekeeping\]"]
|
||||
|
||||
@@ -106,11 +106,11 @@
|
||||
return
|
||||
switch(SSshuttle.emergency.mode)
|
||||
if(SHUTTLE_CALL)
|
||||
SSshuttle.emergency.cancel()
|
||||
SSshuttle.cancel_evac(usr) // note that this does provide logging/feedback of its own but it's better for backcompatibility to retain the following logging lines
|
||||
log_admin("[key_name(usr)] sent the Emergency Shuttle back.")
|
||||
message_admins(span_adminnotice("[key_name_admin(usr)] sent the Emergency Shuttle back."))
|
||||
else
|
||||
SSshuttle.emergency.cancel()
|
||||
SSshuttle.emergency.request()
|
||||
log_admin("[key_name(usr)] called the Emergency Shuttle.")
|
||||
message_admins(span_adminnotice("[key_name_admin(usr)] called the Emergency Shuttle to the station."))
|
||||
|
||||
|
||||
@@ -58,9 +58,12 @@ ADMIN_VERB(cmd_admin_check_player_exp, R_ADMIN, "Player Playtime", "View player
|
||||
if(!message)
|
||||
return
|
||||
|
||||
if(!SSshuttle.centcom_recall(usr, SSshuttle.emergency.timer, message)) // feedback handled within
|
||||
return
|
||||
|
||||
message_admins("[key_name_admin(usr)] triggered a CentCom recall, with the admiral message of: [message]")
|
||||
usr.log_message("triggered a CentCom recall, with the message of: [message]", LOG_GAME)
|
||||
SSshuttle.centcom_recall(SSshuttle.emergency.timer, message)
|
||||
|
||||
|
||||
/datum/admins/proc/cmd_show_exp_panel(client/client_to_check)
|
||||
if(!check_rights(R_ADMIN))
|
||||
|
||||
@@ -179,6 +179,76 @@ ADMIN_VERB_ONLY_CONTEXT_MENU(show_player_panel, R_ADMIN, "Show Player Panel", mo
|
||||
user << browse(body, "window=adminplayeropts-[REF(player)];size=550x540")
|
||||
BLACKBOX_LOG_ADMIN_VERB("Player Panel")
|
||||
|
||||
ADMIN_VERB_ONLY_CONTEXT_MENU(show_occupants_player_panel, R_ADMIN, "Show Occupants PP", obj/target in world)
|
||||
var/list/options = list()
|
||||
|
||||
// Vehicles
|
||||
if(istype(target, /obj/vehicle))
|
||||
var/obj/vehicle/target_vehicle = target
|
||||
if(istype(target_vehicle.occupants, /list) && target_vehicle.occupants.len)
|
||||
for(var/mob/mob_occupant in target_vehicle.occupants)
|
||||
options["[mob_occupant.name] ([mob_occupant.tag])[target_vehicle.is_driver(mob_occupant) ? " (Driver)" : ""]"] = "\ref[mob_occupant]"
|
||||
// Searching for mobs in exosuit equipment (e.g. seccage, sleepers)
|
||||
for(var/obj/item/mecha_parts/mecha_equipment/obj_contents in target.contents)
|
||||
for(var/mob/mob_in_equipment in obj_contents.contents)
|
||||
options["[mob_in_equipment.name] ([mob_in_equipment.tag])"] = "\ref[mob_in_equipment]"
|
||||
|
||||
// Closets, crates, bodybags, coffins, etc.
|
||||
else if(istype(target, /obj/structure/closet))
|
||||
for(var/mob/mob_occupant in target.contents)
|
||||
options["[mob_occupant.name] ([mob_occupant.tag])"] = "\ref[mob_occupant]"
|
||||
// Searching for mobs in bodybags placed inside closet
|
||||
for(var/obj/structure/closet/obj_contents in target.contents)
|
||||
for(var/mob/mob_in_bodybag in obj_contents.contents)
|
||||
options["[mob_in_bodybag.name] ([mob_in_bodybag.tag])"] = "\ref[mob_in_bodybag]"
|
||||
// That's basically the same for folded bodybags (e.g. bluespace bodybags with mobs inside)
|
||||
for(var/obj/item/bodybag/obj_contents_folded in target.contents)
|
||||
for(var/mob/mob_in_bodybag_folded in obj_contents_folded.contents)
|
||||
options["[mob_in_bodybag_folded.name] ([mob_in_bodybag_folded.tag])"] = "\ref[mob_in_bodybag_folded]"
|
||||
|
||||
// Folded bodybags (e.g. bluespace bodybags with mobs inside)
|
||||
else if(istype(target, /obj/item/bodybag))
|
||||
for(var/mob/mob_occupant in target.contents)
|
||||
options["[mob_occupant.name] ([mob_occupant.tag])"] = "\ref[mob_occupant]"
|
||||
|
||||
// Body containers (morgue trays, crematoriums)
|
||||
else if(istype(target, /obj/structure/bodycontainer))
|
||||
for(var/mob/mob_occupant in target.contents)
|
||||
options["[mob_occupant.name] ([mob_occupant.tag])"] = "\ref[mob_occupant]"
|
||||
// Searching for mobs in bodybags placed inside body container
|
||||
for(var/obj/structure/closet/obj_contents in target.contents)
|
||||
for(var/mob/mob_in_bodybag in obj_contents.contents)
|
||||
options["[mob_in_bodybag.name] ([mob_in_bodybag.tag])"] = "\ref[mob_in_bodybag]"
|
||||
// That's basically the same for folded bodybags (e.g. bluespace bodybags with mobs inside)
|
||||
for(var/obj/item/bodybag/obj_contents_folded in target.contents)
|
||||
for(var/mob/mob_in_bodybag_folded in obj_contents_folded.contents)
|
||||
options["[mob_in_bodybag_folded.name] ([mob_in_bodybag_folded.tag])"] = "\ref[mob_in_bodybag_folded]"
|
||||
|
||||
// Machinery
|
||||
else if(istype(target, /obj/machinery))
|
||||
for(var/mob/mob_occupant in target.contents)
|
||||
options["[mob_occupant.name] ([mob_occupant.tag])"] = "\ref[mob_occupant]"
|
||||
|
||||
else
|
||||
tgui_alert(user,"Unsupported object type! Supported types: /obj/vehicle; /obj/structure/closet; /obj/structure/bodycontainer; /obj/machinery; /obj/item/bodybag.")
|
||||
return
|
||||
|
||||
if(!options.len)
|
||||
tgui_alert(user, "No occupants found!")
|
||||
return
|
||||
|
||||
var/choice
|
||||
if(options.len == 1)
|
||||
choice = options[1]
|
||||
else
|
||||
choice = tgui_input_list(user, "Select mob", "Player Panel", options)
|
||||
|
||||
if(choice)
|
||||
var/mob/selected_mob = locate(options[choice])
|
||||
if(selected_mob)
|
||||
SSadmin_verbs.dynamic_invoke_verb(user, /datum/admin_verb/show_player_panel, selected_mob)
|
||||
return
|
||||
|
||||
/client/proc/cmd_admin_godmode(mob/mob in GLOB.mob_list)
|
||||
set category = "Admin.Game"
|
||||
set name = "Godmode"
|
||||
|
||||
@@ -360,9 +360,9 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
// send2chat(new /datum/tgs_message_conent("[initiator_ckey] | [message_content]"), "ahelp", TRUE)
|
||||
var/list/headers = list()
|
||||
headers["Content-Type"] = "application/json"
|
||||
var/datum/http_request/request = new()
|
||||
var/datum/http_request/request = new
|
||||
request.prepare(RUSTG_HTTP_METHOD_POST, webhook, json_encode(webhook_info), headers, "tmp/response.json")
|
||||
request.begin_async()
|
||||
request.fire_and_forget()
|
||||
|
||||
/datum/admin_help/Destroy()
|
||||
RemoveActive()
|
||||
@@ -724,7 +724,7 @@ GLOBAL_DATUM_INIT(ahelp_tickets, /datum/admin_help_tickets, new)
|
||||
dat += "CLOSED</b>"
|
||||
else
|
||||
dat += "UNKNOWN</b>"
|
||||
dat += "\n[FOURSPACES]<A href='byond://?_src_=holder;[HrefToken(forceGlobal = TRUE)];player_ticket_panel=1'>Refresh</A>"
|
||||
dat += "\n[FOURSPACES]<A href='byond://?_src_=usr;player_ticket_panel=1'>Refresh</A>"
|
||||
dat += "<br><br>Opened at: [gameTimestamp("hh:mm:ss", opened_at)] (Approx [DisplayTimeText(world.time - opened_at)] ago)"
|
||||
if(closed_at)
|
||||
dat += "<br>Closed at: [gameTimestamp("hh:mm:ss", closed_at)] (Approx [DisplayTimeText(world.time - closed_at)] ago)"
|
||||
|
||||
@@ -51,10 +51,12 @@ ADMIN_VERB(cancel_shuttle, R_ADMIN, "Cancel Shuttle", "Recall the shuttle, regar
|
||||
if(EMERGENCY_AT_LEAST_DOCKED)
|
||||
return
|
||||
|
||||
if(tgui_alert(user, "You sure?", "Confirm", list("Yes", "No")) != "Yes")
|
||||
if(tgui_alert(user, "You sure?", "Confirm Shuttle Cancellation", list("Yes", "No")) != "Yes")
|
||||
return
|
||||
SSshuttle.admin_emergency_no_recall = FALSE
|
||||
SSshuttle.emergency.cancel()
|
||||
|
||||
if(!SSshuttle.cancel_evac(user.mob)) // handles the case where the shuttle is set to unrecallable by another admin or the code
|
||||
return
|
||||
|
||||
BLACKBOX_LOG_ADMIN_VERB("Cancel Shuttle")
|
||||
log_admin("[key_name(user)] admin-recalled the emergency shuttle.")
|
||||
message_admins(span_adminnotice("[key_name_admin(user)] admin-recalled the emergency shuttle."))
|
||||
|
||||
@@ -28,9 +28,9 @@ ADMIN_VERB(run_weather, R_ADMIN|R_FUN, "Run Weather", "Triggers specific weather
|
||||
return
|
||||
|
||||
var/list/area_choices = list()
|
||||
if(!length(area_choices))
|
||||
for(var/area/area_type as anything in typesof(/area))
|
||||
area_choices[initial(area_type.type)] = area_type
|
||||
for(var/area/area_instance as anything in GLOB.areas)
|
||||
area_choices[area_instance.type] ||= list()
|
||||
area_choices[area_instance.type] |= area_instance
|
||||
|
||||
var/area/area_choice = tgui_input_list(user, "Select an area for weather to target", "Target Area", area_choices)
|
||||
if(!area_choice)
|
||||
@@ -72,10 +72,10 @@ ADMIN_VERB(run_weather, R_ADMIN|R_FUN, "Run Weather", "Triggers specific weather
|
||||
thunder_value = GLOB.thunder_chance_options[thunder_choice]
|
||||
|
||||
var/list/weather_data = list(
|
||||
area = area_choice,
|
||||
weather_flags = weather_bitflags,
|
||||
thunder_chance = thunder_value,
|
||||
reagent = reagent_choice,
|
||||
WEATHER_FORCED_AREAS = area_choice,
|
||||
WEATHER_FORCED_FLAGS = weather_bitflags,
|
||||
WEATHER_FORCED_THUNDER = thunder_value,
|
||||
WEATHER_FORCED_REAGENT = reagent_choice,
|
||||
)
|
||||
|
||||
SSweather.run_weather(weather_choice, z_level, weather_data)
|
||||
|
||||
@@ -9,7 +9,7 @@ ADMIN_VERB(atmos_debug, R_DEBUG, "Check Plumbing", "Verifies the integrity of th
|
||||
|
||||
//Pipes
|
||||
for(var/obj/machinery/atmospherics/pipe/pipe as anything in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/atmospherics/pipe))
|
||||
if(istype(pipe, /obj/machinery/atmospherics/pipe/smart) || istype(pipe, /obj/machinery/atmospherics/pipe/layer_manifold))
|
||||
if(istype(pipe, /obj/machinery/atmospherics/pipe/smart) || istype(pipe, /obj/machinery/atmospherics/pipe/layer_manifold) || istype(pipe, /obj/machinery/atmospherics/pipe/multiz))
|
||||
continue
|
||||
if(pipe.z && (!pipe.nodes || !pipe.nodes.len || (null in pipe.nodes)))
|
||||
to_chat(user, "Unconnected [pipe.name] located at [ADMIN_VERBOSEJMP(pipe)]", confidential = TRUE)
|
||||
@@ -29,12 +29,12 @@ ADMIN_VERB(power_debug, R_DEBUG, "Check Power", "Verifies the integrity of the p
|
||||
if (!PN.nodes || !PN.nodes.len)
|
||||
if(PN.cables && (PN.cables.len > 1))
|
||||
var/obj/structure/cable/C = PN.cables[1]
|
||||
results += "Powernet with no nodes! (number [PN.number]) - example cable at [ADMIN_VERBOSEJMP(C)]"
|
||||
results += "Powernet with no nodes! Example cable at [ADMIN_VERBOSEJMP(C)]"
|
||||
|
||||
if (!PN.cables || (PN.cables.len < 10))
|
||||
if(PN.cables && (PN.cables.len > 1))
|
||||
var/obj/structure/cable/C = PN.cables[1]
|
||||
results += "Powernet with fewer than 10 cables! (number [PN.number]) - example cable at [ADMIN_VERBOSEJMP(C)]"
|
||||
results += "Powernet with fewer than 10 cables! Example cable at [ADMIN_VERBOSEJMP(C)]"
|
||||
|
||||
for(var/turf/T in world.contents)
|
||||
var/cable_layers //cache all cable layers (which are bitflags) present
|
||||
|
||||
@@ -126,7 +126,7 @@
|
||||
|
||||
var/list/spawn_points = GLOB.emergencyresponseteamspawn
|
||||
|
||||
var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [span_notice(ertemplate.polldesc)]?", check_jobban = "deathsquad", alert_pic = /obj/item/card/id/advanced/centcom/ert, role_name_text = "emergency response team")
|
||||
var/list/mob/dead/observer/candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for [span_notice(ertemplate.polldesc)]?", check_jobban = "deathsquad", alert_pic = /obj/item/card/id/advanced/centcom/ert/commander, role_name_text = "emergency response team")
|
||||
|
||||
if(!length(candidates))
|
||||
message_admins("[key_name_admin(owner)] tried to create a CentCom response team but [owner.p_they()] didn't find any candidates.")
|
||||
|
||||
@@ -256,7 +256,7 @@ GLOBAL_LIST_EMPTY(light_debugged_atoms)
|
||||
if("set_on")
|
||||
parent.set_light(l_on = params["value"])
|
||||
if("change_color")
|
||||
var/chosen_color = tgui_color_picker(ui.user, "Pick new color", "[parent]", parent.light_color) // BUBBERSTATION EDIT: TGUI COLOR PICKER
|
||||
var/chosen_color = tgui_color_picker(ui.user, "Pick new color", "[parent]", parent.light_color)
|
||||
if(chosen_color)
|
||||
parent.set_light(l_color = chosen_color)
|
||||
if("set_power")
|
||||
|
||||
@@ -56,7 +56,7 @@ ADMIN_VERB(map_export, R_DEBUG, "Map Export", "Select a part of the map by coord
|
||||
// Save resources in silo
|
||||
/obj/machinery/ore_silo/on_object_saved()
|
||||
var/data
|
||||
var/datum/component/material_container/material_holder = GetComponent(/datum/component/material_container)
|
||||
var/datum/material_container/material_holder = materials
|
||||
for(var/each in material_holder.materials)
|
||||
var/amount = material_holder.materials[each] / 100
|
||||
var/datum/material/material_datum = each
|
||||
|
||||
@@ -236,7 +236,7 @@ ADMIN_VERB(debug_z_levels, R_DEBUG, "Debug Z-Levels", "Displays a list of all z-
|
||||
var/list/messages = list()
|
||||
|
||||
var/list/z_list = SSmapping.z_list
|
||||
messages += "\n<b>World</b>: [world.maxx] x [world.maxy] x [world.maxz]\n"
|
||||
messages += "<b>World</b>: [world.maxx] x [world.maxy] x [world.maxz]\n"
|
||||
|
||||
var/list/linked_levels = list()
|
||||
var/min_x = INFINITY
|
||||
|
||||
@@ -140,7 +140,12 @@ GLOBAL_VAR_INIT(web_sound_cooldown, 0)
|
||||
if(credit)
|
||||
to_chat_message += span_notice("<br>[credit]")
|
||||
|
||||
to_chat(world, fieldset_block("Now Playing: [span_bold(music_extra_data["title"])] by [span_bold(music_extra_data["artist"])]", jointext(to_chat_message, ""), "boxed_message"))
|
||||
var/list/recipients = list()
|
||||
for(var/client/client as anything in GLOB.clients)
|
||||
if(client.prefs.read_preference(/datum/preference/numeric/volume/sound_midi) > 0)
|
||||
recipients += client
|
||||
recipients |= user.client
|
||||
to_chat(recipients, fieldset_block("Now Playing: [span_bold(music_extra_data["title"])] by [span_bold(music_extra_data["artist"])]", jointext(to_chat_message, ""), "boxed_message"))
|
||||
|
||||
SSblackbox.record_feedback("nested tally", "played_url", 1, list("[user.ckey]", "[input]"))
|
||||
log_admin("[key_name(user)] played web sound: [input]")
|
||||
|
||||
@@ -349,16 +349,6 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w
|
||||
airlock.req_one_access = list()
|
||||
message_admins("[key_name_admin(holder)] activated Egalitarian Station mode")
|
||||
priority_announce("CentCom airlock control override activated. Please take this time to get acquainted with your coworkers.", null, SSstation.announcer.get_rand_report_sound())
|
||||
if("ancap")
|
||||
if(!is_funmin)
|
||||
return
|
||||
SSblackbox.record_feedback("nested tally", "admin_secrets_fun_used", 1, list("Anarcho-capitalist Station"))
|
||||
SSeconomy.full_ancap = !SSeconomy.full_ancap
|
||||
message_admins("[key_name_admin(holder)] toggled Anarcho-capitalist mode")
|
||||
if(SSeconomy.full_ancap)
|
||||
priority_announce("The NAP is now in full effect.", null, SSstation.announcer.get_rand_report_sound())
|
||||
else
|
||||
priority_announce("The NAP has been revoked.", null, SSstation.announcer.get_rand_report_sound())
|
||||
if("send_shuttle_back")
|
||||
if (!is_funmin)
|
||||
return
|
||||
@@ -637,7 +627,7 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w
|
||||
if(teamsize <= 0)
|
||||
return FALSE
|
||||
|
||||
candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a [span_notice("Nanotrasen emergency response drone")]?", check_jobban = ROLE_DRONE, alert_pic = /mob/living/basic/drone/classic, role_name_text = "nanotrasen emergency response drone")
|
||||
candidates = SSpolling.poll_ghost_candidates("Do you wish to be considered for a [span_notice("Nanotrasen emergency response drone")]?", check_jobban = ROLE_DRONE, alert_pic = /mob/living/basic/drone/classic, role_name_text = "Nanotrasen emergency response drone")
|
||||
|
||||
if(length(candidates) == 0)
|
||||
return FALSE
|
||||
@@ -687,6 +677,20 @@ ADMIN_VERB(secrets, R_NONE, "Secrets", "Abuse harder than you ever have before w
|
||||
message_admins("[key_name_admin(holder)] healed everyone.")
|
||||
log_admin("[key_name(holder)] healed everyone.")
|
||||
|
||||
if("cascade")
|
||||
if(!is_funmin)
|
||||
return
|
||||
message_admins("[key_name_admin(holder)] started a resonance cascade! You're supposed to be a scientist! Use your common sense!")
|
||||
for(var/obj/machinery/power/supermatter_crystal/S in SSmachines.get_machines_by_type_and_subtypes(/obj/machinery/power/supermatter_crystal))
|
||||
if(!S.is_main_engine)
|
||||
continue
|
||||
S.explosion_point = 0
|
||||
S.set_delam(SM_DELAM_PRIO_IN_GAME, /datum/sm_delam/cascade)
|
||||
S.external_damage_immediate += 200
|
||||
S.count_down()
|
||||
return
|
||||
return
|
||||
|
||||
if(holder)
|
||||
log_admin("[key_name(holder)] used secret: [action].")
|
||||
#undef THUNDERDOME_TEMPLATE_FILE
|
||||
|
||||
@@ -126,6 +126,7 @@
|
||||
|
||||
else if(islist(potential_container))
|
||||
var/list/potential_cache = potential_container
|
||||
var/is_alist = istype(potential_cache, /alist)
|
||||
for(var/element_in_list in potential_cache)
|
||||
//Check normal sublists
|
||||
if(islist(element_in_list))
|
||||
@@ -162,7 +163,7 @@
|
||||
log_reftracker("All references to [type] [text_ref(src)] found, exiting.")
|
||||
return
|
||||
|
||||
if(!isnum(element_in_list) && !is_special_list)
|
||||
if((!isnum(element_in_list) || is_alist) && !is_special_list)
|
||||
// This exists to catch an error that throws when we access a special list
|
||||
// is_special_list is a hint, it can be wrong
|
||||
try
|
||||
|
||||
Reference in New Issue
Block a user