Adição para Exploradores#848
Conversation
|
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
|
RSI Diff Bot; head commit a444e41 merging into 086c99c Resources/Textures/_Starlight/Structures/Machines/desktop_computers.rsi
|
WalkthroughO PR adiciona uma missão de desarme com UI cliente, validação de códigos e consoles interativos, além da dungeon Factory, novos mobs de carne com divisão após a morte e respectivas configurações, mapas, protótipos e localizações. ChangesSalvage: desarme, Factory e novos mobs
Estimated code review effort: 5 (Critical) | ~120 minutes Sequence Diagram(s)sequenceDiagram
participant Player
participant SalvageMissionDisarmWindow
participant SalvageMissionDisarmBUI
participant SalvageMissionDisarmConsoleSystem
participant SalvageMissionDisarm
Player->>SalvageMissionDisarmWindow: insere e envia o código
SalvageMissionDisarmWindow->>SalvageMissionDisarmBUI: SubmitCodeCallback(code)
SalvageMissionDisarmBUI->>SalvageMissionDisarmConsoleSystem: envia a mensagem de UI
SalvageMissionDisarmConsoleSystem->>SalvageMissionDisarmConsoleSystem: valida e desarma o console
SalvageMissionDisarm->>SalvageMissionDisarmConsoleSystem: configura console e código durante a criação do mapa
Suggested reviewers: 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (3 passed)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 13
🧹 Nitpick comments (3)
Resources/Locale/pt-BR/_FarHorizons/salvage/misc/dungeon_mob_borg.ftl (1)
5-5: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueMelhore a tradução do erro de programação.
Na área de desenvolvimento e programação, o termo correto e natural em português para a ação de "throw an exception" é "lançou uma exceção" ou "gerou uma exceção", e não "realizou".
📝 Sugestão de correção
-lines-borg-dungeon-5 = Erro 597: Scream() realizou uma exceção inesperada: módulo vocalizador é nulo. +lines-borg-dungeon-5 = Erro 597: Scream() lançou uma exceção inesperada: módulo vocalizador é nulo.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Locale/pt-BR/_FarHorizons/salvage/misc/dungeon_mob_borg.ftl` at line 5, Atualize a tradução de lines-borg-dungeon-5 para substituir “realizou uma exceção” por uma formulação natural de programação em português, como “lançou uma exceção” ou “gerou uma exceção”, mantendo o restante da mensagem inalterado.Resources/Prototypes/_FarHorizons/Procedural/dungeon_configs.yml (1)
78-86: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueConsidere renomear os presets genéricos.
O uso de presets como
ReactorBoxpara a dungeonFactoryfunciona do ponto de vista funcional, mas sugere que os layouts são específicos doReactor. Considere renomear esses protótipos para nomes mais genéricos (ex:DungeonBox) caso eles passem a ser compartilhados por múltiplas dungeons.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Resources/Prototypes/_FarHorizons/Procedural/dungeon_configs.yml` around lines 78 - 86, Renomeie os presets genéricos ReactorBox, ReactorLong, ReactorStar e ReactorDouble usados em PrefabDunGen para nomes neutros, como DungeonBox, DungeonLong, DungeonStar e DungeonDouble, e atualize todas as referências correspondentes nos protótipos para preservar o comportamento atual.Content.Shared/_FarHorizons/Salvage/SalvageMissionDisarmConsoleSystem.cs (1)
31-38: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick winValide o estado antes de processar o código.
É recomendável verificar se o console está ativado e armado antes de processar mensagens da interface, prevenindo que clientes maliciosos ou com lag enviem solicitações repetidas para um console já desarmado (o que acionaria o som de sucesso múltiplas vezes e executaria a lógica de fechamento novamente).
🛡️ Melhoria proposta
private void OnSubmitCode(Entity<SalvageMissionDisarmConsoleComponent> ent, ref SalvageMissionDisarmSubmitCodeMessage args) { + if (!ent.Comp.Enabled || !ent.Comp.Armed) + return; + if (args.Code != ent.Comp.Code) { _audio.PlayPvs(ent.Comp.FailSound, ent.Owner);🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@Content.Shared/_FarHorizons/Salvage/SalvageMissionDisarmConsoleSystem.cs` around lines 31 - 38, Atualize OnSubmitCode para validar, antes de comparar args.Code ou executar qualquer lógica, que o console ainda está ativado e armado. Retorne imediatamente quando o estado não permitir processamento, preservando o fluxo atual apenas para consoles válidos e evitando sons ou fechamento repetidos.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@Content.Client/_FarHorizons/Salvage/SalvageMissionDisarmWindow.xaml.cs`:
- Around line 24-25: Atualize o predicado de validação de Input para aceitar
strings vazias e continuar validando valores não vazios como inteiros,
permitindo que o jogador apague completamente o conteúdo do campo.
In `@Content.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.cs`:
- Line 111: Atualize o fluxo de definição do conteúdo em SalvageMissionDisarm
para formatar code como string com zeros à esquerda antes de passá-lo à
localização salvage-mission-objective-disarm-paper, preservando o comprimento
fixo definido por CodeLength.
- Around line 80-88: Substitua o loop baseado em mapTransform.ChildEnumerator no
método que coleta os consoles por um
EntityQueryEnumerator<SalvageMissionDisarmConsoleComponent,
TransformComponent>(), filtrando cada entidade por TransformComponent.MapUid ==
Map. Adicione apenas os consoles que atendem a esse filtro, preservando a coleta
do UID e do componente SalvageMissionDisarmConsoleComponent.
In `@Content.Shared/_FarHorizons/Mobs/MobSplittingComponent.cs`:
- Line 15: Inicialize o campo SplitInto da classe MobSplittingComponent com um
dicionário vazio padrão, preservando a obrigatoriedade durante a desserialização
e evitando que o SharedMobSplittingSystem encontre um valor nulo quando o
componente for criado programaticamente.
In `@Content.Shared/_FarHorizons/Mobs/SharedMobSplittingSystem.cs`:
- Line 34: Atualize a chamada a _audio.PlayPredicted em SharedMobSplittingSystem
para usar args.Origin como o parâmetro user, mantendo ent.Owner como a
entidade-alvo e preservando os demais argumentos.
- Around line 47-49: Atualize o cálculo de throwTarget no
SharedMobSplittingSystem para multiplicar a direção aleatória por uma distância
aleatória limitada por ThrowRadius. Ao chamar _throw.TryThrow para
spawned.Value, habilite também o parâmetro opcional compensateFriction,
preservando o espalhamento dentro do raio configurado.
In
`@Content.Shared/_FarHorizons/Salvage/Components/SalvageMissionDisarmConsoleComponent.cs`:
- Around line 10-15: Mark SalvageMissionDisarmConsoleComponent as a networked
component with auto-generated component state, and mark only Enabled and Armed
with auto-generated networked-field attributes so their values synchronize to
clients. Leave Code unnetworked to prevent the disarm password from being
replicated.
In `@Content.Shared/_FarHorizons/Salvage/SalvageMissionDisarmConsoleSystem.cs`:
- Around line 45-57: Atualize SetupConsole para configurar Enabled, Armed e Code
após validar apenas o componente SalvageMissionDisarmConsoleComponent, sem
retornar antecipadamente pela ausência de AppearanceComponent. Atualize os dados
visuais somente quando AppearanceComponent estiver disponível e chame Dirty()
para notificar os clientes sobre o novo estado do componente.
- Around line 39-43: Após definir ent.Comp.Armed como false no fluxo de desarme
do console, chame Dirty() no componente correspondente para replicar a alteração
aos clientes. Preserve as atualizações existentes de aparência, áudio e UI.
In `@Resources/Locale/pt-BR/procedural/mission_salvages.ftl`:
- Around line 32-34: Adicione a chave de tradução pt-BR
`salvage-mission-objective-disarm-paper` no arquivo de traduções de salvamento,
correspondendo à entrada existente em inglês para o papel com os códigos de
desarme.
In `@Resources/Maps/_FarHorizons/Dungeon/Factory/factory_side_rooms.yml`:
- Around line 625-634: Remova uma entidade de cada par sobreposto em
factory_side_rooms.yml: exclua um dos UIDs 1021/1022 associados a
CableApcExtension em (17.5,27.5) e um dos UIDs 217/218 associados a TableGlass
em (6.5,22.5), preservando apenas uma entidade de cada par.
In `@Resources/Prototypes/_FarHorizons/Procedural/dungeon_configs.yml`:
- Around line 145-151: Na tabela de entidades AirlockMaint, substitua a entrada
filha AirlockExternal por AirlockMaint para que o acesso interno use o protótipo
de manutenção correto, preservando o restante da configuração.
- Around line 131-135: Corrija os valores de SouthWest, SouthEast, NorthWest e
NorthEast em pocketDecals para usar IDs de protótipos de decal existentes no
repositório, substituindo as quatro referências thincorner* inválidas e
preservando o mapeamento direcional.
---
Nitpick comments:
In `@Content.Shared/_FarHorizons/Salvage/SalvageMissionDisarmConsoleSystem.cs`:
- Around line 31-38: Atualize OnSubmitCode para validar, antes de comparar
args.Code ou executar qualquer lógica, que o console ainda está ativado e
armado. Retorne imediatamente quando o estado não permitir processamento,
preservando o fluxo atual apenas para consoles válidos e evitando sons ou
fechamento repetidos.
In `@Resources/Locale/pt-BR/_FarHorizons/salvage/misc/dungeon_mob_borg.ftl`:
- Line 5: Atualize a tradução de lines-borg-dungeon-5 para substituir “realizou
uma exceção” por uma formulação natural de programação em português, como
“lançou uma exceção” ou “gerou uma exceção”, mantendo o restante da mensagem
inalterado.
In `@Resources/Prototypes/_FarHorizons/Procedural/dungeon_configs.yml`:
- Around line 78-86: Renomeie os presets genéricos ReactorBox, ReactorLong,
ReactorStar e ReactorDouble usados em PrefabDunGen para nomes neutros, como
DungeonBox, DungeonLong, DungeonStar e DungeonDouble, e atualize todas as
referências correspondentes nos protótipos para preservar o comportamento atual.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: 42165d52-3bef-4f91-aec7-cb5170eccad0
⛔ Files ignored due to path filters (3)
Resources/Textures/_Starlight/Structures/Machines/desktop_computers.rsi/computer.pngis excluded by!**/*.pngResources/Textures/_Starlight/Structures/Machines/desktop_computers.rsi/explosive.pngis excluded by!**/*.pngResources/Textures/_Starlight/Structures/Machines/desktop_computers.rsi/generic.pngis excluded by!**/*.png
📒 Files selected for processing (29)
Content.Client/_FarHorizons/Salvage/SalvageMissionDisarmBUI.csContent.Client/_FarHorizons/Salvage/SalvageMissionDisarmWindow.xamlContent.Client/_FarHorizons/Salvage/SalvageMissionDisarmWindow.xaml.csContent.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.csContent.Shared/_FarHorizons/Mobs/MobSplittingComponent.csContent.Shared/_FarHorizons/Mobs/SharedMobSplittingSystem.csContent.Shared/_FarHorizons/Salvage/Components/SalvageMissionDisarmConsoleComponent.csContent.Shared/_FarHorizons/Salvage/SalvageMissionDisarmConsoleSystem.csResources/Locale/en-US/_FarHorizons/procedural/expeditions.ftlResources/Locale/en-US/_FarHorizons/salvage/dungeon_mob.ftlResources/Locale/en-US/_FarHorizons/salvage/dungeon_mob_borg.ftlResources/Locale/en-US/_FarHorizons/salvage/mission_objectives.ftlResources/Locale/en-US/_FarHorizons/salvage/mission_targets.ftlResources/Locale/pt-BR/_FarHorizons/salvage/misc/dungeon_mob_borg.ftlResources/Locale/pt-BR/procedural/mission_salvages.ftlResources/Maps/_FarHorizons/Dungeon/Factory/factory_main_rooms.ymlResources/Maps/_FarHorizons/Dungeon/Factory/factory_side_rooms.ymlResources/Prototypes/Procedural/dungeon_configs.ymlResources/Prototypes/_FarHorizons/Entities/Mobs/NPCs/dungeon_meat.ymlResources/Prototypes/_FarHorizons/Procedural/Factory/rooms_main.ymlResources/Prototypes/_FarHorizons/Procedural/Factory/rooms_side.ymlResources/Prototypes/_FarHorizons/Procedural/dungeon_configs.ymlResources/Prototypes/_FarHorizons/Procedural/salvage_factions.ymlResources/Prototypes/_FarHorizons/Procedural/salvage_mods.ymlResources/Prototypes/_FarHorizons/Salvage/mission_objective_targets.ymlResources/Prototypes/_FarHorizons/Salvage/mission_objectives.ymlResources/Prototypes/_FarHorizons/Salvage/objective_handlers.ymlResources/Prototypes/_FarHorizons/tags.ymlResources/Textures/_Starlight/Structures/Machines/desktop_computers.rsi/meta.json
💤 Files with no reviewable changes (1)
- Resources/Locale/en-US/_FarHorizons/salvage/dungeon_mob_borg.ftl
| var enumerator = mapTransform.ChildEnumerator; | ||
|
|
||
| while (enumerator.MoveNext(out var uid)) | ||
| { | ||
| if (!EntMan.TryGetComponent<SalvageMissionDisarmConsoleComponent>(uid, out var console)) | ||
| continue; | ||
|
|
||
| consoles.Add((uid, console)); | ||
| } |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
ast-grep run --pattern 'EntMan.EntityQueryEnumerator<$_,$_>()'Repository: Project-Dumont/Dumont-Station
Length of output: 167
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Localizar a missão e referências aos consoles/objetivos relacionados
rg -n "SalvageMissionDisarm|SalvageMissionDisarmConsoleComponent|DisarmConsole|salvage.*disarm" Content.Server Content.Shared Content.Client Resources -g '!**/bin/**' -g '!**/obj/**' || trueRepository: Project-Dumont/Dumont-Station
Length of output: 7637
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspecionar o arquivo citado no comentário e arquivos de protótipos próximos, sem executar código do repositório
file="Content.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.cs"
wc -l "$file"
sed -n '1,220p' "$file"
# Procurar definições de protótipos/entidades que indiquem a hierarquia usada pelo objetivo
rg -n "SalvageMissionDisarmConsoleComponent|ChildEnumerator|MapUid == Map|EntityQueryEnumerator<.*TransformComponent>|Salvage" Content.Server Content.Shared Resources -g '!**/bin/**' -g '!**/obj/**' || trueRepository: Project-Dumont/Dumont-Station
Length of output: 50386
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Verificar se outros objetivos usam enumeração por mapa ou por filhos em arquivos correlatos
rg -n "ChildEnumerator|EntityQueryEnumerator<.*TransformComponent>|MapUid == Map" Content.Server/_FarHorizons Content.Server -g '!**/bin/**' -g '!**/obj/**' || trueRepository: Project-Dumont/Dumont-Station
Length of output: 18924
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Ler exatamente o handler e o protótipo do alvo de desarme para entender onde o console é parentado
sed -n '1,180p' Content.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.cs
printf '\n--- mission_objective_targets.yml ---\n'
sed -n '110,165p' Resources/Prototypes/_FarHorizons/Salvage/mission_objective_targets.yml
printf '\n--- SalvageMissionObjectiveHandler.cs ---\n'
sed -n '160,255p' Content.Server/_FarHorizons/Salvage/SalvageMissionObjectiveHandler.csRepository: Project-Dumont/Dumont-Station
Length of output: 9526
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Procurar o uso do tipo de protótipo ComputerSalvageMissionObjective para ver se o console fica em grid/map
rg -n "ComputerSalvageMissionObjective|SalvageMissionDisarmConsole|proto: .*SalvageMissionObjective" Resources/Maps/_FarHorizons Resources/Prototypes/_FarHorizons -g '!**/bin/**' -g '!**/obj/**' || trueRepository: Project-Dumont/Dumont-Station
Length of output: 1030
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Ler os trechos relevantes do arquivo e do protótipo sem gerar saída excessiva
file="Content.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.cs"
proto="Resources/Prototypes/_FarHorizons/Salvage/mission_objective_targets.yml"
nl -ba "$file" | sed -n '1,160p'
printf '\n--- %s ---\n' "$proto"
nl -ba "$proto" | sed -n '118,155p'Repository: Project-Dumont/Dumont-Station
Length of output: 207
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspecionar a colocação do alvo na mapfile para ver se fica como filho de grid
mapfile="Resources/Maps/_FarHorizons/Dungeon/Factory/factory_side_rooms.yml"
nl -ba "$mapfile" | sed -n '4385,4415p'Repository: Project-Dumont/Dumont-Station
Length of output: 207
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Ler os trechos exatos para fechar a análise
nl -ba Content.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.cs | sed -n '70,95p'
printf '\n---\n'
nl -ba Resources/Maps/_FarHorizons/Dungeon/Factory/factory_side_rooms.yml | sed -n '4388,4410p'Repository: Project-Dumont/Dumont-Station
Length of output: 207
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Ver o trecho da mapfile onde o objetivo é colocado e a hierarquia em volta
sed -n '4388,4412p' Resources/Maps/_FarHorizons/Dungeon/Factory/factory_side_rooms.yml
# Ver também se existe alguma ancoragem explícita/parent no alvo
sed -n '111,155p' Resources/Prototypes/_FarHorizons/Salvage/mission_objective_targets.ymlRepository: Project-Dumont/Dumont-Station
Length of output: 1757
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Ler a função que coleta entidades marcadas para entender se ela depende da mesma suposição de hierarquia
sed -n '220,320p' Content.Server/_FarHorizons/Salvage/SalvageMissionObjectiveHandler.csRepository: Project-Dumont/Dumont-Station
Length of output: 3124
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Checar se o console de desarme é um item/máquina ancorada que tende a ser filho do grid
sed -n '1,220p' Content.Shared/_FarHorizons/Salvage/Components/SalvageMissionDisarmConsoleComponent.csRepository: Project-Dumont/Dumont-Station
Length of output: 1165
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Procurar padrões de spawning/parenting semelhantes usados para objetivos que ficam em grids
rg -n "SpawnAtPosition\\(|ChildEnumerator|GridUid ==|MapUid == Map" Content.Server/_FarHorizons/Salvage Content.Server/_FarHorizons -g '!**/bin/**' -g '!**/obj/**' || trueRepository: Project-Dumont/Dumont-Station
Length of output: 3480
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Ler contexto imediatamente antes/depois do protótipo para inferir o pai 1
sed -n '4368,4420p' Resources/Maps/_FarHorizons/Dungeon/Factory/factory_side_rooms.ymlRepository: Project-Dumont/Dumont-Station
Length of output: 1195
ChildEnumerator do mapa não alcança consoles em grids Como ComputerSalvageMissionObjective é BaseMachine e os objetos do mapa aparecem com parent: 1, esses consoles podem ficar no grid e nunca ser encontrados por esse loop. Use uma EntityQueryEnumerator<SalvageMissionDisarmConsoleComponent, TransformComponent>() filtrando por MapUid == Map.
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Content.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.cs`
around lines 80 - 88, Substitua o loop baseado em mapTransform.ChildEnumerator
no método que coleta os consoles por um
EntityQueryEnumerator<SalvageMissionDisarmConsoleComponent,
TransformComponent>(), filtrando cada entidade por TransformComponent.MapUid ==
Map. Adicione apenas os consoles que atendem a esse filtro, preservando a coleta
do UID e do componente SalvageMissionDisarmConsoleComponent.
|
|
||
| var code = GenerateCode(); | ||
|
|
||
| paper.SetContent(spawnedPaper, Loc.GetString("salvage-mission-objective-disarm-paper", ("code", code))); |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win
Formate o código com zeros à esquerda no papel.
Como o código é gerado e armazenado como um inteiro (int), números com zeros à esquerda perderão a formatação (ex: um código gerado como 007 será exibido como 7). Para manter o comprimento fixo definido por CodeLength na exibição, converta-o para string aplicando o preenchimento (padding) adequado antes de enviar para a localização.
💡 Correção proposta
- paper.SetContent(spawnedPaper, Loc.GetString("salvage-mission-objective-disarm-paper", ("code", code)));
+ paper.SetContent(spawnedPaper, Loc.GetString("salvage-mission-objective-disarm-paper", ("code", code.ToString($"D{CodeLength}"))));📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| paper.SetContent(spawnedPaper, Loc.GetString("salvage-mission-objective-disarm-paper", ("code", code))); | |
| paper.SetContent(spawnedPaper, Loc.GetString("salvage-mission-objective-disarm-paper", ("code", code.ToString($"D{CodeLength}")))); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Content.Server/_FarHorizons/Salvage/Objectives/SalvageMissionDisarm.cs` at
line 111, Atualize o fluxo de definição do conteúdo em SalvageMissionDisarm para
formatar code como string com zeros à esquerda antes de passá-lo à localização
salvage-mission-objective-disarm-paper, preservando o comprimento fixo definido
por CodeLength.
| [RegisterComponent, NetworkedComponent] | ||
| public sealed partial class MobSplittingComponent : Component | ||
| { | ||
| [DataField(required: true)] public Dictionary<EntProtoId, MobSplittingConfig> SplitInto; |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win
Inicialize o dicionário para evitar NRE.
Embora o campo seja exigido (required: true) durante a desserialização dos protótipos, adicionar este componente programaticamente em tempo de execução deixará o dicionário nulo, o que causará uma NullReferenceException no loop do SharedMobSplittingSystem.
🛡️ Sugestão de correção
- [DataField(required: true)] public Dictionary<EntProtoId, MobSplittingConfig> SplitInto;
+ [DataField(required: true)] public Dictionary<EntProtoId, MobSplittingConfig> SplitInto = new();📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| [DataField(required: true)] public Dictionary<EntProtoId, MobSplittingConfig> SplitInto; | |
| [DataField(required: true)] public Dictionary<EntProtoId, MobSplittingConfig> SplitInto = new(); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Content.Shared/_FarHorizons/Mobs/MobSplittingComponent.cs` at line 15,
Inicialize o campo SplitInto da classe MobSplittingComponent com um dicionário
vazio padrão, preservando a obrigatoriedade durante a desserialização e evitando
que o SharedMobSplittingSystem encontre um valor nulo quando o componente for
criado programaticamente.
| TerminatingOrDeleted(ent)) | ||
| return; | ||
|
|
||
| _audio.PlayPredicted(ent.Comp.Sound, ent.Owner, ent.Owner); |
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | ⚡ Quick win
Corrija o parâmetro user para evitar áudio duplicado.
Ao usar ent.Owner (um NPC) como o parâmetro user no PlayPredicted, o servidor não conseguirá excluir a reprodução duplicada para o cliente que efetivamente causou a ação. Com base nos trechos de código relevantes, o evento fornece args.Origin, que representa a entidade responsável pela mudança de estado (o atacante) e é a escolha correta para a predição.
🐛 Sugestão de correção
- _audio.PlayPredicted(ent.Comp.Sound, ent.Owner, ent.Owner);
+ _audio.PlayPredicted(ent.Comp.Sound, ent.Owner, args.Origin);📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| _audio.PlayPredicted(ent.Comp.Sound, ent.Owner, ent.Owner); | |
| _audio.PlayPredicted(ent.Comp.Sound, ent.Owner, args.Origin); |
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
In `@Content.Shared/_FarHorizons/Mobs/SharedMobSplittingSystem.cs` at line 34,
Atualize a chamada a _audio.PlayPredicted em SharedMobSplittingSystem para usar
args.Origin como o parâmetro user, mantendo ent.Owner como a entidade-alvo e
preservando os demais argumentos.



Sobre a PR
Nova dungeon e inimigo para os exploradores
Por quê? / Balanceamento
Conteúdo
porta:
Far-Horizons-SS14/Far-Horizons-SS14#1412
Detalhes Técnicos
Anexos
Requerimentos
Changelog
🆑