[Tweak] The Great Medbay Reformation#101
Conversation
This reverts commit 089256db8d9e65f56888b89e850c60054b5cc5bb.
This reverts commit 4c779948e98d17402931a319789c23742fc562c6.
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane-old"
pr="101"
echo "=== PR checks ==="
gh pr checks "$pr" --repo "$repo" || true
echo "=== latest failed PR workflow ==="
run="$(
gh run list --repo "$repo" --limit 30 \
--json databaseId,event,headBranch,status,conclusion,createdAt \
| jq -r '
[.[] | select(.event == "pull_request" and .conclusion == "failure")]
| sort_by(.createdAt) | last | .databaseId // empty
'
)"
test -n "$run"
echo "run=$run"
log="$(mktemp)"
gh run view "$run" --repo "$repo" --log-failed > "$log" 2>&1
echo "=== test occurrence and surrounding context ==="
match_lines="$(grep -n 'SpawnAndDeleteAllEntitiesInTheSameSpot' "$log" | cut -d: -f1 || true)"
if [ -z "$match_lines" ]; then
echo "Test name absent from --log-failed; searching complete run log."
gh run view "$run" --repo "$repo" --log > "$log" 2>&1
match_lines="$(grep -n 'SpawnAndDeleteAllEntitiesInTheSameSpot' "$log" | cut -d: -f1 || true)"
fi
for line in $match_lines; do
start=$(( line > 100 ? line - 100 : 1 ))
end=$(( line + 180 ))
echo "--- lines $start-$end ---"
sed -n "${start},${end}p" "$log"
done
echo "=== all likely primary failures from this run ==="
grep -nEi \
'EntityCreationException|Exception inside InitializeAndStartEntity|StorageFill|Insufficient|Недостаточ|does not exist in RSI|Layer with key|Prototype .* threw|Unhandled|ERROR.*system\.' \
"$log" | head -250 || trueLength of output: 264003 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== MobState enum ==="
cat -n Content.Shared/Mobs/MobState.cs
echo "=== throwing state-entry handler ==="
sed -n '180,240p' Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs
echo "=== all explicit NotImplementedException throws related to MobState ==="
rg -n -C4 'NotImplementedException|MobState\.(Critical|SoftCritical|HardCritical|Dead)' \
Content.Shared/Mobs Content.Server Content.Client \
-g '*.cs'
echo "=== all switches over MobState, including expressions ==="
rg -n -U -C3 'switch\s*(\([^\n]*MobState|[^\n]*CurrentState|[^\n]*state\b)|MobState\.[A-Za-z]+\s*=>' \
Content.Shared Content.Server Content.Client \
-g '*.cs'
echo "=== PR diff for enum and subscriber handler versus master ==="
git diff master...HEAD -- \
Content.Shared/Mobs/MobState.cs \
Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs
echo "=== master version of enum and state-entry handler ==="
git show master:Content.Shared/Mobs/MobState.cs
git show master:Content.Shared/Mobs/Systems/MobStateSystem.Subscribers.cs | sed -n '180,240p'Length of output: 178969
Проблема системная: Нужно откатить превращение --- a/Content.Shared/Mobs/MobState.cs
+++ b/Content.Shared/Mobs/MobState.cs
@@
public enum MobState : byte
{
Invalid = 0,
Alive = 1,
- Critical = 2,
- SoftCritical = 3,
- HardCritical = 4,
- Dead = 5,
+ SoftCritical = 2,
+ Critical = SoftCritical,
+ HardCritical = 3,
+ Dead = 4,
}Также в public Dictionary<MobState, ProtoId<AlertPrototype>> StateAlertDict = new()
{
{MobState.Alive, "HumanHealth"},
- {MobState.Critical, "HumanSoftCrit"},
{MobState.SoftCritical, "HumanSoftCrit"},
{MobState.HardCritical, "HumanHardCrit"},
{MobState.Dead, "HumanDead"},
};Итог: |
|
@coderabbitai но получим проблему, из-за которой химикаты для критического состояния, по типу инапровалина вновь будут работать лишь в софткрите |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Inaprovaline/Ivacetamide effect + condition on MobState ==="
rg -n -C5 'Inaprovaline' Resources/Prototypes/Reagents/medicine.yml 2>/dev/null | head -60
echo "=== MobStateCondition current (post-PR) ==="
cat -n Content.Shared/EntityEffects/EffectConditions/MobStateCondition.cs
echo "=== usages of MobStateCondition with Mobstate: Critical ==="
rg -n -B3 -A3 'Mobstate:\s*Critical' Resources/Prototypes 2>/dev/null
echo "=== check other systems keying off MobState.Critical directly (non-alias-safe) ==="
rg -n 'MobState\.Critical\b' Content.Shared Content.Server Content.Client -g '*.cs'Length of output: 2980 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== Inaprovaline full reagent block ==="
sed -n '709,760p' Resources/Prototypes/Reagents/medicine.yml
echo "=== any other reagent condition on Mobstate Critical (case-insensitive) ==="
rg -ni 'mobstate' Resources/Prototypes/Reagents Resources/Prototypes/_Goobstation/Reagents Resources/Prototypes/_Arcane/Reagents Resources/Prototypes/_EinsteinEngines/Reagents 2>/dev/nullLength of output: 4112
В if (Mobstate == MobState.Critical)
return mobState.CurrentState == MobState.SoftCritical
|| mobState.CurrentState == MobState.HardCritical;Это сравнение работает по значению поля Подтвердил на данных: Inaprovaline ( Так что откат enum безопасен для инапровалина и прочих критовых химикатов — фиксить нужно только сам (・_・)b |
|
@coderabbitai Хахахахах, кажется, что ты не полностью просчитал весь тест интегралок. Я вот думаю, чтобы уже отложить добавление реакции охлаждения/нагрева воды/льда, не забывая про весь код для поддержки, включая тесты с доработкой систем реакции. |
|
Tip For best results, initiate chat on the files or code changes.
Что нужно откатить для полного отложения фичи:
Когда будешь возвращаться к фиче — добавь отдельный интеграционный тест на цепочку (・_・) ✏️ Learnings added
|
|
@coderabbitai Хмм... Названия химикатов оставь на русском, но и то без ошибок по типу гироналина, а не хироналина. Люди сразу поймут в данных списках чёткие изменения, да и то они краткие. Можешь прочитать мои прошлые требования для CL. В основном проблема только в данном указании. У всего остального относительно всё в норме. Можешь снова прописывать CL |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
echo "=== check ru names for reagents mentioned in CL ==="
rg -n "reagent-name-hyronalin|reagent-name-dylovene|reagent-name-cryoxadone|reagent-name-necrosol|reagent-name-dermaline|reagent-name-epinephrine|reagent-name-saline|reagent-name-synaptizine|reagent-name-tricordrazine|reagent-name-probital|reagent-name-tirimol|reagent-name-multiver|reagent-name-oxandrolone|reagent-name-hercuri|reagent-name-herignis|reagent-name-synthflesh|reagent-name-synthcells|reagent-name-unstablemutagen|reagent-name-heartbreakertoxin|reagent-name-lexorin|reagent-name-histamine|reagent-name-amatoxin|reagent-name-lipolicide|reagent-name-pendetide|reagent-name-chlorine|reagent-name-copper|reagent-name-iron|reagent-name-dexalinplus|reagent-name-dexalin|reagent-name-convermol|reagent-name-salbutamol|reagent-name-aranesp|reagent-name-dopamine|reagent-name-diphenhydramine|reagent-name-formaldehyde|reagent-name-siderlac|reagent-name-pyrazine|reagent-name-insuzine|reagent-name-sigynate" Resources/Locale/ru-RU -g '*.ftl' 2>/dev/nullLength of output: 4688 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== diff medicine.yml (main) ==="
git diff master...HEAD -- Resources/Prototypes/Reagents/medicine.yml
echo "=== diff narcotics.yml (main) ==="
git diff master...HEAD -- Resources/Prototypes/Reagents/narcotics.yml
echo "=== diff toxins.yml (main) ==="
git diff master...HEAD -- Resources/Prototypes/Reagents/toxins.yml
echo "=== diff elements.yml ==="
git diff master...HEAD -- Resources/Prototypes/Reagents/elements.yml
echo "=== diff Goobstation medicine.yml ==="
git diff master...HEAD -- Resources/Prototypes/_Goobstation/Reagents/medicine.yml
echo "=== diff Goobstation toxins.yml ==="
git diff master...HEAD -- Resources/Prototypes/_Goobstation/Reagents/toxins.yml
echo "=== diff EinsteinEngines medicine.yml ==="
git diff master...HEAD -- Resources/Prototypes/_EinsteinEngines/Reagents/medicine.yml
echo "=== diff Goobstation dispensers.yml ==="
git diff master...HEAD -- Resources/Prototypes/_Goobstation/Entities/Structures/Machines/dispensers.yml
echo "=== diff base.yml mobs ==="
git diff master...HEAD -- Resources/Prototypes/Entities/Mobs/base.yml
echo "=== diff Atmospherics.cs ==="
git diff master...HEAD -- Content.Shared/Atmos/Atmospherics.cs
echo "=== diff BarotraumaComponent.cs ==="
git diff master...HEAD -- Content.Server/Atmos/Components/BarotraumaComponent.csLength of output: 25571 🏁 Script executed: #!/bin/bash
set -euo pipefail
python3 - <<'PY'
import re
path = "Resources/Prototypes/Reagents/medicine.yml"
text = open(path, encoding="utf-8").read()
blocks = re.split(r'\n(?=- type: reagent)', text)
targets = ["Caustic: -4","Heat: -1.5","Shock: -6","Sigynate","Pyrazine","Insuzine","Necrosol","Dylovene","Cryoxadone","Dermaline","Epinephrine","Saline","Siderlac","Synaptizine","Tricordrazine","Diphenhydramine"]
for b in blocks:
m = re.search(r'id:\s*(\S+)', b)
if not m: continue
rid = m.group(1)
if rid in ["Dylovene","Diphenhydramine","Cryoxadone","Dermaline","Epinephrine","Saline","Siderlac","Synaptizine","Tricordrazine","Sigynate","Pyrazine","Insuzine","Necrosol"]:
print(f"===== {rid} =====")
print(b[:1500])
print()
PYLength of output: 15686
Если что-то из формулировок ещё режет глаз — говори конкретный пункт, поправлю точечно. |
|
@coderabbitai Глянь на последние коммиты и на тесты. Где-то я просчитался |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane-old"
pr="101"
echo "=== latest commits on PR ==="
gh pr view "$pr" --repo "$repo" --json commits --jq '.commits[-10:] | .[] | [.oid[0:8], .messageHeadline] | `@tsv`'
echo "=== PR checks ==="
gh pr checks "$pr" --repo "$repo" || true
echo "=== latest failed run ==="
run="$(
gh run list --repo "$repo" --limit 30 \
--json databaseId,event,headBranch,status,conclusion,createdAt \
| jq -r '
[.[] | select(.event == "pull_request" and .conclusion == "failure")]
| sort_by(.createdAt) | last | .databaseId // empty
'
)"
echo "run=$run"
if [ -n "$run" ]; then
gh run view "$run" --repo "$repo" --log-failed > /tmp/failed_log.txt 2>&1 || true
wc -l /tmp/failed_log.txt
grep -n -iE "Failed |Error Message|Assert\.|Exception|does not exist|threw an exception" /tmp/failed_log.txt | head -200
fiLength of output: 2763 🏁 Script executed: #!/bin/bash
set -euo pipefail
cat -n /tmp/failed_log.txtLength of output: 18099 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== search for ItemSlots component default spawn definitions with startingItem across recently touched dirs ==="
rg -n "startingItem:" Resources/Prototypes/_Arcane Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Medical Resources/Prototypes/Entities/Objects/Specific/Medical Resources/Prototypes/Entities/Structures/Machines Resources/Prototypes/_Goobstation/Entities/Structures/Machines 2>/dev/null
echo "=== search for EntityTableContainerFillComponent / StorageFill referencing gas tanks / medkits recursively ==="
rg -n "MedkitEmergencyFilled|MedkitCombatStandardFilled|MedkitCombatAdvancedFilled|EmergencyNitriumTankFilled|EmergencyHealiumTankFilled" Resources/Prototypes -g '*.yml'
echo "=== full firstaidkits.yml _Arcane content ==="
cat -n Resources/Prototypes/_Arcane/Catalog/Fills/Items/firstaidkits.yml
echo "=== full gas_tanks.yml _Arcane fills content ==="
cat -n Resources/Prototypes/_Arcane/Catalog/Fills/Items/gas_tanks.ymlLength of output: 1411 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== search for ItemSlots component default spawn definitions with startingItem across recently touched dirs ==="
rg -n "startingItem:" Resources/Prototypes/_Arcane Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Medical Resources/Prototypes/Entities/Objects/Specific/Medical Resources/Prototypes/Entities/Structures/Machines Resources/Prototypes/_Goobstation/Entities/Structures/Machines 2>/dev/null || echo "none"
echo "=== search for EntityTableContainerFillComponent / StorageFill referencing gas tanks / medkits recursively ==="
rg -n "MedkitEmergencyFilled|MedkitCombatStandardFilled|MedkitCombatAdvancedFilled|EmergencyNitriumTankFilled|EmergencyHealiumTankFilled" Resources/Prototypes -g '*.yml' || echo "none"
echo "=== full firstaidkits.yml _Arcane content ==="
cat -n Resources/Prototypes/_Arcane/Catalog/Fills/Items/firstaidkits.yml || echo "missing"
echo "=== full gas_tanks.yml _Arcane fills content ==="
cat -n Resources/Prototypes/_Arcane/Catalog/Fills/Items/gas_tanks.yml || echo "missing"
echo "=== duffelbag.yml relevant section ==="
rg -n "ClothingBackpackDuffelSyndicateMedicalBundleFilled" -A30 Resources/Prototypes/Catalog/Fills/Backpacks/duffelbag.yml || echo "none"
echo "=== misc.yml FillLockerEmergencyStandard ==="
rg -n "FillLockerEmergencyStandard" -A20 Resources/Prototypes/Catalog/Fills/Lockers/misc.yml || echo "none"Length of output: 9073 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== search startingItem repo-wide referencing our new/changed entities ==="
rg -n "startingItem:\s*(MedkitEmergencyFilled|MedkitCombatStandardFilled|MedkitCombatAdvancedFilled|EmergencyNitriumTankFilled|EmergencyHealiumTankFilled|EmergencyNitriumTank|EmergencyHealiumTank|AdvancedEmergencyMedipen|SalbutamolAutoInjector|StimulatorAutoInjector|Suture|RegenerativeMesh|AdvancedRegenerativeMesh|XLargeBeaker|MetamaterialBeaker)" Resources/Prototypes -g '*.yml' || echo none
echo "=== search ItemSlots with entityTable / NestedSelector fills that spawn into item slots ==="
rg -n "type: ItemSlots" -A15 Resources/Prototypes/Entities/Structures/Machines/chem_master.yml Resources/Prototypes/_Goobstation/Entities/Structures/Machines/dispensers.yml 2>/dev/null
echo "=== search for EntityTableContainerFill component pointing to gas tank belt slot or medkit itemslot chain ==="
rg -n "type: EntityTableContainerFill" -A10 Resources/Prototypes/Entities/Structures/Storage/Closets/*.yml 2>/dev/null | head -100
echo "=== check ClosetEmergency def ==="
rg -n "id: ClosetEmergency\b" -A20 Resources/Prototypes/Entities/Structures/Storage/Closets/*.yml 2>/dev/nullLength of output: 5315 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== all startingItem occurrences repo-wide ==="
rg -n "startingItem:" Resources/Prototypes -g '*.yml' | head -80
echo "=== check chem_master.yml full content for portable machine + startingItem/EntityTableContainerFill ==="
rg -n "EntityTableContainerFill|startingItem" Resources/Prototypes/Entities/Structures/Machines/chem_master.yml Resources/Prototypes/_Goobstation/Entities/Objects/Specific/Medical/portable_chem_master.yml 2>/dev/null
echo "=== check EnergyChemDispenser ItemSlots / startingItem for beaker slot ==="
rg -n "type: ItemSlots" -A20 Resources/Prototypes/_Goobstation/Entities/Structures/Machines/dispensers.yml 2>/dev/nullLength of output: 10721 🏁 Script executed: #!/bin/bash
set -uo pipefail
echo "=== _Arcane crates medical.yml ==="
cat -n Resources/Prototypes/_Arcane/Catalog/Fills/Crates/medical.yml 2>/dev/null || echo missing
echo "=== _Arcane cargo_medical.yml ==="
cat -n Resources/Prototypes/_Arcane/Catalog/Cargo/cargo_medical.yml 2>/dev/null || echo missing
echo "=== search all entityTable definitions with self-referencing tableId or nested chains among _Arcane files ==="
rg -n "type: entityTable" -A15 Resources/Prototypes/_Arcane -g '*.yml' 2>/dev/null
echo "=== search EntityTableContainerFill anywhere in _Arcane ==="
rg -n "EntityTableContainerFill" -A10 Resources/Prototypes/_Arcane -g '*.yml' 2>/dev/null
echo "=== does MedkitCombatStandard/Advanced base entity (non-filled) have EntityTableContainerFill or ItemSlots? ==="
cat -n Resources/Prototypes/_Arcane/Entities/Objects/Specific/Medical/medkits.ymlLength of output: 4233 🏁 Script executed: #!/bin/bash
set -uo pipefail
fd -a "ItemSlotsSystem.cs" 2>/dev/null
find / -iname "ItemSlotsSystem.cs" 2>/dev/null | head -5Length of output: 697 🏁 Script executed: #!/bin/bash
set -uo pipefail
rg -n "OnMapInit" -B3 -A30 Content.Shared/Containers/ItemSlot/ItemSlotsSystem.csLength of output: 3108 🏁 Script executed: #!/bin/bash
set -uo pipefail
fd -a "AllEntitiesTest\.cs|SpawnEntitiesTest" 2>/dev/null
rg -rln "SpawnAndDeleteAllEntitiesInTheSameSpot" Content.IntegrationTestsLength of output: 375 🏁 Script executed: #!/bin/bash
set -uo pipefail
rg -n "SpawnAndDeleteAllEntitiesInTheSameSpot" Content.IntegrationTests -g '*.cs' || echo none
echo "---"
fd -a "EntityTest.cs"
sed -n '1,220p' Content.IntegrationTests/Tests/EntityTest.csLength of output: 13008 🏁 Script executed: #!/bin/bash
set -uo pipefail
sed -n '218,280p' Content.IntegrationTests/Tests/EntityTest.csLength of output: 3187 🏁 Script executed: #!/bin/bash
set -uo pipefail
python3 - <<'PY'
import re, pathlib, sys, json
from collections import defaultdict
root = pathlib.Path("Resources/Prototypes")
paths = list(root.rglob("*.yml"))
entity_table_fill = {} # entity_id -> tableId (from EntityTableContainerFill)
table_children = defaultdict(list) # tableId -> list of ('entity', id) or ('table', id)
cur_type = None
cur_id = None
cur_indent_entity = None
in_etcf = False
in_table_children = False
table_id_stack = []
def parse_file(path):
text = path.read_text(encoding="utf-8", errors="ignore").splitlines()
i = 0
n = len(text)
cur_type = None
cur_id = None
while i < n:
line = text[i]
m = re.match(r'^- type:\s*(\S+)\s*$', line)
if m:
cur_type = m.group(1)
cur_id = None
# look ahead a few lines for id:
j = i+1
while j < n and not re.match(r'^-\s*type:', text[j]):
idm = re.match(r'^\s*id:\s*(\S+)\s*$', text[j])
if idm:
cur_id = idm.group(1)
break
j += 1
# EntityTableContainerFill within an entity block
if cur_type == 'entity' and cur_id:
m2 = re.match(r'^\s*- type: EntityTableContainerFill\s*$', line)
if m2:
# scan forward for tableId: under containers: <name>: !type:... \n tableId: X
j = i+1
while j < n and not re.match(r'^-\s*type:', text[j]) and not re.match(r'^\s*- type: \w', text[j]):
tidm = re.match(r'^\s*tableId:\s*(\S+)\s*$', text[j])
if tidm:
entity_table_fill[cur_id] = tidm.group(1)
break
j += 1
# entityTable definitions: capture all "id:" lines within table (as entity refs) at any nesting
if cur_type == 'entityTable' and cur_id:
m3 = re.match(r'^\s*-?\s*id:\s*(\S+)\s*$', line)
if m3:
table_children[cur_id].append(m3.group(1))
m4 = re.match(r'^\s*tableId:\s*(\S+)\s*$', line)
if m4:
table_children[cur_id].append("`@TABLE`:"+m4.group(1))
i += 1
for p in paths:
try:
parse_file(p)
except Exception as e:
pass
print("entity_table_fill entries:", len(entity_table_fill))
print("table_children tables:", len(table_children))
# Build cycle detection: entity -> table -> entities (recursively) -> possibly back to entity
def resolve_table(tid, seen_tables=None):
if seen_tables is None:
seen_tables = set()
if tid in seen_tables:
return set()
seen_tables.add(tid)
result = set()
for child in table_children.get(tid, []):
if child.startswith("`@TABLE`:"):
sub = child[7:]
result |= resolve_table(sub, seen_tables)
else:
result.add(child)
return result
cycles = []
for ent, tid in entity_table_fill.items():
reachable_entities = resolve_table(tid)
if ent in reachable_entities:
cycles.append((ent, tid))
print("DIRECT/INDIRECT CYCLES (entity fills a table that eventually contains itself):")
for c in cycles:
print(c)
PYLength of output: 3691 🏁 Script executed: #!/bin/bash
set -uo pipefail
repo="ArcaneSS14/arcane-old"
echo "=== commit 19 OPTIMIZATIONS FOR SYSTEMS diff stat ==="
git show --stat 9fee338e | head -60
echo "=== files changed ==="
git show --name-only 9fee338e | tail -40Length of output: 1110 🏁 Script executed: #!/bin/bash
set -uo pipefail
git show 9fee338e -- Content.Server/Chemistry/EntitySystems/ChemMasterSystem.cs Content.Server/_Orion/Chemistry/EntitySystems/ChemMasterBeakerCapacitySystem.csLength of output: 2931 🏁 Script executed: #!/bin/bash
set -uo pipefail
fd -a "ContainerFillSystem.cs"
rg -n "OnTableMapInit|MaxDepth|depth|Recursion|Cycle" -B3 -A40 Content.Shared/Containers/ContainerFillSystem.cs 2>/dev/null | head -150Length of output: 3841
КоммитыПоследние 10: Тест —
|
|
@coderabbitai Данный провал пошёл после коммита bso locker update, хотя возможно был допущен и в прошлых 6 коммитах. Понять бы в чём дело да исправить |
|
Tip For best results, initiate chat on the files or code changes. 🧩 Analysis chain🏁 Script executed: #!/bin/bash
set -euo pipefail
repo="ArcaneSS14/arcane-old"
echo "=== show commit bso locker update ==="
git show --stat e10f58ee83e997fe841dec5094824f7ef3e2ccbd | head -60
echo "=== full diff of that commit ==="
git show e10f58ee83e997fe841dec5094824f7ef3e2ccbd
echo "=== check delay field type in surgery step / doAfter or wherever used ==="
rg -n "delay:" Resources/Prototypes/Entities/Objects/Specific/Medical/healing.ymlLength of output: 1788 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== LockerBlueshieldOfficerFilled definition ==="
rg -rn "id: LockerBlueshieldOfficerFilled\b" Resources/Prototypes -g '*.yml'
rg -n "LockerBlueshieldOfficerFilled" -B5 -A25 Resources/Prototypes/_Goobstation/Entities/Structures/Storage/Closets/*.yml 2>/dev/null
echo "=== find entity definition of LockerBlueshieldOfficerFilled and its parent chain ==="
rg -rn "id: LockerBlueshieldOfficer\b" -A30 Resources/Prototypes -g '*.yml'
echo "=== full heads.yml context around the edit ==="
sed -n '1,80p' Resources/Prototypes/_Goobstation/Catalog/Fills/Lockers/heads.yml
echo "=== what locker uses this fill (the one with children list containing LockerBlueshieldOfficerFilled) ==="
rg -n "type: entity" -B2 -A5 Resources/Prototypes/_Goobstation/Catalog/Fills/Lockers/heads.yml | head -80Length of output: 1352 🏁 Script executed: #!/bin/bash
set -euo pipefail
echo "=== search LockerBlueshieldOfficerFilled (plain) ==="
grep -rn "LockerBlueshieldOfficerFilled" Resources/Prototypes --include="*.yml"
echo "=== search LockerBlueshieldOfficer entity def (not Filled) ==="
grep -rn "id: LockerBlueshieldOfficer$" Resources/Prototypes --include="*.yml"
echo "=== find file defining LockerBlueshieldOfficerFilled entity/fill, print context ==="
for f in $(grep -rl "LockerBlueshieldOfficerFilled" Resources/Prototypes --include="*.yml"); do
echo "--- $f ---"
grep -n "LockerBlueshieldOfficerFilled" -B5 -A20 "$f"
doneLength of output: 3807
Причина — коммит
|
|
Хахахахах. Ебать. Как это возможно |
Описание PR
Всё ближе и ближе к TG13.
На Орионе не успел - продолжаем тут.
Медиа
Coming Soon
Чек-лист
Тип PR
Изменения
🆑
add: Добавлено веселье.
remove: Убрано веселье.
tweak: Изменено веселье.
fix: Исправлено веселье.
ChemMaster
Тара для растворов (кувшины, мензурки)
Аптечки
Новые химикаты-предметы
Регенеративные материалы
Баланс химикатов (реагент: тип урона/лечения: было → стало)
Яды
Рецепты
Раздатчик химикатов
Давление, удушье, урон по телу
Криокапсулы
Хирургия и осмотр
Спрайты
Звуки
Аранесп и дофамин
Новые химикаты (эффект)
Для разработчиков
ChemMasterWindow.xaml.cs: форматирование объёма буфера вынесено в хелпер — только читаемость, поведения не меняет.ChangeConstructionNodeBehavior: при переходе ноды вmachineFrameзаранее поднимаетсяMachineDeconstructedEvent— фиксит порядок событий при разборке машин.EnergyReagentDispenserSystem: возврат энергии при очистке контейнера для неизвестного реагента больше не улетает вfloat.MaxValue, теперь честный0.TryAllReactionsTest.cs: порядокTryAddReagent/SetTemperature/UpdateChemicalsпереписан на единый проход — раньше промежуточные вызовы могли триггерить не ту реакцию раньше времени.