-
Notifications
You must be signed in to change notification settings - Fork 154
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Upstream sync #1066
Upstream sync #1066
Conversation
…rves (#35297) Character picker button height equality for dwarves
add scienceexplosives to dynamic pack
Make OuterClothing hide the PDA sprite
* Added optional param to PickupOrDrop to allow the item to be moved next to the owner of the hand component * cleanup placement code
Fix ExaminableHunger spelling mistake
* adds two new barsigns * webedit to fix a typo * the typo was in two locations * reformatted meta.json and added attribution links
* space lizard * attributions * attribution fix
* Update shotgun.yml * Update shotgun.yml * Update shotgun.yml
Co-authored-by: Winkarst <[email protected]> Co-authored-by: slarticodefast <[email protected]>
* Fix storage stars * Fix some more storage bugs - Fix positions not saving. - Fix the 1-tick delay between parent and child storage UIs opening / closing. - Fix BackButton being visible sometimes when it shouldn't be. * milon is a furry
…ntheses." (#35332)
* Made all corpses disposable. Argocytes, Mimics, Butterflies, Bees, Space Kangaroos, Laser Raptors and Watchers their corpses can now be butchered. * Accidentally removed a line break. restored it. * Removed a dash that did not belong there. * Changed mimic giving a "Changeling Sting Can" when butchered instead of normal meat.
* Remove storage hotbar GUI bandaid With BUI deferred opens it also happened to fix this issue which is nice. * Update Content.Client/Storage/StorageBoundUserInterface.cs
* Make cvar to require that the client has a modern hwid * Ignore guests and don't disable cvar on dev * Rename and add docs
* Fixed Veg pizza slice having 40u of reagent space * Changed FoodPizzaVegetableSlice to hold 10u rather than 6u * Fixed donk pocket slice having 50u reagent space.
WalkthroughВ этом наборе изменений затронуты различные аспекты проекта. Произошли обновления алгоритмов вычисления координат с использованием новых систем (MapSystem, SharedTransformSystem), изменения в логике пользовательского интерфейса, переработка механизмов альтернативной атаки и обработки отбрасывания в боевой системе, а также усиление проверки соединения через современный HWID. Кроме того, добавлены новые компоненты (например, для репульсии/притяжения и задержек при ударах), обновлён прототип ресурсов и локализации, а также обновлён идентификатор коммита подмодуля. Changes
Sequence Diagram(s)sequenceDiagram
participant P as Игрок
participant I as Обработчик ввода
participant M as MeleeWeaponSystem
participant A as AltFireMeleeComponent
P->>I: Нажатие кнопки альтернативной атаки
I->>M: Отправка события альтернативного огня
M->>A: Проверка компонента AltFireMeleeComponent
alt Если атака светлая
M->>M: Выполнение ClientLightAttack
else Если атака тяжелая
M->>M: Выполнение ClientHeavyAttack
else Если требуется разоружение
M->>M: Выполнение ClientDisarm
end
M-->>P: Завершение атаки
sequenceDiagram
participant CL as Клиент
participant CM as ConnectionManager
participant CFG as Конфигурация
CL->>CM: Попытка подключения
CM->>CFG: Проверка наличия modernHwid
alt modernHwid отсутствует и требуется
CM-->>CL: Отклонение подключения (NoHwid, сообщение hwid-required)
else
CM-->>CL: Подключение разрешено
end
Poem
✨ Finishing Touches
Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media? 🪧 TipsChatThere are 3 ways to chat with CodeRabbit:
Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments. CodeRabbit Commands (Invoked using PR comments)
Other keywords and placeholders
CodeRabbit Configuration File (
|
RSI Diff Bot; head commit 4299ed3 merging into b71a30f Resources/Textures/Objects/Fun/toys.rsi
Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
🔭 Outside diff range comments (3)
Content.Server/Backmen/EnergyDome/EnergyDomeSystem.cs (1)
271-271
: 🛠️ Refactor suggestionНесоответствие в использовании UseDelayComponent
В методе TurnOff всё ещё используется старый подход с созданием нового экземпляра Entity. Рекомендуется обновить для соответствия изменению в методе AttemptToggle.
Предлагаемое изменение:
- _useDelay.TryResetDelay(new Entity<UseDelayComponent>(generator, useDelay)); + _useDelay.TryResetDelay((generator, useDelay));Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs (1)
554-556
: 🛠️ Refactor suggestionОптимизация производительности передачи растворов
TODO комментарий указывает на необходимость оптимизации. Текущая реализация неэффективна из-за создания промежуточного раствора.
Рекомендуется реализовать прямую передачу реагентов между растворами для улучшения производительности.
Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml (1)
277-294
: 🛠️ Refactor suggestionИсправьте несоответствие в именовании!
В сущности
BarSignMaltroach
имя определено как "The Maltroach", в то время как в других файлах используется просто "Maltroach". Необходимо привести к единому стилю.Предлагаемые изменения:
- name: The Maltroach + name: Maltroach
🧹 Nitpick comments (27)
Resources/Locale/en-US/connection-messages.ftl (1)
64-64
: Рекомендуется добавить дополнительную информацию в сообщение.Предлагается расширить сообщение, включив ссылку на документацию или способы связи с администрацией.
Предлагаемое изменение:
-hwid-required = Your client has refused to send a hardware id. Please contact the administration team for further assistance. +hwid-required = Your client has refused to send a hardware id. Please contact the administration team at {$contact} for further assistance.Примечание: Необходимо добавить параметр
contact
в систему локализации для указания предпочтительного способа связи с администрацией.Content.Server/Backmen/EnergyDome/EnergyDomeSystem.cs (2)
163-166
: Требуется доработка TODO комментарияКомментарий о проблеме с изменением родительского элемента требует уточнения или исправления. Рекомендуется создать задачу для отслеживания этой проблемы.
Хотите, чтобы я помог создать issue для отслеживания этой проблемы?
154-159
: Дублирование логики проверки зарядаЛогика проверки заряда батареи и отключения генератора дублируется для PowerCellDrawComponent и BatteryComponent. Рекомендуется выделить общую логику в отдельный метод.
Предлагаемое решение:
+ private void HandleBatteryDrain(EntityUid generatorUid, EnergyDomeGeneratorComponent generatorComp, float energyLeak) + { + if (TryComp<BatteryComponent>(generatorUid, out var battery)) + { + _battery.UseCharge(generatorUid, energyLeak); + if (battery.CurrentCharge == 0) + TurnOff((generatorUid, generatorComp), true); + } + }Content.Server/Connection/ConnectionManager.cs (1)
230-234
: Предложение по улучшению читаемости кода и сообщения об ошибкеТекущая реализация корректна, но можно улучшить читаемость и информативность.
Предлагаю следующие изменения:
- if (modernHwid.Length == 0 && e.AuthType == LoginType.LoggedIn && _cfg.GetCVar(CCVars.RequireModernHardwareId)) + var isModernHwidEmpty = modernHwid.Length == 0; + var isLoggedInUser = e.AuthType == LoginType.LoggedIn; + var requireModernHwid = _cfg.GetCVar(CCVars.RequireModernHardwareId); + + if (isModernHwidEmpty && isLoggedInUser && requireModernHwid) { - return (ConnectionDenyReason.NoHwid, Loc.GetString("hwid-required"), null); + return (ConnectionDenyReason.NoHwid, + Loc.GetString("hwid-required") + " " + + Loc.GetString("hwid-required-details"), null); }Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs (3)
187-191
: Проверьте логику обработки ошибокБлок обработки ошибок использует условие
!errorOnMissing
для раннего выхода, что может привести к неожиданному поведению при отладке. Рекомендуется переработать логику для большей ясности.Предлагаемые изменения:
- entity = null; - if (!errorOnMissing) - return false; - Log.Error($"{ToPrettyString(container)} does not have a solution with ID: {name}"); - return false; + entity = null; + if (errorOnMissing) + Log.Error($"{ToPrettyString(container)} does not have a solution with ID: {name}"); + return false;
196-200
: Дублирование кода в обработке ошибокБлок обработки ошибок дублирует логику из предыдущего блока. Рекомендуется вынести общую логику в отдельный метод.
Предлагаю создать вспомогательный метод:
+ private bool HandleSolutionError(Entity<SolutionContainerManagerComponent?> container, string? name, bool errorOnMissing) + { + if (errorOnMissing) + Log.Error($"{ToPrettyString(container)} does not have a solution with ID: {name}"); + return false; + }И использовать его в обоих местах:
- entity = null; - if (!errorOnMissing) - return false; - Log.Error($"{ToPrettyString(container)} does not have a solution with ID: {name}"); - return false; + entity = null; + return HandleSolutionError(container, name, errorOnMissing);
1174-1175
: Исправьте форматированиеОтсутствует пробел после запятой в вызове метода.
- dissolvedSol.RemoveReagent(reagent,amtChange); + dissolvedSol.RemoveReagent(reagent, amtChange);Resources/Textures/Structures/Wallmounts/barsign.rsi/meta.json (1)
517-548
: Оптимизируйте анимацию!Анимация для "whiskeyechoes" использует 80 кадров с одинаковой задержкой 0.1 секунды. Это можно оптимизировать для улучшения производительности.
Рекомендации:
- Уменьшите количество кадров анимации
- Используйте более длительные интервалы между кадрами
Пример оптимизации:
- 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, - 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, 0.1, - // ... (80 entries) + 0.2, 0.2, 0.2, 0.2, 0.2, + 0.2, 0.2, 0.2, 0.2, 0.2Content.Shared/RepulseAttract/RepulseAttractComponent.cs (4)
7-11
: Структура компонента соответствует лучшим практикам!Все необходимые атрибуты присутствуют, и доступ правильно ограничен через
Access
. Однако документация могла бы быть более подробной.Предлагаю расширить XML-документацию, добавив примеры использования и более детальное описание механики отталкивания/притяжения.
13-18
: Добавьте валидацию значения скоростиХотя реализация корректна, рекомендуется добавить проверку значения скорости для предотвращения экстремальных значений, которые могут нарушить баланс игры.
Предлагаю добавить:
+ [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] + public float Speed + { + get => _speed; + set => _speed = Math.Clamp(value, -20f, 20f); + } + private float _speed = 5.0f;
20-24
: Добавьте валидацию значения радиуса действияНеобходимо предотвратить установку отрицательных значений для радиуса действия.
Предлагаю добавить:
+ [ViewVariables(VVAccess.ReadWrite)] + [DataField, AutoNetworkedField] + public float Range + { + get => _range; + set => _range = Math.Max(0f, value); + } + private float _range = 5.0f;
26-30
: Расширьте документацию для белого спискаТекущая документация не объясняет, как именно настраивать белый список и какие типы сущностей рекомендуется включать/исключать.
Рекомендую дополнить XML-документацию примерами конфигурации белого списка и типичными сценариями использования.
Content.Shared/RepulseAttract/RepulseAttractSystem.cs (3)
14-21
: Добавьте документацию для системы и зависимостей.Рекомендуется добавить XML-документацию для:
- Класса
RepulseAttractSystem
- Каждой зависимости с описанием её роли в системе
Пример документации:
+/// <summary> +/// Система, управляющая механикой отталкивания и притяжения сущностей. +/// </summary> public sealed class RepulseAttractSystem : EntitySystem { + /// <summary> + /// Система для поиска сущностей в пространстве. + /// </summary> [Dependency] private readonly EntityLookupSystem _lookup = default!;
22-31
: Уточните порядок выполнения обработчиков событий.Текущая подписка на событие использует параметры
before
иafter
, но причины такого порядка не очевидны.Добавьте комментарий, объясняющий необходимость данного порядка выполнения:
+ // Обработчик должен выполняться после SharedWieldableSystem для учета состояния оружия, + // но до UseDelayOnMeleeHitSystem для корректной обработки задержек SubscribeLocalEvent<RepulseAttractComponent, MeleeHitEvent>(OnMeleeAttempt, before: [typeof(UseDelayOnMeleeHitSystem)], after: [typeof(SharedWieldableSystem)]);
32-38
: Добавьте дополнительные проверки в обработчик события.Рекомендуется добавить проверки:
- Валидности пользователя (args.User)
- Состояния компонента RepulseAttract
Предлагаемые изменения:
private void OnMeleeAttempt(Entity<RepulseAttractComponent> ent, ref MeleeHitEvent args) { + if (!EntityManager.IsAlive(args.User)) + return; + if (_delay.IsDelayed(ent.Owner)) return; TryRepulseAttract(ent, args.User); }Content.Shared/Weapons/Melee/Components/AltFireMeleeComponent.cs (1)
16-22
: Рекомендуется добавить документацию к значениям перечисления.Хотя базовая документация присутствует в виде комментариев, рекомендуется оформить её в формате XML-документации для улучшения читаемости и поддержки IDE.
[Flags] public enum AltFireAttackType : byte { - Light = 0, // Standard single-target attack. - Heavy = 1 << 0, // Wide swing. - Disarm = 1 << 1 + /// <summary> + /// Standard single-target attack. + /// </summary> + Light = 0, + + /// <summary> + /// Wide swing attack. + /// </summary> + Heavy = 1 << 0, + + /// <summary> + /// Attack that attempts to disarm the target. + /// </summary> + Disarm = 1 << 1 }Content.Shared/Weapons/Melee/UseDelayOnMeleeHitSystem.cs (2)
11-11
: Рекомендуется использовать readonly для зависимости.Зависимость
_delay
помечена какdefault!
, но не помечена какreadonly
, что может привести к случайной модификации.- [Dependency] private readonly UseDelaySystem _delay = default!; + [Dependency] private readonly UseDelaySystem _delay = default!;
34-37
: Рекомендуется добавить логирование при отсутствии компонента.В случае отсутствия
UseDelayComponent
система молча возвращается. Добавление логирования поможет при отладке.if (!TryComp<UseDelayComponent>(uid, out var useDelay)) + { + Logger.Debug($"No UseDelayComponent found on entity {uid}"); return; + }Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs (1)
51-51
: Обновите документацию события AttemptMeleeThrowOnHitEvent.Документация события не отражает новые параметры
Target
иUser
./// <summary> -/// Raised a weapon entity with <see cref="MeleeThrowOnHitComponent"/> to see if a throw is allowed. +/// Raised when a weapon entity with <see cref="MeleeThrowOnHitComponent"/> attempts to throw a target. +/// <param name="Target">The entity being targeted for throwing.</param> +/// <param name="User">The entity initiating the throw, if any.</param> +/// <param name="Cancelled">Whether the throw attempt was cancelled.</param> +/// <param name="Handled">Whether the event has been handled.</param> /// </summary>Content.Client/Weapons/Melee/MeleeWeaponSystem.cs (1)
226-234
: Выделена логика обезоруживания в отдельный метод.Рефакторинг улучшает читаемость кода и упрощает поддержку функционала обезоруживания.
Content.Client/Gameplay/GameplayStateBase.cs (1)
222-227
: Улучшена логика вычисления координат.Использование MapSystem и SharedTransformSystem делает обработку координат более надежной, но стоит добавить обработку ошибок для случаев, когда системы недоступны.
Рекомендуется добавить проверку на null:
-var transformSystem = _entitySystemManager.GetEntitySystem<SharedTransformSystem>(); -var mapSystem = _entitySystemManager.GetEntitySystem<MapSystem>(); +if (!_entitySystemManager.TryGetEntitySystem(out SharedTransformSystem? transformSystem) || + !_entitySystemManager.TryGetEntitySystem(out MapSystem? mapSystem)) +{ + return; +}Resources/Prototypes/Entities/Objects/Fun/skub.yml (1)
30-36
: Новый компонент MeleeWeapon для Skub
Добавлен компонентMeleeWeapon
с конфигурацией урона (Blunt: 0) и свойствомhidden: true
. Если нулевой урон — осознанный выбор для этой сущности, то всё верно. Рекомендуется перепроверить, что такое поведение не приведёт к непредвиденным эффектам в игровом процессе.Resources/Prototypes/Entities/Objects/Weapons/Melee/hammers.yml (2)
27-69
: Новая сущность Mjollnir
СущностьMjollnir
внедрена с набором компонентов для магического оружия (Wieldable, MeleeRequiresWield, LandAtCursor, Sprite, UseDelay, UseDelayOnMeleeHit, MeleeThrowOnHit, MeleeWeapon, IncreaseDamageOnWield, DamageOtherOnHit, Item). Проверьте, что путь к аудио файлу (/Audio/Effects/tesla_consume.ogg
) и параметры (например, задержка использования, урон) соответствуют концепции оружия.
70-110
: Новая сущность Singularity Hammer
СущностьSingularity Hammer
добавлена с механикой отталкивания и притяжения (компонентRepulseAttract
с параметромspeed: -15
иrange: 5
). Рекомендуется перепроверить, что значение скорости соответствует игровым ожиданиям и не вызывает непредвиденного поведения.Resources/Prototypes/Entities/Mobs/NPCs/lavaland.yml (1)
46-49
: Добавление компонента Butcherable в Lavaland
В базовой сущности (watcher) добавлен новый компонентButcherable
, который при забое генерирует предметDiamondOre1
в количестве 1. Убедитесь, что данное изменение соответствует общей логике получения ресурсов и балансу игры.Resources/migration.yml (1)
788-838
: Обновление миграционного маппинга для оружейной системы и боеприпасов.
Добавлены новые записи, такие какMagazineBoxCaselessRifle10x24: null
, для синхронизации с изменениями в модификациях оружия. Также видны закомментированные строки (например,#WeaponSubMachineGunVector: null
и#MagazineBoxAntiMaterielBig: null
). Просмотрите, соответствует ли такое поведение (удаление или временное отключение этих маппингов) требованиям общей миграционной стратегии.Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (1)
3193-3242
: Новая сущность «Syndicat (Explosive Kitten)»
Добавлена сущность Syndicat с компонентами:
- GhostRole с высокими вероятностями и необходимыми параметрами,
- AutoImplant (предусмотрен MicroBombImplant),
- ExplosionResistance с уменьшенным коэффициентом урона от взрывов.
Эти изменения требуют тщательного тестирования, чтобы убедиться в том, что взрывной эффект не нарушает игровой баланс.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (14)
Resources/Textures/Objects/Fun/toys.rsi/spacelizard-inhand-left.png
is excluded by!**/*.png
Resources/Textures/Objects/Fun/toys.rsi/spacelizard-inhand-right.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi/icon.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi/inhand-left.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi/inhand-right.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi/wielded-inhand-left.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi/wielded-inhand-right.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/singularityhammer.rsi/icon.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/singularityhammer.rsi/inhand-left.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/singularityhammer.rsi/inhand-right.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/singularityhammer.rsi/wielded-inhand-left.png
is excluded by!**/*.png
Resources/Textures/Objects/Weapons/Melee/singularityhammer.rsi/wielded-inhand-right.png
is excluded by!**/*.png
Resources/Textures/Structures/Wallmounts/barsign.rsi/maltroach.png
is excluded by!**/*.png
Resources/Textures/Structures/Wallmounts/barsign.rsi/whiskeyechoes.png
is excluded by!**/*.png
📒 Files selected for processing (68)
Content.Client/Gameplay/GameplayStateBase.cs
(1 hunks)Content.Client/Lobby/UI/CharacterPickerButton.xaml
(1 hunks)Content.Client/Storage/StorageBoundUserInterface.cs
(0 hunks)Content.Client/UserInterface/Systems/Storage/StorageUIController.cs
(0 hunks)Content.Client/Weapons/Melee/MeleeWeaponSystem.cs
(4 hunks)Content.Client/Weapons/Misc/TetherGunSystem.cs
(2 hunks)Content.Server.Database/Model.cs
(1 hunks)Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs
(1 hunks)Content.Server/Backmen/EnergyDome/EnergyDomeSystem.cs
(1 hunks)Content.Server/Connection/ConnectionManager.cs
(1 hunks)Content.Server/Explosion/EntitySystems/ExplosionSystem.cs
(3 hunks)Content.Shared/Anomaly/SharedAnomalyCoreSystem.cs
(1 hunks)Content.Shared/Anomaly/SharedAnomalySystem.cs
(2 hunks)Content.Shared/CCVar/CCVars.Admin.cs
(1 hunks)Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs
(1 hunks)Content.Shared/Coordinates/Helpers/SnapgridHelper.cs
(1 hunks)Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs
(3 hunks)Content.Shared/Nutrition/Components/ExaminableHungerComponent.cs
(1 hunks)Content.Shared/Nutrition/EntitySystems/ExaminableHungerSystem.cs
(2 hunks)Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs
(1 hunks)Content.Shared/RepulseAttract/RepulseAttractComponent.cs
(1 hunks)Content.Shared/RepulseAttract/RepulseAttractSystem.cs
(1 hunks)Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs
(1 hunks)Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs
(2 hunks)Content.Shared/Throwing/ThrowingSystem.cs
(7 hunks)Content.Shared/Timing/UseDelaySystem.cs
(2 hunks)Content.Shared/Weapons/Melee/Components/AltFireMeleeComponent.cs
(1 hunks)Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs
(1 hunks)Content.Shared/Weapons/Melee/Components/UseDelayOnMeleeHitComponent.cs
(1 hunks)Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs
(2 hunks)Content.Shared/Weapons/Melee/UseDelayOnMeleeHitSystem.cs
(1 hunks)Content.Shared/Wieldable/Components/WieldableComponent.cs
(1 hunks)Content.Shared/Wieldable/SharedWieldableSystem.cs
(2 hunks)Resources/Changelog/Changelog.yml
(1 hunks)Resources/Locale/en-US/barsign/barsign-component.ftl
(1 hunks)Resources/Locale/en-US/connection-messages.ftl
(1 hunks)Resources/Locale/en-US/nutrition/components/examinable-hunger-component.ftl
(1 hunks)Resources/Locale/en-US/nutrition/components/examineable-hunger-component.ftl
(0 hunks)Resources/Locale/en-US/store/spellbook-catalog.ftl
(1 hunks)Resources/Prototypes/Catalog/spellbook_catalog.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/animals.yml
(6 hunks)Resources/Prototypes/Entities/Mobs/NPCs/argocyte.yml
(12 hunks)Resources/Prototypes/Entities/Mobs/NPCs/lavaland.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/NPCs/space.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Species/arachnid.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Species/base.yml
(2 hunks)Resources/Prototypes/Entities/Mobs/Species/moth.yml
(1 hunks)Resources/Prototypes/Entities/Mobs/Species/vox.yml
(1 hunks)Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml
(2 hunks)Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml
(3 hunks)Resources/Prototypes/Entities/Objects/Fun/skub.yml
(1 hunks)Resources/Prototypes/Entities/Objects/Fun/toys.yml
(18 hunks)Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml
(0 hunks)Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml
(9 hunks)Resources/Prototypes/Entities/Objects/Weapons/Melee/hammers.yml
(1 hunks)Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml
(0 hunks)Resources/Prototypes/Entities/Structures/Machines/lathe.yml
(1 hunks)Resources/Prototypes/Entities/Structures/Wallmounts/Signs/bar_sign.yml
(1 hunks)Resources/Prototypes/Magic/touch_spells.yml
(0 hunks)Resources/Prototypes/bar_signs.yml
(1 hunks)Resources/Textures/Objects/Fun/toys.rsi/meta.json
(2 hunks)Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi/meta.json
(1 hunks)Resources/Textures/Objects/Weapons/Melee/singularityhammer.rsi/meta.json
(1 hunks)Resources/Textures/Structures/Wallmounts/barsign.rsi/meta.json
(2 hunks)Resources/migration.yml
(1 hunks)RobustToolbox
(1 hunks)
💤 Files with no reviewable changes (6)
- Resources/Locale/en-US/nutrition/components/examineable-hunger-component.ftl
- Content.Client/Storage/StorageBoundUserInterface.cs
- Resources/Prototypes/Entities/Objects/Specific/Research/anomaly.yml
- Content.Client/UserInterface/Systems/Storage/StorageUIController.cs
- Resources/Prototypes/Magic/touch_spells.yml
- Resources/Prototypes/Entities/Objects/Weapons/Melee/sledgehammer.yml
✅ Files skipped from review due to trivial changes (5)
- Resources/Prototypes/Entities/Mobs/Species/base.yml
- Resources/Textures/Objects/Weapons/Melee/mjollnir.rsi/meta.json
- Content.Shared/Nutrition/EntitySystems/ExaminableHungerSystem.cs
- RobustToolbox
- Content.Shared/Nutrition/Components/ExaminableHungerComponent.cs
⏰ Context from checks skipped due to timeout of 300000ms (3)
- GitHub Check: build (ubuntu-latest)
- GitHub Check: YAML Linter
- GitHub Check: Test Packaging
🔇 Additional comments (136)
Content.Server.Database/Model.cs (1)
991-992
: Добавлено новое значение для отклонения подключений без современного HWID.Новое значение
NoHwid
в перечисленииConnectionDenyReason
позволяет корректно обрабатывать случаи, когда аутентифицированные пользователи не предоставляют современный идентификатор оборудования.Resources/Locale/en-US/connection-messages.ftl (1)
64-64
: Добавлено новое сообщение для проверки аппаратного идентификатора.Сообщение корректно информирует пользователей о требовании аппаратного идентификатора и предоставляет четкие инструкции для решения проблемы.
Content.Server/Backmen/EnergyDome/EnergyDomeSystem.cs (1)
177-177
: Улучшение в обработке UseDelayComponentИзменение в использовании кортежа вместо создания нового экземпляра Entity является более эффективным подходом. Это соответствует современным практикам C# и уменьшает накладные расходы.
Content.Shared/CCVar/CCVars.Admin.cs (1)
186-191
: Корректное добавление новой конфигурационной переменной!Переменная
RequireModernHardwareId
хорошо документирована и следует существующему паттерну конфигурационных переменных в файле.Content.Shared/Chemistry/EntitySystems/SharedSolutionContainerSystem.cs (1)
148-148
: Улучшение обработки ошибок в методе TryGetSolutionПередача параметра
errorOnMissing
в вызов метода улучшает контроль над логированием ошибок при отсутствии раствора.Resources/Locale/en-US/barsign/barsign-component.ftl (1)
99-105
: Локализация соответствует стандартам!Новые записи для баров "Maltroach" и "Whiskey Echoes" корректно добавлены и следуют установленному формату локализации.
Resources/Prototypes/bar_signs.yml (1)
185-199
: Прототипы корректно определены!Новые прототипы вывесок баров добавлены с правильной структурой и ссылками на соответствующие ресурсы.
Content.Shared/RepulseAttract/RepulseAttractComponent.cs (2)
1-5
: Импорты корректны!Все необходимые пространства имен подключены правильно и используются в компоненте.
32-38
: Отличная реализация маски коллизий!Маска коллизий корректно настроена для исключения призраков и подобных сущностей. Документация чётко объясняет назначение свойства.
Content.Shared/Hands/EntitySystems/SharedHandsSystem.Pickup.cs (2)
118-118
: Улучшение точности расчета координат!Использование
TransformSystem.ToCoordinates
вместоEntityCoordinates.FromMap
обеспечивает более точное преобразование координат при анимации подбора предметов.
200-224
: Улучшение механики размещения предметов!Добавлен новый параметр
dropNear
и логика для размещения предметов рядом с владельцем, что делает систему более гибкой и удобной для использования.Content.Shared/Radio/EntitySystems/EncryptionKeySystem.cs (1)
58-58
: Улучшение UX при извлечении ключей шифрования!Добавление параметра
dropNear: true
гарантирует, что извлеченные ключи шифрования будут размещены рядом с пользователем, что предотвращает их потерю.Resources/Prototypes/Entities/Objects/Consumable/Food/Baked/pizza.yml (2)
229-229
: Проверьте влияние уменьшения объема на игровой баланс!Значительное уменьшение
maxVol
с 40 до 10 может повлиять на эффективность пищи и игровой баланс. Убедитесь, что это изменение соответствует дизайну игры.
286-286
: Проверьте согласованность изменений объема!Уменьшение
maxVol
с 50 до 10 соответствует общей тенденции уменьшения объемов. Убедитесь, что все связанные пищевые предметы обновлены согласованно.Resources/Prototypes/Entities/Mobs/Species/arachnid.yml (2)
104-104
: Добавление слоя outerClothingДобавлен новый слой
"outerClothing"
в определение спрайтов, что должно обеспечить дополнительную визуальную детализацию для сущности. Проверьте, что порядок слоёв соответствует ожидаемой визуальной иерархии и не конфликтует с другими наложениями.
129-139
: Удаление Dummy-сущности для ArachnidБлок, относящийся к временной (Dummy) сущности для Arachnid, удалён. Убедитесь, что это изменение не приводит к нарушению зависимостей, если где-то в проекте ожидается наличие данной сущности.
Resources/Prototypes/Entities/Mobs/Species/moth.yml (2)
102-102
: Добавление слоя outerClothingНовая строка с маппингом
"outerClothing"
добавлена в список слоёв спрайта. Проверьте, что данный слой правильно интегрирован в визуальный порядок и соответствует стандартам оформления для представления сущности Moth.
135-149
: Удаление Dummy-сущности для MothУдалён блок, относящийся к Dummy-сущности для Moth. Убедитесь, что удаление этого блока не влияет на зависимые системы или загрузку ресурсов, особенно если где-то в коде ориентируются на наличие данной сущности.
Resources/Prototypes/Entities/Mobs/Species/vox.yml (2)
85-85
: Добавление слоя outerClothingВ слое спрайта Vox добавлен новый маппинг
"outerClothing"
. Проверьте, что изменение порядка слоёв отвечает требованиям визуальной эстетики и не вызывает конфликтов с ранее установленными приоритетами отображения.
156-203
: Удаление Dummy-сущности для VoxУдалён блок Dummy-сущности для Vox, который ранее использовался для тестирования или заполнения. Убедитесь, что это удаление не затрагивает функциональность загрузки или отображения Vox, если в системе ожидается наличие подобной сущности.
Content.Shared/Wieldable/Components/WieldableComponent.cs (2)
31-31
: Улучшение документации!Добавление уточнения о конфликтах при снятии удержания помогает лучше понять возможные проблемы взаимодействия.
36-40
:✅ Verification successful
Хорошее добавление контроля задержки!
Новое свойство
UseDelayOnWield
позволяет гибко управлять поведением задержки после действий удержания/снятия удержания предмета. Реализация соответствует паттернам компонента и хорошо документирована.Убедитесь, что все системы, использующие этот компонент, правильно обрабатывают новое свойство.
🏁 Script executed:
#!/bin/bash # Поиск использования WieldableComponent для проверки обработки UseDelayOnWield # Поиск систем, работающих с WieldableComponent rg -l "WieldableComponent" | grep "System" # Поиск использования UseDelayOnWield rg "UseDelayOnWield"Length of output: 622
Отличное улучшение: контроль задержки интегрирован корректно.
Новое свойство
UseDelayOnWield
реализовано согласно установленным паттернам и документировано. По результатам проверки видно, что системаSharedWieldableSystem.cs
корректно обрабатывает его, используя условные проверки с учетом наличия компонентаUseDelayComponent
. Просьба убедиться, что все остальные системы, использующиеWieldableComponent
, также правильно интерпретируют значение этого свойства.Resources/Textures/Objects/Fun/toys.rsi/meta.json (2)
4-4
: Обновление данных об авторских правах
Строка обновлена с добавлением подробного списка источников и авторов. Убедитесь, что все ссылки и имена правильны и отражают актуальные данные из upstream.
204-211
: Добавление новых состояний для spacelizard
Добавлены два новых состояния: "spacelizard-inhand-right" и "spacelizard-inhand-left" с параметром "directions": 4. Проверьте, что новые состояния правильно интегрированы в систему (например, используются в MeleeWeaponSystem и UseDelayOnMeleeHitSystem) и корректно отображаются в игре.Resources/Prototypes/Entities/Objects/Weapons/Guns/Ammunition/Cartridges/shotgun.yml (9)
4-4
: Изменение родительского класса для BaseShellShotgun.
Значение атрибутаparent
изменено наBaseCartridge
, что упрощает иерархию наследования для данного объекта.
42-44
: Обновление наследования для ShellShotgunSlug.
Атрибутparent
теперь задан как[ BaseShellShotgun, BaseSecurityContraband]
, что обеспечивает расширение функциональности через дополнительную классификацию.
55-58
: Модификация наследования для ShellShotgunFlare.
Теперь данная сущность наследует только отBaseShellShotgun
, исключаяBaseSecurityContraband
. Проверьте, что такое изменение соответствует требованиям модели безопасности.
74-77
: Изменение схемы наследования для ShellShotgun.
Атрибутparent
обновлён на[ BaseShellShotgun, BaseSecurityContraband ]
, что добавляет дополнительный уровень наследования и, соответственно, функциональности.
86-89
: Корректировка наследования для ShellShotgunIncendiary.
Изменение атрибутаparent
на[ BaseShellShotgun, BaseSecurityContraband ]
гарантирует, что объект правильно наследует как базовые, так и дополнительные свойства, связанные с безопасностью.
100-103
: Обновление родительского класса для ShellShotgunPractice.
Атрибутparent
изменён на[ BaseShellShotgun, BaseSecurityContraband ]
, что позволяет наследовать дополнительные характеристики и обеспечивает согласованность с остальными объектами.
114-117
: Изменение наследования для ShellTranquilizer.
Атрибутparent
обновлён на[ BaseShellShotgun, BaseSecurityContraband ]
, что соответствует общей стратегии наследования в обновлённой системе.
142-146
: Модификация наследования для ShellShotgunImprovised.
Теперь у данной сущности значениеparent
установлено как[ BaseShellShotgun, BaseSecurityContraband ]
, что улучшает согласованность наследования в системе.
165-168
: Обновление родительского класса для ShellShotgunUranium.
Атрибутparent
изменён на[ BaseShellShotgun, BaseSecurityContraband ]
, что повышает интеграцию с базовыми и дополнительными характеристиками безопасности.Content.Client/Lobby/UI/CharacterPickerButton.xaml (1)
8-12
:✅ Verification successful
Проверьте корректность размеров спрайта.
Добавление атрибута
SetSize="64 64"
вместе с существующимScale="2 2"
приведёт к тому, что спрайт будет отображаться размером 128x128 пикселей. Убедитесь, что:
- Такой размер соответствует дизайну интерфейса
- Не возникнет проблем с отображением в контейнере при различных разрешениях экрана
🏁 Script executed:
#!/bin/bash # Поиск других SpriteView с похожими настройками размера для сравнения rg -U 'SpriteView.*Scale.*SetSize' --type xamlLength of output: 77
Пожалуйста, повторно проверьте использование атрибутов Scale и SetSize в файлах XAML.
Ранее использованная команда не сработала из-за неверного указания типа файла, поэтому предлагаем выполнить приведённый скрипт, который ищет все файлы с расширением .xaml. Это поможет убедиться, что аналогичные настройки используются единообразно по проекту и подходят для заданного дизайна интерфейса.
🏁 Script executed:
[run_scripts] #!/bin/bash # Поиск использования SpriteView с атрибутом Scale и SetSize в файлах *.xaml rg 'SpriteView.*Scale.*SetSize' -g "*.xaml"Length of output: 663
Проверьте итоговый размер спрайта.
Добавление атрибута
SetSize="64 64"
вместе сScale="2 2"
приводит к тому, что спрайт будет отображаться с размерами 128x128 пикселей. Обратите внимание, что аналогичная комбинация уже используется в файлах:
Content.Client/Atmos/Monitor/UI/AirAlarmWindow.xaml
Content.Client/Power/APC/UI/ApcMenu.xaml
Content.Client/UserInterface/Systems/Character/Windows/CharacterWindow.xaml
Если итоговый размер соответствует дизайнерскому решению и вёрстке, можно считать изменения корректными.
Content.Shared/RepulseAttract/RepulseAttractSystem.cs (1)
1-12
: Зависимости корректны!Все необходимые зависимости для работы системы импортированы и правильно организованы.
Content.Shared/Anomaly/SharedAnomalyCoreSystem.cs (1)
39-41
:✅ Verification successful
Проверьте корректность изменения параметра!
Изменение
args.Hit
наargs.Target
является частью рефакторинга системы ближнего боя. Логика проверки компонентов осталась прежней, но теперь применяется к целевому объекту.Пожалуйста, убедитесь, что:
- Все вызовы правильно передают целевой объект в
args.Target
- Поведение системы не изменилось неожиданным образом
🏁 Script executed:
#!/bin/bash # Поиск других мест использования AttemptMeleeThrowOnHitEvent rg "AttemptMeleeThrowOnHitEvent" -A 5Length of output: 2424
Изменение параметра подтверждено
Из выполненного анализа видно, что замена
args.Hit
наargs.Target
соответствует контракту событияAttemptMeleeThrowOnHitEvent
– конструктор события принимает первым аргументом объект-цель. Все обращения к событию в кодовой базе (например, в файлахContent.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs
иContent.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs
) используют параметрtarget
, что подтверждает корректность изменения.Пожалуйста, ещё раз проверьте, что:
- Все вызовы события корректно передают объект-цель через
args.Target
.- Изменение не повлияло на ожидаемое поведение системы ближнего боя.
Content.Shared/Weapons/Melee/MeleeThrowOnHitSystem.cs (6)
2-4
: Все добавленные пространства имён выглядят корректно.
Эти директивыusing
необходимы для новых систем и структур (Stunnable, Throwing, Timing, System.Numerics). Никаких конфликтов не обнаружено.Also applies to: 10-10
21-23
: Проверка внедрений зависимостей.
Объявленные системыUseDelaySystem
,SharedStunSystem
иThrowingSystem
корректно используются в данном файле, проблем не выявлено.
28-28
: Подписка на новое событие ThrowDoHitEvent.
Подключение к событию выглядит правильным, оно необходимо для обработки броска при попадании. Убедитесь, что никакие другие зависимости не забыты.
31-50
: Проверка логики OnMeleeHit.
Метод корректно учитывает задержку использования и отсутствие целей в списке HitEntities. Также происходит вычисление направления удара на основе позиции пользователя и цели.Рекомендуется удостовериться, что
args.User
не может быть null, чтобы избежать потенциальных ошибок при вызове_transform.GetWorldPosition(args.User)
.
52-61
: Обработка события ThrowDoHitEvent.
Метод корректно проверяет, активна ли функциональность при броске, а также наличие компонента Physics у выброшенного оружия. Логика выглядит последовательно.
63-81
: Разделение логики ThrowOnHitHelper.
СобытияAttemptMeleeThrowOnHitEvent
иMeleeThrowOnHitStartEvent
даёт возможность другим системам отменять или модифицировать бросок. Проверка нулевого вектора направления и применение оглушения выглядят оправданно.Content.Shared/Weapons/Melee/Components/UseDelayOnMeleeHitComponent.cs (1)
1-12
: Новый компонент для задержки использования.
КомпонентUseDelayOnMeleeHitComponent
объявлен корректно. Он регистрируется и сеттится как сетевая сущность, что даёт возможность синхронизировать его состояние по сети. Дополнительных замечаний нет.Resources/Locale/en-US/nutrition/components/examinable-hunger-component.ftl (1)
1-5
: Проверка новых строк локализации для состояний голода.
Формат и структура сообщений выглядят корректно, используются функции для согласования глаголов и заглавных букв. Никаких проблем не обнаружено.Content.Shared/Coordinates/Helpers/SnapgridHelper.cs (1)
18-22
: Изменения улучшают согласованность с системой трансформаций.Переход на использование
xformSys.ToMapCoordinates
иxformSys.ToCoordinates
делает код более последовательным и соответствует архитектурным принципам системы.Resources/Locale/en-US/store/spellbook-catalog.ftl (2)
58-59
:✅ Verification successful
Проверьте согласованность описания с механикой.
Описание Singularity Hammer указывает на эффект притяжения окружающих объектов. Убедитесь, что эта механика реализована в соответствующих системах.
🏁 Script executed:
#!/bin/bash # Поиск реализации механики притяжения для Singularity Hammer rg -A 5 "Singularity.*pull|attract"Length of output: 22294
Проверьте соответствие описания механике притяжения.
Выяснено, что эффект притяжения реализован:
- Компонент
SingularityAttractorComponent
(файлContent.Server/Singularity/Components/SingularityAttractorComponent.cs
)- Система
SingularityAttractorSystem
(файлContent.Server/Singularity/EntitySystems/SingularityAttractorSystem.cs
)Пожалуйста, убедитесь, что описание в файле
Resources/Locale/en-US/store/spellbook-catalog.ftl
(строки 58–59) точно отражает этот игровой механизм.
55-56
:❓ Verification inconclusive
Проверьте согласованность описания с механикой.
Описание Mjollnir указывает на возможность отбрасывания противников броском или ударом. Убедитесь, что эта механика реализована в соответствующих системах.
🏁 Script executed:
#!/bin/bash # Поиск реализации механики броска и отбрасывания для Mjollnir ast-grep --pattern 'class $_ { $$$ throw($_, $_) { $$$ } $$$ }' rg -A 5 "Mjollnir.*throw|knockback"Length of output: 1083
Проверьте реализацию механики отбрасывания для Mjollnir
Описание указывает на возможность отбрасывания противников при ударе или броске, однако автоматизированный поиск реализации метода
throw
или других функций, связанных с knockback, для Mjollnir не дал результатов. Единственные найденные совпадения относятся к другому оружию (например, baseball bat), что может говорить об отсутствии соответствующей реализации для Mjollnir.
- Проверьте, существует ли в коде реализация метода (или логики) отбрасывания для оружия Mjollnir.
- Если механика реализована в другом месте, убедитесь, что описание соответствует действительности.
- Если реализация отсутствует, необходимо либо убрать упоминание механики из описания, либо добавить поддержку соответствующего функционала.
Content.Shared/Storage/EntitySystems/MagnetPickupSystem.cs (1)
84-84
: Улучшение производительности при вычислении координат.Замена
EntityCoordinates.FromMap
на_transform.ToCoordinates
является правильным решением, так как это более эффективный способ преобразования координат.Content.Client/Weapons/Misc/TetherGunSystem.cs (2)
19-19
: Добавлена новая зависимость MapSystem.Добавление
MapSystem
как зависимости является правильным решением для работы с координатами карты.
77-82
: Улучшение логики преобразования координат.Замена старой логики на использование
TransformSystem.ToCoordinates
сMapSystem
делает код более последовательным и поддерживаемым.Content.Shared/Timing/UseDelaySystem.cs (2)
91-95
: Улучшение обработки отсутствующего компонента.Изменение сигнатуры метода для поддержки nullable компонента и добавление проверки через
Resolve
делает код более надёжным.
150-150
: Обновление вызова IsDelayed.Обновление вызова
IsDelayed
для соответствия новой сигнатуре метода с использованием кортежа.Content.Client/Weapons/Melee/MeleeWeaponSystem.cs (2)
111-133
: Улучшена логика альтернативной атаки для оружия.Добавлена поддержка различных типов атак через AltFireMeleeComponent для оружия дальнего боя. Это позволяет более гибко настраивать поведение оружия при использовании правой кнопки мыши.
236-253
: Улучшена обработка легкой атаки.Добавлены проверки дистанции и валидации цели, что делает механику атаки более надежной.
Content.Shared/Throwing/ThrowingSystem.cs (1)
145-146
: Добавлена возможность открепления объектов при броске.Новый параметр unanchor позволяет автоматически откреплять объекты перед броском, что улучшает игровой процесс.
Content.Shared/Wieldable/SharedWieldableSystem.cs (2)
195-196
: Улучшен контроль задержки использования при удержании.Добавлена возможность отключать задержку использования при удержании предмета через UseDelayOnWield.
241-245
: Добавлена проверка задержки при попытке удержания.Логика проверки задержки теперь учитывает настройку UseDelayOnWield, что делает систему более гибкой.
Content.Shared/Anomaly/SharedAnomalySystem.cs (4)
7-7
: Добавлена новая зависимость для системы бросковДобавлен импорт Content.Shared.Throwing для поддержки новой механики приземления.
44-45
: Улучшена обработка событий броска аномалииЗаменена подписка на MeleeThrowOnHitEndEvent на более подходящий LandEvent, что лучше отражает логику приземления объекта.
50-54
: Улучшена читаемость и логика проверки оружия
- Параметр переименован с args.Used на args.Weapon для большей ясности
- Добавлен поясняющий комментарий о статическом состоянии аномалий
58-62
: Добавлен новый обработчик приземленияРеализован метод OnLand для обработки приземления аномалии, который возвращает объект в статическое состояние.
Content.Server/Explosion/EntitySystems/ExplosionSystem.cs (2)
42-42
: Добавлена зависимость MapSystemДобавлена новая зависимость для улучшенной работы с координатами карты.
361-362
: Улучшен метод преобразования координатИспользование TransformSystem.ToCoordinates вместо EntityCoordinates.FromMap для более последовательной работы с координатами.
Content.Server/Administration/Systems/AdminVerbSystem.Smites.cs (1)
139-139
: Обновлён метод установки координат в шахматном измеренииИспользован TransformSystem.ToCoordinates для согласованности с общей системой координат.
Content.Shared/Storage/EntitySystems/SharedStorageSystem.cs (2)
535-538
: Обновлён метод преобразования координат в системе храненияИспользование TransformSystem.ToCoordinates для более последовательной работы с координатами в системе хранения.
587-590
: Улучшена обработка координат при подборе предметовОбновлён метод преобразования мировых координат в локальные с использованием TransformSystem.
Resources/Prototypes/Entities/Objects/Fun/skub.yml (3)
18-20
: Новый компонент EmitSoundOnLand
Новый компонентEmitSoundOnLand
добавлен корректно и использует коллекцию звуковSkub
. Убедитесь, что этот компонент работает аналогично другим звуковым компонентам в проекте.
24-26
: Новый компонент EmitSoundOnActivate
КомпонентEmitSoundOnActivate
добавлен с правильно заданной коллекцией звуковSkub
. Проверьте его интеграцию с другими системами звукового воспроизведения.
27-29
: Новый компонент EmitSoundOnCollide
Добавлен компонентEmitSoundOnCollide
с указанием коллекции звуковSkub
. Необходимо убедиться, что логика вызова и проигрывания звука соответствует требованиям геймдизайна.Resources/Prototypes/Entities/Mobs/NPCs/mimic.yml (1)
43-46
: Новый компонент Butcherable для mimic
В сущностьmimic
добавлен компонентButcherable
, который при забое генерирует предмет с идентификаторомDrinkChangelingStingCan
в количестве 1. Проверьте, что это изменение соответствует игровой логике и балансировке при добыче ресурсов.Resources/Prototypes/Entities/Objects/Weapons/Melee/hammers.yml (1)
1-26
: Новый объект Sledgehammer
Сущностьsledgehammer
добавлена корректно: все компоненты (Sprite, MeleeWeapon, Wieldable, IncreaseDamageOnWield, Item) настроены согласно требованиям. Убедитесь, что коллекция звуковMetalThud
доступна в проекте.Resources/Textures/Objects/Weapons/Melee/singularityhammer.rsi/meta.json (1)
1-245
: Новый файл метаданных для Singularity Hammer
Файлmeta.json
успешно добавлен для описания метаданных оружияSingularity Hammer
. Все ключевые параметры (версия, лицензия, размеры, состояния анимации и задержки) выглядят корректно. Рекомендуется перепроверить, что значения задержек (0.05) соответствуют требованиям анимаций в проекте.Resources/Prototypes/Entities/Objects/Fun/bike_horn.yml (12)
17-18
: Проверка компонента UseDelay
Добавлен компонентUseDelay
с задержкой0.5
. Убедитесь, что выбранное значение соответствует требуемой логике использования в игре.
24-28
: Добавление компонента EmitSoundOnLand (BikeHorn)
Новый блокEmitSoundOnLand
настроен с использованием звуковой коллекцииBikeHorn
и вариацией0.125
. Проверьте, что это соответствует общему дизайну звуковых эффектов для данного предмета.
34-38
: Добавление компонента EmitSoundOnActivate (BikeHorn)
Добавлен компонентEmitSoundOnActivate
, который генерирует звук активации с вариацией0.125
. Рекомендуется перепроверить соответствие звуковой коллекции спецификации.
39-43
: Добавление компонента EmitSoundOnCollide (BikeHorn)
Добавлен компонентEmitSoundOnCollide
для обработки звука при столкновении, вариант звука установлен в0.125
. Убедитесь, что его работа не конфликтует с другими эффектами при столкновении.
93-94
: Обновление параметра в EmitSoundOnUse (CluwneHorn)
Изменено значение параметраvariation
до0.125
для компонентаEmitSoundOnUse
. Проверьте, что такое значение гармонирует со звуковой палитрой для CluwneHorn.
95-98
: Добавление компонента EmitSoundOnActivate (CluwneHorn)
В блоке добавлен новый компонентEmitSoundOnActivate
с вариацией0.125
для CluwneHorn. Настройка выглядит консистентной с остальными звуковыми эффектами.
99-103
: Добавление компонента EmitSoundOnCollide (CluwneHorn)
Новая реализация компонентаEmitSoundOnCollide
для CluwneHorn с параметромvariation: 0.125
добавлена корректно.
104-108
: Добавление компонента EmitSoundOnLand (CluwneHorn)
КомпонентEmitSoundOnLand
для CluwneHorn введён с аналогичными настройками: звуковая коллекцияCluwneHorn
и вариация0.125
.
166-170
: Добавление компонента EmitSoundOnLand (BananiumHorn)
Для BananiumHorn добавлен блокEmitSoundOnLand
с вариацией0.246
, что соответствует тематике данного предмета.
176-180
: Добавление компонента EmitSoundOnActivate (BananiumHorn)
Новый компонентEmitSoundOnActivate
для BananiumHorn интегрирован с параметромvariation: 0.246
. Проверьте корректность использования звуковой коллекции.
181-185
: Добавление компонента EmitSoundOnCollide (BananiumHorn)
Добавлен компонентEmitSoundOnCollide
с настройками коллекцииBananiumHorn
иvariation: 0.246
.
186-195
: Настройка компонента MeleeWeapon (BananiumHorn)
Изменена конфигурация компонентаMeleeWeapon
: установленwideAnimationRotation
, добавлен блокsoundHit
с коллекциейBananiumHorn
и значениемvariation: 0.246
, а также указано, что компонент скрыт (hidden: true
). Проверьте, что баланс урона и визуальное отображение соответствуют требованиям.Resources/Prototypes/Entities/Mobs/NPCs/miscellaneous.yml (1)
40-44
: Добавление компонента Butcherable (MobLaserRaptor)
На строках 40–44 добавлен компонентButcherable
, который при разделке мобаMobLaserRaptor
выдаёт предметFoodMeatChicken
в количестве 2. Проверьте, что данное изменение согласовано с игровым балансом и механикой добычи.Resources/Prototypes/Catalog/spellbook_catalog.yml (2)
200-212
: Новая запись для SpellbookHammerMjollnir
Добавлена новая запись дляSpellbookHammerMjollnir
с указанными полями: имя, описание, привязка к сущностиMjollnir
, стоимость 2 WizCoin и условие лимита запаса 1. Убедитесь, что идентификатор и все атрибуты соответствуют определениям сущностей.
213-225
: Новая запись для SpellbookHammerSingularity
Добавлена запись дляSpellbookHammerSingularity
с привязкой к сущностиSingularityHammer
. Параметры (стоимость, категория, условие лимита) аналогичны предыдущей записи — проверьте корректность описания и соответствие игровым механикам.Resources/Prototypes/Entities/Mobs/NPCs/argocyte.yml (12)
86-90
: Добавление компонента Butcherable (MobArgocyteSlurva)
Для сущностиMobArgocyteSlurva
добавлен компонентButcherable
, который спавнитFoodMeatXeno
в количестве 1. Нововведение соответствует общей тенденции по расширению механики добычи ресурсов.
120-124
: Добавление компонента Butcherable (MobArgocyteBarrier)
Новый компонентButcherable
дляMobArgocyteBarrier
обеспечивает выдачуFoodMeatXeno
(1 шт.). Проверьте балансировку этого изменения.
160-164
: Добавление компонента Butcherable (MobArgocyteSkitter)
ДляMobArgocyteSkitter
добавлен компонентButcherable
, генерирующийFoodMeatXeno
в количестве 1. Изменение выглядит логичным и согласованным с механикой мобов.
200-204
: Добавление компонента Butcherable (MobArgocyteSwiper)
Новый компонентButcherable
дляMobArgocyteSwiper
обеспечивает спавнFoodMeatXeno
(2 шт.). Проверьте, что такое количество соответствует задуманному игровому процессу.
226-230
: Добавление компонента Butcherable (MobArgocyteMolder)
ДляMobArgocyteMolder
введён компонентButcherable
, выдающийFoodMeatXeno
в количестве 2. Изменение выглядит корректно с точки зрения консистентности механик.
253-257
: Добавление компонента Butcherable (MobArgocytePouncer)
Добавлен компонентButcherable
дляMobArgocytePouncer
, который спавнитFoodMeatXeno
(2 шт.). Проверьте, что данная настройка соответствует балансу мобов.
282-286
: Добавление компонента Butcherable (MobArgocyteGlider)
Новый компонентButcherable
дляMobArgocyteGlider
настроен на выдачуFoodMeatXeno
— 2 единицы. Все настройки выглядят последовательными.
314-318
: Добавление компонента Butcherable (MobArgocyteHarvester)
ДляMobArgocyteHarvester
добавлен компонентButcherable
, который создаетFoodMeatXeno
в количестве 2. Изменение интегрируется в общую механику добычи ресурсов.
345-349
: Добавление компонента Butcherable (MobArgocyteCrawler)
В сущностиMobArgocyteCrawler
введен компонентButcherable
, выдающийFoodMeatXeno
(2 шт.). Проверьте, что это не влияет негативно на баланс игры.
378-382
: Добавление компонента Butcherable (MobArgocyteEnforcer)
ДляMobArgocyteEnforcer
добавлен компонентButcherable
, генерирующийFoodMeatXeno
в количестве 3. Нововведение выглядит оправданным для этой категории мобов.
408-413
: Добавление компонента Butcherable с типом разделки Spike (MobArgocyteFounder)
В сущностиMobArgocyteFounder
введён компонентButcherable
с дополнительным атрибутомbutcheringType: Spike
, который спавнитFoodMeatXeno
(5 шт.). Проверьте, что тип разделки правильно обрабатывается в других системах.
454-459
: Добавление компонента Butcherable с типом Spike (MobArgocyteLeviathing)
ДляMobArgocyteLeviathing
добавлен компонентButcherable
с типомSpike
и выдачейFoodMeatXeno
(10 шт.). Убедитесь, что данное количество соответствует сложности и размерам этого моба.Resources/Prototypes/Entities/Mobs/NPCs/space.yml (1)
179-182
: Обновление настроек для space kangaroo
Для сущностиspace kangaroo
добавлен компонентButcherable
, который выдаётFoodMeat
в количестве 1. Кроме того, изменены языковые настройки:
–currentLanguage
обновлено сTauCetiBasic
доKangaroo
;
– спискиspeaks
иunderstands
теперь содержат толькоKangaroo
.
Убедитесь, что эти изменения корректно отражают локализацию и функционал для данной сущности.Also applies to: 184-189
Resources/Prototypes/Entities/Structures/Machines/lathe.yml (1)
195-212
: Добавлена динамическая опция ScienceExplosives в dynamicPacks.
Новая запись"ScienceExplosives"
корректно добавлена в список динамических паков между существующими научными наборами. Убедитесь, что этот идентификатор согласуется с остальными элементами системы и не приводит к конфликтам при обработке рецептов протолата.Resources/Prototypes/Entities/Objects/Fun/toys.yml (10)
202-205
: Добавлен компонент EmitSoundOnCollide для PlushieHampter.
Новый компонентEmitSoundOnCollide
с указанием звукового файла/Audio/Items/Toys/mousesqueek.ogg
добавлен в состав PlushieHampter для воспроизведения звука при столкновениях. Проверьте, соответствует ли выбранный звук общей стилистике звуковых эффектов для игрушек.
291-294
: Добавлен EmitSoundOnCollide для PlushieArachind.
Новый компонентEmitSoundOnCollide
, использующий файл/Audio/Voice/Arachnid/arachnid_laugh.ogg
, добавлен для PlushieArachind. Убедитесь, что звук вызова смеха адекватен для данного типа игрушки и не конфликтует с другими эффектами.
326-329
: Добавлен EmitSoundOnCollide для PlushieLizard.
В PlushieLizard теперь присутствует компонентEmitSoundOnCollide
с путём/Audio/Items/Toys/weh.ogg
. Проверьте, что этот звуковой эффект гармонично сочетается с уже используемыми в данном типе игрушек эффектами и правильно воспроизводится при столкновениях.
529-532
: Добавлен EmitSoundOnCollide для PlushieDiona.
Новый компонент для столкновений, использующий файловый путь/Audio/Items/Toys/toy_rustle.ogg
(убедитесь, что выбранный звук соответствует логике оформления), добавлен для PlushieDiona. Проверьте, что этот эффект не вызывает диссонанса с другими звуками данного объекта.
824-836
: Обновление звуковых эффектов для ToyMouse.
Для ToyMouse добавлен компонентEmitSoundOnCollide
с указанным путём/Audio/Items/Toys/mousesqueek.ogg
. Это обновление согласует звуковые эффекты столкновения с ранее определёнными эффектами использования, активации и призыва звука.
869-882
: Обновление звуковых эффектов для ToyRubberDuck.
Новые компоненты для событий «на приземление», «при активации» и «при столкновении» используют файл/Audio/Items/Toys/quack.ogg
, что должно усилить характерный звук резиновой утки. Убедитесь, что звуковой файл передаёт нужное настроение и технически корректен.
910-913
: Добавлен EmitSoundOnCollide для PlushieVox.
Новый компонентEmitSoundOnCollide
с использованием/Audio/Voice/Vox/shriek1.ogg
интегрирован в PlushieVox для воспроизведения звука при столкновениях. Проверьте корректность уровня громкости и согласованность с другими звуковыми эффектами данного объекта.
1025-1027
: Добавлен EmitSoundOnCollide для PlushieMoth.
Новый компонент, отвечающий за звук столкновения, теперь использует файл/Audio/Voice/Moth/moth_chitter.ogg
для PlushieMoth. Проверьте, что этот эффект настроен с правильными параметрами (громкость, длительность) и гармонирует с остальными звуковыми эффектами.
1581-1595
: Обновление звуковых эффектов для ClownRecorder.
В блоке ClownRecorder добавлены или обновлены компонентыEmitSoundOnLand
иEmitSoundOnCollide
(а также соответствующие эффекты при триггере) с использованием коллекцииClownRecorder
. Проверьте, что эти изменения обеспечивают ожидаемую комичную акустику и не конфликтуют со звуковой системой устройства.
1107-1121
: Обновление звуковых эффектов для ToyIan.
КомпонентыEmitSoundOnUse
,EmitSoundOnLand
,EmitSoundOnActivate
иEmitSoundOnCollide
для ToyIan теперь используют файл/Audio/Items/Toys/ian.ogg
. Убедитесь, что эти звуковые эффекты последовательны между собой и соответствуют стилистике данного игрушечного объекта.Resources/Prototypes/Entities/Mobs/NPCs/animals.yml (17)
118-137
: Новые компоненты для сущности «bee»
В этом блоке для сущности пчёлы добавлены:
- Компонент Extractable с параметром
grindableSolutionName: food
для обработки сущности в пищевые ресурсы.- Компонент SolutionContainerManager с описанием реагента: для ключа
food
указан реагентGroundBee
сQuantity: 1
.- Модифицирован компонент Butcherable: теперь при разделке пчёлы не должен спауниться никакой предмет (поле
id
установлено вnull
).- В Bloodstream добавлено новое свойство
bloodReagent
со значениемInsectBlood
.Убедитесь, что обработка значения
null
в Butcherable соответствует ожидаемой логике, а новое поле в Bloodstream корректно интегрируется с существующими механиками.
259-259
: Исправление именования компонента голода для «chicken»
В этой строке название компонента изменено с ошибочного варианта на корректное — теперь используется ExaminableHunger. Это поможет обеспечить единообразие именования по всему коду.
1078-1078
: Единообразие именования компонента голода для «goat»
Здесь также применяется обновлённое название ExaminableHunger для сущности козы. Проверьте, что во всех связанных механизмах используется именно этот параметр и отсутствуют ссылки на старое именование.
826-847
: Новые компоненты для сущности «butterfly»
В блоке для бабочки добавлены следующие изменения:
- Компонент Extractable с установленным
grindableSolutionName: food
.- Компонент SolutionContainerManager для ключа
food
, где в реагентах указанUncookedAnimalProteins
сQuantity: 1
.- Компонент Butcherable с параметром
spawned
заданным какid: null
(т.е. при разделке ничего не спаунится).- Дополнительно добавлены компоненты Item (с размером
Tiny
), Tag (с тегомTrash
), а также обновлён Bloodstream с указаниемbloodReagent: InsectBlood
и соответствующим объемом.
Эти изменения усиливают возможность обработки и использования сущности в механиках получения ресурсов.
3764-3778
: Добавление ReplacementAccent для «MobDionaNymphAccent»
Для сущностей, связанных с Diona Nymph Accent, добавлен компонент ReplacementAccent с параметромaccent: nymph
. Это позволит корректно применять особенности речи и акцента для данной группы нипов.
2668-2672
: Новый компонент Butcherable для сущности «Clown Spider»
Для сущности «clown spider» введён компонент Butcherable, который при разделке спаунит материалMaterialBananium1
в количестве 1. Проверьте, что добыча этого материала соответствует балансу игры и не приводит к неожиданным эффектам.
2942-3050
: Новая сущность «Corrupted Corgi»
Для сущности Corrupted Corgi добавлены изменения, включающие:
- Отсутствие интерактивного успеха (successChance: 0), что позволяет использовать её как пасхалку;
- Уникальные параметры повреждений, температурные пороги и особенности повреждения метафизической природой.
Убедитесь, что эти параметры протестированы и не нарушают баланс игровых питомцев.
3243-3277
: Обновлённая сущность «Space Cat»
Изменения включают улучшения для защиты от экстремальных температур и интеграцию дополнительных систем (например, компонент Respirator для работы в космическом вакууме). Проверьте, что все эти системы корректно работают вместе и не создают конфликтов с базовыми настройками питомцев.
3071-3097
: Новая сущность «Corgi Puppy»
Добавлена новая сущность Corgi Puppy, наследующая параметры от базовой сущности corgi. Проверьте, что характеристики питомца и взаимодействия (например, аудиоэффекты, визуальные эффекты) соответствуют ожиданиям для маленького питомца.
3300-3332
: Новая сущность «Kitten»
Сущность Kitten представлена с уменьшёнными параметрами урона и скоростью, что типично для маленьких питомцев. Убедитесь, что стоимость и баланс питомца отвечают игровым требованиям.
3333-3388
: Новая сущность «Sloth»
Добавлена сущность Sloth с очень низкой скоростью передвижения, соответствующими параметрами физики и анимации, а также с высокой вероятностью успешного взаимодействия (petting-success). Проверьте, что такие характеристики не приводят к непредвиденным нарушениям в игровом процессе.
3389-3442
: Новая сущность «Ferret»
Обновлённые параметры для сущности Ferret, включая аудиоэффекты, скорость анимации и прочие базовые характеристики, выглядят корректно. Рекомендуется дополнительно протестировать визуальное и звуковое представление этой сущности.
3443-3593
: Новая сущность «Hamster»
Сущность Hamster оснащена разнообразными компонентами:
- Интерфейс взаимодействия (GhostRole, Speech и т.п.),
- Физическими параметрами (Fixtures, Inventory, MobState, Deathgasp),
- Системой голода с компонентом Hunger и новым набором реагентов в SolutionContainerManager.
Убедитесь, что баланс характеристик и интеграция с общей системой питомцев реализованы корректно.
3594-3672
: Новая сущность «Pig»
Сущность Pig добавлена с подробными параметрами:
- Функции репродукции (Reproductive, ReproductivePartner),
- Компонентом Butcherable с добычей Bacon (FoodMeatBacon),
- Дополнительными настройками интерактивного взаимодействия.
Проверьте, что все показатели (например, successChance, анимации, звуковые эффекты) соответствуют балансу и логике игры.
3673-3762
: Новая сущность «Diona Nymph»
Для сущности Diona Nymph внесены следующие изменения:
- Добавлены компоненты, отвечающие за язык (LanguageSpeaker, LanguageKnowledge) и визуальное представление (Sprite, DamageStateVisuals);
- Определён новый источник «крови» с использованием компонента Bloodstream (значение Sap);
- Компоненты Butcherable, Inventory и специальные параметры (MobThresholds) также обновлены;
- Введена новая механика реформирования через компонент Reform с соответствующим действием (DionaReformAction).
Рекомендуется протестировать всю цепочку взаимодействия, поскольку изменения затрагивают как гейплей, так и визуальное представление.
3780-3840
: Новая сущность «Reindeer Buck»
Добавлена сущность Reindeer Buck с:
- Подробными настройками физики (Fixtures, Density),
- Обновлёнными визуальными состояниями (DamageStateVisuals),
- Компонентом Butcherable и специфичными параметрами для взаимодействия (MeleeWeapon, NPCRetaliation).
Убедитесь, что параметры физики и повреждений согласованы с общей системой мобов.
3841-3872
: Новая сущность «Reindeer Doe»
Эта сущность является вариантом Reindeer Buck с изменёнными характеристиками оружия (MeleeWeapon) и визуальными состояниями. Проверьте, что различия между Buck и Doe корректно отражены в балансе и эстетике игры.Resources/Changelog/Changelog.yml (8)
3837-3844
: Проверка возврата рецептов взрывчатых технологий
Изменение возвращает рецепты (триггеры, полезные нагрузки, сигнализатор) в протолат после их недокументированного удаления. Убедитесь, что данное исправление соответствует намерениям команды и задокументировано в технических спецификациях.
3845-3851
: Скрытие спрайтов при надевании верхней одежды
Новая запись гарантирует, что при использовании верхней одежды, спрайты PDA и ремней будут скрываться, что повышает визуальную чистоту интерфейса. Это улучшение выглядит логичным и соответствует требованиям по эстетике.
3852-3859
: Корректировка удаления ключей шифрования с интеркома
Теперь при удалении ключей из интеркома избыточные ключи сбрасываются у пользователя (падают у ног), что должно улучшить удобство использования. Проверьте, что подобное поведение согласуется с ожиданиями игроков и тестами пользовательского опыта.
3860-3866
: Добавление новых бар-сайнов
Новые записи для бар-сайнов «Maltroach» и «Whiskey Echoes» аккуратно интегрированы и отражают вклад сообщества (основано на работах MoffNyan и cerebralerror). Убедитесь, что форматирование и стилистика соответствуют остальным записям в журнале изменений.
3868-3873
: Изменение статуса ограничения для Flare Shells
Запись сообщает, что флайршеллы больше не классифицируются как запрещённый предмет. Это корректировка фикса, которая должна улучшить игровой баланс – проверьте, что данное изменение протестировано и не оказывает негативного влияния на игровой процесс.
3874-3880
: Добавление аудиоэффектов для игрушек и bike horns
Изменение гарантирует, что все игрушки и сигнальные рожки теперь воспроизводят соответствующие звуки, что улучшает аудио-обратную связь и качество взаимодействия с объектами в игре.
3881-3892
: Расширение возможностей обработки трупов и взаимодействия с мелкой живностью
Изменения позволяют расчленять трупы различных мобов (Argocytes, Mimics, Butterflies, Bees, Space Kangaroos, Laser Raptors, Watchers), а также перетаскивать бабочки в мусорные мешки и измельчать их вместе с пчёлами в реактивном градуснике. Рекомендуется тщательно протестировать влияние этих изменений на баланс игры и взаимодействие с другими системами.
3893-3899
: Исправление дублирования окон хранения
Исправление устраняет проблему с дублированием окон хранения при переподключении, что значительно улучшает удобство работы с UI. Проведите дополнительные проверки, чтобы убедиться в отсутствии побочных эффектов.
public bool TryRepulseAttract(MapCoordinates position, EntityUid? user, float speed, float range, EntityWhitelist? whitelist = null, CollisionGroup layer = CollisionGroup.SingularityLayer) | ||
{ | ||
_entSet.Clear(); | ||
var epicenter = position.Position; | ||
_lookup.GetEntitiesInRange(position.MapId, epicenter, range, _entSet, flags: LookupFlags.Dynamic | LookupFlags.Sundries); | ||
|
||
foreach (var target in _entSet) | ||
{ | ||
if (!_physicsQuery.TryGetComponent(target, out var physics) | ||
|| (physics.CollisionLayer & (int)layer) != 0x0) // exclude layers like ghosts | ||
continue; | ||
|
||
if (_whitelist.IsWhitelistFail(whitelist, target)) | ||
continue; | ||
|
||
var targetPos = _xForm.GetWorldPosition(target); | ||
|
||
// vector from epicenter to target entity | ||
var direction = targetPos - epicenter; | ||
|
||
if (direction == Vector2.Zero) | ||
continue; | ||
|
||
// attract: throw all items directly to to the epicenter | ||
// repulse: throw them up to the maximum range | ||
var throwDirection = speed < 0 ? -direction : direction.Normalized() * (range - direction.Length()); | ||
|
||
_throw.TryThrow(target, throwDirection, Math.Abs(speed), user, recoil: false, compensateFriction: true); | ||
} | ||
|
||
return true; | ||
} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion
Оптимизируйте обработку сущностей и добавьте защиту от краевых случаев.
-
Производительность:
- HashSet
_entSet
создается для каждого вызова, что может вызвать проблемы с GC - Возможно избыточное получение компонентов в цикле
- HashSet
-
Безопасность:
- Отсутствует проверка на null для MapId
- Нет защиты от экстремальных значений speed и range
Предлагаемые улучшения:
public bool TryRepulseAttract(MapCoordinates position, EntityUid? user, float speed, float range, EntityWhitelist? whitelist = null, CollisionGroup layer = CollisionGroup.SingularityLayer)
{
+ if (!position.MapId.IsValid())
+ return false;
+
+ if (range <= 0 || float.IsNaN(range) || float.IsInfinity(range))
+ return false;
+
+ if (float.IsNaN(speed) || float.IsInfinity(speed))
+ return false;
+
_entSet.Clear();
var epicenter = position.Position;
_lookup.GetEntitiesInRange(position.MapId, epicenter, range, _entSet, flags: LookupFlags.Dynamic | LookupFlags.Sundries);
Рекомендации по архитектуре:
- Рассмотрите возможность использования объектного пула для
HashSet<EntityUid>
- Добавьте конфигурационные параметры для ограничения максимальных значений speed и range
📝 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.
public bool TryRepulseAttract(MapCoordinates position, EntityUid? user, float speed, float range, EntityWhitelist? whitelist = null, CollisionGroup layer = CollisionGroup.SingularityLayer) | |
{ | |
_entSet.Clear(); | |
var epicenter = position.Position; | |
_lookup.GetEntitiesInRange(position.MapId, epicenter, range, _entSet, flags: LookupFlags.Dynamic | LookupFlags.Sundries); | |
foreach (var target in _entSet) | |
{ | |
if (!_physicsQuery.TryGetComponent(target, out var physics) | |
|| (physics.CollisionLayer & (int)layer) != 0x0) // exclude layers like ghosts | |
continue; | |
if (_whitelist.IsWhitelistFail(whitelist, target)) | |
continue; | |
var targetPos = _xForm.GetWorldPosition(target); | |
// vector from epicenter to target entity | |
var direction = targetPos - epicenter; | |
if (direction == Vector2.Zero) | |
continue; | |
// attract: throw all items directly to to the epicenter | |
// repulse: throw them up to the maximum range | |
var throwDirection = speed < 0 ? -direction : direction.Normalized() * (range - direction.Length()); | |
_throw.TryThrow(target, throwDirection, Math.Abs(speed), user, recoil: false, compensateFriction: true); | |
} | |
return true; | |
} | |
public bool TryRepulseAttract(MapCoordinates position, EntityUid? user, float speed, float range, EntityWhitelist? whitelist = null, CollisionGroup layer = CollisionGroup.SingularityLayer) | |
{ | |
if (!position.MapId.IsValid()) | |
return false; | |
if (range <= 0 || float.IsNaN(range) || float.IsInfinity(range)) | |
return false; | |
if (float.IsNaN(speed) || float.IsInfinity(speed)) | |
return false; | |
_entSet.Clear(); | |
var epicenter = position.Position; | |
_lookup.GetEntitiesInRange(position.MapId, epicenter, range, _entSet, flags: LookupFlags.Dynamic | LookupFlags.Sundries); | |
foreach (var target in _entSet) | |
{ | |
if (!_physicsQuery.TryGetComponent(target, out var physics) | |
|| (physics.CollisionLayer & (int)layer) != 0x0) // exclude layers like ghosts | |
continue; | |
if (_whitelist.IsWhitelistFail(whitelist, target)) | |
continue; | |
var targetPos = _xForm.GetWorldPosition(target); | |
// vector from epicenter to target entity | |
var direction = targetPos - epicenter; | |
if (direction == Vector2.Zero) | |
continue; | |
// attract: throw all items directly to to the epicenter | |
// repulse: throw them up to the maximum range | |
var throwDirection = speed < 0 ? -direction : direction.Normalized() * (range - direction.Length()); | |
_throw.TryThrow(target, throwDirection, Math.Abs(speed), user, recoil: false, compensateFriction: true); | |
} | |
return true; | |
} |
[DataField, AutoNetworkedField] | ||
public AltFireAttackType AttackType = AltFireAttackType.Light; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Рассмотрите добавление валидации для AttackType.
Поле AttackType
может принимать любую комбинацию флагов, что может привести к неожиданному поведению.
🏁 Script executed:
#!/bin/bash
# Поиск всех использований AltFireAttackType для проверки обработки комбинаций флагов
rg "AltFireAttackType" -A 5
Length of output: 2203
Проверка валидации поля AttackType
- В файле
Content.Shared/Weapons/Melee/Components/AltFireMeleeComponent.cs
полеAttackType
инициализировано значениемAltFireAttackType.Light
. - Благодаря атрибуту
[Flags]
перечислениеAltFireAttackType
позволяет комбинировать флаги, однако обработка вContent.Client/Weapons/Melee/MeleeWeaponSystem.cs
выполняется через конструкциюswitch-case
, ожидающую одиночное значение (Light
,Heavy
илиDisarm
). - При наличии комбинации флагов поведение может оказаться неожиданным. Рекомендуется добавить валидацию, которая гарантирует, что значение
AttackType
соответствует одному из допустимых вариантов или же реализовать корректную обработку комбинаций.
[DataField, AutoNetworkedField] | ||
public float Speed = 10f; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
💡 Verification agent
🧩 Analysis chain
Рекомендуется добавить валидацию значения Speed.
Необходимо убедиться, что значение Speed
не может быть отрицательным или слишком большим.
🏁 Script executed:
#!/bin/bash
# Поиск использования Speed для проверки наличия валидации
rg "Speed\s*=" -A 5
Length of output: 56313
Обрати внимание на валидацию значения поля Speed в компоненте MeleeThrowOnHitComponent.
В текущей реализации (строки 19–20 файла Content.Shared/Weapons/Melee/Components/MeleeThrowOnHitComponent.cs) поле инициализируется значением 10f без какой-либо проверки. При этом поиск по коду не выявил наличия логики, гарантирующей, что значение Speed не может быть отрицательным или слишком высоким.
Рекомендации:
- Добавить проверку при установке значения Speed (например, в сеттере или во время инициализации компонента). Это позволит гарантировать, что значение всегда находится в допустимом диапазоне, например, от 0 до максимально допустимого порога.
- Рассмотреть возможность логирования или обработки некорректных значений для упрощения отладки.
🆑
Summary by CodeRabbit
Новые возможности
Исправления и улучшения