Skip to content

Commit b9e5d8f

Browse files
authored
Merge pull request #315 from project-fika/1.2.2-dev
1.2.2 dev
2 parents 926264f + 81d44a4 commit b9e5d8f

File tree

13 files changed

+141
-201
lines changed

13 files changed

+141
-201
lines changed

Fika.Core/Coop/GameMode/CoopGame.cs

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1518,6 +1518,11 @@ private async Task<LocalPlayer> CreateLocalPlayer()
15181518
LocalPlayer myPlayer;
15191519
try
15201520
{
1521+
if (Profile_0.Side != EPlayerSide.Savage)
1522+
{
1523+
GenerateNewDogTagId();
1524+
}
1525+
15211526
myPlayer = await vmethod_3(GameWorld_0, num, spawnPoint.Position, spawnPoint.Rotation, "Player", "", EPointOfView.FirstPerson,
15221527
Profile_0, false, UpdateQueue, eupdateMode, Player.EUpdateMode.Auto,
15231528
BackendConfigAbstractClass.Config.CharacterController.ClientPlayerMode,
@@ -1539,6 +1544,25 @@ private async Task<LocalPlayer> CreateLocalPlayer()
15391544
return myPlayer;
15401545
}
15411546

1547+
/// <summary>
1548+
/// Temporary workaround since SPT does not generate a unique ID >3.11 for the dogtag
1549+
/// </summary>
1550+
private void GenerateNewDogTagId()
1551+
{
1552+
Item dogTag = Profile_0.Inventory.Equipment.GetSlot(EquipmentSlot.Dogtag).ContainedItem;
1553+
if (dogTag != null)
1554+
{
1555+
Traverse.Create(dogTag).Field<string>("<Id>k__BackingField").Value = MongoID.Generate(true);
1556+
#if DEBUG
1557+
Logger.LogWarning("Generated new ID for DogTag");
1558+
#endif
1559+
}
1560+
else
1561+
{
1562+
Logger.LogError("Could not find DogTag when generating new ID!");
1563+
}
1564+
}
1565+
15421566
private async Task InitExfils()
15431567
{
15441568
SetMatchmakerStatus(LocaleUtils.UI_RETRIEVE_EXFIL_DATA.Localized());
@@ -1586,7 +1610,10 @@ private async Task WaitForHostToStart()
15861610
GameObject startButton = null;
15871611
if (isServer)
15881612
{
1589-
startButton = CreateStartButton() ?? throw new NullReferenceException("Start button could not be created!");
1613+
if (!FikaBackendUtils.IsHeadless)
1614+
{
1615+
startButton = CreateStartButton() ?? throw new NullReferenceException("Start button could not be created!");
1616+
}
15901617
FikaServer server = Singleton<FikaServer>.Instance;
15911618
server.RaidInitialized = true;
15921619

Fika.Core/Coop/Players/ObservedCoopPlayer.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1101,7 +1101,10 @@ public void SetInventory(GClass1693 inventoryDescriptor)
11011101
}
11021102
}
11031103

1104-
RefreshSlotViews();
1104+
if (!FikaBackendUtils.IsHeadless)
1105+
{
1106+
RefreshSlotViews();
1107+
}
11051108
}
11061109

11071110
private void RefreshSlotViews()

Fika.Core/FikaPlugin.cs

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
using System.Net.NetworkInformation;
3838
using System.Net.Sockets;
3939
using System.Reflection;
40+
using System.Text;
4041
using System.Threading.Tasks;
4142
using UnityEngine;
4243

@@ -55,7 +56,7 @@ namespace Fika.Core
5556
[BepInDependency("com.SPT.debugging", BepInDependency.DependencyFlags.HardDependency)] // This is used so that we guarantee to load after spt-debugging, that way we can disable its patches
5657
public class FikaPlugin : BaseUnityPlugin
5758
{
58-
public const string FikaVersion = "1.2.1";
59+
public const string FikaVersion = "1.2.2";
5960
public static FikaPlugin Instance;
6061
public static string EFTVersionMajor { get; internal set; }
6162
public static string ServerModVersion { get; private set; }
@@ -109,7 +110,7 @@ public ManualLogSource FikaLogger
109110
#region config values
110111

111112
// Hidden
112-
public static ConfigEntry<bool> AcceptedTOS { get; set; }
113+
public static ConfigEntry<string> LastVersion { get; set; }
113114

114115
//Advanced
115116
public static ConfigEntry<bool> OfficialVersion { get; set; }
@@ -238,11 +239,6 @@ protected void Awake()
238239
GetNatPunchServerConfig();
239240
EnableFikaPatches();
240241
EnableTranspilers();
241-
242-
#if GOLDMASTER
243-
new TOS_Patch().Enable();
244-
#endif
245-
246242
DisableSPTPatches();
247243
FixSPTBugPatches();
248244
EnableOverridePatches();
@@ -406,7 +402,7 @@ private IEnumerator RunChecks()
406402
{
407403
yield return null;
408404
}
409-
405+
410406
WanIP = addressTask.Result;
411407

412408
yield return new WaitForSeconds(5);
@@ -511,10 +507,24 @@ private void SetupConfig()
511507
{
512508
bool failed = false;
513509
List<string> headers = [];
510+
514511
// Hidden
515512

516-
AcceptedTOS = Config.Bind("Hidden", "Accepted TOS", false,
517-
new ConfigDescription("Has accepted TOS", tags: new ConfigurationManagerAttributes() { Browsable = false }));
513+
LastVersion = Config.Bind("Hidden", "Last Version", "0",
514+
new ConfigDescription("Last loaded version of Fika", tags: new ConfigurationManagerAttributes() { Browsable = false }));
515+
516+
#if GOLDMASTER
517+
if (LastVersion.Value != FikaVersion)
518+
{
519+
Singleton<PreloaderUI>.Instance.ShowFikaMessage("FIKA", LocaleUtils.UI_TOS_LONG.Localized(), ErrorScreen.EButtonType.QuitButton, 15f,
520+
null, () =>
521+
{
522+
LastVersion.Value = FikaVersion;
523+
});
524+
525+
526+
}
527+
#endif
518528

519529
// Advanced
520530

Fika.Core/Networking/FikaClient.cs

Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,6 @@ private void RegisterPacketsAndTypes()
236236
RegisterPacket<HealthSyncPacket>(OnHealthSyncPacketReceived);
237237
RegisterPacket<GenericPacket>(OnGenericPacketReceived);
238238
RegisterPacket<SendCharacterPacket>(OnSendCharacterPacketReceived);
239-
RegisterPacket<AssignNetIdPacket>(OnAssignNetIdPacketReceived);
240239
RegisterPacket<OperationCallbackPacket>(OnOperationCallbackPacketReceived);
241240
RegisterPacket<TextMessagePacket>(OnTextMessagePacketReceived);
242241
RegisterPacket<QuestConditionPacket>(OnQuestConditionPacketReceived);
@@ -859,30 +858,6 @@ private void OnOperationCallbackPacketReceived(OperationCallbackPacket packet)
859858
}
860859
}
861860

862-
private void OnAssignNetIdPacketReceived(AssignNetIdPacket packet)
863-
{
864-
FikaPlugin.Instance.FikaLogger.LogInfo($"OnAssignNetIdPacketReceived: Assigned NetId {packet.NetId} to my own client.");
865-
NetId = packet.NetId;
866-
int i = -1;
867-
foreach (KeyValuePair<int, CoopPlayer> player in coopHandler.Players)
868-
{
869-
if (player.Value == MyPlayer)
870-
{
871-
i = player.Key;
872-
break;
873-
}
874-
}
875-
876-
if (i == -1)
877-
{
878-
FikaPlugin.Instance.FikaLogger.LogError("OnAssignNetIdPacketReceived: Could not find own player among players list");
879-
return;
880-
}
881-
882-
coopHandler.Players.Remove(i);
883-
coopHandler.Players[packet.NetId] = MyPlayer;
884-
}
885-
886861
private void OnSendCharacterPacketReceived(SendCharacterPacket packet)
887862
{
888863
if (coopHandler == null)

Fika.Core/Networking/FikaServer.cs

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ public CoopHandler CoopHandler
127127
private CancellationTokenSource natIntroduceRoutineCts;
128128
private int statisticsCounter;
129129
private Dictionary<Profile, bool> visualProfiles;
130+
private Dictionary<int, int> cachedConnections;
130131

131132
internal FikaVOIPServer VOIPServer { get; set; }
132133
internal FikaVOIPClient VOIPClient { get; set; }
@@ -153,6 +154,7 @@ public async void Init()
153154
dataWriter = new();
154155
externalIp = NetUtils.GetLocalIp(LocalAddrType.IPv4);
155156
statisticsCounter = 0;
157+
cachedConnections = [];
156158
logger = BepInEx.Logging.Logger.CreateLogSource("Fika.Server");
157159

158160
ReadyClients = 0;
@@ -611,7 +613,7 @@ public void SendAirdropContainerData(EAirdropType containerType, Item item, int
611613
{
612614
ObjectId = ObjectId,
613615
IsStatic = false,
614-
Position = containerObject != null ? containerObject.transform.position : Vector3.zero,
616+
Position = new(0, -1000, 0),
615617
Rotation = containerObject != null ? containerObject.transform.rotation : Quaternion.identity,
616618
AirdropType = containerType,
617619
AirdropItem = item,
@@ -788,6 +790,11 @@ private void OnReconnectPacketReceived(ReconnectPacket packet, NetPeer peer)
788790

789791
foreach (CoopPlayer player in coopHandler.Players.Values)
790792
{
793+
if (player.ProfileId == packet.ProfileId)
794+
{
795+
continue;
796+
}
797+
791798
SendCharacterPacket characterPacket = new(new()
792799
{
793800
Profile = player.Profile,
@@ -815,19 +822,6 @@ private void OnReconnectPacketReceived(ReconnectPacket packet, NetPeer peer)
815822
SendDataToPeer(peer, ref characterPacket, DeliveryMethod.ReliableOrdered);
816823
}
817824

818-
foreach (CoopPlayer player in coopHandler.HumanPlayers)
819-
{
820-
if (player.ProfileId == packet.ProfileId)
821-
{
822-
AssignNetIdPacket assignPacket = new()
823-
{
824-
NetId = player.NetId
825-
};
826-
827-
SendDataToPeer(peer, ref assignPacket, DeliveryMethod.ReliableOrdered);
828-
}
829-
}
830-
831825
ReconnectPacket finishPacket = new()
832826
{
833827
Type = EReconnectDataType.Finished
@@ -1287,10 +1281,17 @@ public void OnPeerConnected(NetPeer peer)
12871281

12881282
HasHadPeer = true;
12891283

1284+
int hash = peer.Address.GetHashCode();
1285+
if (!cachedConnections.TryGetValue(hash, out int netId))
1286+
{
1287+
netId = PopNetId();
1288+
cachedConnections.Add(hash, netId);
1289+
}
1290+
12901291
NetworkSettingsPacket packet = new()
12911292
{
12921293
SendRate = sendRate,
1293-
NetId = PopNetId(),
1294+
NetId = netId,
12941295
AllowVOIP = AllowVOIP
12951296
};
12961297
SendDataToPeer(peer, ref packet, DeliveryMethod.ReliableOrdered);

Fika.Core/Networking/Packets/Communication/AllCharacterRequestPacket.cs

Lines changed: 0 additions & 60 deletions
This file was deleted.

Fika.Core/Networking/Packets/Communication/AssignNetIdPacket.cs

Lines changed: 0 additions & 19 deletions
This file was deleted.

Fika.Core/Networking/Packets/GameWorld/SpawnSyncObjectSubPackets.cs

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
using EFT.InventoryLogic;
66
using EFT.SynchronizableObjects;
77
using Fika.Core.Coop.Players;
8+
using Fika.Core.Coop.Utils;
89
using LiteNetLib.Utils;
910
using System;
1011
using UnityEngine;
@@ -155,10 +156,22 @@ public void Execute(CoopPlayer player)
155156
return;
156157
}
157158

159+
#if DEBUG
160+
FikaGlobals.LogWarning($"Spawning airdrop at {Position} with id {ObjectId}");
161+
#endif
162+
158163
AirdropSynchronizableObject syncObject = (AirdropSynchronizableObject)processor.TakeFromPool(SynchronizableObjectType.AirDrop);
159164
syncObject.ObjectId = ObjectId;
160165
syncObject.transform.position = Position;
161166
syncObject.transform.rotation = Rotation;
167+
if (syncObject.Logic is AirdropLogicClass airdropLogicClass)
168+
{
169+
airdropLogicClass.vector3_0 = Position;
170+
}
171+
else
172+
{
173+
FikaGlobals.LogWarning("AirdropSynchronizableObject logic was not of type AirdropLogicClass!");
174+
}
162175
syncObject.AirdropType = AirdropType;
163176
LootableContainer container = syncObject.GetComponentInChildren<LootableContainer>().gameObject.GetComponentInChildren<LootableContainer>();
164177
container.enabled = true;

0 commit comments

Comments
 (0)