From 91107d443c033b8e91d89e64bf1f2a95fc123cfa Mon Sep 17 00:00:00 2001 From: VMSolidus Date: Wed, 18 Sep 2024 23:29:41 -0400 Subject: [PATCH] [Port] StepTriggerGroup From WhiteDream (#929) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # Description This is a port of https://github.com/WWhiteDreamProject/wwdpublic/pull/53 from White Dream. This PR improves the StepTriggerImmune component by making it operate on a more granular Blacklist system, such that StepTriggerImmune entities can further clarify via prototypes which kinds of floor traps they are immune to, such as landmines/mousetraps, and not have blanket immunity to everything. Because it turns out things like Lava and Soap also were caught by the immunity, when really we just wanted Harpies & Felinids to not trigger landmines.

Media

> # Описание > Необходимо настроить модификатор урона, чтобы IPC не получали урон от осколков стекла. > > Иммунитет StepTriggerImmuneComponent доработан. Теперь имеются несколько типов (types): Lava - тип тайла, наступив на который появляется урон. Это собственно лава и LiquidPlasma Landmine - мины. Chasm - дырка в карте, куда можно провалиться Mousetrap - Мышеловка SlipTile - Все, что должно подскальзывать игроков, имеющее размер тайла SlipEntity - Все, что должно подскальзывать игроков, имеющее развер энтити. Разделено для баланса. Самые ловки могут игнорировать мелкие предметы (энтити), т.е. уворачиваться от них. Но большие по площади вещи (тайлы по типу разлитой воды, бананиума) просчитываются отдельно. > > # Изменения > * [x] Улучшить StepTriggerSystem (Immune) > * [x] Добавлены типы триггера. - Lava Landmine Shard Chasm Mousetrap SlipTile SlipEntity > * [x] Исправить осколки у IPC > * [x] Исправить отсутствие урона от лавы и падение в дыры у фелинидов и гарпий. > > 🆑 Hell_Cat > > * Feature: StepTriggerSystem is improved | Улучшена StepTriggerSystem > * fix: IPC: Immunity for shards and SpiderWeb | Иммунитет осколкам. > * fix: Felinid | Фелиниды : Immunity for Shard Landmine Mousetrap SlipEntities | Иммунитет для осколков, жидкости, мин, мышеловок, мыла и бананов. > * fix: Harpy | Гарпия : Immunity for Shards Landmine Mousetrap | Иммунитет для осколков, жидкости, мин и мышеловок. > * fix: Mice | Мыши : Don't blow up on landmines | Мыши не подрываются на минах.

# Changelog :cl: Hell_Cat Feature: StepTriggerSystem has been improved with new StepTriggerGroups. Additionally, the StepTriggerImmune component now allows declaring for specific StepTriggerGroups for a given entity to be immune to. Some examples may be, Felinids, Mice, and Harpies being unable to set off Landmines. --------- Signed-off-by: VMSolidus Co-authored-by: Ivan <126400932+HellCatten@users.noreply.github.com> Co-authored-by: FoxxoTrystan <45297731+FoxxoTrystan@users.noreply.github.com> # Conflicts: # Content.Shared/StepTrigger/Components/StepTriggerComponent.cs # Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs # Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs # Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs # Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs # Resources/Prototypes/Entities/Effects/chemistry_effects.yml # Resources/Prototypes/Entities/Mobs/NPCs/animals.yml # Resources/Prototypes/Entities/Mobs/Player/ipc.yml # Resources/Prototypes/Entities/Mobs/Species/harpy.yml # Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml # Resources/Prototypes/Entities/Objects/Devices/pda.yml # Resources/Prototypes/Entities/Objects/Fun/dice.yml # Resources/Prototypes/Entities/Objects/Materials/shards.yml # Resources/Prototypes/Entities/Objects/Misc/land_mine.yml # Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml # Resources/Prototypes/Entities/Tiles/bananium.yml # Resources/Prototypes/Entities/Tiles/chasm.yml # Resources/Prototypes/Entities/Tiles/lava.yml # Resources/Prototypes/Entities/Tiles/liquid_plasma.yml # Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml # Resources/Prototypes/Traits/skills.yml --- .../Components/StepTriggerComponent.cs | 10 +- .../Components/StepTriggerImmuneComponent.cs | 2 +- .../Prototypes/StepTriggerGroup.cs | 119 +++++++++--------- .../Prototypes/StepTriggerTypePrototype.cs | 28 ++--- .../StepTrigger/Systems/StepTriggerSystem.cs | 3 - .../Entities/Effects/chemistry_effects.yml | 2 +- .../Prototypes/Entities/Mobs/NPCs/animals.yml | 4 +- .../Prototypes/Entities/Mobs/Player/ipc.yml | 2 +- .../Entities/Mobs/Species/diona.yml | 4 + .../Entities/Mobs/Species/harpy.yml | 2 +- .../Entities/Objects/Devices/mousetrap.yml | 2 +- .../Entities/Objects/Devices/pda.yml | 2 +- .../Prototypes/Entities/Objects/Fun/dice.yml | 2 +- .../Entities/Objects/Materials/shards.yml | 2 +- .../Entities/Objects/Misc/land_mine.yml | 2 +- .../Objects/Specific/Janitorial/soap.yml | 6 +- .../Prototypes/Entities/Tiles/bananium.yml | 2 +- Resources/Prototypes/Entities/Tiles/chasm.yml | 2 +- Resources/Prototypes/Entities/Tiles/lava.yml | 2 +- .../Entities/Tiles/liquid_plasma.yml | 2 +- .../Entities/Mobs/Species/felinid.yml | 2 +- Resources/Prototypes/Traits/skills.yml | 2 +- 22 files changed, 96 insertions(+), 108 deletions(-) diff --git a/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs b/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs index df0c1d7ea4..d12c2c983e 100644 --- a/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs +++ b/Content.Shared/StepTrigger/Components/StepTriggerComponent.cs @@ -54,22 +54,18 @@ public sealed partial class StepTriggerComponent : Component public bool IgnoreWeightless; /// - /// Does this have separate "StepOn" and "StepOff" triggers. + /// Does this have separate "StepOn" and "StepOff" triggers. /// [DataField, AutoNetworkedField] public bool StepOn = false; /// - /// If TriggerGroups is specified, it will check StepTriggerImmunityComponent to have the same TriggerType to activate immunity + /// If TriggerGroups is specified, it will check StepTriggerImmunityComponent to have the same TriggerType to activate immunity /// - // WD EDIT [DataField] public StepTriggerGroup? TriggerGroups; } [RegisterComponent] [Access(typeof(StepTriggerSystem))] -public sealed partial class StepTriggerActiveComponent : Component -{ - -} +public sealed partial class StepTriggerActiveComponent : Component { } diff --git a/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs b/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs index 2a91b4b62e..1b92905fa6 100644 --- a/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs +++ b/Content.Shared/StepTrigger/Components/StepTriggerImmuneComponent.cs @@ -18,7 +18,7 @@ namespace Content.Shared.StepTrigger.Components; public sealed partial class StepTriggerImmuneComponent : Component { /// - /// WhiteList of immunity step triggers. + /// WhiteList of immunity step triggers. /// [DataField] public StepTriggerGroup? Whitelist; diff --git a/Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs b/Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs index 8863a5de61..5b64085e9a 100644 --- a/Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs +++ b/Content.Shared/StepTrigger/Prototypes/StepTriggerGroup.cs @@ -1,77 +1,72 @@ -using Content.Shared.Damage.Prototypes; -using Content.Shared.StepTrigger.Components; -using Content.Shared.StepTrigger.Systems; +using Content.Shared.StepTrigger.Components; using Robust.Shared.Prototypes; using Robust.Shared.Serialization; -using Robust.Shared.Serialization.TypeSerializers.Implementations.Custom.Prototype.List; -namespace Content.Shared.StepTrigger.Prototypes +namespace Content.Shared.StepTrigger.Prototypes; + +/// +/// A group of +/// Used to determine StepTriggerTypes like Tags. +/// Used for better work with Immunity. +/// StepTriggerTypes in StepTriggerTypes.yml +/// +/// +/// stepTriggerGroups: +/// types: +/// - Lava +/// - Landmine +/// - Shard +/// - Chasm +/// - Mousetrap +/// - SlipTile +/// - SlipEntity +/// +[DataDefinition] +[Serializable, NetSerializable] +public sealed partial class StepTriggerGroup { + [DataField] + public List>? Types = null; + /// - /// A group of - /// Used to determine StepTriggerTypes like Tags. - /// Used for better work with Immunity. - /// StepTriggerTypes in StepTriggerTypes.yml - /// WD EDIT + /// Checks if types of this StepTriggerGroup is similar to types of AnotherGroup /// - /// - /// stepTriggerGroups: - /// types: - /// - Lava - /// - Landmine - /// - Shard - /// - Chasm - /// - Mousetrap - /// - SlipTile - /// - SlipEntity - /// - [DataDefinition] - [Serializable, NetSerializable] - public sealed partial class StepTriggerGroup + public bool IsValid(StepTriggerGroup? anotherGroup) { - [DataField] - public List>? Types = null; - - /// - /// Checks if types of this StepTriggerGroup is similar to types of AnotherGroup - /// - public bool IsValid(StepTriggerGroup? AnotherGroup) - { - if (Types != null) - { - foreach (var type in Types) - { - if (AnotherGroup != null - && AnotherGroup.Types != null - && AnotherGroup.Types.Contains(type)) - return true; - } - } + if (Types is null) return false; - } - /// - /// Checks validation (if types of this StepTriggerGroup are similar to types of - /// another StepTriggerComponent. - /// - public bool IsValid(StepTriggerComponent component) + foreach (var type in Types) { - if (component.TriggerGroups != null) - { - return IsValid(component.TriggerGroups); - } - return false; + if (anotherGroup != null + && anotherGroup.Types != null + && anotherGroup.Types.Contains(type)) + return true; } + return false; + } - /// - /// Checks validation (if types of this StepTriggerGroup are similar to types of - /// another StepTriggerImmuneComponent. - /// - public bool IsValid(StepTriggerImmuneComponent component) - { - if (component.Whitelist != null) - return IsValid(component.Whitelist); + /// + /// Checks validation (if types of this StepTriggerGroup are similar to types of + /// another StepTriggerComponent. + /// + public bool IsValid(StepTriggerComponent component) + { + if (component.TriggerGroups is null) return false; - } + + return IsValid(component.TriggerGroups); + } + + /// + /// Checks validation (if types of this StepTriggerGroup are similar to types of + /// another StepTriggerImmuneComponent. + /// + public bool IsValid(StepTriggerImmuneComponent component) + { + if (component.Whitelist is null) + return false; + + return IsValid(component.Whitelist); } } diff --git a/Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs b/Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs index 0142d2a453..732eb4b732 100644 --- a/Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs +++ b/Content.Shared/StepTrigger/Prototypes/StepTriggerTypePrototype.cs @@ -1,19 +1,15 @@ using Robust.Shared.Prototypes; -namespace Content.Shared.StepTrigger.Prototypes -{ - /// - /// Prototype representing a StepTriggerType in YAML. - /// Meant to only have an ID property, as that is the only thing that - /// gets saved in StepTriggerGroup. - /// - // WD EDIT - [Prototype("stepTriggerType")] - public sealed partial class StepTriggerTypePrototype : IPrototype - { - [ViewVariables] - [IdDataField] - public string ID { get; private set; } = default!; - } -} +namespace Content.Shared.StepTrigger.Prototypes; +/// +/// Prototype representing a StepTriggerType in YAML. +/// Meant to only have an ID property, as that is the only thing that +/// gets saved in StepTriggerGroup. +/// +[Prototype] +public sealed partial class StepTriggerTypePrototype : IPrototype +{ + [ViewVariables, IdDataField] + public string ID { get; private set; } = default!; +} diff --git a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs index d1ae0e9afb..d0cd5c4b4e 100644 --- a/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs +++ b/Content.Shared/StepTrigger/Systems/StepTriggerSystem.cs @@ -4,7 +4,6 @@ using Robust.Shared.Map.Components; using Robust.Shared.Physics; using Robust.Shared.Physics.Components; using Robust.Shared.Physics.Events; -using Enumerable = System.Linq.Enumerable; namespace Content.Shared.StepTrigger.Systems; @@ -119,7 +118,6 @@ public sealed class StepTriggerSystem : EntitySystem private bool CanTrigger(EntityUid uid, EntityUid otherUid, StepTriggerComponent component) { - // WD EDIT START if (!component.Active || component.CurrentlySteppedOn.Contains(otherUid)) return false; @@ -129,7 +127,6 @@ public sealed class StepTriggerSystem : EntitySystem && component.TriggerGroups != null && component.TriggerGroups.IsValid(stepTriggerImmuneComponent)) return false; - // WD EDIT END // Can't trigger if we don't ignore weightless entities // and the entity is flying or currently weightless diff --git a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml index 29e77c5a29..469bab3278 100644 --- a/Resources/Prototypes/Entities/Effects/chemistry_effects.yml +++ b/Resources/Prototypes/Entities/Effects/chemistry_effects.yml @@ -77,7 +77,7 @@ animationState: foam-dissolve - type: Slippery - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - SlipTile # disabled until foam reagent duplication is fixed diff --git a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml index eed2b8a58a..01eed04313 100644 --- a/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml +++ b/Resources/Prototypes/Entities/Mobs/NPCs/animals.yml @@ -1689,10 +1689,10 @@ - type: FireVisuals sprite: Mobs/Effects/onfire.rsi normalState: Mouse_burning - - type: StepTriggerImmune # WD EDIT START + - type: StepTriggerImmune whitelist: types: - - Landmine # END + - Landmine - type: entity parent: MobMouse diff --git a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml index c69b40c1f8..247226dc7d 100644 --- a/Resources/Prototypes/Entities/Mobs/Player/ipc.yml +++ b/Resources/Prototypes/Entities/Mobs/Player/ipc.yml @@ -111,7 +111,7 @@ - type: OfferItem - type: LayingDown - type: Carriable - - type: StepTriggerImmune #WD EDIT + - type: StepTriggerImmune whitelist: types: - Shard diff --git a/Resources/Prototypes/Entities/Mobs/Species/diona.yml b/Resources/Prototypes/Entities/Mobs/Species/diona.yml index 42383d9a42..81c9e59616 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/diona.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/diona.yml @@ -114,6 +114,10 @@ walkModifier: 0.75 - type: SpeedModifierImmunity - type: NoSlip + - type: StepTriggerImmune + whitelist: + types: + - Shard - type: entity parent: BaseSpeciesDummy diff --git a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml index 5dbeb6a21d..8882da868b 100644 --- a/Resources/Prototypes/Entities/Mobs/Species/harpy.yml +++ b/Resources/Prototypes/Entities/Mobs/Species/harpy.yml @@ -123,7 +123,7 @@ - GalacticCommon - SolCommon - type: StepTriggerImmune - whitelist: # WD EDIT + whitelist: types: - Shard - Landmine diff --git a/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml b/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml index 7e3d5c14ab..a93cd545bf 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/mousetrap.yml @@ -13,7 +13,7 @@ - type: StepTrigger intersectRatio: 0.2 requiredTriggeredSpeed: 0 - triggerGroups: # WD EDIT + triggerGroups: types: - Mousetrap - type: Mousetrap diff --git a/Resources/Prototypes/Entities/Objects/Devices/pda.yml b/Resources/Prototypes/Entities/Objects/Devices/pda.yml index 1768af15c2..1a38899783 100644 --- a/Resources/Prototypes/Entities/Objects/Devices/pda.yml +++ b/Resources/Prototypes/Entities/Objects/Devices/pda.yml @@ -272,7 +272,7 @@ paralyzeTime: 4 launchForwardsMultiplier: 1.5 - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - SlipEntity - type: CollisionWake diff --git a/Resources/Prototypes/Entities/Objects/Fun/dice.yml b/Resources/Prototypes/Entities/Objects/Fun/dice.yml index aba6ebcb4c..f7395ef9ca 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/dice.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/dice.yml @@ -119,7 +119,7 @@ mask: - ItemMask - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - Shard intersectRatio: 0.2 diff --git a/Resources/Prototypes/Entities/Objects/Materials/shards.yml b/Resources/Prototypes/Entities/Objects/Materials/shards.yml index 9e832cd473..3468534314 100644 --- a/Resources/Prototypes/Entities/Objects/Materials/shards.yml +++ b/Resources/Prototypes/Entities/Objects/Materials/shards.yml @@ -64,7 +64,7 @@ - !type:DoActsBehavior acts: [ "Destruction" ] - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - Shard intersectRatio: 0.2 diff --git a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml index a6ff916089..97053660a1 100644 --- a/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml +++ b/Resources/Prototypes/Entities/Objects/Misc/land_mine.yml @@ -40,7 +40,7 @@ params: maxDistance: 10 - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - Landmine requiredTriggeredSpeed: 0 diff --git a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml index f816a37486..5fe88f8d0c 100644 --- a/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml +++ b/Resources/Prototypes/Entities/Objects/Specific/Janitorial/soap.yml @@ -24,7 +24,7 @@ paralyzeTime: 2 launchForwardsMultiplier: 1.5 - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - SlipEntity intersectRatio: 0.2 @@ -160,7 +160,7 @@ paralyzeTime: 5 launchForwardsMultiplier: 2.5 - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - SlipEntity intersectRatio: 0.04 @@ -204,7 +204,7 @@ - type: Slippery paralyzeTime: 2 - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - SlipEntity - type: Item diff --git a/Resources/Prototypes/Entities/Tiles/bananium.yml b/Resources/Prototypes/Entities/Tiles/bananium.yml index 9f1703c516..9e8a46b2c3 100644 --- a/Resources/Prototypes/Entities/Tiles/bananium.yml +++ b/Resources/Prototypes/Entities/Tiles/bananium.yml @@ -47,7 +47,7 @@ paralyzeTime: 2 launchForwardsMultiplier: 1.5 - type: StepTrigger - triggerGroups: # WD EDIT + triggerGroups: types: - SlipTile intersectRatio: 0.2 diff --git a/Resources/Prototypes/Entities/Tiles/chasm.yml b/Resources/Prototypes/Entities/Tiles/chasm.yml index c77228c2d5..85bc7b5ab3 100644 --- a/Resources/Prototypes/Entities/Tiles/chasm.yml +++ b/Resources/Prototypes/Entities/Tiles/chasm.yml @@ -14,7 +14,7 @@ blacklist: tags: - Catwalk - triggerGroups: # WD EDIT + triggerGroups: types: - Chasm - type: Transform diff --git a/Resources/Prototypes/Entities/Tiles/lava.yml b/Resources/Prototypes/Entities/Tiles/lava.yml index 5ede7efa39..9d61304af9 100644 --- a/Resources/Prototypes/Entities/Tiles/lava.yml +++ b/Resources/Prototypes/Entities/Tiles/lava.yml @@ -13,7 +13,7 @@ blacklist: tags: - Catwalk - triggerGroups: # WD EDIT + triggerGroups: types: - Lava - type: Lava diff --git a/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml b/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml index 7b33437b46..500286ead3 100644 --- a/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml +++ b/Resources/Prototypes/Entities/Tiles/liquid_plasma.yml @@ -13,7 +13,7 @@ blacklist: tags: - Catwalk - triggerGroups: # WD EDIT + triggerGroups: types: - Lava - type: Lava diff --git a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml index 4f0938d927..411eb13444 100644 --- a/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml +++ b/Resources/Prototypes/Nyanotrasen/Entities/Mobs/Species/felinid.yml @@ -80,7 +80,7 @@ stripTimeReduction: 0 stripTimeMultiplier: 0.667 - type: StepTriggerImmune - whitelist: # WD EDIT + whitelist: types: - Shard - Landmine diff --git a/Resources/Prototypes/Traits/skills.yml b/Resources/Prototypes/Traits/skills.yml index ed7c0c8a47..fa79666c7a 100644 --- a/Resources/Prototypes/Traits/skills.yml +++ b/Resources/Prototypes/Traits/skills.yml @@ -270,7 +270,7 @@ points: -3 components: - type: StepTriggerImmune - whitelist: # WD EDIT + whitelist: types: - Shard - Landmine