From ad65bd1e58b25366fbcfff26cd2844c7deb1b525 Mon Sep 17 00:00:00 2001 From: Aviu00 <93730715+Aviu00@users.noreply.github.com> Date: Thu, 6 Jun 2024 10:22:49 +0000 Subject: [PATCH] =?UTF-8?q?=D0=A4=D0=B8=D0=BA=D1=81=D1=8B=20(#332)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * - fix: Fix desword flipping on server. * - fix: Fix invalid cult target. * - fix: Fix narsie summon. * - tweak: Weaker heavy attack. * - tweak: Less toy desword stamina damage. * - fix: FrameUpdate. * - tweak: Less blunt bleed. --- .../_White/Animations/FlipOnHitSystem.cs | 23 +++-------- .../_White/Telescope/TelescopeSystem.cs | 4 +- .../_White/Animations/FlipOnHitSystem.cs | 17 ++++++++ .../_White/Cult/GameRule/CultRuleSystem.cs | 31 +++++++++----- .../RandomDamageSystem/RandomDamageSystem.cs | 2 +- .../Weapons/Melee/SharedMeleeWeaponSystem.cs | 2 +- .../Animations/SharedFlipOnHitSystem.cs | 40 +++++++++++++++++++ Resources/Prototypes/Damage/modifier_sets.yml | 2 +- .../Prototypes/Entities/Objects/Fun/toys.yml | 2 - 9 files changed, 87 insertions(+), 36 deletions(-) create mode 100644 Content.Server/_White/Animations/FlipOnHitSystem.cs create mode 100644 Content.Shared/_White/Animations/SharedFlipOnHitSystem.cs diff --git a/Content.Client/_White/Animations/FlipOnHitSystem.cs b/Content.Client/_White/Animations/FlipOnHitSystem.cs index 68af1b8963..5b02152b24 100644 --- a/Content.Client/_White/Animations/FlipOnHitSystem.cs +++ b/Content.Client/_White/Animations/FlipOnHitSystem.cs @@ -1,6 +1,4 @@ using Content.Shared._White.Animations; -using Content.Shared.Item.ItemToggle.Components; -using Content.Shared.Weapons.Melee.Events; using Robust.Client.Animations; using Robust.Client.GameObjects; using Robust.Shared.Animations; @@ -8,7 +6,7 @@ using Robust.Shared.Timing; namespace Content.Client._White.Animations; -public sealed class FlipOnHitSystem : EntitySystem +public sealed class FlipOnHitSystem : SharedFlipOnHitSystem { [Dependency] private readonly AnimationPlayerSystem _animationSystem = default!; [Dependency] private readonly IGameTiming _timing = default!; @@ -17,8 +15,8 @@ public sealed class FlipOnHitSystem : EntitySystem { base.Initialize(); - SubscribeLocalEvent(OnHit); SubscribeLocalEvent(OnAnimationComplete); + SubscribeAllEvent(ev => PlayAnimation(GetEntity(ev.User))); } private void OnAnimationComplete(Entity ent, ref AnimationCompletedEvent args) @@ -29,28 +27,17 @@ public sealed class FlipOnHitSystem : EntitySystem PlayAnimation(ent); } - private void OnHit(Entity ent, ref MeleeHitEvent args) + protected override void PlayAnimation(EntityUid user) { if (!_timing.IsFirstTimePredicted) return; - if (args.HitEntities.Count == 0) - return; - - if (TryComp(ent, out ItemToggleComponent? itemToggle) && !itemToggle.Activated) - return; - - if (_animationSystem.HasRunningAnimation(args.User, EmoteAnimationSystem.AnimationKey)) + if (_animationSystem.HasRunningAnimation(user, EmoteAnimationSystem.AnimationKey)) { - EnsureComp(args.User); + EnsureComp(user); return; } - PlayAnimation(args.User); - } - - private void PlayAnimation(EntityUid user) - { RemComp(user); var baseAngle = Angle.Zero; diff --git a/Content.Client/_White/Telescope/TelescopeSystem.cs b/Content.Client/_White/Telescope/TelescopeSystem.cs index 2e2f3f4901..36bd8a07d4 100644 --- a/Content.Client/_White/Telescope/TelescopeSystem.cs +++ b/Content.Client/_White/Telescope/TelescopeSystem.cs @@ -23,9 +23,9 @@ public sealed class TelescopeSystem : SharedTelescopeSystem private ScalingViewport? _viewport; - public override void Update(float frameTime) + public override void FrameUpdate(float frameTime) { - base.Update(frameTime); + base.FrameUpdate(frameTime); if (_timing.ApplyingState || !_timing.IsFirstTimePredicted || !_input.MouseScreenPosition.IsValid) return; diff --git a/Content.Server/_White/Animations/FlipOnHitSystem.cs b/Content.Server/_White/Animations/FlipOnHitSystem.cs new file mode 100644 index 0000000000..714cad5bc8 --- /dev/null +++ b/Content.Server/_White/Animations/FlipOnHitSystem.cs @@ -0,0 +1,17 @@ +using Content.Shared._White.Animations; +using Robust.Shared.Player; + +namespace Content.Server._White.Animations; + +public sealed class FlipOnHitSystem : SharedFlipOnHitSystem +{ + protected override void PlayAnimation(EntityUid user) + { + var filter = Filter.Pvs(user, entityManager: EntityManager); + + if (TryComp(user, out var actor)) + filter.RemovePlayer(actor.PlayerSession); + + RaiseNetworkEvent(new FlipOnHitEvent(GetNetEntity(user)), filter); + } +} diff --git a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs index 0a96c038a1..2c4153514b 100644 --- a/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs +++ b/Content.Server/_White/Cult/GameRule/CultRuleSystem.cs @@ -123,25 +123,34 @@ public sealed class CultRuleSystem : GameRuleSystem private void OnNarsieSummon(CultNarsieSummoned ev) { - var query = EntityQueryEnumerator(); + var query = + EntityQueryEnumerator(); + + List> cultists = new(); + + while (query.MoveNext(out var uid, out _, out var mindContainer, out _, out var transform)) + { + cultists.Add((uid, mindContainer, transform)); + } + var rulesQuery = QueryActiveRules(); while (rulesQuery.MoveNext(out _, out var cult, out _)) { cult.WinCondition = CultWinCondition.Win; _roundEndSystem.EndRound(); - while (query.MoveNext(out var uid, out _, out var mindContainer, out _)) + foreach (var ent in cultists) { - if (!mindContainer.HasMind || mindContainer.Mind is null) - { + if (ent.Comp1.Mind is null) continue; - } - var reaper = Spawn(cult.ReaperPrototype, Transform(uid).Coordinates); - _mindSystem.TransferTo(mindContainer.Mind.Value, reaper); + var reaper = Spawn(cult.ReaperPrototype, ent.Comp2.Coordinates); + _mindSystem.TransferTo(ent.Comp1.Mind.Value, reaper); - _bodySystem.GibBody(uid); + _bodySystem.GibBody(ent); } + + return; } } @@ -211,13 +220,13 @@ public sealed class CultRuleSystem : GameRuleSystem var selectedCultists = _antagSelection.ChooseAntags(cultistsToSelect, eligiblePlayers); + var potentialTargets = FindPotentialTargets(selectedCultists); + rule.CultTarget = _random.PickAndTake(potentialTargets).Mind; + foreach (var cultist in selectedCultists) { MakeCultist(cultist, rule); } - - var potentialTargets = FindPotentialTargets(selectedCultists); - rule.CultTarget = _random.PickAndTake(potentialTargets).Mind; } public MindComponent? GetTarget() diff --git a/Content.Server/_White/Other/RandomDamageSystem/RandomDamageSystem.cs b/Content.Server/_White/Other/RandomDamageSystem/RandomDamageSystem.cs index 0a127622d7..8a7c46e010 100644 --- a/Content.Server/_White/Other/RandomDamageSystem/RandomDamageSystem.cs +++ b/Content.Server/_White/Other/RandomDamageSystem/RandomDamageSystem.cs @@ -22,7 +22,7 @@ public sealed class RandomDamageSystem : EntitySystem { var damage = _random.NextFloat() * ent.Comp.Max; if (args.Direction != null) // Heavy attack - damage *= 0.7f; + damage *= 0.5f; args.BonusDamage = new DamageSpecifier(_prototypeManager.Index("Slash"), damage); } } diff --git a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs index 4ac148a7b3..6ab310cbb4 100644 --- a/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs +++ b/Content.Shared/Weapons/Melee/SharedMeleeWeaponSystem.cs @@ -574,7 +574,7 @@ public abstract class SharedMeleeWeaponSystem : EntitySystem var direction = targetMap.Position - userPos; var distance = Math.Min(component.Range, direction.Length()); - var damage = GetDamage(meleeUid, user, component) * 0.70f; + var damage = GetDamage(meleeUid, user, component) * 0.5f; var entities = GetEntityList(ev.Entities); // WD EDIT diff --git a/Content.Shared/_White/Animations/SharedFlipOnHitSystem.cs b/Content.Shared/_White/Animations/SharedFlipOnHitSystem.cs new file mode 100644 index 0000000000..8bae40233e --- /dev/null +++ b/Content.Shared/_White/Animations/SharedFlipOnHitSystem.cs @@ -0,0 +1,40 @@ +using Content.Shared.Item.ItemToggle.Components; +using Content.Shared.Weapons.Melee.Events; +using Robust.Shared.Serialization; +using Robust.Shared.Timing; + +namespace Content.Shared._White.Animations; + +public abstract class SharedFlipOnHitSystem : EntitySystem +{ + [Dependency] private readonly IGameTiming _timing = default!; + + public override void Initialize() + { + base.Initialize(); + + SubscribeLocalEvent(OnHit); + } + + private void OnHit(Entity ent, ref MeleeHitEvent args) + { + if (!_timing.IsFirstTimePredicted) + return; + + if (args.HitEntities.Count == 0) + return; + + if (TryComp(ent, out ItemToggleComponent? itemToggle) && !itemToggle.Activated) + return; + + PlayAnimation(args.User); + } + + protected abstract void PlayAnimation(EntityUid user); +} + +[Serializable, NetSerializable] +public sealed class FlipOnHitEvent(NetEntity user) : EntityEventArgs +{ + public NetEntity User = user; +} diff --git a/Resources/Prototypes/Damage/modifier_sets.yml b/Resources/Prototypes/Damage/modifier_sets.yml index 8447f5d64e..682f23767d 100644 --- a/Resources/Prototypes/Damage/modifier_sets.yml +++ b/Resources/Prototypes/Damage/modifier_sets.yml @@ -241,7 +241,7 @@ - type: damageModifierSet id: BloodlossHuman coefficients: - Blunt: 0.08 + Blunt: 0.05 Slash: 0.25 Piercing: 0.2 Shock: 0.0 diff --git a/Resources/Prototypes/Entities/Objects/Fun/toys.yml b/Resources/Prototypes/Entities/Objects/Fun/toys.yml index 5b61aec5f2..5ca48cbbe0 100644 --- a/Resources/Prototypes/Entities/Objects/Fun/toys.yml +++ b/Resources/Prototypes/Entities/Objects/Fun/toys.yml @@ -1281,8 +1281,6 @@ sprite: Objects/Weapons/Melee/double_esword.rsi - type: Wieldable - type: ToggleableWielded - - type: StaminaDamageOnHit - damage: 16 - type: FlipOnHit - type: Construction deconstructionTarget: null