Skip to content

Commit 2ee0af4

Browse files
authored
Merge pull request #328 from project-fika/1.2.5-dev
1.2.5 dev > main
2 parents 625da03 + d4977ca commit 2ee0af4

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+752
-353
lines changed
1.62 KB
Binary file not shown.

Fika.Core/Coop/BotClasses/CoopBotHealthController.cs

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,36 @@ public override bool _sendNetworkSyncPackets
1919
}
2020
}
2121

22+
private bool ShouldSend(NetworkHealthSyncPacketStruct.ESyncType syncType)
23+
{
24+
switch (syncType)
25+
{
26+
case NetworkHealthSyncPacketStruct.ESyncType.AddEffect:
27+
case NetworkHealthSyncPacketStruct.ESyncType.RemoveEffect:
28+
case NetworkHealthSyncPacketStruct.ESyncType.IsAlive:
29+
case NetworkHealthSyncPacketStruct.ESyncType.BodyHealth:
30+
case NetworkHealthSyncPacketStruct.ESyncType.ApplyDamage:
31+
case NetworkHealthSyncPacketStruct.ESyncType.DestroyedBodyPart:
32+
case NetworkHealthSyncPacketStruct.ESyncType.EffectStrength:
33+
case NetworkHealthSyncPacketStruct.ESyncType.EffectNextState:
34+
case NetworkHealthSyncPacketStruct.ESyncType.EffectMedResource:
35+
case NetworkHealthSyncPacketStruct.ESyncType.EffectStimulatorBuff:
36+
return true;
37+
case NetworkHealthSyncPacketStruct.ESyncType.EffectStateTime:
38+
case NetworkHealthSyncPacketStruct.ESyncType.Energy:
39+
case NetworkHealthSyncPacketStruct.ESyncType.Hydration:
40+
case NetworkHealthSyncPacketStruct.ESyncType.Temperature:
41+
case NetworkHealthSyncPacketStruct.ESyncType.DamageCoeff:
42+
case NetworkHealthSyncPacketStruct.ESyncType.HealthRates:
43+
case NetworkHealthSyncPacketStruct.ESyncType.HealerDone:
44+
case NetworkHealthSyncPacketStruct.ESyncType.BurnEyes:
45+
case NetworkHealthSyncPacketStruct.ESyncType.Poison:
46+
case NetworkHealthSyncPacketStruct.ESyncType.StaminaCoeff:
47+
default:
48+
return false;
49+
}
50+
}
51+
2252
public override void SendNetworkSyncPacket(NetworkHealthSyncPacketStruct packet)
2353
{
2454
if (packet.SyncType == NetworkHealthSyncPacketStruct.ESyncType.IsAlive && !packet.Data.IsAlive.IsAlive)
@@ -28,7 +58,7 @@ public override void SendNetworkSyncPacket(NetworkHealthSyncPacketStruct packet)
2858
return;
2959
}
3060

31-
if (packet.SyncType is NetworkHealthSyncPacketStruct.ESyncType.DestroyedBodyPart or NetworkHealthSyncPacketStruct.ESyncType.ApplyDamage or NetworkHealthSyncPacketStruct.ESyncType.BodyHealth)
61+
if (ShouldSend(packet.SyncType))
3262
{
3363
HealthSyncPacket netPacket = new()
3464
{

Fika.Core/Coop/ClientClasses/CoopClientInventoryController.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -135,12 +135,12 @@ private void RunClientOperation(BaseInventoryOperationClass operation, Callback
135135

136136
// Do not replicate quest operations / search operations
137137
// Check for GClass increments, ReadPolymorph
138-
if (operation is GClass3303 or GClass3307 or GClass3308 or GClass3309)
138+
if (operation is GClass3303)// or GClass3307 or GClass3308 or GClass3309)
139139
{
140140
base.vmethod_1(operation, callback);
141141
return;
142142
}
143-
143+
144144
EFTWriterClass eftWriter = new();
145145
ClientInventoryOperationHandler handler = new()
146146
{
Lines changed: 41 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,67 @@
11
using Fika.Core.Coop.GameMode;
2+
using Fika.Core.Coop.Players;
3+
using Fika.Core.Jobs;
24
using Fika.Core.Networking;
5+
using System.Collections.Generic;
6+
using Unity.Jobs;
37
using UnityEngine;
48

59
namespace Fika.Core.Coop.Components
610
{
711
public class BotStateManager : MonoBehaviour
812
{
9-
public delegate void UpdateAction();
10-
public event UpdateAction OnUpdate;
13+
private List<CoopBot> bots;
1114

12-
private int fixedUpdateCount;
13-
private int fixedUpdatesPerTick;
15+
private float updateCount;
16+
private float updatesPerTick;
17+
18+
public bool AddBot(CoopBot bot)
19+
{
20+
if (bots.Contains(bot))
21+
{
22+
return false;
23+
}
24+
25+
bots.Add(bot);
26+
return true;
27+
}
28+
29+
public bool RemoveBot(CoopBot bot)
30+
{
31+
return bots.Remove(bot);
32+
}
1433

1534
public static BotStateManager Create(CoopGame game, FikaServer server)
1635
{
1736
BotStateManager component = game.gameObject.AddComponent<BotStateManager>();
18-
component.fixedUpdateCount = 0;
19-
component.fixedUpdatesPerTick = Mathf.FloorToInt(60f / server.SendRate);
37+
component.updateCount = 0;
38+
component.updatesPerTick = 1f / server.SendRate;
39+
component.bots = [];
2040
return component;
2141
}
2242

23-
protected void FixedUpdate()
43+
protected void Update()
2444
{
25-
fixedUpdateCount++;
26-
if (fixedUpdateCount >= fixedUpdatesPerTick)
45+
updateCount += Time.unscaledDeltaTime;
46+
if (updateCount >= updatesPerTick)
2747
{
28-
OnUpdate?.Invoke();
29-
fixedUpdateCount = 0;
48+
for (int i = bots.Count - 1; i >= 0; i--)
49+
{
50+
CoopBot bot = bots[i];
51+
if (!bot.HealthController.IsAlive)
52+
{
53+
bots.Remove(bot);
54+
continue;
55+
}
56+
bot.BotPacketSender.SendPlayerState();
57+
}
58+
updateCount -= updatesPerTick;
3059
}
3160
}
3261

3362
protected void OnDestroy()
3463
{
35-
OnUpdate = null;
64+
bots.Clear();
3665
}
3766
}
3867
}

Fika.Core/Coop/Components/CoopHandler.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -418,6 +418,11 @@ private ObservedCoopPlayer SpawnObservedPlayer(SpawnObject spawnObject)
418418
return null;
419419
}
420420

421+
if (!isHeadlessProfile)
422+
{
423+
Singleton<IFikaNetworkManager>.Instance.ObservedCoopPlayers.Add(otherPlayer);
424+
}
425+
421426
otherPlayer.NetId = netId;
422427
#if DEBUG
423428
logger.LogInfo($"SpawnObservedPlayer: {profile.Nickname} spawning with NetId {netId}");

Fika.Core/Coop/Custom/BotDifficulties.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ public BotDifficulties()
2323
public BotSettingsComponents GetComponent(BotDifficulty botDifficulty, WildSpawnType role)
2424
{
2525
#if DEBUG
26-
FikaPlugin.Instance.FikaLogger.LogInfo($"Retrieving data for: {role}, difficulty: {botDifficulty}");
26+
FikaPlugin.Instance.FikaLogger.LogInfo($"Retrieving data for: {role}, difficulty: {botDifficulty}");
2727
#endif
2828
if (TryGetValue(role.ToString().ToLower(), out RoleData value))
2929
{

Fika.Core/Coop/Custom/FikaChat.cs

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
using Comfort.Common;
2+
using EFT;
3+
using EFT.InputSystem;
24
using EFT.UI;
35
using Fika.Core.Coop.Utils;
46
using Fika.Core.Networking;
57
using HarmonyLib;
68
using LiteNetLib.Utils;
9+
using System.Reflection;
710
using UnityEngine;
811

912
namespace Fika.Core.Coop.Custom
@@ -14,22 +17,44 @@ internal class FikaChat : MonoBehaviour
1417
private string nickname;
1518
private string chatText;
1619
private string textField;
20+
private string textFieldName;
1721
private bool show;
22+
private bool selectText;
1823
private bool isServer;
1924
private NetDataWriter writer;
2025
private UISoundsWrapper soundsWrapper;
26+
private InputManager manager;
27+
28+
private static readonly FieldInfo showMouseField = typeof(InputManager).GetField("bool_2",
29+
BindingFlags.Instance | BindingFlags.NonPublic);
2130

2231
protected void Awake()
2332
{
2433
windowRect = new(20, Screen.height - 260, 600, 250);
2534
nickname = FikaBackendUtils.PMCName;
2635
chatText = string.Empty;
2736
textField = string.Empty;
37+
textFieldName = "TextField";
2838
show = false;
2939
isServer = FikaBackendUtils.IsServer;
3040
writer = new();
3141
GUISounds guiSounds = Singleton<GUISounds>.Instance;
3242
soundsWrapper = Traverse.Create(guiSounds).Field<UISoundsWrapper>("uisoundsWrapper_0").Value;
43+
GameObject managerObj = GameObject.Find("___Input");
44+
if (managerObj != null)
45+
{
46+
InputManager inputManager = managerObj.GetComponent<InputManager>();
47+
if (inputManager != null)
48+
{
49+
manager = inputManager;
50+
}
51+
else
52+
{
53+
FikaGlobals.LogError("Could not find InputManager on the manager object");
54+
}
55+
return;
56+
}
57+
FikaGlobals.LogError("Could not find ___Input game object");
3358
}
3459

3560
protected void Update()
@@ -65,6 +90,25 @@ protected void OnGUI()
6590
private void ToggleVisibility()
6691
{
6792
show = !show;
93+
94+
if (show)
95+
{
96+
if (manager != null)
97+
{
98+
GamePlayerOwner.SetIgnoreInput(true);
99+
showMouseField.SetValue(manager, true);
100+
}
101+
selectText = true;
102+
}
103+
else
104+
{
105+
if (manager != null)
106+
{
107+
GamePlayerOwner.SetIgnoreInput(false);
108+
GamePlayerOwner.MyPlayer.MovementContext.IsAxesIgnored = false;
109+
}
110+
showMouseField.SetValue(manager, false);
111+
}
68112
}
69113

70114
private void SendMessage()
@@ -123,7 +167,13 @@ private void DrawWindow(int windowId)
123167
GUI.Label(rect, chatText);
124168
rect.y += rect.height;
125169
Rect textRect = new(rect.x, rect.y, rect.width - 55, 25);
170+
GUI.SetNextControlName(textFieldName);
126171
textField = GUI.TextField(textRect, textField);
172+
if (selectText)
173+
{
174+
GUI.FocusControl(textFieldName);
175+
selectText = false;
176+
}
127177
rect.x += 535;
128178
Rect buttonRect = new(rect.x, rect.y, 50, 25);
129179
if (GUI.Button(buttonRect, "SEND"))

0 commit comments

Comments
 (0)