Skip to content

Commit

Permalink
Merge pull request #77 from ArchangelWTF/fix/backport-3.9-fixes
Browse files Browse the repository at this point in the history
Backport various 3.9 fixes
  • Loading branch information
Lacyway authored Jun 27, 2024
2 parents b9a0094 + ad03065 commit c69bff5
Show file tree
Hide file tree
Showing 11 changed files with 93 additions and 115 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -384,6 +384,23 @@ public override void SetLightsState(GStruct163[] lightsStates, bool force = fals
}

public override void SetScopeMode(GStruct164[] scopeStates)
{
SendScopeStates(scopeStates);
base.SetScopeMode(scopeStates);
}
public override void OpticCalibrationSwitchUp(GStruct164[] scopeStates)
{
SendScopeStates(scopeStates);
base.OpticCalibrationSwitchUp(scopeStates);
}

public override void OpticCalibrationSwitchDown(GStruct164[] scopeStates)
{
SendScopeStates(scopeStates);
base.OpticCalibrationSwitchDown(scopeStates);
}

private void SendScopeStates(GStruct164[] scopeStates)
{
if (!CurrentOperation.CanChangeScopeStates(scopeStates))
{
Expand All @@ -399,8 +416,6 @@ public override void SetScopeMode(GStruct164[] scopeStates)
GStruct164 = scopeStates
}
});

base.SetScopeMode(scopeStates);
}

public override void ShotMisfired(BulletClass ammo, Weapon.EMalfunctionState malfunctionState, float overheat)
Expand Down
3 changes: 3 additions & 0 deletions Fika.Core/Coop/Custom/FikaDynamicAI.cs
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,8 @@ private void DeactivateBot(CoopBot bot)
bot.AIData.BotOwner.DecisionQueue.Clear();
bot.AIData.BotOwner.Memory.GoalEnemy = null;
bot.AIData.BotOwner.PatrollingData.Pause();
bot.AIData.BotOwner.ShootData.EndShoot();
bot.ActiveHealthController.PauseAllEffects();
bot.gameObject.SetActive(false);

if (!disabledBots.Contains(bot))
Expand All @@ -139,6 +141,7 @@ private void ActivateBot(CoopBot bot)
bot.gameObject.SetActive(true);
bot.AIData.BotOwner.PatrollingData.Unpause();
bot.AIData.BotOwner.PostActivate();
bot.ActiveHealthController.UnpauseAllEffects();
disabledBots.Remove(bot);
}

Expand Down
32 changes: 17 additions & 15 deletions Fika.Core/Coop/GameMode/CoopGame.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1597,10 +1597,19 @@ private void HealthController_DiedEvent(EDamageType obj)

if (FikaPlugin.Instance.ForceSaveOnDeath)
{
SavePlayer((CoopPlayer)gparam_0.Player, MyExitStatus, null, true);
StartCoroutine(SaveOnDeathRoutine());
}
}

private IEnumerator SaveOnDeathRoutine()
{
Task saveTask = SavePlayer((CoopPlayer)gparam_0.Player, MyExitStatus, null, true);
while (!saveTask.IsCompleted)
{
yield return null;
}
}

public override void Stop(string profileId, ExitStatus exitStatus, string exitName, float delay = 0f)
{
Logger.LogInfo("CoopGame::Stop");
Expand Down Expand Up @@ -1726,11 +1735,11 @@ public override void Stop(string profileId, ExitStatus exitStatus, string exitNa
GClass549.Config.UseSpiritPlayer = false;
}

private void SavePlayer(CoopPlayer player, ExitStatus exitStatus, string exitName, bool fromDeath)
private Task SavePlayer(CoopPlayer player, ExitStatus exitStatus, string exitName, bool fromDeath)
{
if (hasSaved)
{
return;
return Task.CompletedTask;
}

if (fromDeath)
Expand Down Expand Up @@ -1758,6 +1767,7 @@ private void SavePlayer(CoopPlayer player, ExitStatus exitStatus, string exitNam
RequestHandler.PutJson("/raid/profile/save", SaveRequest.ToJson(Converters.AddItem(new NotesJsonConverter()).ToArray()));

hasSaved = true;
return Task.CompletedTask;
}

private void StopFromError(string profileId, ExitStatus exitStatus)
Expand Down Expand Up @@ -1978,12 +1988,8 @@ public void HandleExit()
MonoBehaviourSingleton<BetterAudio>.Instance.FadeOutVolumeAfterRaid();
StaticManager staticManager = StaticManager.Instance;
float num = delay;
Action action;
if ((action = EndAction) == null)
{
action = (EndAction = new Action(FireCallback));
}
staticManager.WaitSeconds(num, action);
EndAction = new Action(FireCallback);
staticManager.WaitSeconds(num, EndAction);
}

private void FireCallback()
Expand Down Expand Up @@ -2017,12 +2023,8 @@ public void ExitOverride()
}
MonoBehaviour instance2 = StaticManager.Instance;
float num = delay;
Action action;
if ((action = action_0) == null)
{
action = action_0 = new Action(method_1);
}
instance2.WaitSeconds(num, action);
action_0 = new Action(method_1);
instance2.WaitSeconds(num, action_0);
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,7 +134,9 @@ public override void OnPlayerDead()
{
triggerPressed = false;
SetTriggerPressed(false);
WeaponSoundPlayer.enabled = false;

needsReset = false;
WeaponSoundPlayer.OnBreakLoop();

coopPlayer.HandsAnimator.Animator.Update(Time.fixedDeltaTime);
ManualUpdate(Time.fixedDeltaTime);
Expand All @@ -143,9 +145,23 @@ public override void OnPlayerDead()
CurrentOperation.FastForward();
}

StartCoroutine(BreakFiringLoop());

base.OnPlayerDead();
}

private IEnumerator BreakFiringLoop()
{
Traverse<bool> isFiring = Traverse.Create(WeaponSoundPlayer).Field<bool>("_isFiring");
int attempts = 0;
while (isFiring.Value && attempts < 10)
{
yield return new WaitForEndOfFrame();
WeaponSoundPlayer.OnBreakLoop();
attempts++;
}
}

public override void SetScopeMode(GStruct164[] scopeStates)
{
_player.ProceduralWeaponAnimation.ObservedCalibration();
Expand Down Expand Up @@ -222,7 +238,10 @@ public void HandleFirearmPacket(in WeaponPacket packet, InventoryControllerClass
}
else if (packet.ShotInfoPacket.ShotType == EShotType.DryFire)
{
FirearmsAnimator.SetFire(true);
DryShot();
hasFired = true;
lastFireTime = Time.time;
}
else if (packet.ShotInfoPacket.ShotType == EShotType.RegularShot)
{
Expand Down
39 changes: 24 additions & 15 deletions Fika.Core/Coop/PacketHandlers/PacketReceiver.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
// © 2024 Lacyway All Rights Reserved

using Comfort.Common;
using EFT.UI;
using Fika.Core.Coop.Matchmaker;
using Fika.Core.Coop.Players;
using Fika.Core.Networking;
Expand All @@ -23,7 +24,7 @@ public class PacketReceiver : MonoBehaviour
public Queue<CommonPlayerPacket> CommonPlayerPackets { get; private set; } = new(50);
public Queue<HealthSyncPacket> HealthSyncPackets { get; private set; } = new(50);

private void Awake()
protected void Awake()
{
player = GetComponent<CoopPlayer>();
if (!player.IsYourPlayer)
Expand All @@ -32,7 +33,7 @@ private void Awake()
}
}

private void Start()
protected void Start()
{
if (MatchmakerAcceptPatches.IsServer)
{
Expand All @@ -43,22 +44,22 @@ private void Start()
Client = Singleton<FikaClient>.Instance;
}

LastState = new(player.NetId, player.Position, player.Rotation, player.HeadRotation,
player.LastDirection, player.CurrentManagedState.Name, player.MovementContext.Tilt,
player.MovementContext.Step, player.CurrentAnimatorStateIndex, player.MovementContext.SmoothedCharacterMovementSpeed,
player.IsInPronePose, player.PoseLevel, player.MovementContext.IsSprintEnabled, player.Physical.SerializationStruct,
player.MovementContext.BlindFire, player.observedOverlap, player.leftStanceDisabled, player.MovementContext.IsGrounded,
false, 0, Vector3.zero);
LastState = new(player.NetId, player.Position, player.Rotation, player.HeadRotation, player.LastDirection,
player.CurrentManagedState.Name, player.MovementContext.Tilt, player.MovementContext.Step,
player.CurrentAnimatorStateIndex, player.MovementContext.SmoothedCharacterMovementSpeed,
player.IsInPronePose, player.PoseLevel, player.MovementContext.IsSprintEnabled,
player.Physical.SerializationStruct, player.MovementContext.BlindFire, player.observedOverlap,
player.leftStanceDisabled, player.MovementContext.IsGrounded, false, 0, Vector3.zero);

NewState = new(player.NetId, player.Position, player.Rotation, player.HeadRotation,
player.LastDirection, player.CurrentManagedState.Name, player.MovementContext.Tilt,
player.MovementContext.Step, player.CurrentAnimatorStateIndex, player.MovementContext.SmoothedCharacterMovementSpeed,
player.IsInPronePose, player.PoseLevel, player.MovementContext.IsSprintEnabled, player.Physical.SerializationStruct,
player.MovementContext.BlindFire, player.observedOverlap, player.leftStanceDisabled, player.MovementContext.IsGrounded,
false, 0, Vector3.zero);
NewState = new(player.NetId, player.Position, player.Rotation, player.HeadRotation, player.LastDirection,
player.CurrentManagedState.Name, player.MovementContext.Tilt, player.MovementContext.Step,
player.CurrentAnimatorStateIndex, player.MovementContext.SmoothedCharacterMovementSpeed,
player.IsInPronePose, player.PoseLevel, player.MovementContext.IsSprintEnabled,
player.Physical.SerializationStruct, player.MovementContext.BlindFire, player.observedOverlap,
player.leftStanceDisabled, player.MovementContext.IsGrounded, false, 0, Vector3.zero);
}

private void Update()
protected void Update()
{
if (observedPlayer != null)
{
Expand All @@ -74,6 +75,14 @@ private void Update()
observedPlayer.SetAggressor(packet.KillerId, packet.KillerWeaponId);
observedPlayer.SetInventory(packet.Equipment);
observedPlayer.RagdollPacket = packet.RagdollPacket;
if (packet.TriggerZones.Length > 0)
{
observedPlayer.TriggerZones.Clear();
foreach (string triggerZone in packet.TriggerZones)
{
observedPlayer.TriggerZones.Add(triggerZone);
}
}
}
observedPlayer.NetworkHealthController.HandleSyncPacket(packet.Packet);
}
Expand Down
24 changes: 7 additions & 17 deletions Fika.Core/Coop/Players/CoopBot.cs
Original file line number Diff line number Diff line change
Expand Up @@ -180,23 +180,6 @@ public override void OnDead(EDamageType damageType)
SetupDogTag();
}

/*DeathPacket packet = new(ProfileId)
{
RagdollPacket = new()
{
BodyPartColliderType = LastDamageInfo.BodyPartColliderType,
Direction = LastDamageInfo.Direction,
Point = LastDamageInfo.HitPoint,
Force = _corpseAppliedForce,
OverallVelocity = Velocity
},
HasInventory = true,
Equipment = Inventory.Equipment
};
PacketSender?.Server?.SendDataToAll(new NetDataWriter(), ref packet, LiteNetLib.DeliveryMethod.ReliableOrdered);
PacketSender?.Server?.NetServer?.TriggerUpdate();*/

if (FikaPlugin.ShowNotifications.Value)
{
if (IsBoss(Profile.Info.Settings.Role, out string name) && LastAggressor != null)
Expand Down Expand Up @@ -241,6 +224,13 @@ public override void OnDead(EDamageType damageType)
}
}
}

CoopGame coopGame = (CoopGame)Singleton<IBotGame>.Instance;
if (coopGame.Bots.ContainsKey(ProfileId))
{
coopGame.Bots.Remove(ProfileId);
}

base.OnDead(damageType);
}

Expand Down
11 changes: 2 additions & 9 deletions Fika.Core/Coop/Players/CoopPlayer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -534,7 +534,8 @@ public HealthSyncPacket SetupDeathPacket(GStruct346 packet)
Force = _corpseAppliedForce,
OverallVelocity = Velocity
},
Equipment = Equipment
Equipment = Equipment,
TriggerZones = TriggerZones.Count > 0 ? [.. TriggerZones] : null,
};
}

Expand Down Expand Up @@ -1303,14 +1304,6 @@ public virtual void HandleDamagePacket(DamagePacket packet)
ClientApplyShot(damageInfo, packet.DamageInfo.BodyPartType, packet.DamageInfo.ColliderType, packet.DamageInfo.ArmorPlateCollider);
}

public void HandleDeathPatchet(DeathPacket packet)
{
if (packet.HasInventory)
{
SetInventory(packet.Equipment);
}
}

public virtual void SetupDogTag()
{
if (LastAggressor != null)
Expand Down
9 changes: 0 additions & 9 deletions Fika.Core/Networking/FikaClient.cs
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,6 @@ protected void Start()
packetProcessor.SubscribeNetSerializable<WeatherPacket>(OnWeatherPacketReceived);
packetProcessor.SubscribeNetSerializable<BTRPacket>(OnBTRPacketReceived);
packetProcessor.SubscribeNetSerializable<BTRInteractionPacket>(OnBTRInteractionPacketReceived);
packetProcessor.SubscribeNetSerializable<DeathPacket>(OnDeathPacketReceived);
packetProcessor.SubscribeNetSerializable<MinePacket>(OnMinePacketReceived);
packetProcessor.SubscribeNetSerializable<BorderZonePacket>(OnBorderZonePacketReceived);
packetProcessor.SubscribeNetSerializable<SendCharacterPacket>(OnSendCharacterPacketReceived);
Expand Down Expand Up @@ -227,14 +226,6 @@ private void OnMinePacketReceived(MinePacket packet)
}
}

private void OnDeathPacketReceived(DeathPacket packet)
{
if (Players.TryGetValue(packet.NetId, out CoopPlayer playerToApply))
{
playerToApply.HandleDeathPatchet(packet);
}
}

private void OnBTRInteractionPacketReceived(BTRInteractionPacket packet)
{
if (Players.TryGetValue(packet.NetId, out CoopPlayer player))
Expand Down
12 changes: 0 additions & 12 deletions Fika.Core/Networking/FikaServer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,6 @@ public async void Start()
packetProcessor.SubscribeNetSerializable<WeatherPacket, NetPeer>(OnWeatherPacketReceived);
packetProcessor.SubscribeNetSerializable<BTRInteractionPacket, NetPeer>(OnBTRInteractionPacketReceived);
packetProcessor.SubscribeNetSerializable<BTRServicePacket, NetPeer>(OnBTRServicePacketReceived);
packetProcessor.SubscribeNetSerializable<DeathPacket, NetPeer>(OnDeathPacketReceived);
packetProcessor.SubscribeNetSerializable<MinePacket, NetPeer>(OnMinePacketReceived);
packetProcessor.SubscribeNetSerializable<BorderZonePacket, NetPeer>(OnBorderZonePacketReceived);
packetProcessor.SubscribeNetSerializable<SendCharacterPacket, NetPeer>(OnSendCharacterPacketReceived);
Expand Down Expand Up @@ -216,17 +215,6 @@ private void OnMinePacketReceived(MinePacket packet, NetPeer peer)
}
}

private void OnDeathPacketReceived(DeathPacket packet, NetPeer peer)
{
if (Players.TryGetValue(packet.NetId, out CoopPlayer playerToApply))
{
playerToApply.HandleDeathPatchet(packet);
}

_dataWriter.Reset();
SendDataToAll(_dataWriter, ref packet, DeliveryMethod.ReliableOrdered, peer);
}

private void OnBTRServicePacketReceived(BTRServicePacket packet, NetPeer peer)
{
if (CoopHandler.serverBTR != null)
Expand Down
35 changes: 0 additions & 35 deletions Fika.Core/Networking/Packets/Player/DeathPacket.cs

This file was deleted.

Loading

0 comments on commit c69bff5

Please sign in to comment.