Фиксы (#332)

* - 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.
This commit is contained in:
Aviu00
2024-06-06 10:22:49 +00:00
committed by GitHub
parent 65b262174a
commit ad65bd1e58
9 changed files with 87 additions and 36 deletions

View File

@@ -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<FlipOnHitComponent, MeleeHitEvent>(OnHit);
SubscribeLocalEvent<FlippingComponent, AnimationCompletedEvent>(OnAnimationComplete);
SubscribeAllEvent<FlipOnHitEvent>(ev => PlayAnimation(GetEntity(ev.User)));
}
private void OnAnimationComplete(Entity<FlippingComponent> ent, ref AnimationCompletedEvent args)
@@ -29,28 +27,17 @@ public sealed class FlipOnHitSystem : EntitySystem
PlayAnimation(ent);
}
private void OnHit(Entity<FlipOnHitComponent> 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<FlippingComponent>(args.User);
EnsureComp<FlippingComponent>(user);
return;
}
PlayAnimation(args.User);
}
private void PlayAnimation(EntityUid user)
{
RemComp<FlippingComponent>(user);
var baseAngle = Angle.Zero;

View File

@@ -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;

View File

@@ -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<ActorComponent>(user, out var actor))
filter.RemovePlayer(actor.PlayerSession);
RaiseNetworkEvent(new FlipOnHitEvent(GetNetEntity(user)), filter);
}
}

View File

@@ -123,25 +123,34 @@ public sealed class CultRuleSystem : GameRuleSystem<CultRuleComponent>
private void OnNarsieSummon(CultNarsieSummoned ev)
{
var query = EntityQueryEnumerator<MobStateComponent, MindContainerComponent, CultistComponent>();
var query =
EntityQueryEnumerator<MobStateComponent, MindContainerComponent, CultistComponent, TransformComponent>();
List<Entity<MindContainerComponent, TransformComponent>> 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<CultRuleComponent>
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()

View File

@@ -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<DamageTypePrototype>("Slash"), damage);
}
}

View File

@@ -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

View File

@@ -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<FlipOnHitComponent, MeleeHitEvent>(OnHit);
}
private void OnHit(Entity<FlipOnHitComponent> 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;
}

View File

@@ -241,7 +241,7 @@
- type: damageModifierSet
id: BloodlossHuman
coefficients:
Blunt: 0.08
Blunt: 0.05
Slash: 0.25
Piercing: 0.2
Shock: 0.0

View File

@@ -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