Missed mirrors (#20203)

* https://github.com/tgstation/tgstation/pull/74273

mirrors https://github.com/tgstation/tgstation/pull/74273

* https://github.com/tgstation/tgstation/pull/74267

mirrors https://github.com/tgstation/tgstation/pull/74267

Co-Authored-By: tattle <66640614+dragomagol@users.noreply.github.com>

* https://github.com/tgstation/tgstation/pull/74113

mirrors https://github.com/tgstation/tgstation/pull/74113

Co-Authored-By: tattle <66640614+dragomagol@users.noreply.github.com>

* Updated elgohr/Publish-Docker-Github-Action to a supported version (v5) (#74370)

elgohr/Publish-Docker-Github-Action@master is not supported anymore

---------

Co-authored-by: tattle <66640614+dragomagol@users.noreply.github.com>
Co-authored-by: Lars Gohr <elgohr@users.noreply.github.com>
This commit is contained in:
Gandalf
2023-03-31 03:48:57 +01:00
committed by GitHub
co-authored by tattle Lars Gohr
parent a23c763645
commit ffd39e1729
8 changed files with 126 additions and 15 deletions
+1 -1
View File
@@ -13,7 +13,7 @@ jobs:
- uses: actions/checkout@v3
- name: Build and Publish Docker Image to Registry
uses: elgohr/Publish-Docker-Github-Action@master
uses: elgohr/Publish-Docker-Github-Action@v5
with:
name: tgstation/tgstation
username: ${{ secrets.DOCKER_USERNAME }}
-1
View File
@@ -341,7 +341,6 @@ GLOBAL_LIST_INIT(phobia_objs, list(
/obj/effect/heretic_rune,
/obj/effect/rune,
/obj/effect/visible_heretic_influence,
/obj/item/clothing/head/hooded/cult_hoodie,
/obj/item/clothing/head/wizard,
/obj/item/clothing/mask/madness_mask,
/obj/item/clothing/neck/heretic_focus,
+66
View File
@@ -603,10 +603,76 @@ SUBSYSTEM_DEF(air)
EG.dismantle()
CHECK_TICK
log_active_turfs() // invoke this here so we can count the time it takes to run this proc as "wasted time", quite simple honestly.
var/msg = "HEY! LISTEN! [DisplayTimeText(world.timeofday - timer, 0.00001)] were wasted processing [starting_ats] turf(s) (connected to [ending_ats - starting_ats] other turfs) with atmos differences at round start."
to_chat(world, span_boldannounce("[msg]"))
warning(msg)
/// Logs all active turfs at roundstart to the mapping log so it can be readily accessed.
/datum/controller/subsystem/air/proc/log_active_turfs()
// sadly this has to be here because we can't realistically expect that all active turfs will be resolved in every possible situation when running through CI.
// In an ideal world, we would have absolutely zero active turfs 99.99% of the time, but that's not the case. `log_mapping()` during world initialize triggers a CI fail.
#ifdef UNIT_TESTS
return
#endif
// Associated lists, left-hand-side is the z-level or z-trait, right-hand-side is the number of active turfs associated with that.
var/list/tally_by_level = list()
// Discriminate for certain z-traits, stuff like "Linkage" is not helpful.
var/list/tally_by_level_trait = list(
ZTRAIT_AWAY = 0,
ZTRAIT_CENTCOM = 0,
ZTRAIT_ICE_RUINS = 0,
ZTRAIT_ICE_RUINS_UNDERGROUND = 0,
ZTRAIT_ISOLATED_RUINS = 0,
ZTRAIT_LAVA_RUINS = 0,
ZTRAIT_MINING = 0,
ZTRAIT_RESERVED = 0,
ZTRAIT_SPACE_RUINS = 0,
ZTRAIT_STATION = 0,
)
var/list/message_to_log = list()
message_to_log += "\nAll that follows is a turf with an active air difference at roundstart. To clear this, make sure that all of the turfs listed below are connected to a turf with the same air contents.\n\
In an ideal world, this list should have enough information to help you locate the active turf(s) in question. Unfortunately, this might not be an ideal world.\n\
If the round is still ongoing, you can use the \"Mapping -> Show roundstart AT list\" verb to see exactly what active turfs were detected. Otherwise, good luck."
for(var/turf/active_turf as anything in GLOB.active_turfs_startlist)
var/turf_z = active_turf.z
var/datum/space_level/level = SSmapping.z_list[turf_z]
var/list/level_traits = list()
for(var/trait in level.traits)
if(!isnull(tally_by_level_trait[trait]))
level_traits += trait
tally_by_level_trait[trait]++
// so we can pass along the area type for the log, making it much easier to locate the active turf for a mapper assuming all area types are unique. This is only really a problem for stuff like ruin areas.
var/area/turf_area = get_area(active_turf)
message_to_log += "Active turf: [AREACOORD(active_turf)] ([turf_area.type]). Turf type: [active_turf.type]. Relevant Z-Trait(s): [english_list(level_traits)]."
tally_by_level["[turf_z]"]++
// Following is so we can detect which rounds were "problematic" as far as active turfs go.
SSblackbox.record_feedback("amount", "overall_roundstart_active_turfs", length(GLOB.active_turfs_startlist))
for(var/z_level in tally_by_level)
var/level_turf_count = tally_by_level[z_level]
if(level_turf_count == 0) // no point logging it
continue
message_to_log += "Z-Level [z_level] has [level_turf_count] active turf(s)."
SSblackbox.record_feedback("tally", "roundstart_active_turfs_per_z", level_turf_count, z_level)
for(var/z_trait in tally_by_level_trait)
var/trait_turf_count = tally_by_level_trait[z_trait]
if(trait_turf_count == 0)
continue
message_to_log += "Z-Level trait [z_trait] has [trait_turf_count] active turf(s)."
SSblackbox.record_feedback("amount", "roundstart_active_turfs_for_trait_[z_trait]", trait_turf_count)
message_to_log += "End of active turf list."
log_mapping(message_to_log.Join("\n"))
/turf/open/proc/resolve_active_graph()
. = list()
var/datum/excited_group/EG = excited_group
+21 -8
View File
@@ -47,15 +47,14 @@
COOLDOWN_START(src, check_cooldown, 5 SECONDS)
var/list/seen_atoms = view(7, owner)
if(LAZYLEN(trigger_objs))
for(var/obj/O in seen_atoms)
if(is_type_in_typecache(O, trigger_objs) || (phobia_type == "blood" && GET_ATOM_BLOOD_DNA_LENGTH(O)))
freak_out(O)
for(var/obj/seen_item in seen_atoms)
if(is_scary_item(seen_item))
freak_out(seen_item)
return
for(var/mob/living/carbon/human/HU in seen_atoms) //check equipment for trigger items
for(var/X in HU.get_all_worn_items() | HU.held_items)
var/obj/I = X
if(!QDELETED(I) && (is_type_in_typecache(I, trigger_objs) || (phobia_type == "blood" && GET_ATOM_BLOOD_DNA_LENGTH(I))))
freak_out(I)
for(var/mob/living/carbon/human/nearby_guy in seen_atoms) //check equipment for trigger items
for(var/obj/item/equipped as anything in nearby_guy.get_visible_items())
if(is_scary_item(equipped))
freak_out(equipped)
return
if(LAZYLEN(trigger_turfs))
@@ -77,6 +76,15 @@
freak_out(H)
return
/// Returns true if this item should be scary to us
/datum/brain_trauma/mild/phobia/proc/is_scary_item(obj/checked)
if (QDELETED(checked) || !is_type_in_typecache(checked, trigger_objs))
return FALSE
if (!isitem(checked))
return TRUE
var/obj/item/checked_item = checked
return !(checked_item.item_flags & EXAMINE_SKIP)
/datum/brain_trauma/mild/phobia/handle_hearing(datum/source, list/hearing_args)
if(!owner.can_hear() || owner == hearing_args[HEARING_SPEAKER] || !owner.has_language(hearing_args[HEARING_LANGUAGE])) //words can't trigger you if you can't hear them *taps head*
return
@@ -217,3 +225,8 @@
/datum/brain_trauma/mild/phobia/blood
phobia_type = "blood"
random_gain = FALSE
/datum/brain_trauma/mild/phobia/blood/is_scary_item(obj/checked)
if (GET_ATOM_BLOOD_DNA_LENGTH(checked))
return TRUE
return ..()
@@ -103,6 +103,39 @@
s_store,
)
/// Returns items which are currently visible on the mob
/mob/living/carbon/human/proc/get_visible_items()
var/static/list/visible_slots = list(
ITEM_SLOT_OCLOTHING,
ITEM_SLOT_ICLOTHING,
ITEM_SLOT_GLOVES,
ITEM_SLOT_EYES,
ITEM_SLOT_EARS,
ITEM_SLOT_MASK,
ITEM_SLOT_HEAD,
ITEM_SLOT_FEET,
ITEM_SLOT_ID,
ITEM_SLOT_BELT,
ITEM_SLOT_BACK,
ITEM_SLOT_NECK,
ITEM_SLOT_HANDS,
ITEM_SLOT_BACKPACK,
ITEM_SLOT_SUITSTORE,
ITEM_SLOT_HANDCUFFED,
ITEM_SLOT_LEGCUFFED,
)
var/list/obscured = check_obscured_slots()
var/list/visible_items = list()
for (var/slot in visible_slots)
if (obscured & slot)
continue
var/obj/item/equipped = get_item_by_slot(slot)
if (equipped)
visible_items += equipped
for (var/obj/item/held in held_items)
visible_items += held
return visible_items
//This is an UNSAFE proc. Use mob_can_equip() before calling this one! Or rather use equip_to_slot_if_possible() or advanced_equip_to_slot_if_possible()
// Initial is used to indicate whether or not this is the initial equipment (job datums etc) or just a player doing it
/mob/living/carbon/human/equip_to_slot(obj/item/I, slot, initial = FALSE, redraw_mob = FALSE)
+1 -1
View File
@@ -51,7 +51,7 @@
span_notice("[user] successfully removes [implant] from [target]'s [target_zone]!"),
span_notice("[user] successfully removes something from [target]'s [target_zone]!"),
)
display_pain(target, "You can feel your [implant] pulled out of you!")
display_pain(target, "You can feel your [implant.name] pulled out of you!")
implant.removed(target)
var/obj/item/implantcase/case
+1 -1
View File
@@ -55,7 +55,7 @@
span_notice("Successfully removes a piece of [human_target]'s lungs."),
"",
)
display_pain(target, "Your chest hurts like hell, but breathng becomes slightly easier.")
display_pain(target, "Your chest hurts like hell, but breathing becomes slightly easier.")
return ..()
/datum/surgery_step/lobectomy/failure(mob/user, mob/living/carbon/target, target_zone, obj/item/tool, datum/surgery/surgery)
+3 -3
View File
@@ -206,7 +206,7 @@
span_notice("[user] begins to extract [target_organ] from [target]'s [parse_zone(target_zone)]."),
span_notice("[user] begins to extract something from [target]'s [parse_zone(target_zone)]."),
)
display_pain(target, "You can feel your [target_organ] being removed from your [parse_zone(target_zone)]!")
display_pain(target, "You can feel your [target_organ.name] being removed from your [parse_zone(target_zone)]!")
else
return SURGERY_STEP_FAIL
@@ -232,7 +232,7 @@
span_notice("[user] inserts [tool] into [target]'s [parse_zone(target_zone)]!"),
span_notice("[user] inserts something into [target]'s [parse_zone(target_zone)]!"),
)
display_pain(target, "Your [parse_zone(target_zone)] throbs with pain as your new [tool] comes to life!")
display_pain(target, "Your [parse_zone(target_zone)] throbs with pain as your new [tool.name] comes to life!")
else
target_organ.forceMove(target.loc)
@@ -245,7 +245,7 @@
span_notice("[user] successfully extracts [target_organ] from [target]'s [parse_zone(target_zone)]!"),
span_notice("[user] successfully extracts something from [target]'s [parse_zone(target_zone)]!"),
)
display_pain(target, "Your [parse_zone(target_zone)] throbs with pain, you can't feel your [target_organ] anymore!")
display_pain(target, "Your [parse_zone(target_zone)] throbs with pain, you can't feel your [target_organ.name] anymore!")
log_combat(user, target, "surgically removed [target_organ.name] from", addition="COMBAT MODE: [uppertext(user.combat_mode)]")
target_organ.Remove(target)
target_organ.forceMove(get_turf(target))